@erpsquad/common 1.11.8 → 1.11.10
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 +2 -2
- package/dist/chunks/{DynamicDependentField-C0XXmMlG.esm.js → DynamicDependentField-DOGY6cA_.esm.js} +2 -2
- package/dist/chunks/{DynamicDependentField-C0XXmMlG.esm.js.map → DynamicDependentField-DOGY6cA_.esm.js.map} +1 -1
- package/dist/chunks/{DynamicDependentField-CQIfDDqc.js → DynamicDependentField-GTIwrPfP.js} +2 -2
- package/dist/chunks/{DynamicDependentField-CQIfDDqc.js.map → DynamicDependentField-GTIwrPfP.js.map} +1 -1
- package/dist/chunks/{ERPUIProvider-I4j_X_SD.esm.js → ERPUIProvider-Dz0s77BR.esm.js} +3 -3
- package/dist/chunks/{ERPUIProvider-I4j_X_SD.esm.js.map → ERPUIProvider-Dz0s77BR.esm.js.map} +1 -1
- package/dist/chunks/EditorSection-BLGcgQFm.esm.js +849 -0
- package/dist/chunks/EditorSection-BLGcgQFm.esm.js.map +1 -0
- package/dist/chunks/EditorSection-D6yaBfjP.js +848 -0
- package/dist/chunks/EditorSection-D6yaBfjP.js.map +1 -0
- package/dist/chunks/{FORMS-pxf6g6xE.esm.js → FORMS-CR_DlD1m.esm.js} +8 -8
- package/dist/chunks/{FORMS-pxf6g6xE.esm.js.map → FORMS-CR_DlD1m.esm.js.map} +1 -1
- package/dist/chunks/{FORMS-CUx32b_4.js → FORMS-EouVYay1.js} +5 -5
- package/dist/chunks/{FORMS-CUx32b_4.js.map → FORMS-EouVYay1.js.map} +1 -1
- package/dist/chunks/{FlexibleReduxExample-C-2qOGIw.esm.js → FlexibleReduxExample-B2e7Wa_S.esm.js} +4 -4
- package/dist/chunks/{FlexibleReduxExample-C-2qOGIw.esm.js.map → FlexibleReduxExample-B2e7Wa_S.esm.js.map} +1 -1
- package/dist/chunks/{FlexibleReduxExample--GtoEJhc.js → FlexibleReduxExample-CMUylyy1.js} +3 -3
- package/dist/chunks/{FlexibleReduxExample--GtoEJhc.js.map → FlexibleReduxExample-CMUylyy1.js.map} +1 -1
- package/dist/chunks/SectionFlowEditor-Dp-mjWT9.esm.js +12543 -0
- package/dist/chunks/SectionFlowEditor-Dp-mjWT9.esm.js.map +1 -0
- package/dist/chunks/SectionFlowEditor-Dz1SuCm2.js +12542 -0
- package/dist/chunks/SectionFlowEditor-Dz1SuCm2.js.map +1 -0
- package/dist/chunks/{action-bar-C7Alva4T.esm.js → action-bar-Ci6RlMBM.esm.js} +6 -6
- package/dist/chunks/{action-bar-C7Alva4T.esm.js.map → action-bar-Ci6RlMBM.esm.js.map} +1 -1
- package/dist/chunks/{action-bar-DdtpxWNk.js → action-bar-jLqQTqU7.js} +3 -3
- package/dist/chunks/{action-bar-DdtpxWNk.js.map → action-bar-jLqQTqU7.js.map} +1 -1
- package/dist/chunks/{actionCreator-CpePNxQM.esm.js → actionCreator-B6lXR_k1.esm.js} +2 -2
- package/dist/chunks/{actionCreator-CpePNxQM.esm.js.map → actionCreator-B6lXR_k1.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-Cl8vPLVO.esm.js → actionCreator-D3uwEAua.esm.js} +3 -3
- package/dist/chunks/{actionCreator-Cl8vPLVO.esm.js.map → actionCreator-D3uwEAua.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-CL5ICuqZ.esm.js → actionCreator-DIdMRO9L.esm.js} +2 -2
- package/dist/chunks/{actionCreator-CL5ICuqZ.esm.js.map → actionCreator-DIdMRO9L.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-Cb3NxILP.esm.js → actionCreator-DKYufGAZ.esm.js} +2 -2
- package/dist/chunks/{actionCreator-Cb3NxILP.esm.js.map → actionCreator-DKYufGAZ.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-Dar9Z8_d.esm.js → actionCreator-DcdyGsIX.esm.js} +3 -3
- package/dist/chunks/{actionCreator-Dar9Z8_d.esm.js.map → actionCreator-DcdyGsIX.esm.js.map} +1 -1
- package/dist/chunks/add-template-CUPbU0z7.js +10 -0
- package/dist/chunks/add-template-CUPbU0z7.js.map +1 -0
- package/dist/chunks/add-template-CxvhzFMF.esm.js +11 -0
- package/dist/chunks/add-template-CxvhzFMF.esm.js.map +1 -0
- package/dist/chunks/{address-modal-CYhiC7ui.js → address-modal-DFd5sQtR.js} +2 -2
- package/dist/chunks/{address-modal-CYhiC7ui.js.map → address-modal-DFd5sQtR.js.map} +1 -1
- package/dist/chunks/{address-modal-CkDBjnye.esm.js → address-modal-DYGLjrqd.esm.js} +2 -2
- package/dist/chunks/{address-modal-CkDBjnye.esm.js.map → address-modal-DYGLjrqd.esm.js.map} +1 -1
- package/dist/chunks/{ai-summary-SKK5KN2s.esm.js → ai-summary-x2t8BZCx.esm.js} +2 -2
- package/dist/chunks/{ai-summary-SKK5KN2s.esm.js.map → ai-summary-x2t8BZCx.esm.js.map} +1 -1
- package/dist/chunks/{api-BIVCMSwW.esm.js → api-8jutPLh0.esm.js} +3 -3
- package/dist/chunks/{api-BIVCMSwW.esm.js.map → api-8jutPLh0.esm.js.map} +1 -1
- package/dist/chunks/{api-DBmWILBN.esm.js → api-yLpQ3k5s.esm.js} +9 -9
- package/dist/chunks/{api-DBmWILBN.esm.js.map → api-yLpQ3k5s.esm.js.map} +1 -1
- package/dist/chunks/{app-switcher-D-Bvz9uO.esm.js → app-switcher-B6eapuGG.esm.js} +2 -2
- package/dist/chunks/{app-switcher-D-Bvz9uO.esm.js.map → app-switcher-B6eapuGG.esm.js.map} +1 -1
- package/dist/chunks/{app-switcher-CyEQmYAN.js → app-switcher-VhH9z0Rd.js} +2 -2
- package/dist/chunks/{app-switcher-CyEQmYAN.js.map → app-switcher-VhH9z0Rd.js.map} +1 -1
- package/dist/chunks/{appbar-BRbO--as.esm.js → appbar-B8EgZsrn.esm.js} +2 -2
- package/dist/chunks/{appbar-BRbO--as.esm.js.map → appbar-B8EgZsrn.esm.js.map} +1 -1
- package/dist/chunks/{appbar-rqqjZ99v.js → appbar-Is_7kfVo.js} +2 -2
- package/dist/chunks/{appbar-rqqjZ99v.js.map → appbar-Is_7kfVo.js.map} +1 -1
- package/dist/chunks/{approval-wrapper-BTtmXMlk.esm.js → approval-wrapper-_kYfACQp.esm.js} +2 -2
- package/dist/chunks/{approval-wrapper-BTtmXMlk.esm.js.map → approval-wrapper-_kYfACQp.esm.js.map} +1 -1
- package/dist/chunks/{chat-bot-osiGMG3g.js → chat-bot-2Ga_xA_K.js} +32 -38
- package/dist/chunks/chat-bot-2Ga_xA_K.js.map +1 -0
- package/dist/chunks/{chat-bot-BpNtrZEL.esm.js → chat-bot-DO3vAGxA.esm.js} +33 -39
- package/dist/chunks/chat-bot-DO3vAGxA.esm.js.map +1 -0
- package/dist/chunks/common-BgXEAs_y.esm.js +851 -0
- package/dist/chunks/common-BgXEAs_y.esm.js.map +1 -0
- package/dist/chunks/{common-yORBIVv-.esm.js → common-Cl5oGXmX.esm.js} +2 -2
- package/dist/chunks/{common-yORBIVv-.esm.js.map → common-Cl5oGXmX.esm.js.map} +1 -1
- package/dist/chunks/common-D6T6NGWY.js +850 -0
- package/dist/chunks/common-D6T6NGWY.js.map +1 -0
- package/dist/chunks/{common-CS5L0Ld_.js → common-PH2uWkqL.js} +2 -2
- package/dist/chunks/{common-CS5L0Ld_.js.map → common-PH2uWkqL.js.map} +1 -1
- package/dist/chunks/common-utility-CA_Upser.js.map +1 -1
- package/dist/chunks/{common-utility-DGpbsf7S.esm.js → common-utility-CS_sNoAC.esm.js} +2 -2
- package/dist/chunks/common-utility-CS_sNoAC.esm.js.map +1 -0
- package/dist/chunks/company-selection-modal-B7jFVWWs.js.map +1 -1
- package/dist/chunks/company-selection-modal-Dn2L_skh.esm.js.map +1 -1
- package/dist/chunks/{constant-Bwg2s_Sn.esm.js → constant-BXPcBhJN.esm.js} +35 -5
- package/dist/chunks/constant-BXPcBhJN.esm.js.map +1 -0
- package/dist/chunks/{constant-ZYAN_teD.js → constant-BXeJD4Af.js} +35 -5
- package/dist/chunks/constant-BXeJD4Af.js.map +1 -0
- package/dist/chunks/{constants-nmkxkzps.esm.js → constants-BrmMAwu2.esm.js} +2 -2
- package/dist/chunks/{constants-nmkxkzps.esm.js.map → constants-BrmMAwu2.esm.js.map} +1 -1
- package/dist/chunks/{constants-06kIVUBw.js → constants-D_xuLHSu.js} +2 -2
- package/dist/chunks/{constants-06kIVUBw.js.map → constants-D_xuLHSu.js.map} +1 -1
- package/dist/chunks/{custom-editor-6-xqhKz6.esm.js → custom-editor-C-B5BK-H.esm.js} +3 -3
- package/dist/chunks/{custom-editor-6-xqhKz6.esm.js.map → custom-editor-C-B5BK-H.esm.js.map} +1 -1
- package/dist/chunks/{custom-form-DD7YOHMF.esm.js → custom-form-DNUpk0nq.esm.js} +7 -7
- package/dist/chunks/{custom-form-DD7YOHMF.esm.js.map → custom-form-DNUpk0nq.esm.js.map} +1 -1
- package/dist/chunks/{custom-form-CFU7NEVb.js → custom-form-T4yc_sE_.js} +4 -4
- package/dist/chunks/{custom-form-CFU7NEVb.js.map → custom-form-T4yc_sE_.js.map} +1 -1
- package/dist/chunks/{dashboard-DL83yYRR.esm.js → dashboard-B4xzJ1Xc.esm.js} +4 -4
- package/dist/chunks/{dashboard-DL83yYRR.esm.js.map → dashboard-B4xzJ1Xc.esm.js.map} +1 -1
- package/dist/chunks/{dashboard-BcWVkWZt.js → dashboard-eMHQayU_.js} +3 -3
- package/dist/chunks/{dashboard-BcWVkWZt.js.map → dashboard-eMHQayU_.js.map} +1 -1
- package/dist/chunks/default-data-6IxhqPTP.esm.js.map +1 -1
- package/dist/chunks/default-data-yreKVx_z.js.map +1 -1
- package/dist/chunks/{dynamic-report-tKn-KqAd.esm.js → dynamic-report-CMguvXj2.esm.js} +4 -4
- package/dist/chunks/{dynamic-report-tKn-KqAd.esm.js.map → dynamic-report-CMguvXj2.esm.js.map} +1 -1
- package/dist/chunks/{dynamic-rows-CTGETfcP.esm.js → dynamic-rows-CmAE9nbA.esm.js} +2 -2
- package/dist/chunks/{dynamic-rows-CTGETfcP.esm.js.map → dynamic-rows-CmAE9nbA.esm.js.map} +1 -1
- package/dist/chunks/{dynamic-text-editor-CPvlGcLK.esm.js → dynamic-text-editor-CSWdR1lK.esm.js} +2 -2
- package/dist/chunks/{dynamic-text-editor-CPvlGcLK.esm.js.map → dynamic-text-editor-CSWdR1lK.esm.js.map} +1 -1
- package/dist/chunks/edit-section-modal-Br2ITvLk.js.map +1 -1
- package/dist/chunks/{edit-section-modal-BW-aZmUv.esm.js → edit-section-modal-HihKbN6K.esm.js} +2 -2
- package/dist/chunks/edit-section-modal-HihKbN6K.esm.js.map +1 -0
- package/dist/chunks/{filter-COXKBEER.esm.js → filter-D9BHP_qc.esm.js} +5 -5
- package/dist/chunks/{filter-COXKBEER.esm.js.map → filter-D9BHP_qc.esm.js.map} +1 -1
- package/dist/chunks/{filter-Cr_OSIpb.js → filter-DtCrOG6W.js} +3 -3
- package/dist/chunks/{filter-Cr_OSIpb.js.map → filter-DtCrOG6W.js.map} +1 -1
- package/dist/chunks/{footer-m3_dlNl8.esm.js → footer-Bv5NOAf9.esm.js} +2 -2
- package/dist/chunks/{footer-m3_dlNl8.esm.js.map → footer-Bv5NOAf9.esm.js.map} +1 -1
- package/dist/chunks/{footer-CD3kMRdS.js → footer-DioOh69g.js} +2 -2
- package/dist/chunks/{footer-CD3kMRdS.js.map → footer-DioOh69g.js.map} +1 -1
- package/dist/chunks/{form-fields-yE9kwjvb.js → form-fields-BYDhbAgB.js} +2 -2
- package/dist/chunks/{form-fields-yE9kwjvb.js.map → form-fields-BYDhbAgB.js.map} +1 -1
- package/dist/chunks/{form-fields-hMMnB_wE.esm.js → form-fields-Di-p9XKG.esm.js} +2 -2
- package/dist/chunks/{form-fields-hMMnB_wE.esm.js.map → form-fields-Di-p9XKG.esm.js.map} +1 -1
- package/dist/chunks/{form-parser-m4fnw38a.js → form-parser-BnMdMDSb.js} +2 -2
- package/dist/chunks/{form-parser-m4fnw38a.js.map → form-parser-BnMdMDSb.js.map} +1 -1
- package/dist/chunks/{form-parser-DbnSn5eY.esm.js → form-parser-ZQpEVrzG.esm.js} +2 -2
- package/dist/chunks/{form-parser-DbnSn5eY.esm.js.map → form-parser-ZQpEVrzG.esm.js.map} +1 -1
- package/dist/chunks/{form-section-TMjdOVeW.esm.js → form-section-BJ7Iqb9R.esm.js} +5 -5
- package/dist/chunks/{form-section-TMjdOVeW.esm.js.map → form-section-BJ7Iqb9R.esm.js.map} +1 -1
- package/dist/chunks/{form-section-CPIyMdk2.js → form-section-CFeWD-tF.js} +5 -5
- package/dist/chunks/{form-section-CPIyMdk2.js.map → form-section-CFeWD-tF.js.map} +1 -1
- package/dist/chunks/{fullScreen-DFgzE41_.esm.js → fullScreen-Cz3FIdU4.esm.js} +5 -5
- package/dist/chunks/fullScreen-Cz3FIdU4.esm.js.map +1 -0
- package/dist/chunks/{fullScreen-BLLa9ogA.js → fullScreen-h0JqBN4O.js} +5 -5
- package/dist/chunks/fullScreen-h0JqBN4O.js.map +1 -0
- package/dist/chunks/{global-search-BjKPmzsQ.js → global-search-BTV5iL6-.js} +2 -2
- package/dist/chunks/{global-search-BjKPmzsQ.js.map → global-search-BTV5iL6-.js.map} +1 -1
- package/dist/chunks/{global-search-BOkxXiZ0.esm.js → global-search-CGmupYFQ.esm.js} +3 -3
- package/dist/chunks/{global-search-BOkxXiZ0.esm.js.map → global-search-CGmupYFQ.esm.js.map} +1 -1
- package/dist/chunks/{grid-view-Bo86x7YL.esm.js → grid-view-BMfleQMC.esm.js} +2 -2
- package/dist/chunks/{grid-view-Bo86x7YL.esm.js.map → grid-view-BMfleQMC.esm.js.map} +1 -1
- package/dist/chunks/{header-B-HaoeK7.esm.js → header-BnVzqpGs.esm.js} +12 -10
- package/dist/chunks/{header-B-HaoeK7.esm.js.map → header-BnVzqpGs.esm.js.map} +1 -1
- package/dist/chunks/{header-enhanced-BjfqyQ1a.esm.js → header-enhanced-CkROCaOF.esm.js} +3 -3
- package/dist/chunks/{header-enhanced-BjfqyQ1a.esm.js.map → header-enhanced-CkROCaOF.esm.js.map} +1 -1
- package/dist/chunks/{header-enhanced-gJl4iC4m.js → header-enhanced-Dxdetx0I.js} +3 -3
- package/dist/chunks/{header-enhanced-gJl4iC4m.js.map → header-enhanced-Dxdetx0I.js.map} +1 -1
- package/dist/chunks/{header-BHsex2As.js → header-jWPMgcy6.js} +11 -9
- package/dist/chunks/{header-BHsex2As.js.map → header-jWPMgcy6.js.map} +1 -1
- package/dist/chunks/{index-ALqg8b5U.esm.js → index-BCmGHdos.esm.js} +2 -2
- package/dist/chunks/{index-ALqg8b5U.esm.js.map → index-BCmGHdos.esm.js.map} +1 -1
- package/dist/chunks/{index-BBWIBqaP.js → index-DBvje0t5.js} +73 -66
- package/dist/chunks/{index-BBWIBqaP.js.map → index-DBvje0t5.js.map} +1 -1
- package/dist/chunks/{index-BuPgYdiN.esm.js → index-DqwpZRkl.esm.js} +73 -66
- package/dist/chunks/{index-BuPgYdiN.esm.js.map → index-DqwpZRkl.esm.js.map} +1 -1
- package/dist/chunks/{inline-edit-fields-atDP84QL.js → inline-edit-fields-Cd_qUOjU.js} +2 -2
- package/dist/chunks/{inline-edit-fields-atDP84QL.js.map → inline-edit-fields-Cd_qUOjU.js.map} +1 -1
- package/dist/chunks/{inline-edit-fields-BYhRpPcH.esm.js → inline-edit-fields-VOIx3qmC.esm.js} +2 -2
- package/dist/chunks/{inline-edit-fields-BYhRpPcH.esm.js.map → inline-edit-fields-VOIx3qmC.esm.js.map} +1 -1
- package/dist/chunks/{inventory-reports-title-bar-Bog2i0dr.js → inventory-reports-title-bar-BfUMM54c.js} +2 -2
- package/dist/chunks/{inventory-reports-title-bar-Bog2i0dr.js.map → inventory-reports-title-bar-BfUMM54c.js.map} +1 -1
- package/dist/chunks/{inventory-reports-title-bar-CP8FzW6A.esm.js → inventory-reports-title-bar-CZZFFqDc.esm.js} +3 -3
- package/dist/chunks/{inventory-reports-title-bar-CP8FzW6A.esm.js.map → inventory-reports-title-bar-CZZFFqDc.esm.js.map} +1 -1
- package/dist/chunks/{item-response-details-SHSD-nBh.esm.js → item-response-details-BTHf6ZvN.esm.js} +4 -4
- package/dist/chunks/{item-response-details-SHSD-nBh.esm.js.map → item-response-details-BTHf6ZvN.esm.js.map} +1 -1
- package/dist/chunks/{item-response-details-DsGQ7Dlc.js → item-response-details-BheThTTK.js} +2 -2
- package/dist/chunks/{item-response-details-DsGQ7Dlc.js.map → item-response-details-BheThTTK.js.map} +1 -1
- package/dist/chunks/{listing-DIuzQrzb.js → listing-Dr_1DDBr.js} +4 -4
- package/dist/chunks/{listing-DIuzQrzb.js.map → listing-Dr_1DDBr.js.map} +1 -1
- package/dist/chunks/{listing-C0Yb6MVq.esm.js → listing-ELQeM6S3.esm.js} +4 -4
- package/dist/chunks/{listing-C0Yb6MVq.esm.js.map → listing-ELQeM6S3.esm.js.map} +1 -1
- package/dist/chunks/{location-select-g5uczAUF.js → location-select-CLyRUilk.js} +2 -2
- package/dist/chunks/{location-select-g5uczAUF.js.map → location-select-CLyRUilk.js.map} +1 -1
- package/dist/chunks/{location-select-CFa00fy4.esm.js → location-select-z1C88kCy.esm.js} +2 -2
- package/dist/chunks/{location-select-CFa00fy4.esm.js.map → location-select-z1C88kCy.esm.js.map} +1 -1
- package/dist/chunks/{material-editable-table-BGLjrTzT.js → material-editable-table-DFGB0q-s.js} +3 -3
- package/dist/chunks/{material-editable-table-BGLjrTzT.js.map → material-editable-table-DFGB0q-s.js.map} +1 -1
- package/dist/chunks/{material-editable-table-pAyK7KYf.esm.js → material-editable-table-DyGdqNkX.esm.js} +4 -4
- package/dist/chunks/{material-editable-table-pAyK7KYf.esm.js.map → material-editable-table-DyGdqNkX.esm.js.map} +1 -1
- package/dist/chunks/{metaComponent-B6kkj54U.esm.js → metaComponent-BqgfR7kW.esm.js} +2 -2
- package/dist/chunks/{metaComponent-B6kkj54U.esm.js.map → metaComponent-BqgfR7kW.esm.js.map} +1 -1
- package/dist/chunks/{metaComponent-D9sAbeXz.js → metaComponent-GukpY87Z.js} +2 -2
- package/dist/chunks/{metaComponent-D9sAbeXz.js.map → metaComponent-GukpY87Z.js.map} +1 -1
- package/dist/chunks/{module-reducer-DMxxForv.esm.js → module-reducer-CEv3LZCX.esm.js} +2 -2
- package/dist/chunks/{module-reducer-DMxxForv.esm.js.map → module-reducer-CEv3LZCX.esm.js.map} +1 -1
- package/dist/chunks/{modules-maXT99-4.js → modules-DTRr7zwt.js} +5 -5
- package/dist/chunks/{modules-maXT99-4.js.map → modules-DTRr7zwt.js.map} +1 -1
- package/dist/chunks/{modules-BBu2Y-K9.esm.js → modules-enwLrpfQ.esm.js} +5 -5
- package/dist/chunks/{modules-BBu2Y-K9.esm.js.map → modules-enwLrpfQ.esm.js.map} +1 -1
- package/dist/chunks/{notification-menu-D7ASm-K1.js → notification-menu-B00hDUbn.js} +2 -2
- package/dist/chunks/{notification-menu-D7ASm-K1.js.map → notification-menu-B00hDUbn.js.map} +1 -1
- package/dist/chunks/{notification-menu-XAadkn-e.esm.js → notification-menu-CehCt5fA.esm.js} +4 -4
- package/dist/chunks/{notification-menu-XAadkn-e.esm.js.map → notification-menu-CehCt5fA.esm.js.map} +1 -1
- package/dist/chunks/{page-action-C07iGjvN.esm.js → page-action-RqVevciV.esm.js} +4 -4
- package/dist/chunks/{page-action-C07iGjvN.esm.js.map → page-action-RqVevciV.esm.js.map} +1 -1
- package/dist/chunks/{page-action-BPzaL2KJ.js → page-action-TMFOytDw.js} +2 -2
- package/dist/chunks/{page-action-BPzaL2KJ.js.map → page-action-TMFOytDw.js.map} +1 -1
- package/dist/chunks/{page-navigator-8gZpp9_P.esm.js → page-navigator-CuIJ0KGf.esm.js} +2 -2
- package/dist/chunks/{page-navigator-8gZpp9_P.esm.js.map → page-navigator-CuIJ0KGf.esm.js.map} +1 -1
- package/dist/chunks/{page-navigator-Cgbh3tTG.js → page-navigator-DdRsmtLy.js} +2 -2
- package/dist/chunks/{page-navigator-Cgbh3tTG.js.map → page-navigator-DdRsmtLy.js.map} +1 -1
- package/dist/chunks/{page-view-DJ6HS_dV.js → page-view-CvfqzV03.js} +3 -3
- package/dist/chunks/{page-view-DJ6HS_dV.js.map → page-view-CvfqzV03.js.map} +1 -1
- package/dist/chunks/{page-view-CokUNMBn.esm.js → page-view-Daz-OKd_.esm.js} +3 -3
- package/dist/chunks/{page-view-CokUNMBn.esm.js.map → page-view-Daz-OKd_.esm.js.map} +1 -1
- package/dist/chunks/{pathname.rental-qsAe3XFd.esm.js → pathname.rental-CqHO_l_D.esm.js} +76 -81
- package/dist/chunks/{pathname.rental-qsAe3XFd.esm.js.map → pathname.rental-CqHO_l_D.esm.js.map} +1 -1
- package/dist/chunks/{pathname.rental-DgH4LoG7.js → pathname.rental-CwK6JuID.js} +2 -7
- package/dist/chunks/{pathname.rental-DgH4LoG7.js.map → pathname.rental-CwK6JuID.js.map} +1 -1
- package/dist/chunks/{quick-approval-modal-CPWs8htH.esm.js → quick-approval-modal-B-jvkgue.esm.js} +2 -2
- package/dist/chunks/{quick-approval-modal-CPWs8htH.esm.js.map → quick-approval-modal-B-jvkgue.esm.js.map} +1 -1
- package/dist/chunks/{reducer-CdJ6znKF.esm.js → reducer-BMkh_0Py.esm.js} +3 -3
- package/dist/chunks/{reducer-CdJ6znKF.esm.js.map → reducer-BMkh_0Py.esm.js.map} +1 -1
- package/dist/chunks/{reducer-3tSO6RW6.esm.js → reducer-BOwyP0QZ.esm.js} +3 -3
- package/dist/chunks/{reducer-3tSO6RW6.esm.js.map → reducer-BOwyP0QZ.esm.js.map} +1 -1
- package/dist/chunks/{reducer-IsgN83rP.esm.js → reducer-BTfG9J4W.esm.js} +2 -2
- package/dist/chunks/{reducer-IsgN83rP.esm.js.map → reducer-BTfG9J4W.esm.js.map} +1 -1
- package/dist/chunks/{reducer-yyZtsg1A.esm.js → reducer-BWiX5vxL.esm.js} +2 -2
- package/dist/chunks/{reducer-yyZtsg1A.esm.js.map → reducer-BWiX5vxL.esm.js.map} +1 -1
- package/dist/chunks/{reducer-sgaK2vfW.esm.js → reducer-CD1VDqeT.esm.js} +2 -2
- package/dist/chunks/{reducer-sgaK2vfW.esm.js.map → reducer-CD1VDqeT.esm.js.map} +1 -1
- package/dist/chunks/{reports-title-bar-Kz6JjqsY.js → reports-title-bar-B1_IweEc.js} +2 -2
- package/dist/chunks/{reports-title-bar-Kz6JjqsY.js.map → reports-title-bar-B1_IweEc.js.map} +1 -1
- package/dist/chunks/{reports-title-bar-Cay4E8SQ.esm.js → reports-title-bar-Kl8XQe-K.esm.js} +4 -4
- package/dist/chunks/{reports-title-bar-Cay4E8SQ.esm.js.map → reports-title-bar-Kl8XQe-K.esm.js.map} +1 -1
- package/dist/chunks/{route-page-map-Dn-SAbdf.js → route-page-map-CzFUh-SC.js} +3 -60
- package/dist/chunks/{route-page-map-Dn-SAbdf.js.map → route-page-map-CzFUh-SC.js.map} +1 -1
- package/dist/chunks/{route-page-map-DkWoisiB.esm.js → route-page-map-D6-7jBQT.esm.js} +76 -133
- package/dist/chunks/{route-page-map-DkWoisiB.esm.js.map → route-page-map-D6-7jBQT.esm.js.map} +1 -1
- package/dist/chunks/{routes-CAc76Zan.esm.js → routes-D9y_XQRu.esm.js} +4 -4
- package/dist/chunks/{routes-CAc76Zan.esm.js.map → routes-D9y_XQRu.esm.js.map} +1 -1
- package/dist/chunks/{routes-CfqLAYgR.js → routes-Dsumzjw0.js} +4 -4
- package/dist/chunks/{routes-CfqLAYgR.js.map → routes-Dsumzjw0.js.map} +1 -1
- package/dist/chunks/{schedule-report-B4ZfEuiU.js → schedule-report-BwmZ5jea.js} +4 -4
- package/dist/chunks/{schedule-report-B4ZfEuiU.js.map → schedule-report-BwmZ5jea.js.map} +1 -1
- package/dist/chunks/{schedule-report-CLXjjfjc.esm.js → schedule-report-CJXHVZ68.esm.js} +6 -6
- package/dist/chunks/{schedule-report-CLXjjfjc.esm.js.map → schedule-report-CJXHVZ68.esm.js.map} +1 -1
- package/dist/chunks/{schedule-report-modal-CB3G9H7x.esm.js → schedule-report-modal-D8Y-TZ4u.esm.js} +3 -3
- package/dist/chunks/{schedule-report-modal-CB3G9H7x.esm.js.map → schedule-report-modal-D8Y-TZ4u.esm.js.map} +1 -1
- package/dist/chunks/{schedule-report-modal-iwoDI-sg.js → schedule-report-modal-iNnWP9s4.js} +2 -2
- package/dist/chunks/{schedule-report-modal-iwoDI-sg.js.map → schedule-report-modal-iNnWP9s4.js.map} +1 -1
- package/dist/chunks/{searchable-select-0F6E4XAr.esm.js → searchable-select-BQtcqBKV.esm.js} +6 -6
- package/dist/chunks/{searchable-select-0F6E4XAr.esm.js.map → searchable-select-BQtcqBKV.esm.js.map} +1 -1
- package/dist/chunks/{searchable-select-_DCkITfk.js → searchable-select-DVUCWWti.js} +2 -2
- package/dist/chunks/{searchable-select-_DCkITfk.js.map → searchable-select-DVUCWWti.js.map} +1 -1
- package/dist/chunks/{share-modal-BaEyZs2h.esm.js → share-modal-BOyLBawK.esm.js} +3 -3
- package/dist/chunks/{share-modal-BaEyZs2h.esm.js.map → share-modal-BOyLBawK.esm.js.map} +1 -1
- package/dist/chunks/{share-modal-DrXvh-fV.js → share-modal-CobK7BN7.js} +2 -2
- package/dist/chunks/{share-modal-DrXvh-fV.js.map → share-modal-CobK7BN7.js.map} +1 -1
- package/dist/chunks/{share-modal-enhanced-DnEdDBmu.esm.js → share-modal-enhanced-CTp-tQw8.esm.js} +2 -2
- package/dist/chunks/{share-modal-enhanced-DnEdDBmu.esm.js.map → share-modal-enhanced-CTp-tQw8.esm.js.map} +1 -1
- package/dist/chunks/{share-modal-enhanced-BTr0zRhF.js → share-modal-enhanced-DVarD-jt.js} +2 -2
- package/dist/chunks/{share-modal-enhanced-BTr0zRhF.js.map → share-modal-enhanced-DVarD-jt.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-DpYj_wlK.js → sidebarScreen-K-dlM6NA.js} +3 -3
- package/dist/chunks/{sidebarScreen-DpYj_wlK.js.map → sidebarScreen-K-dlM6NA.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-DiOAiXeU.esm.js → sidebarScreen-lR6rw8bW.esm.js} +4 -4
- package/dist/chunks/{sidebarScreen-DiOAiXeU.esm.js.map → sidebarScreen-lR6rw8bW.esm.js.map} +1 -1
- package/dist/chunks/{store-BL5VFPie.esm.js → store-DJh8C3Vv.esm.js} +6 -6
- package/dist/chunks/{store-BL5VFPie.esm.js.map → store-DJh8C3Vv.esm.js.map} +1 -1
- package/dist/chunks/{table-DWx7x8zw.js → table-Bpt6ggr3.js} +2 -2
- package/dist/chunks/{table-DWx7x8zw.js.map → table-Bpt6ggr3.js.map} +1 -1
- package/dist/chunks/{table-gxAlAeTq.esm.js → table-DI3MyTNm.esm.js} +3 -3
- package/dist/chunks/{table-gxAlAeTq.esm.js.map → table-DI3MyTNm.esm.js.map} +1 -1
- package/dist/chunks/{table-form-DsTwCUcs.esm.js → table-form-8_f3FwhX.esm.js} +2 -2
- package/dist/chunks/{table-form-DsTwCUcs.esm.js.map → table-form-8_f3FwhX.esm.js.map} +1 -1
- package/dist/chunks/{template-editor-router-D4NIwVws.js → template-editor-router-DugWbCh0.js} +2 -2
- package/dist/chunks/{template-editor-router-D4NIwVws.js.map → template-editor-router-DugWbCh0.js.map} +1 -1
- package/dist/chunks/{template-editor-router-BXLUTvsk.esm.js → template-editor-router-uzghBOap.esm.js} +2 -2
- package/dist/chunks/{template-editor-router-BXLUTvsk.esm.js.map → template-editor-router-uzghBOap.esm.js.map} +1 -1
- package/dist/chunks/{template-modal-B2VgotrF.esm.js → template-modal-D7aLacan.esm.js} +7 -6
- package/dist/chunks/template-modal-D7aLacan.esm.js.map +1 -0
- package/dist/chunks/{template-modal-X-iSmlki.js → template-modal-Df7gF4QI.js} +5 -4
- package/dist/chunks/template-modal-Df7gF4QI.js.map +1 -0
- package/dist/chunks/{template-name-modal-CeqxIE2r.js → template-name-modal-ClreVUaz.js} +12 -5
- package/dist/chunks/template-name-modal-ClreVUaz.js.map +1 -0
- package/dist/chunks/{template-name-modal-Dctn8t3t.esm.js → template-name-modal-Dwe7U72p.esm.js} +12 -5
- package/dist/chunks/template-name-modal-Dwe7U72p.esm.js.map +1 -0
- package/dist/chunks/{templates-CCy1eG6A.esm.js → templates-9ZMHwRR6.esm.js} +10 -17
- package/dist/chunks/templates-9ZMHwRR6.esm.js.map +1 -0
- package/dist/chunks/{templates-CUREMwYo.js → templates-DCXbeOtH.js} +7 -14
- package/dist/chunks/templates-DCXbeOtH.js.map +1 -0
- package/dist/chunks/{text-area-B3nAZgFI.js → text-area-DxJs3eyE.js} +2 -2
- package/dist/chunks/{text-area-B3nAZgFI.js.map → text-area-DxJs3eyE.js.map} +1 -1
- package/dist/chunks/{text-area-xMWbJY0H.esm.js → text-area-zcBhicgg.esm.js} +2 -2
- package/dist/chunks/{text-area-xMWbJY0H.esm.js.map → text-area-zcBhicgg.esm.js.map} +1 -1
- package/dist/chunks/{text-measurement-BCjauPbB.esm.js → text-measurement-DMVkqP6b.esm.js} +2 -2
- package/dist/chunks/{text-measurement-BCjauPbB.esm.js.map → text-measurement-DMVkqP6b.esm.js.map} +1 -1
- package/dist/chunks/{translations-BrwQcVN3.esm.js → translations-JcE6qyDJ.esm.js} +3 -3
- package/dist/chunks/{translations-BrwQcVN3.esm.js.map → translations-JcE6qyDJ.esm.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-DXZgzOYB.js → uom-field-wrapper-CSqeiVPY.js} +2 -2
- package/dist/chunks/{uom-field-wrapper-DXZgzOYB.js.map → uom-field-wrapper-CSqeiVPY.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-CTbEc-MB.esm.js → uom-field-wrapper-CWTsSsSi.esm.js} +2 -2
- package/dist/chunks/{uom-field-wrapper-CTbEc-MB.esm.js.map → uom-field-wrapper-CWTsSsSi.esm.js.map} +1 -1
- package/dist/chunks/{upload-excel-BZPP13tP.esm.js → upload-excel-CkEQqZW2.esm.js} +2 -2
- package/dist/chunks/{upload-excel-BZPP13tP.esm.js.map → upload-excel-CkEQqZW2.esm.js.map} +1 -1
- package/dist/chunks/{use-translations-CcjSFA3F.esm.js → use-translations-BqBPN1DM.esm.js} +3 -3
- package/dist/chunks/{use-translations-CcjSFA3F.esm.js.map → use-translations-BqBPN1DM.esm.js.map} +1 -1
- package/dist/chunks/{use-translations-5wUQBxMm.js → use-translations-Cn3b4Kqh.js} +2 -2
- package/dist/chunks/{use-translations-5wUQBxMm.js.map → use-translations-Cn3b4Kqh.js.map} +1 -1
- package/dist/chunks/{useAccountSetting-vAqgEiJB.esm.js → useAccountSetting-DsU5zsjb.esm.js} +2 -2
- package/dist/chunks/{useAccountSetting-vAqgEiJB.esm.js.map → useAccountSetting-DsU5zsjb.esm.js.map} +1 -1
- package/dist/chunks/{useCheckSkuAndName-Dl24wQO-.esm.js → useCheckSkuAndName-5ua30aZf.esm.js} +2 -2
- package/dist/chunks/{useCheckSkuAndName-Dl24wQO-.esm.js.map → useCheckSkuAndName-5ua30aZf.esm.js.map} +1 -1
- package/dist/chunks/{useReduxIntegration-DZBfKF7d.esm.js → useReduxIntegration-BlLpfwk6.esm.js} +2 -2
- package/dist/chunks/{useReduxIntegration-DZBfKF7d.esm.js.map → useReduxIntegration-BlLpfwk6.esm.js.map} +1 -1
- package/dist/chunks/{useUniquenessCheck-bYjnp_0P.esm.js → useUniquenessCheck-CiR2q5bM.esm.js} +2 -2
- package/dist/chunks/{useUniquenessCheck-bYjnp_0P.esm.js.map → useUniquenessCheck-CiR2q5bM.esm.js.map} +1 -1
- package/dist/chunks/{useVendorAICompare-DZRFDk4i.esm.js → useVendorAICompare-DMJvJJ3Y.esm.js} +2 -2
- package/dist/chunks/{useVendorAICompare-DZRFDk4i.esm.js.map → useVendorAICompare-DMJvJJ3Y.esm.js.map} +1 -1
- package/dist/chunks/{value-editor-BSS9Ns2T.js → value-editor-Br7X_wEB.js} +2 -2
- package/dist/chunks/{value-editor-BSS9Ns2T.js.map → value-editor-Br7X_wEB.js.map} +1 -1
- package/dist/chunks/{value-editor-DQ1qgZ2u.esm.js → value-editor-BxFdnUyM.esm.js} +4 -4
- package/dist/chunks/{value-editor-DQ1qgZ2u.esm.js.map → value-editor-BxFdnUyM.esm.js.map} +1 -1
- package/dist/chunks/{vendor-ai-summary-BA6m2dH9.esm.js → vendor-ai-summary-Cpx90QOx.esm.js} +2 -2
- package/dist/chunks/{vendor-ai-summary-BA6m2dH9.esm.js.map → vendor-ai-summary-Cpx90QOx.esm.js.map} +1 -1
- package/dist/chunks/{vendor-ai-summary-DWmAaQ_N.js → vendor-ai-summary-zranZkfk.js} +2 -2
- package/dist/chunks/{vendor-ai-summary-DWmAaQ_N.js.map → vendor-ai-summary-zranZkfk.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/index.esm.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/index.esm.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/index.esm.js +1 -1
- package/dist/components/custom-forms/index.esm.js +2 -2
- package/dist/components/custom-forms/index.js +1 -1
- 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/index.esm.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/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 +3 -3
- 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 +3 -3
- 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 +5 -5
- package/dist/components/header/components/app-switcher/index.esm.js +1 -1
- package/dist/components/header/components/app-switcher/index.js +1 -1
- 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 +3 -3
- package/dist/components/header/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/header/redux/index.esm.js +2 -2
- package/dist/components/header/redux/reducer/index.esm.js +1 -1
- package/dist/components/index.esm.js +37 -37
- package/dist/components/index.js +28 -28
- package/dist/components/inventory-reports-title-bar/index.esm.js +3 -3
- package/dist/components/inventory-reports-title-bar/index.js +1 -1
- 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/index.esm.js +2 -2
- package/dist/components/inventory-reports-title-bar/redux/reducer/index.esm.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/index.esm.js +1 -1
- package/dist/components/quick-approval-modal/index.esm.js +1 -1
- package/dist/components/quick-approval-modal/quick-approval-modal/index.esm.js +1 -1
- package/dist/components/reports/dynamic-report/dynamic-report/index.esm.js +1 -1
- package/dist/components/reports/dynamic-report/dynamic-rows/index.esm.js +1 -1
- package/dist/components/reports/dynamic-report/index.esm.js +2 -2
- package/dist/components/reports/index.esm.js +2 -2
- package/dist/components/reports-title-bar/index.esm.js +3 -3
- package/dist/components/reports-title-bar/index.js +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/reports-title-bar/redux/index.esm.js +2 -2
- package/dist/components/reports-title-bar/redux/reducer/index.esm.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/schedule-report/utils/common/index.esm.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 +2 -2
- package/dist/components/share-modal/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/share-modal/redux/index.esm.js +2 -2
- package/dist/components/share-modal/redux/reducer/index.esm.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/text-area/index.esm.js +1 -1
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-area/text-area/index.esm.js +1 -1
- package/dist/components/text-area/text-area/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/upload-excel/index.esm.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/constants/index.esm.js +143 -145
- package/dist/constants/index.js +3 -5
- package/dist/constants/index.js.map +1 -1
- package/dist/hooks/index.esm.js +6 -6
- package/dist/hooks/index.js +1 -1
- 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/useCheckSkuAndName/index.esm.js +1 -1
- package/dist/hooks/useReduxIntegration/index.esm.js +1 -1
- package/dist/hooks/useUniquenessCheck/index.esm.js +1 -1
- package/dist/images/index.esm.js +5 -5
- package/dist/images/index.esm.js.map +1 -1
- package/dist/images/index.js +5 -5
- package/dist/images/index.js.map +1 -1
- package/dist/index.esm.js +237 -234
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +69 -66
- package/dist/index.js.map +1 -1
- 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/runtime/index.esm.js +4 -4
- package/dist/runtime/index.js +2 -2
- package/dist/src/components/chat-bot/chat-bot-welcome.d.ts +1 -2
- package/dist/src/components/chat-bot/chat-bot.d.ts +1 -5
- package/dist/src/constants/defaultColumns.d.ts +0 -1
- package/dist/src/constants/pathnames/pathname.procurement.d.ts +0 -4
- package/dist/src/layout/fullScreen/fullScreen.d.ts +0 -1
- package/dist/src/views/template-editor/components/EditorCanvas/FreeCanvas.d.ts +34 -0
- package/dist/src/views/template-editor/components/EditorCanvas/FreeElement.d.ts +30 -0
- package/dist/src/views/template-editor/components/EditorCanvas.d.ts +30 -12
- package/dist/src/views/template-editor/components/EditorHeader.d.ts +6 -0
- package/dist/src/views/template-editor/components/EditorSection.d.ts +1 -0
- package/dist/src/views/template-editor/components/SectionFlowEditor.d.ts +2 -3
- package/dist/src/views/template-editor/components/SectionFormatPanel.d.ts +2 -1
- package/dist/src/views/template-editor/components/controllers/TableControls.d.ts +23 -0
- package/dist/src/views/template-editor/components/controllers/TextControls.d.ts +3 -0
- package/dist/src/views/template-editor/components/stationery/StationeryPreview.d.ts +24 -0
- package/dist/src/views/template-editor/components/stationery/StationerySidebar.d.ts +9 -0
- package/dist/src/views/template-editor/engine/ai.d.ts +12 -0
- package/dist/src/views/template-editor/engine/app.d.ts +1 -0
- package/dist/src/views/template-editor/engine/controls.d.ts +4 -0
- package/dist/src/views/template-editor/engine/design-canvas.d.ts +24 -0
- package/dist/src/views/template-editor/engine/editor.d.ts +17 -0
- package/dist/src/views/template-editor/engine/engine.d.ts +18 -0
- package/dist/src/views/template-editor/engine/icons.d.ts +91 -0
- package/dist/src/views/template-editor/engine/letterpads.d.ts +1 -0
- package/dist/src/views/template-editor/engine/model.d.ts +20 -0
- package/dist/src/views/template-editor/engine/paginator.d.ts +30 -0
- package/dist/src/views/template-editor/engine/picker.d.ts +20 -0
- package/dist/src/views/template-editor/engine/schema.d.ts +647 -0
- package/dist/src/views/template-editor/engine/stationery-app.d.ts +10 -0
- package/dist/src/views/template-editor/engine/stationery-doc.d.ts +62 -0
- package/dist/src/views/template-editor/engine/stationery-free-element.d.ts +22 -0
- package/dist/src/views/template-editor/engine/stationery-store.d.ts +154 -0
- package/dist/src/views/template-editor/engine/templatebuilder.d.ts +51 -0
- package/dist/src/views/template-editor/engine/templates.d.ts +11 -0
- package/dist/src/views/template-editor/icons/custom-styled-icon.d.ts +7 -0
- package/dist/src/views/template-editor/icons/edit.d.ts +4 -0
- package/dist/src/views/template-editor/icons/trash.d.ts +4 -0
- package/dist/src/views/template-editor/types/editor.d.ts +20 -108
- package/dist/src/views/template-editor/types/stationery.d.ts +66 -0
- package/dist/src/views/template-editor/utils/common.d.ts +10 -1
- package/dist/src/views/template-editor/utils/compiler.d.ts +12 -0
- package/dist/src/views/template-editor/utils/constant.d.ts +4 -1
- package/dist/style.css +4629 -100
- package/dist/utils/api/index.esm.js +1 -1
- package/dist/utils/common/index.esm.js +1 -1
- package/dist/utils/common-utility/index.esm.js +1 -1
- package/dist/utils/export-filters/index.esm.js +0 -1
- package/dist/utils/export-filters/index.esm.js.map +1 -1
- package/dist/utils/export-filters/index.js +0 -1
- package/dist/utils/export-filters/index.js.map +1 -1
- package/dist/utils/index.esm.js +9 -9
- package/dist/utils/index.js +1 -1
- package/dist/utils/metaComponent/index.esm.js +1 -1
- package/dist/utils/metaComponent/index.js +1 -1
- package/dist/utils/server/index.esm.js +2 -2
- package/dist/utils/text-measurement/index.esm.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/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 +5 -5
- package/dist/views/form-builder/index.js +3 -3
- package/dist/views/form-builder/redux/index.esm.js +1 -1
- package/dist/views/form-builder/utils/index.esm.js +1 -1
- package/dist/views/form-builder/utils/index.js +1 -1
- package/dist/views/index.esm.js +39 -34
- package/dist/views/index.esm.js.map +1 -1
- package/dist/views/index.js +36 -31
- package/dist/views/index.js.map +1 -1
- 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 +7 -6
- package/dist/views/template-editor/components/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/index.js +4 -3
- package/dist/views/template-editor/components/index.js.map +1 -1
- package/dist/views/template-editor/edit-section-modal/index.esm.js +1 -1
- package/dist/views/template-editor/index.esm.js +25 -20
- package/dist/views/template-editor/index.esm.js.map +1 -1
- package/dist/views/template-editor/index.js +16 -11
- package/dist/views/template-editor/index.js.map +1 -1
- 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/template-name-modal/index.esm.js +1 -1
- package/dist/views/template-editor/template-name-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/dist/views/template-editor/utils/index.esm.js +10 -6
- package/dist/views/template-editor/utils/index.js +6 -2
- package/dist/views/template-editor/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/SectionFlowEditor-CFfJBYKx.esm.js +0 -5479
- package/dist/chunks/SectionFlowEditor-CFfJBYKx.esm.js.map +0 -1
- package/dist/chunks/SectionFlowEditor-sKsZ3oQo.js +0 -5478
- package/dist/chunks/SectionFlowEditor-sKsZ3oQo.js.map +0 -1
- package/dist/chunks/add-template-DVvbD9a4.esm.js +0 -11
- package/dist/chunks/add-template-DVvbD9a4.esm.js.map +0 -1
- package/dist/chunks/add-template-Dohg2bHJ.js +0 -10
- package/dist/chunks/add-template-Dohg2bHJ.js.map +0 -1
- package/dist/chunks/chat-bot-BpNtrZEL.esm.js.map +0 -1
- package/dist/chunks/chat-bot-osiGMG3g.js.map +0 -1
- package/dist/chunks/common-C5AokA7z.js +0 -368
- package/dist/chunks/common-C5AokA7z.js.map +0 -1
- package/dist/chunks/common-CaomnEjX.esm.js +0 -369
- package/dist/chunks/common-CaomnEjX.esm.js.map +0 -1
- package/dist/chunks/common-utility-DGpbsf7S.esm.js.map +0 -1
- package/dist/chunks/constant-Bwg2s_Sn.esm.js.map +0 -1
- package/dist/chunks/constant-ZYAN_teD.js.map +0 -1
- package/dist/chunks/edit-section-modal-BW-aZmUv.esm.js.map +0 -1
- package/dist/chunks/fullScreen-BLLa9ogA.js.map +0 -1
- package/dist/chunks/fullScreen-DFgzE41_.esm.js.map +0 -1
- package/dist/chunks/template-modal-B2VgotrF.esm.js.map +0 -1
- package/dist/chunks/template-modal-X-iSmlki.js.map +0 -1
- package/dist/chunks/template-name-modal-CeqxIE2r.js.map +0 -1
- package/dist/chunks/template-name-modal-Dctn8t3t.esm.js.map +0 -1
- package/dist/chunks/templates-CCy1eG6A.esm.js.map +0 -1
- package/dist/chunks/templates-CUREMwYo.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionFlowEditor-Dz1SuCm2.js","sources":["../../src/views/template-editor/engine/icons.tsx","../../src/views/template-editor/icons/custom-styled-icon.tsx","../../src/views/template-editor/icons/trash.tsx","../../src/views/template-editor/components/EditorCanvas/FreeElement.tsx","../../src/views/template-editor/engine/stationery-doc.tsx","../../src/views/template-editor/engine/schema.tsx","../../src/views/template-editor/engine/paginator.tsx","../../src/views/template-editor/engine/editor.tsx","../../src/views/template-editor/engine/templatebuilder.tsx","../../src/views/template-editor/components/controllers/AlignmentControl.tsx","../../src/views/template-editor/components/controllers/TextControls.tsx","../../src/views/template-editor/components/controllers/border-control.tsx","../../src/views/template-editor/components/controllers/ButtonControls.tsx","../../src/views/template-editor/components/controllers/ImageControls.tsx","../../src/views/template-editor/components/controllers/DividerControls.tsx","../../src/views/template-editor/components/controllers/SignatureControls.tsx","../../src/views/template-editor/components/controllers/CodeControls.tsx","../../src/views/template-editor/components/controllers/TableControls.tsx","../../src/views/template-editor/components/EditorSidebar.tsx","../../src/views/template-editor/engine/controls.tsx","../../src/views/template-editor/engine/model.tsx","../../src/views/template-editor/engine/stationery-store.tsx","../../src/views/template-editor/engine/templates.tsx","../../src/views/template-editor/engine/picker.tsx","../../src/views/template-editor/engine/engine.tsx","../../src/views/template-editor/components/SectionFormatPanel.tsx","../../src/views/template-editor/engine/stationery-app.tsx","../../src/views/template-editor/engine/doc.css?raw","../../src/views/template-editor/engine/stationery.css?raw","../../src/views/template-editor/engine/styles.css?raw","../../src/views/template-editor/utils/compiler.tsx","../../src/views/template-editor/components/EditorCanvas/FreeCanvas.tsx","../../src/views/template-editor/components/EditorCanvas.tsx","../../src/views/template-editor/components/SectionFlowEditor.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\n\n/* Shared icon set for the dashboard. Exports Ic + ICONS */\n\n const P = {\n grid: <><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"/></>,\n rupee: <><path d=\"M6 3h12M6 8h12M9.5 3a4.5 4.5 0 0 1 0 9H6l7 9\"/></>,\n cart: <><circle cx=\"9\" cy=\"21\" r=\"1\"/><circle cx=\"20\" cy=\"21\" r=\"1\"/><path d=\"M1 1h4l2.7 13.4a2 2 0 0 0 2 1.6h9.7a2 2 0 0 0 2-1.6L23 6H6\"/></>,\n box: <><path d=\"M21 16V8a2 2 0 0 0-1-1.7l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.7l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"/><path d=\"M3.3 7 12 12l8.7-5M12 22V12\"/></>,\n truck: <><rect x=\"1\" y=\"3\" width=\"15\" height=\"13\"/><path d=\"M16 8h4l3 3v5h-7V8z\"/><circle cx=\"5.5\" cy=\"18.5\" r=\"2.5\"/><circle cx=\"18.5\" cy=\"18.5\" r=\"2.5\"/></>,\n users: <><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M23 21v-2a4 4 0 0 0-3-3.9M16 3.1a4 4 0 0 1 0 7.8\"/></>,\n layers: <><polygon points=\"12 2 2 7 12 12 22 7 12 2\"/><polyline points=\"2 17 12 22 22 17\"/><polyline points=\"2 12 12 17 22 12\"/></>,\n wallet: <><path d=\"M21 12V7H5a2 2 0 0 1 0-4h14v4\"/><path d=\"M3 5v14a2 2 0 0 0 2 2h16v-5\"/><path d=\"M18 12a2 2 0 0 0 0 4h4v-4z\"/></>,\n spark: <><path d=\"M12 3v3M12 18v3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M3 12h3M18 12h3M5.6 18.4l2.1-2.1M16.3 7.7l2.1-2.1\"/></>,\n clock: <><circle cx=\"12\" cy=\"12\" r=\"9\"/><polyline points=\"12 7 12 12 15 14\"/></>,\n inbox: <><polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"/><path d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"/></>,\n check: <><path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"/><polyline points=\"22 4 12 14.01 9 11.01\"/></>,\n search: <><circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m21 21-4.3-4.3\"/></>,\n bell: <><path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\"/><path d=\"M13.7 21a2 2 0 0 1-3.4 0\"/></>,\n sun: <><circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4\"/></>,\n moon: <><path d=\"M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z\"/></>,\n chevD: <><polyline points=\"6 9 12 15 18 9\"/></>,\n chevR: <><polyline points=\"9 18 15 12 9 6\"/></>,\n chevL: <><polyline points=\"15 18 9 12 15 6\"/></>,\n plus: <><path d=\"M12 5v14M5 12h14\"/></>,\n x: <><path d=\"M18 6 6 18M6 6l12 12\"/></>,\n grip: <><circle cx=\"9\" cy=\"6\" r=\"1.4\"/><circle cx=\"15\" cy=\"6\" r=\"1.4\"/><circle cx=\"9\" cy=\"12\" r=\"1.4\"/><circle cx=\"15\" cy=\"12\" r=\"1.4\"/><circle cx=\"9\" cy=\"18\" r=\"1.4\"/><circle cx=\"15\" cy=\"18\" r=\"1.4\"/></>,\n more: <><circle cx=\"5\" cy=\"12\" r=\"1.4\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\"/><circle cx=\"19\" cy=\"12\" r=\"1.4\"/></>,\n filter: <><polygon points=\"22 3 2 3 10 12.5 10 19 14 21 14 12.5 22 3\"/></>,\n cal: <><rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M16 2v4M8 2v4M3 10h18\"/></>,\n download:<><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"/></>,\n arrowUp: <><polyline points=\"18 15 12 9 6 15\"/></>,\n arrowDn: <><polyline points=\"6 9 12 15 18 9\"/></>,\n menu: <><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"/><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"/><line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"/></>,\n cog: <><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\"/></>,\n ext: <><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/><polyline points=\"15 3 21 3 21 9\"/><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"/></>,\n refresh: <><polyline points=\"23 4 23 10 17 10\"/><polyline points=\"1 20 1 14 7 14\"/><path d=\"M3.5 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"/></>,\n eye: <><path d=\"M1 12s4-7 11-7 11 7 11 7-4 7-11 7-11-7-11-7z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></>,\n pin: <><path d=\"M12 17v5M9 10.8V4h6v6.8l2 2.2H7l2-2.2z\"/></>,\n target: <><circle cx=\"12\" cy=\"12\" r=\"9\"/><circle cx=\"12\" cy=\"12\" r=\"5\"/><circle cx=\"12\" cy=\"12\" r=\"1\"/></>,\n alert: <><path d=\"M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z\"/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"17\"/></>,\n flame: <><path d=\"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.07-2.14-.85-4.24 1.5-6.5C13 5 16 7 16 11a4 4 0 1 1-8 0c0-.5.07-.98.2-1.43-.4.45-.7 1-.7 1.93z\"/></>,\n // ── report module + viz icons ───────────────────────────\n dirham: <><path d=\"M7 4v16M7 9h7a4 4 0 0 1 0 8H7M4 9h3M4 13h3M16.5 4l2.5 4-2.5 4\"/></>,\n barChart:<><line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"20\"/><rect x=\"5\" y=\"11\" width=\"3.2\" height=\"7\" rx=\"0.6\"/><rect x=\"10.4\" y=\"7\" width=\"3.2\" height=\"11\" rx=\"0.6\"/><rect x=\"15.8\" y=\"13\" width=\"3.2\" height=\"5\" rx=\"0.6\"/></>,\n lineChart:<><path d=\"M4 19h16\"/><polyline points=\"4 15 9 9 13 12 20 5\"/></>,\n pie: <><path d=\"M12 3a9 9 0 1 0 9 9h-9z\"/><path d=\"M12 3v9h9A9 9 0 0 0 12 3z\" opacity=\"0.45\"/></>,\n table: <><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"/><path d=\"M3 9h18M3 14.5h18M9 4v16M15 4v16\" /></>,\n pivot: <><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M3 9h18M9 9v12\"/><path d=\"M3 9 9 3M9 9l12-6\" opacity=\"0\"/></>,\n doc: <><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\"/><line x1=\"8\" y1=\"17\" x2=\"13\" y2=\"17\"/></>,\n bank: <><path d=\"M3 10 12 4l9 6\"/><path d=\"M5 10v8M9.5 10v8M14.5 10v8M19 10v8\"/><line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\"/></>,\n factory: <><path d=\"M3 21V10l6 4V10l6 4V6l6 4v11z\"/><line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\"/></>,\n share: <><circle cx=\"18\" cy=\"5\" r=\"2.6\"/><circle cx=\"6\" cy=\"12\" r=\"2.6\"/><circle cx=\"18\" cy=\"19\" r=\"2.6\"/><line x1=\"8.3\" y1=\"10.8\" x2=\"15.7\" y2=\"6.2\"/><line x1=\"8.3\" y1=\"13.2\" x2=\"15.7\" y2=\"17.8\"/></>,\n save: <><path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"/><polyline points=\"17 21 17 13 7 13 7 21\"/><polyline points=\"7 3 7 8 15 8\"/></>,\n sparkle: <><path d=\"M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z\"/><path d=\"M18.5 16l.7 2 2 .7-2 .7-.7 2-.7-2-2-.7 2-.7z\"/></>,\n print: <><polyline points=\"6 9 6 2 18 2 18 9\"/><path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"/><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\" rx=\"1\"/></>,\n columns: <><rect x=\"3\" y=\"3\" width=\"7\" height=\"18\" rx=\"1\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"18\" rx=\"1\"/></>,\n rows: <><rect x=\"3\" y=\"3\" width=\"18\" height=\"7\" rx=\"1\"/><rect x=\"3\" y=\"14\" width=\"18\" height=\"7\" rx=\"1\"/></>,\n sum: <><path d=\"M18 5V3H6l7 9-7 9h12v-2\"/></>,\n mail: <><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/><path d=\"m2 6 10 7L22 6\"/></>,\n link: <><path d=\"M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1.5 1.5\"/><path d=\"M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1.5-1.5\"/></>,\n copy: <><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></>,\n sliders: <><line x1=\"4\" y1=\"21\" x2=\"4\" y2=\"14\"/><line x1=\"4\" y1=\"10\" x2=\"4\" y2=\"3\"/><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"3\"/><line x1=\"20\" y1=\"21\" x2=\"20\" y2=\"16\"/><line x1=\"20\" y1=\"12\" x2=\"20\" y2=\"3\"/><line x1=\"1\" y1=\"14\" x2=\"7\" y2=\"14\"/><line x1=\"9\" y1=\"8\" x2=\"15\" y2=\"8\"/><line x1=\"17\" y1=\"16\" x2=\"23\" y2=\"16\"/></>,\n star: <><polygon points=\"12 2 15.1 8.5 22 9.3 17 14 18.2 21 12 17.6 5.8 21 7 14 2 9.3 8.9 8.5\"/></>,\n flag: <><path d=\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V4s-1 1-4 1-5-2-8-2-4 1-4 1z\"/><line x1=\"4\" y1=\"22\" x2=\"4\" y2=\"15\"/></>,\n list: <><line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"/><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"/><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"/><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"/><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"/><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"/></>,\n arrowL: <><line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\"/><polyline points=\"12 19 5 12 12 5\"/></>,\n arrowR: <><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/><polyline points=\"12 5 19 12 12 19\"/></>,\n waterfall:<><line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\"/><rect x=\"4\" y=\"6\" width=\"3\" height=\"9\"/><rect x=\"8.5\" y=\"10\" width=\"3\" height=\"5\"/><rect x=\"13\" y=\"13\" width=\"3\" height=\"5\"/><rect x=\"17.5\" y=\"8\" width=\"3\" height=\"13\"/></>,\n // ── PDF builder additions ───────────────────────────────\n code: <><polyline points=\"16 18 22 12 16 6\"/><polyline points=\"8 6 2 12 8 18\"/></>,\n send: <><path d=\"M22 2 11 13\"/><path d=\"M22 2 15 22l-4-9-9-4 20-7z\"/></>,\n undo: <><path d=\"M3 7v6h6\"/><path d=\"M3 13a9 9 0 1 0 3-7.7L3 8\"/></>,\n redo: <><path d=\"M21 7v6h-6\"/><path d=\"M21 13a9 9 0 1 1-3-7.7L21 8\"/></>,\n upload: <><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"17 8 12 3 7 8\"/><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"/></>,\n eyeOff: <><path d=\"M9.9 4.24A9.1 9.1 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/><path d=\"M1 1l22 22\"/><path d=\"M6.6 6.6A18.4 18.4 0 0 0 1 12s4 8 11 8a9.7 9.7 0 0 0 5.4-1.6\"/></>,\n type: <><polyline points=\"4 7 4 4 20 4 20 7\"/><line x1=\"9\" y1=\"20\" x2=\"15\" y2=\"20\"/><line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"/></>,\n palette: <><circle cx=\"13.5\" cy=\"6.5\" r=\"1\"/><circle cx=\"17.5\" cy=\"10.5\" r=\"1\"/><circle cx=\"8.5\" cy=\"7.5\" r=\"1\"/><circle cx=\"6.5\" cy=\"12.5\" r=\"1\"/><path d=\"M12 2a10 10 0 0 0 0 20 2.5 2.5 0 0 0 2.5-2.5c0-.7-.3-1.3-.7-1.8a2.5 2.5 0 0 1 1.9-4.2H18a4 4 0 0 0 4-4c0-4.4-4.5-7.5-10-7.5z\"/></>,\n panelL: <><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"/></>,\n panelR: <><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\"/></>,\n chat: <><path d=\"M21 11.5a8.38 8.38 0 0 1-9 8.4 9 9 0 0 1-4-1L3 20l1.1-3.3a8.4 8.4 0 0 1-1-4A8.5 8.5 0 0 1 12 3a8.38 8.38 0 0 1 9 8.5z\"/></>,\n wand: <><path d=\"M15 4V2M15 16v-2M8 9h2M20 9h2M17.8 11.8 19 13M17.8 6.2 19 5M12.2 6.2 11 5M3 21l9-9M12.2 11.8 11 13\"/></>,\n trash: <><polyline points=\"3 6 5 6 21 6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/></>,\n dot: <><circle cx=\"12\" cy=\"12\" r=\"3\"/></>,\n file: <><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/></>,\n receipt: <><path d=\"M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1-2-1z\"/><line x1=\"8\" y1=\"8\" x2=\"16\" y2=\"8\"/><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"/></>,\n quote: <><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\"/><line x1=\"8\" y1=\"17\" x2=\"13\" y2=\"17\"/></>,\n minus: <><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/></>,\n fit: <><polyline points=\"15 3 21 3 21 9\"/><polyline points=\"9 21 3 21 3 15\"/><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"/><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"/></>,\n image: <><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/><polyline points=\"21 15 16 10 5 21\"/></>,\n };\n const Ic = ({ k, size, ...rest }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n width={size} height={size} {...rest}>{P[k] || null}</svg>\n );\n export const ICONS = P;\n export { Ic };\n","import { SvgIcon } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport _ from 'lodash';\n\nenum FontSize {\n\tinherit = 'inherit',\n\tsmall = '1rem',\n\tmedium = '1.5rem',\n\tlarge = '2rem'\n}\n\nconst Styled = (Icon: typeof SvgIcon) =>\n\tstyled(Icon)(({ fontSize, width, theme: { palette }, color }) => {\n\t\tconst themeColor = _.get(palette, color as string)\n\n\t\treturn {\n\t\t\tfill: '#fff0',\n\t\t\t...(fontSize && {\n\t\t\t\tfontSize: `${Number(fontSize) ? fontSize+'rem' : FontSize[fontSize as keyof typeof FontSize]} !important`\n\t\t\t}),\n\t\t\t...(width && {\n\t\t\t\twidth,\n\t\t\t\theight: width\n\t\t\t}),\n\t\t\tcolor: themeColor || 'inherit'\n\t\t};\n\t});\n\nexport { Styled };\nexport default Styled;\n","import { createSvgIcon } from '@mui/material';\nimport Styled from './custom-styled-icon';\n\nexport const Trash = Styled(\n\tcreateSvgIcon(\n\t\t<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t<path\n\t\t\t\td=\"M21 5.97998C17.67 5.64998 14.32 5.47998 10.98 5.47998C9 5.47998 7.02 5.57998 5.04 5.77998L3 5.97998\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M8.5 4.97L8.72 3.66C8.88 2.71 9 2 10.69 2H13.31C15 2 15.13 2.75 15.28 3.67L15.5 4.97\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M18.8499 9.13989L18.1999 19.2099C18.0899 20.7799 17.9999 21.9999 15.2099 21.9999H8.7899C5.9999 21.9999 5.9099 20.7799 5.7999 19.2099L5.1499 9.13989\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M10.3301 16.5H13.6601\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t\t<path d=\"M9.5 12.5H14.5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n\t\t</svg>,\n\t\t'Trash'\n\t)\n);\n\nexport default Trash;\n","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { useRef, useState, useCallback, useMemo, useEffect } from 'react';\nimport { Box, IconButton } from '@mui/material';\nimport { EnhancedSectionData } from '../../types/editor';\nimport { useDebouncedUpdate } from '../../hooks/useDebouncedUpdate';\nimport { useCKEditorStyleExtractor } from '../../utils/style-extractor';\nimport { applyOpacityToColor } from '../../utils/common';\nimport { Trash } from '../../icons/trash';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\n\ninterface FreeElementProps {\n element: EnhancedSectionData;\n isSelected: boolean;\n canvasBounds: { width: number; height: number };\n onSelect: () => void;\n onMove: (id: string, x: number, y: number) => void;\n onResize: (id: string, x: number, y: number, width: number, height: number) => void;\n onRotate: (id: string, rotation: number) => void;\n onDelete: (id: string) => void;\n onUpdate: (id: string, content: string, extra?: any) => void;\n onBringForward: (id: string) => void;\n onSendBackward: (id: string) => void;\n placeholders?: Array<{ value: string; label: string }>;\n children?: React.ReactNode;\n hideRotate?: boolean;\n onMoveToPage?: (id: string, offset: -1 | 1) => void;\n pageIndex?: number;\n totalPages?: number;\n}\n\nconst editableTypes = new Set(['text', 'text-block', 'heading', 'heading-2', 'heading-3', 'heading-4']);\n\nconst RESIZE_HANDLES = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'] as const;\ntype ResizeHandle = typeof RESIZE_HANDLES[number];\n\nconst handleCursorMap: Record<ResizeHandle, string> = {\n nw: 'nw-resize', n: 'n-resize', ne: 'ne-resize',\n e: 'e-resize', se: 'se-resize', s: 's-resize',\n sw: 'sw-resize', w: 'w-resize',\n};\n\nconst handlePositions: Record<ResizeHandle, React.CSSProperties> = {\n nw: { top: -5, left: -5 },\n n: { top: -5, left: '50%', transform: 'translateX(-50%)' },\n ne: { top: -5, right: -5 },\n e: { top: '50%', right: -5, transform: 'translateY(-50%)' },\n se: { bottom: -5, right: -5 },\n s: { bottom: -5, left: '50%', transform: 'translateX(-50%)' },\n sw: { bottom: -5, left: -5 },\n w: { top: '50%', left: -5, transform: 'translateY(-50%)' },\n};\n\nconst ASPECT_RATIO_TYPES = new Set(['image', 'qr-code']);\n\nconst FreeElement: React.FC<FreeElementProps> = ({\n element,\n isSelected,\n canvasBounds,\n onSelect,\n onMove,\n onResize,\n onRotate,\n onDelete,\n onUpdate,\n onBringForward,\n onSendBackward,\n placeholders = [],\n children,\n hideRotate = false,\n onMoveToPage,\n pageIndex = 0,\n totalPages = 1,\n}) => {\n const { extractStyles, getSingleStyles } = useCKEditorStyleExtractor();\n const [isEditing, setIsEditing] = useState(false);\n const [localContent, setLocalContent] = useState(element.content);\n const elementRef = useRef<HTMLDivElement | null>(null);\n const contentEditableRef = useRef<HTMLDivElement | null>(null);\n const [measuredHeight, setMeasuredHeight] = useState<number | null>(null);\n\n // Continuously measure table element rendered DOM height\n useEffect(() => {\n const el = contentEditableRef.current;\n if (!el) return;\n\n const measure = () => {\n const table = el.querySelector('table');\n const target = table || (el.firstElementChild as HTMLElement) || el;\n const rect = target.getBoundingClientRect();\n const h = Math.round(rect.height || target.scrollHeight || el.scrollHeight);\n if (h > 0) {\n setMeasuredHeight(prev => (prev !== h ? h : prev));\n }\n };\n\n measure();\n\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => {\n measure();\n });\n ro.observe(el);\n const table = el.querySelector('table');\n if (table) ro.observe(table);\n return () => ro.disconnect();\n }\n }, [localContent, element.attributes, element.type]);\n\n // Sync measured height back to editor state if element.height is outdated/undersized\n useEffect(() => {\n if (element.type === 'table' && measuredHeight && measuredHeight > 0) {\n if (Math.abs((element.height || 0) - measuredHeight) > 2) {\n onResize(element.id, element.x, element.y, element.width, measuredHeight);\n }\n }\n }, [element.id, element.type, element.x, element.y, element.width, element.height, measuredHeight, onResize]);\n\n const effectiveHeight = useMemo(() => {\n if (element.type === 'table') {\n return measuredHeight ? Math.max(element.height || 0, measuredHeight) : (element.height || 78);\n }\n if (element.type === 'divider') {\n return Math.max(element.height || 0, 20);\n }\n return element.height;\n }, [element.type, element.height, measuredHeight]);\n\n const handleUpdate = useCallback((content: string, extra?: any) => {\n onUpdate(element.id, content, extra);\n }, [onUpdate, element.id]);\n\n const debouncedUpdate = useDebouncedUpdate(handleUpdate, 300);\n\n // Sync external content changes when not actively typing\n React.useEffect(() => {\n if (!isEditing) {\n setLocalContent(element.content);\n }\n }, [element.content, isEditing]);\n\n const commitEdit = useCallback(() => {\n if (contentEditableRef.current) {\n const newContent = contentEditableRef.current.innerHTML;\n setLocalContent(newContent);\n const styles = extractStyles(element.content, { includeTagStyles: true, includeInlineStyles: true, mergeNestedStyles: true, filterEmptyStyles: true });\n const single = getSingleStyles(styles);\n const mergedAttributes = { ...(element.attributes || {}), styles: { ...(element.attributes?.styles || {}), ...single } };\n onUpdate(element.id, newContent, { attributes: mergedAttributes });\n } else if (elementRef.current) {\n // For elements with children (e.g. built-in stationery Editable)\n const editableChildren = elementRef.current.querySelectorAll('[contenteditable=\"true\"]');\n editableChildren.forEach((child: any) => {\n child.blur();\n });\n }\n }, [element.id, element.content, element.attributes, extractStyles, getSingleStyles, onUpdate]);\n\n // When element loses selection, automatically commit and exit editing mode\n useEffect(() => {\n if (!isSelected && isEditing) {\n commitEdit();\n setIsEditing(false);\n }\n }, [isSelected, isEditing, commitEdit]);\n\n // When editing, clicking anywhere outside the element immediately commits and exits editing mode\n useEffect(() => {\n if (!isEditing) return;\n\n const handleWindowPointerDown = (e: PointerEvent) => {\n if (elementRef.current && !elementRef.current.contains(e.target as Node)) {\n commitEdit();\n setIsEditing(false);\n }\n };\n\n window.addEventListener('pointerdown', handleWindowPointerDown, true);\n return () => {\n window.removeEventListener('pointerdown', handleWindowPointerDown, true);\n };\n }, [isEditing, commitEdit]);\n\n // Focus editable text when entering edit mode\n useEffect(() => {\n if (isEditing) {\n const target = contentEditableRef.current || (elementRef.current?.querySelector('[contenteditable=\"true\"]') as HTMLElement);\n if (target) {\n target.focus();\n try {\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(target);\n range.collapse(false); // collapse to end\n selection?.removeAllRanges();\n selection?.addRange(range);\n } catch (err) {\n console.error(err);\n }\n }\n }\n }, [isEditing]);\n\n // ─── MOVE ───────────────────────────────────────────────────────────────────\n const handleBodyPointerDown = useCallback((e: React.PointerEvent) => {\n if ((e.target as HTMLElement).closest('[data-control]')) return;\n\n if (isEditing) {\n const target = e.target as HTMLElement;\n const isInsideEditable = target.isContentEditable || target.closest('[contenteditable=\"true\"]') || target === contentEditableRef.current;\n if (isInsideEditable) {\n // Interacting with text content\n return;\n }\n // Clicked on element boundary or outer padding — exit editing and allow drag\n commitEdit();\n setIsEditing(false);\n }\n\n e.preventDefault();\n e.stopPropagation();\n onSelect();\n\n const startX = e.clientX;\n const startY = e.clientY;\n const startElX = element.x;\n const startElY = element.y;\n\n const maxX = canvasBounds.width > 0 ? Math.max(0, canvasBounds.width - element.width) : Infinity;\n const maxY = canvasBounds.height > 0 ? Math.max(0, canvasBounds.height - element.height) : Infinity;\n\n const onMove_ = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const dy = ev.clientY - startY;\n const newX = Math.max(0, Math.min(maxX, startElX + dx));\n const newY = Math.max(0, Math.min(maxY, startElY + dy));\n onMove(element.id, newX, newY);\n };\n\n const onUp = () => {\n window.removeEventListener('pointermove', onMove_);\n window.removeEventListener('pointerup', onUp);\n };\n\n window.addEventListener('pointermove', onMove_);\n window.addEventListener('pointerup', onUp);\n }, [isEditing, commitEdit, element.x, element.y, element.width, element.height, canvasBounds, onMove, onSelect, element.id]);\n\n // ─── RESIZE ─────────────────────────────────────────────────────────────────\n const handleResizePointerDown = useCallback((handle: ResizeHandle, e: React.PointerEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const startX = e.clientX;\n const startY = e.clientY;\n const startElX = element.x;\n const startElY = element.y;\n const startW = element.width;\n const startH = effectiveHeight;\n const aspectRatio = startW / startH;\n const lockAspect = ASPECT_RATIO_TYPES.has(element.type);\n\n const onMove_ = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const dy = ev.clientY - startY;\n let newX = startElX, newY = startElY, newW = startW, newH = startH;\n\n switch (handle) {\n case 'se': newW = Math.max(40, startW + dx); newH = lockAspect ? newW / aspectRatio : Math.max(20, startH + dy); break;\n case 's': newH = Math.max(20, startH + dy); break;\n case 'e': newW = Math.max(40, startW + dx); break;\n case 'sw': newW = Math.max(40, startW - dx); newX = startElX + (startW - newW); newH = lockAspect ? newW / aspectRatio : Math.max(20, startH + dy); break;\n case 'w': newW = Math.max(40, startW - dx); newX = startElX + (startW - newW); break;\n case 'nw': newW = Math.max(40, startW - dx); newH = lockAspect ? newW / aspectRatio : Math.max(20, startH - dy); newX = startElX + (startW - newW); newY = startElY + (startH - newH); break;\n case 'n': newH = Math.max(20, startH - dy); newY = startElY + (startH - newH); break;\n case 'ne': newW = Math.max(40, startW + dx); newH = lockAspect ? newW / aspectRatio : Math.max(20, startH - dy); newY = startElY + (startH - newH); break;\n }\n\n onResize(element.id, newX, newY, newW, newH);\n };\n\n const onUp = () => {\n window.removeEventListener('pointermove', onMove_);\n window.removeEventListener('pointerup', onUp);\n };\n\n window.addEventListener('pointermove', onMove_);\n window.addEventListener('pointerup', onUp);\n }, [element, effectiveHeight, onResize]);\n\n // ─── ROTATE ─────────────────────────────────────────────────────────────────\n const handleRotatePointerDown = useCallback((e: React.PointerEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const el = elementRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n\n const startAngle = Math.atan2(e.clientY - cy, e.clientX - cx) * (180 / Math.PI);\n const startRotation = element.rotation;\n\n const onMove_ = (ev: PointerEvent) => {\n const currentAngle = Math.atan2(ev.clientY - cy, ev.clientX - cx) * (180 / Math.PI);\n const delta = currentAngle - startAngle;\n onRotate(element.id, (startRotation + delta + 360) % 360);\n };\n\n const onUp = () => {\n window.removeEventListener('pointermove', onMove_);\n window.removeEventListener('pointerup', onUp);\n };\n\n window.addEventListener('pointermove', onMove_);\n window.addEventListener('pointerup', onUp);\n }, [element.rotation, element.id, onRotate]);\n\n // ─── EDIT (text elements) ────────────────────────────────────────────────────\n const handleDoubleClick = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n if (!editableTypes.has(element.type)) return;\n setIsEditing(true);\n\n const target = e.target as HTMLElement;\n const editableTarget = target.isContentEditable ? target : (target.closest('[contenteditable=\"true\"]') as HTMLElement);\n if (editableTarget) {\n setTimeout(() => {\n editableTarget.focus();\n try {\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(editableTarget);\n range.collapse(false);\n selection?.removeAllRanges();\n selection?.addRange(range);\n } catch (err) {\n console.error(err);\n }\n }, 0);\n }\n }, [element.type]);\n\n const handleBlur = useCallback((e: React.FocusEvent<HTMLDivElement>) => {\n if (isEditing) {\n if (elementRef.current && elementRef.current.contains(e.relatedTarget as Node)) {\n return;\n }\n commitEdit();\n setIsEditing(false);\n }\n }, [isEditing, commitEdit]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!isEditing) return;\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n commitEdit();\n setIsEditing(false);\n } else if (e.key === 'Enter' && !e.shiftKey && element.type !== 'text-block' && !children) {\n e.preventDefault();\n e.stopPropagation();\n commitEdit();\n setIsEditing(false);\n }\n }, [isEditing, commitEdit, element.type, children]);\n\n // ─── RENDER ──────────────────────────────────────────────────────────────────\n const contentNode = useMemo(() => {\n if (children) {\n return (\n <Box\n sx={{\n width: '100%',\n height: '100%',\n pointerEvents: isEditing ? 'auto' : 'none',\n '& img': {\n userDrag: 'none',\n WebkitUserDrag: 'none',\n pointerEvents: 'none',\n },\n }}\n onBlur={(e) => {\n if (elementRef.current && !elementRef.current.contains(e.relatedTarget as Node)) {\n commitEdit();\n setIsEditing(false);\n }\n }}\n >\n {children}\n </Box>\n );\n }\n\n return (\n <Box\n ref={contentEditableRef}\n dangerouslySetInnerHTML={{ __html: localContent || '<p style=\"color:#aaa;font-size:13px;margin:0\">Double-click to edit…</p>' }}\n contentEditable={isEditing}\n suppressContentEditableWarning={true}\n onBlur={handleBlur}\n sx={{\n width: '100%',\n height: element.type === 'table' ? 'auto' : '100%',\n minHeight: element.type === 'table' ? 'auto' : '100%',\n overflow: element.type === 'buttons' || element.type === 'signature' || element.type === 'table' || editableTypes.has(element.type) ? 'visible' : 'hidden',\n pointerEvents: isEditing ? 'auto' : 'none',\n wordBreak: 'break-word',\n whiteSpace: element.type === 'table' ? 'normal' : 'pre-wrap',\n outline: 'none',\n cursor: isEditing ? 'text' : 'inherit',\n display: editableTypes.has(element.type) || element.type === 'table' ? 'block' : 'flex',\n flexDirection: editableTypes.has(element.type) || element.type === 'table' ? undefined : 'column',\n justifyContent: editableTypes.has(element.type) ? undefined : (element.type === 'table' ? 'flex-start' : 'center'),\n alignItems: editableTypes.has(element.type) ? undefined : (element.type === 'table' ? 'stretch' : 'center'),\n '& p, & h1, & h2, & h3, & h4, & h5, & h6': {\n margin: 0,\n padding: 0,\n width: '100% !important',\n height: '100% !important',\n boxSizing: 'border-box'\n },\n '& hr': {\n width: '100%',\n margin: 0\n },\n '& a': {\n width: '100% !important',\n height: '100% !important',\n boxSizing: 'border-box'\n },\n '& img': { maxWidth: '100%', maxHeight: '100%', objectFit: element.attributes?.styles?.objectFit || 'contain', userDrag: 'none', WebkitUserDrag: 'none' },\n '& > div': {\n width: '100% !important',\n height: element.type === 'table' ? 'auto !important' : undefined,\n boxSizing: 'border-box'\n },\n '& table': { width: '100% !important', height: 'auto !important', borderCollapse: 'collapse', whiteSpace: 'normal', tableLayout: 'fixed', margin: '0 !important', backgroundColor: 'transparent' },\n '& table tr': { boxSizing: 'border-box' },\n '& table td': {\n boxSizing: 'border-box',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'middle',\n backgroundColor: applyOpacityToColor(\n element.attributes?.styles?.tBody?.backgroundColor || 'rgba(255, 255, 255, 0.75)',\n typeof element.attributes?.styles?.opacity === 'number' ? element.attributes.styles.opacity : 1\n ),\n },\n '& table th': {\n boxSizing: 'border-box',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'middle',\n backgroundColor: applyOpacityToColor(\n element.attributes?.styles?.tHead?.backgroundColor || 'rgba(245, 245, 245, 0.75)',\n typeof element.attributes?.styles?.opacity === 'number' ? element.attributes.styles.opacity : 1\n ),\n },\n '& svg': { display: 'block', width: '100% !important', height: '100% !important' },\n }}\n />\n );\n }, [isEditing, localContent, element.id, element.type, handleBlur, children, handleKeyDown, JSON.stringify(element.attributes?.styles)]);\n\n const rotationTransform = `rotate(${element.rotation}deg)`;\n\n return (\n <Box\n ref={elementRef}\n tabIndex={-1}\n data-free-element-id={element.id}\n onPointerDown={handleBodyPointerDown}\n onDoubleClick={handleDoubleClick}\n onKeyDown={handleKeyDown}\n onClick={(e) => { e.stopPropagation(); onSelect(); }}\n sx={{\n position: 'absolute',\n left: element.x,\n top: element.y,\n width: element.width,\n height: effectiveHeight,\n transform: rotationTransform,\n zIndex: element.zIndex ?? 1,\n cursor: isEditing ? 'text' : 'move',\n userSelect: isEditing ? 'text' : 'none',\n outline: isSelected ? '1px solid #000' : '1px dashed transparent',\n outlineOffset: '0px',\n borderRadius: '0px',\n '&:hover': {\n outline: isSelected ? '1px solid #000' : '1px dashed #000',\n },\n boxSizing: 'border-box',\n overflow: 'visible',\n }}\n >\n {/* Content */}\n <Box sx={{ width: '100%', height: element.type === 'table' ? 'auto' : '100%', overflow: 'visible', borderRadius: '2px', bgcolor: 'transparent' }}>\n {contentNode}\n </Box>\n\n {/* Selected controls — toolbar + handles */}\n {isSelected && !isEditing && (\n <>\n {/* Top toolbar — Move actions + Delete, positioned top-right */}\n <Box\n data-control=\"true\"\n sx={{\n position: 'absolute',\n top: -34,\n right: 0,\n display: 'flex',\n alignItems: 'center',\n gap: 0.5,\n zIndex: 1000,\n }}\n onPointerDown={(e) => e.stopPropagation()}\n >\n {onMoveToPage && pageIndex > 0 && (\n <IconButton\n size=\"small\"\n data-control=\"true\"\n onClick={(e) => { e.stopPropagation(); onMoveToPage(element.id, -1); }}\n title=\"Move to Previous Page\"\n sx={{ color: '#fff', bgcolor: '#000', p: '4px', borderRadius: '4px', '&:hover': { bgcolor: '#333' } }}\n >\n <ArrowUpwardIcon sx={{ fontSize: 16 }} />\n </IconButton>\n )}\n {onMoveToPage && pageIndex < totalPages - 1 && (\n <IconButton\n size=\"small\"\n data-control=\"true\"\n onClick={(e) => { e.stopPropagation(); onMoveToPage(element.id, 1); }}\n title=\"Move to Next Page\"\n sx={{ color: '#fff', bgcolor: '#000', p: '4px', borderRadius: '4px', '&:hover': { bgcolor: '#333' } }}\n >\n <ArrowDownwardIcon sx={{ fontSize: 16 }} />\n </IconButton>\n )}\n <IconButton\n size=\"small\"\n data-control=\"true\"\n onClick={(e) => { e.stopPropagation(); onDelete(element.id); }}\n title=\"Delete Element\"\n sx={{ color: '#fff', bgcolor: '#ef4444', p: '4px', borderRadius: '4px', '&:hover': { bgcolor: '#dc2626' } }}\n >\n <Trash sx={{ fontSize: 16 }} />\n </IconButton>\n </Box>\n\n {/* Resize handles — filled circles */}\n {RESIZE_HANDLES.map((handle) => {\n if (element.type === 'divider' && (handle === 'n' || handle === 's')) return null;\n return (\n <Box\n key={handle}\n data-control=\"true\"\n onPointerDown={(e) => { e.stopPropagation(); handleResizePointerDown(handle, e); }}\n sx={{\n position: 'absolute',\n width: 10,\n height: 10,\n bgcolor: '#000',\n border: '1px solid #fff',\n borderRadius: '50%',\n cursor: handleCursorMap[handle],\n zIndex: 1001,\n ...handlePositions[handle],\n }}\n />\n );\n })}\n\n {/* Rotation handle — just the SVG icon */}\n {!hideRotate && (\n <Box\n data-control=\"true\"\n onPointerDown={(e) => { e.stopPropagation(); handleRotatePointerDown(e); }}\n sx={{\n position: 'absolute',\n bottom: -24,\n left: '50%',\n transform: 'translateX(-50%)',\n width: 16,\n height: 16,\n cursor: 'grab',\n zIndex: 1001,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#000',\n '&:active': { cursor: 'grabbing' },\n '&::before': {\n content: '\"\"',\n display: 'block',\n width: '1px',\n height: '8px',\n bgcolor: '#000',\n position: 'absolute',\n top: '-8px',\n left: '50%',\n transform: 'translateX(-50%)',\n },\n }}\n >\n {/* Rotate arrow SVG */}\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ pointerEvents: 'none' }}\n >\n <path d=\"M21.5 2v6h-6\" />\n <path d=\"M21.34 15.57a10 10 0 1 1-.57-8.38\" />\n </svg>\n </Box>\n )}\n </>\n )}\n\n </Box>\n );\n};\n\nexport default FreeElement;\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\nimport { Ic } from './icons';\nimport FreeElement from '../components/EditorCanvas/FreeElement';\nimport { useDroppable } from '@dnd-kit/core';\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — Stationery Master · document render layer\n The stationery master = ONE global header + ONE global footer +\n watermark that EVERY document template inherits. The body of a\n document (doc-title bar, parties, items, totals…) is supplied by\n the per-type template; the stationery wraps it on every page.\n Exposes export const STDoc = { PaperSheet, DOC_BODIES, DOC_META }\n ───────────────────────────────────────────────────────────── */\n\n\n\n// ══ shared sample data (used only to preview the master) ══════\nconst ITEMS = [\n { sku: 'EQ-7741', name: 'Industrial network switch, 48-port managed', detail: 'Layer-3, PoE+', qty: 12, unit: 'pcs', price: 2150, amount: 25800 },\n { sku: 'EQ-3320', name: 'Rack-mount UPS 3kVA online', detail: 'Extended battery module', qty: 6, unit: 'pcs', price: 4380, amount: 24966 },\n { sku: 'CB-1102', name: 'Cat6A S/FTP cabling, 305m drum', detail: 'LSZH, blue', qty: 20, unit: 'drum', price: 690, amount: 13800 },\n { sku: 'SV-0099', name: 'On-site installation & commissioning', detail: 'Certified engineers, 3 days', qty: 1, unit: 'lot', price: 8500, amount: 8500 },\n];\nconst CONT_ITEMS = [\n { sku: 'EQ-2280', name: 'Fibre patch panel 24-port LC duplex', detail: 'OS2 single-mode', qty: 8, unit: 'pcs', price: 540, amount: 4320 },\n { sku: 'AC-4410', name: 'Precision cooling unit, in-row 12kW', detail: 'Chilled-water, EC fans', qty: 2, unit: 'pcs', price: 18900, amount: 34020 },\n { sku: 'CB-2204', name: 'Power distribution unit, metered 32A', detail: 'Vertical, 24 outlets', qty: 8, unit: 'pcs', price: 1240, amount: 9920 },\n { sku: 'SV-0102', name: 'Annual maintenance contract (Tier-1)', detail: '24×7 response, 12 months', qty: 1, unit: 'yr', price: 22000, amount: 22000 },\n];\nconst money = (n) => 'AED ' + Number(n).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n\n// ── inline-editable text (WYSIWYG → model). Commits on blur so the\n// caret never jumps mid-typing. Mirrors the PDF Builder edit lens.\nfunction Editable({ tag = 'div', value, onCommit, edit, className = '', dir, placeholder, title, style }) {\n const Tag = tag as any;\n const ref = useRef<any>(null);\n\n useEffect(() => {\n if (ref.current && ref.current.textContent !== (value || '')) {\n ref.current.textContent = value || '';\n }\n }, [value]);\n\n if (!edit) {\n return <Tag className={className} dir={dir} style={style}>{value || placeholder || ''}</Tag>;\n }\n\n return (\n <Tag\n ref={ref}\n className={`${className} st-ed`} dir={dir} style={{ minWidth: 20, minHeight: 16, outline: 'none', cursor: 'inherit', ...style }} contentEditable suppressContentEditableWarning\n spellCheck={false} title={title || 'Double-click to edit'} data-empty={!value} data-ph={placeholder || ''}\n onBlur={(e: any) => { const t = e.currentTarget.textContent.replace(/\\s+/g, ' ').trim(); if (t !== (value || '')) onCommit(t); }}\n onKeyDown={(e: any) => { if (e.key === 'Enter') { e.preventDefault(); e.currentTarget.blur(); } if (e.key === 'Escape') { e.currentTarget.textContent = value || ''; e.currentTarget.blur(); } }}\n />\n );\n}\n\nconst CUSTOMER = {\n name: 'Etisalat Digital — Smart Solutions', attn: 'Procurement Dept.',\n line1: 'Etisalat Tower 2, Sheikh Zayed Road', line2: 'Dubai, United Arab Emirates', trn: '100200300400500',\n};\n\n// per-doc metadata (accent is the DOCUMENT accent — independent of the stationery brand colour)\nconst DOC_META = {\n quotation: { name: 'Quotation', accent: '#1A8A56', no: 'QT-2026-0418', date: '30 May 2026', tag: 'Valid to 29 Jun 2026', tagClass: 'pbd-status--draft' },\n invoice: { name: 'Tax Invoice', accent: '#1B2C6E', no: 'INV-2026-1183', date: '30 May 2026', tag: 'Payment due 29 Jun 2026', tagClass: 'pbd-status--due' },\n delivery: { name: 'Delivery Note', accent: '#8a540b', no: 'DN-2026-0902', date: '30 May 2026', tag: 'Inv ref INV-2026-1183', tagClass: '' },\n};\n\n// ── doc-title bar (the body's masthead — NOT the letterhead) ──\nfunction DocTitle({ t }) {\n return (\n <div className=\"st-doctitle\">\n <div className=\"st-doctitle-l\">\n <div className=\"st-doctype\">{t.name}</div>\n <div className=\"st-doctype-rule\" />\n </div>\n <div className=\"st-doctitle-r\">\n <div className=\"pbd-ref\">No. <b>{t.no}</b></div>\n <div className=\"pbd-ref\">{t.date}</div>\n {t.tag && <span className={`pbd-status ${t.tagClass}`}>{t.tag}</span>}\n </div>\n </div>\n );\n}\n\nfunction Parties({ type }) {\n return (\n <div className={`pbd-parties ${type === 'delivery' ? '' : 'pbd-parties--2'}`}>\n <div className=\"pbd-party\">\n <div className=\"pbd-party-h\">{type === 'invoice' ? 'Bill to' : type === 'delivery' ? 'Ship to' : 'Quotation for'}</div>\n <div className=\"pbd-party-name\">{CUSTOMER.name}</div>\n <div className=\"pbd-party-line\">Attn: {CUSTOMER.attn}</div>\n <div className=\"pbd-party-line\">{CUSTOMER.line1}</div>\n <div className=\"pbd-party-line\">{CUSTOMER.line2}</div>\n <div className=\"pbd-party-line\">TRN {CUSTOMER.trn}</div>\n </div>\n <div className=\"pbd-party\">\n <div className=\"pbd-party-h\">{type === 'delivery' ? 'Despatch' : 'Reference'}</div>\n {type === 'delivery' ? (\n <>\n <div className=\"pbd-party-line\">Vehicle: Mercedes Actros · D-44192</div>\n <div className=\"pbd-party-line\">Driver: M. Iqbal</div>\n <div className=\"pbd-party-line\">PO: PO-ETD-55021</div>\n </>\n ) : (\n <>\n <div className=\"pbd-party-line\">PO number: PO-ETD-55021</div>\n <div className=\"pbd-party-line\">Sales rep: L. Haddad</div>\n <div className=\"pbd-party-line\">Currency: AED</div>\n </>\n )}\n </div>\n {type === 'delivery' && (\n <div className=\"pbd-party\">\n <div className=\"pbd-party-h\">Customer</div>\n <div className=\"pbd-party-name\">Etisalat Digital</div>\n <div className=\"pbd-party-line\">Dubai Investment Park 2</div>\n <div className=\"pbd-party-line\">Dubai, UAE</div>\n </div>\n )}\n </div>\n );\n}\n\nfunction ItemsTable({ type, rows, cont }) {\n const priced = type !== 'delivery';\n return (\n <div className=\"pbd-items-wrap\">\n {cont && <div className=\"pbd-items-cont\" style={{ textAlign: 'left', paddingBottom: 4 }}>… continued from previous page</div>}\n <table className=\"pbd-items\">\n <thead>\n {priced ? (\n <tr><th className=\"l\">#</th><th className=\"l\">Description</th><th>Qty</th><th>Unit</th><th>Unit price</th><th>Amount</th></tr>\n ) : (\n <tr><th className=\"l\">#</th><th className=\"l\">Code</th><th className=\"l\">Description</th><th>Unit</th><th>Qty ord.</th><th>Qty del.</th></tr>\n )}\n </thead>\n <tbody>\n {rows.map((it, i) => priced ? (\n <tr key={i}>\n <td className=\"l it-no\">{i + 1}</td>\n <td className=\"l it-desc\"><b>{it.name}</b><span className=\"it-sku\">{it.sku} · {it.detail}</span></td>\n <td>{it.qty}</td><td>{it.unit}</td><td>{money(it.price)}</td><td><b>{money(it.amount)}</b></td>\n </tr>\n ) : (\n <tr key={i}>\n <td className=\"l it-no\">{i + 1}</td>\n <td className=\"l\"><span className=\"it-sku\" style={{ fontSize: 9 }}>{it.sku}</span></td>\n <td className=\"l it-desc\"><b>{it.name}</b><span className=\"it-sku\">{it.detail}</span></td>\n <td>{it.unit}</td><td>{it.qty}</td><td><b>{it.qty}</b></td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction Totals() {\n return (\n <div className=\"pbd-totals-wrap\">\n <div className=\"pbd-totals\">\n <div className=\"pbd-tot-row\"><span>Subtotal</span><span className=\"pbd-tot-v\">{money(73066)}</span></div>\n <div className=\"pbd-tot-row pbd-tot-row--sub\"><span>VAT (5%)</span><span className=\"pbd-tot-v\">{money(3653.3)}</span></div>\n <div className=\"pbd-tot-grand\"><span className=\"pbd-tot-k\">Grand total</span><span className=\"pbd-tot-v\">{money(76719.3)}</span></div>\n </div>\n </div>\n );\n}\n\nfunction Notes({ type }) {\n if (type === 'delivery') {\n return (\n <div className=\"pbd-sign\" style={{ marginTop: 30 }}>\n <div className=\"pbd-sign-line\"><div className=\"pbd-sign-rule\"><b>Received by (name & signature)</b>Date & company stamp</div></div>\n <div className=\"pbd-sign-line\"><div className=\"pbd-sign-rule\"><b>M. Iqbal</b>Delivered by</div></div>\n </div>\n );\n }\n return (\n <>\n <div className=\"pbd-cols\">\n <div>\n <div className=\"pbd-notes-h\">Notes</div>\n <div className=\"pbd-notes-body\">Thank you for the opportunity to {type === 'invoice' ? 'serve you. Please quote the invoice number on all remittances.' : 'quote. We would be pleased to arrange a site survey at your convenience.'}</div>\n </div>\n <div>\n <div className=\"pbd-notes-h\">{type === 'invoice' ? 'Payment terms · Net 30' : 'Terms & conditions'}</div>\n <div className=\"pbd-notes-body\">\n <ol><li>Prices in AED, valid 30 days.</li><li>50% advance with PO, balance on delivery.</li></ol>\n </div>\n </div>\n </div>\n <div className=\"pbd-sign\" style={{ marginTop: 28 }}>\n <div className=\"pbd-sign-line\"><div className=\"pbd-sign-rule\"><b>L. Haddad</b>Sales Manager</div></div>\n <div className=\"pbd-sign-line\"><div className=\"pbd-sign-rule\"><b> </b>Customer acceptance · date</div></div>\n </div>\n </>\n );\n}\n\n// unified body — the per-template content the stationery wraps.\n// page 0 carries the masthead + parties; totals/notes/signature land on\n// the LAST page so a 1-page doc is complete and a 2-page doc splits cleanly.\nfunction Body({ type, pageIndex, total }) {\n const last = pageIndex === total - 1;\n return (\n <>\n {pageIndex === 0 && <><DocTitle t={DOC_META[type]} /><Parties type={type} /></>}\n <ItemsTable type={type} rows={pageIndex === 0 ? ITEMS : CONT_ITEMS} cont={pageIndex > 0} />\n {last && type !== 'delivery' && <Totals />}\n {last && <Notes type={type} />}\n </>\n );\n}\n\n// ══ STATIONERY MASTER — header ════════════════════════════════\nfunction FreeWrap({ id, attr, defaultPos, edit, ed, bounds, children }: any) {\n const safeNum = (val: any, fallback: any) => {\n const parsed = parseFloat(val);\n return isNaN(parsed) ? fallback : parsed;\n };\n\n const x = safeNum(attr?.x, defaultPos.x);\n const y = safeNum(attr?.y, defaultPos.y);\n const w = safeNum(attr?.width, defaultPos.w);\n const h = safeNum(attr?.height, defaultPos.h);\n const r = safeNum(attr?.rotation, 0);\n\n const elemType = attr?.type || (id === 'logo' ? 'image' : id === 'rule' ? 'divider' : (id === 'regBand' || id === 'pageNumbers') ? 'buttons' : 'text');\n\n if (edit && ed) {\n return (\n <FreeElement\n element={{ id, attributes: attr || {}, x, y, width: w, height: h, rotation: r, type: elemType, content: attr?.content || '' } as any}\n isSelected={ed.selectedElement === id}\n canvasBounds={bounds || ed.canvasBounds}\n onSelect={() => ed.onSelectElement(id)}\n onMove={(moveId, nx, ny) => ed.onChangeElement(moveId, nx, ny, w, h, r)}\n onResize={(resId, nx, ny, nw, nh) => ed.onChangeElement(resId, nx, ny, nw, nh, r)}\n onRotate={(rotId, nr) => ed.onChangeElement(rotId, x, y, w, h, nr)}\n onDelete={ed.onDeleteElement}\n onUpdate={ed.onUpdateElement}\n onBringForward={() => { }}\n onSendBackward={() => { }}\n >\n {children}\n </FreeElement>\n );\n }\n return (\n <div style={{ position: 'absolute', left: x, top: y, width: w, height: h, transform: `rotate(${r}deg)` }}>\n {children || <div className=\"st-free-content\" dangerouslySetInnerHTML={{ __html: attr?.content || '' }} style={{ width: '100%', height: '100%' }} />}\n </div>\n );\n}\n\nconst getTextStyle = (attrs) => {\n if (!attrs || !attrs.styles) return {};\n const { fontFamily, fontSize, lineHeight, textAlign, fontWeight, fontStyle, textDecoration, color } = attrs.styles;\n\n const style: any = { fontFamily, fontSize, lineHeight, textAlign, fontWeight, fontStyle, textDecoration, color };\n\n // Map text-align to flexbox justify-content for containers that use flex layout\n if (textAlign) {\n if (textAlign === 'left') style.justifyContent = 'flex-start';\n if (textAlign === 'right') style.justifyContent = 'flex-end';\n if (textAlign === 'center') style.justifyContent = 'center';\n }\n\n // Filter out undefined values to let CSS defaults work if not specified\n return Object.fromEntries(\n Object.entries(style)\n .filter(([_, v]) => v !== undefined)\n );\n};\n\nfunction Header({ m, compact, ed }) {\n const { setNodeRef, isOver } = useDroppable({ id: 'st-drop-header' });\n const h = m.header;\n const variant = compact ? 'compact' : h.variant;\n const edit = ed && ed.on;\n const logoSrc = h.logoSrc !== undefined && h.logoSrc !== null ? h.logoSrc : '';\n const logoH = 46;\n\n const attrs = h.logoAttributes || {};\n const styles = attrs.styles || {};\n\n const logoStyle: any = {\n width: '100%',\n height: '100%',\n opacity: styles.opacity !== undefined ? styles.opacity : 1,\n objectFit: styles.objectFit || 'contain',\n };\n if (styles.borderRadius !== undefined) logoStyle.borderRadius = styles.borderRadius + 'px';\n if (styles.is_bordered) {\n logoStyle.border = `${styles.border || 1}px ${styles.borderStyle || 'solid'} ${styles.borderColor || '#000000'}`;\n logoStyle.boxSizing = 'border-box';\n }\n\n const setH = ed ? ed.setH : () => { };\n\n const paper = m.paper || 'A4';\n const orient = m.orient || 'portrait';\n let [pageW, pageH] = paper === 'Letter' ? [816, 1056] : [794, 1123];\n if (orient === 'landscape') { const t = pageW; pageW = pageH; pageH = t; }\n const cw = pageW;\n\n // Base heights and defaults\n const headerHeight = compact ? 60 : (h.height || m.reserve?.top || 156);\n const bounds = { width: pageW, height: headerHeight };\n\n if (ed) {\n ed.canvasBounds = bounds;\n }\n\n let defaults;\n if (variant === 'centered') {\n defaults = {\n logo: { x: cw / 2 - logoH, y: 30, w: logoH * 2, h: logoH },\n nameEN: { x: cw / 2 - 100, y: 30 + logoH + 10, w: 200, h: 25 },\n nameAR: { x: cw / 2 - 100, y: 30 + logoH + 35, w: 200, h: 25 },\n tagline: { x: cw / 2 - 100, y: 30 + logoH + 60, w: 200, h: 20 },\n rule: { x: 0, y: Math.max(0, headerHeight - 2), w: pageW, h: 2 }\n };\n } else if (variant === 'split') {\n defaults = {\n logo: { x: 40, y: 30, w: logoH * 2, h: logoH },\n tagline: { x: 40, y: 30 + logoH + 10, w: 200, h: 20 },\n nameEN: { x: cw - 240, y: 30, w: 200, h: 25 },\n nameAR: { x: cw - 240, y: 55, w: 200, h: 25 },\n rule: { x: 0, y: Math.max(0, headerHeight - 2), w: pageW, h: 2 }\n };\n } else if (variant === 'compact') {\n defaults = {\n logo: { x: 40, y: 15, w: logoH * 2, h: logoH },\n nameEN: { x: 180, y: 25, w: 200, h: 25 },\n nameAR: { x: 390, y: 25, w: 200, h: 25 },\n tagline: { x: cw - 240, y: 25, w: 200, h: 20 },\n rule: { x: 0, y: Math.max(0, headerHeight - 2), w: pageW, h: 2 }\n };\n } else {\n // standard\n defaults = {\n logo: { x: 40, y: 30, w: logoH * 2, h: logoH },\n nameEN: { x: cw - 240, y: 30, w: 200, h: 25 },\n nameAR: { x: cw - 240, y: 55, w: 200, h: 25 },\n tagline: { x: cw - 240, y: 80, w: 200, h: 20 },\n rule: { x: 0, y: Math.max(0, headerHeight - 2), w: pageW, h: 2 }\n };\n }\n\n const isDraggingAny = Boolean(ed?.activeDragId);\n const isHighlighted = isOver || (edit && isDraggingAny);\n\n const effNameENAttr = {\n ...(h.nameENAttributes || {}),\n ...(h.nameENAttributes?.x === 554 ? { x: defaults.nameEN.x } : {})\n };\n const effNameARAttr = {\n ...(h.nameARAttributes || {}),\n ...(h.nameARAttributes?.x === 554 ? { x: defaults.nameAR.x } : {})\n };\n const effTaglineAttr = {\n ...(h.taglineAttributes || {}),\n ...(h.taglineAttributes?.x === 554 ? { x: defaults.tagline.x } : {})\n };\n\n return (\n <div\n ref={setNodeRef}\n className={`st-head st-head--${variant} ${edit ? 'is-edit' : ''}`}\n style={{\n position: 'relative',\n width: '100%',\n height: headerHeight,\n overflow: 'hidden',\n borderBottom: edit ? (isHighlighted ? '2px dashed #2563eb' : '1.5px dashed #cbd5e1') : 'none',\n background: isOver ? 'rgba(37,99,235,0.08)' : (edit && isDraggingAny ? 'rgba(37,99,235,0.02)' : 'transparent'),\n transition: 'background 0.15s, border-color 0.15s'\n }}\n >\n {edit && (\n <div style={{\n position: 'absolute',\n bottom: 3,\n right: 8,\n fontSize: 10,\n fontWeight: 500,\n color: isHighlighted ? '#2563eb' : '#94a3b8',\n background: isHighlighted ? 'rgba(37,99,235,0.1)' : 'rgba(241,245,249,0.85)',\n padding: '1px 6px',\n borderRadius: 4,\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: 1,\n border: '1px solid',\n borderColor: isHighlighted ? 'rgba(37,99,235,0.2)' : 'rgba(203,213,225,0.6)'\n }}>\n {isOver ? 'Drop in Header area' : `Header area · ${headerHeight}px`}\n </div>\n )}\n\n {h.showLogo && logoSrc && (\n <FreeWrap id=\"logo\" attr={h.logoAttributes} defaultPos={defaults.logo} edit={edit} ed={ed} bounds={bounds}>\n <img className=\"st-logo\" src={logoSrc} alt=\"\" style={logoStyle} draggable={false} />\n </FreeWrap>\n )}\n\n {(() => {\n const defaultAlign = (variant === 'standard' || variant === 'split') ? 'right' : variant === 'centered' ? 'center' : 'left';\n return (\n <>\n {h.nameEN && (\n <FreeWrap id=\"nameEN\" attr={effNameENAttr} defaultPos={defaults.nameEN} edit={edit} ed={ed} bounds={bounds}>\n <Editable\n className=\"st-name-en\"\n value={h.nameEN}\n edit={edit}\n placeholder=\"Company name\"\n onCommit={(v) => setH({ nameEN: v })}\n style={{\n width: '100%',\n textAlign: defaultAlign,\n fontSize: '16px',\n fontWeight: 700,\n color: '#14171b',\n lineHeight: 1.2,\n ...getTextStyle(h.nameENAttributes)\n }}\n />\n </FreeWrap>\n )}\n\n {h.bilingual && h.nameAR && (\n <FreeWrap id=\"nameAR\" attr={effNameARAttr} defaultPos={defaults.nameAR} edit={edit} ed={ed} bounds={bounds}>\n <Editable\n className=\"st-name-ar\"\n dir=\"rtl\"\n value={h.nameAR}\n edit={edit}\n placeholder=\"الاسم بالعربية\"\n onCommit={(v) => setH({ nameAR: v })}\n style={{\n width: '100%',\n textAlign: defaultAlign,\n fontFamily: \"'Noto Kufi Arabic', 'Cairo', 'IBM Plex Sans Arabic', Tahoma, sans-serif\",\n fontSize: '15px',\n fontWeight: 600,\n color: '#3a3f46',\n lineHeight: 1.4,\n ...getTextStyle(h.nameARAttributes)\n }}\n />\n </FreeWrap>\n )}\n\n {h.tagline && !compact && (\n <FreeWrap id=\"tagline\" attr={effTaglineAttr} defaultPos={defaults.tagline} edit={edit} ed={ed} bounds={bounds}>\n <Editable\n className=\"st-tagline\"\n value={h.tagline}\n edit={edit}\n placeholder=\"www.example.com\"\n onCommit={(v) => setH({ tagline: v })}\n style={{\n width: '100%',\n textAlign: defaultAlign,\n fontSize: '10px',\n color: 'var(--st-brand, #2EB273)',\n ...getTextStyle(h.taglineAttributes)\n }}\n />\n </FreeWrap>\n )}\n </>\n );\n })()}\n\n {h.rule && (() => {\n const rawW = Number(h.ruleAttributes?.width);\n const isDefaultW = !rawW || rawW === 714 || rawW === 794 || (pageW > 794 && rawW <= 794);\n const ruleW = isDefaultW ? pageW : rawW;\n const ruleX = (isDefaultW || h.ruleAttributes?.x === 40 || !h.ruleAttributes?.x) ? 0 : h.ruleAttributes.x;\n const ruleY = h.ruleAttributes?.y !== undefined ? h.ruleAttributes.y : Math.max(0, headerHeight - 2);\n return (\n <FreeWrap\n id=\"rule\"\n attr={{\n ...(h.ruleAttributes || {}),\n x: ruleX,\n y: ruleY,\n width: ruleW,\n w: ruleW\n }}\n defaultPos={defaults.rule}\n edit={edit}\n ed={ed}\n bounds={bounds}\n >\n <div\n className=\"st-brand-rule\"\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: 'var(--st-brand)',\n borderRadius: 0,\n ...getTextStyle(h.ruleAttributes)\n }}\n />\n </FreeWrap>\n );\n })()}\n\n {(m.sections || []).filter((s: any) => s.zone === 'header').map((sec: any) => (\n <FreeWrap key={sec.id} id={sec.id} attr={{ ...sec.attributes, x: sec.x ?? sec.attributes?.x, y: sec.y ?? sec.attributes?.y, w: sec.width ?? sec.attributes?.w, h: sec.height ?? sec.attributes?.h, width: sec.width ?? sec.attributes?.width, height: sec.height ?? sec.attributes?.height, type: sec.type, content: sec.content }} defaultPos={{ x: 50, y: 50, w: 200, h: 50 }} edit={edit} ed={ed} bounds={bounds} />\n ))}\n\n </div>\n );\n}\n\n// ══ STATIONERY MASTER — footer ════════════════════════════════\nfunction Footer({ m, pageIndex, total, compact, ed }) {\n const { setNodeRef, isOver } = useDroppable({ id: 'st-drop-footer' });\n const f = m.footer;\n const edit = ed && ed.on;\n const setF = ed ? ed.setF : () => { };\n const setReg = ed ? ed.setReg : () => { };\n const fmt = (f.format || 'Page {n} of {total}').replace('{n}', pageIndex + 1).replace('{total}', total);\n const regList = edit ? f.regItems : f.regItems.filter(r => r.value);\n\n // Continuation pages get a slim single-line footer — the full reg band +\n // contact block only belongs on the first page.\n if (compact) {\n return (\n <div className=\"st-foot st-foot--compact\">\n <div className=\"st-foot-meta\">\n {f.note && <span>{f.note}</span>}\n {f.pageNumbers && <span className=\"st-foot-pg\">{fmt}</span>}\n </div>\n </div>\n );\n }\n\n const paper = m.paper || 'A4';\n const orient = m.orient || 'portrait';\n let [pageW, pageH] = paper === 'Letter' ? [816, 1056] : [794, 1123];\n if (orient === 'landscape') { const t = pageW; pageW = pageH; pageH = t; }\n const cw = pageW;\n\n const footerHeight = compact ? 40 : (f.height || m.reserve?.bottom || 120);\n const bounds = { width: pageW, height: footerHeight };\n if (ed) ed.canvasBounds = bounds;\n\n const defaults = {\n regBand: { x: 0, y: 0, w: pageW, h: 25 },\n contact: { x: 40, y: Math.max(0, Math.min(40, footerHeight - 60)), w: cw - 80, h: 25 },\n note: { x: 40, y: Math.max(0, Math.min(70, footerHeight - 25)), w: 400, h: 20 },\n pageNumbers: { x: cw - 194, y: Math.max(0, Math.min(70, footerHeight - 25)), w: 154, h: 20 },\n };\n\n const contactStyle: any = getTextStyle(f.contactAttributes);\n // Icons always use the stationery brand colour, independent of text colour\n const contactIconStyle = { color: 'var(--st-brand)' };\n\n const isDraggingAny = Boolean(ed?.activeDragId);\n const isHighlighted = isOver || (edit && isDraggingAny);\n\n return (\n <div\n ref={setNodeRef}\n className={`st-foot ${edit ? 'is-edit' : ''}`}\n style={{\n position: 'relative',\n width: '100%',\n height: footerHeight,\n overflow: 'hidden',\n borderTop: edit ? (isHighlighted ? '2px dashed #2563eb' : '1.5px dashed #cbd5e1') : 'none',\n background: isOver ? 'rgba(37,99,235,0.08)' : (edit && isDraggingAny ? 'rgba(37,99,235,0.02)' : 'transparent'),\n transition: 'background 0.15s, border-color 0.15s'\n }}\n >\n {edit && (\n <div style={{\n position: 'absolute',\n top: 3,\n right: 8,\n fontSize: 10,\n fontWeight: 500,\n color: isHighlighted ? '#2563eb' : '#94a3b8',\n background: isHighlighted ? 'rgba(37,99,235,0.1)' : 'rgba(241,245,249,0.85)',\n padding: '1px 6px',\n borderRadius: 4,\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: 1,\n border: '1px solid',\n borderColor: isHighlighted ? 'rgba(37,99,235,0.2)' : 'rgba(203,213,225,0.6)'\n }}>\n {isOver ? 'Drop in Footer area' : `Footer area · ${footerHeight}px`}\n </div>\n )}\n\n {f.regBand && (\n <FreeWrap id=\"regBand\" attr={{ ...(f.regBandAttributes || {}), x: f.regBandAttributes?.x ?? 0, width: pageW, w: pageW }} defaultPos={defaults.regBand} edit={edit} ed={ed} bounds={bounds}>\n <div className=\"st-foot-band\" style={{ width: '100%', height: '100%', boxSizing: 'border-box', ...getTextStyle(f.regBandAttributes) }}>\n {regList.map((r, i) => (\n <span key={i}>\n {(r.label || edit) && <Editable tag=\"span\" className=\"st-ed-inline\" value={r.label} edit={edit} placeholder=\"Label\" onCommit={(v) => setReg(i, { label: v })} />}\n {' '}\n {(r.value || edit) && <Editable tag=\"span\" className=\"st-ed-inline\" value={r.value} edit={edit} placeholder=\"number\" onCommit={(v) => setReg(i, { value: v })} />}\n </span>\n ))}\n </div>\n </FreeWrap>\n )}\n\n {f.contactRow && (f.address || f.phone || f.email) && (\n <FreeWrap id=\"contact\" attr={{ ...(f.contactAttributes || {}), width: (f.contactAttributes?.width === 714 || !f.contactAttributes?.width) ? (cw - 80) : f.contactAttributes.width }} defaultPos={defaults.contact} edit={edit} ed={ed} bounds={bounds}>\n <div className=\"st-foot-contact\" style={{ width: '100%', height: '100%', boxSizing: 'border-box', ...contactStyle }}>\n {(f.address || edit) && <span><Ic k=\"pin\" style={contactIconStyle} /><Editable tag=\"span\" className=\"st-ed-inline\" value={f.address} edit={edit} placeholder=\"Address\" onCommit={(v) => setF({ address: v })} /></span>}\n {(f.phone || edit) && <span><Editable tag=\"span\" className=\"st-ed-inline\" value={f.phone} edit={edit} placeholder=\"Phone\" onCommit={(v) => setF({ phone: v })} /></span>}\n {(f.email || edit) && <span><Ic k=\"mail\" style={contactIconStyle} /><Editable tag=\"span\" className=\"st-ed-inline\" value={f.email} edit={edit} placeholder=\"Email\" onCommit={(v) => setF({ email: v })} /></span>}\n </div>\n </FreeWrap>\n )}\n\n {f.note && (\n <FreeWrap id=\"note\" attr={f.noteAttributes} defaultPos={defaults.note} edit={edit} ed={ed} bounds={bounds}>\n <div className=\"st-foot-meta\" style={{ width: '100%', height: '100%', boxSizing: 'border-box', ...getTextStyle(f.noteAttributes) }}>\n <Editable tag=\"span\" className=\"st-ed-inline\" value={f.note} edit={edit} placeholder=\"System note\" onCommit={(v) => setF({ note: v })} />\n </div>\n </FreeWrap>\n )}\n\n {f.pageNumbers && (\n <FreeWrap id=\"pageNumbers\" attr={{ ...(f.pageNumbersAttributes || {}), ...(f.pageNumbersAttributes?.x === 600 ? { x: defaults.pageNumbers.x } : {}) }} defaultPos={defaults.pageNumbers} edit={edit} ed={ed} bounds={bounds}>\n <div className=\"st-foot-meta\" style={{ width: '100%', height: '100%', boxSizing: 'border-box', justifyContent: 'flex-end', ...getTextStyle(f.pageNumbersAttributes) }}>\n <span className=\"st-foot-pg\" style={{ margin: 0 }}>{fmt}</span>\n </div>\n </FreeWrap>\n )}\n\n {(m.sections || []).filter((s: any) => s.zone === 'footer').map((sec: any) => (\n <FreeWrap key={sec.id} id={sec.id} attr={{ ...sec.attributes, x: sec.x ?? sec.attributes?.x, y: sec.y ?? sec.attributes?.y, w: sec.width ?? sec.attributes?.w, h: sec.height ?? sec.attributes?.h, width: sec.width ?? sec.attributes?.width, height: sec.height ?? sec.attributes?.height, type: sec.type, content: sec.content }} defaultPos={{ x: 50, y: 50, w: 200, h: 50 }} edit={edit} ed={ed} bounds={bounds} />\n ))}\n </div>\n );\n}\n\nfunction Watermark({ m }) {\n const w = m.watermark;\n if (!w.show) return null;\n const src = m.header?.logoSrc || '';\n return (\n <div className=\"st-wm\" style={{ opacity: w.opacity / 100 }}>\n <img src={src} alt=\"\"\n style={{ width: w.size + '%', transform: `rotate(${w.rotation}deg)` }} />\n </div>\n );\n}\n\n// ══ A4 PAGE — stationery wraps the body ═══════════════════════\n// mode: 'letterhead' (header+footer shown) | 'preprinted' (reserved blank margins)\nfunction PaperSheet({ m, type, pageIndex, total, sample, ed }) {\n const paper = m.paper || 'A4';\n const orient = m.orient || 'portrait';\n let [pageW, pageH] = paper === 'Letter' ? [816, 1056] : [794, 1123];\n if (orient === 'landscape') { const t = pageW; pageW = pageH; pageH = t; }\n\n const pre = m.mode === 'preprinted';\n // Ensure that if repeat is missing (older templates), it defaults to 'all'\n const headerRepeat = m.header.repeat || 'all';\n const headerShown = !pre && m.header.show && (headerRepeat === 'all' || pageIndex === 0);\n\n const compactHead = headerRepeat === 'all' && m.header.compactCont && pageIndex > 0;\n\n const footerRepeat = m.footer.repeat || 'all';\n const footerShown = !pre && m.footer.show && (footerRepeat === 'all' || pageIndex === 0);\n const compactFoot = false;\n const accent = DOC_META[type].accent;\n // editing is scoped to the master (header/footer/logo) on the first page only\n const edHead = (ed && ed.on && pageIndex === 0 && !compactHead) ? ed : null;\n const edFoot = (ed && ed.on && pageIndex === 0) ? ed : null;\n\n const innerStyle = pre\n ? { paddingTop: m.reserve.top, paddingBottom: m.reserve.bottom }\n : {};\n\n return (\n <div\n className=\"pbd-page\"\n data-screen-label={`Page ${pageIndex + 1}`}\n style={{\n ['--pbd-accent']: accent,\n width: `${pageW}px`,\n minWidth: `${pageW}px`,\n maxWidth: `${pageW}px`,\n minHeight: `${pageH}px`,\n }}\n >\n <Watermark m={m} />\n\n {pre && <div className=\"st-reserve st-reserve--top\" style={{ height: m.reserve.top }}>\n <span><Ic k=\"panelL\" />Reserved · pre-printed letterhead ({m.reserve.top}px)</span>\n </div>}\n {headerShown && <Header m={m} compact={compactHead} ed={edHead} />}\n\n <div className=\"pbd pbd-page-inner\" data-density=\"compact\" style={{ ['--pbd-accent']: accent, ...innerStyle }}>\n {sample\n ? <Body type={type} pageIndex={pageIndex} total={total} />\n : <div className=\"st-blank\"><span>{ed && ed.on ? 'Document content appears here · edit the header & footer around it' : 'Blank stationery · content area'}</span></div>}\n </div>\n\n {footerShown && <Footer m={m} pageIndex={pageIndex} total={total} compact={compactFoot} ed={edFoot} />}\n {pre && <div className=\"st-reserve st-reserve--bot\" style={{ height: m.reserve.bottom }}>\n <span><Ic k=\"panelR\" />Reserved · pre-printed footer ({m.reserve.bottom}px)</span>\n </div>}\n </div>\n );\n}\n\nexport const STDoc = { PaperSheet, DOC_META, Header, Footer, Watermark, Body };\n\n\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — document schema\n Per doc type: meta (name/icon/accent) · field tree · sample data\n Exposes export const PBData = { DOCS, order }\n ───────────────────────────────────────────────────────────── */\n\n // shared issuer (the ERP tenant)\n const COMPANY = {\n name: 'ALTRAD SPAR KSA',\n line1: 'King Abdullah Road, PO Box 1396',\n line2: 'Al-Jubail 31951, Kingdom of Saudi Arabia',\n phone: '+966 (13) 361 9096',\n email: 'info@arabianspar.com',\n web: 'www.arabianspar.com',\n trn: '300456789100003',\n };\n const BANK = {\n name: 'Saudi National Bank (SNB)',\n account: 'ALTRAD SPAR KSA',\n iban: 'SA44 1000 0000 1004 8821 3000',\n swift: 'NCBKSAJE',\n };\n const CUSTOMER = {\n name: 'Etisalat Digital — Smart Solutions',\n attn: 'Procurement Dept.',\n line1: 'Etisalat Tower 2, Sheikh Zayed Road',\n line2: 'Dubai, United Arab Emirates',\n trn: '100200300400500',\n email: 'ap@etisalat.ae',\n };\n\n // a believable line-item set (enough to push a 2nd page)\n const ITEMS = [\n { sku: 'EQ-7741', name: 'Industrial-grade network switch, 48-port managed', detail: 'Layer-3, PoE+, 740W', qty: 12, unit: 'pcs', price: 2150.0, tax: 5, disc: 0 },\n { sku: 'EQ-3320', name: 'Rack-mount UPS 3kVA online double-conversion', detail: 'With extended battery module', qty: 6, unit: 'pcs', price: 4380.0, tax: 5, disc: 5 },\n { sku: 'CB-1102', name: 'Cat6A S/FTP cabling, 305m drum', detail: 'LSZH, blue', qty: 20, unit: 'drum', price: 690.0, tax: 5, disc: 0 },\n { sku: 'EQ-5560', name: '42U server cabinet, 800×1000mm', detail: 'Perforated doors, cable mgmt', qty: 4, unit: 'pcs', price: 3120.0, tax: 5, disc: 0 },\n { sku: 'SV-0099', name: 'On-site installation & commissioning', detail: 'Certified engineers, 3 days', qty: 1, unit: 'lot', price: 8500.0, tax: 5, disc: 0 },\n { sku: 'EQ-2280', name: 'Fibre patch panel 24-port LC duplex', detail: 'OS2 single-mode', qty: 8, unit: 'pcs', price: 540.0, tax: 5, disc: 0 },\n { sku: 'AC-4410', name: 'Precision cooling unit, in-row 12kW', detail: 'Chilled-water, EC fans', qty: 2, unit: 'pcs', price: 18900.0, tax: 5, disc: 10 },\n { sku: 'EQ-6612', name: 'KVM-over-IP console, 16-port', detail: '1U, dual-power', qty: 3, unit: 'pcs', price: 2780.0, tax: 5, disc: 0 },\n { sku: 'CB-2204', name: 'Power distribution unit, metered 32A', detail: 'Vertical, 24 outlets', qty: 8, unit: 'pcs', price: 1240.0, tax: 5, disc: 0 },\n { sku: 'SV-0102', name: 'Annual maintenance contract (Tier-1)', detail: '24×7 response, 12 months', qty: 1, unit: 'yr', price: 22000.0, tax: 5, disc: 0 },\n { sku: 'EQ-8810', name: 'Environmental monitoring sensor kit', detail: 'Temp/humidity/leak, 12 nodes', qty: 1, unit: 'kit', price: 6400.0, tax: 5, disc: 0 },\n { sku: 'CB-3300', name: 'Overhead cable tray system, 300mm', detail: 'Hot-dip galvanised, per metre', qty: 60, unit: 'm', price: 78.0, tax: 5, disc: 0 },\n ];\n // precompute amounts + totals\n function priced(items) {\n let sub = 0, taxTotal = 0, discTotal = 0;\n const rows = items.map(it => {\n const gross = it.qty * it.price;\n const discAmt = gross * (it.disc || 0) / 100;\n const net = gross - discAmt;\n const taxAmt = net * (it.tax || 0) / 100;\n sub += net; taxTotal += taxAmt; discTotal += discAmt;\n return { ...it, amount: net };\n });\n return { rows, subtotal: sub, tax: taxTotal, discount: discTotal, total: sub + taxTotal };\n }\n const P = priced(ITEMS);\n\n // ── field-tree helper ────────────────────────────────────\n const f = (tag, label) => ({ tag, label });\n const loop = (tag, label) => ({ tag, label, loop: true });\n\n const COMPANY_GROUP = { key: 'company', label: 'Company', icon: 'bank', fields: [\n f('{{company.name}}', 'Name'), f('{{company.line1}}', 'Address 1'), f('{{company.line2}}', 'Address 2'),\n f('{{company.phone}}', 'Phone'), f('{{company.email}}', 'Email'), f('{{company.web}}', 'Website'), f('{{company.trn}}', 'Tax / TRN'),\n ]};\n const ITEMS_GROUP = { key: 'items', label: 'Line items', icon: 'list', fields: [\n loop('{{#each items}} … {{/each}}', 'Repeat for every item'),\n f('{{@number}}', 'Row number'), f('{{this.sku}}', 'SKU / code'), f('{{this.name}}', 'Description'),\n f('{{this.detail}}', 'Sub-detail'), f('{{qty this.qty}}', 'Quantity'), f('{{this.unit}}', 'Unit'),\n f('{{money this.price}}', 'Unit price'), f('{{pct this.disc}}', 'Discount %'), f('{{pct this.tax}}', 'Tax %'),\n f('{{money this.amount}}', 'Line amount'),\n ]};\n const TOTALS_GROUP = { key: 'totals', label: 'Totals', icon: 'sum', fields: [\n f('{{money totals.subtotal}}', 'Subtotal'), f('{{money totals.discount}}', 'Discount'),\n f('{{money totals.tax}}', 'Tax / VAT'), f('{{money totals.total}}', 'Grand total'), f('{{totals.words}}', 'Amount in words'),\n ]};\n const SIGN_GROUP = { key: 'signoff', label: 'Sign-off & footer', icon: 'check', fields: [\n f('{{notes}}', 'Notes'), f('{{#each terms}} … {{/each}}', 'Terms list'), f('{{signatory.name}}', 'Signatory'),\n f('{{signatory.role}}', 'Signatory role'),\n ]};\n const partyGroup = (key, label) => ({ key, label, icon: 'users', fields: [\n f(`{{${key}.name}}`, 'Name'), f(`{{${key}.attn}}`, 'Attention'), f(`{{${key}.line1}}`, 'Address 1'),\n f(`{{${key}.line2}}`, 'Address 2'), f(`{{${key}.trn}}`, 'Tax / TRN'), f(`{{${key}.email}}`, 'Email'),\n ]});\n const metaGroup = (fields) => ({ key: 'doc', label: 'Document', icon: 'file', fields });\n\n const TERMS_QUOTE = ['Prices are quoted in AED and valid for 30 days from the date of issue.',\n 'Delivery within 4–6 weeks of confirmed purchase order and advance payment.',\n '50% advance with PO, balance against delivery. Prices exclusive of site works unless stated.'];\n\n // ══════════════ KSA bilingual (ZATCA) Tax Invoice ════════════\n // A self-contained Saudi tax invoice: its own bilingual seller/buyer\n // blocks (EN + AR + CRN + VAT), 15% VAT line items, ZATCA totals and\n // a QR. Amounts use plain figures (currency '' ) with \"SAR\" baked into\n // the labels, exactly like a compliant KSA invoice.\n const KSA_SELLER = {\n nameEn: 'ALTRAD SPAR KSA', nameAr: 'ألتراد سبار',\n addr1En: 'King Abdullah Road, PO Box 1396', addr1Ar: 'طريق الملك عبدالله، ص.ب ١٣٩٦',\n addr2En: 'Al-Jubail 31951, Kingdom of Saudi Arabia', addr2Ar: 'الجبيل ٣١٩٥١، المملكة العربية السعودية',\n crn: '1010488213', vat: '300456789100003',\n };\n const KSA_BUYER = {\n nameEn: 'Saudi Modern Contracting Company', nameAr: 'الشركة السعودية للمقاولات الحديثة',\n addr1En: 'King Fahd Rd, Al Murabba District, Building 6210', addr1Ar: 'طريق الملك فهد، حي المربع، مبنى ٦٢١٠',\n addr2En: 'Al Jubail 35514, Kingdom of Saudi Arabia', addr2Ar: 'الجبيل ٣٥٥١٤، المملكة العربية السعودية',\n crn: '2055041188', vat: '311388607100003',\n };\n const KSA_BANK = {\n nameEn: 'ALTRAD SPAR KSA', nameAr: 'ألتراد سبار',\n bankEn: 'Saudi National Bank (SNB)', bankAr: 'البنك الأهلي السعودي',\n branchEn: 'Al-Jubail', branchAr: 'الجبيل',\n account: 'SNB-100 488 2130', iban: 'SA44 1000 0000 1004 8821 3000', swift: 'NCBKSAJE',\n };\n const KSA_ITEMS = [\n { sku: 'SCF-1200', nameEn: 'Scaffolding rental charges as per attached specifications', nameAr: 'تكاليف تأجير السقالات وفقاً للمواصفات المرفقة', qty: 1, unitEn: 'Month', unitAr: 'شهر', price: 4250.0, disc: 0, tax: 15 },\n { sku: 'SCF-2010', nameEn: 'Aluminium mobile access tower, 5.2 m working height', nameAr: 'برج وصول ألمنيوم متحرك، ارتفاع عمل ٥٫٢ م', qty: 3, unitEn: 'pcs', unitAr: 'قطعة', price: 980.0, disc: 0, tax: 15 },\n { sku: 'SAF-3300', nameEn: 'Site safety netting & toe boards, supply & fix', nameAr: 'شبكات السلامة وألواح القدم بالموقع، توريد وتركيب', qty: 120, unitEn: 'm²', unitAr: 'م²', price: 18.0, disc: 0, tax: 15 },\n { sku: 'LBR-0050', nameEn: 'Erection & dismantling labour, certified crew', nameAr: 'أعمال التركيب والفك بطاقم معتمد', qty: 1, unitEn: 'lot', unitAr: 'دفعة', price: 2600.0, disc: 5, tax: 15 },\n { sku: 'LOG-0090', nameEn: 'Transportation & on-site logistics', nameAr: 'النقل والخدمات اللوجستية بالموقع', qty: 1, unitEn: 'trip', unitAr: 'رحلة', price: 750.0, disc: 0, tax: 15 },\n ];\n function pricedKsa(items) {\n let gross = 0, disc = 0, net = 0, vat = 0;\n const rows = items.map(it => {\n const g = it.qty * it.price;\n const d = g * (it.disc || 0) / 100;\n const taxable = g - d;\n const taxAmt = taxable * (it.tax || 0) / 100;\n gross += g; disc += d; net += taxable; vat += taxAmt;\n return { ...it, name: it.nameEn, amount: taxable, gross: g, discAmt: d, taxable, taxAmt, total: taxable + taxAmt };\n });\n return { rows, totals: { gross, discount: disc, exclVat: net, vatAmount: vat, inclVat: net + vat, balanceDue: net + vat, subtotal: net, tax: vat, total: net + vat } };\n }\n const KP = pricedKsa(KSA_ITEMS);\n\n const ksaPartyArGroup = (key, label) => ({ key, label, icon: 'users', fields: [\n f(`{{${key}.name}}`, 'Name (AR)'),\n f(`{{${key}.line1}}`, 'Address 1 (AR)'),\n f(`{{${key}.line2}}`, 'Address 2 (AR)'),\n ]});\n\n const DOCS = {\n quotation: {\n id: 'quotation', name: 'Quotation', full: 'Quotation / Estimate', icon: 'quote', accent: 'acc-green', docAccent: '#1A8A56',\n desc: 'Priced offer with validity, line items and terms.',\n includes: [{ flag: 'showTerms', label: 'Terms' }],\n groups: [COMPANY_GROUP, partyGroup('customer', 'Customer'),\n metaGroup([f('{{doc.number}}', 'Quote no.'), f('{{doc.date}}', 'Date'), f('{{doc.validUntil}}', 'Valid until'),\n f('{{doc.salesRep}}', 'Sales rep'), f('{{doc.currency}}', 'Currency'), f('{{doc.reference}}', 'Customer ref')]),\n ITEMS_GROUP, TOTALS_GROUP, SIGN_GROUP],\n sample: {\n company: COMPANY, customer: CUSTOMER, currency: 'AED',\n doc: { number: 'QT-2026-0418', date: '30 May 2026', validUntil: '29 Jun 2026', salesRep: 'L. Haddad', reference: 'RFQ-ETD-7741' },\n items: P.rows, totals: { ...totalsOf(P), words: 'Three hundred eighteen thousand nine hundred forty-two AED only' },\n notes: 'Thank you for the opportunity to quote. We would be pleased to arrange a site survey at your convenience.',\n terms: TERMS_QUOTE, signatory: { name: 'L. Haddad', role: 'Sales Manager' },\n },\n },\n invoice: {\n id: 'invoice', name: 'Tax Invoice', full: 'Tax Invoice', icon: 'doc', accent: 'acc-navy', docAccent: '#1B2C6E', family: 'invoice',\n desc: 'VAT-compliant invoice with TRN, tax breakdown and payment details.',\n includes: [{ flag: 'showBank', label: 'Payment details' }],\n groups: [COMPANY_GROUP, partyGroup('customer', 'Bill to'),\n metaGroup([f('{{doc.number}}', 'Invoice no.'), f('{{doc.date}}', 'Issue date'), f('{{doc.dueDate}}', 'Due date'),\n f('{{doc.po}}', 'PO number'), f('{{doc.terms}}', 'Payment terms'), f('{{doc.status}}', 'Status')]),\n ITEMS_GROUP, TOTALS_GROUP,\n { key: 'pay', label: 'Payment', icon: 'wallet', fields: [f('{{bank.name}}', 'Bank'), f('{{bank.iban}}', 'IBAN'), f('{{bank.swift}}', 'SWIFT'), f('{{bank.account}}', 'Account name')] },\n SIGN_GROUP],\n sample: {\n company: COMPANY, customer: CUSTOMER, bank: BANK, currency: 'AED',\n doc: { number: 'INV-2026-1183', date: '30 May 2026', dueDate: '29 Jun 2026', po: 'PO-ETD-55021', terms: 'Net 30', status: 'due' },\n items: P.rows, totals: { ...totalsOf(P), words: 'Three hundred eighteen thousand nine hundred forty-two AED only' },\n notes: 'Please quote the invoice number on all remittances. Late payments may attract 1.5% monthly interest.',\n terms: ['Goods remain the property of Falcon Industrial Trading LLC until paid in full.'],\n signatory: { name: 'S. Khan', role: 'Finance Controller' },\n },\n },\n invoice_ksa: {\n id: 'invoice_ksa', name: 'Tax Invoice · KSA', full: 'Tax Invoice — KSA (Bilingual)', icon: 'doc', accent: 'acc-green', docAccent: '#0E7A53', family: 'invoice',\n desc: 'ZATCA-ready Saudi tax invoice — English & Arabic, 15% VAT, QR.',\n includes: [{ flag: 'showBank', label: 'Bank details' }, { flag: 'showQr', label: 'ZATCA QR' }],\n groups: [ksaPartyArGroup('companyAr', 'Seller (Arabic)'), ksaPartyArGroup('customerAr', 'Buyer (Arabic)'),\n metaGroup([f('{{doc.number}}', 'Invoice no.'), f('{{doc.date}}', 'Invoice date'), f('{{doc.supplyDate}}', 'Supply date'),\n f('{{doc.dueDate}}', 'Due date'), f('{{doc.periodFrom}}', 'Period from'), f('{{doc.periodTo}}', 'Period to'),\n f('{{doc.po}}', 'Contract / PO no.'), f('{{doc.project}}', 'Project / ref.')]),\n { key: 'items', label: 'Line items', icon: 'list', fields: [\n loop('{{#each items}} … {{/each}}', 'Repeat for every item'), f('{{@number}}', 'Row number'),\n f('{{this.sku}}', 'Code / SKU'), f('{{this.name}}', 'Description (EN)'), f('{{this.nameAr}}', 'Description (AR)'),\n f('{{qty this.qty}}', 'Quantity'), f('{{this.unitEn}}', 'Unit (EN)'), f('{{this.unitAr}}', 'Unit (AR)'),\n f('{{money this.price}}', 'Unit rate'), f('{{money this.taxable}}', 'Taxable amount'), f('{{pct this.tax}}', 'Tax rate'),\n f('{{money this.taxAmt}}', 'Tax amount'), f('{{money this.total}}', 'Total with tax') ] },\n { key: 'totals', label: 'Totals', icon: 'sum', fields: [\n f('{{money totals.gross}}', 'Gross total'), f('{{money totals.discount}}', 'Total discount'),\n f('{{money totals.exclVat}}', 'Total excl. VAT'), f('{{money totals.vatAmount}}', 'VAT amount'),\n f('{{money totals.inclVat}}', 'Amount incl. VAT'), f('{{money totals.balanceDue}}', 'Balance due'),\n f('{{words.en}}', 'Amount in words (EN)'), f('{{words.ar}}', 'Amount in words (AR)') ] },\n { key: 'bank', label: 'Bank details', icon: 'wallet', fields: [\n f('{{bank.nameEn}}', 'Account name'), f('{{bank.bankEn}}', 'Bank'), f('{{bank.branchEn}}', 'Branch'),\n f('{{bank.account}}', 'Account no.'), f('{{bank.iban}}', 'IBAN'), f('{{bank.swift}}', 'SWIFT') ] },\n ],\n sample: {\n company: COMPANY, currency: '', companyAr: { name: 'ألتراد سبار', line1: 'طريق 124 ، الجبيل 31951', line2: 'المملكة العربية السعودية' }, customerAr: { name: 'المتحدة للإنشاءات', line1: 'ص.ب 8871، الرياض', line2: 'المملكة العربية السعودية' }, bank: KSA_BANK,\n doc: { number: 'INV-KSA-2026-0734', date: '30 May 2026', supplyDate: '30 May 2026', dueDate: '29 Jun 2026',\n periodFrom: '01 May 2026', periodTo: '31 May 2026', po: 'SMC-PO-0202-26', project: 'Scaffolding — Jubail' },\n items: KP.rows, totals: KP.totals,\n words: { en: 'Fourteen Thousand Four Hundred Fifty-Five Saudi Riyals and Fifty Halalas only',\n ar: 'أربعة عشر ألفاً وأربعمائة وخمسة وخمسون ريالاً سعودياً وخمسون هللة لا غير' },\n notes: 'This is a system-generated tax invoice. No signature is required. هذه فاتورة ضريبية صادرة آلياً ولا تتطلب توقيعاً.',\n signatory: { name: '', role: '' },\n },\n },\n delivery: {\n id: 'delivery', name: 'Delivery Note', full: 'Delivery Note', icon: 'truck', accent: 'acc-amber', docAccent: '#8a540b',\n desc: 'Goods despatch note — quantities only, received-by sign-off.',\n groups: [COMPANY_GROUP, partyGroup('shipTo', 'Ship to'), partyGroup('customer', 'Customer'),\n metaGroup([f('{{doc.number}}', 'DN number'), f('{{doc.date}}', 'Despatch date'), f('{{doc.invoice}}', 'Invoice ref'),\n f('{{doc.po}}', 'PO number'), f('{{doc.vehicle}}', 'Vehicle'), f('{{doc.driver}}', 'Driver')]),\n { key: 'items', label: 'Line items', icon: 'list', fields: [\n loop('{{#each items}} … {{/each}}', 'Repeat for every item'), f('{{@number}}', 'Row number'),\n f('{{this.sku}}', 'SKU / code'), f('{{this.name}}', 'Description'), f('{{qty this.qty}}', 'Qty ordered'),\n f('{{qty this.delivered}}', 'Qty delivered'), f('{{this.unit}}', 'Unit') ] },\n SIGN_GROUP],\n sample: {\n company: COMPANY, customer: CUSTOMER, shipTo: { name: 'Etisalat DC — Site B', attn: 'Goods Inwards', line1: 'Dubai Investment Park 2', line2: 'Dubai, UAE', email: '' }, currency: 'AED',\n doc: { number: 'DN-2026-0902', date: '30 May 2026', invoice: 'INV-2026-1183', po: 'PO-ETD-55021', vehicle: 'Mercedes Actros · D-44192', driver: 'M. Iqbal' },\n items: P.rows.map(r => ({ ...r, delivered: r.qty })),\n notes: 'Please inspect all goods on receipt. Shortages or damage must be noted below and reported within 48 hours.',\n terms: [], signatory: { name: '', role: '' },\n },\n },\n po: {\n id: 'po', name: 'Purchase Order', full: 'Purchase Order', icon: 'cart', accent: 'acc-blue', docAccent: '#1F4FA8',\n desc: 'Order placed on a supplier — quantities, prices and delivery terms.',\n includes: [{ flag: 'showTerms', label: 'Terms' }],\n groups: [COMPANY_GROUP, partyGroup('vendor', 'Supplier'), partyGroup('shipTo', 'Deliver to'),\n metaGroup([f('{{doc.number}}', 'PO number'), f('{{doc.date}}', 'Order date'), f('{{doc.requiredBy}}', 'Required by'),\n f('{{doc.buyer}}', 'Buyer'), f('{{doc.incoterms}}', 'Incoterms'), f('{{doc.currency}}', 'Currency')]),\n ITEMS_GROUP, TOTALS_GROUP, SIGN_GROUP],\n sample: {\n company: COMPANY,\n vendor: { name: 'Gulf Components FZE', attn: 'Sales Desk', line1: 'Jebel Ali Free Zone, South', line2: 'Dubai, UAE', trn: '100998877600002', email: 'orders@gulfcomp.ae' },\n shipTo: { name: 'Falcon Warehouse — JAFZA', attn: 'Stores', line1: 'Plot S-40701, JAFZA South', line2: 'Dubai, UAE', email: '' }, currency: 'AED',\n doc: { number: 'PO-2026-3340', date: '30 May 2026', requiredBy: '20 Jun 2026', buyer: 'A. Okoro', incoterms: 'DDP — Jebel Ali' },\n items: P.rows.slice(0, 8), totals: { ...totalsOf(priced(ITEMS.slice(0, 8))), words: '' },\n notes: 'This PO is governed by Falcon Industrial standard purchasing terms. Reference the PO number on all documents and invoices.',\n terms: ['Deliver in full unless partial delivery is agreed in writing.', 'Invoices without a valid PO number will be returned.'],\n signatory: { name: 'A. Okoro', role: 'Procurement Lead' },\n },\n },\n report: {\n id: 'report', name: 'Financial Report', full: 'Financial Report (P&L)', icon: 'barChart', accent: 'acc-teal', docAccent: '#156B66',\n desc: 'Statement-style report — grouped sections, subtotals, KPIs.',\n includes: [{ flag: 'showKpis', label: 'Key figures' }],\n groups: [COMPANY_GROUP,\n metaGroup([f('{{doc.title}}', 'Report title'), f('{{doc.period}}', 'Period'), f('{{doc.basis}}', 'Basis'),\n f('{{doc.currency}}', 'Currency'), f('{{doc.preparedBy}}', 'Prepared by'), f('{{doc.generated}}', 'Generated')]),\n { key: 'kpis', label: 'KPIs', icon: 'target', fields: [loop('{{#each kpis}} … {{/each}}', 'Repeat for each KPI'), f('{{this.label}}', 'Label'), f('{{this.value}}', 'Value'), f('{{this.sub}}', 'Caption')] },\n { key: 'rows', label: 'Statement rows', icon: 'table', fields: [\n loop('{{#each rows}} … {{/each}}', 'Repeat for each row'), f('{{this.label}}', 'Line label'),\n f('{{money this.current}}', 'Current period'), f('{{money this.prior}}', 'Prior period'),\n f('{{pct this.pctRevenue}}', '% of revenue'), f('{{this.kind}}', 'Row kind (section/sub/grand)') ] },\n SIGN_GROUP],\n sample: {\n company: COMPANY, currency: 'AED',\n doc: { title: 'Statement of Profit & Loss', period: '1 Jan – 31 May 2026', basis: 'Accrual', preparedBy: 'R. Mehta', generated: '30 May 2026 14:08' },\n kpis: [ { label: 'Revenue', value: 'AED 8.42M', sub: '+12.4% YoY' }, { label: 'Gross margin', value: '41.8%', sub: '+1.9 pts' },\n { label: 'EBITDA', value: 'AED 1.96M', sub: '23.3% of rev' }, { label: 'Net profit', value: 'AED 1.18M', sub: '14.0% of rev' } ],\n rows: REPORT_ROWS(),\n notes: 'Figures are management accounts, unaudited. Prior-period comparatives restated for the reclassification of logistics costs.',\n terms: [], signatory: { name: 'R. Mehta', role: 'Group Financial Controller' },\n },\n },\n receipt: {\n id: 'receipt', name: 'Payment Receipt', full: 'Receipt / Payment voucher', icon: 'receipt', accent: 'acc-green', docAccent: '#156B43',\n desc: 'Confirmation that a payment has been received and allocated.',\n groups: [COMPANY_GROUP, partyGroup('customer', 'Received from'),\n metaGroup([f('{{doc.number}}', 'Receipt no.'), f('{{doc.date}}', 'Date'), f('{{doc.method}}', 'Method'),\n f('{{doc.reference}}', 'Txn reference'), f('{{doc.currency}}', 'Currency')]),\n { key: 'alloc', label: 'Allocation', icon: 'list', fields: [\n loop('{{#each allocations}} … {{/each}}', 'Repeat per invoice'), f('{{this.invoice}}', 'Invoice no.'),\n f('{{this.date}}', 'Invoice date'), f('{{money this.invoiceTotal}}', 'Invoice total'), f('{{money this.applied}}', 'Amount applied') ] },\n { key: 'amt', label: 'Amount', icon: 'sum', fields: [f('{{money received}}', 'Amount received'), f('{{words}}', 'In words'), f('{{money balance}}', 'Balance remaining')] },\n SIGN_GROUP],\n sample: {\n company: COMPANY, customer: CUSTOMER, currency: 'AED',\n doc: { number: 'RCPT-2026-0771', date: '30 May 2026', method: 'Bank transfer', reference: 'ENBD-TT-99041' },\n allocations: [\n { invoice: 'INV-2026-1102', date: '02 May 2026', invoiceTotal: 142500, applied: 142500 },\n { invoice: 'INV-2026-1140', date: '15 May 2026', invoiceTotal: 88200, applied: 88200 },\n { invoice: 'INV-2026-1183', date: '30 May 2026', invoiceTotal: 318942, applied: 119300 },\n ],\n received: 350000, balance: 199642, words: 'Three hundred fifty thousand AED only',\n notes: 'This receipt is issued subject to realisation of the funds. Allocations applied oldest-first.',\n terms: [], signatory: { name: 'S. Khan', role: 'Finance Controller' },\n },\n },\n credit: {\n id: 'credit', name: 'Credit Note', full: 'Credit Note', icon: 'minus', accent: 'acc-rose', docAccent: '#A8232A',\n desc: 'Reverses or reduces a prior invoice — VAT adjusted.',\n groups: [COMPANY_GROUP, partyGroup('customer', 'Bill to'),\n metaGroup([f('{{doc.number}}', 'Credit no.'), f('{{doc.date}}', 'Date'), f('{{doc.against}}', 'Against invoice'),\n f('{{doc.reason}}', 'Reason'), f('{{doc.currency}}', 'Currency')]),\n ITEMS_GROUP, TOTALS_GROUP, SIGN_GROUP],\n sample: {\n company: COMPANY, customer: CUSTOMER, currency: 'AED',\n doc: { number: 'CN-2026-0044', date: '30 May 2026', against: 'INV-2026-1140', reason: 'Goods returned — 2 units UPS faulty' },\n items: priced([\n { sku: 'EQ-3320', name: 'Rack-mount UPS 3kVA online double-conversion', detail: 'Returned — DOA', qty: 2, unit: 'pcs', price: 4380.0, tax: 5, disc: 5 },\n { sku: 'SV-CR01', name: 'Restocking adjustment', detail: 'Per returns policy', qty: 1, unit: 'lot', price: -320.0, tax: 5, disc: 0 },\n ]).rows,\n totals: { ...totalsOf(priced([{ qty: 2, price: 4380, tax: 5, disc: 5 }, { qty: 1, price: -320, tax: 5, disc: 0 }])), words: 'Eight thousand four hundred sixty-eight AED only' },\n notes: 'This credit note will be applied against your outstanding balance. VAT has been adjusted accordingly.',\n terms: [], signatory: { name: 'S. Khan', role: 'Finance Controller' },\n },\n },\n statement: {\n id: 'statement', name: 'Statement', full: 'Statement of Account', icon: 'list', accent: 'acc-slate', docAccent: '#3D4046',\n desc: 'Running ledger of invoices, credits and payments with aging.',\n groups: [COMPANY_GROUP, partyGroup('customer', 'Account'),\n metaGroup([f('{{doc.number}}', 'Statement no.'), f('{{doc.date}}', 'As at'), f('{{doc.period}}', 'Period'),\n f('{{doc.currency}}', 'Currency'), f('{{money doc.openingBalance}}', 'Opening balance')]),\n { key: 'ledger', label: 'Ledger lines', icon: 'list', fields: [\n loop('{{#each ledger}} … {{/each}}', 'Repeat per transaction'), f('{{this.date}}', 'Date'),\n f('{{this.ref}}', 'Reference'), f('{{this.type}}', 'Type'), f('{{money this.debit}}', 'Debit'),\n f('{{money this.credit}}', 'Credit'), f('{{money this.balance}}', 'Running balance') ] },\n { key: 'aging', label: 'Aging', icon: 'clock', fields: [f('{{money aging.current}}', 'Current'), f('{{money aging.d30}}', '1–30'), f('{{money aging.d60}}', '31–60'), f('{{money aging.d90}}', '61–90'), f('{{money aging.over}}', '90+'), f('{{money closingBalance}}', 'Closing balance')] },\n SIGN_GROUP],\n sample: {\n company: COMPANY, customer: CUSTOMER, currency: 'AED',\n doc: { number: 'SOA-2026-0512', date: '31 May 2026', period: '1 Jan – 31 May 2026', openingBalance: 0 },\n ledger: LEDGER(),\n aging: { current: 318942, d30: 119300, d60: 0, d90: 0, over: 0 }, closingBalance: 438242,\n notes: 'Please remit overdue amounts at your earliest convenience. Contact accounts@falconind.ae for any queries.',\n terms: [], signatory: { name: 'S. Khan', role: 'Finance Controller' },\n },\n },\n };\n\n function totalsOf(p) { return { subtotal: p.subtotal, discount: p.discount, tax: p.tax, total: p.total }; }\n\n function REPORT_ROWS() {\n return [\n { kind: 'section', label: 'Revenue' },\n { label: 'Product sales', current: 6120000, prior: 5480000, pctRevenue: 72.7 },\n { label: 'Service & support', current: 1840000, prior: 1510000, pctRevenue: 21.9 },\n { label: 'Other income', current: 460000, prior: 502000, pctRevenue: 5.4 },\n { kind: 'sub', label: 'Total revenue', current: 8420000, prior: 7492000, pctRevenue: 100 },\n { kind: 'section', label: 'Cost of sales' },\n { label: 'Materials & goods', current: -3980000, prior: -3610000, pctRevenue: -47.3 },\n { label: 'Direct labour', current: -920000, prior: -865000, pctRevenue: -10.9 },\n { kind: 'sub', label: 'Gross profit', current: 3520000, prior: 3017000, pctRevenue: 41.8 },\n { kind: 'section', label: 'Operating expenses' },\n { label: 'Salaries & benefits', current: -1080000, prior: -990000, pctRevenue: -12.8 },\n { label: 'Rent & facilities', current: -360000, prior: -348000, pctRevenue: -4.3 },\n { label: 'Marketing', current: -240000, prior: -180000, pctRevenue: -2.9 },\n { label: 'Depreciation', current: -210000, prior: -205000, pctRevenue: -2.5 },\n { label: 'General & admin', current: -312000, prior: -301000, pctRevenue: -3.7 },\n { kind: 'sub', label: 'Operating profit', current: 1118000, prior: 793000, pctRevenue: 13.3 },\n { label: 'Finance costs', current: -64000, prior: -71000, pctRevenue: -0.8 },\n { label: 'Tax (9%)', current: -94000, prior: -58000, pctRevenue: -1.1 },\n { kind: 'grand', label: 'Net profit for the period', current: 1180000, prior: 664000, pctRevenue: 14.0 },\n ];\n }\n function LEDGER() {\n const L = [\n { date: '02 Jan', ref: 'INV-2026-0911', type: 'Invoice', debit: 96400, credit: 0 },\n { date: '18 Jan', ref: 'RCPT-2026-0610', type: 'Payment', debit: 0, credit: 96400 },\n { date: '04 Feb', ref: 'INV-2026-0998', type: 'Invoice', debit: 154200, credit: 0 },\n { date: '20 Feb', ref: 'CN-2026-0031', type: 'Credit note', debit: 0, credit: 12200 },\n { date: '28 Feb', ref: 'RCPT-2026-0688', type: 'Payment', debit: 0, credit: 142000 },\n { date: '02 May', ref: 'INV-2026-1102', type: 'Invoice', debit: 142500, credit: 0 },\n { date: '15 May', ref: 'INV-2026-1140', type: 'Invoice', debit: 88200, credit: 0 },\n { date: '22 May', ref: 'RCPT-2026-0771', type: 'Payment', debit: 0, credit: 350000 },\n { date: '30 May', ref: 'INV-2026-1183', type: 'Invoice', debit: 318942, credit: 0 },\n { date: '30 May', ref: 'INV-2026-1190', type: 'Invoice', debit: 119300, credit: 0 },\n ];\n let bal = 0;\n return L.map(r => { bal += r.debit - r.credit; return { ...r, balance: bal }; });\n }\n\n export const PBData = { DOCS, order: ['quotation', 'invoice', 'invoice_ksa', 'delivery', 'po', 'report', 'receipt', 'credit', 'statement'] };\n\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\nimport { STDoc } from './stationery-doc';\nimport { Ic } from './icons';\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — paginator + page frame\n • Measures every flow block once (off-screen) and flows it onto\n real pages. Content height is a DETERMINISTIC function of the\n page size, margins and header/footer heights — so the same\n inputs always yield the same page count (no density flip-flop).\n • The [data-split] line-item table splits row-by-row with its\n <thead> repeated on continuation pages.\n • Running header & footer are fully configurable (height, which\n fields, logo, page numbers, which pages they repeat on).\n • [data-edit] fields become click-to-edit in the preview.\n Exposes export const PBPaper = { PaperDoc, dims }\n ───────────────────────────────────────────────────────────── */\n\n const { useRef, useState, useLayoutEffect, useEffect } = React;\n\n const SIZES = { A4: [794, 1123], Letter: [816, 1056] };\n const PAD_X = 52; // left/right content margin\n const BASE_MARGIN = 42; // minimum top/bottom content margin\n const BAND_GAP = 10; // gap between a running band and the content\n const EPS = 1.6; // tolerance so near-fit blocks don't flip a page\n\n function dims(paper, orient) {\n let [w, h] = SIZES[paper] || SIZES.A4;\n if (orient === 'landscape') { const t = w; w = h; h = t; }\n return { w, h, cw: w - PAD_X * 2 };\n }\n\n // margins reserved for the running header/footer bands\n function margins(frame) {\n const f = frame || {};\n const h = f.header || {}, ft = f.footer || {};\n const top = h.show ? Math.max(BASE_MARGIN, (h.height || 34) + BAND_GAP) : BASE_MARGIN;\n const bot = ft.show ? Math.max(BASE_MARGIN, (ft.height || 34) + BAND_GAP) : BASE_MARGIN;\n return { top, bot };\n }\n\n function bandShown(cfg, pageIndex) {\n if (!cfg || !cfg.show) return false;\n if (cfg.repeat === 'first') return pageIndex === 0;\n if (cfg.repeat === 'subsequent') return pageIndex > 0;\n return true; // 'all'\n }\n\n const px = (v) => parseFloat(v) || 0;\n function attrsOf(el) {\n let s = '';\n for (const a of el.attributes) s += ` ${a.name}=\"${a.value.replace(/\"/g, '"')}\"`;\n return s;\n }\n\n // ── core layout ──────────────────────────────────────────────\n // core layout. `chFn(pageIndex)` returns the usable content height for that\n // page — it varies because the stationery header is full on page 1 but slim\n // (or absent) on continuation pages, and footers may be first-page-only.\n function paginate(measureRoot, chFn) {\n // ignore display:none blocks (e.g. the body's .pbd-foot when a stationery\n // owns the footer) — a hidden node returns a zero rect that would otherwise\n // be mis-measured as a full-page-tall block and spawn an empty trailing page.\n const kids = [...measureRoot.children].filter(k => getComputedStyle(k).display !== 'none');\n const rootTop = measureRoot.getBoundingClientRect().top;\n const rects = kids.map(k => k.getBoundingClientRect());\n const blocks = kids.map((el, i) => {\n const top = rects[i].top - rootTop;\n const bottom = (i < kids.length - 1 ? rects[i + 1].top : measureRoot.scrollHeight + rootTop) - rootTop;\n return { el, h: Math.max(rects[i].height, bottom - top), split: el.hasAttribute('data-split') };\n });\n\n const pages = [[]];\n let cur = 0;\n let CH = chFn(0);\n const newPage = () => { pages.push([]); cur = 0; CH = chFn(pages.length - 1); };\n const place = (item, h) => { pages[pages.length - 1].push(item); cur += h; };\n\n for (const b of blocks) {\n if (!b.split) {\n if (cur > 0 && cur + b.h > CH + EPS) newPage();\n place({ kind: 'block', html: b.el.outerHTML }, b.h);\n continue;\n }\n // splittable line-item table\n const wrap = b.el;\n const table = wrap.querySelector('table');\n const thead = table.querySelector('thead');\n const tbody = table.querySelector('tbody');\n const trs = [...tbody.children];\n const gap = px(getComputedStyle(wrap).marginTop);\n const theadH = thead ? thead.getBoundingClientRect().height : 0;\n const rowH = trs.map(tr => tr.getBoundingClientRect().height);\n const wrapAttrs = attrsOf(wrap);\n const theadHTML = thead ? thead.outerHTML : '';\n const CONT_H = 16;\n\n let idx = 0, firstChunk = true;\n while (idx < trs.length) {\n const lead = firstChunk ? gap : 6;\n const minNeed = lead + theadH + rowH[idx] + 2;\n if (cur > 0 && cur + minNeed > CH + EPS) newPage();\n cur += lead;\n let avail = CH - cur - theadH;\n const chunkRows = [];\n let usedRowsH = 0;\n while (idx < trs.length) {\n if (chunkRows.length > 0 && avail - rowH[idx] < -EPS) break;\n chunkRows.push(trs[idx].outerHTML);\n avail -= rowH[idx];\n usedRowsH += rowH[idx];\n idx++;\n }\n const more = idx < trs.length;\n place({ kind: 'table', wrapAttrs, theadHTML, rows: chunkRows, cont: more, contFrom: !firstChunk },\n theadH + usedRowsH + (more ? CONT_H : 0));\n firstChunk = false;\n if (more) newPage();\n }\n }\n return pages;\n }\n\n function tableChunkHTML(it) {\n const cont = it.cont ? '<div class=\"pbd-items-cont\">Continued on next page →</div>' : '';\n const from = it.contFrom ? '<div class=\"pbd-items-cont\" style=\"text-align:left;padding-bottom:4px\">… continued</div>' : '';\n return `<div${it.wrapAttrs}>${from}<table class=\"pbd-items\">${it.theadHTML}<tbody>${it.rows.join('')}</tbody></table>${cont}</div>`;\n }\n\n // ── running header / footer band markup ─────────────────────\n function resolveSlot(key, r) {\n switch (key) {\n case 'company': return r.company || '';\n case 'title': return r.title || '';\n case 'docref': return r.ref || '';\n case 'date': return r.date || '';\n case 'none': return '';\n default: return key || '';\n }\n }\n\n function HeaderBand({ cfg, r }) {\n const left = resolveSlot(cfg.left || 'company', r);\n const right = resolveSlot(cfg.right || 'docref', r);\n return (\n <div className=\"pbd-runhead\" style={{ height: cfg.height || 34 }}>\n {cfg.showLogo && <img src=\"assets/ERPForce_Logo-Mark.png\" alt=\"\" />}\n {left && <span className=\"rh-l\">{left}</span>}\n {right && <span className=\"rh-r\">{right}</span>}\n </div>\n );\n }\n\n function FooterBand({ cfg, r, pageIndex, total }) {\n const fmt = (cfg.format || 'Page {n} of {total}')\n .replace('{n}', pageIndex + 1).replace('{page}', pageIndex + 1).replace('{total}', total);\n return (\n <div className=\"pbd-runfoot\" style={{ height: cfg.height || 34 }}>\n <span className=\"rf-l\">{r.footerText || ''}</span>\n {cfg.pageNumbers !== false && <span className=\"rf-r\">{fmt}</span>}\n </div>\n );\n }\n\n // reserved padding constants for stationery modes\n const ST_PAD_T = 26, ST_PAD_B = 22, BLANK_PAD = 48, PRE_PAD = 8;\n\n // ── main ────────────────────────────────────────────────────\n function PaperDoc({ html, running, frame, density, accent, headWeight, logoSize, headStyle,\n paper, orient, editable, onEdit, onPages, templateEditable, onTemplateEdit, onTokenClick,\n stationery, stationeryKind }) {\n const measureRef = useRef(null);\n const pagesRef = useRef(null);\n const stHeadRef = useRef(null);\n const stHeadCRef = useRef(null);\n const stFootRef = useRef(null);\n const stFootCRef = useRef(null);\n const [pages, setPages] = useState([]);\n const D = dims(paper || 'A4', orient || 'portrait');\n const M = margins(frame);\n\n const isPreset = stationeryKind === 'preset' && !!stationery;\n const isPre = stationeryKind === 'preprinted' && !!stationery;\n const isBlank = stationeryKind === 'blank';\n const stnManaged = isPreset || isPre || isBlank; // body masthead/footer suppressed\n const stSig = stationery ? JSON.stringify(stationery) : '';\n const frameSig = JSON.stringify(frame || {});\n\n const docStyle = {\n ['--pbd-accent']: accent || '#1B2C6E',\n ['--pbd-head-weight']: headWeight || 700,\n ['--pbd-logo-h']: (logoSize || 24) + 'px',\n };\n\n useLayoutEffect(() => {\n const root = measureRef.current;\n if (!root) return;\n root.style.width = D.cw + 'px';\n root.innerHTML = html;\n let cancelled = false;\n const run = () => {\n if (cancelled) return;\n // usable content height for a given page — header/footer differ per page\n const chFn = (pi) => {\n let top, bot;\n if (isPreset) {\n const fullH = (stationery.header.show && stHeadRef.current) ? stHeadRef.current.offsetHeight : 0;\n const compH = (stationery.header.show && stHeadCRef.current) ? stHeadCRef.current.offsetHeight : 0;\n const footH = (stationery.footer.show && stFootRef.current) ? stFootRef.current.offsetHeight : 0;\n const footCH = (stationery.footer.show && stFootCRef.current) ? stFootCRef.current.offsetHeight : 0;\n let hh = 0;\n if (stationery.header.show && (stationery.header.repeat === 'all' || pi === 0)) {\n hh = fullH;\n }\n let fh = 0;\n if (stationery.footer.show && (stationery.footer.repeat === 'all' || pi === 0)) {\n fh = footH;\n }\n top = hh + ST_PAD_T; bot = fh + ST_PAD_B;\n } else if (isPre) {\n top = (stationery.reserve.top || 0) + PRE_PAD; bot = (stationery.reserve.bottom || 0) + PRE_PAD;\n } else if (isBlank) {\n top = BLANK_PAD; bot = BLANK_PAD;\n } else {\n top = M.top; bot = M.bot;\n }\n return D.h - top - bot;\n };\n try { setPages(paginate(root, chFn)); } catch (e) { console.error('paginate', e); setPages([[{ kind: 'block', html }]]); }\n };\n run();\n const id = requestAnimationFrame(run);\n if (document.fonts && document.fonts.ready) document.fonts.ready.then(run);\n return () => { cancelled = true; cancelAnimationFrame(id); };\n }, [html, density, accent, headWeight, logoSize, headStyle, paper, orient, stationeryKind, stSig, frameSig]);\n\n useEffect(() => { if (onPages) onPages(pages.length); }, [pages]);\n\n // ── inline WYSIWYG editing wiring ──────────────────────────\n useEffect(() => {\n const root = pagesRef.current; if (!root) return;\n const eds = root.querySelectorAll('[data-edit]');\n if (!editable) { eds.forEach(el => el.removeAttribute('contenteditable')); return; }\n eds.forEach(el => { el.setAttribute('contenteditable', 'true'); el.classList.add('pbd-ed'); });\n\n const isMultiline = (el) => el.classList.contains('pbd-notes-body');\n const onFocusOut = (e) => {\n const el = e.target.closest && e.target.closest('[data-edit]');\n if (!el || !root.contains(el)) return;\n el.classList.remove('is-editing');\n if (onEdit) onEdit(el.getAttribute('data-edit'), el.getAttribute('data-edit-type') || 'text', el.innerText.trim());\n };\n const onFocusIn = (e) => { const el = e.target.closest && e.target.closest('[data-edit]'); if (el) el.classList.add('is-editing'); };\n const onKey = (e) => {\n const el = e.target.closest && e.target.closest('[data-edit]'); if (!el) return;\n if (e.key === 'Enter' && !e.shiftKey && !isMultiline(el)) { e.preventDefault(); el.blur(); }\n if (e.key === 'Escape') { e.preventDefault(); el.blur(); }\n };\n const onPaste = (e) => {\n const el = e.target.closest && e.target.closest('[data-edit]'); if (!el) return;\n e.preventDefault();\n const text = (e.clipboardData || clipboardData).getData('text/plain');\n document.execCommand('insertText', false, text);\n };\n root.addEventListener('focusout', onFocusOut, true);\n root.addEventListener('focusin', onFocusIn, true);\n root.addEventListener('keydown', onKey, true);\n root.addEventListener('paste', onPaste, true);\n return () => {\n root.removeEventListener('focusout', onFocusOut, true);\n root.removeEventListener('focusin', onFocusIn, true);\n root.removeEventListener('keydown', onKey, true);\n root.removeEventListener('paste', onPaste, true);\n };\n }, [pages, editable, onEdit]);\n\n // ── template WYSIWYG editing (Edit-template lens) ──────────\n // Wording (.pbd-lit) is directly editable text; field chips\n // (.pbd-ph) open a field picker on click (no typing). Each commit\n // maps back to a source-template splice.\n useEffect(() => {\n const root = pagesRef.current; if (!root) return;\n const lits = root.querySelectorAll('.pbd-lit[data-k]');\n const chips = root.querySelectorAll('.pbd-ph[data-k]');\n if (!templateEditable) { lits.forEach(el => el.removeAttribute('contenteditable')); return; }\n lits.forEach(el => { el.setAttribute('contenteditable', 'true'); el.classList.add('pbd-ed'); });\n chips.forEach(el => { el.setAttribute('role', 'button'); el.setAttribute('tabindex', '0'); });\n\n const onClick = (e) => {\n const chip = e.target.closest && e.target.closest('.pbd-ph[data-k]');\n if (!chip || !root.contains(chip)) return;\n e.preventDefault();\n if (onTokenClick) onTokenClick(Number(chip.getAttribute('data-k')), chip.getBoundingClientRect());\n };\n const onFocusOut = (e) => {\n const el = e.target.closest && e.target.closest('.pbd-lit[data-k]');\n if (!el || !root.contains(el)) return;\n el.classList.remove('is-editing');\n if (onTemplateEdit) onTemplateEdit(Number(el.getAttribute('data-k')), el.textContent);\n };\n const onFocusIn = (e) => { const el = e.target.closest && e.target.closest('.pbd-lit[data-k]'); if (el) el.classList.add('is-editing'); };\n const onKey = (e) => {\n const el = e.target.closest && e.target.closest('.pbd-lit[data-k]'); if (!el) return;\n if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); el.blur(); }\n if (e.key === 'Escape') { e.preventDefault(); el.blur(); }\n };\n const onPaste = (e) => {\n const el = e.target.closest && e.target.closest('.pbd-lit[data-k]'); if (!el) return;\n e.preventDefault();\n const text = (e.clipboardData || clipboardData).getData('text/plain');\n document.execCommand('insertText', false, text);\n };\n root.addEventListener('click', onClick, true);\n root.addEventListener('focusout', onFocusOut, true);\n root.addEventListener('focusin', onFocusIn, true);\n root.addEventListener('keydown', onKey, true);\n root.addEventListener('paste', onPaste, true);\n return () => {\n root.removeEventListener('click', onClick, true);\n root.removeEventListener('focusout', onFocusOut, true);\n root.removeEventListener('focusin', onFocusIn, true);\n root.removeEventListener('keydown', onKey, true);\n root.removeEventListener('paste', onPaste, true);\n };\n }, [pages, templateEditable, onTemplateEdit, onTokenClick]);\n\n const total = pages.length;\n const r = running || {};\n const f = frame || {};\n\n const innerPad = isPreset ? `${ST_PAD_T}px ${PAD_X}px ${ST_PAD_B}px`\n : isPre ? `${PRE_PAD}px ${PAD_X}px`\n : isBlank ? `${BLANK_PAD}px ${PAD_X}px`\n : `${M.top}px ${PAD_X}px ${M.bot}px`;\n const legacyBands = !isPreset && !isPre && !isBlank;\n\n return (\n <>\n {/* off-screen measuring surface (document body) */}\n <div ref={measureRef} className={`pbd ${stnManaged ? 'pb-stn' : ''}`} aria-hidden=\"true\" data-density={density} data-head={headStyle || 'standard'}\n style={{ ...docStyle, position: 'fixed', left: -99999, top: 0, width: D.cw, visibility: 'hidden', pointerEvents: 'none' }} />\n\n {/* off-screen measuring surface (stationery header + footer heights) */}\n {isPreset && (\n <div className=\"pb-pages st\" aria-hidden=\"true\"\n style={{ position: 'fixed', left: -99999, top: 0, width: D.w, visibility: 'hidden', pointerEvents: 'none', ['--st-brand']: stationery.brand }}>\n <div className=\"pbd-page\" style={{ width: D.w, minHeight: 0, boxShadow: 'none' }}>\n {stationery.header.show && <div ref={stHeadRef}><STDoc.Header m={stationery} /></div>}\n {stationery.header.show && <div ref={stHeadCRef}><STDoc.Header m={stationery} compact /></div>}\n {stationery.footer.show && <div ref={stFootRef}><STDoc.Footer m={stationery} pageIndex={0} total={2} /></div>}\n {stationery.footer.show && <div ref={stFootCRef}><STDoc.Footer m={stationery} pageIndex={1} total={2} compact /></div>}\n </div>\n </div>\n )}\n\n <div ref={pagesRef}\n className={`pb-pages ${editable ? 'pb-editable' : ''} ${templateEditable ? 'pb-tpl-editable' : ''} ${isPreset ? 'st' : ''} ${stnManaged ? 'pb-stn' : ''}`}\n style={isPreset ? { ['--st-brand']: stationery.brand } : undefined}>\n {pages.map((items, pi) => {\n const stHeadShow = isPreset && stationery.header.show && (stationery.header.repeat === 'all' || pi === 0);\n const stHeadCompact = false;\n const stFootShow = isPreset && stationery.footer.show && (stationery.footer.repeat === 'all' || pi === 0);\n const stFootCompact = false;\n return (\n <div className=\"pbd-page\" key={pi} style={{ width: D.w, minHeight: D.h }} data-screen-label={`Page ${pi + 1}`}>\n {isPreset && stationery.watermark.show && <STDoc.Watermark m={stationery} />}\n {isPre && <div className=\"st-reserve st-reserve--top\" style={{ height: stationery.reserve.top }}>\n <span><Ic k=\"panelL\" />Reserved · pre-printed letterhead</span>\n </div>}\n {stHeadShow && <STDoc.Header m={stationery} compact={stHeadCompact} />}\n {legacyBands && bandShown(f.header, pi) && <HeaderBand cfg={f.header} r={r} />}\n\n <div className=\"pbd pbd-page-inner\" data-density={density} data-head={headStyle || 'standard'}\n style={{ ...docStyle, padding: innerPad }}>\n {items.map((it, ii) => (\n <div key={ii} style={{ display: 'contents' }}\n dangerouslySetInnerHTML={{ __html: it.kind === 'block' ? it.html : tableChunkHTML(it) }} />\n ))}\n </div>\n\n {stFootShow && <STDoc.Footer m={stationery} pageIndex={pi} total={total} compact={stFootCompact} />}\n {isPre && <div className=\"st-reserve st-reserve--bot\" style={{ height: stationery.reserve.bottom }}>\n <span><Ic k=\"panelR\" />Reserved · pre-printed footer</span>\n </div>}\n {legacyBands && bandShown(f.footer, pi) && <FooterBand cfg={f.footer} r={r} pageIndex={pi} total={total} />}\n </div>\n );\n })}\n </div>\n </>\n );\n }\n\n export const PBPaper = { PaperDoc, dims };\n\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\nimport { Ic } from './icons';\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — code editor + field tree\n Exposes export const PBEdit = { CodeEditor, FieldTree }\n ───────────────────────────────────────────────────────────── */\n\n const { useRef, useEffect, useState } = React;\n \n\n // ── handlebars + HTML syntax highlight ───────────────────\n function highlight(code) {\n let s = code\n .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n // html comments\n s = s.replace(/(<!--[\\s\\S]*?-->)/g, '<span class=\"tk-com\">$1</span>');\n // handlebars mustaches {{ ... }}\n s = s.replace(/(\\{\\{[^}]*\\}\\})/g, (m) => {\n const cls = /\\{\\{\\s*[#\\/]/.test(m) || /\\{\\{\\s*else\\s*\\}\\}/.test(m) ? 'tk-blk' : 'tk-mus';\n return `<span class=\"${cls}\">${m}</span>`;\n });\n // tags: <tag ... >\n s = s.replace(/(<\\/?)([a-zA-Z][a-zA-Z0-9-]*)([^&]*?)(\\/?>)/g, (m, open, name, attrs, close) => {\n const a = attrs.replace(/([a-zA-Z-]+)=("|\")([^\"]*)(\\2)/g, '<span class=\"tk-attr\">$1</span>=<span class=\"tk-str\">\"$3\"</span>');\n return `<span class=\"tk-tag\">${open}${name}</span>${a}<span class=\"tk-tag\">${close}</span>`;\n });\n return s + '\\n';\n }\n\n function CodeEditor({ value, onChange, apiRef, dirty, onFormat, readOnly }) {\n const taRef = useRef(null), hlRef = useRef(null), gutRef = useRef(null);\n const lines = value.split('\\n').length;\n\n const sync = () => {\n const ta = taRef.current; if (!ta) return;\n const st = ta.scrollTop, sl = ta.scrollLeft;\n if (hlRef.current) hlRef.current.style.transform = `translate(${-sl}px, ${-st}px)`;\n if (gutRef.current) gutRef.current.style.transform = `translateY(${-st}px)`;\n };\n useEffect(sync, [value]);\n\n // expose insert-at-cursor\n useEffect(() => {\n if (!apiRef) return;\n apiRef.current = {\n insert(text) {\n const ta = taRef.current; if (!ta) { onChange(value + text); return; }\n const focused = document.activeElement === ta && (ta.selectionStart > 0 || ta.selectionEnd > 0);\n let s, e, ins = text;\n if (focused) { s = ta.selectionStart; e = ta.selectionEnd; }\n else { s = e = value.length; ins = (value.endsWith('\\n') ? '' : '\\n') + text; }\n const next = value.slice(0, s) + ins + value.slice(e);\n onChange(next);\n requestAnimationFrame(() => {\n ta.focus();\n ta.setSelectionRange(s, s + ins.length); // highlight what we added\n if (!focused) ta.scrollTop = ta.scrollHeight;\n sync();\n });\n },\n };\n });\n\n const onKeyDown = (e) => {\n if (e.key === 'Tab') {\n e.preventDefault();\n const ta = e.target, s = ta.selectionStart, en = ta.selectionEnd;\n const next = value.slice(0, s) + ' ' + value.slice(en);\n onChange(next);\n requestAnimationFrame(() => ta.setSelectionRange(s + 2, s + 2));\n }\n };\n\n return (\n <div className=\"pb-editor-wrap\">\n <div className=\"pb-gutter\">\n <div className=\"pb-gutter-inner\" ref={gutRef}>\n {Array.from({ length: lines }, (_, i) => <span key={i}>{i + 1}</span>)}\n </div>\n </div>\n <div className=\"pb-code-scroll\">\n <pre className=\"pb-code-hl\" ref={hlRef} dangerouslySetInnerHTML={{ __html: highlight(value) }} />\n <textarea className=\"pb-code-area\" ref={taRef} value={value} spellCheck=\"false\" readOnly={readOnly}\n onChange={(e) => onChange(e.target.value)} onScroll={sync} onKeyDown={onKeyDown} />\n </div>\n </div>\n );\n }\n\n // ── field tree ───────────────────────────────────────────\n function FieldGroup({ g, open, onToggle, onInsert }) {\n return (\n <div className=\"pb-fgroup\">\n <button className={`pb-fgroup-h ${open ? 'is-open' : ''}`} onClick={onToggle}>\n <Ic k=\"chevR\" className=\"pb-fchev\" />\n <span className=\"pb-fgroup-ic\"><Ic k={g.icon} /></span>\n {g.label}\n <span className=\"pb-fgroup-c\">{g.fields.length}</span>\n </button>\n {open && (\n <div className=\"pb-fields\">\n {g.fields.map((f, i) => (\n <div key={i} className={`pb-field ${f.loop ? 'pb-field--loop' : ''}`} onClick={() => onInsert(f.tag)} title={`Insert ${f.tag}`}>\n <span className=\"pb-field-tag\">{f.tag.length > 26 ? f.tag.slice(0, 24) + '…' : f.tag}</span>\n <span className=\"pb-field-lbl\">{f.label}</span>\n <span className=\"pb-field-ins\"><Ic k=\"plus\" /></span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n\n function FieldTree({ groups, onInsert }) {\n const [open, setOpen] = useState(() => { const o = {}; groups.forEach((g, i) => o[g.key] = i < 2); return o; });\n useEffect(() => { setOpen(o => { const n = { ...o }; groups.forEach((g, i) => { if (!(g.key in n)) n[g.key] = i < 2; }); return n; }); }, [groups]);\n return (\n <div>\n <div className=\"pb-fnote\"><b>Advanced.</b> Click a field to drop its <code>{'{{'}placeholder{'}}'}</code> into the HTML at your cursor — it then shows that value on the page. Loops like <code>{'{{#each items}}'}</code> repeat a block per row.<br/><br/>To <b>show / hide</b> whole sections without code, use <b>Design ▸ Content</b>. To change a value, just click it on the document.</div>\n {groups.map(g => (\n <FieldGroup key={g.key} g={g} open={!!open[g.key]} onToggle={() => setOpen(o => ({ ...o, [g.key]: !o[g.key] }))} onInsert={onInsert} />\n ))}\n </div>\n );\n }\n\n export const PBEdit = { CodeEditor, FieldTree };\n\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\n\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — master-template builder helpers\n The artifact authors build is a TEMPLATE (HTML + {{placeholders}}).\n Structure is config-driven: line-item table columns and document\n meta fields are arrays the author edits; we generate the template\n HTML from them and splice it into the base template. The same\n template renders server-side at use time. Exposes PBTpl.\n ───────────────────────────────────────────────────────────── */\n\nconst esc = (s) => String(s == null ? '' : s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\n\n// ── catalog: line-item fields a column can bind to ───────────\nconst ITEM_FIELDS = [\n { id: 'index', label: 'Row number', expr: '{{@number}}' },\n { id: 'name', label: 'Description (+ SKU)', expr: '{{this.name}}' },\n { id: 'sku', label: 'SKU / code', expr: '{{this.sku}}' },\n { id: 'detail', label: 'Sub-detail', expr: '{{this.detail}}' },\n { id: 'qty', label: 'Quantity', expr: '{{qty this.qty}}' },\n { id: 'unit', label: 'Unit', expr: '{{this.unit}}' },\n { id: 'price', label: 'Unit price', expr: '{{money this.price}}' },\n { id: 'disc', label: 'Discount %', expr: '{{pct this.disc}}' },\n { id: 'tax', label: 'Tax / VAT %', expr: '{{pct this.tax}}' },\n { id: 'amount', label: 'Line amount', expr: '{{money this.amount}}' },\n];\nconst itemFieldLabel = (id) => (ITEM_FIELDS.find(f => f.id === id) || { label: id }).label;\n\n// ── catalog: document-level meta placeholders (invoice) ──────\nconst META_CATALOG = [\n { field: 'doc.number', label: 'Invoice no.', expr: '{{doc.number}}' },\n { field: 'doc.date', label: 'Issue date', expr: '{{doc.date}}' },\n { field: 'doc.dueDate', label: 'Due date', expr: '{{doc.dueDate}}' },\n { field: 'doc.po', label: 'PO number', expr: '{{doc.po}}' },\n { field: 'doc.terms', label: 'Payment terms', expr: '{{doc.terms}}' },\n { field: 'doc.status', label: 'Status', expr: '{{upper doc.status}}' },\n { field: 'currency', label: 'Currency', expr: '{{currency}}' },\n { field: 'customer.trn', label: 'Customer TRN', expr: '{{customer.trn}}' },\n { field: 'company.trn', label: 'Our TRN', expr: '{{company.trn}}' },\n { field: 'doc.reference', label: 'Reference', expr: '{{doc.reference}}' },\n];\n\n// ── defaults for the Tax Invoice ─────────────────────────────\nfunction defaultColumns() {\n return [\n { id: c(), field: 'index', label: '#', align: 'l' },\n { id: c(), field: 'name', label: 'Description', align: 'l' },\n { id: c(), field: 'qty', label: 'Qty', align: 'r' },\n { id: c(), field: 'unit', label: 'Unit', align: 'r' },\n { id: c(), field: 'price', label: 'Unit price', align: 'r' },\n { id: c(), field: 'disc', label: 'Disc', align: 'r' },\n { id: c(), field: 'tax', label: 'VAT', align: 'r' },\n { id: c(), field: 'amount', label: 'Amount', align: 'r' },\n ];\n}\nfunction defaultMeta() {\n return [\n { id: c(), field: 'series_number', label: 'Invoice no.', expr: '{{series_number}}' },\n { id: c(), field: 'date', label: 'Issue date', expr: '{{date}}' },\n { id: c(), field: 'due_date', label: 'Due date', expr: '{{due_date}}' },\n { id: c(), field: 'po_number', label: 'PO number', expr: '{{po_number}}' },\n ];\n}\nlet _id = 0; function c() { return 'k' + (++_id); }\n\n// ── build the line-item table from a columns config ──────────\nfunction cellFor(col) {\n const lc = col.align === 'l' ? ' l' : '';\n switch (col.field) {\n case 'index': return `<td class=\"l it-no\">{{@number}}</td>`;\n case 'name': return `<td class=\"l it-desc\"><b>{{this.name}}</b><span class=\"it-sku\">{{this.sku}}</span></td>`;\n case 'sku': return `<td class=\"l\"><span class=\"it-sku\" style=\"font-size:9px\">{{this.sku}}</span></td>`;\n case 'detail': return `<td class=\"l it-tax\">{{this.description}}</td>`;\n case 'qty': return `<td class=\"${lc.trim()}\">{{qty this.quantity}}</td>`;\n case 'unit': return `<td class=\"${lc.trim()}\">{{this.units_of_measurement.name}}</td>`;\n case 'price': return `<td class=\"${lc.trim()}\">{{money this.rate}}</td>`;\n case 'disc': return `<td class=\"it-disc${lc}\">{{#if this.discount_percentage}}{{pct this.discount_percentage}}{{else}}—{{/if}}</td>`;\n case 'tax': return `<td class=\"it-tax${lc}\">{{money this.tax_amount}}</td>`;\n case 'amount': return `<td class=\"${lc.trim()}\"><b>{{money this.gross_amount}}</b></td>`;\n case '__custom': return `<td class=\"${lc.trim()}\">{{this.${(col.custom || 'field').trim()}}}</td>`;\n default: {\n if (col.field.includes('amount') || col.field.includes('price') || col.field.includes('rate') || col.field.includes('tax') || col.field.includes('value')) {\n return `<td class=\"${lc.trim()}\">{{money this.${col.field}}}</td>`;\n }\n if (col.field.includes('qty') || col.field.includes('quantity')) {\n return `<td class=\"${lc.trim()}\">{{qty this.${col.field}}}</td>`;\n }\n if (col.field.includes('discount') || col.field.includes('pct') || col.field.includes('percentage')) {\n return `<td class=\"${lc.trim()}\">{{pct this.${col.field}}}</td>`;\n }\n return `<td class=\"${lc.trim()}\">{{this.${col.field}}}</td>`;\n }\n }\n}\nfunction buildItemsTable(cols, arrayKey = 'items') {\n const ths = cols.map(col => `<th class=\"${col.align === 'l' ? 'l' : ''}\">${esc(col.label)}</th>`).join('');\n const tds = cols.map(cellFor).join('\\n ');\n return `<div class=\"pbd-items-wrap\" data-block=\"items\" data-label=\"Line items\" data-split>\n <table class=\"pbd-items\">\n <thead><tr>${ths}</tr></thead>\n <tbody>\n {{#each ${arrayKey}}}<tr>\n ${tds}\n </tr>{{/each}}\n </tbody>\n </table>\n</div>`;\n}\n\n// ── build the meta strip from a fields config ────────────────\nfunction buildMetaStrip(fields) {\n const items = fields.map(f => `<div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">${esc(f.label)}</span><span class=\"pbd-meta-v\">${f.expr}</span></div>`).join('\\n ');\n return `<div class=\"pbd-meta\" data-block=\"meta\" data-label=\"Meta\">\n ${items}\n</div>`;\n}\n\n// ── replace a top-level <div data-block=\"X\">…</div> ──────────\nfunction spliceBlock(tpl, block, replacement) {\n const marker = `data-block=\"${block}\"`;\n const at = tpl.indexOf(marker); if (at === -1) return tpl;\n const start = tpl.lastIndexOf('<', at);\n const re = /<\\/?div\\b[^>]*>/g; re.lastIndex = start;\n let depth = 0, m, end = -1;\n while ((m = re.exec(tpl))) {\n if (m[0][1] === '/') { depth--; if (depth === 0) { end = re.lastIndex; break; } }\n else if (!m[0].endsWith('/>')) depth++;\n }\n if (end === -1) return tpl;\n return tpl.slice(0, start) + replacement + tpl.slice(end);\n}\n\n// compose the invoice template from base + structural config\nfunction composeInvoice(base, cols, metaFields, arrayKey = 'items') {\n let t = spliceBlock(base, 'items', buildItemsTable(cols, arrayKey));\n t = spliceBlock(t, 'meta', buildMetaStrip(metaFields));\n return t;\n}\n\n// ── placeholder lens: show {{merge fields}} as chips ─────────\n// `data` carries the config booleans (showLogo + include flags). Those are\n// part of the saved master, not runtime merge data, so we resolve their\n// {{#if flag}} blocks here — a section you've toggled OFF must not appear in\n// the placeholder view either. Everything else stays flattened to chips.\nfunction resolveConfigBlocks(s, data) {\n const boolKeys = Object.keys(data || {}).filter(k => typeof data[k] === 'boolean');\n for (const key of boolKeys) {\n for (const tag of ['if', 'unless']) {\n const open = `{{#${tag} ${key}}}`;\n const openMark = `{{#${tag} `, closeMark = `{{/${tag}}}`;\n let idx;\n while ((idx = s.indexOf(open)) !== -1) {\n // walk to the matching close, accounting for nested same-type blocks\n let depth = 1, pos = idx + open.length;\n while (depth > 0 && pos < s.length) {\n const no = s.indexOf(openMark, pos), nc = s.indexOf(closeMark, pos);\n if (nc === -1) { pos = s.length; break; }\n if (no !== -1 && no < nc) { depth++; pos = no + openMark.length; }\n else { depth--; pos = nc + closeMark.length; }\n }\n const body = s.slice(idx + open.length, pos - closeMark.length);\n const keep = (tag === 'if') ? !!data[key] : !data[key];\n s = s.slice(0, idx) + (keep ? body : '') + s.slice(pos);\n }\n }\n }\n return s;\n}\n\nfunction toPlaceholderView(tpl, data) {\n let s = resolveConfigBlocks(tpl, data);\n // drop inline-edit hooks (not used in placeholder lens) so {{@index}}\n // inside their attribute values can't corrupt the markup\n s = s.replace(/\\s+data-edit(-type)?=\"[^\"]*\"/g, '');\n s = s.replace(/\\{\\{else\\}\\}[\\s\\S]*?(\\{\\{\\/(if|unless)\\}\\})/g, '$1');\n s = s.replace(/\\{\\{[#\\/](each|if|unless)[^}]*\\}\\}/g, '');\n s = s.replace(/\\{\\{\\{?([^}]+?)\\}?\\}\\}/g, (m, inner) => {\n const tok = inner.trim().split(/\\s+/); const path = tok[tok.length - 1];\n return `<span class=\"pbd-ph\">${path.replace(/</g, '<')}</span>`;\n });\n return s;\n}\n\n// ── editable placeholder lens ───────────────────────────────\n// Renders the template as an editable WYSIWYG view: visible wording\n// becomes editable text nodes and {{merge fields}} become editable\n// token chips. Returns { html, units } where each unit records the\n// exact [start,end) char range in the SOURCE template, so a single\n// edit splices straight back into the template (preserving loops,\n// conditionals and structure). Config-flag blocks the author turned\n// off are skipped — matching what the server will emit.\nfunction findMatchingClose(s, from, kind) {\n const openMark = `{{#${kind}`, closeMark = `{{/${kind}}}`;\n let depth = 1, pos = from;\n while (depth > 0 && pos < s.length) {\n const no = s.indexOf(openMark, pos), nc = s.indexOf(closeMark, pos);\n if (nc === -1) return s.length;\n if (no !== -1 && no < nc) { depth++; pos = no + openMark.length; }\n else { depth--; pos = nc + closeMark.length; }\n }\n return pos;\n}\n\nfunction toEditableTemplateView(tpl, data, labelFor) {\n data = data || {};\n const isConfigBool = (k) => typeof data[k] === 'boolean';\n const units = [];\n const stack = []; // open blocks: { kind }\n let out = '', i = 0, litStart = -1;\n const n = tpl.length;\n\n const flushLit = (end) => {\n if (litStart < 0) return;\n const raw = tpl.slice(litStart, end);\n const m = raw.match(/^(\\s*)([\\s\\S]*?)(\\s*)$/);\n if (m && m[2].length) {\n const k = units.length;\n units.push({ kind: 'lit', start: litStart + m[1].length, end: end - m[3].length });\n out += m[1] + `<span class=\"pbd-lit\" data-k=\"${k}\">${esc(m[2])}</span>` + m[3];\n } else { out += raw; }\n litStart = -1;\n };\n\n while (i < n) {\n // an HTML tag — emit whole tag verbatim (mustaches inside attrs ride along)\n if (tpl[i] === '<') {\n flushLit(i);\n let j = tpl.indexOf('>', i); if (j < 0) j = n - 1;\n out += tpl.slice(i, j + 1); i = j + 1; continue;\n }\n // a handlebars construct\n if (tpl[i] === '{' && tpl[i + 1] === '{') {\n flushLit(i);\n const triple = tpl[i + 2] === '{';\n const close = triple ? '}}}' : '}}';\n let j = tpl.indexOf(close, i + (triple ? 3 : 2));\n if (j < 0) { out += tpl.slice(i); break; }\n const end = j + close.length;\n const inner = tpl.slice(i + (triple ? 3 : 2), j).trim();\n const parts = inner.split(/\\s+/);\n const head = parts[0];\n if (head === '#each' || head === '#if' || head === '#unless') {\n const kind = head.slice(1), arg = parts[1];\n if (kind !== 'each' && isConfigBool(arg) && !data[arg]) {\n i = findMatchingClose(tpl, end, kind); // toggled OFF → drop block\n } else { stack.push({ kind }); i = end; }\n continue;\n }\n if (head === '/each' || head === '/if' || head === '/unless') { stack.pop(); i = end; continue; }\n if (inner === 'else') { // drop the else branch\n const top = stack[stack.length - 1];\n if (top) { const after = findMatchingClose(tpl, end, top.kind); i = after - (`{{/${top.kind}}}`).length; }\n else i = end;\n continue;\n }\n // a content mustache → friendly, click-to-pick field chip\n const path = parts[parts.length - 1];\n const helper = parts.length > 1 ? parts.slice(0, -1).join(' ') : '';\n const k = units.length;\n units.push({ kind: 'token', start: i, end, triple, helper, path });\n const label = labelFor ? labelFor(helper, path) : path;\n out += `<span class=\"pbd-ph\" data-k=\"${k}\">${esc(label)}</span>`;\n i = end; continue;\n }\n if (litStart < 0) litStart = i;\n i++;\n }\n flushLit(i);\n out = out.replace(/\\s+data-edit(-type)?=\"[^\"]*\"/g, ''); // edit hooks unused in this lens\n return { html: out, units };\n}\n\nfunction applyTemplateEdit(src, unit, text) {\n if (!unit) return src;\n if (unit.kind === 'lit') {\n const safe = String(text).trim().replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n return src.slice(0, unit.start) + safe + src.slice(unit.end);\n }\n const path = String(text).trim();\n const inner = unit.helper ? unit.helper + ' ' + path : path;\n const mustache = unit.triple ? `{{{${inner}}}}` : `{{${inner}}}`;\n return src.slice(0, unit.start) + mustache + src.slice(unit.end);\n}\n\nfunction applyTemplateToken(src, unit, tag) {\n if (!unit) return src;\n return src.slice(0, unit.start) + tag + src.slice(unit.end);\n}\n\nexport const PBTpl = {\n ITEM_FIELDS, itemFieldLabel, META_CATALOG, defaultColumns, defaultMeta,\n buildItemsTable, buildMetaStrip, spliceBlock, composeInvoice, resolveConfigBlocks, toPlaceholderView,\n toEditableTemplateView, applyTemplateEdit, applyTemplateToken, newId: c,\n};\n\n","/* eslint-disable unused-imports/no-unused-vars */\nimport { Box, ToggleButton, ToggleButtonGroup, Tooltip, styled, toggleButtonGroupClasses } from \"@mui/material\";\nimport FormatAlignLeftIcon from '@mui/icons-material/FormatAlignLeft';\nimport FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter';\nimport FormatAlignRightIcon from '@mui/icons-material/FormatAlignRight';\nimport FormatAlignJustifyIcon from '@mui/icons-material/FormatAlignJustify';\nimport Typography from '@/components/typography/typography';\n\nconst StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme, item }) => ({\n display: 'grid',\n borderRadius: 4,\n border: `1px solid #e3e3e3`,\n width: `100%`,\n gridTemplateColumns: `repeat(${item || 4}, 1fr)`,\n [`& .${toggleButtonGroupClasses.grouped}`]: {\n margin: theme.spacing(0.5),\n border: 0,\n borderRadius: theme.shape.borderRadius,\n [`&.${toggleButtonGroupClasses.disabled}`]: {\n border: 0,\n },\n },\n [`& .${toggleButtonGroupClasses.middleButton},& .${toggleButtonGroupClasses.lastButton}`]:\n {\n marginLeft: -1,\n borderLeft: '1px solid transparent',\n },\n [`& .${toggleButtonGroupClasses.selected}`]: {\n backgroundColor: `${theme.palette.action.selected} !important`,\n color: `${theme.palette.text.primary} !important`,\n }\n}))\n\ninterface AlignmentControlProps {\n alignment: string;\n onAlignmentChange: (event: React.MouseEvent<HTMLElement>, newAlignment: string | null) => void;\n displayLabel?: boolean;\n}\n\nconst AlignmentControl: React.FC<AlignmentControlProps> = ({\n alignment,\n onAlignmentChange,\n displayLabel = false,\n // disableJustify = false\n}) => {\n return (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\n {displayLabel &&\n <Typography type=\"s5\" weight=\"medium\" color={\"theme.secondary.800\"}>Alignment</Typography>\n }\n <StyledToggleButtonGroup\n value={alignment}\n exclusive\n onChange={onAlignmentChange}\n aria-label=\"text alignment\"\n size=\"small\"\n >\n <Tooltip title=\"Align Left\">\n <ToggleButton value=\"left\" aria-label=\"left aligned\">\n <FormatAlignLeftIcon fontSize=\"small\" />\n </ToggleButton>\n </Tooltip>\n <Tooltip title=\"Align Center\">\n <ToggleButton value=\"center\" aria-label=\"centered\">\n <FormatAlignCenterIcon fontSize=\"small\" />\n </ToggleButton>\n </Tooltip>\n <Tooltip title=\"Align Right\">\n <ToggleButton value=\"right\" aria-label=\"right aligned\">\n <FormatAlignRightIcon fontSize=\"small\" />\n </ToggleButton>\n </Tooltip>\n {/* {!disableJustify && */}\n <Tooltip title=\"Justify\">\n <ToggleButton value=\"justify\" aria-label=\"justified\">\n <FormatAlignJustifyIcon fontSize=\"small\" />\n </ToggleButton>\n </Tooltip>\n {/* } */}\n </StyledToggleButtonGroup>\n </Box>\n );\n}\n\nexport default AlignmentControl;","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useCallback, useMemo } from 'react';\nimport {\n Box,\n TextField,\n ToggleButtonGroup,\n ToggleButton,\n InputAdornment,\n Tooltip,\n FormControl,\n MenuItem,\n FormControlLabel,\n styled,\n toggleButtonGroupClasses\n} from '@mui/material';\nimport FormatBoldIcon from '@mui/icons-material/FormatBold';\nimport FormatItalicIcon from '@mui/icons-material/FormatItalic';\nimport FormatUnderlinedIcon from '@mui/icons-material/FormatUnderlined';\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\nimport { debounce } from 'lodash';\nimport Select from '@/components/select/select';\nimport Android12Switch from '@/components/switches/android-12-switch';\nimport SearchableSelect from '@/components/searchable-select';\nimport Typography from '@/components/typography/typography';\nimport AlignmentControl from './AlignmentControl';\n\n// Styled component with better typing\nconst StyledToggleButtonGroup = styled(ToggleButtonGroup)<{ item?: number }>(\n ({ theme, item = 4 }) => ({\n display: 'grid',\n borderRadius: 4,\n border: `1px solid #e3e3e3`,\n width: '100%',\n gridTemplateColumns: `repeat(${item}, 1fr)`,\n [`& .${toggleButtonGroupClasses.grouped}`]: {\n margin: theme.spacing(0.5),\n border: 0,\n borderRadius: theme.shape.borderRadius,\n [`&.${toggleButtonGroupClasses.disabled}`]: {\n border: 0,\n },\n },\n [`& .${toggleButtonGroupClasses.middleButton}, & .${toggleButtonGroupClasses.lastButton}`]:\n {\n marginLeft: -1,\n borderLeft: '1px solid transparent',\n },\n [`& .${toggleButtonGroupClasses.selected}`]: {\n backgroundColor: `${theme.palette.action.selected} !important`,\n color: `${theme.palette.text.primary} !important`,\n },\n })\n);\n\n// Type definitions\ninterface TextStyles {\n fontFamily?: string;\n fontSize?: number;\n lineHeight?: string | number;\n textAlign?: string;\n fontWeight?: string;\n fontStyle?: string;\n textDecoration?: string;\n color?: string;\n}\n\ninterface TextControlsProps {\n attrs: {\n styles?: TextStyles;\n [key: string]: any;\n };\n updateAttrs: (attr: Record<string, any>) => void;\n placeholders?: any[];\n content?: string;\n updateContent?: (content: string) => void;\n}\n\ntype FormatType = 'bold' | 'italic' | 'underline';\n\n// Constants\nconst FONT_SIZES = [10, 12, 14, 16, 20, 24, 28, 32] as const;\nconst LINE_HEIGHTS = [1, 1.2, 1.5, 2] as const;\nconst FONT_FAMILIES = [\n 'Arial',\n 'Times New Roman',\n 'Roboto',\n 'Helvetica',\n 'Georgia',\n 'Courier New'\n] as const;\n\nconst DEBOUNCE_DELAY = 300;\n\nconst TextControls: React.FC<TextControlsProps> = ({ attrs, updateAttrs, placeholders, content, updateContent }) => {\n const styles = useMemo(() => attrs.styles || {}, [JSON.stringify(attrs.styles)]);\n\n // Derive format options from current styles instead of separate state\n const formatOptions = useMemo(() => {\n const options: FormatType[] = [];\n if (styles.fontWeight === 'bold') options.push('bold');\n if (styles.fontStyle === 'italic') options.push('italic');\n if (styles.textDecoration === 'underline') options.push('underline');\n return options;\n }, [styles.fontWeight, styles.fontStyle, styles.textDecoration]);\n\n // Stable update function using useCallback\n const updateStyles = useCallback(\n (newStyles: Partial<TextStyles>) => {\n updateAttrs({\n styles: {\n ...styles,\n ...newStyles\n }\n });\n },\n [styles, updateAttrs]\n );\n\n // Fixed debounced color update function\n const debouncedColorUpdate = useCallback(\n debounce((color: string) => {\n updateStyles({ color });\n }, DEBOUNCE_DELAY),\n [updateStyles]\n );\n\n // Format toggle handler\n const toggleFormat = useCallback(\n (format: FormatType) => {\n const isCurrentlyApplied = formatOptions.includes(format);\n\n const formatStyleMap: Record<FormatType, Partial<TextStyles>> = {\n bold: { fontWeight: isCurrentlyApplied ? 'normal' : 'bold' },\n italic: { fontStyle: isCurrentlyApplied ? 'normal' : 'italic' },\n underline: { textDecoration: isCurrentlyApplied ? 'none' : 'underline' }\n };\n\n updateStyles(formatStyleMap[format]);\n },\n [formatOptions, updateStyles]\n );\n\n // Alignment change handler\n const handleAlignmentChange = useCallback(\n (event: React.MouseEvent<HTMLElement>, newAlignment: string | null) => {\n if (newAlignment !== null) {\n updateStyles({ textAlign: newAlignment });\n }\n },\n [updateStyles]\n );\n\n // Color change handler\n const handleColorChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n debouncedColorUpdate(event.target.value);\n },\n [debouncedColorUpdate]\n );\n\n // Generic style change handlers\n const handleFontFamilyChange = useCallback(\n (event: any) => updateStyles({ fontFamily: event.target.value }),\n [updateStyles]\n );\n\n const handleFontSizeChange = useCallback(\n (event: any) => updateStyles({ fontSize: Number(event.target.value) }),\n [updateStyles]\n );\n\n const handleLineHeightChange = useCallback(\n (event: any) => updateStyles({ lineHeight: String(event.target.value) }),\n [updateStyles]\n );\n\n return (\n <>\n {/* Dynamic Field Toggle */}\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 1 }}>\n <Typography type=\"s5\" color=\"theme.secondary.800\">Dynamic text field</Typography>\n <FormControlLabel\n control={\n <Android12Switch\n checked={attrs?.isDynamic || false}\n onChange={(e) => updateAttrs({ isDynamic: e.target.checked })}\n />\n }\n label=\"\"\n sx={{ m: 0 }}\n />\n </Box>\n\n {attrs?.isDynamic && (\n <Box sx={{ mt: 1 }}>\n <SearchableSelect\n value={content?.replace(/\\{\\{|\\}\\}/g, '') || ''}\n onChange={(e: any) => updateContent?.(`{{${e.target.value}}}`)}\n options={placeholders?.map((p: any) => ({\n value: p.id || p.field || p.value,\n label: p.label || p.id || p.field || p.name\n })) || []}\n label=\"Select dynamic field\"\n />\n </Box>\n )}\n </Box>\n\n {/* Font Family Selection */}\n <Box sx={{ mb: 2 }}>\n <FormControl size=\"small\" fullWidth>\n <Select\n value={styles.fontFamily || ''}\n onChange={handleFontFamilyChange}\n displayEmpty\n label=\"Select Font\"\n >\n {FONT_FAMILIES.map((family) => (\n <MenuItem key={family} value={family}>\n {family}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n\n {/* Font Size and Line Height */}\n <Box sx={{ mb: 2, display: 'flex', gap: 1 }}>\n <FormControl size=\"small\" fullWidth>\n <Select\n value={styles.fontSize || ''}\n onChange={handleFontSizeChange}\n renderValue={(v) => typeof v === 'string' && v.endsWith('px') ? v : `${v}px`}\n label=\"Size\"\n displayEmpty\n >\n {FONT_SIZES.map((size) => (\n <MenuItem key={size} value={size}>\n {size}px\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <FormControl size=\"small\" fullWidth>\n <Select\n value={styles.lineHeight || ''}\n onChange={handleLineHeightChange}\n renderValue={(v) => `${v}x`}\n label=\"Line Height\"\n displayEmpty\n >\n {LINE_HEIGHTS.map((height) => (\n <MenuItem key={height} value={height}>\n {height}x\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n\n {/* Text Alignment */}\n <AlignmentControl\n alignment={styles.textAlign}\n onAlignmentChange={handleAlignmentChange}\n />\n\n {/* Format Options */}\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\n <StyledToggleButtonGroup item={3}>\n <Tooltip title=\"Bold\">\n <ToggleButton\n value=\"bold\"\n selected={formatOptions.includes('bold')}\n onClick={() => toggleFormat('bold')}\n aria-label=\"bold\"\n size=\"small\"\n sx={{ borderRadius: 1 }}\n >\n <FormatBoldIcon fontSize=\"small\" />\n </ToggleButton>\n </Tooltip>\n\n <Tooltip title=\"Italic\">\n <ToggleButton\n value=\"italic\"\n selected={formatOptions.includes('italic')}\n onClick={() => toggleFormat('italic')}\n aria-label=\"italic\"\n size=\"small\"\n sx={{ borderRadius: 1 }}\n >\n <FormatItalicIcon fontSize=\"small\" />\n </ToggleButton>\n </Tooltip>\n\n <Tooltip title=\"Underline\">\n <ToggleButton\n value=\"underline\"\n selected={formatOptions.includes('underline')}\n onClick={() => toggleFormat('underline')}\n aria-label=\"underline\"\n size=\"small\"\n sx={{ borderRadius: 1 }}\n >\n <FormatUnderlinedIcon fontSize=\"small\" />\n </ToggleButton>\n </Tooltip>\n </StyledToggleButtonGroup>\n </Box>\n\n {/* Color Picker */}\n <Box sx={{ mb: 2, width: '100%' }}>\n <TextField\n label=\"Text Color\"\n variant=\"outlined\"\n type=\"color\"\n value={styles.color || '#000000'}\n onChange={handleColorChange}\n size=\"small\"\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ ml: 0.5, mr: 0.5 }}>\n <ColorLensIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n sx={{\n '& input[type=\"color\"]': {\n padding: 0,\n margin: '6px 12px 6px 0',\n cursor: 'pointer',\n height: '18px',\n width: 'calc(100% - 12px)',\n border: 'none',\n WebkitAppearance: 'none',\n '&::-webkit-color-swatch-wrapper': {\n padding: 0,\n },\n '&::-webkit-color-swatch': {\n border: '1px solid',\n borderColor: '#e0e0e0',\n borderRadius: '4px',\n },\n '&::-moz-color-swatch': {\n border: '1px solid',\n borderColor: '#e0e0e0',\n borderRadius: '4px',\n }\n }\n }}\n />\n </Box>\n </>\n );\n};\n\nexport default React.memo(TextControls);","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport { FormControl, FormControlLabel, Grid, MenuItem, Slider, Switch, styled } from \"@mui/material\";\nimport ColorPickerInput from '@/components/color-picker-input/color-picker-input';\nimport Select from '@/components/select/select';\nimport Typography from '@/components/typography/typography';\nimport formatText from '@/utils/format-text';\nimport { useEffect } from \"react\";\n\nconst Android12Switch = styled(Switch)(({ theme }) => ({\n padding: 8,\n '& .MuiSwitch-track': {\n borderRadius: 22 / 2,\n '&::before, &::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n width: 16,\n height: 16,\n },\n '&::before': {\n backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"${encodeURIComponent(\n theme.palette.getContrastText(theme.palette.primary.main),\n )}\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"/></svg>')`,\n left: 12,\n },\n '&::after': {\n backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"${encodeURIComponent(\n theme.palette.getContrastText(theme.palette.primary.main),\n )}\" d=\"M19,13H5V11H19V13Z\" /></svg>')`,\n right: 12,\n },\n },\n '& .MuiSwitch-thumb': {\n boxShadow: 'none',\n width: 16,\n height: 16,\n margin: 2,\n // color: theme.palette.theme.primary[800]\n },\n '& .Mui-checked': {\n color: `${theme.palette.theme.primary[800]} !important`,\n },\n '& .Mui-checked+.MuiSwitch-track': {\n backgroundColor: `${theme.palette.theme.primary[800]} !important`,\n },\n}));\n\nexport interface BorderControlProps {\n styles: Record<string, any>,\n onChange: (key: string, value: any) => void\n isBordered: boolean;\n disableWidth?: boolean;\n disableStyle?: boolean;\n disableColor?: boolean;\n disableCollapse?: boolean;\n disableRadius?: boolean;\n initiateStyles?: (styles: Record<string, any>) => void;\n}\n\nconst borderStyles = [\n 'none',\n 'solid',\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'ridge',\n 'inset',\n 'outset'\n];\n\nconst BorderControl: React.FC<BorderControlProps> = ({\n styles,\n onChange,\n isBordered,\n disableWidth = false,\n disableStyle = false,\n disableColor = false,\n disableCollapse = false,\n disableRadius = false,\n initiateStyles\n}) => {\n return (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <FormControlLabel\n control={\n <Android12Switch\n checked={isBordered}\n onChange={(e) => {\n const checked = e.target.checked;\n if (initiateStyles) {\n if (!checked) {\n initiateStyles({\n is_bordered: false,\n border: 0,\n borderStyle: 'none',\n borderColor: '#000000',\n borderCollapse: 'separate',\n borderRadius: 0,\n });\n } else {\n initiateStyles({\n is_bordered: true,\n border: 1,\n borderStyle: 'solid',\n borderColor: '#000000',\n borderCollapse: 'collapse',\n borderRadius: 0,\n });\n }\n } else {\n onChange('is_bordered', checked);\n }\n }}\n />\n }\n label={<Typography type='s5' weight='medium' color='theme.secondary.800'>Border</Typography>}\n labelPlacement=\"start\"\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', margin: 'auto' }}\n />\n </Grid>\n\n {isBordered && (\n <>\n {/* Width */}\n {!disableWidth && (\n <Grid item xs={6}>\n <Select\n value={styles.border || 1}\n onChange={(e) => onChange('border', e.target.value)}\n label=\"Border Width\"\n fullWidth\n size=\"small\"\n >\n {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((wd) => (\n <MenuItem key={wd} value={wd}>\n <Typography type='s5' color='theme.secondary.1000'>{wd}</Typography>\n </MenuItem>\n ))}\n </Select>\n </Grid>\n )}\n\n {/* Style */}\n {!disableStyle && (\n <Grid item xs={6}>\n <FormControl fullWidth size=\"small\">\n <Select\n value={styles.borderStyle || 'solid'}\n onChange={(e) => onChange('borderStyle', e.target.value)}\n renderValue={(value) => formatText(value)}\n label=\"Border Style\"\n >\n {borderStyles.map((style) => (\n <MenuItem key={style} value={style}>\n <Typography type='s5' color='theme.secondary.1000'>{formatText(style)}</Typography>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n )}\n\n {/* Color */}\n {!disableColor && (\n <Grid item xs={6}>\n <Typography type='s5' weight='medium' color='theme.secondary.800' mb={0.5}>Border Color</Typography>\n <ColorPickerInput\n value={styles.borderColor || '#e0e0e0'}\n onChange={(color) => onChange('borderColor', color)}\n fullWidth\n />\n </Grid>\n )}\n\n {/* Collapse */}\n {!disableCollapse && (\n <Grid item xs={6}>\n <FormControl fullWidth size=\"small\">\n <Select\n value={styles.borderCollapse || 'collapse'}\n onChange={(e) => onChange('borderCollapse', e.target.value)}\n label=\"Border Collapse\"\n renderValue={(value) => formatText(value)}\n >\n <MenuItem value=\"collapse\"><Typography type='s5' color='theme.secondary.1000'>Collapse</Typography></MenuItem>\n <MenuItem value=\"separate\"><Typography type='s5' color='theme.secondary.1000'>Separate</Typography></MenuItem>\n </Select>\n </FormControl>\n </Grid>\n )}\n\n {/* Radius */}\n {!disableRadius && (\n <Grid item xs={12}>\n <Typography type='s5' weight='medium' color='theme.secondary.800' variant=\"caption\">Border Radius</Typography>\n <Slider\n value={typeof styles.borderRadius === 'number' ? styles.borderRadius : 1}\n min={0}\n max={20}\n step={1}\n size=\"small\"\n onChange={(_, value) => onChange('borderRadius', value)}\n valueLabelDisplay=\"auto\"\n sx={(theme) => ({\n '& .MuiSlider-rail': {\n color: theme.palette.theme.primary[500],\n },\n '& .MuiSlider-thumb': {\n color: theme.palette.theme.primary[800],\n },\n '& .MuiSlider-track': {\n color: theme.palette.theme.primary[600],\n },\n })}\n />\n </Grid>\n )}\n </>\n )}\n\n </Grid>\n );\n}\n\nexport default BorderControl;","/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport {\n Box,\n FormControl,\n MenuItem,\n Slider,\n} from '@mui/material';\nimport Typography from '@/components/typography/typography';\nimport TextField from '@/components/text-field/text-field';\nimport Select from '@/components/select/select';\nimport ColorPickerInput from '@/components/color-picker-input/color-picker-input';\nimport BorderControl from './border-control';\n\ninterface ButtonControlsProps {\n attrs: Record<string, any>;\n updateAttrs: (attr: Record<string, any>) => void;\n}\n\n\n\nconst ButtonControls: React.FC<ButtonControlsProps> = ({\n attrs,\n updateAttrs\n}) => {\n\n const { text, styles } = attrs;\n\n return (\n <>\n <TextField\n label=\"Button Text\"\n fullWidth\n value={text}\n onChange={(e) => updateAttrs({ text: e.target.value })}\n size=\"small\"\n sx={{ mb: 2 }}\n />\n <TextField\n label=\"Link URL\"\n placeholder=\"https://...\"\n fullWidth\n value={attrs.href || ''}\n onChange={(e) => updateAttrs({ href: e.target.value })}\n size=\"small\"\n sx={{ mb: 2 }}\n />\n\n <Box sx={{ mb: 2 }}>\n <Typography type=\"s3\" color='theme.neutral.800'>\n Font Size\n </Typography>\n <Slider\n value={styles?.fontSize || 16}\n onChange={(_, value) => updateAttrs({ styles: { fontSize: value as number } })}\n min={10}\n max={40}\n step={1}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n sx={(theme) => ({\n '& .MuiSlider-rail': {\n color: theme.palette.theme.primary[500],\n },\n '& .MuiSlider-thumb': {\n color: theme.palette.theme.primary[800],\n },\n '& .MuiSlider-track': {\n color: theme.palette.theme.primary[600],\n },\n })}\n />\n </Box>\n\n <Box sx={{ mb: 2 }}>\n <ColorPickerInput\n value={styles?.color || '#333333'}\n onChange={(color) => updateAttrs({ styles: { color: color } })}\n label='Text Color'\n />\n </Box>\n\n <Box sx={{ mb: 2 }}>\n <ColorPickerInput\n value={styles?.backgroundColor || '#333333'}\n onChange={(color) => updateAttrs({ styles: { backgroundColor: color } })}\n label='Background Color'\n />\n </Box>\n\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 0.5 }}>\n <Typography type=\"s3\" color='theme.neutral.800'>\n Width (px)\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\n <Slider\n value={Math.min(Math.max(Math.round(Number(styles?.width) || 130), 20), 794)}\n onChange={(_, value) => updateAttrs({ styles: { width: value as number } })}\n min={20}\n max={794}\n step={1}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n sx={(theme) => ({\n flex: 1,\n '& .MuiSlider-rail': {\n color: theme.palette.theme.primary[500],\n },\n '& .MuiSlider-thumb': {\n color: theme.palette.theme.primary[800],\n },\n '& .MuiSlider-track': {\n color: theme.palette.theme.primary[600],\n },\n })}\n />\n <TextField\n type=\"number\"\n size=\"small\"\n value={Math.round(Number(styles?.width) || 130)}\n onChange={(e) => {\n const val = Number(e.target.value);\n if (!isNaN(val) && val > 0) {\n updateAttrs({ styles: { width: val } });\n }\n }}\n inputProps={{ min: 20, max: 794, style: { padding: '4px 6px', fontSize: '13px', textAlign: 'right' } }}\n sx={{ width: '75px', flexShrink: 0 }}\n />\n </Box>\n </Box>\n\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 0.5 }}>\n <Typography type=\"s3\" color='theme.neutral.800'>\n Height (px)\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\n <Slider\n value={Math.min(Math.max(Math.round(Number(styles?.height) || 40), 20), 500)}\n onChange={(_, value) => updateAttrs({ styles: { height: value as number } })}\n min={20}\n max={500}\n step={1}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n sx={(theme) => ({\n flex: 1,\n '& .MuiSlider-rail': {\n color: theme.palette.theme.primary[500],\n },\n '& .MuiSlider-thumb': {\n color: theme.palette.theme.primary[800],\n },\n '& .MuiSlider-track': {\n color: theme.palette.theme.primary[600],\n },\n })}\n />\n <TextField\n type=\"number\"\n size=\"small\"\n value={Math.round(Number(styles?.height) || 40)}\n onChange={(e) => {\n const val = Number(e.target.value);\n if (!isNaN(val) && val > 0) {\n updateAttrs({ styles: { height: val } });\n }\n }}\n inputProps={{ min: 20, max: 500, style: { padding: '4px 6px', fontSize: '13px', textAlign: 'right' } }}\n sx={{ width: '75px', flexShrink: 0 }}\n />\n </Box>\n </Box>\n\n <Box sx={{ mb: 0 }}>\n <BorderControl\n styles={styles || {}}\n onChange={(key, value) => updateAttrs({ styles: { ...styles, [key]: value } })}\n isBordered={styles?.is_bordered || false}\n disableCollapse={true}\n initiateStyles={(newStyles) => updateAttrs({ styles: { ...styles, ...newStyles } })}\n />\n </Box>\n </>\n );\n};\n\nexport default ButtonControls;","/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport {\n Box,\n FormControl,\n // Select,\n MenuItem,\n styled,\n Switch,\n Grid,\n FormControlLabel,\n Slider\n} from '@mui/material';\nimport TextField from '@/components/text-field/text-field';\nimport Select from '@/components/select/select';\nimport Typography from '@/components/typography/typography';\nimport UploadMedia from '@/components/upload-media/upload-media';\nimport AlignmentControl from './AlignmentControl';\nimport BorderControl from './border-control';\n\nconst Android12Switch = styled(Switch)(({ theme }) => ({\n padding: 8,\n '& .MuiSwitch-track': {\n borderRadius: 22 / 2,\n '&::before, &::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n width: 16,\n height: 16,\n },\n '&::before': {\n backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"${encodeURIComponent(\n theme.palette.getContrastText(theme.palette.primary.main),\n )}\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"/></svg>')`,\n left: 12,\n },\n '&::after': {\n backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"${encodeURIComponent(\n theme.palette.getContrastText(theme.palette.primary.main),\n )}\" d=\"M19,13H5V11H19V13Z\" /></svg>')`,\n right: 12,\n },\n },\n '& .MuiSwitch-thumb': {\n boxShadow: 'none',\n width: 16,\n height: 16,\n margin: 2,\n // color: theme.palette.theme.primary[800]\n },\n '& .Mui-checked': {\n color: theme.palette.theme.primary[800]\n },\n '& .Mui-checked+.MuiSwitch-track': {\n backgroundColor: `${theme.palette.theme.primary[700]}`,\n },\n}));\n\ninterface ImageControlsProps {\n attrs: Record<string, any>;\n updateAttrs: (attr: Record<string, any>) => void;\n}\n\nconst ImageControls: React.FC<ImageControlsProps> = ({\n attrs,\n updateAttrs\n}) => {\n const [imageError, setImageError] = React.useState<string>('');\n const { src, alt, styles } = attrs || {}\n\n const handleAlignmentChange = (\n event: React.MouseEvent<HTMLElement>,\n newAlignment: string | null,\n ) => {\n if (newAlignment) {\n let margin = '0';\n switch (newAlignment) {\n case 'justify':\n margin = '0 auto';\n break;\n case 'right':\n margin = '0 0 0 auto';\n break;\n case 'center':\n margin = '0 auto';\n break;\n case 'left':\n margin = '0 auto 0 0';\n break;\n default:\n margin = '0 auto';\n break;\n }\n updateAttrs({ styles: { margin, alignment: newAlignment } });\n\n }\n };\n\n const getAlignment = () => {\n if (styles?.margin === '0 auto' || styles?.alignment === 'center') {\n return 'center';\n } else if (styles?.margin === '0 0 0 auto' || styles?.alignment === 'right') {\n return 'right';\n } else if (styles?.margin === 'auto 0 0 0' || styles?.alignment === 'left') {\n return 'left';\n } else {\n return 'justify';\n }\n };\n\n return (\n <>\n {/* Image Upload */}\n <Box sx={{ mb: 2 }}>\n <UploadMedia\n type=\"image\"\n label=\"Upload Image\"\n name=\"imageUpload\"\n value={src?.startsWith('data:') ? 'Uploaded Image' : src}\n onChange={(file) => {\n if (file instanceof File) {\n if (file.size > 300 * 1024) {\n setImageError('Please select an image under 300KB.');\n return;\n }\n setImageError('');\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result) {\n updateAttrs({ src: e.target.result as string });\n }\n };\n reader.readAsDataURL(file);\n } else if (!file) {\n updateAttrs({ src: '' });\n }\n }}\n multiple={false}\n renderPreview={() => null}\n />\n {imageError && <Typography color=\"error\" variant=\"caption\" display=\"block\" sx={{ mt: 1 }}>{imageError}</Typography>}\n </Box>\n\n {/* Alt Text */}\n <TextField\n label=\"Alt Text\"\n fullWidth\n value={alt}\n onChange={(e) => updateAttrs({ alt: e.target.value })}\n size=\"small\"\n sx={{ mb: 2 }}\n />\n <FormControlLabel\n control={<Android12Switch defaultChecked checked={Boolean(styles?.fullWidth)} />}\n label={<Typography type=\"s5\" color=\"theme.secondary.800\" weight='medium'>Full Width</Typography>}\n labelPlacement=\"start\"\n value={Boolean(styles?.fullWidth)}\n onClick={(e) => {\n const checked = e.target.checked\n updateAttrs({ styles: { fullWidth: checked, width: checked ? 100 : 150, height: checked ? 200 : 150 } })\n }}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', margin: 'auto', mb: 2 }}\n />\n\n {/* Width Input */}\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <TextField\n label=\"Width (px)\"\n type=\"number\"\n fullWidth\n value={styles?.fullWidth ? '' : (styles?.width !== undefined ? Math.round(Number(styles.width)) : '')}\n onChange={(e) =>\n updateAttrs({ styles: { width: Number(e.target.value) } })\n }\n size=\"small\"\n sx={{ mb: 2 }}\n inputProps={{ min: 1 }}\n disabled={styles?.fullWidth}\n />\n </Grid>\n <Grid item xs={6}>\n {/* Height Input */}\n <TextField\n label=\"Height (px)\"\n type=\"number\"\n fullWidth\n value={styles?.height !== undefined ? Math.round(Number(styles.height)) : ''}\n onChange={(e) =>\n updateAttrs({ styles: { height: Number(e.target.value) } })\n }\n size=\"small\"\n sx={{ mb: 2 }}\n inputProps={{ min: 1 }}\n />\n\n </Grid>\n\n </Grid>\n\n\n {/* Object Fit Dropdown */}\n <Box sx={{ mb: 2 }}>\n <FormControl size=\"small\" fullWidth>\n <Select\n label='Object Fit'\n value={styles?.objectFit}\n onChange={(e) =>\n updateAttrs({ styles: { objectFit: e.target.value } })\n }\n displayEmpty\n >\n <MenuItem value=\"contain\">Contain</MenuItem>\n <MenuItem value=\"cover\">Cover</MenuItem>\n <MenuItem value=\"fill\">Fill</MenuItem>\n <MenuItem value=\"none\">None</MenuItem>\n <MenuItem value=\"scale-down\">Scale Down</MenuItem>\n </Select>\n </FormControl>\n </Box>\n\n {/* Opacity */}\n <Box sx={{ mb: 2 }}>\n <Typography type='s5' weight='medium' color='theme.secondary.800' variant=\"caption\">Opacity</Typography>\n <Slider\n value={typeof styles?.opacity === 'number' ? styles.opacity * 100 : 100}\n min={0}\n max={100}\n step={1}\n size=\"small\"\n onChange={(_, value) => updateAttrs({ styles: { opacity: (value as number) / 100 } })}\n valueLabelDisplay=\"auto\"\n sx={(theme: any) => ({\n '& .MuiSlider-rail': {\n color: theme.palette.theme.primary[500],\n },\n '& .MuiSlider-thumb': {\n color: theme.palette.theme.primary[800],\n },\n '& .MuiSlider-track': {\n color: theme.palette.theme.primary[600],\n },\n })}\n />\n </Box>\n\n {/* Alignment Toggle Buttons */}\n <AlignmentControl\n alignment={getAlignment()}\n onAlignmentChange={handleAlignmentChange}\n displayLabel\n />\n\n <BorderControl\n styles={styles}\n onChange={(key, value) => updateAttrs({ styles: { [key]: value } })}\n isBordered={styles?.is_bordered}\n disableCollapse\n initiateStyles={(styles) => updateAttrs({ styles })}\n />\n </>\n );\n};\n\nexport default ImageControls;","/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport {\n Box,\n FormControl,\n MenuItem,\n Slider,\n InputAdornment,\n} from '@mui/material';\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\nimport Typography from '@/components/typography/typography';\nimport TextField from '@/components/text-field/text-field';\nimport Select from '@/components/select/select';\nimport formatText from '@/utils/format-text';\n\ninterface DividerControlsProps {\n attrs: Record<string, any>;\n updateAttrs: (attr: Record<string, any>) => void;\n}\n\nconst DividerControls: React.FC<DividerControlsProps> = ({\n attrs,\n updateAttrs,\n}) => {\n const { styles } = attrs\n return (\n <>\n <FormControl fullWidth size=\"small\" sx={{ mb: 2 }}>\n <Select\n label='Style'\n value={styles?.borderStyle}\n onChange={(e) => updateAttrs({ styles: { borderStyle: e.target.value } })}\n renderValue={(value) => formatText(value)}\n >\n <MenuItem value=\"solid\">Solid</MenuItem>\n <MenuItem value=\"dashed\">Dashed</MenuItem>\n <MenuItem value=\"dotted\">Dotted</MenuItem>\n </Select>\n </FormControl>\n <Box sx={{ mb: 1 }}>\n <Typography type=\"s5\" color='theme.secondary.800' weight='medium'>\n Thickness (px)\n </Typography>\n <Slider\n value={styles?.borderWidth}\n onChange={(_, value) => updateAttrs({ styles: { borderWidth: value as number } })}\n min={1}\n max={10}\n step={1}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n sx={(theme) => ({\n '& .MuiSlider-rail': {\n color: theme.palette.theme.primary[500],\n },\n '& .MuiSlider-thumb': {\n color: theme.palette.theme.primary[800],\n },\n '& .MuiSlider-track': {\n color: theme.palette.theme.primary[600],\n },\n })}\n />\n </Box>\n <Box sx={{ mb: 2 }}>\n <TextField\n label=\"Divider Color\"\n type=\"color\"\n value={styles?.borderColor || '#000000'}\n onChange={(e) => updateAttrs({ styles: { ...styles, borderColor: e.target.value } })}\n size=\"small\"\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ ml: 0.5, mr: 0.5 }}>\n <ColorLensIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n sx={{\n '& input[type=\"color\"]': {\n padding: 0,\n margin: '6px 12px 6px 0',\n cursor: 'pointer',\n height: '18px',\n width: 'calc(100% - 12px)',\n border: 'none',\n WebkitAppearance: 'none',\n '&::-webkit-color-swatch-wrapper': {\n padding: 0,\n },\n '&::-webkit-color-swatch': {\n border: '1px solid',\n borderColor: '#e0e0e0',\n borderRadius: '4px',\n },\n '&::-moz-color-swatch': {\n border: '1px solid',\n borderColor: '#e0e0e0',\n borderRadius: '4px',\n }\n }\n }}\n />\n </Box>\n </>\n );\n};\n\nexport default DividerControls;","/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport {\n Box,\n Slider,\n InputAdornment,\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n} from '@mui/material';\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\nimport Typography from '@/components/typography/typography';\nimport TextField from '@/components/text-field/text-field';\n\ninterface SignatureControlsProps {\n attrs: Record<string, any>;\n updateAttrs: (attr: Record<string, any>) => void;\n}\n\nconst SignatureControls: React.FC<SignatureControlsProps> = ({\n attrs,\n updateAttrs,\n}) => {\n const { styles } = attrs\n return (\n <>\n <Box sx={{ mb: 2 }}>\n <TextField\n label=\"Signature Name\"\n value={attrs?.signatureText || ''}\n onChange={(e) => updateAttrs({ signatureText: e.target.value })}\n fullWidth\n placeholder=\"e.g. John Doe\"\n />\n </Box>\n\n <Box sx={{ mb: 2 }}>\n <FormControl fullWidth size=\"small\">\n <InputLabel>Font Family</InputLabel>\n <Select\n value={styles?.fontFamily || 'Arial, sans-serif'}\n onChange={(e) => updateAttrs({ styles: { fontFamily: e.target.value } })}\n label=\"Font Family\"\n >\n <MenuItem value=\"Arial, sans-serif\">Arial</MenuItem>\n <MenuItem value=\"'Times New Roman', serif\">Times New Roman</MenuItem>\n <MenuItem value=\"'Courier New', monospace\">Courier New</MenuItem>\n <MenuItem value=\"Georgia, serif\">Georgia</MenuItem>\n <MenuItem value=\"Verdana, sans-serif\">Verdana</MenuItem>\n <MenuItem value=\"'Brush Script MT', cursive\">Brush Script (Cursive)</MenuItem>\n <MenuItem value=\"'Lucida Handwriting', cursive\">Lucida Handwriting (Cursive)</MenuItem>\n <MenuItem value=\"'Alex Brush', cursive\">Alex Brush (Cursive)</MenuItem>\n <MenuItem value=\"'Allura', cursive\">Allura (Cursive)</MenuItem>\n <MenuItem value=\"'Dancing Script', cursive\">Dancing Script (Cursive)</MenuItem>\n <MenuItem value=\"'Great Vibes', cursive\">Great Vibes (Cursive)</MenuItem>\n <MenuItem value=\"'Parisienne', cursive\">Parisienne (Cursive)</MenuItem>\n <MenuItem value=\"'Tangerine', cursive\">Tangerine (Cursive)</MenuItem>\n </Select>\n </FormControl>\n </Box>\n\n <Box sx={{ mb: 2 }}>\n <FormControl fullWidth size=\"small\">\n <InputLabel>Font Weight</InputLabel>\n <Select\n value={styles?.fontWeight || 'normal'}\n onChange={(e) => updateAttrs({ styles: { fontWeight: e.target.value } })}\n label=\"Font Weight\"\n >\n <MenuItem value=\"normal\">Normal</MenuItem>\n <MenuItem value=\"bold\">Bold</MenuItem>\n <MenuItem value=\"100\">Thin</MenuItem>\n <MenuItem value=\"300\">Light</MenuItem>\n <MenuItem value=\"400\">Regular</MenuItem>\n <MenuItem value=\"500\">Medium</MenuItem>\n <MenuItem value=\"600\">Semi-Bold</MenuItem>\n <MenuItem value=\"700\">Bold</MenuItem>\n <MenuItem value=\"900\">Black</MenuItem>\n </Select>\n </FormControl>\n </Box>\n\n <Box sx={{ mb: 1 }}>\n <Typography type=\"s5\" color='theme.secondary.800' weight='medium'>\n Font Size\n </Typography>\n <Slider\n value={styles?.fontSize}\n onChange={(_, value) => updateAttrs({ styles: { fontSize: value as number } })}\n min={10}\n max={40}\n step={1}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n sx={(theme) => ({\n '& .MuiSlider-rail': {\n color: theme.palette.theme.primary[500],\n },\n '& .MuiSlider-thumb': {\n color: theme.palette.theme.primary[800],\n },\n '& .MuiSlider-track': {\n color: theme.palette.theme.primary[600],\n },\n })}\n />\n </Box>\n <Box sx={{ mb: 2, }}>\n <TextField\n label=\"Text Color\"\n type=\"color\"\n value={styles?.color}\n onChange={(e) => updateAttrs({ styles: { color: e.target.value } })}\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <ColorLensIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n </>\n );\n};\n\nexport default SignatureControls;","/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport { Box, Slider} from '@mui/material';\nimport Typography from '@/components/typography/typography';\nimport AlignmentControl from './AlignmentControl';\n\ninterface CodeControlsProps {\n // type: 'qr-code' | 'bar-code';\n attrs: Record<string, any>;\n updateAttrs: (attr: Record<string, any>) => void;\n}\n\nconst CodeControls: React.FC<CodeControlsProps> = ({\n // type,\n attrs,\n updateAttrs,\n}) => {\n const { styles } = attrs\n\n const updateStyles = (styles: Record<string, any>) => {\n updateAttrs({ styles });\n }\n\n const handleAlignmentChange = (\n event: React.MouseEvent<HTMLElement>,\n newAlignment: string | null,\n ) => {\n if (newAlignment !== null) {\n updateStyles({ textAlign: newAlignment });\n }\n };\n\n return (\n <>\n <Box sx={{ mb: 2 }}>\n <Typography type=\"s3\" color='theme.neutral.800'>\n Size (px)\n </Typography>\n <Slider\n value={styles.fontSize}\n onChange={(_, value) => updateStyles({ fontSize: value as number })}\n min={10}\n max={25}\n step={5}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n sx={(theme) => ({\n '& .MuiSlider-rail': {\n color: theme.palette.theme.primary[500],\n },\n '& .MuiSlider-thumb': {\n color: theme.palette.theme.primary[800],\n },\n '& .MuiSlider-track': {\n color: theme.palette.theme.primary[600],\n },\n })}\n />\n </Box>\n <AlignmentControl alignment={styles?.textAlign} onAlignmentChange={handleAlignmentChange} displayLabel/>\n </>\n );\n};\n\nexport default CodeControls;","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable no-mixed-spaces-and-tabs */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { useEffect, useMemo, useState, useRef } from 'react';\nimport {\n Box,\n MenuItem,\n Accordion as MuiAccordion,\n AccordionSummary,\n AccordionDetails,\n Grid,\n FormControlLabel,\n Tabs,\n Tab,\n AccordionProps,\n styled,\n Divider,\n IconButton,\n Chip,\n Alert,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n Slider,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport AddIcon from '@mui/icons-material/Add';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport MergeIcon from '@mui/icons-material/MergeType';\nimport SplitIcon from '@mui/icons-material/CallSplit';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport SwapHorizIcon from '@mui/icons-material/SwapHoriz';\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport ColorPickerInput from '@/components/color-picker-input/color-picker-input';\nimport TextField from '@/components/text-field/text-field';\nimport Select from '@/components/select/select';\nimport formatText from '@/utils/format-text';\nimport Typography from '@/components/typography/typography';\nimport Android12Switch from '@/components/switches/android-12-switch';\nimport BorderControl from './border-control';\nimport Button from '@/components/button/button';\nimport Checkbox from '@/components/checkbox/checkbox';\nimport { Trash } from '@/components/icons';\nimport SearchableSelect from '@/components/searchable-select';\n\n// Type definitions\ninterface TableColumn {\n id: string;\n header: string;\n align?: string;\n width?: string;\n}\n\ninterface TableRow {\n [key: string]: string;\n}\n\ninterface CellMerge {\n section: 'thead' | 'tbody';\n rowStart: number;\n rowEnd: number;\n colStart: number;\n colEnd: number;\n value: string;\n}\n\ninterface HeaderCell {\n id: string;\n value: string;\n}\n\ninterface HeaderRow {\n id: string;\n cells: HeaderCell[];\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: TableRow[];\n mergedCells?: CellMerge[];\n headerRows?: HeaderRow[];\n cellStyles?: {\n thead?: { [rowIndex: number]: { [colIndex: number]: React.CSSProperties } };\n tbody?: { [rowIndex: number]: { [colId: string]: React.CSSProperties } };\n };\n}\n\nconst Accordion = styled(\n (props: AccordionProps) => (\n <MuiAccordion disableGutters elevation={0} square {...props} />\n )\n)(({ theme }) => ({\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: 0,\n '&:not(:last-child)': {\n borderBottom: 0,\n },\n '&::before': {\n display: 'none',\n },\n}));\n\ninterface TableControlsProps {\n tableData: TableData;\n setTableData: (value: TableData) => void;\n attrs: any;\n updateAttrs: (value: any) => void;\n placeholders: Record<string, any>[];\n handleSave?: () => void;\n setParentRowLevel?: (value: boolean) => void;\n levelType?: boolean;\n relation_table?: any;\n}\n\nconst textAlignOptions = ['left', 'center', 'right', 'justify'];\nconst fontWeightOptions = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\nconst fontFamilyOptions = [\n 'Arial, sans-serif',\n 'Helvetica, sans-serif',\n 'Times New Roman, serif',\n 'Georgia, serif',\n 'Courier New, monospace',\n 'Verdana, sans-serif',\n 'Tahoma, sans-serif',\n 'Trebuchet MS, sans-serif'\n];\n\nconst TableControls: React.FC<TableControlsProps> = ({\n tableData,\n setTableData,\n attrs,\n updateAttrs,\n placeholders,\n handleSave,\n setParentRowLevel,\n levelType,\n relation_table\n}) => {\n\n const [tabValue, setTabValue] = useState(0);\n const [expanded, setExpanded] = useState('tableBasic');\n const [autoPopulateEnabled, setAutoPopulateEnabled] = useState(attrs.autoPopulateEnabled !== false);\n const [mergeDialogOpen, setMergeDialogOpen] = useState(false);\n const [selectedCells, setSelectedCells] = useState<{ section: 'thead' | 'tbody', row: number, col: number }[]>([]);\n const [mergeValue, setMergeValue] = useState('');\n const [rowLevel, setRowLevel] = useState(false);\n const { placeholders: tPlaceholders } = attrs;\n const [customText, setCustomText] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\n const [rowPlaceholders, setRowPlaceholders] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\n // Initialize merged cells from attrs\n const mergedCells = tableData.mergedCells || [];\n const [isUpdating, setIsUpdating] = useState(false);\n\n // Cell Styling State\n const [cellStyleDialogOpen, setCellStyleDialogOpen] = useState(false);\n const [editingCellStyle, setEditingCellStyle] = useState<{ section: 'thead' | 'tbody', row: number, col: string | number } | null>(null);\n const [tempCellStyle, setTempCellStyle] = useState<React.CSSProperties>({});\n const [editingCellText, setEditingCellText] = useState('');\n\n const openCellStyleDialog = (section: 'thead' | 'tbody', row: number, col: string | number) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const existingStyle = tableData.cellStyles?.[section]?.[row]?.[col] || {};\n \n let cellText = '';\n let legacyWidth = '';\n\n if (section === 'thead') {\n if (tableData.headerRows && tableData.headerRows.length > 0) {\n cellText = tableData.headerRows[row]?.cells[col as number]?.value || '';\n } else {\n cellText = tableData.columns[col as number]?.header || '';\n }\n if (row === 0) {\n legacyWidth = tableData.columns[col as number]?.width || '';\n }\n } else {\n cellText = tableData.rows[row]?.[col as string] || '';\n // also check customText or placeholders if empty\n if (!cellText) {\n cellText = customText[row]?.[col as string] || rowPlaceholders[row]?.[col as string] || '';\n }\n }\n\n setEditingCellText(cellText);\n \n setTempCellStyle({\n ...existingStyle,\n width: existingStyle.width || legacyWidth || ''\n });\n setEditingCellStyle({ section, row, col });\n setCellStyleDialogOpen(true);\n };\n\n const saveCellStyle = () => {\n if (!editingCellStyle) return;\n const { section, row, col } = editingCellStyle;\n \n setTableData(prev => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const sectionStyles = prev.cellStyles?.[section] || {};\n const rowStyles = sectionStyles[row] || {};\n \n const newCellStyles = {\n ...prev.cellStyles,\n [section]: {\n ...sectionStyles,\n [row]: {\n ...rowStyles,\n [col]: tempCellStyle\n }\n }\n };\n \n return {\n ...prev,\n cellStyles: newCellStyles as any\n };\n });\n setCellStyleDialogOpen(false);\n setEditingCellStyle(null);\n };\n\n // Column reordering and swapping state\n const draggedIndexRef = useRef<number | null>(null);\n const [showSwapTool, setShowSwapTool] = useState(false);\n const [swapColA, setSwapColA] = useState('');\n const [swapColB, setSwapColB] = useState('');\n const [reorderColId, setReorderColId] = useState('');\n const [targetPosition, setTargetPosition] = useState<number>(1);\n const [draggedColIndex, setDraggedColIndex] = useState<number | null>(null);\n const [dragOverColIndex, setDragOverColIndex] = useState<number | null>(null);\n const [activeGrabIndex, setActiveGrabIndex] = useState<number | null>(null);\n\n const tableAttributes = useMemo(() =>\n placeholders || [],\n [placeholders]\n );\n // Initialize styles from attrs or use default styles\n const [tableStyles, setTableStyles] = useState(attrs?.styles || {\n is_bordered: true,\n border: 1,\n borderStyle: 'solid',\n borderColor: '#e0e0e0',\n borderCollapse: 'collapse',\n width: '100%',\n thCells: {\n padding: 8\n },\n tbCells: {\n padding: 8\n },\n tHead: {\n backgroundColor: 'rgba(245, 245, 245, 0.75)',\n color: '#333333',\n fontSize: 14,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n rowHeight: 38,\n ...(attrs?.styles?.tHead || {})\n },\n tBody: {\n backgroundColor: 'rgba(255, 255, 255, 0.75)',\n color: '#333333',\n fontSize: 14,\n fontWeight: 'normal',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n rowHeight: 38,\n ...(attrs?.styles?.tBody || {})\n }\n });\n\n // Apply styles to attrs when tableStyles change\n useEffect(() => {\n updateAttrs({ styles: tableStyles });\n }, [JSON.stringify(tableStyles)]);\n\n // Auto-populate rows when placeholders change\n useEffect(() => {\n if (autoPopulateEnabled && (tPlaceholders || rowLevel)) {\n populateRowsWithPlaceholders();\n }\n }, [tPlaceholders, autoPopulateEnabled, rowLevel, rowPlaceholders]);\n\n // Generate unique column ID\n const generateColumnId = () => {\n const existingIds = tableData.columns.map(col => col.id);\n let counter = 1;\n while (existingIds.includes(`col${counter}`)) {\n counter++;\n }\n return `col${counter}`;\n };\n\n // Get placeholder value by key\n const getPlaceholderValue = (placeholderKey: string): string => {\n const placeholder = tableAttributes.find(p => p.value === placeholderKey || p.id === placeholderKey || p.field === placeholderKey);\n if (!placeholder) return `{{${placeholderKey}}}`;\n\n // Return the placeholder syntax for row-level mode\n if (rowLevel) {\n return `{{${placeholder.value}}}`;\n }\n\n // Return the actual value or a sample value if it's dynamic\n if (typeof placeholder.actualValue !== 'undefined') {\n return String(placeholder.actualValue);\n }\n\n // For dynamic placeholders, return a sample/preview value\n switch (placeholder.type) {\n case 'date':\n return new Date().toLocaleDateString();\n case 'datetime':\n return new Date().toLocaleString();\n case 'number':\n return '123';\n case 'currency':\n return '$1,234.56';\n case 'email':\n return 'example@domain.com';\n case 'phone':\n return '+1 (555) 123-4567';\n case 'url':\n return 'https://example.com';\n default:\n const key = placeholder.value || placeholder.id || placeholder.field;\n return `{{${key}}}` || placeholder.label;\n }\n };\n\n // Modified: Populate rows with placeholder values for both column and row level\n const populateRowsWithPlaceholders = () => {\n if (!tPlaceholders && !rowLevel) return;\n\n setTableData(prev => ({\n ...prev,\n name: '',\n rows: prev.rows.map((row, rowIndex) => {\n const updatedRow = { ...row };\n\n prev.columns.forEach(column => {\n let placeholderKey: string | undefined;\n\n // Priority: Row-level placeholders take precedence when rowLevel is true\n if (rowLevel && rowPlaceholders[rowIndex]?.[column.id]) {\n placeholderKey = rowPlaceholders[rowIndex][column.id];\n } else if (tPlaceholders?.[column.id]) {\n placeholderKey = tPlaceholders[column.id];\n }\n\n if (placeholderKey) {\n updatedRow[column.id] = getPlaceholderValue(placeholderKey);\n // Preserve static text in the _static field\n const staticText = customText[rowIndex]?.[column.id] || '';\n if (staticText) {\n updatedRow[`${column.id}_static`] = `${staticText} ${updatedRow[column.id]}`;\n }\n }\n });\n\n return updatedRow;\n })\n }));\n setIsUpdating(false);\n };\n\n // Check if a cell is merged or covered by a merge\n const getCellMergeInfo = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\n const merge = mergedCells?.find(m =>\n m.section === section &&\n rowIndex >= m.rowStart && rowIndex <= m.rowEnd &&\n colIndex >= m.colStart && colIndex <= m.colEnd\n );\n\n if (!merge) return null;\n\n return {\n merge,\n isTopLeft: rowIndex === merge.rowStart && colIndex === merge.colStart,\n isCovered: !(rowIndex === merge.rowStart && colIndex === merge.colStart)\n };\n };\n\n // Check if cell is selected for merging\n const isCellSelected = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\n return selectedCells.some(cell =>\n cell.section === section && cell.row === rowIndex && cell.col === colIndex\n );\n };\n\n // Toggle cell selection for merging\n const toggleCellSelection = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\n const cellKey = { section, row: rowIndex, col: colIndex };\n const isSelected = isCellSelected(section, rowIndex, colIndex);\n\n if (isSelected) {\n setSelectedCells(prev => prev.filter(cell =>\n !(cell.section === section && cell.row === rowIndex && cell.col === colIndex)\n ));\n } else {\n // Prevent mixing header and body cells in the same merge\n const hasDifferentSection = selectedCells.some(cell => cell.section !== section);\n if (hasDifferentSection) {\n alert('Cannot select cells from both header and body for the same merge');\n return;\n }\n setSelectedCells(prev => [...prev, cellKey]);\n }\n };\n\n // Open merge dialog\n const openMergeDialog = () => {\n if (selectedCells.length < 2) {\n alert('Please select at least 2 cells to merge');\n return;\n }\n\n // Get value from first selected cell\n const firstCell = selectedCells[0];\n let firstCellValue = '';\n let customTextValue = '';\n\n if (firstCell.section === 'tbody') {\n const columnId = tableData.columns[firstCell.col]?.id;\n firstCellValue = tableData.rows[firstCell.row]?.[columnId] || '';\n if (rowLevel) {\n customTextValue = customText[firstCell.row]?.[columnId] || '';\n }\n } else {\n firstCellValue = tableData.columns[firstCell.col]?.header || '';\n }\n\n // Combine customText with cell value only in row-level mode\n const initialMergeValue = rowLevel && customTextValue\n ? `${customTextValue} ${firstCellValue}`.trim()\n : firstCellValue;\n\n setMergeValue(initialMergeValue);\n setMergeDialogOpen(true);\n };\n\n // Perform cell merge\n const mergeCells = () => {\n if (selectedCells.length < 2) return;\n\n const section = selectedCells[0].section;\n const rowIndices = selectedCells.map(cell => cell.row);\n const colIndices = selectedCells.map(cell => cell.col);\n\n const rowStart = Math.min(...rowIndices);\n const rowEnd = Math.max(...rowIndices);\n const colStart = Math.min(...colIndices);\n const colEnd = Math.max(...colIndices);\n\n // Check if selection forms a rectangle\n const expectedCells = (rowEnd - rowStart + 1) * (colEnd - colStart + 1);\n if (selectedCells.length !== expectedCells) {\n alert('Please select a rectangular area of cells to merge');\n return;\n }\n\n // Check for overlapping merges\n const hasOverlap = mergedCells.some(existing =>\n existing.section === section &&\n !(rowEnd < existing.rowStart || rowStart > existing.rowEnd ||\n colEnd < existing.colStart || colStart > existing.colEnd)\n );\n\n if (hasOverlap) {\n alert('Cannot merge cells that overlap with existing merged cells');\n return;\n }\n\n const newMerge: CellMerge = {\n section,\n rowStart,\n rowEnd,\n colStart,\n colEnd,\n value: mergeValue\n };\n\n setTableData(prev => ({\n ...prev,\n name: '',\n mergedCells: [...(prev.mergedCells || []), newMerge],\n columns: section === 'thead' ? prev.columns.map((col, index) =>\n index === colStart ? { ...col, header: mergeValue } : col\n ) : prev.columns\n }));\n\n setSelectedCells([]);\n setMergeValue('');\n setMergeDialogOpen(false);\n };\n\n // Split merged cell\n const splitMergedCell = (mergeIndex: number) => {\n const merge = mergedCells[mergeIndex];\n\n setTableData(prev => {\n const updatedRows = [...prev.rows];\n const updatedColumns = [...prev.columns];\n\n if (merge.section === 'tbody') {\n for (let row = merge.rowStart; row <= merge.rowEnd; row++) {\n for (let col = merge.colStart; col <= merge.colEnd; col++) {\n const columnId = prev.columns[col]?.id;\n if (columnId && updatedRows[row]) {\n updatedRows[row][columnId] = merge.value;\n }\n }\n }\n } else {\n if (updatedColumns[merge.colStart]) {\n updatedColumns[merge.colStart].header = merge.value;\n }\n }\n\n return {\n ...prev,\n rows: updatedRows,\n name: '',\n columns: updatedColumns,\n mergedCells: prev.mergedCells?.filter((_, index) => index !== mergeIndex) || []\n };\n });\n };\n\n // Add new column\n const addColumn = () => {\n const newColumnId = generateColumnId();\n const newColumn: TableColumn = {\n id: newColumnId,\n header: `Column ${tableData.columns.length + 1}`\n };\n\n setTableData(prev => ({\n ...prev,\n name: '',\n columns: [...prev.columns, newColumn],\n rows: prev.rows.map(row => ({\n ...row,\n [newColumnId]: ''\n })),\n mergedCells: prev.mergedCells?.map(merge => ({\n ...merge\n })) || []\n }));\n };\n\n // Remove column\n const removeColumn = (columnId: string) => {\n const columnIndex = tableData.columns.findIndex(col => col.id === columnId);\n\n setTableData(prev => ({\n ...prev,\n name: '',\n columns: prev.columns.filter(col => col.id !== columnId),\n rows: prev.rows.map(row => {\n const { [columnId]: removed, ...rest } = row;\n return rest;\n }),\n mergedCells: prev.mergedCells\n ?.filter(merge => !(merge.colStart <= columnIndex && merge.colEnd >= columnIndex))\n .map(merge => ({\n ...merge,\n colStart: merge.colStart > columnIndex ? merge.colStart - 1 : merge.colStart,\n colEnd: merge.colEnd > columnIndex ? merge.colEnd - 1 : merge.colEnd\n })) || []\n }));\n\n if (tPlaceholders && tPlaceholders[columnId]) {\n const updatedPlaceholders = { ...tPlaceholders };\n delete updatedPlaceholders[columnId];\n updateAttrs({ placeholders: updatedPlaceholders });\n }\n };\n\n // Update column header\n const updateColumnHeader = (columnId: string, newHeader: string) => {\n setTableData(prev => ({\n ...prev,\n columns: prev.columns.map(col =>\n col.id === columnId ? { ...col, header: newHeader } : col\n )\n }));\n };\n\n // Move column order (swap adjacent)\n const moveColumn = (index: number, direction: -1 | 1) => {\n const targetIndex = index + direction;\n if (targetIndex < 0 || targetIndex >= tableData.columns.length) return;\n\n setTableData(prev => {\n const newColumns = [...prev.columns];\n const temp = newColumns[index];\n newColumns[index] = newColumns[targetIndex];\n newColumns[targetIndex] = temp;\n\n return {\n ...prev,\n name: '',\n columns: newColumns,\n };\n });\n };\n\n // Swap any two columns by ID\n const handleSwapColumns = (colAId: string, colBId: string) => {\n if (!colAId || !colBId || colAId === colBId) return;\n const indexA = tableData.columns.findIndex(c => c.id === colAId);\n const indexB = tableData.columns.findIndex(c => c.id === colBId);\n if (indexA === -1 || indexB === -1) return;\n\n setTableData(prev => {\n const newColumns = [...prev.columns];\n const temp = newColumns[indexA];\n newColumns[indexA] = newColumns[indexB];\n newColumns[indexB] = temp;\n\n return {\n ...prev,\n name: '',\n columns: newColumns,\n };\n });\n };\n\n // Move column to exact position (1-based position)\n const moveColumnToPosition = (fromIndex: number, toPosition: number) => {\n const toIndex = toPosition - 1;\n if (toIndex < 0 || toIndex >= tableData.columns.length || toIndex === fromIndex) return;\n\n setTableData(prev => {\n const newColumns = [...prev.columns];\n const [moved] = newColumns.splice(fromIndex, 1);\n newColumns.splice(toIndex, 0, moved);\n\n return {\n ...prev,\n name: '',\n columns: newColumns,\n };\n });\n };\n\n // Drag and drop column reordering (splice insertion into exact position)\n const handleDropColumn = (e: React.DragEvent, targetIndex: number) => {\n e.preventDefault();\n const fromIndexStr = e.dataTransfer.getData('text/plain');\n const fromIndex = draggedIndexRef.current !== null\n ? draggedIndexRef.current\n : (fromIndexStr !== '' ? parseInt(fromIndexStr, 10) : draggedColIndex);\n\n if (fromIndex !== null && fromIndex !== undefined && !isNaN(fromIndex) && fromIndex !== targetIndex) {\n setTableData(prev => {\n const newColumns = [...prev.columns];\n const [moved] = newColumns.splice(fromIndex, 1);\n newColumns.splice(targetIndex, 0, moved);\n\n return {\n ...prev,\n name: '',\n columns: newColumns,\n };\n });\n }\n draggedIndexRef.current = null;\n setDraggedColIndex(null);\n setDragOverColIndex(null);\n setActiveGrabIndex(null);\n };\n\n // Add Header Row\n const addHeaderRow = () => {\n const newHeaderRowId = `hr${Date.now()}`;\n const newHeaderRow: HeaderRow = {\n id: newHeaderRowId,\n cells: tableData.columns.map((c, i) => ({ id: `hc${Date.now()}${i}`, value: '' }))\n };\n\n setTableData(prev => {\n const headerRows = prev.headerRows && prev.headerRows.length > 0\n ? [...prev.headerRows, newHeaderRow]\n : [\n // Create first one from existing columns if there were none\n { id: `hr_def`, cells: prev.columns.map((c, i) => ({ id: `hc_def_${i}`, value: c.header })) },\n newHeaderRow\n ];\n\n return {\n ...prev,\n headerRows\n };\n });\n };\n\n // Remove Header Row\n const removeHeaderRow = (rowIndex: number) => {\n setTableData(prev => {\n if (!prev.headerRows) return prev;\n const newHeaderRows = prev.headerRows.filter((_, idx) => idx !== rowIndex);\n \n // If we are back to 1 or 0 rows, we can just clear headerRows and revert to columns\n if (newHeaderRows.length <= 1) {\n if (newHeaderRows.length === 1) {\n // Sync back to columns if possible\n const newCols = prev.columns.map((c, i) => ({ ...c, header: newHeaderRows[0].cells[i]?.value || '' }));\n return {\n ...prev,\n columns: newCols,\n headerRows: undefined,\n mergedCells: prev.mergedCells?.filter(m => m.section !== 'thead') || []\n };\n }\n return { ...prev, headerRows: undefined };\n }\n\n return {\n ...prev,\n headerRows: newHeaderRows,\n mergedCells: prev.mergedCells?.filter(m => !(m.section === 'thead' && m.rowStart <= rowIndex && m.rowEnd >= rowIndex)).map(m => ({\n ...m,\n rowStart: m.section === 'thead' && m.rowStart > rowIndex ? m.rowStart - 1 : m.rowStart,\n rowEnd: m.section === 'thead' && m.rowEnd > rowIndex ? m.rowEnd - 1 : m.rowEnd\n })) || []\n };\n });\n };\n\n // Update Header Cell Value\n const updateHeaderCellValue = (rowIndex: number, colIndex: number, value: string) => {\n setTableData(prev => {\n if (!prev.headerRows) return prev;\n const newHeaderRows = [...prev.headerRows];\n newHeaderRows[rowIndex] = {\n ...newHeaderRows[rowIndex],\n cells: newHeaderRows[rowIndex].cells.map((c, idx) => idx === colIndex ? { ...c, value } : c)\n };\n \n const mergeInfo = getCellMergeInfo('thead', rowIndex, colIndex);\n let newMergedCells = prev.mergedCells || [];\n if (mergeInfo) {\n newMergedCells = newMergedCells.map(m => m === mergeInfo.merge ? { ...m, value } : m);\n }\n\n return {\n ...prev,\n headerRows: newHeaderRows,\n mergedCells: newMergedCells\n };\n });\n };\n\n // Add new row\n const addRow = () => {\n const newRow: TableRow = {};\n\n tableData.columns.forEach(col => {\n if (tPlaceholders?.[col.id]) {\n const placeholderKey = tPlaceholders[col.id];\n newRow[col.id] = `{{${placeholderKey}}}`;\n if (rowLevel) {\n newRow[`${col.id}_static`] = newRow[col.id];\n }\n\n } else if (tableData.rows.length > 0) {\n // Copy first row's data if no placeholder\n newRow[col.id] = tableData.rows[0][col.id] || '';\n if (rowLevel) {\n newRow[`${col.id}_static`] = tableData.rows[0][`${col.id}_static`] || ''\n }\n } else {\n // Default to empty\n if (rowLevel) {\n newRow[`${col.id}_static`] = '';\n }\n newRow[col.id] = '';\n }\n });\n\n setTableData(prev => {\n const updatedRows = [...prev.rows, newRow];\n return {\n ...prev,\n rows: updatedRows,\n name: '',\n mergedCells: prev.mergedCells?.map(merge => ({ ...merge })) || []\n };\n });\n handleSave?.();\n };\n\n // Remove row\n const removeRow = (rowIndex: number) => {\n setTableData(prev => ({\n ...prev,\n name: '',\n rows: prev.rows.filter((_, index) => index !== rowIndex),\n mergedCells: prev.mergedCells\n ?.filter(merge => !(merge.section === 'tbody' && merge.rowStart <= rowIndex && merge.rowEnd >= rowIndex))\n .map(merge => ({\n ...merge,\n rowStart: merge.section === 'tbody' && merge.rowStart > rowIndex ? merge.rowStart - 1 : merge.rowStart,\n rowEnd: merge.section === 'tbody' && merge.rowEnd > rowIndex ? merge.rowEnd - 1 : merge.rowEnd\n })) || []\n }));\n\n // Clean up rowPlaceholders and customText for the removed row\n setRowPlaceholders(prev => {\n const updated = { ...prev };\n delete updated[rowIndex];\n return updated;\n });\n setCustomText(prev => {\n const updated = { ...prev };\n delete updated[rowIndex];\n return updated;\n });\n };\n\n // Modified: Update cell value and trigger placeholder population\n const updateRowCellValue = (rowIndex: number, columnId: string, value: string) => {\n setIsUpdating(true);\n const colIndex = tableData.columns.findIndex(col => col.id === columnId);\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\n const staticText = rowLevel ? (customText[rowIndex]?.[columnId] || '') : '';\n\n if (mergeInfo) {\n setTableData(prev => ({\n ...prev,\n name: '',\n mergedCells: prev.mergedCells?.map(merge =>\n merge === mergeInfo.merge ? { ...merge, value } : merge\n ) || []\n }));\n } else {\n if (rowLevel && value) {\n setRowPlaceholders(prev => {\n const updated = { ...prev };\n if (!updated[rowIndex]) {\n updated[rowIndex] = {};\n }\n updated[rowIndex][columnId] = value;\n return updated;\n });\n } else if (rowLevel && !value) {\n setRowPlaceholders(prev => {\n const updated = { ...prev };\n if (updated[rowIndex]?.[columnId]) {\n delete updated[rowIndex][columnId];\n if (Object.keys(updated[rowIndex]).length === 0) {\n delete updated[rowIndex];\n }\n }\n return updated;\n });\n }\n\n setTableData(prev => ({\n ...prev,\n name: '',\n rows: prev.rows.map((row, idx) =>\n idx === rowIndex ? {\n ...row,\n [columnId]: rowLevel ? (value ? `{{${value}}}` : '') : (value ? getPlaceholderValue(value) : ''),\n [`${columnId}_static`]: staticText ? `${staticText} ${value ? getPlaceholderValue(value) : ''}`.trim() : (value ? getPlaceholderValue(value) : '')\n } : row\n )\n }));\n\n populateRowsWithPlaceholders();\n }\n };\n const updateCellValue = (rowIndex: number, columnId: string, value: string) => {\n setIsUpdating(true);\n const colIndex = tableData.columns.findIndex(col => col.id === columnId);\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\n const staticText = customText[rowIndex]?.[columnId] || '';\n\n if (mergeInfo) {\n setTableData(prev => ({\n ...prev,\n name: '',\n mergedCells: prev.mergedCells?.map(merge =>\n merge === mergeInfo.merge ? { ...merge, value } : merge\n ) || []\n }));\n } else {\n if (rowLevel) {\n setRowPlaceholders(prev => {\n const updated = { ...prev };\n if (!updated[rowIndex]) {\n updated[rowIndex] = {};\n }\n if (value) {\n updated[rowIndex][columnId] = value;\n } else {\n delete updated[rowIndex][columnId];\n if (Object.keys(updated[rowIndex]).length === 0) {\n delete updated[rowIndex];\n }\n }\n return updated;\n });\n }\n\n setTableData(prev => ({\n ...prev,\n name: '',\n rows: prev.rows.map((row, idx) =>\n idx === rowIndex ? {\n ...row,\n [columnId]: rowLevel ? (value ? `{{${value}}}` : '') : value,\n [`${columnId}_static`]: staticText ? `${staticText} ${value || ''}`.trim() : (value || '')\n } : row\n )\n }));\n\n if (rowLevel || (autoPopulateEnabled && tPlaceholders?.[columnId])) {\n populateRowsWithPlaceholders();\n }\n setIsUpdating(false);\n }\n };\n\n // Modified: Update column placeholder\n const updateColumnPlaceholder = (columnId: string, placeholderValue: string) => {\n setIsUpdating(true);\n const updatedPlaceholders = {\n ...tPlaceholders,\n [columnId]: placeholderValue\n };\n\n if (!placeholderValue) {\n delete updatedPlaceholders[columnId];\n }\n\n updateAttrs({ placeholders: updatedPlaceholders });\n\n if (autoPopulateEnabled) {\n const newCellValue = placeholderValue ? getPlaceholderValue(placeholderValue) : '';\n setTableData(prev => ({\n ...prev,\n name: '',\n rows: prev.rows.map(row => ({\n ...row,\n [columnId]: newCellValue\n }))\n }));\n }\n setIsUpdating(false);\n };\n\n // Refresh all rows with current placeholder values\n const refreshPlaceholderData = () => {\n populateRowsWithPlaceholders();\n };\n\n // Get placeholder info for display\n const getPlaceholderInfo = (placeholderKey: string) => {\n const placeholder = placeholders.find(p => p.value === placeholderKey);\n return placeholder ? {\n label: placeholder.label,\n type: placeholder.type || 'text',\n description: placeholder.description || ''\n } : null;\n };\n\n const handleTabChange = (event: React.SyntheticEvent, newValue: number) => {\n setTabValue(newValue);\n };\n\n const handleAccordionChange = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => {\n setExpanded(isExpanded ? panel : '');\n };\n\n const updateTableStyle = (key: string, value: any) => {\n setTableStyles(prev => ({\n ...prev,\n [key]: value\n }));\n };\n\n const updateHeaderStyle = (key: string, value: any) => {\n setTableStyles(prev => ({\n ...prev,\n tHead: {\n ...prev.tHead,\n [key]: value\n }\n }));\n };\n\n const updateHeaderCellStyle = (key: string, value: any) => {\n setTableStyles(prev => ({\n ...prev,\n thCells: {\n ...prev.thCells,\n [key]: value\n }\n }));\n };\n\n const updateBodyStyle = (key: string, value: any) => {\n setTableStyles(prev => ({\n ...prev,\n tBody: {\n ...prev.tBody,\n [key]: value\n }\n }));\n };\n\n const updateBodyCellStyle = (key: string, value: any) => {\n setTableStyles(prev => ({\n ...prev,\n tbCells: {\n ...prev.tbCells,\n [key]: value\n }\n }));\n };\n\n const resetTable = () => {\n setTableData((prev: TableData) => ({\n ...prev,\n name: '',\n rows: prev.rows.map((row: TableRow) => {\n return {\n ...Object.fromEntries(prev.columns.map((col: TableColumn) => [col?.id, '']))\n }\n })\n }));\n }\n // Count columns with placeholders\n const columnsWithPlaceholders = tPlaceholders ? Object.keys(tPlaceholders).length : 0;\n // Initialize rowLevel only once on mount (or when levelType changes externally)\n useEffect(() => {\n setRowLevel(!!levelType);\n }, [levelType]);\n\n // Update customText whenever tableData rows change\n useEffect(() => {\n setCustomText((prev: { [rowIndex: number]: { [columnId: string]: string } }) => {\n const updated: { [rowIndex: number]: { [columnId: string]: string } } = {};\n\n tableData.rows.forEach((row, rowIndex) => {\n Object.keys(row).forEach(columnId => {\n if (columnId.endsWith('_static')) {\n const originalColumnId = columnId.replace('_static', '');\n if (!updated[rowIndex]) {\n updated[rowIndex] = {};\n }\n\n const columnValue = row[originalColumnId] || '';\n let staticValue = row[columnId] || '';\n if (columnValue && staticValue.includes(columnValue)) {\n staticValue = staticValue.replace(columnValue, '').trim();\n }\n staticValue = staticValue.replace(/\\{\\{\\s*value\\s*\\}\\}/g, '').trim();\n updated[rowIndex][originalColumnId] = staticValue;\n }\n });\n });\n\n return updated;\n });\n }, [tableData]);\n\n useEffect(() => {\n setTableData(prev => {\n const newRows = prev.rows.length === 0 ? [{}] : prev.rows;\n\n return {\n ...prev,\n name: '',\n rows: newRows\n };\n });\n }, [autoPopulateEnabled]);\n // --- Calculate inherited styles for Cell Style Modal ---\n const inheritedDirection = tableStyles.direction || 'ltr';\n let inheritedBg = '';\n let inheritedColor = '';\n let inheritedAlign = '';\n let inheritedFontWeight = '';\n\n if (editingCellStyle?.section === 'thead') {\n inheritedBg = tableStyles.tHead?.backgroundColor ?? 'rgba(245, 245, 245, 0.75)';\n inheritedColor = tableStyles.tHead?.color || '#333333';\n inheritedAlign = tableStyles.tHead?.textAlign || 'left';\n inheritedFontWeight = tableStyles.tHead?.fontWeight || 'bold';\n } else if (editingCellStyle?.section === 'tbody') {\n inheritedBg = tableStyles.tBody?.backgroundColor ?? 'rgba(255, 255, 255, 0.75)';\n inheritedColor = tableStyles.tBody?.color || '#333333';\n const colData = tableData.columns.find(c => c.id === editingCellStyle.col);\n inheritedAlign = colData?.align === 'r' ? 'right' : colData?.align === 'c' ? 'center' : 'left';\n inheritedFontWeight = tableStyles.tBody?.fontWeight || 'normal';\n }\n\n return (\n <>\n <Box sx={{ mb: 2, borderBottom: 1, paddingBottom: 5, borderColor: 'divider' }}>\n <Tabs value={tabValue} onChange={handleTabChange} variant=\"fullWidth\" sx={(theme) => ({\n '& .MuiTabs-indicator': {\n backgroundColor: theme.palette.theme?.primary[700]\n },\n '& .MuiTab-root.Mui-selected': {\n color: theme.palette.theme?.primary[700],\n },\n '& .MuiTab-root': {\n textTransform: 'none'\n },\n })}>\n <Tab label=\"Content\" />\n <Tab label=\"Styles\" />\n <Tab label=\"Cell Merging\" />\n </Tabs>\n </Box>\n\n {tabValue === 0 && (\n <>\n <Box sx={{ mb: 2, p: 2, bgcolor: 'grey.50', borderRadius: 1, border: '1px solid', borderColor: 'divider' }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.primary.700\">\n Dynamic Data Settings\n </Typography>\n <Chip\n label={`${columnsWithPlaceholders} columns linked`}\n size=\"small\"\n color=\"primary\"\n variant=\"outlined\"\n sx={theme => ({\n color: theme.palette.theme?.primary[700],\n borderColor: theme.palette.theme?.primary[700]\n })}\n />\n </Box>\n\n <FormControlLabel\n control={\n <Android12Switch\n checked={!!autoPopulateEnabled}\n onChange={(e) => {\n const checked = e.target.checked;\n setAutoPopulateEnabled(checked);\n updateAttrs({ autoPopulateEnabled: checked });\n }}\n />\n }\n label={\n <Typography type=\"s5\" color=\"theme.secondary.800\">\n Auto-populate rows with placeholder data\n </Typography>\n }\n />\n <FormControlLabel\n control={\n <Android12Switch\n checked={!!rowLevel}\n onChange={(e) => {\n const isRowLevel = e.target.checked;\n setRowLevel(isRowLevel);\n setAutoPopulateEnabled(!isRowLevel);\n setParentRowLevel?.(isRowLevel);\n\n if (!isRowLevel) {\n // Truncate to 1 row when disabling row-level management\n setTableData(prev => ({\n ...prev,\n rows: prev.rows.length > 0 ? [prev.rows[0]] : [{}]\n }));\n }\n resetTable();\n }}\n />\n }\n label={\n <Typography type=\"s5\" color=\"theme.secondary.800\">\n Row Level Management\n </Typography>\n }\n />\n\n {autoPopulateEnabled && (\n <Box sx={{ mt: 1.5 }}>\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={refreshPlaceholderData}\n startIcon={<RefreshIcon />}\n className='black-outlined-btn'\n >\n Refresh Data\n </Button>\n </Box>\n )}\n </Box>\n\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 0.5 }}>\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n Columns ({tableData.columns.length})\n </Typography>\n {tableData.columns.length > 1 && (\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setShowSwapTool(!showSwapTool)}\n startIcon={<SwapHorizIcon fontSize=\"small\" />}\n sx={{ textTransform: 'none', py: 0.25, px: 1, minWidth: 'auto', fontSize: '12px' }}\n >\n {showSwapTool ? 'Hide Swap' : 'Swap / Reorder'}\n </Button>\n )}\n </Box>\n <Typography type=\"c1\" color=\"text.secondary\" sx={{ display: 'block', mb: 1, fontSize: '11px' }}>\n Drag ⠿ handle to reorder into position\n </Typography>\n\n {/* Quick Swap / Move to Position Panel */}\n {showSwapTool && tableData.columns.length > 1 && (\n <Box sx={{ mb: 2, p: 1.5, bgcolor: '#f8fafc', borderRadius: 1.5, border: '1px solid #e2e8f0' }}>\n <Typography type=\"s5\" weight=\"bold\" color=\"theme.secondary.900\" sx={{ mb: 1, display: 'block' }}>\n Swap Two Columns\n </Typography>\n\n {/* 1. Swap two columns */}\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 1.5 }}>\n <Select\n size=\"small\"\n value={swapColA || tableData.columns[0]?.id || ''}\n onChange={(e) => setSwapColA(e.target.value)}\n sx={{ flex: 1, fontSize: '13px' }}\n >\n {tableData.columns.map((c, idx) => (\n <MenuItem key={c.id} value={c.id}>\n {idx + 1}. {c.header || `Col ${idx + 1}`}\n </MenuItem>\n ))}\n </Select>\n <SwapHorizIcon sx={{ color: '#64748b', fontSize: 20 }} />\n <Select\n size=\"small\"\n value={swapColB || tableData.columns[1]?.id || ''}\n onChange={(e) => setSwapColB(e.target.value)}\n sx={{ flex: 1, fontSize: '13px' }}\n >\n {tableData.columns.map((c, idx) => (\n <MenuItem key={c.id} value={c.id}>\n {idx + 1}. {c.header || `Col ${idx + 1}`}\n </MenuItem>\n ))}\n </Select>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={() => {\n const a = swapColA || tableData.columns[0]?.id;\n const b = swapColB || tableData.columns[1]?.id;\n handleSwapColumns(a, b);\n }}\n disabled={!tableData.columns || tableData.columns.length < 2 || (swapColA === swapColB && !!swapColA)}\n sx={{ minWidth: 'auto', px: 1.5 }}\n >\n Swap\n </Button>\n </Box>\n\n {/* 2. Move column to exact position */}\n <Divider sx={{ my: 1 }} />\n <Typography type=\"s5\" weight=\"bold\" color=\"theme.secondary.900\" sx={{ mb: 1, display: 'block' }}>\n Move Column To Position\n </Typography>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Select\n size=\"small\"\n value={reorderColId || tableData.columns[tableData.columns.length - 1]?.id || ''}\n onChange={(e) => setReorderColId(e.target.value)}\n sx={{ flex: 1, fontSize: '13px' }}\n >\n {tableData.columns.map((c, idx) => (\n <MenuItem key={c.id} value={c.id}>\n {idx + 1}. {c.header || `Col ${idx + 1}`}\n </MenuItem>\n ))}\n </Select>\n <Typography type=\"s5\" color=\"text.secondary\" sx={{ whiteSpace: 'nowrap' }}>\n to\n </Typography>\n <Select\n size=\"small\"\n value={targetPosition || 1}\n onChange={(e) => setTargetPosition(Number(e.target.value))}\n sx={{ width: '70px', fontSize: '13px' }}\n >\n {tableData.columns.map((_, idx) => (\n <MenuItem key={idx + 1} value={idx + 1}>\n #{idx + 1}\n </MenuItem>\n ))}\n </Select>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={() => {\n const colId = reorderColId || tableData.columns[tableData.columns.length - 1]?.id;\n const fromIdx = tableData.columns.findIndex(c => c.id === colId);\n if (fromIdx !== -1) {\n moveColumnToPosition(fromIdx, targetPosition);\n }\n }}\n sx={{ minWidth: 'auto', px: 1.5 }}\n >\n Move\n </Button>\n </Box>\n </Box>\n )}\n\n {tableData.columns?.map((column, index) => (\n <Box\n key={column.id}\n data-column-row=\"true\"\n onDragOver={(e) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n if (dragOverColIndex !== index) {\n setDragOverColIndex(index);\n }\n }}\n onDragLeave={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n if (dragOverColIndex === index) {\n setDragOverColIndex(null);\n }\n }\n }}\n onDrop={(e) => handleDropColumn(e, index)}\n sx={{\n mb: 1,\n display: 'flex',\n alignItems: 'center',\n gap: 0.5,\n p: '3px 4px',\n borderRadius: '6px',\n bgcolor: dragOverColIndex === index && draggedColIndex !== index ? '#e0f2fe' : 'transparent',\n border: dragOverColIndex === index && draggedColIndex !== index ? '1.5px dashed #0284c7' : '1.5px solid transparent',\n opacity: draggedColIndex === index ? 0.35 : 1,\n transition: 'all 0.15s ease',\n }}\n >\n <Box\n draggable={true}\n onDragStart={(e) => {\n draggedIndexRef.current = index;\n setDraggedColIndex(index);\n e.dataTransfer.setData('text/plain', String(index));\n e.dataTransfer.effectAllowed = 'move';\n const rowEl = (e.currentTarget as HTMLElement).closest('[data-column-row]');\n if (rowEl && e.dataTransfer.setDragImage) {\n e.dataTransfer.setDragImage(rowEl, 20, 20);\n }\n }}\n onDragEnd={() => {\n draggedIndexRef.current = null;\n setDraggedColIndex(null);\n setDragOverColIndex(null);\n setActiveGrabIndex(null);\n }}\n onMouseDown={() => setActiveGrabIndex(index)}\n onMouseUp={() => setActiveGrabIndex(null)}\n title=\"Drag to position\"\n sx={{\n cursor: 'grab',\n '&:active': { cursor: 'grabbing' },\n display: 'flex',\n alignItems: 'center',\n color: '#94a3b8',\n p: '2px',\n userSelect: 'none',\n '&:hover': { color: '#0f172a' },\n }}\n >\n <DragIndicatorIcon sx={{ fontSize: 18 }} />\n </Box>\n <TextField\n label={`Column ${index + 1} Header`}\n value={column.header}\n onChange={(e) => updateColumnHeader(column.id, e.target.value)}\n size=\"small\"\n sx={{\n flex: 1,\n pointerEvents: draggedColIndex !== null ? 'none' : 'auto',\n }}\n />\n <IconButton\n size=\"small\"\n onClick={() => moveColumn(index, -1)}\n disabled={index === 0}\n title=\"Move column left / up\"\n sx={{\n p: 0.5,\n color: index === 0 ? '#cbd5e1' : '#475569',\n pointerEvents: draggedColIndex !== null ? 'none' : 'auto',\n }}\n >\n <KeyboardArrowUpIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n size=\"small\"\n onClick={() => moveColumn(index, 1)}\n disabled={index === tableData.columns.length - 1}\n title=\"Move column right / down\"\n sx={{\n p: 0.5,\n color: index === tableData.columns.length - 1 ? '#cbd5e1' : '#475569',\n pointerEvents: draggedColIndex !== null ? 'none' : 'auto',\n }}\n >\n <KeyboardArrowDownIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n size=\"small\"\n onClick={() => removeColumn(column.id)}\n disabled={tableData.columns.length <= 1}\n color=\"error\"\n title=\"Delete column\"\n sx={{\n p: 0.5,\n pointerEvents: draggedColIndex !== null ? 'none' : 'auto',\n }}\n >\n <Trash />\n </IconButton>\n </Box>\n ))}\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={addColumn}\n startIcon={<AddIcon />}\n sx={{ mt: 1 }}\n className='black-outlined-btn'\n >\n Add Column\n </Button>\n </Box>\n\n <Box sx={{ mb: 2 }}>\n <Divider sx={{ my: 2 }} />\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n Header Rows ({tableData.headerRows?.length || 1})\n </Typography>\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={addHeaderRow}\n startIcon={<AddIcon />}\n className='black-outlined-btn'\n >\n Add Header Row\n </Button>\n </Box>\n\n {(tableData.headerRows && tableData.headerRows.length > 0\n ? tableData.headerRows\n : [{ id: 'default', cells: tableData.columns.map(c => ({ id: c.id, value: c.header })) }]\n ).map((hRow, rowIndex) => (\n <Box key={hRow.id} sx={{ mb: 2, p: 2, border: 1, borderColor: 'divider', borderRadius: 1 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.800\">\n Header Row {rowIndex + 1}\n </Typography>\n <IconButton\n size=\"small\"\n onClick={() => removeHeaderRow(rowIndex)}\n disabled={(tableData.headerRows?.length || 1) <= 1}\n color=\"error\"\n >\n <Trash />\n </IconButton>\n </Box>\n <Grid container spacing={1}>\n {hRow.cells.map((cell, colIndex) => {\n const mergeInfo = getCellMergeInfo('thead', rowIndex, colIndex);\n \n return (\n <Grid item xs={12} key={cell.id}>\n <Box sx={{ display: 'flex', gap: 1 }}>\n <TextField\n label={`Header Col ${colIndex + 1}`}\n value={mergeInfo ? mergeInfo.merge.value : cell.value}\n onChange={(e) => updateHeaderCellValue(rowIndex, colIndex, e.target.value)}\n size=\"small\"\n fullWidth\n helperText={\n mergeInfo\n ? `Merged cell (${mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1}×${mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1})`\n : undefined\n }\n sx={{\n flex: 1,\n '& .MuiInputBase-input': {\n bgcolor: mergeInfo ? 'blue.50' : 'transparent',\n },\n }}\n />\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => openCellStyleDialog('thead', rowIndex, colIndex)}\n sx={{ minWidth: '40px', p: 0.5, height: '40px' }}\n title=\"Cell Style\"\n >\n 🎨\n </Button>\n </Box>\n </Grid>\n );\n })}\n </Grid>\n </Box>\n ))}\n </Box>\n\n {!autoPopulateEnabled && (\n <>\n <Divider sx={{ my: 2 }} />\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n Rows ({tableData.rows.length})\n </Typography>\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => addRow()}\n startIcon={<AddIcon />}\n className='black-outlined-btn'\n >\n Add Row\n </Button>\n </Box>\n\n\n {tableData.rows.map((row, rowIndex) => (\n <Box key={rowIndex} sx={{ mb: 2, p: 2, border: 1, borderColor: 'divider', borderRadius: 1 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.800\">\n Row {rowIndex + 1}\n </Typography>\n <IconButton\n size=\"small\"\n onClick={() => removeRow(rowIndex)}\n disabled={tableData.rows.length <= 1}\n color=\"error\"\n >\n <Trash />\n </IconButton>\n </Box>\n <Grid container spacing={1}>\n\n {tableData.columns.map((column, colIndex) => {\n const hasPlaceholder = rowLevel ? rowPlaceholders[rowIndex]?.[column.id] : tPlaceholders?.[column.id];\n const placeholderInfo = hasPlaceholder ? getPlaceholderInfo(tPlaceholders?.[column.id] || rowPlaceholders[rowIndex]?.[column.id]) : null;\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\n\n return (\n <Grid item xs={12} key={column.id}>\n\n {rowLevel ? (\n <>\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.800\"> {column.header} </Typography>\n <Box\n sx={{\n display: 'flex',\n gap: 1,\n width: '100%',\n }}\n >\n <Box sx={{ flex: 1, display: 'flex', flexDirection: 'column', gap: 1 }}>\n <TextField\n value={customText[rowIndex]?.[column.id] || ''}\n onChange={(e) => {\n const newValue = e.target.value;\n setCustomText(prev => {\n const updated = { ...prev };\n if (!updated[rowIndex]) {\n updated[rowIndex] = {};\n }\n updated[rowIndex][column.id] = newValue;\n return updated;\n });\n\n // Update table data on custom text change\n setTableData(prev => ({\n ...prev,\n rows: prev.rows.map((row, idx) =>\n idx === rowIndex\n ? {\n ...row,\n [`${column.id}_static`]: newValue\n ? `${newValue} ${row[column.id] || ''}`.trim()\n : '',\n }\n : row\n ),\n }));\n }}\n size=\"small\"\n placeholder=\"Enter custom text...\"\n fullWidth\n />\n <Box sx={{ width: '100%' }}>\n <SearchableSelect\n value={mergeInfo ? mergeInfo.merge.value : (rowPlaceholders[rowIndex]?.[column.id] || row[column.id] || '')}\n onChange={(e) => updateRowCellValue(rowIndex, column.id, e.target.value)}\n size=\"small\"\n options={(placeholders || []).map((p: any) => ({\n value: p.value || p.id || p.field || p.key,\n label: p.label || p.id || p.field,\n description: p.description\n }))}\n // disabled={isUpdating}\n sx={{\n width: '100%',\n '& .MuiInputBase-input': {\n bgcolor:\n hasPlaceholder && autoPopulateEnabled\n ? 'grey.100'\n : mergeInfo\n ? 'blue.50'\n : 'transparent',\n },\n }}\n />\n </Box>\n </Box>\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => openCellStyleDialog('tbody', rowIndex, column.id)}\n sx={{ minWidth: '40px', p: 0.5, alignSelf: 'flex-start', height: '40px' }}\n title=\"Cell Style\"\n >\n 🎨\n </Button>\n </Box>\n </>\n ) : (\n <Box sx={{ display: 'flex', gap: 1 }}>\n <TextField\n label={column.header}\n value={mergeInfo ? mergeInfo.merge.value : (row[column.id] || '')}\n onChange={(e) => updateCellValue(rowIndex, column.id, e.target.value)}\n size=\"small\"\n fullWidth\n disabled={autoPopulateEnabled || hasPlaceholder}\n helperText={\n mergeInfo\n ? `Merged cell (${mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1}×${mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1})`\n : hasPlaceholder && placeholderInfo\n ? `Linked to: ${placeholderInfo.label}`\n : undefined\n }\n sx={{\n flex: 1,\n '& .MuiInputBase-input': {\n bgcolor:\n hasPlaceholder && autoPopulateEnabled\n ? 'grey.100'\n : mergeInfo\n ? 'blue.50'\n : 'transparent',\n },\n }}\n />\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => openCellStyleDialog('tbody', rowIndex, column.id)}\n sx={{ minWidth: '40px', p: 0.5, alignSelf: 'flex-start', height: '40px' }}\n title=\"Cell Style\"\n >\n 🎨\n </Button>\n </Box>\n )}\n </Grid>\n );\n })}\n </Grid>\n </Box>\n ))}\n </Box>\n </>\n )}\n\n {autoPopulateEnabled && !rowLevel && (\n <>\n <Divider sx={{ my: 2 }} />\n\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 1 }}>\n Column Data Sources\n </Typography>\n\n\n\n {placeholders.length === 0 && (\n <Alert severity=\"info\" sx={{ mb: 2 }}>\n No placeholders available. Add placeholders to dynamically populate table data.\n </Alert>\n )}\n\n <Grid container spacing={1} alignItems='center'>\n {tableData.columns.map((column) => {\n const currentPlaceholder = tPlaceholders?.[column.id] || tableData.rows?.[0]?.[column.id];\n\n const placeholderInfo = currentPlaceholder ? getPlaceholderInfo(currentPlaceholder) : null;\n\n return (\n <React.Fragment key={column.id}>\n <Grid item xs={4}>\n <Typography type=\"s5\" weight=\"medium\" color=\"theme.secondary.800\">\n {column.header}\n </Typography>\n {placeholderInfo && (\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\n {placeholderInfo.type}\n </Typography>\n )}\n </Grid>\n <Grid item xs={8}>\n <SearchableSelect\n value={rowLevel ? '' : (currentPlaceholder || '')}\n onChange={(e) => {\n updateColumnPlaceholder(column.id, e.target.value as string)\n }}\n size=\"small\"\n options={tableAttributes.map((attr: any) => ({\n value: attr.value || attr.id || attr.field || attr.key,\n label: attr.label || attr.id || attr.field,\n // Include description if available in your tableAttributes\n description: attr.description\n }))}\n disabled={isUpdating || rowLevel}\n sx={{\n flex: 1,\n maxWidth: 150,\n minWidth: 150,\n '& .MuiInputBase-input': {\n bgcolor: 'transparent',\n width: 150,\n },\n }}\n renderOption={(props, option) => (\n <MenuItem {...props} key={option.value}>\n <Box>\n <Typography type=\"s5\" color=\"theme.secondary.1000\">\n {option.label}\n </Typography>\n {option.description && (\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\n {option.description}\n </Typography>\n )}\n </Box>\n </MenuItem>\n )}\n noOptionsText={\n <MenuItem disabled>\n <Typography type=\"s5\" color=\"theme.secondary.600\">\n No Data Source\n </Typography>\n </MenuItem>\n }\n />\n </Grid>\n </React.Fragment>\n );\n })}\n </Grid>\n </>\n )}\n </>\n )}\n\n {tabValue === 1 && (\n <Box sx={{\n '& >:first-child': { borderTopLeftRadius: 8, borderTopRightRadius: 8 },\n '& >:last-child': { borderBottomLeftRadius: 8, borderBottomRightRadius: 8 }\n }}>\n <Accordion\n expanded={expanded === 'tableBasic'}\n onChange={handleAccordionChange('tableBasic')}\n disableGutters\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography type='s3' color='theme.secondary.1000'>Table Basic Properties</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <BorderControl\n styles={tableStyles}\n onChange={(key, value) => updateTableStyle(key, value)}\n isBordered={tableStyles.is_bordered}\n />\n <Box sx={{ mt: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 0.5 }}>\n <Typography type='s5' weight='medium' color='theme.secondary.800' variant=\"caption\">\n Table Opacity\n </Typography>\n <Typography type='s5' color='theme.secondary.600' variant=\"caption\">\n {typeof tableStyles?.opacity === 'number' ? Math.round(tableStyles.opacity * 100) : 100}%\n </Typography>\n </Box>\n <Slider\n value={typeof tableStyles?.opacity === 'number' ? Math.round(tableStyles.opacity * 100) : 100}\n min={0}\n max={100}\n step={1}\n size=\"small\"\n onChange={(_, value) => updateTableStyle('opacity', (value as number) / 100)}\n valueLabelDisplay=\"auto\"\n sx={(theme: any) => ({\n '& .MuiSlider-rail': {\n color: theme.palette.theme?.primary?.[500] || '#6366f1',\n },\n '& .MuiSlider-thumb': {\n color: theme.palette.theme?.primary?.[800] || '#4338ca',\n },\n '& .MuiSlider-track': {\n color: theme.palette.theme?.primary?.[600] || '#4f46e5',\n },\n })}\n />\n </Box>\n </AccordionDetails>\n </Accordion>\n\n <Accordion\n expanded={expanded === 'tableHeader'}\n onChange={handleAccordionChange('tableHeader')}\n disableGutters\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography type='s3' color='theme.secondary.1000'>Table Header Styles</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <ColorPickerInput\n value={tableStyles.tHead?.backgroundColor ?? 'rgba(245, 245, 245, 0.75)'}\n onChange={(color) => updateHeaderStyle('backgroundColor', color)}\n fullWidth\n label='Background Color'\n />\n </Grid>\n\n <Grid item xs={12}>\n <ColorPickerInput\n value={tableStyles.tHead?.color || '#333333'}\n onChange={(color) => updateHeaderStyle('color', color)}\n fullWidth\n label='Text Color'\n />\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n label='Font Size'\n type='number'\n value={tableStyles.tHead?.fontSize ?? 14}\n onChange={(e) => updateHeaderStyle('fontSize', e.target.value === '' ? 14 : parseInt(e.target.value))}\n size='small'\n fullWidth\n />\n </Grid>\n\n <Grid item xs={6}>\n <Select\n value={tableStyles.tHead?.fontWeight || 'bold'}\n onChange={(e) => updateHeaderStyle('fontWeight', e.target.value)}\n fullWidth\n size='small'\n label='Font Weight'\n >\n {fontWeightOptions.map(weight => (\n <MenuItem key={weight} value={weight}>\n {formatText(weight)}\n </MenuItem>\n ))}\n </Select>\n </Grid>\n\n <Grid item xs={12}>\n <Select\n value={tableStyles.tHead?.fontFamily || 'Arial, sans-serif'}\n onChange={(e) => updateHeaderStyle('fontFamily', e.target.value)}\n fullWidth\n size='small'\n label='Font Family'\n >\n {fontFamilyOptions.map(font => (\n <MenuItem key={font} value={font}>\n {font.split(',')[0]}\n </MenuItem>\n ))}\n </Select>\n </Grid>\n\n <Grid item xs={6}>\n <Select\n value={tableStyles.tHead?.textAlign || 'left'}\n onChange={(e) => updateHeaderStyle('textAlign', e.target.value)}\n fullWidth\n size='small'\n label='Text Align'\n >\n {textAlignOptions.map(align => (\n <MenuItem key={align} value={align}>\n {formatText(align)}\n </MenuItem>\n ))}\n </Select>\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n label='Cell Padding'\n type='number'\n value={tableStyles.thCells?.padding ?? 8}\n onChange={(e) => updateHeaderCellStyle('padding', e.target.value === '' ? 8 : parseInt(e.target.value))}\n size='small'\n fullWidth\n />\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n label='Header Height (px)'\n type='number'\n value={tableStyles.tHead?.rowHeight ?? ''}\n onChange={(e) => updateHeaderStyle('rowHeight', e.target.value === '' ? '' : Math.max(1, parseInt(e.target.value)))}\n size='small'\n fullWidth\n />\n </Grid>\n\n <Grid item xs={12}>\n <FormControlLabel\n control={\n <Android12Switch\n checked={!!tableStyles.tBody?.zebraStriping}\n onChange={(e) => updateBodyStyle('zebraStriping', e.target.checked)}\n />\n }\n label=\"Zebra Striping\"\n />\n </Grid>\n\n {tableStyles.tBody?.zebraStriping && (\n <Grid item xs={12}>\n <Typography type='s5' weight='medium' color='theme.secondary.1000' variant=\"caption\">Alternating Row Color</Typography>\n <ColorPickerInput\n value={tableStyles.tBody?.alternateRowColor || '#f9f9f9'}\n onChange={(color) => updateBodyStyle('alternateRowColor', color)}\n fullWidth\n />\n </Grid>\n )}\n </Grid>\n </AccordionDetails>\n </Accordion>\n\n <Accordion\n expanded={expanded === 'tableBody'}\n onChange={handleAccordionChange('tableBody')}\n disableGutters\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography type='s3' color='theme.secondary.1000'>Table Body Styles</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <ColorPickerInput\n value={tableStyles.tBody?.backgroundColor ?? 'rgba(255, 255, 255, 0.75)'}\n onChange={(color) => updateBodyStyle('backgroundColor', color)}\n fullWidth\n label='Background Color'\n />\n </Grid>\n\n <Grid item xs={12}>\n <ColorPickerInput\n value={tableStyles.tBody?.color || '#333333'}\n onChange={(color) => updateBodyStyle('color', color)}\n fullWidth\n label='Text Color'\n />\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n label='Font Size'\n type='number'\n value={tableStyles.tBody?.fontSize ?? 14}\n onChange={(e) => updateBodyStyle('fontSize', e.target.value === '' ? 14 : parseInt(e.target.value))}\n size='small'\n fullWidth\n />\n </Grid>\n\n <Grid item xs={6}>\n <Select\n value={tableStyles.tBody?.fontWeight || 'normal'}\n onChange={(e) => updateBodyStyle('fontWeight', e.target.value)}\n fullWidth\n size='small'\n label='Font Weight'\n >\n {fontWeightOptions.map(weight => (\n <MenuItem key={weight} value={weight}>\n {formatText(weight)}\n </MenuItem>\n ))}\n </Select>\n </Grid>\n\n <Grid item xs={12}>\n <Select\n value={tableStyles.tBody?.fontFamily || 'Arial, sans-serif'}\n onChange={(e) => updateBodyStyle('fontFamily', e.target.value)}\n fullWidth\n size='small'\n label='Font Family'\n >\n {fontFamilyOptions.map(font => (\n <MenuItem key={font} value={font}>\n {font.split(',')[0]}\n </MenuItem>\n ))}\n </Select>\n </Grid>\n\n <Grid item xs={6}>\n <Select\n value={tableStyles.tBody?.textAlign || 'left'}\n onChange={(e) => updateBodyStyle('textAlign', e.target.value)}\n fullWidth\n size='small'\n label='Text Align'\n >\n {textAlignOptions.map(align => (\n <MenuItem key={align} value={align}>\n {formatText(align)}\n </MenuItem>\n ))}\n </Select>\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n label='Cell Padding'\n type='number'\n value={tableStyles.tbCells?.padding ?? 8}\n onChange={(e) => updateBodyCellStyle('padding', e.target.value === '' ? 8 : parseInt(e.target.value))}\n size='small'\n fullWidth\n />\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n label='Row Height (px)'\n type='number'\n value={tableStyles.tBody?.rowHeight ?? ''}\n onChange={(e) => updateBodyStyle('rowHeight', e.target.value === '' ? '' : Math.max(1, parseInt(e.target.value)))}\n size='small'\n fullWidth\n />\n </Grid>\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Box>\n )}\n\n {tabValue === 2 && (\n <Box>\n <Box sx={{ mb: 3 }}>\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 2 }}>\n Cell Selection & Merging\n </Typography>\n\n <Alert severity=\"info\" sx={{ mb: 2 }}>\n Click on cells in the table below to select them for merging. Selected cells will be highlighted. You can merge cells within the header or body, but not across both.\n <br/><strong>Tip:</strong> You can select cells across multiple rows to create vertical merges (rowspan)!\n </Alert>\n\n <Box sx={{ display: 'flex', gap: 1, mb: 2, flexWrap: 'wrap' }}>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={openMergeDialog}\n startIcon={<MergeIcon />}\n disabled={selectedCells.length < 2}\n color=\"primary\"\n >\n Merge Selected ({selectedCells.length})\n </Button>\n\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setSelectedCells([])}\n disabled={selectedCells.length === 0}\n className='black-outlined-btn'\n >\n Clear Selection\n </Button>\n </Box>\n\n <Box sx={{\n border: 1,\n borderColor: 'divider',\n borderRadius: 1,\n overflow: 'auto',\n maxHeight: 400\n }}>\n <Table size=\"small\" sx={{ minWidth: 300 }}>\n <TableHead>\n {(tableData.headerRows && tableData.headerRows.length > 0\n ? tableData.headerRows\n : [{ id: 'default', cells: tableData.columns.map(c => ({ id: c.id, value: c.header })) }]\n ).map((hRow, rowIndex) => (\n <TableRow key={hRow.id}>\n {hRow.cells.map((cell, colIndex) => {\n const mergeInfo = getCellMergeInfo('thead', rowIndex, colIndex);\n const isSelected = isCellSelected('thead', rowIndex, colIndex);\n\n if (mergeInfo?.isCovered) {\n return null;\n }\n\n const cellContent = mergeInfo ? mergeInfo.merge.value : cell.value;\n const rowSpan = mergeInfo ? mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1 : 1;\n const colSpan = mergeInfo ? mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1 : 1;\n\n return (\n <TableCell\n key={cell.id}\n rowSpan={rowSpan}\n colSpan={colSpan}\n onClick={() => !mergeInfo && toggleCellSelection('thead', rowIndex, colIndex)}\n sx={(theme) => ({\n fontWeight: 'bold',\n bgcolor: mergeInfo ? 'blue.50' :\n isSelected ? 'primary.100' : 'grey.100',\n position: 'sticky',\n top: 0,\n zIndex: 1,\n cursor: mergeInfo ? 'default' : 'pointer',\n border: isSelected ? 2 : 1,\n borderColor: isSelected ? theme.palette.theme.primary[800] : 'divider',\n '&:hover': mergeInfo ? {} : {\n bgcolor: isSelected ? 'primary.200' : 'grey.50'\n }\n })}\n >\n {cellContent}\n {mergeInfo && (\n <Chip\n label={`${rowSpan}×${colSpan}`}\n size=\"small\"\n color=\"primary\"\n variant=\"outlined\"\n sx={(theme) => ({\n position: 'absolute',\n top: 2,\n right: 2,\n fontSize: '0.6rem',\n height: 16,\n color: theme.palette.theme.primary[800],\n borderColor: theme.palette.theme.primary[800]\n })}\n />\n )}\n {isSelected && (\n <Checkbox\n checked={true}\n size=\"small\"\n sx={{\n position: 'absolute',\n top: 2,\n left: 2,\n padding: 0\n }}\n />\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n <TableBody>\n {tableData.rows.map((row, rowIndex) => (\n <TableRow key={rowIndex}>\n {tableData.columns.map((column, colIndex) => {\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\n const isSelected = isCellSelected('tbody', rowIndex, colIndex);\n\n if (mergeInfo?.isCovered) {\n return null;\n }\n\n // Get customText for the cell\n const customTextValue = customText[rowIndex]?.[column.id] || '';\n // Combine customText with cell value or merge value\n const cellContent = mergeInfo\n ? mergeInfo.merge.value // Already includes customText from mergeCells\n : customTextValue\n ? `${customTextValue} ${row[column.id] || ''}`.trim()\n : row[column.id] || '';\n\n const rowSpan = mergeInfo ? mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1 : 1;\n const colSpan = mergeInfo ? mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1 : 1;\n\n return (\n <TableCell\n key={column.id}\n rowSpan={rowSpan}\n colSpan={colSpan}\n onClick={() => !mergeInfo && toggleCellSelection('tbody', rowIndex, colIndex)}\n sx={(theme) => ({\n cursor: mergeInfo ? 'default' : 'pointer',\n bgcolor: mergeInfo ? 'blue.50' :\n isSelected ? 'primary.100' :\n 'transparent',\n border: isSelected ? 2 : 1,\n borderColor: isSelected ? theme.palette.theme?.primary[800] : 'divider',\n '&:hover': mergeInfo ? {} : {\n bgcolor: isSelected ? 'primary.200' : 'grey.50'\n },\n position: 'relative'\n })}\n >\n {cellContent}\n {mergeInfo && (\n <Chip\n label={`${rowSpan}×${colSpan}`}\n size=\"small\"\n color=\"primary\"\n variant=\"outlined\"\n sx={(theme) => ({\n position: 'absolute',\n top: 2,\n right: 2,\n fontSize: '0.6rem',\n height: 16,\n color: theme.palette.theme?.primary[800],\n borderColor: theme.palette.theme?.primary[800]\n })}\n />\n )}\n {isSelected && (\n <Checkbox\n checked={true}\n size=\"small\"\n sx={{\n position: 'absolute',\n top: 2,\n left: 2,\n padding: 0\n }}\n />\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Box>\n </Box>\n\n {mergedCells.length > 0 && (\n <Box sx={{ mt: 3 }}>\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 2 }}>\n Merged Cells ({mergedCells.length})\n </Typography>\n\n {mergedCells.map((merge, index) => (\n <Box\n key={index}\n sx={{\n p: 2,\n mb: 1,\n border: 1,\n borderColor: 'divider',\n borderRadius: 1,\n bgcolor: 'blue.25'\n }}\n >\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', mb: 1 }}>\n <Box>\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.900\">\n Merge {index + 1}: {merge.rowEnd - merge.rowStart + 1}×{merge.colEnd - merge.colStart + 1} cells ({merge.section})\n </Typography>\n <Typography type=\"s5\" color=\"theme.secondary.700\">\n Rows {merge.rowStart + 1}-{merge.rowEnd + 1}, Columns {merge.colStart + 1}-{merge.colEnd + 1}\n </Typography>\n </Box>\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => splitMergedCell(index)}\n startIcon={<SplitIcon />}\n className='black-outlined-btn'\n >\n Split\n </Button>\n </Box>\n\n <TextField\n label=\"Merged Cell Value\"\n value={merge.value}\n onChange={(e) => {\n setTableData(prev => ({\n ...prev,\n mergedCells: prev.mergedCells?.map((m, i) =>\n i === index ? { ...m, value: e.target.value } : m\n ) || []\n }));\n }}\n size=\"small\"\n fullWidth\n multiline\n rows={2}\n />\n </Box>\n ))}\n </Box>\n )}\n </Box>\n )}\n\n <Dialog\n open={mergeDialogOpen}\n onClose={() => setMergeDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>\n <Typography type=\"s2\" weight=\"medium\">\n Merge Selected Cells\n </Typography>\n </DialogTitle>\n <DialogContent>\n <Typography type=\"s4\" color=\"theme.secondary.700\" sx={{ mb: 2 }}>\n You are about to merge {selectedCells.length} selected cells in {selectedCells[0]?.section}.\n Enter the value for the merged cell:\n </Typography>\n\n <TextField\n label=\"Merged Cell Value\"\n value={mergeValue}\n onChange={(e) => setMergeValue(e.target.value)}\n fullWidth\n multiline\n rows={3}\n sx={{ mt: 1 }}\n />\n\n <Alert severity=\"info\" sx={{ mt: 2 }}>\n The merged cell will span from row {Math.min(...selectedCells.map(c => c.row)) + 1} to {Math.max(...selectedCells.map(c => c.row)) + 1}\n and column {Math.min(...selectedCells.map(c => c.col)) + 1} to {Math.max(...selectedCells.map(c => c.col)) + 1} in {selectedCells[0]?.section}.\n </Alert>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setMergeDialogOpen(false)}>\n Cancel\n </Button>\n <Button\n onClick={mergeCells}\n variant=\"contained\"\n color=\"primary\"\n >\n Merge Cells\n </Button>\n </DialogActions>\n </Dialog>\n\n <Dialog\n open={cellStyleDialogOpen}\n onClose={() => {\n setCellStyleDialogOpen(false);\n setEditingCellStyle(null);\n }}\n maxWidth=\"xs\"\n fullWidth\n >\n <DialogTitle>\n <Typography type=\"s2\" weight=\"medium\">\n Edit Cell Style\n </Typography>\n </DialogTitle>\n <DialogContent>\n <Grid container spacing={2} sx={{ mt: 1 }}>\n <Grid item xs={12}>\n <TextField\n label=\"Cell Text (Context)\"\n value={editingCellText}\n disabled\n fullWidth\n size=\"small\"\n sx={{ bgcolor: 'grey.50' }}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n label=\"Width (e.g. 100px, 20%)\"\n value={tempCellStyle.width as string || ''}\n onChange={(e) => setTempCellStyle(prev => ({ ...prev, width: e.target.value }))}\n fullWidth\n size=\"small\"\n />\n </Grid>\n <Grid item xs={12}>\n <ColorPickerInput\n value={tempCellStyle.backgroundColor as string || inheritedBg}\n onChange={(color) => setTempCellStyle(prev => ({ ...prev, backgroundColor: color }))}\n fullWidth\n label='Background Color'\n />\n </Grid>\n <Grid item xs={12}>\n <ColorPickerInput\n value={tempCellStyle.color as string || inheritedColor}\n onChange={(color) => setTempCellStyle(prev => ({ ...prev, color }))}\n fullWidth\n label='Text Color'\n />\n </Grid>\n <Grid item xs={12}>\n <Select\n label='Text Direction'\n value={tempCellStyle.direction as string || ''}\n onChange={(e) => setTempCellStyle(prev => ({ ...prev, direction: e.target.value as any }))}\n fullWidth\n size=\"small\"\n displayEmpty\n >\n <MenuItem value=\"\">Default ({inheritedDirection.toUpperCase()})</MenuItem>\n <MenuItem value=\"ltr\">LTR (Left to Right)</MenuItem>\n <MenuItem value=\"rtl\">RTL (Right to Left)</MenuItem>\n </Select>\n </Grid>\n <Grid item xs={12}>\n <Select\n label='Text Align'\n value={tempCellStyle.textAlign as string || ''}\n onChange={(e) => setTempCellStyle(prev => ({ ...prev, textAlign: e.target.value as any }))}\n fullWidth\n size=\"small\"\n displayEmpty\n >\n <MenuItem value=\"\">Default ({inheritedAlign})</MenuItem>\n <MenuItem value=\"left\">Left</MenuItem>\n <MenuItem value=\"center\">Center</MenuItem>\n <MenuItem value=\"right\">Right</MenuItem>\n </Select>\n </Grid>\n <Grid item xs={12}>\n <Select\n label='Font Weight'\n value={tempCellStyle.fontWeight as string || ''}\n onChange={(e) => setTempCellStyle(prev => ({ ...prev, fontWeight: e.target.value as any }))}\n fullWidth\n size=\"small\"\n displayEmpty\n >\n <MenuItem value=\"\">Default ({inheritedFontWeight})</MenuItem>\n {fontWeightOptions.map(weight => (\n <MenuItem key={weight} value={weight}>{formatText(weight)}</MenuItem>\n ))}\n </Select>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => {\n setCellStyleDialogOpen(false);\n setEditingCellStyle(null);\n }}>\n Cancel\n </Button>\n <Button\n onClick={saveCellStyle}\n variant=\"contained\"\n color=\"primary\"\n >\n Apply Style\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nexport default TableControls;","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport { useDraggable } from '@dnd-kit/core';\nimport {\n Box,\n Divider,\n ListItem,\n ListItemIcon,\n ListItemText,\n} from '@mui/material';\nimport {\n Text as TextIcon,\n Image as ImageIcon,\n Table as TableIcon,\n Blocks as SignatureIcon,\n QrCode as QrCodeIcon,\n Barcode as BarcodeIcon,\n LayoutGrid,\n} from 'lucide-react';\nimport { styled } from '@mui/material';\n\nconst StyledListItem = styled(ListItem)(({ theme }) => ({\n padding: theme.spacing(1.5),\n cursor: 'grab',\n borderRadius: theme.shape.borderRadius,\n '&:hover': {\n backgroundColor: theme.palette.grey[100],\n },\n '&.dragging': {\n opacity: 0.5,\n },\n}));\n\nconst SidebarItem = ({ id, icon, label }: { id: string; icon?: React.ReactElement; label: string }) => {\n // Extract the element type from the sidebar item id\n const elementType = typeof id === 'string' ? id.replace('sidebar-', '') : id;\n\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id,\n data: {\n type: elementType,\n label,\n },\n });\n\n return (\n <StyledListItem\n ref={setNodeRef}\n {...listeners}\n {...attributes}\n className={isDragging ? 'dragging' : ''}\n sx={{ border: '1px solid', borderColor: 'grey.200', p: 0.75 }}\n >\n <ListItemIcon sx={{ minWidth: 32 }}>{icon}</ListItemIcon>\n <ListItemText \n primary={label} \n primaryTypographyProps={{ \n variant: 'body2', \n sx: { whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' } \n }} \n />\n </StyledListItem>\n );\n};\n\ninterface EditorSidebarProps {\n onHtmlUpload?: (html: string) => void;\n}\n\nconst EditorSidebar = ({ onHtmlUpload }: EditorSidebarProps) => {\n const sections = [\n {\n id: 'text',\n icon: <TextIcon size={18} />,\n label: 'Text',\n },\n {\n id: 'image',\n icon: <ImageIcon size={18} />,\n label: 'Image',\n },\n {\n id: 'buttons',\n icon: (\n <Box\n sx={{\n width: 16,\n height: 16,\n bgcolor: 'grey.400',\n borderRadius: 1,\n color: 'white',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '8px',\n }}\n >\n BTN\n </Box>\n ),\n label: 'Buttons',\n },\n {\n id: 'divider',\n icon: <Divider sx={{ width: 18 }} />,\n label: 'Divider',\n },\n {\n id: 'table',\n icon: <TableIcon size={18} />,\n label: 'Table',\n },\n {\n id: 'signature',\n icon: <SignatureIcon size={18} />,\n label: 'Signature',\n },\n {\n id: 'qr-code',\n icon: <QrCodeIcon size={18} />,\n label: 'QR Code',\n },\n {\n id: 'bar-code',\n icon: <BarcodeIcon size={18} />,\n label: 'Bar Code',\n },\n ];\n\n return (\n <Box\n className=\"te-sidebar\"\n sx={{\n bgcolor: 'background.paper',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n fontFamily: 'Inter, system-ui, Avenir, Helvetica, Arial, sans-serif',\n }}\n >\n <Box sx={{ flexGrow: 1, p: 1 }}>\n <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 1, mt: 1 }}>\n {sections.map((section) => (\n <SidebarItem key={section.id} id={`sidebar-${section.id}`} icon={section.icon} label={section.label} />\n ))}\n </Box>\n </Box>\n </Box>\n );\n};\n\nexport { EditorSidebar };\nexport default EditorSidebar;","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\nimport { Ic } from './icons';\n\nimport { PBTpl } from './templatebuilder';\nimport { useDraggable } from '@dnd-kit/core';\nimport TextControls from '../components/controllers/TextControls';\nimport ButtonControls from '../components/controllers/ButtonControls';\nimport ImageControls from '../components/controllers/ImageControls';\nimport DividerControls from '../components/controllers/DividerControls';\nimport SignatureControls from '../components/controllers/SignatureControls';\nimport CodeControls from '../components/controllers/CodeControls';\nimport TableControls from '../components/controllers/TableControls';\nimport { extractStyles, generateInlineStyles, generateContentHTML } from '../utils/common';\nimport { getV1Drive, postV1Drive } from '@/api-client/api.drive/api';\nimport { getToken, uploadFiles } from '@erpsquad/common/utils/common';\nimport { useDropzone } from 'react-dropzone';\nimport { getApiConfigSafe } from '@erpsquad/common/utils';\nimport EditorSidebar from '../components/EditorSidebar';\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — control panel (the left designer rail)\n Classic ERP-designer layout: collapsible sections of plain\n controls. No HTML required — every control writes to data,\n style, frame or flags state. Exposes PBControls.\n ───────────────────────────────────────────────────────────── */\n\nconst { useState } = React;\n\n\nconst ACCENTS = ['#1B2C6E', '#1A8A56', '#1F4FA8', '#5535B8', '#156B66', '#A8232A', '#8a540b', '#14171b'];\n\n// shown inside a structure section once the doc has been hand-edited on the page\nfunction CustomNote({ onRevert, what }) {\n return (\n <div className=\"cx-customnote\">\n <p>{what}. To rebuild it with these controls, revert that layout.</p>\n {onRevert && <button className=\"cx-lockbanner-btn\" onClick={onRevert}><Ic k=\"undo\" />Revert to visual builder</button>}\n </div>\n );\n}\n\n// ── primitives ───────────────────────────────────────────────\nfunction Section({ id, title, icon, open, onToggle, children, hint }) {\n return (\n <div className={`cx-sec ${open ? 'is-open' : ''}`}>\n <button className=\"cx-sec-h\" onClick={onToggle}>\n <span className=\"cx-sec-ic\"><Ic k={icon} /></span>\n <span className=\"cx-sec-t\">{title}</span>\n <Ic k=\"chevD\" className=\"cx-sec-chev\" />\n </button>\n {open && <div className=\"cx-sec-body\">{hint && <div className=\"cx-hint\">{hint}</div>}{children}</div>}\n </div>\n );\n}\n\nfunction Row({ label, children, sub }) {\n return (\n <div className=\"cx-row\">\n <div className=\"cx-row-l\"><span className=\"cx-row-lbl\">{label}</span>{sub && <span className=\"cx-row-sub\">{sub}</span>}</div>\n <div className=\"cx-row-c\">{children}</div>\n </div>\n );\n}\n\nfunction Toggle({ on, onChange }) {\n return <button className={`cx-switch ${on ? 'is-on' : ''}`} role=\"switch\" aria-checked={on} onClick={() => onChange(!on)}><span className=\"cx-switch-dot\" /></button>;\n}\n\nfunction Seg({ value, options, onChange, full }) {\n return (\n <div className={`cx-seg ${full ? 'is-full' : ''}`}>\n {options.map(o => <button key={o.v} className={value === o.v ? 'is-active' : ''} onClick={() => onChange(o.v)} title={o.label}>{o.icon ? <Ic k={o.icon} /> : o.label}</button>)}\n </div>\n );\n}\n\nfunction Select({ value, options, onChange }) {\n return (\n <select className=\"cx-select\" value={value} onChange={e => onChange(e.target.value)}>\n {options.map(o => <option key={o.v} value={o.v}>{o.label}</option>)}\n </select>\n );\n}\n\nfunction Range({ value, min, max, step, onChange, suffix }) {\n return (\n <div className=\"cx-range\">\n <input type=\"range\" min={min} max={max} step={step || 1} value={value} onChange={e => onChange(Number(e.target.value))} />\n <span className=\"cx-range-v\">{value}{suffix || ''}</span>\n </div>\n );\n}\n\nfunction Text({ value, onChange, placeholder, area }) {\n return area\n ? <textarea className=\"cx-input cx-area\" value={value} placeholder={placeholder} onChange={e => onChange(e.target.value)} />\n : <input className=\"cx-input\" value={value} placeholder={placeholder} onChange={e => onChange(e.target.value)} />;\n}\n\nfunction Swatches({ value, onChange }) {\n return (\n <div className=\"cx-swatches\">\n {ACCENTS.map(c => <button key={c} className={`cx-swatch ${value === c ? 'is-sel' : ''}`} style={{ background: c }} onClick={() => onChange(c)} aria-label={c} />)}\n </div>\n );\n}\n\n// ── TABLE COLUMNS editor (master template structure) ─────────\nfunction ColumnsEditor({ cols, setCols, itemFields }) {\n const opts = [...itemFields.map(f => ({ v: f.id, label: f.label })), { v: '__custom', label: 'Custom field…' }];\n const patch = (i, p) => setCols(cs => cs.map((c, j) => j === i ? { ...c, ...p } : c));\n const move = (i, d) => setCols(cs => { const a = cs.slice(); const j = i + d; if (j < 0 || j >= a.length) return cs;[a[i], a[j]] = [a[j], a[i]]; return a; });\n const remove = (i) => setCols(cs => cs.filter((_, j) => j !== i));\n const add = () => setCols(cs => [...cs, { id: PBTpl.newId(), field: 'name', label: 'New column', align: 'l' }]);\n return (\n <div className=\"cx-cols\">\n {cols.map((col, i) => (\n <div className=\"cx-col\" key={col.id}>\n <div className=\"cx-col-top\">\n <span className=\"cx-grip\"><Ic k=\"grip\" /></span>\n <input className=\"cx-input cx-col-lbl\" value={col.label} onChange={e => patch(i, { label: e.target.value })} placeholder=\"Header label\" />\n <div className=\"cx-item-move\">\n <button onClick={() => move(i, -1)} disabled={i === 0} title=\"Move left\"><Ic k=\"arrowUp\" /></button>\n <button onClick={() => move(i, 1)} disabled={i === cols.length - 1} title=\"Move right\"><Ic k=\"arrowDn\" /></button>\n <button className=\"cx-item-del\" onClick={() => remove(i)} disabled={cols.length <= 1} title=\"Remove column\"><Ic k=\"trash\" /></button>\n </div>\n </div>\n <div className=\"cx-col-bind\">\n <Select value={col.field} options={opts} onChange={v => patch(i, { field: v })} />\n <Seg value={col.align} options={[{ v: 'l', label: 'L' }, { v: 'r', label: 'R' }]} onChange={v => patch(i, { align: v })} />\n </div>\n {col.field === '__custom' && (\n <div className=\"cx-col-bind\" style={{ marginTop: 6 }}>\n <input className=\"cx-input\" value={col.custom || ''} onChange={e => patch(i, { custom: e.target.value })} placeholder=\"item field key, e.g. weight\" />\n <span className=\"cx-ph-tag\">{`{{this.${col.custom || 'field'}}}`}</span>\n </div>\n )}\n </div>\n ))}\n <button className=\"cx-add\" onClick={add}><Ic k=\"plus\" />Add column</button>\n </div>\n );\n}\n\n// ── DRAGGABLE ELEMENTS ───────────────────────────────────────\nfunction DraggableElement({ id, label, icon, imageUrl }: { id: string; label: string; icon?: string; imageUrl?: string }) {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id: imageUrl ? `draggable-image-${id}` : `draggable-${id}`,\n data: { type: id, imageUrl, label }\n });\n\n return (\n <button\n ref={setNodeRef}\n {...listeners}\n {...attributes}\n style={{\n opacity: isDragging ? 0.5 : 1,\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n padding: '8px 12px',\n backgroundColor: '#ffffff',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n color: '#374151',\n cursor: isDragging ? 'grabbing' : 'grab',\n fontSize: '13px',\n fontWeight: 500,\n boxShadow: '0 1px 2px rgba(0,0,0,0.02)',\n transition: 'all 0.2s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f9fafb';\n e.currentTarget.style.borderColor = '#d1d5db';\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = '0 4px 6px -1px rgba(0,0,0,0.05), 0 2px 4px -1px rgba(0,0,0,0.03)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#ffffff';\n e.currentTarget.style.borderColor = '#e5e7eb';\n e.currentTarget.style.transform = 'none';\n e.currentTarget.style.boxShadow = '0 1px 2px rgba(0,0,0,0.02)';\n }}\n >\n {imageUrl ? (\n <img src={imageUrl} alt={label} style={{ height: 20, width: 20, objectFit: 'cover', marginRight: 8, borderRadius: 2 }} />\n ) : (\n <span style={{ color: '#6b7280', display: 'flex', alignItems: 'center' }}><Ic k={icon} /></span>\n )}\n <span style={{ marginLeft: imageUrl ? 0 : 8, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{label}</span>\n </button>\n );\n}\n\n// ── DOCUMENT FIELDS editor (dynamic meta placeholders) ───────\nfunction FieldsEditor({ fields, setFields, metaCatalog }) {\n const opts = [...metaCatalog.map(c => ({ v: c.field, label: c.label })), { v: '__custom', label: 'Custom field…' }];\n const patch = (i, p) => setFields(fs => fs.map((f, j) => j === i ? { ...f, ...p } : f));\n const move = (i, d) => setFields(fs => { const a = fs.slice(); const j = i + d; if (j < 0 || j >= a.length) return fs;[a[i], a[j]] = [a[j], a[i]]; return a; });\n const remove = (i) => setFields(fs => fs.filter((_, j) => j !== i));\n const add = () => setFields(fs => { const c = metaCatalog[0] || { field: 'new', label: 'New', expr: '{{new}}' }; return [...fs, { id: PBTpl.newId(), field: c.field, label: c.label, expr: c.expr }]; });\n const bind = (i, field) => {\n if (field === '__custom') { patch(i, { field: '__custom', expr: fields[i].expr && fields[i].expr.indexOf('{{') === 0 ? fields[i].expr : '{{custom.field}}' }); return; }\n const c = metaCatalog.find(x => x.field === field); if (c) patch(i, { field: c.field, expr: c.expr, label: c.label });\n };\n return (\n <div className=\"cx-cols\">\n {fields.map((f, i) => (\n <div className=\"cx-col\" key={f.id}>\n <div className=\"cx-col-top\">\n <span className=\"cx-grip\"><Ic k=\"grip\" /></span>\n <input className=\"cx-input cx-col-lbl\" value={f.label} onChange={e => patch(i, { label: e.target.value })} placeholder=\"Field label\" />\n <div className=\"cx-item-move\">\n <button onClick={() => move(i, -1)} disabled={i === 0} title=\"Move up\"><Ic k=\"arrowUp\" /></button>\n <button onClick={() => move(i, 1)} disabled={i === fields.length - 1} title=\"Move down\"><Ic k=\"arrowDn\" /></button>\n <button className=\"cx-item-del\" onClick={() => remove(i)} title=\"Remove field\"><Ic k=\"trash\" /></button>\n </div>\n </div>\n <div className=\"cx-col-bind\">\n <Select value={f.field} options={opts} onChange={v => bind(i, v)} />\n {f.field === '__custom'\n ? <input className=\"cx-input\" value={f.expr} onChange={e => patch(i, { expr: e.target.value })} placeholder=\"{{your.placeholder}}\" />\n : <span className=\"cx-ph-tag\">{f.expr}</span>}\n </div>\n </div>\n ))}\n <button className=\"cx-add\" onClick={add}><Ic k=\"plus\" />Add field</button>\n </div>\n );\n}\n\n// ── line-items editor (sample values) ────────────────────────\nfunction ItemsEditor({ data, ops }) {\n const items = data.items || [];\n const priced = items.length && 'price' in items[0];\n return (\n <div className=\"cx-items\">\n {items.map((it, i) => (\n <div className=\"cx-item\" key={i}>\n <div className=\"cx-item-top\">\n <span className=\"cx-item-n\">{i + 1}</span>\n <input className=\"cx-input cx-item-name\" value={it.name} onChange={e => ops.field(i, 'name', e.target.value)} placeholder=\"Description\" />\n <div className=\"cx-item-move\">\n <button onClick={() => ops.move(i, -1)} disabled={i === 0} title=\"Move up\"><Ic k=\"arrowUp\" /></button>\n <button onClick={() => ops.move(i, 1)} disabled={i === items.length - 1} title=\"Move down\"><Ic k=\"arrowDn\" /></button>\n <button className=\"cx-item-del\" onClick={() => ops.remove(i)} title=\"Remove line\"><Ic k=\"trash\" /></button>\n </div>\n </div>\n {priced ? (\n <div className=\"cx-item-grid\">\n <label><span>Qty</span><input className=\"cx-input\" type=\"number\" value={it.qty} onChange={e => ops.field(i, 'qty', e.target.value, 'num')} /></label>\n <label><span>Unit</span><input className=\"cx-input\" value={it.unit} onChange={e => ops.field(i, 'unit', e.target.value)} /></label>\n <label><span>Price</span><input className=\"cx-input\" type=\"number\" value={it.price} onChange={e => ops.field(i, 'price', e.target.value, 'num')} /></label>\n <label><span>Disc %</span><input className=\"cx-input\" type=\"number\" value={it.disc} onChange={e => ops.field(i, 'disc', e.target.value, 'num')} /></label>\n </div>\n ) : (\n <div className=\"cx-item-grid cx-item-grid--2\">\n <label><span>Qty</span><input className=\"cx-input\" type=\"number\" value={it.qty} onChange={e => ops.field(i, 'qty', e.target.value, 'num')} /></label>\n <label><span>Unit</span><input className=\"cx-input\" value={it.unit} onChange={e => ops.field(i, 'unit', e.target.value)} /></label>\n </div>\n )}\n </div>\n ))}\n <button className=\"cx-add\" onClick={ops.add}><Ic k=\"plus\" />Add line item</button>\n </div>\n );\n}\n\n// ── the panel ────────────────────────────────────────────────\nexport function ControlsPanel(props) {\n const { doc, data, style, setStyle, frame, setFrame, flags, setFlag, paper, setPaper, orient, setOrient, itemOps, cols, setCols, metaFields, setMetaFields, isCustom, onRevertCustom, stnKind, stnName, onManageStationery, dynamicGroups, arrayKey, activeSectionId, sections, setSections } = props;\n const stnOwned = !!stnKind; // a Stationery preset / pre-printed / blank owns the masthead + footer\n\n const activeSection = sections?.find(s => s.id === activeSectionId);\n const isTableActive = activeSection?.type === 'table';\n\n const [open, setOpen] = useState({ elements: true, content: false, columns: isTableActive, items: false, header: false, footer: false, style: false, page: false, watermark: false });\n const toggle = (k) => setOpen(o => ({ ...o, [k]: !o[k] }));\n\n const [uploadingWatermark, setUploadingWatermark] = useState(false);\n const [watermarkError, setWatermarkError] = useState('');\n\n const watermark = style?.watermark || { show: false, opacity: 15, size: 50, rotation: 0, image: '' };\n const updateWatermark = (updates) => {\n if (setStyle) {\n setStyle(s => ({\n ...s,\n watermark: {\n ...(s?.watermark || watermark),\n ...updates\n }\n }));\n }\n };\n\n const handleWatermarkFile = async (file) => {\n if (!file) return;\n if (file.size > 2 * 1024 * 1024) {\n setWatermarkError('Please select an image under 2MB.');\n return;\n }\n setWatermarkError('');\n setUploadingWatermark(true);\n\n const reader = new FileReader();\n reader.onload = () => {\n const dataUrl = reader.result;\n updateWatermark({ image: dataUrl, show: true });\n };\n reader.readAsDataURL(file);\n\n try {\n const uFiles = await uploadFiles([file], 'document');\n if (uFiles && uFiles[0]) {\n const fullUrl = `${getApiConfigSafe().s3BucketUrl}${uFiles[0]}`;\n const token = getToken();\n const drivePayload = {\n ...token,\n 'x-timezone': String(token['x-timezone'] || ''),\n title: file?.name?.split('.')[0] || 'watermark',\n path: '/',\n is_private: false,\n is_directory: false,\n file_size: file.size,\n is_child: false,\n file_extension: file?.name?.split('.').pop() || 'png',\n type: 'image',\n mime_type: file.type,\n url: fullUrl,\n };\n await postV1Drive(drivePayload);\n updateWatermark({ image: fullUrl, show: true });\n }\n } catch (err) {\n console.warn('S3 upload for watermark failed, keeping data URL', err);\n } finally {\n setUploadingWatermark(false);\n }\n };\n\n // Auto-open columns when table clicked\n useEffect(() => {\n if (isTableActive) setOpen(o => ({ ...o, columns: true }));\n }, [isTableActive]);\n\n\n\n const updateActiveTableCols = (newColsOrUpdater) => {\n if (!activeSectionId || !setSections) return;\n setSections(prevSections => prevSections.map(s => {\n if (s.id === activeSectionId && s.type === 'table') {\n const currentCols = s.attributes?.tableData?.columns || [];\n const nextCols = typeof newColsOrUpdater === 'function' ? newColsOrUpdater(currentCols) : newColsOrUpdater;\n\n // Regenerate the visual HTML table for the canvas\n const ths = nextCols.map(c => `<th style=\"border:1px solid #ccc; padding:8px; text-align:${c.align === 'r' ? 'right' : c.align === 'c' ? 'center' : 'left'}\">${c.label}</th>`).join('');\n const tds = nextCols.map(c => {\n let expr = '{{field}}';\n if (c.field === '__custom') {\n expr = `{{this.${c.custom || 'field'}}}`;\n } else {\n const fieldDef = finalItemFields.find(f => f.id === c.field);\n expr = fieldDef ? fieldDef.expr : `{{this.${c.field}}}`;\n }\n return `<td style=\"border:1px solid #ccc; padding:8px; text-align:${c.align === 'r' ? 'right' : c.align === 'c' ? 'center' : 'left'}\">${expr}</td>`;\n }).join('');\n const newContent = `<table style=\"width:100%; border-collapse: collapse;\"><thead><tr>${ths}</tr></thead><tbody><tr>${tds}</tr></tbody></table>`;\n\n return {\n ...s,\n content: newContent,\n attributes: {\n ...(s.attributes || {}),\n tableData: {\n ...(s.attributes?.tableData || {}),\n columns: nextCols\n }\n }\n };\n }\n return s;\n }));\n };\n\n const updateAttrs = (prop) => {\n if (!activeSectionId || !setSections || !activeSection) return;\n setSections(prevSections => prevSections.map(s => {\n if (s.id === activeSectionId) {\n const mergedStyles = { ...(s.attributes?.styles || {}), ...(prop.styles || {}) };\n const mergedAttributes = { ...(s.attributes || {}), ...prop, styles: mergedStyles };\n \n // Sync width and height if updated in styles or directly\n let newWidth = prop.width ?? (typeof prop.styles?.width === 'number' ? prop.styles.width : undefined);\n let newHeight = prop.height ?? (typeof prop.styles?.height === 'number' ? prop.styles.height : undefined);\n let newX = prop.x;\n\n if (mergedAttributes.styles?.fullWidth && s.type === 'image') {\n newWidth = 794;\n newX = 0;\n mergedStyles.width = 794;\n }\n\n if (s.type === 'table') {\n const tHeadH = Number(mergedStyles.tHead?.rowHeight) || 38;\n const tBodyH = Number(mergedStyles.tBody?.rowHeight) || 38;\n const numRows = (mergedAttributes.tableData?.rows && mergedAttributes.tableData.rows.length > 0) ? mergedAttributes.tableData.rows.length : 1;\n const calculatedH = tHeadH + (numRows * tBodyH) + 2;\n newHeight = prop.height !== undefined ? prop.height : Math.max(s.height || 0, calculatedH);\n }\n\n if (newWidth !== undefined) {\n newWidth = Math.round(newWidth);\n mergedStyles.width = newWidth;\n }\n if (newHeight !== undefined) {\n newHeight = Math.round(newHeight);\n mergedStyles.height = newHeight;\n }\n\n // Dynamic fields processing to pass to generateContentHTML\n const itemsGroup = dynamicGroups?.find(g => g.key === arrayKey);\n const dynamicItemFields = itemsGroup ? itemsGroup.fields.map(f => {\n const fieldId = f.tag.replace(`{{${arrayKey}.[].`, '').replace('}}', '');\n return { id: fieldId, label: f.label, expr: `{{this.${fieldId}}}` };\n }) : ((dynamicGroups && dynamicGroups.length > 0) ? [] : PBTpl.ITEM_FIELDS);\n const currentFinalItemFields = itemsGroup ? [{ id: 'index', label: 'Row number', expr: '{{@number}}' }, ...dynamicItemFields] : ((dynamicGroups && dynamicGroups.length > 0) ? [] : PBTpl.ITEM_FIELDS);\n let currentDynamicMetaFields = [];\n if (dynamicGroups && dynamicGroups.length > 0) {\n dynamicGroups.forEach(g => {\n if (g.key !== arrayKey) {\n g.fields.forEach(f => {\n const fieldId = f.tag.replace('{{', '').replace('}}', '');\n currentDynamicMetaFields.push({ field: fieldId, label: f.label, expr: f.tag });\n });\n }\n });\n }\n const currentFinalMetaFields = (dynamicGroups && dynamicGroups.length > 0) ? currentDynamicMetaFields : PBTpl.META_CATALOG;\n \n const updatedContent = generateContentHTML(s.type as any, s.content, mergedAttributes, [...currentFinalItemFields, ...currentFinalMetaFields]);\n return {\n ...s,\n ...(newWidth !== undefined ? { width: newWidth } : {}),\n ...(newHeight !== undefined ? { height: newHeight } : {}),\n ...(newX !== undefined ? { x: newX } : {}),\n content: updatedContent,\n attributes: mergedAttributes\n };\n }\n return s;\n }));\n };\n\n const activeTableCols = activeSection?.attributes?.tableData?.columns || [];\n\n const setH = (patch) => setFrame(f => ({ ...f, header: { ...f.header, ...patch } }));\n const setF = (patch) => setFrame(f => ({ ...f, footer: { ...f.footer, ...patch } }));\n const includes = doc.includes || [];\n const hasItems = Array.isArray(data.items) && data.items.length > 0;\n const H = frame.header, FT = frame.footer;\n\n const repeatOpts = [{ v: 'all', label: 'All pages' }, { v: 'subsequent', label: 'Continuation pages' }, { v: 'first', label: 'First page only' }];\n\n // Image Upload State\n const [uploadedImages, setUploadedImages] = useState<any[]>([]);\n const [uploading, setUploading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const getDriveFiles = async () => {\n try {\n const token = getToken();\n const response = await getV1Drive({\n ...token,\n \"x-timezone\": String(token[\"x-timezone\"] || \"\"),\n skip: 0,\n limit: 20,\n filters: `(is_directory.eq=0)`\n });\n if (response && 'data' in response && response.data && typeof response.data === 'object' && 'drive' in response.data) {\n setUploadedImages((response.data as any).drive || []);\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n useEffect(() => {\n getDriveFiles();\n }, []);\n\n const onDrop = useCallback(async (acceptedFiles) => {\n setUploading(true);\n setError(null);\n try {\n for (const file of acceptedFiles) {\n const uFiles = await uploadFiles([file], \"document\");\n const token = getToken();\n const payload = {\n ...token,\n \"x-timezone\": String(token[\"x-timezone\"] || \"\"),\n \"title\": file?.name.split(\".\")[0],\n \"path\": \"/\",\n \"is_private\": true,\n \"is_directory\": false,\n \"file_size\": file.size,\n \"is_child\": false,\n \"file_extension\": file?.name.split(\".\")[1],\n \"type\": \"image\",\n \"mime_type\": file.type,\n \"url\": `${getApiConfigSafe().s3BucketUrl}${uFiles[0]}`\n }\n await postV1Drive(payload);\n setUploadedImages((prev) => [\n ...prev,\n {\n id: `uploaded-image-${Date.now()}-${Math.random()}`,\n url: `${getApiConfigSafe().s3BucketUrl}${uFiles[0]}`,\n name: file.name,\n },\n ]);\n }\n } catch (err) {\n setError('Failed to upload image. Please try again.');\n } finally {\n setUploading(false);\n }\n }, []);\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: { 'image/*': ['.jpeg', '.png', '.jpg', '.gif'] } as any,\n multiple: true,\n });\n\n // Dynamic fields processing\n const itemsGroup = dynamicGroups?.find(g => g.key === arrayKey);\n const dynamicItemFields = itemsGroup ? itemsGroup.fields.map(f => {\n const fieldId = f.tag.replace(`{{${arrayKey}.[].`, '').replace('}}', '');\n return { id: fieldId, label: f.label, expr: `{{this.${fieldId}}}` };\n }) : ((dynamicGroups && dynamicGroups.length > 0) ? [] : PBTpl.ITEM_FIELDS);\n const finalItemFields = itemsGroup ? [{ id: 'index', label: 'Row number', expr: '{{@number}}' }, ...dynamicItemFields] : ((dynamicGroups && dynamicGroups.length > 0) ? [] : PBTpl.ITEM_FIELDS);\n\n let dynamicMetaFields = [];\n if (dynamicGroups && dynamicGroups.length > 0) {\n dynamicGroups.forEach(g => {\n if (g.key !== arrayKey) {\n g.fields.forEach(f => {\n const fieldId = f.tag.replace('{{', '').replace('}}', '');\n dynamicMetaFields.push({ field: fieldId, label: f.label, expr: f.tag });\n });\n }\n });\n }\n const finalMetaFields = (dynamicGroups && dynamicGroups.length > 0) ? dynamicMetaFields : PBTpl.META_CATALOG;\n\n return (\n <div className=\"cx\">\n {/* ELEMENTS */}\n <Section id=\"elements\" title=\"Elements\" icon=\"plus\" open={open.elements} onToggle={() => toggle('elements')} hint=\"Drag and drop elements into the canvas.\">\n <div style={{ marginTop: '8px' }}>\n <EditorSidebar />\n </div>\n </Section>\n\n {/* ELEMENT FORMATTING */}\n {activeSection && (\n <Section id=\"format\" title=\"Format Element\" icon=\"sliders\" open={true} onToggle={() => { }} hint=\"Formatting options for the selected element.\">\n {(activeSection.type === 'text' || activeSection.type === 'text-block' || activeSection.type.startsWith('heading')) && (\n <TextControls \n attrs={activeSection.attributes || {}} \n updateAttrs={updateAttrs} \n placeholders={finalMetaFields}\n content={activeSection.content}\n updateContent={(newContent) => {\n if (setSections && activeSectionId) {\n setSections(prev => prev.map(s => s.id === activeSectionId ? { ...s, content: newContent } : s));\n }\n }}\n />\n )}\n {activeSection.type === 'buttons' && (\n <ButtonControls\n attrs={{\n ...activeSection.attributes,\n styles: {\n ...(activeSection.attributes?.styles || {}),\n width: activeSection.width ?? activeSection.attributes?.styles?.width ?? 130,\n height: activeSection.height ?? activeSection.attributes?.styles?.height ?? 40,\n }\n }}\n updateAttrs={updateAttrs}\n />\n )}\n {activeSection.type === 'image' && (\n <ImageControls\n attrs={{\n ...activeSection.attributes,\n styles: {\n ...(activeSection.attributes?.styles || {}),\n width: activeSection.width ?? activeSection.attributes?.styles?.width ?? 200,\n height: activeSection.height ?? activeSection.attributes?.styles?.height ?? 150,\n }\n }}\n updateAttrs={updateAttrs}\n />\n )}\n {activeSection.type === 'divider' && (\n <DividerControls attrs={activeSection.attributes || {}} updateAttrs={updateAttrs} />\n )}\n {activeSection.type === 'signature' && (\n <SignatureControls attrs={activeSection.attributes || {}} updateAttrs={updateAttrs} />\n )}\n {(activeSection.type === 'qr-code' || activeSection.type === 'bar-code') && (\n <CodeControls attrs={activeSection.attributes || {}} updateAttrs={updateAttrs} />\n )}\n {activeSection.type === 'table' && (\n <TableControls\n key={activeSection.id}\n tableData={activeSection.attributes?.tableData || { columns: [], rows: [] }}\n setTableData={(td) => {\n const currentData = activeSection.attributes?.tableData || { columns: [], rows: [] };\n const nextData = typeof td === 'function' ? td(currentData) : td;\n updateAttrs({ tableData: { ...nextData, name: '' } });\n }}\n attrs={activeSection.attributes || {}}\n updateAttrs={updateAttrs}\n placeholders={finalItemFields}\n />\n )}\n </Section>\n )}\n\n {/* CONTENT */}\n <Section id=\"content\" title=\"Content\" icon=\"layers\" open={open.content} onToggle={() => toggle('content')}>\n {(!sections || sections.length === 0) ? (\n <div className=\"cx-hint\">Add elements to the canvas to manage their visibility here.</div>\n ) : (\n sections.map((sec, i) => {\n const isHidden = !!sec.hidden;\n const labelName = (sec.type || 'Element').split('-').map((w: string) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');\n return (\n <Row key={sec.id} label={`${labelName} ${i + 1}`}>\n <Toggle on={!isHidden} onChange={v => {\n if (setSections) {\n setSections((prev: any[]) => prev.map(s => s.id === sec.id ? { ...s, hidden: !v } : s));\n }\n }} />\n </Row>\n );\n })\n )}\n </Section>\n\n {/* TABLE COLUMNS (Dynamic Table) */}\n {/* Handled in Format Element via TableControls now */}\n\n {/* LINE ITEMS (sample values for preview) */}\n {hasItems && (\n <Section id=\"items\" title=\"Sample data\" icon=\"table\" open={open.items} onToggle={() => toggle('items')}\n hint=\"Sample line items used only to preview the template — the server swaps in real data at render time. Totals recompute live.\">\n <ItemsEditor data={data} ops={itemOps} />\n </Section>\n )}\n \n {/* WATERMARK */}\n <Section id=\"watermark\" title=\"Watermark\" icon=\"image\" open={open.watermark} onToggle={() => toggle('watermark')}\n hint=\"A faint watermark behind page content.\">\n <Row label=\"Show watermark\">\n <Toggle on={watermark.show} onChange={v => updateWatermark({ show: v })} />\n </Row>\n {watermark.show && (\n <>\n {/* Watermark Image Upload */}\n <div style={{ padding: '8px 12px', background: '#f9fafb', borderRadius: '6px', border: '1px solid #e5e7eb', margin: '8px 0' }}>\n <span className=\"cx-row-lbl\" style={{ display: 'block', marginBottom: '6px', fontWeight: 600 }}>Watermark Image</span>\n {watermark.image ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div style={{\n width: '100%',\n height: '90px',\n borderRadius: '6px',\n border: '1px solid #e2e8f0',\n background: '#ffffff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n position: 'relative'\n }}>\n <img\n src={watermark.image}\n alt=\"Watermark preview\"\n style={{\n maxWidth: '85%',\n maxHeight: '85%',\n objectFit: 'contain',\n opacity: (watermark.opacity ?? 15) / 100,\n transform: `rotate(${watermark.rotation ?? 0}deg)`\n }}\n />\n </div>\n <div style={{ display: 'flex', gap: '8px' }}>\n <label className=\"cx-btn cx-btn--sm\" style={{ flex: 1, justifyContent: 'center', cursor: 'pointer' }}>\n <Ic k=\"image\" />\n {uploadingWatermark ? 'Uploading...' : 'Replace'}\n <input\n type=\"file\"\n accept=\"image/*\"\n style={{ display: 'none' }}\n disabled={uploadingWatermark}\n onChange={e => {\n const f = e.target.files?.[0];\n if (f) handleWatermarkFile(f);\n e.target.value = '';\n }}\n />\n </label>\n <button\n className=\"cx-btn cx-btn--sm cx-btn--ghost\"\n style={{ color: '#ef4444' }}\n onClick={() => updateWatermark({ image: '' })}\n title=\"Remove watermark image\"\n >\n <Ic k=\"trash\" /> Remove\n </button>\n </div>\n </div>\n ) : (\n <div>\n <label\n style={{\n border: '2px dashed #cbd5e1',\n borderRadius: '6px',\n padding: '16px 12px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: uploadingWatermark ? 'not-allowed' : 'pointer',\n backgroundColor: '#ffffff',\n gap: '6px',\n transition: 'border-color 0.2s',\n }}\n onMouseEnter={e => (e.currentTarget.style.borderColor = '#6366f1')}\n onMouseLeave={e => (e.currentTarget.style.borderColor = '#cbd5e1')}\n >\n <Ic k=\"image\" style={{ width: 22, height: 22, color: '#64748b' }} />\n <span style={{ fontSize: '13px', fontWeight: 500, color: '#334155' }}>\n {uploadingWatermark ? 'Uploading watermark...' : 'Upload watermark image'}\n </span>\n <span style={{ fontSize: '11px', color: '#94a3b8' }}>PNG, JPG, SVG up to 2MB</span>\n <input\n type=\"file\"\n accept=\"image/*\"\n style={{ display: 'none' }}\n disabled={uploadingWatermark}\n onChange={e => {\n const f = e.target.files?.[0];\n if (f) handleWatermarkFile(f);\n e.target.value = '';\n }}\n />\n </label>\n </div>\n )}\n {watermarkError && (\n <div style={{ color: '#ef4444', fontSize: '12px', marginTop: '4px' }}>{watermarkError}</div>\n )}\n </div>\n\n <Row label=\"Opacity\">\n <Range value={watermark.opacity ?? 15} min={1} max={100} onChange={v => updateWatermark({ opacity: v })} suffix=\"%\" />\n </Row>\n <Row label=\"Size\">\n <Range value={watermark.size ?? 50} min={10} max={100} onChange={v => updateWatermark({ size: v })} suffix=\"%\" />\n </Row>\n <Row label=\"Rotation\">\n <Range value={watermark.rotation ?? 0} min={-180} max={180} onChange={v => updateWatermark({ rotation: v })} suffix=\"°\" />\n </Row>\n </>\n )}\n </Section>\n\n {/* PAGE */}\n <Section id=\"page\" title=\"Page setup\" icon=\"file\" open={open.page} onToggle={() => toggle('page')}>\n <Row label=\"Paper size\">\n <Seg full value={paper} options={[{ v: 'A4', label: 'A4' }, { v: 'Letter', label: 'Letter' }]} onChange={setPaper} />\n </Row>\n <Row label=\"Orientation\">\n <Seg full value={orient} options={[{ v: 'portrait', label: 'Portrait' }, { v: 'landscape', label: 'Landscape' }]} onChange={setOrient} />\n </Row>\n </Section>\n </div>\n );\n}\n\nexport const PBControls = { ControlsPanel };\n\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\n\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — data model utilities\n The document is now data-driven: inline edits write to a plain\n `data` object (the merge context), never to raw HTML. Totals\n recompute from line items. Exposes PBModel.\n ───────────────────────────────────────────────────────────── */\n\n const clone = (o) => (typeof structuredClone === 'function' ? structuredClone(o) : JSON.parse(JSON.stringify(o)));\n\n // get a value by dotted path: \"company.name\", \"items.3.qty\"\n function getByPath(obj, path) {\n return path.split('.').reduce((a, k) => (a == null ? a : a[k]), obj);\n }\n\n // immutably set a value by dotted path; returns a new object\n function setByPath(obj, path, val) {\n const parts = path.split('.');\n const next = Array.isArray(obj) ? obj.slice() : { ...obj };\n let cur = next;\n for (let i = 0; i < parts.length - 1; i++) {\n const k = parts[i];\n const child = cur[k];\n cur[k] = Array.isArray(child) ? child.slice() : { ...child };\n cur = cur[k];\n }\n cur[parts[parts.length - 1]] = val;\n return next;\n }\n\n // recompute line amounts + totals from items (sales docs only)\n function recomputeTotals(data) {\n if (!Array.isArray(data.items) || !data.items.length || !('price' in data.items[0])) return data;\n let sub = 0, tax = 0, disc = 0, grossSum = 0;\n const items = data.items.map((it) => {\n const q = Number(it.qty) || 0, p = Number(it.price) || 0;\n const gross = q * p;\n const dAmt = gross * ((Number(it.disc) || 0) / 100);\n const net = gross - dAmt;\n const tAmt = net * ((Number(it.tax) || 0) / 100);\n sub += net; tax += tAmt; disc += dAmt; grossSum += gross;\n // amount = net (legacy); taxable/taxAmt/total are extra fields KSA-style\n // bilingual templates bind to — harmless to templates that ignore them.\n return { ...it, amount: net, gross, discAmt: dAmt, taxable: net, taxAmt: tAmt, total: net + tAmt };\n });\n const out = { ...data, items };\n if (data.totals) {\n out.totals = { ...data.totals, subtotal: sub, discount: disc, tax, total: sub + tax };\n // ZATCA / KSA-style aliases — only populated when the sample opts in\n // (its totals object carries a `gross` or `exclVat` key).\n if ('gross' in data.totals || 'exclVat' in data.totals) {\n out.totals.gross = grossSum;\n out.totals.exclVat = sub;\n out.totals.vatAmount = tax;\n out.totals.inclVat = sub + tax;\n out.totals.balanceDue = sub + tax;\n }\n }\n return out;\n }\n\n // parse a number out of an edited string (\"AED 2,150.00\" → 2150, \"5%\" → 5)\n function parseNum(str) {\n const n = parseFloat(String(str).replace(/[^0-9.\\-]/g, ''));\n return isNaN(n) ? 0 : n;\n }\n\n // apply one inline edit → new data object\n function applyEdit(data, path, type, rawText) {\n let val = rawText;\n if (type === 'num' || type === 'money') val = parseNum(rawText);\n let next = setByPath(data, path, val);\n // recompute when a line-item money/qty field changed\n if (/^items\\.\\d+\\.(qty|price|disc|tax)$/.test(path)) next = recomputeTotals(next);\n return next;\n }\n\n // line-item row ops\n function addItem(data) {\n if (!Array.isArray(data.items)) return data;\n const blank = { sku: 'NEW-000', name: 'New line item', detail: '', qty: 1, unit: 'pcs', price: 0, tax: 5, disc: 0 };\n const items = [...data.items, { ...blank }];\n return recomputeTotals({ ...data, items });\n }\n function removeItem(data, idx) {\n const items = data.items.filter((_, i) => i !== idx);\n return recomputeTotals({ ...data, items });\n }\n function moveItem(data, idx, dir) {\n const items = data.items.slice();\n const j = idx + dir;\n if (j < 0 || j >= items.length) return data;\n [items[idx], items[j]] = [items[j], items[idx]];\n return recomputeTotals({ ...data, items });\n }\n\n export const PBModel = { clone, getByPath, setByPath, recomputeTotals, parseNum, applyEdit, addItem, removeItem, moveItem };\n\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\n\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — Stationery LIBRARY store (shared)\n A client can keep SEVERAL letterhead/footer presets (e.g. a\n standard masthead, a bilingual split, a minimal mono one).\n Both the Stationery Master editor and the PDF Builder read from\n this one library so a document can pick whichever it needs —\n or none at all (Blank / Pre-printed).\n\n Shape: { presets: [ Preset, … ], activeId }\n Preset: { id, name, mode, brand, header, footer, watermark, reserve }\n Saved under 'erpforce-stationery-library-v1'. Migrates the old\n single-master key automatically. Exposes STStore.\n ───────────────────────────────────────────────────────────── */\n\nconst LIB = 'altrad-stationery-library-v2';\nconst OLD = 'erpforce-stationery-master-v1'; // legacy single master\n\nconst uid = () => 'st-' + Math.random().toString(36).slice(2, 9);\n\n// ── field defaults (kept in sync with the editor) ───────────\nconst baseHeader = () => ({\n show: true, variant: 'standard', showLogo: true, logoSize: 46, logoSrc: null,\n nameEN: '', nameAR: '',\n bilingual: false, tagline: '', rule: false, repeat: 'all', compactCont: true,\n});\nconst baseFooter = () => ({\n show: true, regBand: false,\n regItems: [],\n contactRow: true, address: '', phone: '', email: '',\n pageNumbers: false, format: 'Page {n} of {total}', note: '', repeat: 'all',\n});\nconst baseWatermark = () => ({ show: true, opacity: 6, size: 56, rotation: 0 });\nconst baseReserve = () => ({ top: 156, bottom: 120 });\n\nconst defPreset = (over = {}) => ({\n id: uid(), name: 'Untitled stationery', mode: 'letterhead', brand: '#DD0D1A',\n paper: 'A4', orient: 'portrait',\n header: baseHeader(), footer: baseFooter(), watermark: baseWatermark(), reserve: baseReserve(),\n sections: [],\n ...over,\n});\n\n// defensively fill any missing sub-keys (forward-compatible loads)\nconst mergePreset = (p) => ({\n ...defPreset(), ...p,\n id: p.id || uid(),\n paper: p.paper || 'A4',\n orient: p.orient || 'portrait',\n header: { ...baseHeader(), ...(p.header || {}) },\n footer: { ...baseFooter(), ...(p.footer || {}) },\n watermark: { ...baseWatermark(), ...(p.watermark || {}) },\n reserve: { ...baseReserve(), ...(p.reserve || {}) },\n sections: Array.isArray(p.sections) ? p.sections : (\n // Migrate old customHeader/customFooter if they exist\n [\n ...(Array.isArray(p.customHeader) ? p.customHeader.map((s: any) => ({ ...s, zone: 'header' })) : []),\n ...(Array.isArray(p.customFooter) ? p.customFooter.map((s: any) => ({ ...s, zone: 'footer' })) : [])\n ]\n ),\n});\n\nconst seedLib = () => {\n const p1 = defPreset({ name: 'Standard stationery', brand: '#14171b', header: { ...baseHeader(), variant: 'standard' } });\n return { presets: [p1], activeId: p1.id };\n};\n\nfunction load() {\n // Rely solely on backend persistence; return seeded data initially\n return seedLib();\n}\n\nfunction save(lib) {\n // No-op: Persistence is handled directly by API calls\n}\n\nconst getActive = (lib) => (lib && lib.presets.find(p => p.id === lib.activeId)) || (lib && lib.presets[0]) || null;\nconst getById = (lib, id) => (lib && lib.presets.find(p => p.id === id)) || null;\n\nexport const STStore = { uid, defPreset, mergePreset, seedLib, load, save, getActive, getById };\n\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\n\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — editable handlebars templates\n Inner HTML of `.pbd`. Top-level children are flow blocks; the\n block marked [data-split] (line-item table) is split across\n pages. Fields carrying data-edit=\"path\" are click-to-edit in the\n preview (WYSIWYG) — they write back to the document data, never\n to this HTML. Raw HTML stays available in Advanced mode.\n Exposes PBTemplates\n ───────────────────────────────────────────────────────────── */\n\n // editable-field attribute helper\n const E = (path, type) => `data-edit=\"${path}\"${type ? ` data-edit-type=\"${type}\"` : ''}`;\n\n const LETTERHEAD = `<div class=\"pbd-lh\" data-block=\"header\" data-label=\"Letterhead\">\n {{#if showLogo}}<img class=\"pbd-logo\" src=\"assets/ERPForce_Primary-Logo.svg\" alt=\"\" />{{/if}}\n <div class=\"pbd-lh-co\">\n <div class=\"pbd-co-name\" ${E('company.name')}>{{company.name}}</div>\n <div class=\"pbd-co-line\" ${E('company.line1')}>{{company.line1}}</div>\n <div class=\"pbd-co-line\" ${E('company.line2')}>{{company.line2}}</div>\n <div class=\"pbd-co-line\"><span ${E('company.phone')}>{{company.phone}}</span> · <span ${E('company.email')}>{{company.email}}</span></div>\n <div class=\"pbd-co-line\">TRN <span ${E('company.trn')}>{{company.trn}}</span></div>\n </div>`;\n\n const FOOT = `{{#if showFooter}}<div class=\"pbd-foot\" data-block=\"foot\" data-label=\"Footer\">\n <span>{{company.name}} · TRN {{company.trn}}</span>\n <span ${E('footerNote')}>{{footerNote}}</span>\n</div>{{/if}}`;\n\n const ITEMS_HEAD = `<thead><tr>\n <th class=\"l\">#</th><th class=\"l\">Description</th>\n <th>Qty</th><th>Unit</th><th>Unit price</th><th>Disc</th><th>VAT</th><th>Amount</th>\n </tr></thead>`;\n const ITEMS_ROW = `<tr>\n <td class=\"l it-no\">{{@number}}</td>\n <td class=\"l it-desc\"><b ${E('items.{{@index}}.name')}>{{this.name}}</b><span class=\"it-sku\"><span ${E('items.{{@index}}.sku')}>{{this.sku}}</span>{{#if this.detail}} · <span ${E('items.{{@index}}.detail')}>{{this.detail}}</span>{{/if}}</span></td>\n <td ${E('items.{{@index}}.qty', 'num')}>{{qty this.qty}}</td>\n <td ${E('items.{{@index}}.unit')}>{{this.unit}}</td>\n <td ${E('items.{{@index}}.price', 'money')}>{{money this.price}}</td>\n <td class=\"it-disc\">{{#if this.disc}}{{pct this.disc}}{{else}}—{{/if}}</td>\n <td class=\"it-tax\">{{pct this.tax}}</td>\n <td><b>{{money this.amount}}</b></td>\n </tr>`;\n\n const TOTALS = `<div class=\"pbd-totals-wrap\" data-block=\"totals\" data-label=\"Totals\">\n <div class=\"pbd-totals\">\n <div class=\"pbd-tot-row\"><span>Subtotal</span><span class=\"pbd-tot-v\" ${E('gross_amount')}>{{gross_amount}}</span></div>\n {{#if discount_amount}}<div class=\"pbd-tot-row pbd-tot-row--disc\"><span>Discount</span><span class=\"pbd-tot-v\" ${E('discount_amount')}>− {{discount_amount}}</span></div>{{/if}}\n <div class=\"pbd-tot-row pbd-tot-row--sub\"><span>VAT (5%)</span><span class=\"pbd-tot-v\" ${E('tax_amount')}>{{tax_amount}}</span></div>\n <div class=\"pbd-tot-grand\"><span class=\"pbd-tot-k\">Grand total</span><span class=\"pbd-tot-v\" ${E('total_invoice_amount')}>{{total_invoice_amount}}</span></div>\n {{#if amount_due_words}}<div class=\"pbd-amountwords\">In words: <b ${E('amount_due_words')}>{{amount_due_words}}</b></div>{{/if}}\n </div>\n</div>`;\n\n const PARTY_CUST = (h) => `<div class=\"pbd-party\">\n <div class=\"pbd-party-h\">${h}</div>\n <div class=\"pbd-party-name\" ${E('customer_name')}>{{customer_name}}</div>\n {{#if invoice_addresses.contact_person_data.contact_name}}<div class=\"pbd-party-line\">Attn: <span ${E('invoice_addresses.contact_person_data.contact_name')}>{{invoice_addresses.contact_person_data.contact_name}}</span></div>{{/if}}\n <div class=\"pbd-party-line\" ${E('invoice_addresses.billing_address_data.address')}>{{invoice_addresses.billing_address_data.address}}</div>\n {{#if customer_trn}}<div class=\"pbd-party-line\">TRN <span ${E('customer_trn')}>{{customer_trn}}</span></div>{{/if}}\n </div>`;\n\n const NOTES = (termsLabel) => `<div class=\"pbd-cols\" data-block=\"notes\" data-label=\"Notes & terms\">\n <div>\n <div class=\"pbd-notes-h\">Notes</div>\n <div class=\"pbd-notes-body\" ${E('notes')}>{{notes}}</div>\n </div>\n {{#if showTerms}}<div>\n <div class=\"pbd-notes-h\">${termsLabel}</div>\n <div class=\"pbd-notes-body\"><ol>{{#each terms}}<li ${E('terms.{{@index}}')}>{{this}}</li>{{/each}}</ol></div>\n </div>{{/if}}\n</div>`;\n\n const SIGN = `<div class=\"pbd-sign\" data-block=\"sign\" data-label=\"Signature\">\n <div class=\"pbd-sign-line\"><div class=\"pbd-sign-rule\"><b ${E('signatory.name')}>{{signatory.name}}</b><span ${E('signatory.role')}>{{signatory.role}}</span></div></div>\n <div class=\"pbd-sign-line\"><div class=\"pbd-sign-rule\"><b> </b>Customer acceptance · date</div></div>\n</div>`;\n\n const TEMPLATES = {\n\n quotation:\n`${LETTERHEAD}\n <div class=\"pbd-lh-doc\">\n <div class=\"pbd-doctype\">Quotation</div>\n <div class=\"pbd-ref\">No. <b ${E('doc.number')}>{{doc.number}}</b></div>\n <div class=\"pbd-ref\" ${E('doc.date')}>{{doc.date}}</div>\n <span class=\"pbd-status pbd-status--draft\">Valid to {{doc.validUntil}}</span>\n </div>\n</div>\n\n<div class=\"pbd-parties pbd-parties--2\" data-block=\"parties\" data-label=\"Customer\">\n ${PARTY_CUST('Quotation for')}\n <div class=\"pbd-party\">\n <div class=\"pbd-party-h\">Prepared by</div>\n <div class=\"pbd-party-name\" ${E('doc.salesRep')}>{{doc.salesRep}}</div>\n <div class=\"pbd-party-line\">{{company.name}}</div>\n <div class=\"pbd-party-line\">{{company.email}}</div>\n </div>\n</div>\n\n<div class=\"pbd-meta pbd-meta--3\" data-block=\"meta\" data-label=\"Meta\">\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Quote no.</span><span class=\"pbd-meta-v\" ${E('doc.number')}>{{doc.number}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Date</span><span class=\"pbd-meta-v\" ${E('doc.date')}>{{doc.date}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Valid until</span><span class=\"pbd-meta-v\" ${E('doc.validUntil')}>{{doc.validUntil}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Customer ref</span><span class=\"pbd-meta-v\" ${E('doc.reference')}>{{doc.reference}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Sales rep</span><span class=\"pbd-meta-v\" ${E('doc.salesRep')}>{{doc.salesRep}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Currency</span><span class=\"pbd-meta-v\" ${E('currency')}>{{currency}}</span></div>\n</div>\n\n<div class=\"pbd-items-wrap\" data-block=\"items\" data-label=\"Line items\" data-split>\n <table class=\"pbd-items\">\n ${ITEMS_HEAD}\n <tbody>\n {{#each items}}${ITEMS_ROW}{{/each}}\n </tbody>\n </table>\n</div>\n\n${TOTALS}\n\n${NOTES('Terms & conditions')}\n\n${SIGN}\n\n${FOOT}`,\n\n invoice:\n`${LETTERHEAD}\n <div class=\"pbd-lh-doc\">\n <div class=\"pbd-doctype\">Tax Invoice</div>\n <div class=\"pbd-ref\">No. <b ${E('doc.number')}>{{doc.number}}</b></div>\n <div class=\"pbd-ref\" ${E('doc.date')}>{{doc.date}}</div>\n {{#if doc.status}}<span class=\"pbd-status pbd-status--due\">Payment due {{doc.dueDate}}</span>{{/if}}\n </div>\n</div>\n\n<div class=\"pbd-parties pbd-parties--2\" data-block=\"parties\" data-label=\"Bill to\">\n ${PARTY_CUST('Bill to')}\n {{#if showBank}}<div class=\"pbd-party\">\n <div class=\"pbd-party-h\">Pay to</div>\n <div class=\"pbd-party-name\" ${E('bank.name')}>{{bank.name}}</div>\n <div class=\"pbd-party-line\" ${E('bank.account')}>{{bank.account}}</div>\n <div class=\"pbd-party-line\">IBAN <span ${E('bank.iban')}>{{bank.iban}}</span></div>\n <div class=\"pbd-party-line\">SWIFT <span ${E('bank.swift')}>{{bank.swift}}</span></div>\n </div>{{/if}}\n</div>\n\n<div class=\"pbd-meta\" data-block=\"meta\" data-label=\"Meta\">\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Invoice no.</span><span class=\"pbd-meta-v\" ${E('doc.number')}>{{doc.number}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Issue date</span><span class=\"pbd-meta-v\" ${E('doc.date')}>{{doc.date}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Due date</span><span class=\"pbd-meta-v\" ${E('doc.dueDate')}>{{doc.dueDate}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">PO number</span><span class=\"pbd-meta-v\" ${E('doc.po')}>{{doc.po}}</span></div>\n</div>\n\n<div class=\"pbd-items-wrap\" data-block=\"items\" data-label=\"Line items\" data-split>\n <table class=\"pbd-items\">\n ${ITEMS_HEAD}\n <tbody>\n {{#each items}}${ITEMS_ROW}{{/each}}\n </tbody>\n </table>\n</div>\n\n${TOTALS}\n\n<div class=\"pbd-cols\" data-block=\"notes\" data-label=\"Notes & payment\">\n <div>\n <div class=\"pbd-notes-h\">Notes</div>\n <div class=\"pbd-notes-body\" ${E('notes')}>{{notes}}</div>\n </div>\n {{#if showBank}}<div>\n <div class=\"pbd-notes-h\">Payment terms · {{doc.terms}}</div>\n <div class=\"pbd-pay\"><span class=\"k\">Bank</span><b ${E('bank.name')}>{{bank.name}}</b><br><span class=\"k\">IBAN</span><span ${E('bank.iban')}>{{bank.iban}}</span><br><span class=\"k\">SWIFT</span><span ${E('bank.swift')}>{{bank.swift}}</span></div>\n </div>{{/if}}\n</div>\n\n${SIGN}\n\n${FOOT}`,\n\n invoice_ksa:\n`<div class=\"kx-head\" data-block=\"header\" data-label=\"Document title\">\n <div class=\"kx-head-row\">\n <div class=\"kx-title-block\">\n <span class=\"kx-title\">Tax Invoice</span>\n <span class=\"kx-title-dot\"></span>\n <span class=\"kx-title-ar\">فاتورة ضريبية</span>\n </div>\n <div class=\"kx-head-tag\">ZATCA<br>e-Invoice</div>\n </div>\n <div class=\"kx-head-no\">\n <div class=\"kx-head-no-en\"><span class=\"kx-k\">Invoice No.</span><b ${E('series_number')}>{{series_number}}</b></div>\n <div class=\"kx-head-no-ar\" dir=\"rtl\"><span class=\"kx-k\">رقم الفاتورة</span><b>{{series_number}}</b></div>\n </div>\n</div>\n\n<div class=\"kx-parties\" data-block=\"parties\" data-label=\"Seller & Buyer\">\n <div class=\"kx-party\">\n <div class=\"kx-party-bar\"><span>Seller Details</span><span class=\"kx-ar\">تفاصيل المورد</span></div>\n <div class=\"kx-party-grid\">\n <div class=\"kx-col-en\">\n <div class=\"kx-name\" ${E('company_data.name')}>{{company_data.name}}</div>\n <div class=\"kx-line\" ${E('company_data.address')}>{{company_data.address}}</div>\n <div class=\"kx-kv\"><span>CRN</span><b ${E('company_data.crn')}>{{company_data.crn}}</b></div>\n <div class=\"kx-kv\"><span>VAT No.</span><b ${E('company_data.vat_number')}>{{company_data.vat_number}}</b></div>\n </div>\n <div class=\"kx-col-ar\" dir=\"rtl\">\n <div class=\"kx-name\" ${E('company_data.name_ar')}>{{company_data.name_ar}}</div>\n <div class=\"kx-line\" ${E('company_data.address_ar')}>{{company_data.address_ar}}</div>\n <div class=\"kx-kv\"><span>السجل التجاري</span><b>{{company_data.crn}}</b></div>\n <div class=\"kx-kv\"><span>الرقم الضريبي</span><b>{{company_data.vat_number}}</b></div>\n </div>\n </div>\n </div>\n <div class=\"kx-party\">\n <div class=\"kx-party-bar\"><span>Buyer Details</span><span class=\"kx-ar\">تفاصيل العميل</span></div>\n <div class=\"kx-party-grid\">\n <div class=\"kx-col-en\">\n <div class=\"kx-name\" ${E('customer_data.name')}>{{customer_data.name}}</div>\n <div class=\"kx-line\" ${E('customer_data.email')}>{{customer_data.email}}</div>\n <div class=\"kx-kv\"><span>CRN</span><b ${E('vendor_details_full.crn')}>{{vendor_details_full.crn}}</b></div>\n <div class=\"kx-kv\"><span>VAT No.</span><b ${E('vendor_details_full.vat_number')}>{{vendor_details_full.vat_number}}</b></div>\n </div>\n <div class=\"kx-col-ar\" dir=\"rtl\">\n <div class=\"kx-name\" ${E('customer_data.name_ar')}>{{customer_data.name_ar}}</div>\n <div class=\"kx-line\"></div>\n <div class=\"kx-kv\"><span>السجل التجاري</span><b>{{vendor_details_full.crn}}</b></div>\n <div class=\"kx-kv\"><span>الرقم الضريبي</span><b>{{vendor_details_full.vat_number}}</b></div>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"kx-meta\" data-block=\"meta\" data-label=\"Invoice details\">\n <div class=\"kx-meta-item\"><span class=\"kx-meta-k\">Invoice Date<i class=\"kx-ar\">تاريخ الفاتورة</i></span><span class=\"kx-meta-v\" ${E('date')}>{{date}}</span></div>\n <div class=\"kx-meta-item\"><span class=\"kx-meta-k\">Supply Date<i class=\"kx-ar\">تاريخ التوريد</i></span><span class=\"kx-meta-v\" ${E('supply_date')}>{{supply_date}}</span></div>\n <div class=\"kx-meta-item\"><span class=\"kx-meta-k\">Due Date<i class=\"kx-ar\">تاريخ الاستحقاق</i></span><span class=\"kx-meta-v\" ${E('due_date')}>{{due_date}}</span></div>\n <div class=\"kx-meta-item\"><span class=\"kx-meta-k\">Invoice Period<i class=\"kx-ar\">فترة الفاتورة</i></span><span class=\"kx-meta-v\"><span ${E('period_from')}>{{period_from}}</span> – <span ${E('period_to')}>{{period_to}}</span></span></div>\n <div class=\"kx-meta-item\"><span class=\"kx-meta-k\">Contract / PO No.<i class=\"kx-ar\">رقم العقد</i></span><span class=\"kx-meta-v\" ${E('po_number')}>{{po_number}}</span></div>\n <div class=\"kx-meta-item\"><span class=\"kx-meta-k\">Project / Ref.<i class=\"kx-ar\">المرجع</i></span><span class=\"kx-meta-v\" ${E('project_reference')}>{{project_reference}}</span></div>\n</div>\n\n<div class=\"kx-items-wrap\" data-block=\"items\" data-label=\"Line items\" data-split>\n <table class=\"pbd-items kx-items\">\n <thead><tr>\n <th class=\"l\">#<i class=\"kx-ar-h\">م</i></th>\n <th class=\"l\">Code (SKU)<i class=\"kx-ar-h\">الرمز</i></th>\n <th class=\"l\">Description / Nature of goods<i class=\"kx-ar-h\">طبيعة السلعة أو الخدمة</i></th>\n <th>Qty<i class=\"kx-ar-h\">الكمية</i></th>\n <th>Unit<i class=\"kx-ar-h\">الوحدة</i></th>\n <th>Unit Rate<i class=\"kx-ar-h\">سعر الوحدة</i></th>\n <th>Discount<i class=\"kx-ar-h\">الخصم</i></th>\n <th>Taxable<i class=\"kx-ar-h\">الخاضع للضريبة</i></th>\n <th>Tax %<i class=\"kx-ar-h\">النسبة</i></th>\n <th>Tax Amt<i class=\"kx-ar-h\">مبلغ الضريبة</i></th>\n <th>Total<i class=\"kx-ar-h\">الإجمالي</i></th>\n </tr></thead>\n <tbody>\n {{#each sales_item_entries}}<tr>\n <td class=\"l it-no\">{{inc @index}}</td>\n <td class=\"l\"><span class=\"kx-sku\" ${E('sales_item_entries.{{@index}}.item_data.sku')}>{{this.item_data.sku}}</span></td>\n <td class=\"l kx-desc\"><b ${E('sales_item_entries.{{@index}}.item_data.name')}>{{this.item_data.name}}</b><span class=\"kx-ar\" ${E('sales_item_entries.{{@index}}.narration')}>{{this.narration}}</span></td>\n <td ${E('sales_item_entries.{{@index}}.quantity', 'num')}>{{this.quantity}}</td>\n <td><span class=\"kx-unit\">{{this.units_of_measurement_data.name}}</span><span class=\"kx-ar-sm\"></span></td>\n <td ${E('sales_item_entries.{{@index}}.rate', 'money')}>{{money this.rate}}</td>\n <td>{{money this.discount_amount}}</td>\n <td>{{money this.gross_amount}}</td>\n <td class=\"kx-rate\">{{this.tax_rate}}</td>\n <td>{{money this.tax_amount}}</td>\n <td><b>{{money this.total_amount}}</b></td>\n </tr>{{/each}}\n </tbody>\n </table>\n</div>\n\n<div class=\"kx-totals\" data-block=\"totals\" data-label=\"Totals & amount in words\">\n <div class=\"kx-tot-grid\">\n <div class=\"kx-tot-row\"><span class=\"kx-tot-en\">Gross Total (SAR)</span><span class=\"kx-tot-v\">{{money total_gross_amount}}</span><span class=\"kx-tot-ar\">الإجمالي قبل الضريبة</span></div>\n <div class=\"kx-tot-row\"><span class=\"kx-tot-en\">Total Discount (SAR)</span><span class=\"kx-tot-v\">{{money additional_discount}}</span><span class=\"kx-tot-ar\">إجمالي الخصم</span></div>\n <div class=\"kx-tot-row\"><span class=\"kx-tot-en\">Total Excl. VAT (SAR)</span><span class=\"kx-tot-v\">{{money total_excl_vat}}</span><span class=\"kx-tot-ar\">الإجمالي غير شامل الضريبة</span></div>\n <div class=\"kx-tot-row\"><span class=\"kx-tot-en\">VAT Amount 15% (SAR)</span><span class=\"kx-tot-v\">{{money total_vat}}</span><span class=\"kx-tot-ar\">قيمة ضريبة القيمة المضافة</span></div>\n <div class=\"kx-tot-row kx-tot-grand\"><span class=\"kx-tot-en\">Amount Incl. VAT (SAR)</span><span class=\"kx-tot-v\">{{money total_incl_vat}}</span><span class=\"kx-tot-ar\">المبلغ شامل الضريبة</span></div>\n <div class=\"kx-tot-row kx-tot-due\"><span class=\"kx-tot-en\">Balance Due (SAR)</span><span class=\"kx-tot-v\">{{money amount_due}}</span><span class=\"kx-tot-ar\">الرصيد المستحق</span></div>\n </div>\n <div class=\"kx-words\">\n <div class=\"kx-words-row\"><span class=\"kx-words-k\">Amount in words</span><span class=\"kx-words-v\" ${E('amount_due_words')}>{{amount_due_words}}</span></div>\n <div class=\"kx-words-row\" dir=\"rtl\"><span class=\"kx-words-k\">المبلغ كتابةً</span><span class=\"kx-words-v\"></span></div>\n </div>\n</div>\n\n{{#if showBank}}<div class=\"kx-bankqr\" data-block=\"bank\" data-label=\"QR & bank details\">\n {{#if showQr}}<div class=\"kx-qr\">\n <img src=\"{{qr_code}}\" alt=\"ZATCA QR\" />\n <div class=\"kx-qr-cap\">Scan to verify<span class=\"kx-ar\">امسح للتحقق من الفاتورة</span></div>\n </div>{{/if}}\n <div class=\"kx-bank\">\n <div class=\"kx-bank-h\"><span>Bank Details</span><span class=\"kx-ar\">تفاصيل الحساب البنكي</span></div>\n <table class=\"kx-bank-tbl\">\n <tr><td class=\"kx-bank-k\">Account Name<i class=\"kx-ar\">اسم الحساب</i></td><td ${E('bank_details.name')}>{{bank_details.name}}</td></tr>\n <tr><td class=\"kx-bank-k\">Bank<i class=\"kx-ar\">البنك</i></td><td ${E('bank_details.bank_name')}>{{bank_details.bank_name}}</td></tr>\n <tr><td class=\"kx-bank-k\">Branch<i class=\"kx-ar\">الفرع</i></td><td ${E('bank_details.branch_code')}>{{bank_details.branch_code}}</td></tr>\n <tr><td class=\"kx-bank-k\">Account No.<i class=\"kx-ar\">رقم الحساب</i></td><td ${E('bank_details.account_number')}>{{bank_details.account_number}}</td></tr>\n <tr><td class=\"kx-bank-k\">IBAN<i class=\"kx-ar\">الآيبان</i></td><td ${E('bank_details.iban_code')}>{{bank_details.iban_code}}</td></tr>\n <tr><td class=\"kx-bank-k\">SWIFT<i class=\"kx-ar\">سويفت</i></td><td ${E('bank_details.swift_number')}>{{bank_details.swift_number}}</td></tr>\n </table>\n </div>\n</div>{{/if}}`,\n\n delivery:\n`${LETTERHEAD}\n <div class=\"pbd-lh-doc\">\n <div class=\"pbd-doctype\">Delivery Note</div>\n <div class=\"pbd-ref\">No. <b ${E('doc.number')}>{{doc.number}}</b></div>\n <div class=\"pbd-ref\" ${E('doc.date')}>{{doc.date}}</div>\n <div class=\"pbd-ref\">Inv ref {{doc.invoice}}</div>\n </div>\n</div>\n\n<div class=\"pbd-parties\" data-block=\"parties\" data-label=\"Parties\">\n <div class=\"pbd-party\">\n <div class=\"pbd-party-h\">Ship to</div>\n <div class=\"pbd-party-name\" ${E('shipTo.name')}>{{shipTo.name}}</div>\n <div class=\"pbd-party-line\">Attn: <span ${E('shipTo.attn')}>{{shipTo.attn}}</span></div>\n <div class=\"pbd-party-line\" ${E('shipTo.line1')}>{{shipTo.line1}}</div>\n <div class=\"pbd-party-line\" ${E('shipTo.line2')}>{{shipTo.line2}}</div>\n </div>\n ${PARTY_CUST('Customer')}\n <div class=\"pbd-party\">\n <div class=\"pbd-party-h\">Despatch</div>\n <div class=\"pbd-party-line\">Vehicle: <span ${E('doc.vehicle')}>{{doc.vehicle}}</span></div>\n <div class=\"pbd-party-line\">Driver: <span ${E('doc.driver')}>{{doc.driver}}</span></div>\n <div class=\"pbd-party-line\">PO: <span ${E('doc.po')}>{{doc.po}}</span></div>\n </div>\n</div>\n\n<div class=\"pbd-items-wrap\" data-block=\"items\" data-label=\"Line items\" data-split>\n <table class=\"pbd-items\">\n <thead><tr><th class=\"l\">#</th><th class=\"l\">Code</th><th class=\"l\">Description</th><th>Unit</th><th>Qty ordered</th><th>Qty delivered</th></tr></thead>\n <tbody>\n {{#each items}}<tr>\n <td class=\"l it-no\">{{@number}}</td>\n <td class=\"l\"><span class=\"it-sku\" style=\"font-size:9px\" ${E('items.{{@index}}.sku')}>{{this.sku}}</span></td>\n <td class=\"l it-desc\"><b ${E('items.{{@index}}.name')}>{{this.name}}</b><span class=\"it-sku\" ${E('items.{{@index}}.detail')}>{{this.detail}}</span></td>\n <td ${E('items.{{@index}}.unit')}>{{this.unit}}</td>\n <td ${E('items.{{@index}}.qty', 'num')}>{{qty this.qty}}</td>\n <td><b ${E('items.{{@index}}.delivered', 'num')}>{{qty this.delivered}}</b></td>\n </tr>{{/each}}\n </tbody>\n </table>\n</div>\n\n<div class=\"pbd-cols\" data-block=\"notes\" data-label=\"Notes\">\n <div>\n <div class=\"pbd-notes-h\">Goods received in good condition</div>\n <div class=\"pbd-notes-body\" ${E('notes')}>{{notes}}</div>\n </div>\n <div>\n <div class=\"pbd-notes-h\">Discrepancies noted</div>\n <div class=\"pbd-notes-body\" style=\"min-height:36px;border:1px dashed var(--pbd-line-strong);border-radius:4px\"></div>\n </div>\n</div>\n\n<div class=\"pbd-sign\" data-block=\"sign\" data-label=\"Signature\">\n <div class=\"pbd-sign-line\"><div class=\"pbd-sign-rule\"><b>Received by (name & signature)</b>Date & company stamp</div></div>\n <div class=\"pbd-sign-line\"><div class=\"pbd-sign-rule\"><b ${E('doc.driver')}>{{doc.driver}}</b>Delivered by</div></div>\n</div>\n\n${FOOT}`,\n\n po:\n`${LETTERHEAD}\n <div class=\"pbd-lh-doc\">\n <div class=\"pbd-doctype\">Purchase Order</div>\n <div class=\"pbd-ref\">No. <b ${E('doc.number')}>{{doc.number}}</b></div>\n <div class=\"pbd-ref\" ${E('doc.date')}>{{doc.date}}</div>\n <span class=\"pbd-status pbd-status--draft\">Required by {{doc.requiredBy}}</span>\n </div>\n</div>\n\n<div class=\"pbd-parties pbd-parties--2\" data-block=\"parties\" data-label=\"Supplier\">\n <div class=\"pbd-party\">\n <div class=\"pbd-party-h\">Supplier</div>\n <div class=\"pbd-party-name\" ${E('vendor.name')}>{{vendor.name}}</div>\n <div class=\"pbd-party-line\">Attn: <span ${E('vendor.attn')}>{{vendor.attn}}</span></div>\n <div class=\"pbd-party-line\" ${E('vendor.line1')}>{{vendor.line1}}</div>\n <div class=\"pbd-party-line\" ${E('vendor.line2')}>{{vendor.line2}}</div>\n <div class=\"pbd-party-line\">TRN <span ${E('vendor.trn')}>{{vendor.trn}}</span></div>\n </div>\n <div class=\"pbd-party\">\n <div class=\"pbd-party-h\">Deliver to</div>\n <div class=\"pbd-party-name\" ${E('shipTo.name')}>{{shipTo.name}}</div>\n <div class=\"pbd-party-line\">Attn: <span ${E('shipTo.attn')}>{{shipTo.attn}}</span></div>\n <div class=\"pbd-party-line\" ${E('shipTo.line1')}>{{shipTo.line1}}</div>\n <div class=\"pbd-party-line\" ${E('shipTo.line2')}>{{shipTo.line2}}</div>\n </div>\n</div>\n\n<div class=\"pbd-meta pbd-meta--3\" data-block=\"meta\" data-label=\"Meta\">\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">PO number</span><span class=\"pbd-meta-v\" ${E('doc.number')}>{{doc.number}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Order date</span><span class=\"pbd-meta-v\" ${E('doc.date')}>{{doc.date}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Required by</span><span class=\"pbd-meta-v\" ${E('doc.requiredBy')}>{{doc.requiredBy}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Buyer</span><span class=\"pbd-meta-v\" ${E('doc.buyer')}>{{doc.buyer}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Incoterms</span><span class=\"pbd-meta-v\" ${E('doc.incoterms')}>{{doc.incoterms}}</span></div>\n <div class=\"pbd-meta-item\"><span class=\"pbd-meta-k\">Currency</span><span class=\"pbd-meta-v\" ${E('currency')}>{{currency}}</span></div>\n</div>\n\n<div class=\"pbd-items-wrap\" data-block=\"items\" data-label=\"Line items\" data-split>\n <table class=\"pbd-items\">\n ${ITEMS_HEAD}\n <tbody>\n {{#each items}}${ITEMS_ROW}{{/each}}\n </tbody>\n </table>\n</div>\n\n${TOTALS}\n\n${NOTES('Purchasing terms')}\n\n${SIGN}\n\n${FOOT}`,\n\n report:\n`${LETTERHEAD}\n <div class=\"pbd-lh-doc\">\n <div class=\"pbd-doctype\" style=\"font-size:17px;text-transform:none;line-height:1.2;max-width:280px;margin-left:auto\" ${E('doc.title')}>{{doc.title}}</div>\n <div class=\"pbd-ref\" ${E('doc.period')}>{{doc.period}}</div>\n <div class=\"pbd-ref\">{{doc.basis}} basis · {{currency}}</div>\n </div>\n</div>\n\n{{#if showKpis}}<div class=\"pbd-kpis\" data-block=\"kpis\" data-label=\"KPIs\">\n {{#each kpis}}<div class=\"pbd-kpi\">\n <div class=\"pbd-kpi-l\" ${E('kpis.{{@index}}.label')}>{{this.label}}</div>\n <div class=\"pbd-kpi-v\" ${E('kpis.{{@index}}.value')}>{{this.value}}</div>\n <div class=\"pbd-kpi-s\" ${E('kpis.{{@index}}.sub')}>{{this.sub}}</div>\n </div>{{/each}}\n</div>{{/if}}\n\n<div class=\"pbd-h\" data-block=\"h\" data-label=\"Section title\">Statement detail</div>\n\n<div class=\"pbd-items-wrap\" data-block=\"items\" data-label=\"Statement rows\" data-split style=\"margin-top:6px\">\n <table class=\"pbd-items\">\n <thead><tr><th class=\"l\">Line item</th><th>Current period</th><th>Prior period</th><th>% of revenue</th></tr></thead>\n <tbody>\n {{#each rows}}<tr class=\"is-{{this.kind}}\">\n <td class=\"l\" ${E('rows.{{@index}}.label')}>{{this.label}}</td>\n <td>{{money this.current}}</td>\n <td>{{money this.prior}}</td>\n <td>{{pct this.pctRevenue}}</td>\n </tr>{{/each}}\n </tbody>\n </table>\n</div>\n\n<div class=\"pbd-cols\" data-block=\"notes\" data-label=\"Notes\">\n <div>\n <div class=\"pbd-notes-h\">Basis of preparation</div>\n <div class=\"pbd-notes-body\" ${E('notes')}>{{notes}}</div>\n </div>\n <div>\n <div class=\"pbd-notes-h\">Prepared by</div>\n <div class=\"pbd-notes-body\"><b ${E('signatory.name')}>{{signatory.name}}</b><br><span ${E('signatory.role')}>{{signatory.role}}</span><br>{{doc.generated}}</div>\n </div>\n</div>\n\n${FOOT}`,\n\n receipt:\n`${LETTERHEAD}\n <div class=\"pbd-lh-doc\">\n <div class=\"pbd-doctype\">Receipt</div>\n <div class=\"pbd-ref\">No. <b ${E('doc.number')}>{{doc.number}}</b></div>\n <div class=\"pbd-ref\" ${E('doc.date')}>{{doc.date}}</div>\n <span class=\"pbd-status pbd-status--paid\">Payment received</span>\n </div>\n</div>\n\n<div class=\"pbd-parties pbd-parties--2\" data-block=\"parties\" data-label=\"Received from\">\n ${PARTY_CUST('Received from')}\n <div class=\"pbd-party\">\n <div class=\"pbd-party-h\">Payment</div>\n <div class=\"pbd-party-line\">Method: <b ${E('doc.method')}>{{doc.method}}</b></div>\n <div class=\"pbd-party-line\">Reference: <span ${E('doc.reference')}>{{doc.reference}}</span></div>\n <div class=\"pbd-party-line\">Date: <span ${E('doc.date')}>{{doc.date}}</span></div>\n </div>\n</div>\n\n<div class=\"pbd-h\" data-block=\"h\" data-label=\"Section title\">Allocated to invoices</div>\n\n<div class=\"pbd-items-wrap\" data-block=\"items\" data-label=\"Allocations\" data-split style=\"margin-top:6px\">\n <table class=\"pbd-items\">\n <thead><tr><th class=\"l\">#</th><th class=\"l\">Invoice</th><th class=\"l\">Date</th><th>Invoice total</th><th>Amount applied</th></tr></thead>\n <tbody>\n {{#each allocations}}<tr>\n <td class=\"l it-no\">{{@number}}</td>\n <td class=\"l\"><b ${E('allocations.{{@index}}.invoice')}>{{this.invoice}}</b></td>\n <td class=\"l\" ${E('allocations.{{@index}}.date')}>{{this.date}}</td>\n <td>{{money this.invoiceTotal}}</td>\n <td><b>{{money this.applied}}</b></td>\n </tr>{{/each}}\n </tbody>\n </table>\n</div>\n\n<div class=\"pbd-totals-wrap\" data-block=\"totals\" data-label=\"Totals\">\n <div class=\"pbd-totals\">\n <div class=\"pbd-tot-grand\"><span class=\"pbd-tot-k\">Amount received</span><span class=\"pbd-tot-v\">{{money received}}</span></div>\n <div class=\"pbd-tot-row pbd-tot-row--sub\" style=\"margin-top:6px\"><span>Balance remaining</span><span class=\"pbd-tot-v\">{{money balance}}</span></div>\n <div class=\"pbd-amountwords\">In words: <b ${E('words')}>{{words}}</b></div>\n </div>\n</div>\n\n<div class=\"pbd-cols\" data-block=\"notes\" data-label=\"Notes\">\n <div><div class=\"pbd-notes-h\">Notes</div><div class=\"pbd-notes-body\" ${E('notes')}>{{notes}}</div></div>\n <div></div>\n</div>\n\n${SIGN}\n\n${FOOT}`,\n\n credit:\n`${LETTERHEAD}\n <div class=\"pbd-lh-doc\">\n <div class=\"pbd-doctype\">Credit Note</div>\n <div class=\"pbd-ref\">No. <b ${E('doc.number')}>{{doc.number}}</b></div>\n <div class=\"pbd-ref\" ${E('doc.date')}>{{doc.date}}</div>\n <div class=\"pbd-ref\">Against <b ${E('doc.against')}>{{doc.against}}</b></div>\n </div>\n</div>\n\n<div class=\"pbd-parties pbd-parties--2\" data-block=\"parties\" data-label=\"Bill to\">\n ${PARTY_CUST('Credit to')}\n <div class=\"pbd-party\">\n <div class=\"pbd-party-h\">Reason for credit</div>\n <div class=\"pbd-party-name\" style=\"font-size:11px\" ${E('doc.reason')}>{{doc.reason}}</div>\n <div class=\"pbd-party-line\">Original invoice: {{doc.against}}</div>\n </div>\n</div>\n\n<div class=\"pbd-items-wrap\" data-block=\"items\" data-label=\"Credit lines\" data-split>\n <table class=\"pbd-items\">\n ${ITEMS_HEAD}\n <tbody>\n {{#each items}}${ITEMS_ROW}{{/each}}\n </tbody>\n </table>\n</div>\n\n${TOTALS}\n\n${NOTES('Notes')}\n\n${SIGN}\n\n${FOOT}`,\n\n statement:\n`${LETTERHEAD}\n <div class=\"pbd-lh-doc\">\n <div class=\"pbd-doctype\" style=\"font-size:19px\">Statement</div>\n <div class=\"pbd-ref\">No. <b ${E('doc.number')}>{{doc.number}}</b></div>\n <div class=\"pbd-ref\">As at <span ${E('doc.date')}>{{doc.date}}</span></div>\n </div>\n</div>\n\n<div class=\"pbd-parties pbd-parties--2\" data-block=\"parties\" data-label=\"Account\">\n ${PARTY_CUST('Account')}\n <div class=\"pbd-party\">\n <div class=\"pbd-party-h\">Statement period</div>\n <div class=\"pbd-party-name\" style=\"font-size:11px\" ${E('doc.period')}>{{doc.period}}</div>\n <div class=\"pbd-party-line\">Currency: {{currency}}</div>\n <div class=\"pbd-party-line\">Opening balance: {{money doc.openingBalance}}</div>\n </div>\n</div>\n\n<div class=\"pbd-items-wrap\" data-block=\"items\" data-label=\"Ledger\" data-split>\n <table class=\"pbd-items\">\n <thead><tr><th class=\"l\">Date</th><th class=\"l\">Reference</th><th class=\"l\">Type</th><th>Debit</th><th>Credit</th><th>Balance</th></tr></thead>\n <tbody>\n {{#each ledger}}<tr>\n <td class=\"l\">{{this.date}}</td>\n <td class=\"l\"><b>{{this.ref}}</b></td>\n <td class=\"l it-tax\">{{this.type}}</td>\n <td>{{#if this.debit}}{{money this.debit}}{{else}}—{{/if}}</td>\n <td class=\"it-disc\">{{#if this.credit}}{{money this.credit}}{{else}}—{{/if}}</td>\n <td><b>{{money this.balance}}</b></td>\n </tr>{{/each}}\n </tbody>\n </table>\n</div>\n\n<div class=\"pbd-totals-wrap\" data-block=\"totals\" data-label=\"Aging & balance\">\n <div class=\"pbd-totals\" style=\"width:420px\">\n <div class=\"pbd-tot-row\"><span>Current</span><span class=\"pbd-tot-v\">{{money aging.current}}</span></div>\n <div class=\"pbd-tot-row\"><span>1–30 days</span><span class=\"pbd-tot-v\">{{money aging.d30}}</span></div>\n <div class=\"pbd-tot-row\"><span>31–60 days</span><span class=\"pbd-tot-v\">{{money aging.d60}}</span></div>\n <div class=\"pbd-tot-row\"><span>61–90 days</span><span class=\"pbd-tot-v\">{{money aging.d90}}</span></div>\n <div class=\"pbd-tot-row pbd-tot-row--sub\"><span>Over 90 days</span><span class=\"pbd-tot-v\">{{money aging.over}}</span></div>\n <div class=\"pbd-tot-grand\"><span class=\"pbd-tot-k\">Closing balance due</span><span class=\"pbd-tot-v\">{{money closingBalance}}</span></div>\n </div>\n</div>\n\n<div class=\"pbd-cols\" data-block=\"notes\" data-label=\"Notes\">\n <div><div class=\"pbd-notes-h\">Notes</div><div class=\"pbd-notes-body\" ${E('notes')}>{{notes}}</div></div>\n <div></div>\n</div>\n\n${FOOT}`,\n };\n\n export const PBTemplates = TEMPLATES;\n\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\nimport { Ic } from './icons';\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — field picker\n A friendly dropdown of the document's available data fields, so\n admins choose fields from a list (no typing, no spelling mistakes).\n Exposes export const PBPicker = { FieldPicker, buildFieldCatalog, fieldLabel, humanize }\n ───────────────────────────────────────────────────────────── */\n\n const { useState, useRef, useEffect } = React;\n \n\n // turn a raw path into readable words: \"doc.dueDate\" → \"Due date\"\n function humanize(path) {\n let s = String(path || '').replace(/^this\\./, '').replace(/^@/, '').replace(/\\./g, ' ');\n s = s.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/\\s+/g, ' ').trim().toLowerCase();\n return s ? s.charAt(0).toUpperCase() + s.slice(1) : 'Field';\n }\n\n // build a catalog from a document's field groups\n function buildFieldCatalog(groups) {\n const list = [], byExpr = {};\n (groups || []).forEach(g => (g.fields || []).forEach(fl => {\n if (fl.loop) return; // skip structural loops\n const inner = fl.tag.replace(/^\\{\\{\\{?/, '').replace(/\\}?\\}\\}$/, '').trim();\n list.push({ group: g.label, label: fl.label, tag: fl.tag, expr: inner });\n if (!(inner in byExpr)) byExpr[inner] = fl.label;\n const path = inner.split(/\\s+/).pop();\n if (!(path in byExpr)) byExpr[path] = fl.label; // path-only fallback\n }));\n return { list, byExpr };\n }\n\n // friendly label for a field, given its helper + path\n function fieldLabel(catalog, helper, path) {\n const inner = helper ? helper + ' ' + path : path;\n return (catalog && (catalog.byExpr[inner] || catalog.byExpr[path])) || humanize(path);\n }\n\n function FieldPicker({ catalog, rect, current, onPick, onClose }) {\n const [q, setQ] = useState('');\n const ref = useRef(null);\n\n useEffect(() => {\n const onDoc = (e) => { if (ref.current && !ref.current.contains(e.target)) onClose(); };\n const onKey = (e) => { if (e.key === 'Escape') { e.preventDefault(); onClose(); } };\n document.addEventListener('mousedown', onDoc, true);\n document.addEventListener('keydown', onKey, true);\n return () => { document.removeEventListener('mousedown', onDoc, true); document.removeEventListener('keydown', onKey, true); };\n }, [onClose]);\n\n const W = 288, MAXH = 380;\n let left = Math.min(rect.left, window.innerWidth - W - 12);\n left = Math.max(12, left);\n let top = rect.bottom + 6;\n if (top + MAXH > window.innerHeight - 12) top = Math.max(12, rect.top - MAXH - 6);\n\n const ql = q.trim().toLowerCase();\n const grouped = [];\n const idx = {};\n catalog.list.forEach(it => {\n if (ql && !(it.label.toLowerCase().includes(ql) || it.group.toLowerCase().includes(ql) || it.expr.toLowerCase().includes(ql))) return;\n if (!(it.group in idx)) { idx[it.group] = grouped.length; grouped.push({ group: it.group, items: [] }); }\n grouped[idx[it.group]].items.push(it);\n });\n\n return (\n <div className=\"pb-fp\" ref={ref} style={{ left, top, width: W, maxHeight: MAXH }}>\n <div className=\"pb-fp-head\">\n <Ic k=\"search\" />\n <input autoFocus value={q} onChange={e => setQ(e.target.value)} placeholder=\"Find a field…\" />\n </div>\n <div className=\"pb-fp-list\">\n {grouped.length === 0 && <div className=\"pb-fp-empty\">No matching fields</div>}\n {grouped.map(({ group, items }) => (\n <div key={group} className=\"pb-fp-grp\">\n <div className=\"pb-fp-grp-h\">{group}</div>\n {items.map((it, i) => (\n <button key={i} className={`pb-fp-item ${it.expr === current ? 'is-current' : ''}`} onClick={() => onPick(it.tag)}>\n <span className=\"pb-fp-item-l\">{it.label}</span>\n {it.expr === current && <Ic k=\"check\" />}\n </button>\n ))}\n </div>\n ))}\n </div>\n <div className=\"pb-fp-foot\">Filled in automatically with real data when the document is sent.</div>\n </div>\n );\n }\n\n export const PBPicker = { FieldPicker, buildFieldCatalog, fieldLabel, humanize };\n\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\n\n/* ─────────────────────────────────────────────────────────────\n ERPForce PDF Builder — Handlebars-lite template engine\n Supports:\n {{ path.to.value }} interpolation (HTML-escaped)\n {{ helper arg }} helper call: money, date, qty, pct, upper, lower\n {{{ raw }}} unescaped interpolation\n {{#each items}} … {{/each}} loops · this, @index, @number(1-based), @first, @last, ../parent\n {{#if path}} … {{else}} … {{/if}}\n {{#unless path}} … {{/unless}}\n Exposes export const PBEngine = { render, listVars }\n ───────────────────────────────────────────────────────────── */\n\n const esc = (s) => String(s == null ? '' : s)\n .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\n\n // ── helpers ───────────────────────────────────────────────\n const HELPERS = {\n money(v, ctx) {\n const n = Number(v);\n if (isNaN(n)) return esc(v);\n const cur = (ctx.root && ctx.root.currency) || '';\n const s = n.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n return (cur ? cur + ' ' : '') + s;\n },\n num(v) { const n = Number(v); return isNaN(n) ? esc(v) : n.toLocaleString('en-US'); },\n qty(v) { const n = Number(v); return isNaN(n) ? esc(v) : (Number.isInteger(n) ? n.toLocaleString('en-US') : n.toLocaleString('en-US', { maximumFractionDigits: 3 })); },\n pct(v) { const n = Number(v); return isNaN(n) ? esc(v) : n.toLocaleString('en-US', { maximumFractionDigits: 2 }) + '%'; },\n upper(v) { return esc(String(v == null ? '' : v).toUpperCase()); },\n lower(v) { return esc(String(v == null ? '' : v).toLowerCase()); },\n };\n\n // ── path resolution against a scope stack ─────────────────\n function resolve(path, scope) {\n if (path == null) return undefined;\n path = path.trim();\n if (path[0] === '@') return scope.locals ? scope.locals[path.slice(1)] : undefined;\n let ctx = scope;\n while (path.indexOf('../') === 0) { ctx = ctx.parent || ctx; path = path.slice(3); }\n if (path === 'this' || path === '.') return ctx.this;\n let parts = path.split('.');\n let base;\n if (parts[0] === 'this') { base = ctx.this; parts = parts.slice(1); }\n else {\n // resolve against current context first, then fall back to root\n base = ctx.this;\n if (base == null || typeof base !== 'object' || !(parts[0] in base)) base = ctx.root;\n }\n let val = base;\n for (const p of parts) { if (val == null) return undefined; val = val[p]; }\n return val;\n }\n\n function truthy(v) {\n if (Array.isArray(v)) return v.length > 0;\n return !!v;\n }\n\n // ── evaluate a {{ ... }} mustache expression ──────────────\n function evalMustache(expr, scope, raw) {\n const tokens = expr.trim().split(/\\s+/);\n if (tokens.length >= 2 && HELPERS[tokens[0]]) {\n const val = resolve(tokens[1], scope);\n const out = HELPERS[tokens[0]](val, { root: scope.root });\n return out; // helpers already escape where needed\n }\n const v = resolve(tokens[0], scope);\n const s = v == null ? '' : v;\n return raw ? String(s) : esc(s);\n }\n\n // ── tokenize into text / mustache / block-open / block-close\n function tokenize(tpl) {\n const re = /\\{\\{([#\\/]?)\\s*([^}]*?)\\s*\\}\\}|\\{\\{\\{\\s*([^}]*?)\\s*\\}\\}\\}/g;\n const out = [];\n let last = 0, m;\n // handle triple first by a combined regex: detect {{{ }}}\n const tripleRe = /\\{\\{\\{\\s*([^}]+?)\\s*\\}\\}\\}|\\{\\{([#\\/]?)\\s*([^}]*?)\\s*\\}\\}/g;\n while ((m = tripleRe.exec(tpl))) {\n if (m.index > last) out.push({ t: 'text', v: tpl.slice(last, m.index) });\n if (m[1] !== undefined && m[0].slice(0, 3) === '{{{') {\n out.push({ t: 'mustache', v: m[1], raw: true });\n } else {\n const sigil = m[2], body = m[3];\n if (sigil === '#') out.push({ t: 'open', v: body });\n else if (sigil === '/') out.push({ t: 'close', v: body });\n else if (body === 'else') out.push({ t: 'else' });\n else out.push({ t: 'mustache', v: body, raw: false });\n }\n last = tripleRe.lastIndex;\n }\n if (last < tpl.length) out.push({ t: 'text', v: tpl.slice(last) });\n return out;\n }\n\n // ── parse tokens into an AST ──────────────────────────────\n function parse(tokens) {\n let i = 0;\n function parseList(stopWords) {\n const nodes = [];\n while (i < tokens.length) {\n const tk = tokens[i];\n if (tk.t === 'close') {\n return nodes;\n }\n if (tk.t === 'else') return nodes;\n if (tk.t === 'open') {\n const head = tk.v.trim().split(/\\s+/);\n const kind = head[0]; const arg = head[1];\n i++;\n const body = parseList();\n let elseBody = null;\n if (tokens[i] && tokens[i].t === 'else') { i++; elseBody = parseList(); }\n // consume close\n if (tokens[i] && tokens[i].t === 'close') i++;\n nodes.push({ t: 'block', kind, arg, body, elseBody });\n } else {\n nodes.push(tk); i++;\n }\n }\n return nodes;\n }\n return parseList();\n }\n\n // ── render AST ────────────────────────────────────────────\n function renderNodes(nodes, scope) {\n let out = '';\n for (const n of nodes) {\n if (n.t === 'text') out += n.v;\n else if (n.t === 'mustache') out += evalMustache(n.v, scope, n.raw);\n else if (n.t === 'block') {\n if (n.kind === 'each') {\n const arr = resolve(n.arg, scope);\n if (Array.isArray(arr) && arr.length) {\n arr.forEach((item, idx) => {\n const child = {\n this: item, parent: scope, root: scope.root,\n locals: { index: idx, number: idx + 1, first: idx === 0, last: idx === arr.length - 1 },\n };\n out += renderNodes(n.body, child);\n });\n } else if (n.elseBody) out += renderNodes(n.elseBody, scope);\n } else if (n.kind === 'if') {\n if (truthy(resolve(n.arg, scope))) out += renderNodes(n.body, scope);\n else if (n.elseBody) out += renderNodes(n.elseBody, scope);\n } else if (n.kind === 'unless') {\n if (!truthy(resolve(n.arg, scope))) out += renderNodes(n.body, scope);\n else if (n.elseBody) out += renderNodes(n.elseBody, scope);\n }\n }\n }\n return out;\n }\n\n function render(tpl, data) {\n try {\n const ast = parse(tokenize(tpl));\n const scope = { this: data, parent: null, root: data, locals: {} };\n return { html: renderNodes(ast, scope), error: null };\n } catch (e) {\n return { html: '<div style=\"padding:20px;color:#b4282d;font-family:monospace;font-size:12px\">Template error: ' + esc(e.message) + '</div>', error: e.message };\n }\n }\n\n // collect every {{ }} variable path used (for validation / highlighting)\n function listVars(tpl) {\n const set = new Set();\n tokenize(tpl).forEach(t => {\n if (t.t === 'mustache') { const p = t.v.trim().split(/\\s+/); set.add(p[p.length > 1 ? 1 : 0]); }\n if (t.t === 'open') { const p = t.v.trim().split(/\\s+/); if (p[1]) set.add(p[1]); }\n });\n return [...set];\n }\n\n export const PBEngine = { render, listVars, HELPERS };\n\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport {\n Box,\n Paper,\n IconButton,\n FormControl,\n MenuItem,\n Tooltip,\n} from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { Save } from '@/components/icons';\nimport Typography from '@/components/typography/typography';\nimport { Ic } from '../engine/icons';\n\nfunction SimpleColumnsEditor({ tableData, setTableData, placeholders }: { tableData: any, setTableData: any, placeholders: any[] }) {\n const patch = (i: number, p: any) => {\n const newCols = (tableData.columns || []).map((c: any, j: number) => j === i ? { ...c, ...p } : c);\n setTableData({ ...tableData, columns: newCols });\n };\n const move = (i: number, d: number) => {\n const newCols = [...tableData.columns];\n const j = i + d;\n if (j < 0 || j >= newCols.length) return;\n [newCols[i], newCols[j]] = [newCols[j], newCols[i]];\n setTableData({ ...tableData, columns: newCols });\n };\n const remove = (i: number) => {\n const newCols = tableData.columns.filter((_: any, j: number) => j !== i);\n setTableData({ ...tableData, columns: newCols });\n };\n const add = () => {\n const newId = 'col' + Math.random().toString(36).slice(2, 8);\n setTableData({ ...tableData, columns: [...(tableData.columns || []), { id: newId, header: 'New column', align: 'l' }] });\n };\n\n const bind = (i: number, val: string) => {\n const colId = tableData.columns[i].id;\n const newRows = [...(tableData.rows || [])];\n if (newRows.length === 0) newRows.push({});\n newRows[0] = { ...newRows[0], [colId]: val };\n setTableData({ ...tableData, rows: newRows });\n };\n\n const setAlign = (i: number, alignVal: string) => {\n patch(i, { align: alignVal });\n };\n\n const opts = [...placeholders.map(p => ({ v: p.value, label: p.label })), { v: '__custom', label: 'Custom field…' }];\n\n return (\n <div className=\"cx-cols\">\n {tableData.columns?.map((col: any, i: number) => {\n const boundVal = tableData.rows?.[0]?.[col.id] || '';\n const alignVal = col.align || 'l';\n return (\n <div className=\"cx-col\" key={col.id}>\n <div className=\"cx-col-top\">\n <span className=\"cx-grip\"><Ic k=\"grip\" /></span>\n <input\n className=\"cx-input cx-col-lbl\"\n value={col.header || ''}\n onChange={e => patch(i, { header: e.target.value })}\n placeholder=\"Column header\"\n />\n <div className=\"cx-item-move\">\n <button onClick={() => move(i, -1)} disabled={i === 0} title=\"Move left\"><Ic k=\"arrowUp\" /></button>\n <button onClick={() => move(i, 1)} disabled={i === (tableData.columns || []).length - 1} title=\"Move right\"><Ic k=\"arrowDn\" /></button>\n <button className=\"cx-item-del\" onClick={() => remove(i)} disabled={(tableData.columns || []).length <= 1} title=\"Remove column\"><Ic k=\"trash\" /></button>\n </div>\n </div>\n <div className=\"cx-col-bind\">\n <select\n className=\"cx-select\"\n value={boundVal}\n onChange={e => bind(i, e.target.value)}\n >\n <option value=\"\">Select data source...</option>\n {opts.map(o => <option key={o.v} value={o.v}>{o.label}</option>)}\n </select>\n <div className=\"cx-seg \">\n <button className={alignVal === 'l' ? 'is-active' : ''} onClick={() => setAlign(i, 'l')} title=\"L\">L</button>\n <button className={alignVal === 'r' ? 'is-active' : ''} onClick={() => setAlign(i, 'r')} title=\"R\">R</button>\n </div>\n </div>\n </div>\n );\n })}\n <button className=\"cx-add\" onClick={add}><Ic k=\"plus\" />Add column</button>\n </div>\n );\n}\n\n// Import sub-components\nimport TextControls from './controllers/TextControls';\nimport ButtonControls from './controllers/ButtonControls';\nimport ImageControls from './controllers/ImageControls';\nimport DividerControls from './controllers/DividerControls';\nimport TableControls from './controllers/TableControls';\nimport SignatureControls from './controllers/SignatureControls';\nimport CodeControls from './controllers/CodeControls';\nimport Select from '@/components/select/select';\nimport { EnhancedSectionData, ElementType } from '../types/editor';\nimport { initialStyles } from '../utils/constant';\nimport { extractStyles, generateInlineStyles, getInitialSectionData, applyOpacityToColor } from '../utils/common';\n// import { useCKEditorStyleExtractor } from '../utils/style-extractor';\n\n// Shared types for SectionFormatPanel and sub-components\nexport interface TableColumn {\n id: string;\n header: string;\n placeholder?: string;\n}\n\nexport interface TableRow {\n [key: string]: string | number | boolean;\n}\n\nexport interface CellMerge {\n section: 'thead' | 'tbody';\n rowStart: number;\n rowEnd: number;\n colStart: number;\n colEnd: number;\n value: string;\n}\n\nexport interface TableData {\n name?: string; // Added name property for #each iteration\n columns: TableColumn[];\n rows: TableRow[];\n border: boolean;\n mergedCells?: CellMerge[];\n}\n\ninterface SectionData {\n type: 'text' | 'text-block' | 'heading' | 'heading-2' | 'heading-3' | 'heading-4' | 'buttons' | 'image' | 'divider' | 'table' | 'signature' | 'qr-code' | 'bar-code';\n content: string;\n attributes?: {\n styles?: any;\n placeholders?: Record<string, string>;\n tableData?: TableData;\n [key: string]: any;\n };\n}\n\ninterface SectionFormatPanelProps {\n section: SectionData | undefined;\n onClose: () => void;\n onUpdate: (data: Partial<EnhancedSectionData>) => void;\n placeholders: Record<string, any>[];\n handleSave?: () => void;\n isEmbedded?: boolean;\n hidePresetSelector?: boolean;\n}\n\nconst sectionTypes = ['text', 'text-block', 'heading', 'heading-2', 'heading-3', 'heading-4', 'buttons', 'image', 'divider', 'table', 'signature', 'qr-code', 'bar-code']\n\nconst SectionFormatPanel: React.FC<SectionFormatPanelProps> = ({\n section,\n onClose,\n onUpdate,\n placeholders,\n handleSave,\n isEmbedded = false,\n hidePresetSelector = false\n}) => {\n // const { applyStylesToHtml } = useCKEditorStyleExtractor()\n // const [plainContent, setPlainContent] = useState('');\n const sectionType = useMemo(() => section?.type || 'text', [section?.type]);\n const content = useMemo(() => section?.content || 'text', [section?.content]);\n const [formatOptions, setFormatOptions] = useState<string[]>([]);\n const [rowLevel, setRowLevel] = useState<boolean>((section?.attributes as any)?.rowLevel || false);\n const [tableData, setTableData] = useState<TableData>({\n name: '', // Initialize with empty name\n columns: [\n { id: 'col1', header: 'Column 1' },\n { id: 'col2', header: 'Column 2' },\n { id: 'col3', header: 'Column 3' }\n ],\n rows: [\n { col1: '', col2: '', col3: '' }\n ],\n border: true,\n mergedCells: []\n });\n const [isInitialLoad, setIsInitialLoad] = useState(true);\n const [selectedContentAttrObj, setSelectedContentAttrObj] = useState(extractStyles(content, section?.type));\n\n useEffect(() => {\n if (section && section.type === 'table') {\n // If section has stored table data, use it\n if (section.attributes?.tableData) {\n setTableData(section.attributes.tableData);\n } else {\n // Try to extract table data from HTML content\n const extractedTableData = extractTableDataFromHTML(section.content);\n if (extractedTableData) {\n setTableData(extractedTableData);\n setRowLevel((section?.attributes as any)?.rowLevel || false);\n }\n }\n }\n }, []);\n\n useEffect(() => {\n if (section && !isInitialLoad) {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = section.content;\n const text = tempDiv.textContent || '';\n // setPlainContent(text);\n setSelectedContentAttrObj(extractStyles(section.content, section?.type)?.styles)\n setIsInitialLoad(false);\n }\n }, [section]);\n\n // Extract table data from HTML content\n const extractTableDataFromHTML = (htmlContent: string): TableData | null => {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(htmlContent, 'text/html');\n const table = doc.querySelector('table');\n\n if (!table) return null;\n\n const headerRows = table.querySelectorAll('thead tr');\n const bodyRows = table.querySelectorAll('tbody tr');\n\n if (headerRows.length === 0) return null;\n\n // Extract columns from the first header row\n const headerCells = headerRows[0].querySelectorAll('th');\n const columns: TableColumn[] = Array.from(headerCells).map((th, index) => ({\n id: `col${index + 1}`,\n header: th.textContent?.trim() || `Column ${index + 1}`\n }));\n\n // Extract merged cells from thead\n const mergedCells: CellMerge[] = [];\n Array.from(headerRows).forEach((row, rowIndex) => {\n const cells = row.querySelectorAll('th');\n cells.forEach((cell, colIndex) => {\n const rowSpan = parseInt(cell.getAttribute('rowspan') || '1');\n const colSpan = parseInt(cell.getAttribute('colspan') || '1');\n if (rowSpan > 1 || colSpan > 1) {\n mergedCells.push({\n section: 'thead',\n rowStart: rowIndex,\n rowEnd: rowIndex + rowSpan - 1,\n colStart: colIndex,\n colEnd: colIndex + colSpan - 1,\n value: cell.textContent?.trim() || ''\n });\n }\n });\n });\n\n // Extract rows\n const rows: TableRow[] = Array.from(bodyRows).map(row => {\n const cells = row.querySelectorAll('td');\n const rowData: TableRow = {};\n\n cells.forEach((cell, index) => {\n if (index < columns.length) {\n rowData[columns[index].id] = cell.textContent?.trim() || '';\n }\n });\n\n return rowData;\n });\n\n // Extract merged cells from tbody\n Array.from(bodyRows).forEach((row, rowIndex) => {\n const cells = row.querySelectorAll('td');\n cells.forEach((cell, colIndex) => {\n const rowSpan = parseInt(cell.getAttribute('rowspan') || '1');\n const colSpan = parseInt(cell.getAttribute('colspan') || '1');\n if (rowSpan > 1 || colSpan > 1) {\n mergedCells.push({\n section: 'tbody',\n rowStart: rowIndex,\n rowEnd: rowIndex + rowSpan - 1,\n colStart: colIndex,\n colEnd: colIndex + colSpan - 1,\n value: cell.textContent?.trim() || ''\n });\n }\n });\n });\n\n return {\n name: '', // Default empty name\n columns,\n rows: rows.length > 0 ? rows : [{}],\n border: true,\n mergedCells\n };\n } catch (error) {\n return null;\n }\n };\n\n // Get placeholder value for table generation\n const getPlaceholderValue = (placeholderKey: string): string => {\n const placeholder = placeholders.find(p => p.value === placeholderKey || p.id === placeholderKey || p.field === placeholderKey);\n if (!placeholder) return `{{${placeholderKey}}}`;\n\n // Return actual value or generate sample based on type\n if (typeof placeholder.actualValue !== 'undefined') {\n return String(placeholder.actualValue);\n }\n\n switch (placeholder.type) {\n case 'date':\n return new Date().toLocaleDateString();\n case 'datetime':\n return new Date().toLocaleString();\n case 'number':\n return '123';\n case 'currency':\n return '$1,234.56';\n case 'email':\n return 'example@domain.com';\n case 'phone':\n return '+1 (555) 123-4567';\n case 'url':\n return 'https://example.com';\n default:\n const key = placeholder.value || placeholder.id || placeholder.field;\n return `{{${key}}}` || placeholder.label;\n }\n };\n\n const generateContent = useCallback((attrs?: Record<any, any>): string => {\n const { src, alt, styles: eStyles, text, placeholder, placeholders: tPlaceholders } = attrs || section?.attributes || selectedContentAttrObj || {}\n const styles = {\n ...initialStyles[sectionType],\n ...eStyles,\n ...selectedContentAttrObj?.styles,\n ...attrs?.styles\n }\n\n const inlineStyles = generateInlineStyles(styles);\n\n // For buttons, images, dividers, and codes - use the existing logic\n if (sectionType === 'buttons') {\n return `<a href=\"${attrs?.href || '#'}\" target=\"_blank\" style=\"${inlineStyles}; display: flex !important; text-decoration: none !important; box-sizing: border-box !important; justify-content: center !important; align-items: center !important; width: 100% !important; height: 100% !important; text-align: center !important; word-break: break-word !important; white-space: normal !important;\">${text || 'Button text'}</a>`;\n } else if (sectionType === 'image') {\n let imgInlineStyles: string = inlineStyles;\n if (styles?.is_bordered) {\n styles.padding = '10px';\n imgInlineStyles = generateInlineStyles(styles);\n } else {\n styles.padding = '0';\n imgInlineStyles = generateInlineStyles(styles);\n }\n return `<img src=\"${src || ''}\" alt=\"${alt || ''}\" style=\"${imgInlineStyles}\" />`;\n } else if (sectionType === 'divider') {\n return `<hr style=\"${inlineStyles}\" />`;\n } else if (sectionType === 'table') {\n const { border, borderStyle, borderColor, height, opacity, ...rest } = styles;\n const tableOpacity = typeof opacity === 'number' ? opacity : 1;\n const filteredStyles = { ...(styles.is_bordered ? styles : rest) };\n delete filteredStyles.height;\n delete (filteredStyles as any).opacity;\n const tInlineStyles = generateInlineStyles(filteredStyles);\n const tHeadRowHeight = Number(styles.tHead?.rowHeight) || 38;\n const tBodyRowHeight = Number(styles.tBody?.rowHeight) || 38;\n\n const rawHeadBg = styles.tHead?.backgroundColor || 'rgba(245, 245, 245, 0.75)';\n const headBgColor = applyOpacityToColor(rawHeadBg, tableOpacity);\n\n const hasZebra = !!styles.tBody?.zebraStriping;\n const rawAltColor = styles.tBody?.alternateRowColor || '#f9f9f9';\n const altColor = applyOpacityToColor(rawAltColor, tableOpacity);\n\n const rawMainBg = styles.tBody?.backgroundColor || '#ffffff';\n const mainBgColor = applyOpacityToColor(rawMainBg, tableOpacity);\n\n const thUserFontSize = Number(styles.tHead?.fontSize) || 14;\n const thBasePadding = typeof styles.thCells?.padding === 'number' ? styles.thCells.padding : 8;\n const thAvailH = Math.max(4, tHeadRowHeight - 1);\n const effectiveThFontSize = Math.min(thUserFontSize, Math.max(8, thAvailH - 2));\n const thRemainingV = Math.max(0, thAvailH - effectiveThFontSize);\n const thVPadding = Math.max(0, Math.min(thBasePadding, Math.floor(thRemainingV / 2)));\n const thHPadding = thBasePadding;\n const thWhiteSpace = tHeadRowHeight < 36 ? 'nowrap' : 'normal';\n\n const tbUserFontSize = Number(styles.tBody?.fontSize) || 14;\n const tbBasePadding = typeof styles.tbCells?.padding === 'number' ? styles.tbCells.padding : 8;\n const tbAvailH = Math.max(4, tBodyRowHeight - 1);\n const effectiveTbFontSize = Math.min(tbUserFontSize, Math.max(8, tbAvailH - 2));\n const tbRemainingV = Math.max(0, tbAvailH - effectiveTbFontSize);\n const tbVPadding = Math.max(0, Math.min(tbBasePadding, Math.floor(tbRemainingV / 2)));\n const tbHPadding = tbBasePadding;\n const tbWhiteSpace = tBodyRowHeight < 36 ? 'nowrap' : 'normal';\n\n const { padding: _thPad, ...thCellsRest } = styles.thCells || {};\n const { padding: _tbPad, ...tbCellsRest } = styles.tbCells || {};\n\n const { rowHeight: _thRH, backgroundColor: _thBg, ...tHeadRest } = styles.tHead || {};\n const { rowHeight: _tbRH, backgroundColor: _tbBg, ...tBodyRest } = styles.tBody || {};\n\n const tHeadInlineStyles: string = generateInlineStyles(tHeadRest);\n const tBodyInlineStyles: string = generateInlineStyles(tBodyRest);\n const thCellInlineStyles: string = generateInlineStyles({\n ...tHeadRest,\n ...thCellsRest,\n ...(styles.is_bordered ? { border, borderStyle, borderColor } : {})\n });\n const { backgroundColor: _tbBg2, ...tBodyRestNoBg } = tBodyRest;\n const tbCellInlineStyles: string = generateInlineStyles({\n ...tBodyRestNoBg,\n ...tbCellsRest,\n ...(styles.is_bordered ? { border, borderStyle, borderColor } : {})\n });\n\n // Helper function to check if a cell is part of a merge\n const getCellMergeInfo = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\n return tableData.mergedCells?.find(m =>\n m.section === section &&\n rowIndex >= m.rowStart && rowIndex <= m.rowEnd &&\n colIndex >= m.colStart && colIndex <= m.colEnd\n );\n };\n\n // Generate header row with merge support\n const headerCellsHTML = (tableData.columns || []).map((column, colIndex) => {\n const mergeInfo = getCellMergeInfo('thead', 0, colIndex);\n\n if (mergeInfo && (colIndex !== mergeInfo.colStart)) {\n return '';\n }\n\n const mergeAttributes = mergeInfo ?\n ` rowspan=\"${mergeInfo.rowEnd - mergeInfo.rowStart + 1}\" colspan=\"${mergeInfo.colEnd - mergeInfo.colStart + 1}\"` : '';\n\n const cellValue = mergeInfo ? mergeInfo.value : column.header;\n const alignStyle = column.align === 'r' ? 'text-align: right;' : column.align === 'l' ? 'text-align: left;' : '';\n\n return `<th style=\"${thCellInlineStyles}${thCellInlineStyles.endsWith(';') ? '' : ';'}${alignStyle}; vertical-align: middle; height: ${tHeadRowHeight}px; max-height: ${tHeadRowHeight}px; box-sizing: border-box; padding: ${thVPadding}px ${thHPadding}px !important; font-size: ${effectiveThFontSize}px !important; line-height: 1 !important; overflow: hidden; text-overflow: ellipsis; white-space: ${thWhiteSpace}; background-color: ${headBgColor} !important;\"${mergeAttributes}>${cellValue}</th>`;\n }).filter(cell => cell !== '').join('');\n\n // Generate table body rows\n const rowsToRender = (tableData?.rows && tableData.rows.length > 0) ? tableData.rows : [{}];\n const tableRowsHTML = rowsToRender.map((row, rowIndex) => {\n const rowBgColor = hasZebra && rowIndex % 2 === 1 ? altColor : mainBgColor;\n const rowStyleAddition = `; background-color: ${rowBgColor} !important;`;\n\n const cellsHTML = (tableData.columns || []).map((column, colIndex) => {\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\n\n if (mergeInfo && (rowIndex !== mergeInfo.rowStart || colIndex !== mergeInfo.colStart)) {\n return '';\n }\n\n let cellValue = row[column.id] || '';\n const keys = Object.keys(row || {});\n if (keys.includes(`${column.id}_static`)) {\n cellValue = row[`${column.id}_static`] || '';\n }\n if (!cellValue && tPlaceholders?.[column.id]) {\n cellValue = getPlaceholderValue(tPlaceholders[column.id]);\n }\n\n const mergeAttributes = mergeInfo ?\n ` rowspan=\"${mergeInfo.rowEnd - mergeInfo.rowStart + 1}\" colspan=\"${mergeInfo.colEnd - mergeInfo.colStart + 1}\"` : '';\n\n let finalCellValue = mergeInfo ? mergeInfo.value : cellValue;\n if (typeof finalCellValue === 'string' && finalCellValue.includes('{{') && finalCellValue.includes('}}')) {\n finalCellValue = finalCellValue.replace(/\\{\\{([^}]+)\\}\\}/g, '<span class=\"cx-ph-tag\">{{$1}}</span>');\n }\n const alignStyle = column.align === 'r' ? 'text-align: right;' : column.align === 'l' ? 'text-align: left;' : '';\n\n return `<td style=\"${tbCellInlineStyles}${tbCellInlineStyles.endsWith(';') ? '' : ';'}${alignStyle}; vertical-align: middle; height: ${tBodyRowHeight}px; max-height: ${tBodyRowHeight}px; box-sizing: border-box; padding: ${tbVPadding}px ${tbHPadding}px !important; font-size: ${effectiveTbFontSize}px !important; line-height: 1 !important; overflow: hidden; text-overflow: ellipsis; white-space: ${tbWhiteSpace}; background-color: ${rowBgColor} !important;${rowStyleAddition}\"${mergeAttributes}>${finalCellValue}</td>`;\n }).filter(cell => cell !== '').join('');\n\n return `<tr style=\"${tBodyInlineStyles}; height: ${tBodyRowHeight}px; max-height: ${tBodyRowHeight}px; line-height: 1;${rowStyleAddition}\">${cellsHTML}</tr>`;\n }).join('');\n\n return `<table style=\"${tInlineStyles}; width: 100%; border-collapse: collapse; height: auto !important; table-layout: fixed; margin: 0 !important; background-color: transparent !important;\"><thead><tr style=\"${tHeadInlineStyles}; background-color: ${headBgColor} !important; height: ${tHeadRowHeight}px; max-height: ${tHeadRowHeight}px; line-height: 1;\">${headerCellsHTML}</tr></thead><tbody>${tableRowsHTML}</tbody></table>`.trim();\n } else if (sectionType === 'qr-code' || sectionType === 'bar-code') {\n return `<div style=\"${inlineStyles}\">${placeholder}</div>`;\n } else if (sectionType === 'signature') {\n const signatureText = (attrs || section?.attributes)?.signatureText || section?.attributes?.signatureText || 'Signature';\n return `<svg viewBox=\"0 0 300 80\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http://www.w3.org/2000/svg\"><text x=\"50%\" y=\"55%\" dominant-baseline=\"middle\" text-anchor=\"middle\" fill=\"${(attrs || section?.attributes)?.styles?.color || '#333333'}\" style=\"${inlineStyles}\">${signatureText}</text></svg>`;\n }\n\n // For text-based sections, parse and apply styles to existing HTML tags\n const hasHtmlTags = /<\\/?[a-z][\\s\\S]*>/i.test(content);\n\n if (!hasHtmlTags) {\n // If no HTML tags, wrap according to section type\n switch (sectionType) {\n case 'text':\n case 'text-block':\n return `<p style=\"${inlineStyles}\">${content}</p>`;\n case 'heading':\n return `<h1 style=\"${inlineStyles}\">${content}</h1>`;\n case 'heading-2':\n return `<h2 style=\"${inlineStyles}\">${content}</h2>`;\n case 'heading-3':\n return `<h3 style=\"${inlineStyles}\">${content}</h3>`;\n case 'heading-4':\n return `<h4 style=\"${inlineStyles}\">${content}</h4>`;\n case 'signature':\n return `<svg viewBox=\"0 0 300 60\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http://www.w3.org/2000/svg\"><text x=\"50%\" y=\"50%\" dominant-baseline=\"middle\" text-anchor=\"middle\" fill=\"currentColor\" style=\"${inlineStyles}\">${content}</text></svg>`;\n default:\n return `<p style=\"${inlineStyles}\">${content}</p>`;\n }\n } else {\n // Create a temporary DOM element to manipulate the HTML\n const parser = new DOMParser();\n const doc = parser.parseFromString(`<div>${content}</div>`, 'text/html');\n const container = doc.body.firstChild as Element;\n\n // Process all child elements\n if (container && container.nodeType === Node.ELEMENT_NODE) {\n const elements = container.querySelectorAll('*');\n\n elements.forEach(element => {\n // Skip processing script tags or other special elements\n if (element.tagName === 'SCRIPT' || element.tagName === 'STYLE') {\n return;\n }\n\n // Get existing style and merge with new style\n const existingStyle = element.getAttribute('style') || '';\n\n // Extract properties from existing style\n const existingProps = {};\n existingStyle.split(';').forEach(prop => {\n const [key, value] = prop.split(':').map(item => item.trim());\n if (key && value) {\n existingProps[key] = value;\n }\n });\n\n // Parse the base style and prepare for merging\n const newStyleProps = {};\n inlineStyles.split(';').forEach(prop => {\n const [key, value] = prop.split(':').map(item => item.trim());\n if (key && value) {\n newStyleProps[key] = value;\n }\n });\n\n // Additional styles based on tag type\n if (element.tagName === 'P' || element.tagName === 'DIV') {\n newStyleProps['line-height'] = '1.5';\n } else if (['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(element.tagName)) {\n newStyleProps['line-height'] = '1.2';\n newStyleProps['margin'] = '0.5em 0';\n }\n\n // Merge styles, new styles override existing ones\n const mergedProps = { ...existingProps, ...newStyleProps };\n\n // Convert back to style string\n const mergedStyle = Object.entries(mergedProps)\n .filter(([key, value]) => key && value)\n .map(([key, value]) => `${key}: ${value}`)\n .join('; ');\n\n element.setAttribute('style', mergedStyle);\n });\n\n return container.innerHTML;\n }\n\n // Fallback to original content if parsing fails\n return content;\n }\n }, [JSON.stringify(section)]);\n\n // Local save function - renamed to avoid conflict with handleSave prop\n const saveSection = () => {\n const updatedContent = generateContent();\n\n const updatedSection = {\n content: updatedContent,\n type: sectionType as ElementType,\n rowLevel: rowLevel,\n name: tableData.name || '',\n attributes: {\n ...(section?.attributes || {}),\n ...(sectionType === 'table' ? { tableData } : {})\n },\n is_edited_from_source: (section as EnhancedSectionData)?.is_edited_from_source || false\n };\n\n onUpdate(updatedSection);\n };\n useEffect(() => {\n saveSection();\n }, [tableData])\n /**\n * Updates section attributes and triggers content regeneration.\n * Optimized to avoid unnecessary property spreading and glitches.\n */\n const updateAttrs = (prop: Record<string, any>) => {\n if (!section) return;\n\n // Merge styles safely\n const mergedStyles = {\n ...(section.attributes?.styles || {}),\n ...(prop.styles || {})\n };\n\n // Merge attributes, giving priority to new props\n const mergedAttributes = {\n ...(section.attributes || {}),\n ...prop,\n styles: mergedStyles,\n ...(sectionType === 'table' ? { tableData } : {})\n };\n\n // Prepare updated section object (exclude 'id' if present)\n const { id, ...sectionRest } = section as any;\n\n // Generate updated content based on new attributes\n const updatedContent = generateContent(mergedAttributes);\n setSelectedContentAttrObj(mergedAttributes)\n\n // Sync image/buttons/table dimension updates from sidebar to the canvas wrapper\n const dimensionUpdates: any = {};\n if (sectionType === 'image' || sectionType === 'buttons') {\n if (typeof mergedAttributes.styles?.height === 'number') {\n dimensionUpdates.height = mergedAttributes.styles.height;\n }\n\n if (mergedAttributes.styles?.fullWidth && sectionType === 'image') {\n dimensionUpdates.width = 794;\n dimensionUpdates.x = 0;\n } else if (typeof mergedAttributes.styles?.width === 'number') {\n dimensionUpdates.width = mergedAttributes.styles.width;\n }\n } else if (sectionType === 'table') {\n const tHeadH = Number(mergedAttributes.styles?.tHead?.rowHeight) || 38;\n const tBodyH = Number(mergedAttributes.styles?.tBody?.rowHeight) || 38;\n const numRows = (tableData?.rows && tableData.rows.length > 0) ? tableData.rows.length : 1;\n const calculatedH = tHeadH + (numRows * tBodyH) + 2;\n dimensionUpdates.height = Math.max(section?.height || 0, calculatedH);\n if (typeof mergedAttributes.styles?.width === 'number') {\n dimensionUpdates.width = mergedAttributes.styles.width;\n }\n }\n\n // Compose the update payload, omitting unknown properties\n onUpdate({\n ...sectionRest,\n ...dimensionUpdates,\n content: updatedContent,\n attributes: mergedAttributes\n });\n };\n\n // Update table data and trigger content regeneration\n const handleTableDataUpdate = (newTableData: TableData) => {\n setTableData(newTableData);\n\n // Trigger immediate update with new table data\n const updatedAttrs = {\n ...(section?.attributes || {}),\n tableData: newTableData\n };\n\n // const updatedContent = generateContent(updatedAttrs);\n // onUpdate({\n // ...section,\n // content: updatedContent,\n // attributes: updatedAttrs\n // });\n saveSection();\n };\n\n const handleTypeChange = (t) => {\n const dt = getInitialSectionData(t)\n\n onUpdate({\n ...section,\n ...dt\n });\n\n // Reset table data when switching types\n if (t === 'table') {\n setTableData({\n name: '', // Initialize with empty name\n columns: [\n { id: 'col1', header: 'Column 1' },\n { id: 'col2', header: 'Column 2' },\n { id: 'col3', header: 'Column 3' }\n ],\n rows: [\n { col1: '', col2: '', col3: '' }\n ],\n border: true,\n mergedCells: []\n });\n }\n }\n\n return (\n <Paper\n elevation={isEmbedded ? 0 : 3}\n sx={{\n width: isEmbedded ? '100%' : { xs: '100%', sm: 320, lg: 390 },\n height: '100%',\n overflow: 'auto',\n borderLeft: isEmbedded ? 'none' : '1px solid',\n borderColor: 'divider',\n display: 'flex',\n flexDirection: 'column',\n bgcolor: 'background.paper',\n boxShadow: 'none',\n }}\n >\n <Box\n sx={{\n display: isEmbedded ? 'none' : 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n p: 2,\n borderBottom: '1px solid',\n borderColor: 'divider',\n bgcolor: 'grey.50',\n }}\n >\n <Typography type=\"s1\" weight='bold' color='theme.neutral.1000'>\n Format {sectionType ? sectionType?.charAt(0)?.toUpperCase() + sectionType?.slice(1).replace(/-/g, ' ') : ''}\n </Typography>\n <Tooltip title=\"Save and Close\">\n <Box>\n <IconButton size=\"small\" onClick={() => {\n saveSection();\n handleSave?.();\n onClose();\n }} aria-label=\"Save\">\n <Save fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onClose} aria-label=\"Close\">\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n </Tooltip>\n </Box>\n\n <Box sx={{ p: 2, flex: 1, pb: 10, overflowY: 'auto' }}>\n {!hidePresetSelector && (\n <Box sx={{ mb: 2 }}>\n <FormControl size=\"small\" fullWidth>\n <Select\n value={section?.type}\n onChange={(e) => handleTypeChange(e.target.value)}\n renderValue={v => v ? v.charAt(0).toUpperCase() + v.slice(1).replace(/-/g, ' ') : ''}\n label='Select Preset'\n displayEmpty\n >\n {sectionTypes.map((type) => (\n <MenuItem key={type} value={type}>\n <Typography type='s4' color='theme.secondary.1000'>{type.charAt(0).toUpperCase() + type.slice(1).replace(/-/g, ' ')}</Typography>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n )}\n\n {section && (sectionType === 'text' ||\n sectionType === 'heading' ||\n sectionType === 'heading-2' ||\n sectionType === 'heading-3' ||\n sectionType === 'heading-4') && (\n <TextControls\n attrs={section?.attributes || {}}\n updateAttrs={updateAttrs}\n placeholders={placeholders || []}\n content={section.content || ''}\n updateContent={(content) => onUpdate({ ...section, content })}\n />\n )}\n {sectionType === 'buttons' && (\n <ButtonControls\n attrs={{\n ...(section?.attributes || {}),\n styles: {\n ...(section?.attributes?.styles || {}),\n width: (section as any)?.width ?? section?.attributes?.styles?.width ?? 130,\n height: (section as any)?.height ?? section?.attributes?.styles?.height ?? 40,\n }\n }}\n updateAttrs={updateAttrs}\n />\n )}\n {sectionType === 'image' && (\n <ImageControls\n attrs={{\n ...(section?.attributes || {}),\n styles: {\n ...(section?.attributes?.styles || {}),\n width: (section as any)?.width ?? section?.attributes?.styles?.width ?? 200,\n height: (section as any)?.height ?? section?.attributes?.styles?.height ?? 150,\n }\n }}\n updateAttrs={updateAttrs}\n />\n )}\n {sectionType === 'divider' && (\n <DividerControls\n attrs={section?.attributes || {}}\n updateAttrs={updateAttrs}\n />\n )}\n {sectionType === 'table' && (\n <TableControls\n key={section?.id}\n tableData={{\n ...tableData,\n columns: tableData?.columns || [],\n rows: (tableData?.rows || []).map(row => {\n const convertedRow: Record<string, string> = {};\n Object.keys(row || {}).forEach(key => {\n convertedRow[key] = String(row[key] ?? '');\n });\n return convertedRow;\n })\n }}\n setTableData={(value: any) => {\n const newValue = typeof value === 'function' ? value(tableData) : value;\n handleTableDataUpdate({\n ...newValue,\n border: tableData.border,\n name: ''\n });\n }}\n attrs={section?.attributes || {}}\n updateAttrs={updateAttrs}\n placeholders={placeholders}\n handleSave={handleSave}\n setParentRowLevel={setRowLevel}\n levelType={rowLevel}\n />\n )}\n {sectionType === 'signature' && (\n <SignatureControls\n attrs={section?.attributes || {}}\n updateAttrs={updateAttrs}\n />\n )}\n {section && (sectionType === 'qr-code' || sectionType === 'bar-code') && (\n <CodeControls\n attrs={section?.attributes || {}}\n updateAttrs={updateAttrs}\n />\n )}\n </Box>\n </Paper>\n );\n};\n\nexport default SectionFormatPanel;","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { Ic } from './icons';\nimport { STDoc } from './stationery-doc';\nimport { STStore } from './stationery-store';\nimport { getV1TemplateHeaderFooterCompanyIdHeaderFooter, patchV1TemplateHeaderFooterId, postV1TemplateHeaderFooter } from '@/api-client/api.system-feature/api';\nimport { getToken } from '@/utils/common';\nimport { DndContext, PointerSensor, useSensor, useSensors, useDroppable, DragOverlay } from '@dnd-kit/core';\nimport { getInitialSectionData, generateContentHTML } from '../utils/common';\nimport { STATIONERY_CSS } from '../utils/constant';\nimport EditorSection from '../components/EditorSection';\nimport EditorSidebar from '../components/EditorSidebar';\nimport SectionFormatPanel from '../components/SectionFormatPanel';\n\n/* ─────────────────────────────────────────────────────────────\n Stationery designer (global master header & footer)\n A focused editor for the ONE global header + footer\n that every document template inherits.\n ───────────────────────────────────────────────────────────── */\n\nconst { useState, useEffect, useRef, useCallback, useMemo } = React;\n\nconst DEFAULT_ELEMENT_SIZES: Record<string, { width: number; height: number }> = {\n text: { width: 300, height: 60 },\n 'text-block': { width: 300, height: 120 },\n heading: { width: 400, height: 60 },\n 'heading-2': { width: 400, height: 50 },\n 'heading-4': { width: 400, height: 35 },\n image: { width: 100, height: 100 },\n divider: { width: 600, height: 2 },\n spacer: { width: 600, height: 40 },\n table: { width: 600, height: 60 },\n buttons: { width: 200, height: 60 },\n 'qr-code': { width: 150, height: 150 },\n signature: { width: 300, height: 100 },\n};\n\nconst { PaperSheet, DOC_META } = STDoc;\n\nconst BRANDS = ['#DD0D1A', '#1B2C6E', '#C0392B', '#156B66', '#8a540b', '#5535B8', '#14171b'];\n\nconst VARIANT_NOTE = {\n standard: 'Logo left, company identity right. The default, balanced masthead.',\n split: 'Logo + website left, bilingual name right — mirrors the client letterhead sample.',\n centered: 'Logo and bilingual name stacked and centred.',\n compact: 'A single slim line — best for dense or continuation-heavy documents.',\n};\n\n// ── control primitives ───────────────────────────────────────\nfunction Section({ title, icon, open, onToggle, children, hint }) {\n return (\n <div className={`cx-sec ${open ? 'is-open' : ''}`}>\n <button className=\"cx-sec-h\" onClick={onToggle}>\n <span className=\"cx-sec-ic\"><Ic k={icon} /></span>\n <span className=\"cx-sec-t\">{title}</span>\n <Ic k=\"chevD\" className=\"cx-sec-chev\" />\n </button>\n {open && <div className=\"cx-sec-body\">{hint && <div className=\"cx-hint\">{hint}</div>}{children}</div>}\n </div>\n );\n}\nconst Row = ({ label, sub, children }) => (\n <div className=\"cx-row\">\n <div className=\"cx-row-l\"><span className=\"cx-row-lbl\">{label}</span>{sub && <span className=\"cx-row-sub\">{sub}</span>}</div>\n <div className=\"cx-row-c\">{children}</div>\n </div>\n);\nconst Toggle = ({ on, onChange }) => (\n <button className={`cx-switch ${on ? 'is-on' : ''}`} role=\"switch\" aria-checked={on} onClick={() => onChange(!on)}><span className=\"cx-switch-dot\" /></button>\n);\nconst Seg = ({ value, options, onChange, full }) => (\n <div className={`cx-seg ${full ? 'is-full' : ''}`}>\n {options.map(o => <button key={o.v} className={value === o.v ? 'is-active' : ''} onClick={() => onChange(o.v)}>{o.label}</button>)}\n </div>\n);\nconst Select = ({ value, options, onChange }) => (\n <select className=\"cx-select\" value={value} onChange={e => onChange(e.target.value)}>\n {options.map(o => <option key={o.v} value={o.v}>{o.label}</option>)}\n </select>\n);\nconst Range = ({ value, min, max, step, onChange, suffix }) => (\n <div className=\"cx-range\">\n <input type=\"range\" min={min} max={max} step={step || 1} value={value} onChange={e => onChange(Number(e.target.value))} />\n <span className=\"cx-range-v\">{value}{suffix || ''}</span>\n </div>\n);\nconst Text = ({ value, onChange, placeholder, area, dir }) => area\n ? <textarea className=\"cx-input cx-area\" value={value} placeholder={placeholder} onChange={e => onChange(e.target.value)} />\n : <input className=\"cx-input\" value={value} placeholder={placeholder} dir={dir} onChange={e => onChange(e.target.value)} />;\n\n\n// ── droppable zone wrapper ────────────────────────────────────\nfunction DropZone({ id, children, isActive }) {\n const { setNodeRef, isOver } = useDroppable({ id });\n return (\n <div ref={setNodeRef} style={{\n minHeight: 48,\n border: `2px dashed ${isOver || isActive ? '#2563eb' : '#d1d5db'}`,\n borderRadius: 6,\n background: isOver ? 'rgba(37,99,235,0.04)' : 'transparent',\n transition: 'border-color 0.2s, background 0.2s',\n padding: 4,\n marginTop: 4,\n }}>\n {children}\n {!children && (\n <div style={{ textAlign: 'center', color: '#9ca3af', fontSize: 11, padding: '8px 0' }}>\n Drop elements here\n </div>\n )}\n </div>\n );\n}\n\n\nfunction Rail({ m, set }) {\n const [open, setOpen] = useState({ brand: true, identity: true, header: false, footer: false, reserve: false, elements: false, page: false });\n const [logoError, setLogoError] = useState('');\n const toggle = (k) => setOpen(o => ({ ...o, [k]: !o[k] }));\n\n const setH = (p) => set(s => ({ ...s, header: { ...s.header, ...p } }));\n const setF = (p) => set(s => ({ ...s, footer: { ...s.footer, ...p } }));\n const setR = (p: any) => set((s: any) => {\n const newTop = p.top !== undefined ? p.top : (s.reserve?.top || 156);\n const newBottom = p.bottom !== undefined ? p.bottom : (s.reserve?.bottom || 120);\n\n const updatedHeader = { ...s.header, height: newTop };\n const updatedFooter = { ...s.footer, height: newBottom };\n\n // Clamp any existing sections so shrinking the space doesn't leave elements out of bounds\n const updatedSections = (s.sections || []).map((sec: any) => {\n const zoneHeight = sec.zone === 'footer' ? newBottom : newTop;\n const secHeight = sec.height || sec.attributes?.height || 40;\n const currentY = sec.y ?? sec.attributes?.y ?? 0;\n if (currentY + secHeight > zoneHeight) {\n const clampedY = Math.max(0, zoneHeight - secHeight);\n return {\n ...sec,\n y: clampedY,\n attributes: {\n ...(sec.attributes || {}),\n y: clampedY\n }\n };\n }\n return sec;\n });\n\n return {\n ...s,\n reserve: { ...s.reserve, ...p },\n header: updatedHeader,\n footer: updatedFooter,\n sections: updatedSections\n };\n });\n const pre = m.mode === 'preprinted';\n\n const setReg = (i, p) => setF({ regItems: m.footer.regItems.map((r, j) => j === i ? { ...r, ...p } : r) });\n const addReg = () => setF({ regItems: [...m.footer.regItems, { label: 'New ref', value: '' }] });\n const delReg = (i) => setF({ regItems: m.footer.regItems.filter((_, j) => j !== i) });\n\n return (\n <div className=\"cx\">\n {/* ELEMENTS */}\n <Section title=\"Elements\" icon=\"plus\" open={open.elements} onToggle={() => toggle('elements')} hint=\"Drag and drop elements into the header or footer.\">\n <div style={{ marginTop: '8px' }}>\n <EditorSidebar />\n </div>\n </Section>\n {/* BRAND COLOUR — independent of doc accent */}\n <Section title=\"Stationery brand\" icon=\"palette\" open={open.brand} onToggle={() => toggle('brand')}\n hint=\"The header rule and footer band use this colour. It is independent of each document's own accent colour.\">\n <Row label=\"Brand colour\">\n <div className=\"st-brandsw\">\n {BRANDS.map(c => <button key={c} className={`cx-swatch ${m.brand === c ? 'is-sel' : ''}`} style={{ background: c }} onClick={() => set(s => ({ ...s, brand: c }))} />)}\n <label className=\"st-swatch-custom\" title=\"Custom colour\" style={{ background: BRANDS.includes(m.brand) ? '' : m.brand }}>\n {BRANDS.includes(m.brand) && <Ic k=\"plus\" />}\n <input type=\"color\" value={m.brand} onChange={e => set(s => ({ ...s, brand: e.target.value }))} />\n </label>\n </div>\n </Row>\n </Section>\n\n {/* COMPANY IDENTITY */}\n <Section title=\"Company identity\" icon=\"bank\" open={open.identity} onToggle={() => toggle('identity')}\n hint=\"Brand-level fields shared by every document. The client supplies these once; all templates inherit them.\">\n <Row label=\"Logo\"><Toggle on={m.header.showLogo} onChange={v => setH({ showLogo: v })} /></Row>\n {m.header.showLogo && <>\n <div className=\"st-logo-up\">\n <div className=\"st-logo-up-preview\" style={{ width: 60, height: 60, overflow: 'hidden', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <img src={m.header.logoSrc || 'assets/altrad-spar-logo.png'} alt=\"\" style={{ maxWidth: '100%', maxHeight: '100%', objectFit: 'contain' }} />\n </div>\n <div className=\"st-logo-up-actions\">\n <label className=\"cx-btn cx-btn--sm\">\n <Ic k=\"image\" />{m.header.logoSrc ? 'Replace' : 'Upload logo'}\n <input type=\"file\" accept=\"image/*\" onChange={e => { const f = e.target.files[0]; if (f) { if (f.size > 300 * 1024) { setLogoError('Please select an image under 300KB.'); e.target.value = ''; return; } setLogoError(''); const r = new FileReader(); r.onload = () => setH({ logoSrc: r.result, showLogo: true }); r.readAsDataURL(f); } e.target.value = ''; }} />\n </label>\n {m.header.logoSrc && <button className=\"cx-btn cx-btn--sm cx-btn--ghost\" onClick={() => setH({ logoSrc: null })}><Ic k=\"undo\" />Default</button>}\n </div>\n {logoError && <div style={{ color: '#d32f2f', fontSize: '12px', marginTop: '4px' }}>{logoError}</div>}\n </div>\n </>}\n <div className=\"cx-divline\" />\n <div className=\"cx-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 6 }}>\n <span className=\"cx-row-lbl\">Company name (English)</span>\n <Text value={m.header.nameEN} onChange={v => setH({ nameEN: v })} placeholder=\"Company legal name\" />\n </div>\n <Row label=\"Bilingual (Arabic)\" sub=\"Show an Arabic name alongside\"><Toggle on={m.header.bilingual} onChange={v => setH({ bilingual: v })} /></Row>\n {m.header.bilingual && (\n <div className=\"cx-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 6 }}>\n <span className=\"cx-row-lbl\">Company name (Arabic · RTL)</span>\n <Text value={m.header.nameAR} onChange={v => setH({ nameAR: v })} placeholder=\"الاسم بالعربية\" dir=\"rtl\" />\n </div>\n )}\n <div className=\"cx-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 6 }}>\n <span className=\"cx-row-lbl\">Tagline / website</span>\n <Text value={m.header.tagline} onChange={v => setH({ tagline: v })} placeholder=\"www.example.com\" />\n </div>\n </Section>\n\n\n\n {/* HEADER MASTER */}\n <Section title=\"Header master\" icon=\"panelL\" open={open.header} onToggle={() => toggle('header')}\n hint=\"The letterhead band at the top of the page. One header, inherited by every template.\">\n <Row label=\"Show header\"><Toggle on={m.header.show} onChange={v => setH({ show: v })} /></Row>\n {m.header.show && <>\n <Row label=\"Layout\"><Select value={m.header.variant} options={[{ v: 'standard', label: 'Standard' }, { v: 'split', label: 'Split (client style)' }, { v: 'centered', label: 'Centered' }, { v: 'compact', label: 'Compact' }]} onChange={v => {\n const stripPos = (attr: any) => {\n if (!attr) return attr;\n const { x, y, width, height, rotation, ...rest } = attr;\n return rest;\n };\n setH({\n variant: v,\n logoAttributes: stripPos(m.header.logoAttributes),\n nameENAttributes: stripPos(m.header.nameENAttributes),\n nameARAttributes: stripPos(m.header.nameARAttributes),\n taglineAttributes: stripPos(m.header.taglineAttributes),\n ruleAttributes: stripPos(m.header.ruleAttributes)\n });\n }} /></Row>\n <div className=\"st-variantnote\">{VARIANT_NOTE[m.header.variant]}</div>\n <Row label=\"Brand rule\"><Toggle on={m.header.rule} onChange={v => setH({ rule: v })} /></Row>\n <div className=\"cx-divline\" />\n <Row label=\"Repeat on\"><Select value={m.header.repeat} options={[{ v: 'all', label: 'All pages' }, { v: 'first', label: 'First page only' }]} onChange={v => setH({ repeat: v })} /></Row>\n {m.header.repeat === 'all' && <Row label=\"Slim header on page 2+\" sub=\"Save space on continuation\"><Toggle on={m.header.compactCont} onChange={v => setH({ compactCont: v })} /></Row>}\n </>}\n </Section>\n\n {/* FOOTER MASTER */}\n <Section title=\"Footer master\" icon=\"panelR\" open={open.footer} onToggle={() => toggle('footer')}\n hint=\"Industry-standard footer — registration numbers, contact line and page numbers. It never repeats anything already shown in the header.\">\n <Row label=\"Show footer\"><Toggle on={m.footer.show} onChange={v => setF({ show: v })} /></Row>\n {m.footer.show && <>\n <div className=\"cx-divline\" />\n <Row label=\"Registration band\" sub=\"Coloured CR / VAT / TRN strip\"><Toggle on={m.footer.regBand} onChange={v => {\n const stripPos = (attr: any) => {\n if (!attr) return attr;\n const { x, y, width, height, rotation, ...rest } = attr;\n return rest;\n };\n setF({ regBand: v, regBandAttributes: v ? stripPos(m.footer.regBandAttributes) : m.footer.regBandAttributes });\n }} /></Row>\n {m.footer.regBand && (\n <div className=\"st-reg\">\n {m.footer.regItems.map((r, i) => (\n <div className=\"st-reg-row\" key={i}>\n <input className=\"cx-input st-reg-lbl\" value={r.label} onChange={e => setReg(i, { label: e.target.value })} placeholder=\"Label\" />\n <input className=\"cx-input\" value={r.value} onChange={e => setReg(i, { value: e.target.value })} placeholder=\"Number\" />\n <button className=\"st-reg-del\" onClick={() => delReg(i)} title=\"Remove\"><Ic k=\"trash\" /></button>\n </div>\n ))}\n <button className=\"cx-add\" onClick={addReg}><Ic k=\"plus\" />Add registration number</button>\n </div>\n )}\n <div className=\"cx-divline\" />\n <Row label=\"Contact line\" sub=\"Address · phone · email\"><Toggle on={m.footer.contactRow} onChange={v => setF({ contactRow: v })} /></Row>\n {m.footer.contactRow && <>\n <div className=\"cx-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 6 }}><span className=\"cx-row-lbl\">Address</span><Text value={m.footer.address} onChange={v => setF({ address: v })} /></div>\n <Row label=\"Phone\"><Text value={m.footer.phone} onChange={v => setF({ phone: v })} /></Row>\n <Row label=\"Email\"><Text value={m.footer.email} onChange={v => setF({ email: v })} /></Row>\n </>}\n <div className=\"cx-divline\" />\n <Row label=\"Page numbers\"><Toggle on={m.footer.pageNumbers} onChange={v => setF({ pageNumbers: v })} /></Row>\n {m.footer.pageNumbers && <Row label=\"Format\"><Select value={m.footer.format} options={[{ v: 'Page {n} of {total}', label: 'Page 1 of N' }, { v: '{n} / {total}', label: '1 / N' }, { v: 'Page {n}', label: 'Page 1' }]} onChange={v => setF({ format: v })} /></Row>}\n <div className=\"cx-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 6 }}><span className=\"cx-row-lbl\">System note</span><Text value={m.footer.note} onChange={v => setF({ note: v })} placeholder=\"Optional fine-print\" /></div>\n <Row label=\"Repeat on\"><Select value={m.footer.repeat} options={[{ v: 'all', label: 'All pages' }, { v: 'first', label: 'First page only' }]} onChange={v => setF({ repeat: v })} /></Row>\n </>}\n </Section>\n\n {/* HEADER & FOOTER MARGINS */}\n <Section title=\"Header & footer margins\" icon=\"file\" open={open.reserve} onToggle={() => toggle('reserve')}\n hint=\"Set the allowed header and footer boundary heights. Canvas elements are strictly constrained within these allowed spaces in both Letterhead and Pre-printed modes.\">\n <Row label=\"Header space\"><Range value={m.reserve?.top || m.header?.height || 156} min={50} max={400} onChange={v => setR({ top: v })} suffix=\"px\" /></Row>\n <Row label=\"Footer space\"><Range value={m.reserve?.bottom || m.footer?.height || 120} min={40} max={300} onChange={v => setR({ bottom: v })} suffix=\"px\" /></Row>\n </Section>\n\n {/* PAGE SETUP */}\n <Section title=\"Page setup\" icon=\"file\" open={open.page} onToggle={() => toggle('page')}\n hint=\"Choose standard paper size and orientation. The header and footer layout will adapt to the chosen page dimensions.\">\n <Row label=\"Paper size\">\n <Seg full value={m.paper || 'A4'} options={[{ v: 'A4', label: 'A4' }, { v: 'Letter', label: 'Letter' }]} onChange={v => {\n const newW = (v === 'Letter' ? (m.orient === 'landscape' ? 1056 : 816) : (m.orient === 'landscape' ? 1123 : 794));\n set(s => ({\n ...s,\n paper: v,\n header: {\n ...(s.header || {}),\n ruleAttributes: {\n ...(s.header?.ruleAttributes || {}),\n x: 0,\n width: newW,\n w: newW\n }\n },\n footer: {\n ...(s.footer || {}),\n regBandAttributes: {\n ...(s.footer?.regBandAttributes || {}),\n x: 0,\n width: newW,\n w: newW\n }\n },\n sections: (s.sections || []).map((sec: any) => ({\n ...sec,\n x: Math.min(sec.x ?? 0, Math.max(0, newW - (sec.width || 200))),\n attributes: {\n ...(sec.attributes || {}),\n x: Math.min(sec.attributes?.x ?? sec.x ?? 0, Math.max(0, newW - (sec.width || 200)))\n }\n }))\n }));\n }} />\n </Row>\n <Row label=\"Orientation\">\n <Seg full value={m.orient || 'portrait'} options={[{ v: 'portrait', label: 'Portrait' }, { v: 'landscape', label: 'Landscape' }]} onChange={v => {\n const newW = (m.paper === 'Letter' ? (v === 'landscape' ? 1056 : 816) : (v === 'landscape' ? 1123 : 794));\n set(s => ({\n ...s,\n orient: v,\n header: {\n ...(s.header || {}),\n ruleAttributes: {\n ...(s.header?.ruleAttributes || {}),\n x: 0,\n width: newW,\n w: newW\n }\n },\n footer: {\n ...(s.footer || {}),\n regBandAttributes: {\n ...(s.footer?.regBandAttributes || {}),\n x: 0,\n width: newW,\n w: newW\n }\n },\n sections: (s.sections || []).map((sec: any) => ({\n ...sec,\n x: Math.min(sec.x ?? 0, Math.max(0, newW - (sec.width || 200))),\n attributes: {\n ...(sec.attributes || {}),\n x: Math.min(sec.attributes?.x ?? sec.x ?? 0, Math.max(0, newW - (sec.width || 200)))\n }\n }))\n }));\n }} />\n </Row>\n </Section>\n\n </div>\n );\n}\n\n// ── canvas ───────────────────────────────────────────────────\nconst DOC_ORDER = ['quotation', 'invoice', 'delivery'];\nconst DOC_IC = { quotation: 'quote', invoice: 'doc', delivery: 'truck' };\n\nfunction Stage({ m, type, setType, showCont, setShowCont, sample, setSample, ed, lens, setLens, count }) {\n const scrollRef = useRef(null);\n const [fit, setFit] = useState(0.74);\n const [zoom, setZoom] = useState('fit');\n\n const paper = m.paper || 'A4';\n const orient = m.orient || 'portrait';\n let [pageW, pageH] = paper === 'Letter' ? [816, 1056] : [794, 1123];\n if (orient === 'landscape') { const t = pageW; pageW = pageH; pageH = t; }\n\n useEffect(() => {\n const el = scrollRef.current; if (!el) return;\n const calc = () => setFit(Math.max(0.3, Math.min(1, (el.clientWidth - 56) / pageW)));\n calc(); const ro = new ResizeObserver(calc); ro.observe(el); return () => ro.disconnect();\n }, [pageW]);\n const z = zoom === 'fit' ? fit : zoom;\n const pages = (sample && showCont) ? [0, 1] : [0];\n\n\n return (\n <div className=\"pb-stage st-stage\" style={{ position: 'relative' }}>\n <div className=\"st-toolbar\">\n <div className=\"pb-lens\">\n <button className={lens === 'edit' ? 'is-active' : ''} onClick={() => setLens('edit')}><Ic k=\"type\" />Edit</button>\n <button className={lens === 'preview' ? 'is-active' : ''} onClick={() => setLens('preview')}><Ic k=\"eye\" />Preview</button>\n </div>\n {lens === 'edit' && m.mode === 'letterhead'\n ? <span className=\"st-edithint\"><Ic k=\"type\" />Double-click text to edit · Click and drag elements to move · Click logo to replace</span>\n : <span className=\"st-toolbar-lbl\"><Ic k=\"layers\" />Editing \"{m.name}\" · {count} in your library</span>}\n <div className=\"st-toolbar-sp\" />\n <button className={`st-sample-tg ${sample ? 'is-on' : ''}`} onClick={() => setSample(v => !v)}\n title=\"Preview the master wrapped around a real document\">\n <span className=\"cx-switch\" aria-hidden><span className=\"cx-switch-dot\" /></span>\n {sample ? 'Sample content' : 'Show sample content'}\n </button>\n {sample && (\n <div className=\"st-docchips\">\n {DOC_ORDER.map(d => (\n <button key={d} className={`st-docchip ${type === d ? 'is-active' : ''}`} onClick={() => setType(d)}>\n <span className=\"st-docchip-dot\" style={{ background: DOC_META[d].accent }} />\n <Ic k={DOC_IC[d]} />{DOC_META[d].name}\n </button>\n ))}\n <button className={`st-docchip ${showCont ? 'is-active' : ''}`} onClick={() => setShowCont(v => !v)} title=\"Add a continuation page to test header/footer repeat\">\n <Ic k=\"copy\" />{showCont ? '2 pages' : '1 page'}\n </button>\n </div>\n )}\n </div>\n\n <div className=\"pb-stage-scroll\" ref={scrollRef}>\n <div className=\"pb-zoomwrap\" style={{ transform: `scale(${z})`, transformOrigin: 'top center' }}>\n <div className=\"pb-pages st\" style={{ ['--st-brand']: m.brand }}>\n {pages.map(pi => {\n const headerRepeat = m.header.repeat || 'all';\n const headerShown = m.mode !== 'preprinted' && m.header.show && (headerRepeat === 'all' || pi === 0);\n const compactHead = headerRepeat === 'all' && m.header.compactCont && pi > 0;\n\n const footerRepeat = m.footer.repeat || 'all';\n const footerShown = m.mode !== 'preprinted' && m.footer.show && (footerRepeat === 'all' || pi === 0);\n\n return (\n <div\n key={pi}\n className=\"pbd-page\"\n data-screen-label={`Page ${pi + 1}`}\n style={{\n width: `${pageW}px`,\n minWidth: `${pageW}px`,\n maxWidth: `${pageW}px`,\n minHeight: `${pageH}px`,\n ['--pbd-page-w']: `${pageW}px`,\n ['--pbd-page-h']: `${pageH}px`,\n }}\n >\n {/* Custom header drop zone or standard header */}\n {headerShown && (\n <div>\n <STDoc.Header m={m} compact={compactHead} ed={(ed?.on && pi === 0 && !compactHead) ? ed : null} />\n </div>\n )}\n\n {/* Pre-printed top reserve */}\n {m.mode === 'preprinted' && (\n <div className=\"st-reserve st-reserve--top\" style={{ height: m.reserve.top }}>\n <span><Ic k=\"panelL\" />Reserved · pre-printed letterhead ({m.reserve.top}px)</span>\n </div>\n )}\n\n {/* Body */}\n <div className=\"pbd pbd-page-inner\" data-density=\"compact\" style={{ ['--pbd-accent']: DOC_META[type]?.accent }}>\n {sample\n ? <STDoc.Body type={type} pageIndex={pi} total={pages.length} />\n : <div className=\"st-blank\"><span>{ed?.on ? 'Document content appears here · edit the header & footer around it' : 'Blank stationery · content area'}</span></div>}\n </div>\n\n {/* Custom footer drop zone or standard footer */}\n {footerShown && (\n <div>\n <STDoc.Footer m={m} pageIndex={pi} total={pages.length} compact={false} ed={(ed?.on && pi === 0) ? ed : null} />\n </div>\n )}\n\n {/* Pre-printed bottom reserve */}\n {m.mode === 'preprinted' && (\n <div className=\"st-reserve st-reserve--bot\" style={{ height: m.reserve.bottom }}>\n <span><Ic k=\"panelR\" />Reserved · pre-printed footer ({m.reserve.bottom}px)</span>\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n <div className=\"pb-zoomfloat\">\n <button onClick={() => setZoom(Math.max(0.3, z - 0.1))}><Ic k=\"minus\" /></button>\n <span className=\"pb-zoom-val\">{Math.round(z * 100)}%</span>\n <button onClick={() => setZoom(Math.min(1.6, z + 0.1))}><Ic k=\"plus\" /></button>\n <button onClick={() => setZoom('fit')} title=\"Fit width\"><Ic k=\"fit\" /></button>\n <span className=\"pb-zoom-pages\">{m.mode === 'preprinted' ? 'Pre-printed' : 'Letterhead'} · {paper}{orient === 'landscape' ? ' (Landscape)' : ''}</span>\n </div>\n </div>\n );\n}\n\n// ── app ──────────────────────────────────────────────────────\nexport const StationeryMasterApp = ({ onBack, company_id, initialPresetId, isNewTemplate, placeholders, relation_table, initialPaper, initialOrient }: { onBack: (lib?: any, activeId?: string) => void, company_id?: number, initialPresetId?: string, isNewTemplate?: boolean, placeholders?: any[], relation_table?: any[], initialPaper?: string, initialOrient?: string }) => {\n const [lib, setLib] = useState(() => {\n const loaded = STStore.load();\n if (initialPaper || initialOrient) {\n const act = STStore.getActive(loaded);\n if (act) {\n if (initialPaper) act.paper = initialPaper;\n if (initialOrient) act.orient = initialOrient;\n }\n }\n return loaded;\n });\n const [hfId, setHfId] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [type, setType] = useState('quotation');\n const [showCont, setShowCont] = useState(false);\n const [sample, setSample] = useState(false);\n const [lens, setLens] = useState('edit');\n const [savedJSON, setSavedJSON] = useState(() => JSON.stringify(lib));\n const [toast, setToast] = useState(null);\n const tT = useRef(null);\n const flash = (msg) => { setToast(msg); clearTimeout(tT.current); tT.current = setTimeout(() => setToast(null), 2000); };\n\n const active = STStore.getActive(lib);\n const dirty = JSON.stringify(lib) !== savedJSON;\n\n // Reset the dirty baseline (persistence to localStorage has been removed)\n const persist = useCallback((L) => { setSavedJSON(JSON.stringify(L)); }, []);\n\n useEffect(() => {\n const loadData = async () => {\n if (!company_id) return;\n try {\n setIsLoading(true);\n const token = getToken();\n const res = await getV1TemplateHeaderFooterCompanyIdHeaderFooter({\n ...token,\n 'x-timezone': token['x-timezone']?.toString() || '',\n company_id: Number(company_id)\n } as any);\n if ((res.status_code === 200 || res.success) && res.data) {\n const hfData = Array.isArray(res.data) ? res.data[0] : res.data;\n if (!hfData) return;\n setHfId(hfData._id || hfData.id);\n const v2Section = (hfData.header_sections || []).find((s: any) => s.attributes?.stationeryV2Config || s.type === 'stationery-v2');\n if (v2Section) {\n try {\n let loadedLib;\n if (v2Section.attributes?.stationeryV2Config) {\n loadedLib = v2Section.attributes.stationeryV2Config;\n if (typeof loadedLib === 'string') loadedLib = JSON.parse(loadedLib);\n } else if (v2Section.content) {\n loadedLib = JSON.parse(v2Section.content);\n }\n\n if (loadedLib) {\n if (isNewTemplate && initialPresetId === '__blank__') {\n // Auto-create a new preset for new templates starting with a blank stationery\n const p = STStore.defPreset({ name: 'New stationery', paper: initialPaper || 'A4', orient: initialOrient || 'portrait' });\n loadedLib.presets.push(p);\n loadedLib.activeId = p.id;\n } else if (initialPresetId && initialPresetId !== '__blank__') {\n const exists = loadedLib.presets.find((p: any) => p.id === initialPresetId);\n if (exists) {\n loadedLib.activeId = initialPresetId;\n }\n }\n if (initialPaper || initialOrient) {\n const act = loadedLib.presets.find((p: any) => p.id === loadedLib.activeId);\n if (act) {\n if (initialPaper) act.paper = initialPaper;\n if (initialOrient) act.orient = initialOrient;\n }\n }\n setLib(loadedLib);\n persist(loadedLib);\n }\n } catch (e) {\n console.error('Failed to parse stationery-v2 content', e);\n }\n }\n }\n } catch (e) {\n console.error(e);\n } finally {\n setIsLoading(false);\n }\n };\n loadData();\n }, [company_id, persist]);\n\n const save = useCallback(async () => {\n try {\n if (!company_id) {\n flash('Cannot save: Company ID is missing');\n return;\n }\n flash('Saving to backend...');\n\n const activePreset = STStore.getActive(lib);\n const rawHeaderHtml = renderToStaticMarkup(<DndContext><STDoc.Header m={activePreset} compact={false} ed={null} /></DndContext>);\n const rawFooterHtml = renderToStaticMarkup(<DndContext><STDoc.Footer m={activePreset} pageIndex={0} total={1} compact={false} ed={null} /></DndContext>);\n\n const token = getToken();\n const payload = {\n ...token,\n company_id: Number(company_id),\n header_sections: [\n {\n id: 'stationery-compiled-header',\n type: 'text',\n content: STATIONERY_CSS + rawHeaderHtml,\n isSplitPair: false,\n splitGroupId: null,\n splitWidth: null,\n attributes: { stationeryV2Config: lib }\n },\n ...(activePreset.sections || []).filter((s: any) => s.zone === 'header')\n ],\n footer_sections: [\n {\n id: 'stationery-compiled-footer',\n type: 'text',\n content: STATIONERY_CSS + rawFooterHtml,\n isSplitPair: false,\n splitGroupId: null,\n splitWidth: null,\n attributes: {}\n },\n ...(activePreset.sections || []).filter((s: any) => s.zone === 'footer')\n ],\n contents: '<!-- V2 Stationery Config -->'\n };\n\n if (hfId) {\n await patchV1TemplateHeaderFooterId({ ...payload, id: hfId } as any);\n } else {\n const res: any = await postV1TemplateHeaderFooter(payload as any);\n if (res.status_code === 200 && res.data) {\n setHfId(res.data.id);\n }\n }\n persist(lib);\n flash('Stationery library saved successfully');\n } catch (e) {\n console.error(e);\n flash('Failed to save to backend');\n }\n }, [lib, persist, company_id, hfId]);\n\n // edit the ACTIVE preset (design content → dirty until Save)\n const setM = useCallback((updater) => {\n setLib(L => {\n const cur = STStore.getActive(L);\n const next = typeof updater === 'function' ? updater(cur) : updater;\n return { ...L, presets: L.presets.map(p => p.id === cur.id ? next : p) };\n });\n }, []);\n\n // ── structural ops (auto-saved so switching never looks \"unsaved\") ──\n const switchPreset = (id) => { const N = { ...lib, activeId: id }; setLib(N); persist(N); };\n const newPreset = () => {\n const p = STStore.defPreset({ name: 'New stationery' });\n const N = { ...lib, presets: [...lib.presets, p], activeId: p.id }; setLib(N); persist(N); flash('New stationery added');\n };\n const dupPreset = () => {\n const copy = STStore.mergePreset({ ...active, id: STStore.uid(), name: active.name + ' copy' });\n const N = { ...lib, presets: [...lib.presets, copy], activeId: copy.id }; setLib(N); persist(N); flash('Duplicated');\n };\n const delPreset = () => {\n if (lib.presets.length <= 1) return;\n if (!window.confirm(`Delete the stationery \"${active.name}\"? Documents using it will fall back to the first preset.`)) return;\n const presets = lib.presets.filter(p => p.id !== active.id);\n const N = { presets, activeId: presets[0].id }; setLib(N); persist(N); flash('Stationery deleted');\n };\n\n useEffect(() => {\n const onKey = (e) => { if ((e.metaKey || e.ctrlKey) && (e.key === 's' || e.key === 'S')) { e.preventDefault(); if (dirty) save(); } };\n window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey);\n }, [dirty, save]);\n\n\n\n const [selectedElement, setSelectedElement] = useState<string | null>(null);\n const [activeDragId, setActiveDragId] = useState<string | null>(null);\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n // ── drag-drop: append element to customHeader or customFooter ─\n const handleDragStart = ({ active }) => setActiveDragId(active.id);\n const handleDragEnd = (event: any) => {\n const { active, over } = event;\n setActiveDragId(null);\n if (!over) return;\n\n const isHeaderZone = over.id === 'st-drop-header';\n const isFooterZone = over.id === 'st-drop-footer';\n\n const targetHeaderSection = (m.sections || []).find((s: any) => s.zone === 'header' && s.id === over.id);\n const targetFooterSection = (m.sections || []).find((s: any) => s.zone === 'footer' && s.id === over.id);\n\n const zone = isHeaderZone || targetHeaderSection ? 'header' : isFooterZone || targetFooterSection ? 'footer' : null;\n if (!zone) return;\n\n const activeIdStr = String(active.id);\n const isNewElement = activeIdStr.startsWith('sidebar-') || activeIdStr.startsWith('st-elem-') || activeIdStr.startsWith('draggable-');\n\n if (!isNewElement) {\n // Moving an existing element\n const sourceSection = (m.sections || []).find((s: any) => s.id === active.id);\n if (!sourceSection) return;\n\n if (targetHeaderSection || targetFooterSection) {\n // Swap with target\n const targetId = over.id;\n const targetSection = (m.sections || []).find((s: any) => s.id === targetId);\n if (!targetSection || targetSection.id === sourceSection.id) return;\n\n setM((s: any) => {\n const newS = { ...s };\n newS.sections = (newS.sections || []).map((sec: any) => {\n if (sec.id === targetId) return { ...sec, type: sourceSection.type, content: sourceSection.content, attributes: sourceSection.attributes };\n if (sec.id === active.id) return { ...sec, type: targetSection.type, content: targetSection.content, attributes: targetSection.attributes, zone: targetSection.zone || zone };\n return sec;\n });\n return newS;\n });\n flash('Moved element');\n } else {\n // Moved to empty generic zone (append)\n setM((s: any) => {\n const newS = { ...s };\n newS.sections = (newS.sections || []).map((sec: any) => sec.id === active.id ? { ...sec, zone } : sec);\n return newS;\n });\n flash('Moved element');\n }\n return;\n }\n\n // Adding a new element from the sidebar\n const elemType = (active.data?.current?.type || activeIdStr.replace('st-elem-', '').replace('sidebar-', '').replace('draggable-', '').split('-')[0]) as any;\n const imageUrl = active.data?.current?.imageUrl;\n let newSection: any = { ...getInitialSectionData(elemType), id: 'st-' + Math.random().toString(36).slice(2, 9), zone };\n if (elemType === 'image' && imageUrl) {\n newSection = { ...newSection, content: `<img src=\"${imageUrl}\" alt=\"Image\" style=\"max-width:100%;max-height:100%;object-fit:contain;width:100%;height:100%;box-sizing:border-box;\" />` };\n }\n\n const sizes = DEFAULT_ELEMENT_SIZES[elemType] || { width: 200, height: 80 };\n newSection.width = sizes.width;\n newSection.height = sizes.height;\n newSection.rotation = 0;\n\n // Calculate actual drop position relative to the zone\n if (active.rect?.current?.translated && over.rect) {\n const activePageW = (m.paper === 'Letter' ? (m.orient === 'landscape' ? 1056 : 816) : (m.orient === 'landscape' ? 1123 : 794));\n const scale = over.rect.width / activePageW;\n \n const pointerX = active.rect.current.translated.left + active.rect.current.translated.width / 2;\n const pointerY = active.rect.current.translated.top + active.rect.current.translated.height / 2;\n \n let dropX = (pointerX - over.rect.left - (sizes.width * scale) / 2) / scale;\n let dropY = (pointerY - over.rect.top - (sizes.height * scale) / 2) / scale;\n\n const zoneHeight = zone === 'header' ? (m.header?.height || m.reserve?.top || 156) : (m.footer?.height || m.reserve?.bottom || 120);\n dropX = Math.max(0, Math.min(dropX, activePageW - sizes.width));\n dropY = Math.max(0, Math.min(dropY, zoneHeight - sizes.height));\n\n newSection.x = dropX;\n newSection.y = dropY;\n } else {\n newSection.x = 50;\n const zoneHeight = zone === 'header' ? (m.header?.height || m.reserve?.top || 156) : (m.footer?.height || m.reserve?.bottom || 120);\n newSection.y = Math.min(20, Math.max(0, zoneHeight - sizes.height));\n }\n\n // Merge root geometry into attributes\n newSection.attributes = {\n ...newSection.attributes,\n width: newSection.width,\n height: newSection.height,\n rotation: newSection.rotation,\n x: newSection.x,\n y: newSection.y\n };\n\n if (targetHeaderSection || targetFooterSection) {\n const targetId = over.id as string;\n setM((s: any) => ({\n ...s,\n sections: (s.sections || []).map((sec: any) => sec.id === targetId ? { ...sec, type: newSection.type, content: newSection.content, attributes: newSection.attributes } : sec)\n }));\n setSelectedElement(targetId);\n flash(`Added ${elemType} to section`);\n } else {\n setM((s: any) => ({ ...s, sections: [...(s.sections || []), newSection] }));\n setSelectedElement(newSection.id);\n flash(`Added ${elemType} to ${zone}`);\n }\n };\n\n\n // inline-edit api passed to the canvas (header/footer/logo) — all target the active preset\n const onLogo = useCallback((file) => {\n if (file.size > 300 * 1024) {\n flash('Please select an image under 300KB.');\n return;\n }\n const r = new FileReader();\n r.onload = () => { setM(s => ({ ...s, header: { ...s.header, logoSrc: r.result, showLogo: true } })); flash('Logo updated'); };\n r.readAsDataURL(file);\n }, [setM]);\n\n const onChangeElement = useCallback((id, x, y, width, height, rotation) => {\n setM(s => {\n const sPageW = (s.paper === 'Letter' ? (s.orient === 'landscape' ? 1056 : 816) : (s.orient === 'landscape' ? 1123 : 794));\n const isFooter = ['regBand', 'contact', 'note', 'pageNumbers'].includes(id) || \n (s.sections || []).some((sec: any) => sec.id === id && sec.zone === 'footer');\n const zoneHeight = isFooter ? (s.footer?.height || s.reserve?.bottom || 120) : (s.header?.height || s.reserve?.top || 156);\n\n const clampedX = Math.max(0, Math.min(x, sPageW - (width || 20)));\n const clampedY = Math.max(0, Math.min(y, zoneHeight - (height || 20)));\n\n const attrs = { x: clampedX, y: clampedY, width, height, rotation };\n if (id === 'logo') return { ...s, header: { ...s.header, logoAttributes: { ...(s.header.logoAttributes || {}), ...attrs } } };\n if (id === 'nameEN') return { ...s, header: { ...s.header, nameENAttributes: { ...(s.header.nameENAttributes || {}), ...attrs } } };\n if (id === 'nameAR') return { ...s, header: { ...s.header, nameARAttributes: { ...(s.header.nameARAttributes || {}), ...attrs } } };\n if (id === 'tagline') return { ...s, header: { ...s.header, taglineAttributes: { ...(s.header.taglineAttributes || {}), ...attrs } } };\n if (id === 'rule') return { ...s, header: { ...s.header, ruleAttributes: { ...(s.header.ruleAttributes || {}), ...attrs } } };\n if (id === 'regBand') return { ...s, footer: { ...s.footer, regBandAttributes: { ...(s.footer.regBandAttributes || {}), ...attrs } } };\n if (id === 'contact') return { ...s, footer: { ...s.footer, contactAttributes: { ...(s.footer.contactAttributes || {}), ...attrs } } };\n if (id === 'note') return { ...s, footer: { ...s.footer, noteAttributes: { ...(s.footer.noteAttributes || {}), ...attrs } } };\n if (id === 'pageNumbers') return { ...s, footer: { ...s.footer, pageNumbersAttributes: { ...(s.footer.pageNumbersAttributes || {}), ...attrs } } };\n\n if (s.sections?.some((sec: any) => sec.id === id)) {\n return {\n ...s,\n sections: s.sections.map((sec: any) => sec.id === id ? { ...sec, x: clampedX, y: clampedY, width, height, rotation, attributes: { ...(sec.attributes || {}), ...attrs } } : sec)\n };\n }\n return s;\n });\n }, [setM]);\n\n const onDeleteElement = useCallback((id) => {\n setM(s => {\n const newS = { ...s };\n if (id === 'logo') newS.header = { ...newS.header, showLogo: false };\n else if (id === 'nameEN') newS.header = { ...newS.header, nameEN: '' };\n else if (id === 'nameAR') newS.header = { ...newS.header, nameAR: '' };\n else if (id === 'tagline') newS.header = { ...newS.header, tagline: '' };\n else if (id === 'rule') newS.header = { ...newS.header, rule: false };\n else if (id === 'regBand') newS.footer = { ...newS.footer, regBand: false };\n else if (id === 'contact') newS.footer = { ...newS.footer, contactRow: false };\n else if (id === 'meta') newS.footer = { ...newS.footer, note: '', pageNumbers: false };\n\n if (s.sections?.some((sec: any) => sec.id === id)) {\n newS.sections = s.sections.filter((sec: any) => sec.id !== id);\n }\n return newS;\n });\n setSelectedElement(null);\n }, [setM]);\n\n const selectedElementData = useMemo(() => {\n if (!selectedElement) return null;\n let type: any = 'text';\n let content = '';\n let attrs: any = {};\n if (selectedElement === 'logo') { type = 'image'; content = ''; attrs = { ...(active.header.logoAttributes || {}), src: active.header.logoSrc || '' }; }\n else if (selectedElement === 'nameEN') { type = 'text'; content = active.header.nameEN || ''; attrs = active.header.nameENAttributes || {}; }\n else if (selectedElement === 'nameAR') { type = 'text'; content = active.header.nameAR || ''; attrs = active.header.nameARAttributes || {}; }\n else if (selectedElement === 'tagline') { type = 'text'; content = active.header.tagline || ''; attrs = active.header.taglineAttributes || {}; }\n else if (selectedElement === 'rule' || selectedElement === 'regBand') { return null; }\n else if (selectedElement === 'contact') { type = 'text'; content = ''; attrs = active.footer.contactAttributes || {}; }\n else if (selectedElement === 'note') { type = 'text'; content = active.footer.note || ''; attrs = active.footer.noteAttributes || {}; }\n else if (selectedElement === 'pageNumbers') { type = 'text'; content = ''; attrs = active.footer.pageNumbersAttributes || {}; }\n else {\n const custom = (active.sections || []).find((s: any) => s.id === selectedElement);\n if (custom) {\n type = custom.type;\n content = custom.content;\n attrs = custom.attributes || {};\n }\n }\n\n // Sync root width/height to styles so SectionFormatPanel can read them\n return {\n id: selectedElement,\n type,\n content,\n attributes: {\n ...attrs,\n styles: { ...attrs.styles, width: attrs.width, height: attrs.height }\n }\n };\n }, [selectedElement, active]);\n\n const handleElementFormatUpdate = useCallback((updatedData: any, targetId?: string) => {\n const id = targetId || selectedElement;\n if (!id) return;\n setM((s: any) => {\n const newS = { ...s };\n const custom = (newS.sections || []).find((sec: any) => sec.id === id);\n\n if (custom) {\n const newAttributes = { ...updatedData.attributes };\n\n if (newAttributes.styles) {\n if (newAttributes.styles.width !== undefined) {\n const parsed = parseFloat(newAttributes.styles.width);\n if (!isNaN(parsed)) newAttributes.width = parsed;\n }\n if (newAttributes.styles.height !== undefined) {\n const parsed = parseFloat(newAttributes.styles.height);\n if (!isNaN(parsed)) newAttributes.height = parsed;\n }\n }\n\n const mergedAttributes = { ...custom.attributes, ...newAttributes };\n\n // For image elements: if src is not in attributes, extract it from existing content\n // so that style-only updates (like alignment) don't lose the image source\n if (custom.type === 'image' && !mergedAttributes.src) {\n const srcMatch = custom.content?.match(/src=\"([^\"]+)\"/);\n if (srcMatch?.[1]) mergedAttributes.src = srcMatch[1];\n }\n\n const updatedContent = generateContentHTML(custom.type as any, updatedData.content !== undefined ? updatedData.content : custom.content, mergedAttributes, []);\n\n newS.sections = newS.sections.map((sec: any) => {\n if (sec.id === id) {\n const updatedSec = { ...sec, attributes: mergedAttributes, content: updatedContent };\n if (updatedData.width !== undefined) {\n updatedSec.width = updatedData.width;\n updatedSec.attributes.width = updatedData.width;\n }\n if (updatedData.height !== undefined) {\n updatedSec.height = updatedData.height;\n updatedSec.attributes.height = updatedData.height;\n }\n if (updatedData.x !== undefined) {\n updatedSec.x = updatedData.x;\n updatedSec.attributes.x = updatedData.x;\n }\n if (updatedData.y !== undefined) {\n updatedSec.y = updatedData.y;\n updatedSec.attributes.y = updatedData.y;\n }\n return updatedSec;\n }\n return sec;\n });\n return newS;\n }\n\n let targetZone = 'header';\n let attrKey = `${id}Attributes`;\n if (['regBand', 'contact', 'note', 'pageNumbers'].includes(id)) targetZone = 'footer';\n\n const existingAttrs = newS[targetZone][attrKey] || {};\n\n // Sync styles width/height back to root\n const newAttributes = { ...updatedData.attributes };\n if (newAttributes.styles) {\n if (newAttributes.styles.width !== undefined) {\n const parsed = parseFloat(newAttributes.styles.width);\n if (!isNaN(parsed)) newAttributes.width = parsed;\n }\n if (newAttributes.styles.height !== undefined) {\n const parsed = parseFloat(newAttributes.styles.height);\n if (!isNaN(parsed)) newAttributes.height = parsed;\n }\n }\n\n if (id === 'logo' && newAttributes.src !== undefined) {\n newS.header.logoSrc = newAttributes.src;\n // Clean up src from attributes so it doesn't duplicate state\n delete newAttributes.src;\n }\n\n newS[targetZone] = { ...newS[targetZone], [attrKey]: { ...existingAttrs, ...newAttributes } };\n\n const stripHtml = (html: string) => html.replace(/<[^>]*>?/gm, '');\n\n if (id === 'nameEN' && updatedData.content !== undefined) newS.header.nameEN = stripHtml(updatedData.content);\n if (id === 'nameAR' && updatedData.content !== undefined) newS.header.nameAR = stripHtml(updatedData.content);\n if (id === 'tagline' && updatedData.content !== undefined) newS.header.tagline = stripHtml(updatedData.content);\n if (id === 'meta' && updatedData.content !== undefined) newS.footer.note = stripHtml(updatedData.content);\n\n return newS;\n });\n }, [selectedElement, setM]);\n\n const ed = useMemo(() => ({\n on: lens === 'edit',\n setH: (p) => setM(s => ({ ...s, header: { ...s.header, ...p } })),\n setF: (p) => setM(s => ({ ...s, footer: { ...s.footer, ...p } })),\n setReg: (i, p) => setM(s => ({ ...s, footer: { ...s.footer, regItems: s.footer.regItems.map((r, j) => j === i ? { ...r, ...p } : r) } })),\n onLogo,\n selectedElement,\n activeDragId,\n onSelectElement: setSelectedElement,\n onChangeElement,\n onUpdateElement: (id: string, content: string, extra?: any) => handleElementFormatUpdate({ content, attributes: extra?.attributes || {} }, id),\n onDeleteElement,\n canvasBounds: { width: 0, height: 0 },\n }), [lens, onLogo, setM, selectedElement, activeDragId, onChangeElement, onDeleteElement, handleElementFormatUpdate]);\n\n const m = active;\n\n return (\n <div className=\"pb\">\n <style>{`\n .st-free-content {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n }\n .st-free-content > * {\n margin: 0 !important;\n box-sizing: border-box !important;\n word-break: break-word;\n pointer-events: none !important;\n }\n `}</style>\n <div className=\"pb-bar\">\n <button className=\"pb-bar-back\" onClick={() => onBack(lib, lib.activeId)}><Ic k=\"arrowL\" />Templates</button>\n <span className=\"pb-bar-div\" />\n <span className=\"pb-bar-doc-ic acc-green\"><Ic k=\"layers\" /></span>\n <div className=\"st-presetbar\">\n <div className=\"st-preset-pick\">\n <select className=\"st-preset-select\" value={lib.activeId} onChange={e => switchPreset(e.target.value)} title=\"Switch stationery preset\">\n {lib.presets.map(p => <option key={p.id} value={p.id}>{p.name}</option>)}\n </select>\n <Ic k=\"chevD\" className=\"st-preset-caret\" />\n </div>\n <input className=\"st-preset-name\" value={active.name} onChange={e => setM(s => ({ ...s, name: e.target.value }))} title=\"Rename this stationery\" placeholder=\"Stationery name\" />\n <div className=\"st-preset-acts\">\n <button onClick={newPreset} title=\"New stationery\"><Ic k=\"plus\" /></button>\n <button onClick={dupPreset} title=\"Duplicate this stationery\"><Ic k=\"copy\" /></button>\n <button onClick={delPreset} disabled={lib.presets.length <= 1} title=\"Delete this stationery\"><Ic k=\"trash\" /></button>\n </div>\n </div>\n <span className=\"pb-bar-stat-count\">{lib.presets.length} saved</span>\n <span className={`pb-bar-stat ${dirty ? 'is-dirty' : 'is-saved'}`}><Ic k={dirty ? 'dot' : 'check'} />{dirty ? 'Unsaved' : 'Saved'}</span>\n {dirty && <button className=\"pbtn pbtn--primary pbtn--sm\" onClick={save}><Ic k=\"save\" />Save</button>}\n <div className=\"pb-bar-sp\" />\n\n <span className=\"pb-bar-lbl\">Mode</span>\n <div className=\"st-mode\">\n <button className={m.mode === 'letterhead' ? 'is-active' : ''} onClick={() => setM(s => ({ ...s, mode: 'letterhead' }))}><Ic k=\"layers\" />Letterhead</button>\n <button className={m.mode === 'preprinted' ? 'is-active' : ''} onClick={() => setM(s => ({ ...s, mode: 'preprinted' }))}><Ic k=\"file\" />Pre-printed</button>\n </div>\n <span className=\"pb-srv\"><Ic k=\"check\" />Pickable per document in the builder</span>\n\n </div>\n\n <DndContext onDragStart={handleDragStart} onDragEnd={handleDragEnd} sensors={sensors}>\n <div className=\"pb-work\" onPointerDown={() => setSelectedElement(null)}>\n <div className=\"pb-side\" onPointerDown={(e) => e.stopPropagation()}>\n <div className=\"pb-side-head\">\n <span className=\"pb-side-h-t\">Stationery</span>\n <span className=\"pb-side-h-s\">Header · Footer</span>\n </div>\n <div className=\"pb-side-scroll\">\n <Rail m={m} set={setM} />\n {(selectedElement === 'regBand' || selectedElement === 'rule') && (\n <Section\n title=\"Format Element\"\n icon=\"layers\"\n open={true}\n onToggle={() => { }}\n hint=\"Drag to move, handles to resize.\"\n >\n <div style={{ padding: '8px 4px', display: 'flex', flexDirection: 'column', gap: 8 }}>\n <p style={{ fontSize: 12, color: '#666', margin: 0 }}>\n {selectedElement === 'regBand' ? 'Registration band' : 'Brand rule'}: drag on canvas to move, use handles to resize.\n </p>\n <button\n style={{ padding: '6px 12px', background: '#fee2e2', color: '#b91c1c', border: '1px solid #fca5a5', borderRadius: 6, cursor: 'pointer', fontSize: 12 }}\n onClick={() => {\n if (selectedElement === 'regBand') setM((s: any) => ({ ...s, footer: { ...s.footer, regBand: false } }));\n if (selectedElement === 'rule') setM((s: any) => ({ ...s, header: { ...s.header, rule: false } }));\n setSelectedElement(null);\n }}\n >\n 🗑 Remove {selectedElement === 'regBand' ? 'Registration Band' : 'Brand Rule'}\n </button>\n </div>\n </Section>\n )}\n {selectedElementData && (\n <Section\n title=\"Format Element\"\n icon=\"layers\"\n open={true}\n onToggle={() => { }}\n hint=\"Formatting options for the selected element.\"\n >\n <SectionFormatPanel\n section={selectedElementData}\n onClose={() => setSelectedElement(null)}\n onUpdate={handleElementFormatUpdate}\n placeholders={placeholders || []}\n relation_table={relation_table}\n isEmbedded={true}\n hidePresetSelector={true}\n />\n </Section>\n )}\n </div>\n </div>\n <Stage m={m} type={type} setType={setType} showCont={showCont} setShowCont={setShowCont} sample={sample} setSample={setSample} ed={ed} lens={lens} setLens={setLens} count={lib.presets.length} />\n </div>\n <DragOverlay>\n {activeDragId ? (\n <div style={{ padding: '8px 12px', background: 'white', border: '1px solid #e5e7eb', borderRadius: 6, boxShadow: '0 4px 6px -1px rgba(0,0,0,0.1)' }}>\n Dragging element\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n\n {toast && <div className=\"pb-toast\"><Ic k=\"check\" />{toast}</div>}\n\n </div>\n );\n}\n","export default \"/* ═══════════════════════════════════════════════════════════════\\n ERPForce PDF Builder — the document (.pbd-*)\\n A real A4 paginated document. Same CSS drives screen preview,\\n measurement pass, and @media print output.\\n Tunable per-doc via CSS vars set by AI / inline edits:\\n --pbd-accent heading rules, doctype, grand total\\n --pbd-head-weight letterhead company weight\\n data-density=\\\"compact\\\" tightens the line-item table.\\n ═══════════════════════════════════════════════════════════════ */\\n\\n.pbd {\\n --pbd-accent: #1B2C6E;\\n --pbd-ink: #14171b;\\n --pbd-muted: #6a6f76;\\n --pbd-faint: #9aa0a6;\\n --pbd-line: #e4e6e9;\\n --pbd-line-strong: #c9ccd0;\\n --pbd-fill: #f6f7f8;\\n --pbd-head-weight: 700;\\n --pbd-pad-y: 6.5px;\\n color: var(--pbd-ink);\\n font-family: 'Inter', sans-serif;\\n font-size: 11px; line-height: 1.45;\\n font-feature-settings: 'tnum';\\n font-variant-numeric: tabular-nums;\\n}\\n\\n/* ── Page shell (built by the paginator / editor) ─────────────── */\\n.pbd-page { width: var(--pbd-page-w, 794px); min-height: var(--pbd-page-h, 1123px); background: #fff; position: relative; flex-shrink: 0;\\n box-shadow: 0 6px 30px rgba(0,0,0,.4); display: flex; flex-direction: column; }\\n.pbd-page-inner { flex: 1; padding: 54px 52px 56px; display: flex; flex-direction: column; overflow-x: auto; }\\n\\n/* running header / footer */\\n.pbd-runhead { position: absolute; top: 0; left: 0; right: 0; display: flex; align-items: center; gap: 8px;\\n padding: 0 16px; border-bottom: .8px solid var(--pbd-line); font-size: 8px; color: var(--pbd-muted); }\\n.pbd-runhead img { height: 11px; opacity: .9; }\\n.pbd-runhead .rh-l { font-weight: 700; color: var(--pbd-ink); }\\n.pbd-runhead .rh-r { margin-left: auto; font-family: 'JetBrains Mono', monospace; }\\n.pbd-runfoot { position: absolute; bottom: 0; left: 0; right: 0; display: flex; align-items: center; gap: 8px;\\n padding: 0 16px; border-top: .8px solid var(--pbd-line); font-size: 8px; color: var(--pbd-muted); }\\n.pbd-runfoot .rf-l { color: var(--pbd-muted); }\\n.pbd-runfoot .rf-r { margin-left: auto; font-variant-numeric: tabular-nums; }\\n\\n/* ── letterhead ─────────────────────────────────────────────── */\\n.pbd-lh { display: flex; justify-content: space-between; align-items: flex-start; gap: 28px;\\n padding-bottom: 14px; border-bottom: 2.5px solid var(--pbd-accent); }\\n.pbd-lh-co { display: flex; flex-direction: column; gap: 2px; max-width: 56%; }\\n.pbd-logo { height: var(--pbd-logo-h, 24px); width: auto; display: block; margin-bottom: 7px; }\\n\\n/* compact letterhead — saves vertical space on the masthead */\\n.pbd[data-head=\\\"compact\\\"] .pbd-lh { padding-bottom: 9px; gap: 18px; }\\n.pbd[data-head=\\\"compact\\\"] .pbd-logo { margin-bottom: 4px; }\\n.pbd[data-head=\\\"compact\\\"] .pbd-co-name { font-size: 12.5px; }\\n.pbd[data-head=\\\"compact\\\"] .pbd-co-line { font-size: 8px; line-height: 1.35; }\\n.pbd[data-head=\\\"compact\\\"] .pbd-doctype { font-size: 19px; }\\n.pbd[data-head=\\\"compact\\\"] .pbd-ref { margin-top: 4px; font-size: 9px; }\\n.pbd[data-head=\\\"compact\\\"] .pbd-status { margin-top: 5px; }\\n.pbd-co-name { font-size: 14px; font-weight: var(--pbd-head-weight); letter-spacing: -.01em; color: var(--pbd-ink); }\\n.pbd-co-line { font-size: 9px; color: var(--pbd-muted); }\\n.pbd-lh-doc { text-align: right; flex-shrink: 0; }\\n.pbd-doctype { font-size: 23px; font-weight: 700; letter-spacing: -.02em; color: var(--pbd-accent); text-transform: uppercase; line-height: 1.08; }\\n.pbd-ref { font-size: 9.5px; color: var(--pbd-muted); margin-top: 7px; font-family: 'JetBrains Mono', monospace; }\\n.pbd-ref b { color: var(--pbd-ink); font-weight: 600; }\\n.pbd-status { display: inline-block; margin-top: 8px; font-size: 8.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;\\n padding: 3px 8px; border-radius: 3px; }\\n.pbd-status--draft { color: #8a540b; background: #fef1dd; }\\n.pbd-status--paid { color: #156b43; background: #e2f5ec; }\\n.pbd-status--due { color: #a8232a; background: #fce5e8; }\\n\\n/* ── parties (bill to / ship to / from) ─────────────────────── */\\n.pbd-parties { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; margin-top: 22px; }\\n.pbd-parties--2 { grid-template-columns: 1fr 1fr; }\\n.pbd-party-h { font-size: 8px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--pbd-faint); margin-bottom: 5px; }\\n.pbd-party-name { font-size: 11.5px; font-weight: 600; color: var(--pbd-ink); }\\n.pbd-party-line { font-size: 9.5px; color: var(--pbd-muted); line-height: 1.5; }\\n\\n/* ── meta strip ─────────────────────────────────────────────── */\\n.pbd-meta { display: grid; grid-template-columns: repeat(4, 1fr); gap: 9px 18px; margin-top: 18px;\\n padding: 12px 16px; background: var(--pbd-fill); border: 1px solid var(--pbd-line); border-radius: 6px; }\\n.pbd-meta-item { display: flex; flex-direction: column; gap: 1px; }\\n.pbd-meta-k { font-size: 7.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--pbd-faint); }\\n.pbd-meta-v { font-size: 10.5px; font-weight: 600; color: var(--pbd-ink); }\\n.pbd-meta--3 { grid-template-columns: repeat(3, 1fr); }\\n.pbd-meta--2 { grid-template-columns: repeat(2, 1fr); }\\n\\n/* ── section heading ────────────────────────────────────────── */\\n.pbd-h { font-size: 10px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--pbd-accent);\\n margin: 22px 0 8px; padding-bottom: 5px; border-bottom: 1px solid var(--pbd-line); }\\n.pbd-intro { font-size: 10px; color: var(--pbd-muted); line-height: 1.55; margin-top: 16px; }\\n\\n/* ── line-item table (the hard part) ────────────────────────── */\\n.pbd-items-wrap { margin-top: 14px; }\\n.pbd-items { width: 100%; border-collapse: collapse; }\\n.pbd-items thead th { font-size: 8px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: #fff;\\n background: var(--pbd-accent); text-align: right; padding: 7px 9px; white-space: nowrap; }\\n.pbd-items thead th:first-child { text-align: left; border-radius: 3px 0 0 0; }\\n.pbd-items thead th:last-child { border-radius: 0 3px 0 0; }\\n.pbd-items thead th.l { text-align: left; }\\n.pbd-items tbody td { font-size: 10px; padding: var(--pbd-pad-y) 9px; text-align: right; border-bottom: 1px solid var(--pbd-line);\\n color: #2c2f35; white-space: nowrap; vertical-align: top; }\\n.pbd-items tbody td.l { text-align: left; }\\n.pbd-items tbody tr:nth-child(even) td { background: #fafbfb; }\\n.pbd-items .it-no { color: var(--pbd-faint); font-size: 9px; width: 22px; }\\n.pbd-items .it-desc { white-space: normal; max-width: 230px; }\\n.pbd-items .it-desc b { font-weight: 600; color: var(--pbd-ink); }\\n.pbd-items .it-sku { display: block; font-family: 'JetBrains Mono', monospace; font-size: 8px; color: var(--pbd-faint); margin-top: 1px; }\\n.pbd-items .it-tax { color: var(--pbd-muted); font-size: 9px; }\\n.pbd-items .it-disc { color: #156b43; }\\n.pbd-items tfoot td { font-size: 9.5px; padding: 6px 9px; }\\n\\n/* \\\"continued\\\" caption when a table breaks across pages */\\n.pbd-items-cont { font-size: 8px; font-style: italic; color: var(--pbd-faint); padding: 4px 9px 0; text-align: right; }\\n\\n/* density */\\n.pbd[data-density=\\\"compact\\\"] { --pbd-pad-y: 4px; }\\n.pbd[data-density=\\\"compact\\\"] .pbd-items thead th { padding: 5px 8px; }\\n.pbd[data-density=\\\"comfortable\\\"] { --pbd-pad-y: 9px; }\\n\\n/* ── totals ─────────────────────────────────────────────────── */\\n.pbd-totals-wrap { display: flex; justify-content: flex-end; margin-top: 14px; }\\n.pbd-totals { width: 280px; }\\n.pbd-tot-row { display: flex; justify-content: space-between; padding: 5px 10px; font-size: 10px; color: var(--pbd-muted); }\\n.pbd-tot-row .pbd-tot-v { color: var(--pbd-ink); font-weight: 500; font-variant-numeric: tabular-nums; }\\n.pbd-tot-row--sub { border-top: 1px solid var(--pbd-line); }\\n.pbd-tot-row--disc .pbd-tot-v { color: #156b43; }\\n.pbd-tot-grand { display: flex; justify-content: space-between; align-items: baseline; padding: 9px 10px; margin-top: 4px;\\n background: var(--pbd-accent); color: #fff; border-radius: 5px; }\\n.pbd-tot-grand .pbd-tot-k { font-size: 10px; font-weight: 600; letter-spacing: .02em; }\\n.pbd-tot-grand .pbd-tot-v { font-size: 14px; font-weight: 700; font-variant-numeric: tabular-nums; }\\n.pbd-amountwords { margin-top: 10px; font-size: 9px; color: var(--pbd-muted); font-style: italic; }\\n.pbd-amountwords b { font-style: normal; color: var(--pbd-ink); }\\n\\n/* ── notes / terms / signature ──────────────────────────────── */\\n.pbd-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; margin-top: 22px; }\\n.pbd-notes-h { font-size: 8px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--pbd-faint); margin-bottom: 5px; }\\n.pbd-notes-body { font-size: 9.5px; color: var(--pbd-muted); line-height: 1.55; }\\n.pbd-notes-body ol, .pbd-notes-body ul { margin: 0; padding-left: 14px; display: flex; flex-direction: column; gap: 3px; }\\n.pbd-pay { font-size: 9.5px; color: var(--pbd-muted); line-height: 1.7; }\\n.pbd-pay b { color: var(--pbd-ink); font-weight: 600; }\\n.pbd-pay .k { display: inline-block; min-width: 92px; color: var(--pbd-faint); }\\n\\n.pbd-sign { display: flex; gap: 48px; margin-top: 36px; }\\n.pbd-sign-line { flex: 1; max-width: 220px; }\\n.pbd-sign-rule { border-top: 1px solid var(--pbd-ink); padding-top: 5px; font-size: 9px; color: var(--pbd-muted); }\\n.pbd-sign-rule b { color: var(--pbd-ink); display: block; font-size: 10px; }\\n\\n.pbd-foot { margin-top: auto; padding-top: 18px; border-top: 1px solid var(--pbd-line); display: flex; justify-content: space-between;\\n font-size: 8.5px; color: var(--pbd-faint); }\\n.pbd-foot b { color: var(--pbd-muted); }\\n\\n/* paid / draft stamp overlay */\\n.pbd-stamp { position: absolute; top: 180px; right: 60px; transform: rotate(-14deg); border: 3px solid; border-radius: 8px;\\n padding: 6px 18px; font-size: 26px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; opacity: .16; pointer-events: none; }\\n.pbd-stamp--paid { color: #156b43; border-color: #156b43; }\\n.pbd-stamp--due { color: #a8232a; border-color: #a8232a; }\\n\\n/* ── inline WYSIWYG edit affordances ─────────────────────────── */\\n.pb-editable [data-edit] { cursor: text; border-radius: 2px; transition: background .12s, box-shadow .12s; }\\n.pb-editable [data-edit]:hover { background: rgba(46,178,115,.10); box-shadow: 0 0 0 2px rgba(46,178,115,.16); }\\n.pb-editable [data-edit].is-editing { background: #fff; box-shadow: 0 0 0 2px var(--brand-green); outline: none; }\\n.pb-editable [data-edit].is-editing:empty::before { content: 'Type…'; color: var(--pbd-faint); }\\n.pbd-ed:focus { outline: none; }\\n\\n/* ── template WYSIWYG edit affordances (Edit lens) ── */\\n.pb-tpl-editable .pbd-lit { cursor: text; border-radius: 2px; transition: background .12s, box-shadow .12s; }\\n.pb-tpl-editable .pbd-lit:hover { background: rgba(46,178,115,.10); box-shadow: 0 0 0 2px rgba(46,178,115,.16); }\\n.pb-tpl-editable .pbd-lit.is-editing { background: #fff; box-shadow: 0 0 0 2px var(--brand-green); outline: none; }\\n/* field chips: friendly, click-to-pick (not monospace, no raw paths) */\\n.pb-tpl-editable .pbd-ph { font-family: inherit; font-size: .92em; cursor: pointer; padding: 0 4px 0 6px;\\n display: inline-flex; align-items: center; gap: 3px; transition: box-shadow .12s, background .12s; }\\n.pb-tpl-editable .pbd-ph::after { content: '▾'; font-size: .72em; opacity: .55; margin-left: 1px; }\\n.pb-tpl-editable .pbd-ph:hover { background: #e6dcff; box-shadow: 0 0 0 2px rgba(110,86,207,.30); }\\n\\n/* field-inspector pills (Fields preview mode) */\\n.pbd-ph { font-family: 'JetBrains Mono', monospace; font-size: .82em; color: var(--ai-fg-deep);\\n background: #efe9fc; border: 1px solid #ddd0f8; border-radius: 3px; padding: 0 4px; white-space: normal; word-break: break-all; }\\n\\n/* ── financial report rows ──────────────────────────────────── */\\n.pbd-items tr.is-section td, .pbd-items tr.is-section th { font-size: 8px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em;\\n color: var(--pbd-faint); padding-top: 13px; border-bottom: 0; background: #fff !important; }\\n.pbd-items tr.is-sub td { font-weight: 700; color: var(--pbd-ink); border-top: 1px solid var(--pbd-line-strong); background: var(--pbd-fill) !important; }\\n.pbd-items tr.is-grand td { font-weight: 700; font-size: 11px; color: #fff; background: var(--pbd-accent) !important; }\\n.pbd-items .pd-indent { padding-left: 22px; }\\n.pbd-items .pd-neg { color: #b4282d; }\\n.pbd-items .pd-pos { color: #156b43; }\\n\\n/* KPI strip (reports) */\\n.pbd-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-top: 14px; }\\n.pbd-kpi { border: 1px solid var(--pbd-line); border-radius: 5px; padding: 9px 11px; }\\n.pbd-kpi-l { font-size: 8px; color: var(--pbd-faint); text-transform: uppercase; letter-spacing: .04em; }\\n.pbd-kpi-v { font-size: 16px; font-weight: 700; letter-spacing: -.02em; margin-top: 3px; color: var(--pbd-ink); }\\n.pbd-kpi-s { font-size: 8px; color: var(--pbd-muted); margin-top: 2px; }\\n\\n/* ═══════════════════════════════════════════════════════════════\\n KSA bilingual (ZATCA) Tax Invoice · .kx-*\\n Self-contained English/Arabic invoice. Arabic runs RTL with the\\n Kufi face; table styling is scoped under .kx-items-wrap so it\\n survives the paginator's continuation rebuild (which keeps the\\n wrap attributes but resets the table to class=\\\"pbd-items\\\").\\n ═══════════════════════════════════════════════════════════════ */\\n.kx-ar, .kx-ar-h, .kx-ar-sm, .kx-col-ar, .kx-title-ar,\\n.kx-tot-ar, [dir=\\\"rtl\\\"] { font-family: 'Noto Kufi Arabic', 'Inter', sans-serif; }\\n\\n/* ── header ─────────────────────────────────────────────────── */\\n.kx-head { border-bottom: 2.5px solid var(--pbd-accent); padding-bottom: 12px; }\\n.kx-head-row { display: flex; align-items: center; gap: 16px; }\\n.kx-logo { height: 26px; width: auto; }\\n.kx-title-block { flex: 1; display: flex; align-items: center; justify-content: center; gap: 14px; }\\n.kx-title { font-size: 22px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; color: var(--pbd-ink); }\\n.kx-title-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--pbd-accent); }\\n.kx-title-ar { font-size: 23px; font-weight: 700; color: var(--pbd-accent); }\\n.kx-head-tag { font-size: 7px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; text-align: center;\\n color: var(--pbd-accent); border: 1.2px solid var(--pbd-accent); border-radius: 5px; padding: 4px 7px; line-height: 1.25; }\\n.kx-head-no { display: flex; justify-content: space-between; margin-top: 9px; }\\n.kx-head-no-en, .kx-head-no-ar { display: flex; align-items: baseline; gap: 7px; }\\n.kx-head-no .kx-k { font-size: 8px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--pbd-faint); }\\n.kx-head-no-ar .kx-k { text-transform: none; letter-spacing: 0; font-size: 9.5px; }\\n.kx-head-no b { font-family: 'JetBrains Mono', monospace; font-size: 13px; font-weight: 700; color: var(--pbd-accent); }\\n\\n/* ── seller / buyer cards ───────────────────────────────────── */\\n.kx-parties { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 12px; }\\n.kx-party { border: 1px solid var(--pbd-line-strong); border-radius: 7px; overflow: hidden; }\\n.kx-party-bar { display: flex; justify-content: space-between; align-items: center; padding: 4px 11px;\\n background: var(--pbd-fill); border-bottom: 1px solid var(--pbd-line); }\\n.kx-party-bar span:first-child { font-size: 9px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; color: var(--pbd-accent); }\\n.kx-party-bar .kx-ar { font-size: 11px; font-weight: 700; color: var(--pbd-accent); }\\n.kx-party-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; padding: 6px 12px; }\\n.kx-col-ar { text-align: right; }\\n.kx-name { font-size: 11px; font-weight: 700; color: var(--pbd-ink); line-height: 1.35; }\\n.kx-col-ar .kx-name { font-size: 12px; }\\n.kx-line { font-size: 8.5px; color: var(--pbd-muted); line-height: 1.5; margin-top: 1px; }\\n.kx-col-ar .kx-line { font-size: 9.5px; }\\n.kx-kv { display: flex; gap: 6px; font-size: 8.5px; margin-top: 4px; }\\n.kx-col-ar .kx-kv { flex-direction: row-reverse; }\\n.kx-kv span { color: var(--pbd-faint); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; min-width: 46px; }\\n.kx-col-ar .kx-kv span { text-transform: none; letter-spacing: 0; min-width: 64px; }\\n.kx-kv b { font-family: 'JetBrains Mono', monospace; color: var(--pbd-ink); font-weight: 600; }\\n\\n/* ── meta strip ─────────────────────────────────────────────── */\\n.kx-meta { display: grid; grid-template-columns: repeat(6, 1fr); margin-top: 10px;\\n border: 1px solid var(--pbd-line-strong); border-radius: 7px; overflow: hidden; }\\n.kx-meta-item { padding: 6px 10px; border-right: 1px solid var(--pbd-line); display: flex; flex-direction: column; gap: 3px; }\\n.kx-meta-item:last-child { border-right: 0; }\\n.kx-meta-k { font-size: 7px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--pbd-faint);\\n display: flex; flex-direction: column; gap: 1px; line-height: 1.25; }\\n.kx-meta-k .kx-ar { font-size: 8.5px; font-weight: 600; text-transform: none; letter-spacing: 0; color: var(--pbd-muted); font-style: normal; }\\n.kx-meta-v { font-size: 9.5px; font-weight: 700; color: var(--pbd-ink); font-variant-numeric: tabular-nums; }\\n\\n/* ── line-item table (scoped to the wrap so splits keep styling) ── */\\n.kx-items-wrap { margin-top: 8px; }\\n.kx-items-wrap .pbd-items thead th { font-size: 7.5px; line-height: 1.2; padding: 5px 6px; vertical-align: top; }\\n.kx-items-wrap .pbd-items thead th .kx-ar-h { display: block; font-size: 8px; font-weight: 600; opacity: .9; margin-top: 2px; }\\n.kx-items-wrap .pbd-items tbody td { font-size: 9px; padding: 3.5px 6px; vertical-align: middle; }\\n.kx-items-wrap .pbd-items .it-no { width: 18px; }\\n.kx-items-wrap .kx-sku { font-family: 'JetBrains Mono', monospace; font-size: 8.5px; color: var(--pbd-ink); }\\n.kx-items-wrap .kx-desc { white-space: normal; min-width: 150px; max-width: 220px; }\\n.kx-items-wrap .kx-desc b { font-weight: 600; color: var(--pbd-ink); display: block; }\\n.kx-items-wrap .kx-desc .kx-ar { display: block; font-size: 9px; color: var(--pbd-muted); margin-top: 2px; direction: rtl; }\\n.kx-items-wrap .kx-unit { display: block; }\\n.kx-items-wrap .kx-ar-sm { display: block; font-size: 8px; color: var(--pbd-muted); margin-top: 1px; }\\n.kx-items-wrap .kx-rate { color: var(--pbd-muted); }\\n\\n/* edit mode: the field chips (\\\"Total with tax\\\", \\\"Tax amount\\\"…) are wider than\\n the sample numbers they stand in for, and headers/chips are nowrap — across\\n 11 columns that pushes the table past the page edge. Let headers and chips\\n wrap in template-edit mode so the width:100% table can shrink back to fit. */\\n.pb-tpl-editable .pbd-items thead th { white-space: normal; }\\n.pb-tpl-editable .pbd-items tbody td { padding-left: 4px; padding-right: 4px; }\\n.pb-tpl-editable .pbd-items tbody .pbd-ph {\\n font-size: .8em; line-height: 1.12; padding: 0 2px; }\\n\\n/* ── totals (ZATCA grid: EN label · value · AR label) ───────── */\\n.kx-totals { margin-top: 10px; }\\n.kx-tot-grid { border: 1px solid var(--pbd-line-strong); border-radius: 7px; overflow: hidden; }\\n.kx-tot-row { display: grid; grid-template-columns: 1fr 150px 1fr; align-items: center;\\n border-bottom: 1px solid var(--pbd-line); }\\n.kx-tot-row:last-child { border-bottom: 0; }\\n.kx-tot-en { font-size: 9.5px; font-weight: 600; color: var(--pbd-ink); padding: 4px 12px; }\\n.kx-tot-v { font-size: 10.5px; font-weight: 700; color: var(--pbd-ink); text-align: center; padding: 4px 12px;\\n font-variant-numeric: tabular-nums; border-left: 1px solid var(--pbd-line); border-right: 1px solid var(--pbd-line); background: #fff; }\\n.kx-tot-ar { font-size: 10px; font-weight: 600; color: var(--pbd-muted); text-align: right; padding: 4px 12px; }\\n.kx-tot-grand { background: var(--pbd-fill); }\\n.kx-tot-grand .kx-tot-en, .kx-tot-grand .kx-tot-ar { font-weight: 800; color: var(--pbd-ink); }\\n.kx-tot-grand .kx-tot-v { font-size: 12px; }\\n.kx-tot-due { background: var(--pbd-accent); }\\n.kx-tot-due .kx-tot-en, .kx-tot-due .kx-tot-ar { color: #fff; font-weight: 800; }\\n.kx-tot-due .kx-tot-v { color: #fff; font-size: 13px; background: transparent; border-color: rgba(255,255,255,.28); }\\n\\n.kx-words { margin-top: 8px; border: 1px dashed var(--pbd-line-strong); border-radius: 7px; overflow: hidden; }\\n.kx-words-row { display: flex; gap: 10px; align-items: baseline; padding: 5px 12px; }\\n.kx-words-row:first-child { border-bottom: 1px solid var(--pbd-line); }\\n.kx-words-k { font-size: 8px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--pbd-faint); white-space: nowrap; }\\n.kx-words-row[dir=\\\"rtl\\\"] .kx-words-k { text-transform: none; letter-spacing: 0; font-size: 9.5px; }\\n.kx-words-v { font-size: 9.5px; font-weight: 600; color: var(--pbd-ink); }\\n.kx-words-row[dir=\\\"rtl\\\"] .kx-words-v { font-size: 10.5px; }\\n\\n/* ── QR + bank details ──────────────────────────────────────── */\\n.kx-bankqr { display: flex; gap: 16px; margin-top: 10px; align-items: stretch; }\\n.kx-qr { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;\\n border: 1px solid var(--pbd-line-strong); border-radius: 7px; padding: 11px; width: 152px; flex-shrink: 0; }\\n.kx-qr img { width: 124px; height: 124px; display: block; }\\n.kx-qr-cap { font-size: 7px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; color: var(--pbd-faint); text-align: center; line-height: 1.35; }\\n.kx-qr-cap .kx-ar { display: block; font-size: 8.5px; text-transform: none; letter-spacing: 0; color: var(--pbd-muted); margin-top: 1px; }\\n.kx-bank { flex: 1; border: 1px solid var(--pbd-line-strong); border-radius: 7px; overflow: hidden; }\\n.kx-bank-h { display: flex; justify-content: space-between; padding: 5px 11px; background: var(--pbd-fill); border-bottom: 1px solid var(--pbd-line); }\\n.kx-bank-h span:first-child { font-size: 9px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; color: var(--pbd-accent); }\\n.kx-bank-h .kx-ar { font-size: 11px; font-weight: 700; color: var(--pbd-accent); }\\n.kx-bank-tbl { width: 100%; border-collapse: collapse; }\\n.kx-bank-tbl td { font-size: 9px; padding: 4px 11px; border-bottom: 1px solid var(--pbd-line); color: var(--pbd-ink); }\\n.kx-bank-tbl tr:last-child td { border-bottom: 0; }\\n.kx-bank-tbl tr:nth-child(even) td { background: #fafbfb; }\\n.kx-bank-k { width: 130px; color: var(--pbd-faint); font-weight: 700; text-transform: uppercase; letter-spacing: .03em; font-size: 7.5px; }\\n.kx-bank-k .kx-ar { float: right; text-transform: none; letter-spacing: 0; font-size: 9px; color: var(--pbd-muted); font-weight: 600; }\\n.kx-bank-tbl td:not(.kx-bank-k) { font-family: 'JetBrains Mono', monospace; font-weight: 600; }\\n\\n/* ── footer note ────────────────────────────────────────────── */\\n.kx-foot { margin-top: auto; padding-top: 10px; border-top: 1px solid var(--pbd-line); text-align: center;\\n font-size: 8.5px; color: var(--pbd-faint); line-height: 1.5; }\\n\\n\\n@media print {\\n html, body { height: auto !important; overflow: visible !important; background: #fff !important; }\\n .pb-top, .pb-bar, .pb-rail, .pb-editor, .pb-ai, .pb-drawer, .pb-side, .pb-dock, .pb-edithint, .pb-lensbar, .pb-lens, .pb-edithint-inline, .pb-preview-bar, .pb-zoomfloat, .tweaks-panel, .pb-toast { display: none !important; }\\n .pb, .pb-body, .pb-work, .pb-center, .pb-preview, .pb-stage, .pb-stage-scroll { display: block !important; height: auto !important; overflow: visible !important; background: #fff !important; }\\n .pb-editable [data-edit]:hover { background: none !important; box-shadow: none !important; }\\n .pb-preview-scroll, .pb-stage-scroll { overflow: visible !important; padding: 0 !important; background: #fff !important; }\\n .pb-pages { transform: none !important; gap: 0 !important; display: block !important; }\\n .pb-zoomwrap { transform: none !important; margin: 0 !important; width: auto !important; }\\n .pbd-page { box-shadow: none !important; margin: 0 auto !important; page-break-after: always; break-after: page; }\\n .pbd-page:last-child { page-break-after: auto; break-after: auto; }\\n .pbd-items thead th, .pbd-tot-grand, .pbd-meta, .pbd-status, .pbd-items tr.is-grand td, .pbd-items tr.is-sub td, .pbd-runhead, .pbd-runfoot, .pbd-stamp,\\n .kx-items-wrap .pbd-items thead th, .kx-tot-due, .kx-tot-grand, .kx-party-bar, .kx-bank-h, .kx-meta {\\n -webkit-print-color-adjust: exact; print-color-adjust: exact; }\\n}\\n.pbd-page-inner table:not(.pbd-items) { min-width: max-content; }\\n\"","export default \"/* ═══════════════════════════════════════════════════════════════\\n ERPForce PDF Builder — Stationery Master\\n The reusable header + footer + watermark that every document\\n template inherits. Brand colour (--st-brand) is independent of\\n the per-document accent (--pbd-accent).\\n Builds on styles.css (chrome) + doc.css (.pbd document).\\n ═══════════════════════════════════════════════════════════════ */\\n\\n.st { --st-brand: #2EB273; }\\n\\n/* the A4 sheet is a flex column: header · body(grows) · footer */\\n.st .pbd-page { display: flex; flex-direction: column; overflow: hidden; }\\n.st .pbd-page > * { position: relative; z-index: 1; }\\n.st .pbd-page-inner { flex: 1; padding: 26px 52px 22px; }\\n\\n/* ── watermark (behind everything, centred over the whole page) ── */\\n.st .pbd-page > .st-wm { position: absolute; inset: 0; z-index: 0; display: grid; place-items: center; pointer-events: none; }\\n.st-wm img { display: block; max-width: 70%; height: auto; filter: grayscale(1); }\\n\\n/* ════════════════ HEADER MASTER ══════════════════════════════ */\\n.st-head { display: flex; align-items: flex-start; gap: 28px; padding: 30px 52px 14px;\\n border-bottom: 2.5px solid var(--st-brand); }\\n.st-logo { width: auto; display: block; }\\n.st-id { display: flex; flex-direction: column; gap: 2px; }\\n.st-name-en { font-size: 16px; font-weight: 700; letter-spacing: -.01em; color: var(--pbd-ink); line-height: 1.2; }\\n.st-name-ar { font-family: 'Noto Kufi Arabic', 'Cairo', 'IBM Plex Sans Arabic', 'Tahoma', sans-serif; font-size: 15px; font-weight: 600;\\n color: #3a3f46; line-height: 1.4; direction: rtl; unicode-bidi: embed; }\\n.st-tagline { font-size: 9.5px; font-family: 'JetBrains Mono', monospace; letter-spacing: .02em; color: var(--st-brand); margin-top: 2px; }\\n.st-head-col { display: flex; flex-direction: column; gap: 3px; }\\n\\n/* variant — standard: logo left, identity right */\\n.st-head--standard { justify-content: space-between; }\\n.st-head--standard .st-id,\\n.st-head--standard .st-name-en,\\n.st-head--standard .st-name-ar,\\n.st-head--standard .st-tagline { text-align: right; width: 100%; align-items: flex-end; }\\n\\n/* variant — split (client letterhead): logo+web left, bilingual name right */\\n.st-head--split { justify-content: space-between; }\\n.st-head--split .st-id,\\n.st-head--split .st-name-en,\\n.st-head--split .st-name-ar,\\n.st-head--split .st-tagline { text-align: right; width: 100%; align-items: flex-end; }\\n\\n/* variant — centered */\\n.st-head--centered { flex-direction: column; align-items: center; gap: 8px; text-align: center; padding-top: 26px; }\\n.st-head--centered .st-id,\\n.st-head--centered .st-name-en,\\n.st-head--centered .st-name-ar,\\n.st-head--centered .st-tagline { text-align: center; width: 100%; align-items: center; }\\n.st-head--centered .st-logo { margin-bottom: 2px; }\\n\\n/* variant — compact (continuation pages / dense docs) */\\n.st-head--compact { align-items: center; justify-content: space-between; padding: 11px 52px; gap: 16px; }\\n.st-head--compact .st-head-cmp-l { display: flex; align-items: center; gap: 10px; }\\n.st-head--compact .st-name-en { font-size: 11.5px; }\\n.st-head--compact .st-tagline { margin-top: 0; }\\n\\n/* ════════════════ BODY · doc-title bar ═══════════════════════ */\\n/* the body masthead (doctype / number) — separate from the letterhead.\\n uses the DOCUMENT accent, proving it is independent of --st-brand. */\\n.st .pbd-page-inner > .st-doctitle:first-child { margin-top: 4px; }\\n.st-doctitle { display: flex; justify-content: space-between; align-items: flex-start; gap: 24px; margin-bottom: 4px; }\\n.st-doctitle-l { display: flex; flex-direction: column; align-items: flex-start; }\\n.st-doctype { font-size: 22px; font-weight: 700; letter-spacing: -.02em; color: var(--pbd-accent); text-transform: uppercase; line-height: 1.05; white-space: nowrap; }\\n.st-doctype-rule { width: 38px; height: 3px; background: var(--pbd-accent); border-radius: 2px; margin-top: 7px; }\\n.st-doctitle-r { text-align: right; flex-shrink: 0; }\\n\\n/* ════════════════ FOOTER MASTER ══════════════════════════════ */\\n.st-foot { margin-top: auto; }\\n.st-foot-band { background: var(--st-brand); color: #fff; display: flex; align-items: center; justify-content: center;\\n flex-wrap: wrap; gap: 6px 22px; padding: 7px 52px; font-size: 10px; font-weight: 700; letter-spacing: .05em;\\n font-family: 'JetBrains Mono', monospace; }\\n.st-foot-band span { position: relative; }\\n.st-foot-band span + span::before { content: '|'; position: absolute; left: -12px; opacity: .5; font-weight: 400; }\\n.st-foot-contact { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 6px 16px;\\n padding: 8px 52px 0; font-size: 9px; color: var(--pbd-muted); }\\n.st-foot-contact span { display: inline-flex; align-items: center; gap: 5px; position: relative; }\\n.st-foot-contact span + span::before { content: '·'; position: absolute; left: -9px; color: var(--pbd-faint); }\\n.st-foot-contact svg { width: 11px; height: 11px; color: var(--st-brand); flex-shrink: 0; }\\n.st-foot-meta { display: flex; align-items: center; justify-content: space-between; gap: 12px;\\n padding: 6px 52px 14px; font-size: 8px; color: var(--pbd-faint); }\\n.st-foot-meta .st-foot-pg { font-variant-numeric: tabular-nums; margin-left: auto; }\\n\\n/* continuation pages — slim single-line footer (no reg band / contact) */\\n.st-foot--compact { border-top: 1px solid rgba(20,23,27,.08); }\\n.st-foot--compact .st-foot-meta { padding-top: 8px; padding-bottom: 12px; }\\n\\n/* ════════════════ PRE-PRINTED reserved margins ═══════════════ */\\n.st-reserve { display: grid; place-items: center; flex-shrink: 0;\\n background: repeating-linear-gradient(135deg, transparent, transparent 7px, rgba(99,102,108,.06) 7px, rgba(99,102,108,.06) 8px); }\\n.st-reserve--top { border-bottom: 1.5px dashed var(--border-strong); }\\n.st-reserve--bot { border-top: 1.5px dashed var(--border-strong); }\\n.st-reserve span { display: inline-flex; align-items: center; gap: 6px; font-size: 9px; font-weight: 600; letter-spacing: .03em;\\n text-transform: uppercase; color: var(--text-quaternary); background: rgba(255,255,255,.7); padding: 3px 10px; border-radius: var(--r-full); }\\n.st-reserve svg { width: 12px; height: 12px; }\\n\\n/* ════════════════ APP CHROME extras ═════════════════════════ */\\n/* dock the toolbar on top; canvas scroll fills the rest */\\n.st-stage { flex-direction: column; }\\n/* a clean, non-overlapping toolbar above the canvas */\\n.st-toolbar { display: flex; align-items: center; gap: var(--s-3); flex-wrap: wrap; width: 100%;\\n padding: var(--s-3) var(--s-5); background: var(--surface-raised); border-bottom: 1px solid var(--border-subtle);\\n box-shadow: var(--shadow-xs); }\\n.st-toolbar-lbl { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-xs); font-weight: 600; color: var(--text-secondary); }\\n.st-toolbar-lbl svg { width: 13px; height: 13px; color: var(--green-500); }\\n.st-toolbar-sp { flex: 1; }\\n\\n/* sample-content toggle */\\n.st-sample-tg { display: inline-flex; align-items: center; gap: var(--s-2); height: 28px; padding: 0 var(--s-3) 0 5px;\\n border-radius: var(--r-full); font-size: var(--text-xs); font-weight: 600; color: var(--text-secondary);\\n background: var(--surface-muted); border: 1px solid var(--border-subtle); }\\n.st-sample-tg:hover { background: var(--surface-sunken); }\\n.st-sample-tg.is-on { color: var(--green-700); background: var(--green-50); border-color: var(--green-200); }\\n.st-sample-tg .cx-switch { pointer-events: none; }\\n.st-sample-tg.is-on .cx-switch { background: var(--green-500); }\\n.st-sample-tg.is-on .cx-switch .cx-switch-dot { transform: translateX(14px); }\\n\\n.st-docchips { display: flex; gap: 4px; }\\n.st-docchip { display: inline-flex; align-items: center; gap: 5px; height: 28px; padding: 0 11px; border-radius: var(--r-full);\\n font-size: var(--text-xs); font-weight: 600; color: var(--text-secondary); background: var(--surface-muted);\\n border: 1px solid var(--border-subtle); white-space: nowrap; }\\n.st-docchip svg { width: 12px; height: 12px; }\\n.st-docchip:hover { background: var(--surface-sunken); color: var(--text-primary); }\\n.st-docchip.is-active { background: var(--n-900); color: #fff; border-color: var(--n-900); }\\n.st-docchip-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }\\n\\n/* blank letterpad placeholder (default view) */\\n.st-blank { flex: 1; display: grid; place-items: center; min-height: 360px; }\\n.st-blank span { font-size: 10px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--pbd-faint);\\n border: 1px dashed var(--border-subtle); border-radius: var(--r-full); padding: 4px 14px; opacity: .55; }\\n\\n/* ── Edit / Preview lens, re-skinned light for the docked toolbar ── */\\n.st-toolbar .pb-lens { background: var(--surface-muted); border: 1px solid var(--border-subtle); box-shadow: none; backdrop-filter: none; padding: 2px; }\\n.st-toolbar .pb-lens button { color: var(--text-tertiary); height: 26px; padding: 0 var(--s-4); }\\n.st-toolbar .pb-lens button.is-active { background: var(--surface-raised); color: var(--text-primary); box-shadow: var(--shadow-xs); }\\n.st-edithint { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-xs); font-weight: 500; color: var(--text-brand-strong); }\\n.st-edithint svg { width: 13px; height: 13px; color: var(--green-500); }\\n\\n/* ── inline-editable text affordance (on the page) ────────────── */\\n.st-ed { cursor: text; border-radius: 3px; outline: none; transition: box-shadow var(--dur-fast), background var(--dur-fast); }\\n.st-head.is-edit .st-ed, .st-foot.is-edit .st-ed-inline { /* box-shadow removed as FreeWrap handles outlines */ }\\n.st-head.is-edit .st-ed { padding: 0 3px; margin: 0 -3px; }\\n.st-ed:hover { background: rgba(46,178,115,.05); }\\n.st-ed:focus { background: rgba(46,178,115,.05); }\\n.st-ed[data-empty=\\\"true\\\"]::before { content: attr(data-ph); color: var(--pbd-faint); font-style: italic; opacity: .7; }\\n.st-ed-inline[data-empty=\\\"true\\\"]::before { content: attr(data-ph); opacity: .6; font-style: italic; }\\n.st-ed-inline { cursor: text; border-radius: 3px; outline: none; padding: 0 2px; transition: box-shadow var(--dur-fast), background var(--dur-fast); }\\n.st-foot-band .st-ed-inline:hover { background: rgba(255,255,255,.22); }\\n.st-foot-band .st-ed-inline:focus { background: rgba(255,255,255,.28); box-shadow: 0 0 0 1px rgba(255,255,255,.7); }\\n.st-foot-contact .st-ed-inline:hover, .st-foot-meta .st-ed-inline:hover { background: rgba(46,178,115,.12); box-shadow: 0 0 0 1px rgba(46,178,115,.45); }\\n.st-foot-contact .st-ed-inline:focus, .st-foot-meta .st-ed-inline:focus { background: rgba(46,178,115,.06); box-shadow: 0 0 0 1.5px var(--brand-green); }\\n\\n/* ── logo replace slot on the canvas (edit mode) ──────────────── */\\n.st-logo-slot { position: relative; display: inline-flex; align-items: center; cursor: pointer; border-radius: var(--r-sm); }\\n.st-logo-slot input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }\\n.st-logo-slot .st-logo-hint { position: absolute; left: 50%; top: 100%; transform: translateX(-50%); margin-top: 4px;\\n display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; font-size: 9px; font-weight: 600; color: #fff;\\n background: var(--n-900); padding: 3px 7px; border-radius: var(--r-full); opacity: 0; pointer-events: none; transition: opacity var(--dur-fast); z-index: 5; }\\n.st-logo-slot .st-logo-hint svg { width: 10px; height: 10px; }\\n.st-logo-slot:hover { box-shadow: 0 0 0 2px rgba(46,178,115,.5); }\\n.st-logo-slot:hover .st-logo-hint { opacity: 1; }\\n\\n/* ── logo upload control in the rail ──────────────────────────── */\\n.st-logo-up { display: flex; align-items: center; gap: var(--s-3); padding: var(--s-3) 0 var(--s-2); }\\n.st-logo-up-preview { width: 78px; height: 46px; flex-shrink: 0; border: 1px solid var(--border-subtle); border-radius: var(--r-md);\\n background: var(--surface-muted); display: grid; place-items: center; padding: 6px; }\\n.st-logo-up-preview img { max-width: 100%; max-height: 100%; object-fit: contain; }\\n.st-logo-up-actions { display: flex; flex-direction: column; gap: var(--s-2); }\\n.cx-btn { position: relative; display: inline-flex; align-items: center; gap: var(--s-2); height: 30px; padding: 0 var(--s-4);\\n border-radius: var(--r-md); font-size: var(--text-xs); font-weight: 600; color: #fff; background: var(--n-900); cursor: pointer; white-space: nowrap; }\\n.cx-btn:hover { background: var(--n-800); }\\n.cx-btn svg { width: 13px; height: 13px; }\\n.cx-btn input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }\\n.cx-btn--ghost { background: var(--surface-muted); color: var(--text-secondary); border: 1px solid var(--border-subtle); }\\n.cx-btn--ghost:hover { background: var(--surface-sunken); color: var(--text-primary); }\\n.cx-btn--sm { height: 28px; }\\n\\n/* ── stationery PRESET bar (top bar of the Master editor) ─────── */\\n.st-presetbar { display: inline-flex; align-items: center; gap: var(--s-2); }\\n.st-preset-pick { position: relative; display: inline-flex; align-items: center; }\\n.st-preset-select { -webkit-appearance: none; appearance: none; height: 30px; max-width: 190px; padding: 0 26px 0 11px;\\n border-radius: var(--r-md); border: 1px solid var(--border-subtle); background: var(--surface-muted); cursor: pointer;\\n font-size: var(--text-sm); font-weight: 600; color: var(--text-primary); text-overflow: ellipsis; }\\n.st-preset-select:hover { background: var(--surface-sunken); }\\n.st-preset-caret { position: absolute; right: 8px; width: 13px; height: 13px; color: var(--text-tertiary); pointer-events: none; }\\n.st-preset-name { height: 30px; width: 168px; padding: 0 10px; border-radius: var(--r-md);\\n border: 1px solid transparent; background: transparent; font-size: var(--text-sm); font-weight: 600; color: var(--text-primary); }\\n.st-preset-name:hover { border-color: var(--border-subtle); background: var(--surface-muted); }\\n.st-preset-name:focus { border-color: var(--brand-green); background: var(--surface-raised); box-shadow: 0 0 0 3px var(--green-100, rgba(46,178,115,.18)); outline: none; }\\n.st-preset-acts { display: inline-flex; gap: 2px; }\\n.st-preset-acts button { width: 28px; height: 28px; border-radius: var(--r-sm); display: grid; place-items: center;\\n color: var(--text-tertiary); }\\n.st-preset-acts button:hover { background: var(--surface-sunken); color: var(--text-primary); }\\n.st-preset-acts button:disabled { opacity: .35; pointer-events: none; }\\n.st-preset-acts button svg { width: 14px; height: 14px; }\\n.st-preset-acts button:last-child:hover { background: var(--danger-bg); color: var(--danger); }\\n.pb-bar-stat-count { font-size: var(--text-2_5xs); font-weight: 600; letter-spacing: .04em; text-transform: uppercase;\\n color: var(--text-quaternary); padding: 0 var(--s-2); }\\n\\n/* ── builder toolbar: stationery picker dropdown ─────────────── */\\n/* lift the top bar above the floating lens pill (z-popover) so the\\n stationery dropdown isn't painted over by the Edit/Preview controls */\\n.pb-bar { z-index: var(--z-tooltip); }\\n.pb-stnpick { position: relative; }\\n.pb-stnpick-btn { display: inline-flex; align-items: center; gap: var(--s-2); height: 30px; max-width: 220px; padding: 0 8px 0 10px;\\n border-radius: var(--r-md); border: 1px solid var(--border-subtle); background: var(--surface-muted);\\n font-size: var(--text-xs); font-weight: 600; color: var(--text-primary); cursor: pointer; }\\n.pb-stnpick-btn:hover { background: var(--surface-sunken); }\\n.pb-stnpick-btn.is-open { border-color: var(--brand-green); box-shadow: 0 0 0 3px var(--green-100, rgba(46,178,115,.16)); }\\n.pb-stnpick-btn > svg { width: 13px; height: 13px; color: var(--text-tertiary); flex-shrink: 0; }\\n.pb-stnpick-btn > svg:last-child { color: var(--text-quaternary); }\\n.pb-stnpick-lbl { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.pb-stnpick-dot { width: 11px; height: 11px; border-radius: var(--r-full); flex-shrink: 0; box-shadow: inset 0 0 0 1px rgba(0,0,0,.12); }\\n\\n.pb-stnpick-menu { position: absolute; top: calc(100% + 6px); right: 0; width: 288px; z-index: 60;\\n background: var(--surface-raised); border: 1px solid var(--border-subtle); border-radius: var(--r-lg);\\n box-shadow: var(--shadow-lg, 0 16px 40px rgba(0,0,0,.18)); padding: var(--s-2); }\\n.pb-stnpick-grp { font-size: var(--text-2_5xs); font-weight: 700; letter-spacing: .07em; text-transform: uppercase;\\n color: var(--text-quaternary); padding: var(--s-3) var(--s-3) var(--s-2); }\\n.pb-stnpick-grp:not(:first-child) { border-top: 1px solid var(--border-subtle); margin-top: var(--s-2); }\\n.pb-stnpick-item { display: flex; align-items: center; gap: var(--s-3); width: 100%; padding: var(--s-2) var(--s-3);\\n border-radius: var(--r-md); text-align: left; cursor: pointer; color: var(--text-primary); }\\n.pb-stnpick-item:hover { background: var(--surface-muted); }\\n.pb-stnpick-item.is-sel { background: var(--green-50, rgba(46,178,115,.08)); }\\n.pb-stnpick-item > .pb-stnpick-dot { margin: 2px 1px; }\\n.pb-stnpick-ic { width: 13px; display: grid; place-items: center; color: var(--text-tertiary); }\\n.pb-stnpick-ic svg { width: 14px; height: 14px; }\\n.pb-stnpick-itemt { flex: 1; display: flex; flex-direction: column; font-size: var(--text-sm); font-weight: 600; line-height: 1.2; min-width: 0; }\\n.pb-stnpick-itemt small { font-size: var(--text-2_5xs); font-weight: 500; color: var(--text-tertiary); margin-top: 2px;\\n text-transform: capitalize; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.pb-stnpick-item > svg { width: 15px; height: 15px; color: var(--brand-green); flex-shrink: 0; }\\n.pb-stnpick-foot { border-top: 1px solid var(--border-subtle); margin-top: var(--s-2); padding-top: var(--s-2); }\\n.pb-stnpick-foot button { display: flex; align-items: center; gap: var(--s-2); width: 100%; padding: var(--s-2) var(--s-3);\\n border-radius: var(--r-md); font-size: var(--text-xs); font-weight: 600; color: var(--text-secondary); cursor: pointer; }\\n.pb-stnpick-foot button:hover { background: var(--surface-muted); color: var(--text-primary); }\\n.pb-stnpick-foot button svg { width: 14px; height: 14px; color: var(--text-tertiary); }\\n\\n/* ── builder: body masthead/footer SUPPRESSED when a stationery owns them ──\\n Every template body ships with its own .pbd-lh company letterhead and\\n .pbd-foot footer. When the document uses a Stationery preset / Pre-printed\\n / Blank, the stationery (or nothing) provides those — so we hide the body's\\n built-in company block + footer but KEEP the doc-type/number bar. Applied to\\n the live pages AND the off-screen measure surface so pagination stays exact. */\\n.pb-stn .pbd-lh .pbd-logo,\\n.pb-stn .pbd-lh .pbd-lh-co { display: none !important; }\\n.pb-stn .pbd-lh { border-bottom: none; padding-bottom: 0; margin-bottom: 2px; gap: 0; }\\n.pb-stn .pbd-lh-doc { text-align: left; }\\n.pb-stn .pbd-foot { display: none !important; }\\n\\n/* mode segmented in the top bar */\\n.st-mode { display: inline-flex; background: var(--surface-muted); border-radius: var(--r-md); padding: 2px; gap: 2px; }.st-mode button { height: 26px; padding: 0 var(--s-4); border-radius: var(--r-sm); font-size: var(--text-xs); font-weight: 600;\\n color: var(--text-tertiary); display: inline-flex; align-items: center; gap: var(--s-2); white-space: nowrap; }\\n.st-mode button svg { width: 13px; height: 13px; }\\n.st-mode button.is-active { background: var(--surface-raised); color: var(--text-primary); box-shadow: var(--shadow-xs); }\\n\\n/* registration-items editor (rail) */\\n.st-reg { display: flex; flex-direction: column; gap: var(--s-3); }\\n.st-reg-row { display: flex; align-items: center; gap: var(--s-2); }\\n.st-reg-row .cx-input { height: 28px; }\\n.st-reg-row .st-reg-lbl { width: 92px; flex-shrink: 0; }\\n.st-reg-del { width: 26px; height: 28px; border-radius: var(--r-sm); display: grid; place-items: center; color: var(--text-tertiary); flex-shrink: 0; }\\n.st-reg-del:hover { background: var(--danger-bg); color: var(--danger); }\\n.st-reg-del svg { width: 13px; height: 13px; }\\n\\n/* rail brand-colour swatches incl. a custom picker */\\n.st-brandsw { display: flex; gap: var(--s-3); flex-wrap: wrap; justify-content: flex-end; align-items: center; }\\n.st-brandsw .cx-swatch { width: 26px; height: 26px; }\\n.st-brandsw .st-swatch-custom { position: relative; width: 26px; height: 26px; border-radius: var(--r-md); overflow: hidden;\\n border: 1px dashed var(--border-strong); display: grid; place-items: center; cursor: pointer; }\\n.st-brandsw .st-swatch-custom input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }\\n.st-brandsw .st-swatch-custom svg { width: 13px; height: 13px; color: var(--text-tertiary); }\\n\\n/* preprinted hint card in rail */\\n.st-prehint { display: flex; gap: var(--s-3); padding: var(--s-4) var(--s-5); margin: 0 0 var(--s-4); font-size: var(--text-xs);\\n line-height: 1.5; color: var(--ai-fg-deep); background: var(--ai-bg); border-radius: var(--r-md); }\\n.st-prehint svg { width: 14px; height: 14px; flex-shrink: 0; margin-top: 1px; }\\n\\n/* small caption under variant picker */\\n.st-variantnote { font-size: var(--text-2_5xs); color: var(--text-quaternary); margin-top: var(--s-3); line-height: 1.4; }\\n\\n/* print */\\n@media print {\\n /* A4 with NO browser margins → removes the date/title chrome AND keeps\\n the 794×1123px page on a single sheet (no footer spilling to page 2) */\\n @page { size: A4 portrait; margin: 0; }\\n html, body { width: 794px; height: auto !important; margin: 0 !important; background: #fff !important; }\\n .pb-bar, .pb-side, .st-toolbar, .st-stage > .st-toolbar, .pb-zoomfloat, .pb-toast, .pb-lensbar, .pb-lens { display: none !important; }\\n .pb, .pb-work, .pb-stage, .st-stage, .pb-stage-scroll { display: block !important; height: auto !important; min-height: 0 !important; overflow: visible !important; background: #fff !important; padding: 0 !important; }\\n .pb-zoomwrap { transform: none !important; margin: 0 !important; width: auto !important; }\\n .pb-pages { gap: 0 !important; transform: none !important; }\\n .pbd-page { box-shadow: none !important; margin: 0 !important; min-height: 1122px !important; break-after: page; page-break-after: always; }\\n .pbd-page:last-child { break-after: auto; page-break-after: auto; }\\n .st-ed, .st-ed-inline { box-shadow: none !important; background: none !important; }\\n .st-logo-slot .st-logo-hint { display: none !important; }\\n .st-reserve { background: none !important; border: none !important; }\\n .st-reserve span { display: none !important; }\\n .st-head, .st-foot-band, .pbd-items thead th, .pbd-tot-grand, .st-doctype, .pbd-status { -webkit-print-color-adjust: exact; print-color-adjust: exact; }\\n}\\n.st-free-content {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 100%;\\n width: 100%;\\n}\\n.st-free-content > * {\\n margin: 0 !important;\\n width: 100% !important;\\n box-sizing: border-box !important;\\n word-break: break-word;\\n pointer-events: none !important;\\n}\\n\"","export default \":root,\\n.templates,\\n.pb {\\n\\n /* ── Brand ──────────────────────────────────────────────── */\\n --brand-green: #2EB273;\\n --brand-green-deep: #1A8A56;\\n --brand-green-dark: #146B43;\\n --brand-navy: #001866;\\n --brand-navy-soft: #1B2C6E;\\n\\n /* ── Primary scale (green) ──────────────────────────────── */\\n --green-50: #F1FBF6;\\n --green-100: #E2F5EC;\\n --green-200: #C8EBD8;\\n --green-300: #A7DEC2;\\n --green-400: #6DCB9D;\\n --green-500: #2EB273;\\n --green-600: #1A8A56;\\n --green-700: #146B43;\\n --green-800: #0E4D31;\\n --green-900: #073220;\\n\\n /* ── Neutrals — warm-tinted, calm ───────────────────────── */\\n --n-0: #FFFFFF;\\n --n-25: #FCFCFD;\\n --n-50: #F7F8F9;\\n --n-75: #F2F3F5;\\n --n-100: #ECEDEF;\\n --n-150: #E1E3E6;\\n --n-200: #D2D5D9;\\n --n-300: #B6BABF;\\n --n-400: #9498A0;\\n --n-450: #767B83;\\n /* AA-capable mid-grey — quaternary text floor (4.5:1 on white) */\\n --n-500: #6D7178;\\n --n-600: #54585F;\\n --n-700: #3D4046;\\n --n-800: #25272C;\\n --n-900: #15171B;\\n --n-950: #0B0C0F;\\n\\n /* ── Surfaces ───────────────────────────────────────────── */\\n --surface-canvas: var(--n-25);\\n /* page bg */\\n --surface-raised: var(--n-0);\\n /* cards, top bar, main panels */\\n --surface-sunken: var(--n-50);\\n /* sidebars, toolbars */\\n --surface-muted: var(--n-75);\\n /* inactive inputs, subtle wells */\\n --surface-hover: var(--n-75);\\n --surface-active: var(--n-100);\\n --surface-overlay: rgba(15, 17, 21, 0.32);\\n /* modal/sheet scrim (added 2A) */\\n --surface-overlay-strong: rgba(15, 17, 21, 0.56);\\n /* fullscreen scrim (added 2A) */\\n --surface-inverse: var(--n-900);\\n /* tooltip, snackbar surface (added 2A) */\\n --text-on-inverse: var(--n-0);\\n /* text on inverse surface (added 2A) */\\n\\n /* ── Borders ────────────────────────────────────────────── */\\n --border-subtle: var(--n-100);\\n --border-default: var(--n-150);\\n --border-strong: var(--n-200);\\n --border-divider: var(--n-100);\\n /* inline cell dividers (added 2A) */\\n --border-focus: var(--green-500);\\n --border-focus-ai: var(--ai-fg);\\n /* added 2A */\\n --border-focus-danger: var(--danger);\\n /* added 2A */\\n\\n /* ── Text ───────────────────────────────────────────────── */\\n --text-primary: var(--n-900);\\n --text-secondary: var(--n-700);\\n --text-tertiary: var(--n-500);\\n --text-quaternary: var(--n-450);\\n /* a11y 4.3 — was n-400 (2.89:1, sub-AA on real text) */\\n --text-disabled: var(--n-300);\\n --text-inverse: var(--n-0);\\n --text-brand: var(--green-700);\\n /* a11y 4.4 — was green-600 (4.36:1, just-misses AA for text) */\\n --text-brand-strong: var(--green-700);\\n\\n /* ── Action role — 3-tier brand indirection (primitive → brand → role)\\n Components consume --color-action ONLY; a new product/white-label\\n theme reskins by overriding --brand-action, never by touching a\\n component (gap-audit F1). Fill is green-700 so white text clears AA\\n at 6.53:1 — brand-green #2EB273 (2.72:1) stays for logo/identity. ── */\\n --brand-action: var(--green-700);\\n /* tier 2 — overridable per product/theme */\\n --brand-action-hover: var(--green-800);\\n --brand-action-active: var(--green-900);\\n --color-action: var(--brand-action);\\n /* tier 3 — the role components use */\\n --color-action-hover: var(--brand-action-hover);\\n --color-action-active: var(--brand-action-active);\\n --color-on-action: #FFFFFF;\\n /* text/icon on action fill */\\n\\n /* ── Semantic colors ────────────────────────────────────── */\\n --success: #0C8C6A;\\n /* OWN teal-shifted ramp (~+15° off brand green) so brand green never signals routine status (1.1/7.1) */\\n --success-bg: #D8F3EB;\\n --success-bg-strong: #B6E8D8;\\n\\n --warning: #B26B0F;\\n --warning-bg: #FEF1DD;\\n --warning-bg-strong: #FCDFB1;\\n\\n --danger: #C2363A;\\n --danger-bg: #FBE3E5;\\n --danger-bg-strong: #F5C7CB;\\n\\n --info: #2A6FDB;\\n --info-bg: #E6EEF9;\\n --info-bg-strong: #CDDDF3;\\n\\n --neutral-bg: var(--n-100);\\n --neutral-fg: var(--n-700);\\n\\n /* ── Row selection (brand-tinted, dark-aware) ──────────── */\\n --row-selected-bg: #EAF1FB;\\n /* neutral/info tint — NOT brand green (1.1) */\\n --row-selected-bg-hover: #D9E7F8;\\n\\n /* ── Semantic strong-fg (text on *-bg-strong) — added 2A ── */\\n --success-fg-strong: #07543F;\\n /* teal-dark — matches de-branded success ramp */\\n --warning-fg-strong: #5C3604;\\n --danger-fg-strong: #7A1A1F;\\n --info-fg-strong: #133A7E;\\n\\n /* ── AI accent (purple) — for AI-suggested fields, agents ── */\\n --ai-fg: #6D45D9;\\n --ai-bg: #EFE9FC;\\n --ai-bg-strong: #DDD0F8;\\n --ai-fg-deep: #5535B8;\\n /* filled-AI button bg (added 2A) */\\n --ai-on-fill: #FFFFFF;\\n /* text on ai-fg-deep (added 2A) */\\n\\n /* ── Tag palette (8 hues, low-chroma) ───────────────────── */\\n --tag-slate-bg: #ECEDEF;\\n --tag-slate-fg: #3D4046;\\n --tag-green-bg: #E2F5EC;\\n --tag-green-fg: #1A6B43;\\n --tag-blue-bg: #E6EEF9;\\n --tag-blue-fg: #1F4FA8;\\n --tag-purple-bg: #EFE9FC;\\n --tag-purple-fg: #5535B8;\\n --tag-amber-bg: #FEF1DD;\\n --tag-amber-fg: #8A540B;\\n --tag-rose-bg: #FCE5E8;\\n --tag-rose-fg: #A8232A;\\n --tag-teal-bg: #DDF3F1;\\n --tag-teal-fg: #156B66;\\n --tag-pink-bg: #FBE4F1;\\n --tag-pink-fg: #9D2B6F;\\n\\n /* ── Typography ─────────────────────────────────────────── */\\n --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\\n --font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;\\n\\n /* compact scale — Attio-tight\\n Half-step tokens (3xs, 2_5xs) added during audit to absorb stray sizes\\n (9.5px, 10.5px, 11.5px) that were hardcoded across components. */\\n --text-3xs: 9px;\\n /* @restricted — numeric count-chips ONLY, never words (a11y 1.4); enforced by the font-size disallow-list in .stylelintrc.json. Legit count-chip uses opt in with a stylelint-disable-line comment. */\\n --text-2_5xs: 10px;\\n /* meta, kbd, eyebrows — section heads */\\n --text-2xs: 10px;\\n /* @deprecated — duplicate of --text-2_5xs; migrate to --text-2_5xs (1.2) */\\n --text-xs: 11px;\\n /* table meta, captions, footer text */\\n --text-sm: 12px;\\n /* default body in dense UI, buttons, chips, table cells */\\n --text-md: 13px;\\n /* preferred body, primary buttons */\\n --text-base: 14px;\\n /* page titles in narrow chrome */\\n --text-lg: 15px;\\n /* page title default */\\n --text-xl: 18px;\\n /* h2 */\\n --text-2xl: 22px;\\n /* h1 */\\n --text-3xl: 26px;\\n /* display */\\n --text-4xl: 32px;\\n /* hero */\\n --text-5xl: 44px;\\n /* hero page title */\\n\\n --leading-1: 1;\\n /* @kind font */\\n /* single-line dense cells (added 2A) */\\n --leading-tight-1: 1.15;\\n /* @kind font */\\n /* dense headings (added 2A) */\\n --leading-tight: 1.25;\\n /* @kind font */\\n --leading-snug: 1.35;\\n /* @kind font */\\n --leading-normal: 1.5;\\n /* @kind font */\\n\\n /* Font weights — explicit tokens so HC theme can shift +100 (added 2A) */\\n --fw-regular: 400;\\n /* @kind font */\\n --fw-medium: 500;\\n /* @kind font */\\n --fw-semibold: 600;\\n /* @kind font */\\n --fw-bold: 700;\\n /* @kind font */\\n\\n --tracking-tight: -0.018em;\\n /* @kind font */\\n /* display */\\n --tracking-snug: -0.011em;\\n /* @kind font */\\n /* headings */\\n --tracking-normal: -0.003em;\\n /* @kind font */\\n /* body — Attio is barely-tracked */\\n --tracking-wide: 0.04em;\\n /* @kind font */\\n /* uppercase eyebrows */\\n\\n /* ── Spacing — 4px grid ─────────────────────────────────── */\\n --s-0: 0px;\\n --s-1: 2px;\\n --s-2: 4px;\\n --s-3: 6px;\\n --s-4: 8px;\\n --s-5: 10px;\\n --s-6: 12px;\\n --s-7: 14px;\\n /* added 2A — absorbs ~80 stray 14px values across composites */\\n --s-8: 16px;\\n --s-10: 20px;\\n --s-12: 24px;\\n --s-16: 32px;\\n --s-20: 40px;\\n --s-24: 48px;\\n --s-32: 64px;\\n\\n /* ── Radius ─────────────────────────────────────────────── */\\n --r-xs: 3px;\\n --r-sm: 4px;\\n --r-md: 6px;\\n /* default — buttons, inputs, chips */\\n --r-lg: 8px;\\n /* cards, popovers */\\n --r-xl: 10px;\\n /* sheets, modals */\\n --r-2xl: 14px;\\n --r-full: 9999px;\\n\\n /* ── Shadows — ultra subtle ─────────────────────────────── */\\n --shadow-xs: 0 1px 0 rgba(15, 17, 21, .04);\\n --shadow-sm: 0 1px 2px rgba(15, 17, 21, .04),\\n 0 0 0 1px rgba(15, 17, 21, .04);\\n --shadow-md: 0 2px 4px rgba(15, 17, 21, .04),\\n 0 1px 2px rgba(15, 17, 21, .04),\\n 0 0 0 1px rgba(15, 17, 21, .05);\\n --shadow-lg: 0 12px 32px -8px rgba(15, 17, 21, .14),\\n 0 4px 8px -2px rgba(15, 17, 21, .06),\\n 0 0 0 1px rgba(15, 17, 21, .04);\\n --shadow-xl: 0 24px 48px -12px rgba(15, 17, 21, .22),\\n 0 8px 16px -4px rgba(15, 17, 21, .08),\\n 0 0 0 1px rgba(15, 17, 21, .04);\\n --shadow-focus: 0 0 0 3px rgba(46, 178, 115, .18);\\n --shadow-focus-ai: 0 0 0 3px rgba(109, 69, 217, .18);\\n --shadow-focus-danger: 0 0 0 3px rgba(194, 54, 58, .18);\\n /* added 2A */\\n --shadow-inset-divider-b: inset 0 -1px 0 var(--border-subtle);\\n /* added 2A */\\n --shadow-inset-divider-t: inset 0 1px 0 var(--border-subtle);\\n /* added 2A */\\n\\n /* ── Motion ─────────────────────────────────────────────── */\\n --ease-out: cubic-bezier(.16, 1, .3, 1);\\n /* @kind other */\\n --ease-in-out: cubic-bezier(.65, 0, .35, 1);\\n /* @kind other */\\n --ease-emphasized: cubic-bezier(.2, 0, 0, 1);\\n /* @kind other */\\n /* modal entry (added 2A) */\\n --ease-decelerate: cubic-bezier(0, 0, .2, 1);\\n /* @kind other */\\n /* sheet entry (added 2A) */\\n --dur-fast: 120ms;\\n /* @kind other */\\n --dur-base: 180ms;\\n /* @kind other */\\n --dur-slow: 260ms;\\n /* @kind other */\\n\\n /* ── Component heights — Attio-compact ──────────────────── */\\n --h-xs: 20px;\\n --h-sm: 24px;\\n --h-md: 28px;\\n /* default buttons, inputs */\\n --h-lg: 32px;\\n --row-h: 30px;\\n /* table row */\\n --row-h-c: 28px;\\n /* table row, compact */\\n\\n /* ── Layout ─────────────────────────────────────────────── */\\n --sidebar-w: 220px;\\n --sidebar-w-mini: 56px;\\n --topbar-h: 44px;\\n --subbar-h: 40px;\\n --content-pad-x: 20px;\\n --content-pad-y: 16px;\\n\\n /* ── Responsive scale standards ─────────────────────────────\\n Five breakpoints (added 2A). Tokens above are *desktop* values.\\n Mobile/tablet overrides live in responsive.css. */\\n --bp-sm: 480px;\\n --bp-md: 768px;\\n --bp-mobile: 640px;\\n /* @deprecated alias — use --bp-md/--bp-sm (1.2) */\\n --bp-tablet: 1024px;\\n /* @deprecated alias — use --bp-lg (1.2) */\\n --bp-lg: 1280px;\\n --bp-xl: 1440px;\\n --bp-2xl: 1920px;\\n\\n /* Container-query breakpoints — for composites that need to\\n respond to their container width, not the viewport (added 2A) */\\n --cq-sm: 360px;\\n --cq-md: 600px;\\n --cq-lg: 900px;\\n\\n /* Touch-target floor for mobile (WCAG 2.5.5 ≥ 44px) */\\n --touch-min: 44px;\\n /* @kind spacing */\\n\\n /* Interactive hit-target floor — decoupled from painted size (T1).\\n Fine pointer 32px; coarse (touch) bumped to --touch-min below. */\\n --hit-min: 32px;\\n /* @kind spacing */\\n\\n /* ── Z-index scale (added 2A) — every overlay must use these.\\n Raw values (49, 48, 30, 2, 1) flagged in audit are replaced. */\\n --z-base: 1;\\n /* @kind other */\\n --z-sticky: 20;\\n /* @kind other */\\n --z-dropdown: 30;\\n /* @kind other */\\n --z-drawer: 35;\\n /* @kind other */\\n --z-popover: 40;\\n /* @kind other */\\n --z-tooltip: 45;\\n /* @kind other */\\n --z-modal-scrim: 48;\\n /* @kind other */\\n --z-modal: 50;\\n /* @kind other */\\n --z-toast: 60;\\n /* @kind other */\\n --z-debug: 99;\\n /* @kind other */\\n\\n /* Density mode — set by responsive.css per breakpoint.\\n Components consume these instead of hardcoding heights. */\\n --h-control: var(--h-md);\\n /* default control height */\\n --h-control-sm: var(--h-sm);\\n --h-row: var(--row-h);\\n --pad-x: var(--content-pad-x);\\n --pad-y: var(--content-pad-y);\\n\\n}\\n\\n/* ═══════════════════════════════════════════════════════════════\\n ERPForce PDF / Document Template Builder\\n Builder chrome + the paginated A4 document (.pbd-*)\\n Light theme · matches Reports app · uses v2 tokens\\n ═══════════════════════════════════════════════════════════════ */\\n\\nhtml,\\nbody {\\n height: 100%;\\n}\\n\\nbody {\\n background: var(--surface-sunken);\\n overflow: hidden;\\n}\\n\\n#root {\\n height: 100%;\\n}\\n\\n.pb,\\n.pb *,\\n.pb *::before,\\n.pb *::after {\\n box-sizing: border-box;\\n}\\n\\n.pb {\\n height: 100%;\\n display: flex;\\n flex-direction: column;\\n color: var(--text-primary);\\n font-family: var(--font-sans);\\n font-size: var(--text-sm);\\n line-height: 1.5;\\n}\\n\\n/* ── top bar ────────────────────────────────────────────────── */\\n.pb-top {\\n height: 48px;\\n flex-shrink: 0;\\n display: flex;\\n align-items: center;\\n gap: var(--s-5);\\n padding: 0 var(--s-6);\\n background: var(--surface-raised);\\n border-bottom: 1px solid var(--border-default);\\n z-index: var(--z-sticky);\\n}\\n\\n.pb-brand {\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n}\\n\\n.pb-brand img {\\n height: 18px;\\n width: auto;\\n display: block;\\n}\\n\\n.pb-brand-tag {\\n font-size: var(--text-2_5xs);\\n font-weight: 700;\\n letter-spacing: var(--tracking-wide);\\n text-transform: uppercase;\\n color: var(--text-quaternary);\\n padding: 3px 7px;\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-sm);\\n}\\n\\n.pb-crumb {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n font-size: var(--text-sm);\\n color: var(--text-tertiary);\\n}\\n\\n.pb-crumb svg {\\n width: 13px;\\n height: 13px;\\n}\\n\\n.pb-crumb b {\\n color: var(--text-primary);\\n font-weight: 600;\\n}\\n\\n.pb-doc-input {\\n font: inherit;\\n font-size: var(--text-sm);\\n font-weight: 600;\\n color: var(--text-primary);\\n border: 1px solid transparent;\\n border-radius: var(--r-sm);\\n padding: 3px 7px;\\n max-width: 240px;\\n background: transparent;\\n}\\n\\n.pb-doc-input:hover {\\n border-color: var(--border-default);\\n}\\n\\n.pb-doc-input:focus {\\n border-color: var(--border-focus);\\n box-shadow: var(--shadow-focus);\\n outline: none;\\n background: var(--surface-raised);\\n}\\n\\n.pb-top-sp {\\n flex: 1;\\n}\\n\\n/* generic buttons */\\n.pbtn {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-3);\\n height: 30px;\\n padding: 0 var(--s-5);\\n border-radius: var(--r-md);\\n font-size: var(--text-sm);\\n font-weight: 500;\\n color: var(--text-secondary);\\n border: 1px solid var(--border-default);\\n background: var(--surface-raised);\\n white-space: nowrap;\\n transition: background var(--dur-fast), border-color var(--dur-fast);\\n}\\n\\n.pbtn svg {\\n width: 14px;\\n height: 14px;\\n}\\n\\n.pbtn:hover {\\n background: var(--surface-hover);\\n color: var(--text-primary);\\n}\\n\\n.pbtn--primary {\\n background: var(--color-action);\\n border-color: transparent;\\n color: var(--color-on-action);\\n box-shadow: var(--shadow-sm);\\n}\\n\\n.pbtn--primary:hover {\\n background: var(--color-action-hover);\\n color: var(--color-on-action);\\n}\\n\\n.pbtn--ai {\\n background: var(--ai-fg-deep);\\n border-color: transparent;\\n color: #fff;\\n}\\n\\n.pbtn--ai:hover {\\n background: var(--ai-fg);\\n color: #fff;\\n}\\n\\n.pbtn--ghost {\\n border-color: transparent;\\n background: transparent;\\n}\\n\\n.pbtn--ghost:hover {\\n background: var(--surface-hover);\\n}\\n\\n.pbtn--sm {\\n height: 26px;\\n padding: 0 var(--s-4);\\n font-size: var(--text-xs);\\n}\\n\\n.pbtn--icon {\\n width: 30px;\\n padding: 0;\\n justify-content: center;\\n}\\n\\n.pbtn.is-on {\\n background: var(--green-50);\\n border-color: var(--green-300);\\n color: var(--text-brand-strong);\\n}\\n\\n.pbtn:disabled {\\n opacity: .45;\\n cursor: not-allowed;\\n}\\n\\n/* segmented */\\n.pb-seg {\\n display: inline-flex;\\n background: var(--surface-muted);\\n border-radius: var(--r-md);\\n padding: 2px;\\n gap: 2px;\\n}\\n\\n.pb-seg button {\\n height: 24px;\\n padding: 0 var(--s-4);\\n border-radius: var(--r-sm);\\n font-size: var(--text-xs);\\n font-weight: 500;\\n color: var(--text-tertiary);\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-2);\\n}\\n\\n.pb-seg button svg {\\n width: 12px;\\n height: 12px;\\n}\\n\\n.pb-seg button.is-active {\\n background: var(--surface-raised);\\n color: var(--text-primary);\\n box-shadow: var(--shadow-xs);\\n font-weight: 600;\\n}\\n\\n.pb-seg button:not(.is-active):hover {\\n color: var(--text-secondary);\\n}\\n\\n/* ── body 3-column workspace ────────────────────────────────── */\\n.pb-body {\\n flex: 1;\\n display: flex;\\n min-height: 0;\\n}\\n\\n/* left rail */\\n.pb-rail {\\n width: 248px;\\n flex-shrink: 0;\\n background: var(--surface-raised);\\n border-right: 1px solid var(--border-default);\\n display: flex;\\n flex-direction: column;\\n min-height: 0;\\n}\\n\\n.pb-rail--collapsed {\\n width: 0;\\n overflow: hidden;\\n border: 0;\\n}\\n\\n.pb-rail-tabs {\\n display: flex;\\n padding: var(--s-4) var(--s-4) 0;\\n gap: var(--s-2);\\n}\\n\\n.pb-rail-tab {\\n flex: 1;\\n height: 28px;\\n border-radius: var(--r-md);\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--text-tertiary);\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--s-2);\\n}\\n\\n.pb-rail-tab svg {\\n width: 13px;\\n height: 13px;\\n}\\n\\n.pb-rail-tab.is-active {\\n background: var(--surface-active);\\n color: var(--text-primary);\\n}\\n\\n.pb-rail-body {\\n flex: 1;\\n overflow: auto;\\n padding: var(--s-4);\\n scrollbar-width: thin;\\n}\\n\\n/* field tree */\\n.pb-fnote {\\n font-size: var(--text-xs);\\n color: var(--text-tertiary);\\n line-height: 1.5;\\n margin-bottom: var(--s-5);\\n padding: var(--s-4) var(--s-5);\\n background: var(--surface-muted);\\n border-radius: var(--r-md);\\n}\\n\\n.pb-fnote code {\\n font-family: var(--font-mono);\\n font-size: 10.5px;\\n color: var(--text-brand-strong);\\n background: var(--green-50);\\n padding: 1px 4px;\\n border-radius: 3px;\\n}\\n\\n.pb-fgroup {\\n margin-bottom: var(--s-2);\\n}\\n\\n.pb-fgroup-h {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n width: 100%;\\n height: 30px;\\n padding: 0 var(--s-3);\\n border-radius: var(--r-md);\\n font-size: var(--text-sm);\\n font-weight: 600;\\n color: var(--text-secondary);\\n}\\n\\n.pb-fgroup-h:hover {\\n background: var(--surface-hover);\\n}\\n\\n.pb-fgroup-h svg.pb-fchev {\\n width: 13px;\\n height: 13px;\\n color: var(--text-quaternary);\\n transition: transform var(--dur-fast);\\n}\\n\\n.pb-fgroup-h.is-open svg.pb-fchev {\\n transform: rotate(90deg);\\n}\\n\\n.pb-fgroup-ic {\\n width: 22px;\\n height: 22px;\\n border-radius: var(--r-sm);\\n display: grid;\\n place-items: center;\\n background: var(--surface-muted);\\n color: var(--text-tertiary);\\n}\\n\\n.pb-fgroup-ic svg {\\n width: 13px;\\n height: 13px;\\n}\\n\\n.pb-fgroup-c {\\n font-size: var(--text-2xs);\\n color: var(--text-quaternary);\\n margin-left: auto;\\n font-variant-numeric: tabular-nums;\\n}\\n\\n.pb-fields {\\n display: flex;\\n flex-direction: column;\\n padding: var(--s-1) 0 var(--s-3) 30px;\\n gap: 1px;\\n}\\n\\n.pb-field {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n height: 28px;\\n padding: 0 var(--s-3);\\n border-radius: var(--r-sm);\\n cursor: pointer;\\n}\\n\\n.pb-field:hover {\\n background: var(--green-50);\\n}\\n\\n.pb-field-tag {\\n font-family: var(--font-mono);\\n font-size: 10.5px;\\n color: var(--text-brand-strong);\\n white-space: nowrap;\\n}\\n\\n.pb-field-lbl {\\n font-size: var(--text-xs);\\n color: var(--text-tertiary);\\n margin-left: auto;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n.pb-field-ins {\\n width: 18px;\\n height: 18px;\\n border-radius: 4px;\\n display: grid;\\n place-items: center;\\n color: var(--brand-green);\\n opacity: 0;\\n flex-shrink: 0;\\n}\\n\\n.pb-field:hover .pb-field-ins {\\n opacity: 1;\\n}\\n\\n.pb-field-ins svg {\\n width: 12px;\\n height: 12px;\\n}\\n\\n.pb-field--loop .pb-field-tag {\\n color: var(--ai-fg);\\n}\\n\\n/* template switcher list */\\n.pb-tlist {\\n display: flex;\\n flex-direction: column;\\n gap: var(--s-2);\\n}\\n\\n.pb-titem {\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n padding: var(--s-4);\\n border-radius: var(--r-md);\\n border: 1px solid var(--border-subtle);\\n cursor: pointer;\\n text-align: left;\\n}\\n\\n.pb-titem:hover {\\n border-color: var(--border-strong);\\n background: var(--surface-hover);\\n}\\n\\n.pb-titem.is-active {\\n border-color: var(--green-400);\\n background: var(--green-50);\\n}\\n\\n.pb-titem-ic {\\n width: 30px;\\n height: 30px;\\n border-radius: var(--r-md);\\n display: grid;\\n place-items: center;\\n flex-shrink: 0;\\n}\\n\\n.pb-titem-ic svg {\\n width: 15px;\\n height: 15px;\\n}\\n\\n.pb-titem-t {\\n font-size: var(--text-sm);\\n font-weight: 600;\\n}\\n\\n.pb-titem-s {\\n font-size: var(--text-xs);\\n color: var(--text-tertiary);\\n margin-top: 1px;\\n}\\n\\n/* ── center: editor + preview ───────────────────────────────── */\\n.pb-center {\\n flex: 1;\\n display: flex;\\n min-width: 0;\\n min-height: 0;\\n}\\n\\n/* code editor */\\n.pb-editor {\\n width: 44%;\\n min-width: 360px;\\n max-width: 620px;\\n flex-shrink: 0;\\n display: flex;\\n flex-direction: column;\\n background: #fbfbfc;\\n border-right: 1px solid var(--border-default);\\n min-height: 0;\\n}\\n\\n.pb-editor--hidden {\\n display: none;\\n}\\n\\n.pb-editor-bar {\\n height: 36px;\\n flex-shrink: 0;\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n padding: 0 var(--s-5);\\n border-bottom: 1px solid var(--border-subtle);\\n background: var(--surface-raised);\\n}\\n\\n.pb-editor-bar-t {\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--text-secondary);\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n}\\n\\n.pb-editor-bar-t svg {\\n width: 13px;\\n height: 13px;\\n color: var(--text-tertiary);\\n}\\n\\n.pb-editor-dirty {\\n width: 6px;\\n height: 6px;\\n border-radius: 50%;\\n background: var(--warning);\\n}\\n\\n.pb-editor-wrap {\\n flex: 1;\\n position: relative;\\n min-height: 0;\\n overflow: hidden;\\n display: flex;\\n}\\n\\n.pb-gutter {\\n flex-shrink: 0;\\n padding: 12px 0;\\n text-align: right;\\n background: #f4f5f7;\\n color: var(--text-quaternary);\\n font-family: var(--font-mono);\\n font-size: 11px;\\n line-height: 1.55;\\n user-select: none;\\n overflow: hidden;\\n border-right: 1px solid var(--border-subtle);\\n}\\n\\n.pb-gutter-inner span {\\n display: block;\\n padding: 0 10px 0 12px;\\n}\\n\\n.pb-code-scroll {\\n flex: 1;\\n position: relative;\\n overflow: hidden;\\n min-width: 0;\\n}\\n\\n.pb-code-area,\\n.pb-code-hl {\\n margin: 0;\\n padding: 12px 14px;\\n font-family: var(--font-mono);\\n font-size: 11px;\\n line-height: 1.55;\\n tab-size: 2;\\n white-space: pre;\\n word-wrap: normal;\\n box-sizing: border-box;\\n}\\n\\n.pb-code-hl {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n pointer-events: none;\\n color: var(--n-800);\\n overflow: visible;\\n will-change: transform;\\n}\\n\\n.pb-code-area {\\n position: absolute;\\n inset: 0;\\n overflow: auto;\\n background: transparent;\\n color: transparent;\\n caret-color: var(--n-900);\\n border: 0;\\n outline: none;\\n resize: none;\\n -webkit-text-fill-color: transparent;\\n scrollbar-width: thin;\\n}\\n\\n.pb-code-area::selection {\\n background: rgba(46, 178, 115, .24);\\n -webkit-text-fill-color: transparent;\\n}\\n\\n/* token colors */\\n.tk-mus {\\n color: var(--ai-fg);\\n}\\n\\n.tk-blk {\\n color: #1f7a4d;\\n font-weight: 600;\\n}\\n\\n.tk-tag {\\n color: #2a6fdb;\\n}\\n\\n.tk-attr {\\n color: #8a540b;\\n}\\n\\n.tk-str {\\n color: #1a8a56;\\n}\\n\\n.tk-com {\\n color: var(--text-quaternary);\\n font-style: italic;\\n}\\n\\n/* preview surface */\\n.pb-preview {\\n flex: 1;\\n min-width: 0;\\n display: flex;\\n flex-direction: column;\\n background: #4b4f54;\\n min-height: 0;\\n}\\n\\n.pb-preview-bar {\\n height: 36px;\\n flex-shrink: 0;\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n padding: 0 var(--s-5);\\n background: var(--surface-raised);\\n border-bottom: 1px solid var(--border-default);\\n}\\n\\n.pb-preview-bar-t {\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--text-secondary);\\n}\\n\\n.pb-preview-pages {\\n font-size: var(--text-xs);\\n color: var(--text-tertiary);\\n font-variant-numeric: tabular-nums;\\n}\\n\\n.pb-zoom {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-2);\\n}\\n\\n.pb-zoom-val {\\n font-size: var(--text-xs);\\n color: var(--text-tertiary);\\n min-width: 38px;\\n text-align: center;\\n font-variant-numeric: tabular-nums;\\n}\\n\\n.pb-zbtn {\\n width: 24px;\\n height: 24px;\\n border-radius: var(--r-sm);\\n display: grid;\\n place-items: center;\\n color: var(--text-tertiary);\\n}\\n\\n.pb-zbtn:hover {\\n background: var(--surface-hover);\\n color: var(--text-primary);\\n}\\n\\n.pb-preview-scroll {\\n flex: 1;\\n overflow: auto;\\n padding: 28px;\\n scrollbar-width: thin;\\n}\\n\\n.pb-pages {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 22px;\\n transform-origin: top center;\\n}\\n\\n/* selection halo on a doc block */\\n.pb-sel-outline {\\n outline: 2px solid var(--ai-fg);\\n outline-offset: 2px;\\n border-radius: 2px;\\n}\\n\\n.pbd [data-block] {\\n cursor: default;\\n}\\n\\n.pb-pick .pbd [data-block] {\\n cursor: pointer;\\n}\\n\\n.pb-pick .pbd [data-block]:hover {\\n outline: 1.5px dashed var(--info);\\n outline-offset: 2px;\\n}\\n\\n/* ── AI panel (right dock) ──────────────────────────────────── */\\n.pb-ai {\\n width: 340px;\\n flex-shrink: 0;\\n background: var(--surface-raised);\\n border-left: 1px solid var(--border-default);\\n display: flex;\\n flex-direction: column;\\n min-height: 0;\\n}\\n\\n.pb-ai--collapsed {\\n width: 0;\\n overflow: hidden;\\n border: 0;\\n}\\n\\n.pb-ai-head {\\n flex-shrink: 0;\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n padding: var(--s-5) var(--s-5) var(--s-4);\\n border-bottom: 1px solid var(--border-subtle);\\n}\\n\\n.pb-ai-spark {\\n width: 26px;\\n height: 26px;\\n border-radius: var(--r-md);\\n background: var(--ai-fg);\\n color: #fff;\\n display: grid;\\n place-items: center;\\n box-shadow: 0 1px 2px rgba(85, 53, 184, .3);\\n}\\n\\n.pb-ai-spark svg {\\n width: 15px;\\n height: 15px;\\n}\\n\\n.pb-ai-head-t {\\n font-size: var(--text-sm);\\n font-weight: 600;\\n}\\n\\n.pb-ai-head-s {\\n font-size: var(--text-xs);\\n color: var(--text-tertiary);\\n margin-top: 1px;\\n}\\n\\n.pb-ai-scroll {\\n flex: 1;\\n overflow: auto;\\n padding: var(--s-5);\\n display: flex;\\n flex-direction: column;\\n gap: var(--s-5);\\n scrollbar-width: thin;\\n}\\n\\n.pb-msg {\\n display: flex;\\n gap: var(--s-4);\\n font-size: var(--text-sm);\\n line-height: 1.5;\\n}\\n\\n.pb-msg-av {\\n width: 22px;\\n height: 22px;\\n border-radius: var(--r-sm);\\n flex-shrink: 0;\\n display: grid;\\n place-items: center;\\n}\\n\\n.pb-msg-av svg {\\n width: 13px;\\n height: 13px;\\n}\\n\\n.pb-msg--ai .pb-msg-av {\\n background: var(--ai-bg);\\n color: var(--ai-fg);\\n}\\n\\n.pb-msg--user .pb-msg-av {\\n background: var(--surface-active);\\n color: var(--text-secondary);\\n}\\n\\n.pb-msg-body {\\n flex: 1;\\n min-width: 0;\\n padding-top: 2px;\\n color: var(--text-secondary);\\n}\\n\\n.pb-msg-body b {\\n color: var(--text-primary);\\n font-weight: 600;\\n}\\n\\n.pb-msg-body code {\\n font-family: var(--font-mono);\\n font-size: 10.5px;\\n background: var(--surface-muted);\\n padding: 1px 4px;\\n border-radius: 3px;\\n color: var(--text-brand-strong);\\n}\\n\\n.pb-msg--user .pb-msg-body {\\n color: var(--text-primary);\\n}\\n\\n.pb-msg-tag {\\n display: inline-flex;\\n align-items: center;\\n gap: 5px;\\n margin-top: var(--s-3);\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--ai-fg);\\n background: var(--ai-bg);\\n border-radius: var(--r-sm);\\n padding: 3px 7px;\\n}\\n\\n.pb-msg-tag svg {\\n width: 11px;\\n height: 11px;\\n}\\n\\n.pb-msg-undo {\\n margin-top: var(--s-3);\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--text-tertiary);\\n text-decoration: underline;\\n text-underline-offset: 2px;\\n}\\n\\n.pb-msg-undo:hover {\\n color: var(--text-primary);\\n}\\n\\n.pb-ai-typing {\\n display: flex;\\n gap: 4px;\\n padding: 4px 0;\\n}\\n\\n.pb-ai-typing i {\\n width: 6px;\\n height: 6px;\\n border-radius: 50%;\\n background: var(--ai-fg);\\n opacity: .4;\\n animation: pb-blink 1.2s infinite;\\n}\\n\\n.pb-ai-typing i:nth-child(2) {\\n animation-delay: .2s;\\n}\\n\\n.pb-ai-typing i:nth-child(3) {\\n animation-delay: .4s;\\n}\\n\\n@keyframes pb-blink {\\n\\n 0%,\\n 60%,\\n 100% {\\n opacity: .25;\\n }\\n\\n 30% {\\n opacity: 1;\\n }\\n}\\n\\n.pb-ai-foot {\\n flex-shrink: 0;\\n border-top: 1px solid var(--border-subtle);\\n padding: var(--s-4);\\n}\\n\\n/* AI scope selector — pick which part of the document to improve */\\n.pb-scope {\\n position: relative;\\n display: flex;\\n flex-wrap: wrap;\\n align-items: center;\\n gap: var(--s-3);\\n margin-bottom: var(--s-4);\\n}\\n\\n.pb-scope-lbl {\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--text-tertiary);\\n}\\n\\n.pb-scope-btn {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-2);\\n height: 28px;\\n padding: 0 var(--s-3);\\n border-radius: var(--r-md);\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--text-secondary);\\n background: var(--surface-raised);\\n border: 1px solid var(--border-default);\\n}\\n\\n.pb-scope-btn:hover {\\n border-color: var(--ai-bg-strong);\\n}\\n\\n.pb-scope-btn>svg {\\n width: 13px;\\n height: 13px;\\n color: var(--ai-fg);\\n}\\n\\n.pb-scope-btn>svg:last-child {\\n width: 12px;\\n height: 12px;\\n color: var(--text-quaternary);\\n margin-left: -1px;\\n}\\n\\n.pb-scope-btn.is-scoped {\\n color: var(--ai-fg-deep);\\n background: var(--ai-bg);\\n border-color: var(--ai-bg-strong);\\n}\\n\\n.pb-scope-menu {\\n position: absolute;\\n bottom: calc(100% + 6px);\\n left: 0;\\n z-index: 40;\\n width: 248px;\\n max-height: 320px;\\n overflow-y: auto;\\n background: var(--surface-raised);\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-lg);\\n box-shadow: var(--shadow-xl);\\n padding: var(--s-2);\\n scrollbar-width: thin;\\n}\\n\\n.pb-scope-menu button {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n width: 100%;\\n padding: var(--s-3);\\n border-radius: var(--r-sm);\\n font-size: var(--text-sm);\\n color: var(--text-secondary);\\n text-align: left;\\n}\\n\\n.pb-scope-menu button:hover {\\n background: var(--ai-bg);\\n color: var(--ai-fg-deep);\\n}\\n\\n.pb-scope-menu button.is-current {\\n color: var(--ai-fg-deep);\\n font-weight: 600;\\n}\\n\\n.pb-scope-menu button svg {\\n width: 14px;\\n height: 14px;\\n flex-shrink: 0;\\n color: var(--ai-fg);\\n}\\n\\n.pb-scope-menu button span {\\n flex: 1;\\n}\\n\\n.pb-scope-menu button .pb-scope-chk,\\n.pb-scope-menu button svg:last-child:not(:first-child) {\\n color: var(--brand-green);\\n}\\n\\n.pb-scope-sep {\\n font-size: var(--text-2_5xs);\\n font-weight: 700;\\n letter-spacing: .04em;\\n text-transform: uppercase;\\n color: var(--text-quaternary);\\n padding: var(--s-3) var(--s-3) var(--s-1);\\n}\\n\\n.pb-scope-hint {\\n font-size: var(--text-2_5xs);\\n color: var(--ai-fg);\\n background: var(--ai-bg);\\n border-radius: var(--r-full);\\n padding: 3px 9px;\\n}\\n\\n.pb-msg-scope {\\n display: inline-flex;\\n align-items: center;\\n gap: 4px;\\n font-size: var(--text-2_5xs);\\n font-weight: 700;\\n color: var(--ai-fg-deep);\\n background: var(--ai-bg);\\n border-radius: var(--r-sm);\\n padding: 2px 6px;\\n margin-bottom: 4px;\\n vertical-align: middle;\\n}\\n\\n.pb-msg-scope svg {\\n color: var(--ai-fg);\\n}\\n\\n.pb-chips {\\n display: flex;\\n flex-wrap: wrap;\\n gap: var(--s-2);\\n margin-bottom: var(--s-4);\\n}\\n\\n.pb-chip {\\n display: inline-flex;\\n align-items: center;\\n gap: 5px;\\n height: 26px;\\n padding: 0 var(--s-4);\\n border-radius: var(--r-full);\\n font-size: var(--text-xs);\\n font-weight: 500;\\n color: var(--text-secondary);\\n border: 1px solid var(--border-default);\\n background: var(--surface-raised);\\n}\\n\\n.pb-chip svg {\\n width: 12px;\\n height: 12px;\\n color: var(--ai-fg);\\n}\\n\\n.pb-chip:hover {\\n background: var(--ai-bg);\\n border-color: var(--ai-bg-strong);\\n color: var(--ai-fg-deep);\\n}\\n\\n.pb-ai-input {\\n display: flex;\\n align-items: flex-end;\\n gap: var(--s-3);\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-lg);\\n padding: var(--s-3) var(--s-3) var(--s-3) var(--s-5);\\n background: var(--surface-raised);\\n}\\n\\n.pb-ai-input:focus-within {\\n border-color: var(--border-focus-ai);\\n box-shadow: var(--shadow-focus-ai);\\n}\\n\\n.pb-ai-input textarea {\\n flex: 1;\\n border: 0;\\n outline: none;\\n resize: none;\\n font-size: var(--text-sm);\\n line-height: 1.45;\\n max-height: 96px;\\n background: transparent;\\n}\\n\\n.pb-ai-send {\\n width: 28px;\\n height: 28px;\\n border-radius: var(--r-md);\\n background: var(--ai-fg-deep);\\n color: #fff;\\n display: grid;\\n place-items: center;\\n flex-shrink: 0;\\n}\\n\\n.pb-ai-send svg {\\n width: 14px;\\n height: 14px;\\n}\\n\\n.pb-ai-send:disabled {\\n background: var(--surface-active);\\n color: var(--text-quaternary);\\n}\\n\\n/* inline suggestion card (selected element) */\\n.pb-inline {\\n border: 1px solid var(--ai-bg-strong);\\n border-radius: var(--r-md);\\n background: color-mix(in oklch, var(--ai-bg) 45%, var(--surface-raised));\\n padding: var(--s-4);\\n}\\n\\n.pb-inline-h {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--ai-fg-deep);\\n margin-bottom: var(--s-3);\\n}\\n\\n.pb-inline-h svg {\\n width: 13px;\\n height: 13px;\\n}\\n\\n.pb-inline-acts {\\n display: flex;\\n flex-direction: column;\\n gap: var(--s-2);\\n}\\n\\n.pb-inline-act {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n height: 28px;\\n padding: 0 var(--s-4);\\n border-radius: var(--r-sm);\\n font-size: var(--text-sm);\\n color: var(--text-secondary);\\n background: var(--surface-raised);\\n border: 1px solid var(--border-subtle);\\n text-align: left;\\n}\\n\\n.pb-inline-act svg {\\n width: 13px;\\n height: 13px;\\n color: var(--ai-fg);\\n}\\n\\n.pb-inline-act:hover {\\n border-color: var(--ai-bg-strong);\\n color: var(--text-primary);\\n}\\n\\n/* toast */\\n.pb-toast {\\n position: fixed;\\n bottom: 22px;\\n left: 50%;\\n transform: translateX(-50%);\\n z-index: var(--z-toast);\\n background: var(--surface-inverse);\\n color: var(--text-on-inverse);\\n font-size: var(--text-sm);\\n font-weight: 500;\\n padding: var(--s-4) var(--s-6);\\n border-radius: var(--r-md);\\n box-shadow: var(--shadow-lg);\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n animation: pb-toast-in var(--dur-base) var(--ease-out);\\n}\\n\\n.pb-toast svg {\\n width: 14px;\\n height: 14px;\\n color: var(--green-400);\\n}\\n\\n@keyframes pb-toast-in {\\n from {\\n opacity: 0;\\n transform: translate(-50%, 8px);\\n }\\n}\\n\\n/* ═══════════════ GALLERY (landing) ═══════════════════════════ */\\n.pb-gallery {\\n flex: 1;\\n overflow: auto;\\n background: var(--surface-canvas);\\n}\\n\\n.pb-gal-inner {\\n max-width: 1120px;\\n margin: 0 auto;\\n padding: 40px 32px 64px;\\n}\\n\\n.pb-gal-eye {\\n font-size: var(--text-2_5xs);\\n font-weight: 700;\\n letter-spacing: var(--tracking-wide);\\n text-transform: uppercase;\\n color: var(--text-brand);\\n}\\n\\n.pb-gal-h {\\n font-size: var(--text-3xl);\\n font-weight: 700;\\n letter-spacing: var(--tracking-tight);\\n margin-top: var(--s-3);\\n}\\n\\n.pb-gal-sub {\\n font-size: var(--text-base);\\n color: var(--text-tertiary);\\n margin-top: var(--s-3);\\n max-width: 620px;\\n line-height: 1.5;\\n}\\n\\n.pb-gal-ai {\\n display: flex;\\n align-items: center;\\n gap: var(--s-6);\\n margin-top: var(--s-12);\\n padding: var(--s-8);\\n border: 1px solid var(--ai-bg-strong);\\n border-radius: var(--r-xl);\\n background: linear-gradient(180deg, color-mix(in oklch, var(--ai-bg) 50%, var(--surface-raised)), var(--surface-raised) 80px);\\n}\\n\\n.pb-gal-ai-spark {\\n width: 40px;\\n height: 40px;\\n border-radius: var(--r-lg);\\n background: var(--ai-fg);\\n color: #fff;\\n display: grid;\\n place-items: center;\\n flex-shrink: 0;\\n box-shadow: 0 2px 6px rgba(85, 53, 184, .3);\\n}\\n\\n.pb-gal-ai-spark svg {\\n width: 22px;\\n height: 22px;\\n}\\n\\n.pb-gal-ai-field {\\n flex: 1;\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n background: var(--surface-raised);\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-lg);\\n padding: var(--s-3) var(--s-3) var(--s-3) var(--s-5);\\n}\\n\\n.pb-gal-ai-field:focus-within {\\n border-color: var(--border-focus-ai);\\n box-shadow: var(--shadow-focus-ai);\\n}\\n\\n.pb-gal-ai-field input {\\n flex: 1;\\n border: 0;\\n outline: none;\\n font-size: var(--text-md);\\n background: transparent;\\n}\\n\\n.pb-gal-sec {\\n margin-top: var(--s-16);\\n}\\n\\n.pb-gal-sec-h {\\n font-size: var(--text-sm);\\n font-weight: 600;\\n color: var(--text-secondary);\\n margin-bottom: var(--s-6);\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n}\\n\\n.pb-gal-sec-h .pb-fgroup-c {\\n margin-left: 0;\\n}\\n\\n.pb-gal-grid {\\n display: grid;\\n grid-template-columns: repeat(auto-fill, minmax(248px, 1fr));\\n gap: var(--s-6);\\n}\\n\\n.pb-card {\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-lg);\\n background: var(--surface-raised);\\n overflow: hidden;\\n position: relative;\\n cursor: pointer;\\n transition: box-shadow var(--dur-base), border-color var(--dur-base), transform var(--dur-base);\\n}\\n\\n.pb-card-primary {\\n position: absolute;\\n top: 10px;\\n right: 10px;\\n z-index: 2;\\n display: inline-flex;\\n align-items: center;\\n gap: 4px;\\n font-size: var(--text-2_5xs);\\n font-weight: 800;\\n letter-spacing: .05em;\\n text-transform: uppercase;\\n color: var(--color-on-action);\\n background: var(--color-action);\\n border-radius: var(--r-full);\\n padding: 3px 9px 3px 7px;\\n box-shadow: var(--shadow-sm);\\n}\\n\\n.pb-card-primary svg {\\n width: 11px;\\n height: 11px;\\n}\\n\\n/* template-variant picker (toolbar) */\\n.pb-varpick {\\n position: relative;\\n}\\n\\n.pb-varpick .pb-stnpick-menu {\\n right: auto;\\n left: 0;\\n width: 332px;\\n}\\n\\n.pb-varpick-dot {\\n width: 11px;\\n height: 11px;\\n border-radius: var(--r-full);\\n flex-shrink: 0;\\n box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .12);\\n}\\n\\n.pb-varpick-star {\\n display: inline-grid;\\n place-items: center;\\n width: 15px;\\n height: 15px;\\n border-radius: 50%;\\n background: var(--color-action);\\n color: var(--color-on-action);\\n flex-shrink: 0;\\n}\\n\\n.pb-varpick-star svg {\\n width: 10px;\\n height: 10px;\\n}\\n\\n.pb-varpick-tag {\\n margin-left: auto;\\n font-size: var(--text-2_5xs);\\n font-weight: 800;\\n letter-spacing: .04em;\\n text-transform: uppercase;\\n color: var(--brand-green);\\n background: var(--green-50, rgba(46, 178, 115, .1));\\n border: 1px solid var(--green-100, rgba(46, 178, 115, .25));\\n border-radius: var(--r-full);\\n padding: 2px 7px;\\n}\\n\\n.pb-varpick-menu .pb-stnpick-foot button:disabled {\\n opacity: .6;\\n cursor: default;\\n}\\n\\n.pb-card:hover {\\n border-color: var(--border-strong);\\n box-shadow: var(--shadow-md);\\n transform: translateY(-2px);\\n}\\n\\n.pb-card-thumb {\\n height: 156px;\\n background: var(--surface-sunken);\\n border-bottom: 1px solid var(--border-subtle);\\n position: relative;\\n overflow: hidden;\\n display: grid;\\n place-items: center;\\n}\\n\\n.pb-card-mini {\\n width: 116px;\\n background: #fff;\\n box-shadow: var(--shadow-md);\\n transform: scale(1);\\n border-radius: 2px;\\n overflow: hidden;\\n}\\n\\n.pb-card-meta {\\n padding: var(--s-5);\\n display: flex;\\n align-items: flex-start;\\n gap: var(--s-4);\\n}\\n\\n.pb-card-ic {\\n width: 30px;\\n height: 30px;\\n border-radius: var(--r-md);\\n display: grid;\\n place-items: center;\\n flex-shrink: 0;\\n}\\n\\n.pb-card-ic svg {\\n width: 15px;\\n height: 15px;\\n}\\n\\n.pb-card-t {\\n font-size: var(--text-sm);\\n font-weight: 600;\\n}\\n\\n.pb-card-s {\\n font-size: var(--text-xs);\\n color: var(--text-tertiary);\\n margin-top: 2px;\\n line-height: 1.4;\\n}\\n\\n/* accent helpers */\\n.acc-green {\\n background: var(--green-100);\\n color: var(--green-700);\\n}\\n\\n.acc-blue {\\n background: var(--info-bg);\\n color: var(--info);\\n}\\n\\n.acc-purple {\\n background: var(--ai-bg);\\n color: var(--ai-fg);\\n}\\n\\n.acc-amber {\\n background: var(--warning-bg);\\n color: var(--warning);\\n}\\n\\n.acc-teal {\\n background: var(--tag-teal-bg);\\n color: var(--tag-teal-fg);\\n}\\n\\n.acc-rose {\\n background: var(--tag-rose-bg);\\n color: var(--tag-rose-fg);\\n}\\n\\n.acc-slate {\\n background: var(--tag-slate-bg);\\n color: var(--tag-slate-fg);\\n}\\n\\n.acc-navy {\\n background: #E3E8F7;\\n color: var(--brand-navy);\\n}\\n\\n/* ═══════════════ PREVIEW-FIRST BUILDER ═══════════════════════ */\\n/* slim option bar (à la print preview) */\\n.pb-bar {\\n height: 50px;\\n flex-shrink: 0;\\n display: flex;\\n align-items: center;\\n gap: var(--s-5);\\n padding: 0 var(--s-6);\\n background: var(--surface-raised);\\n border-bottom: 1px solid var(--border-default);\\n z-index: var(--z-sticky);\\n}\\n\\n.pb-bar-title {\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n min-width: 0;\\n}\\n\\n.pb-bar-back {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-3);\\n height: 30px;\\n padding: 0 var(--s-4) 0 var(--s-3);\\n border-radius: var(--r-md);\\n font-size: var(--text-sm);\\n font-weight: 500;\\n color: var(--text-secondary);\\n}\\n\\n.pb-bar-back:hover {\\n background: var(--surface-hover);\\n color: var(--text-primary);\\n}\\n\\n.pb-bar-back svg {\\n width: 15px;\\n height: 15px;\\n}\\n\\n.pb-bar-doc {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n}\\n\\n.pb-bar-doc-ic {\\n width: 24px;\\n height: 24px;\\n border-radius: var(--r-sm);\\n display: grid;\\n place-items: center;\\n flex-shrink: 0;\\n}\\n\\n.pb-bar-doc-ic svg {\\n width: 14px;\\n height: 14px;\\n}\\n\\n.pb-bar-name {\\n font: inherit;\\n font-size: var(--text-sm);\\n font-weight: 600;\\n color: var(--text-primary);\\n border: 1px solid transparent;\\n border-radius: var(--r-sm);\\n padding: 3px 7px;\\n max-width: 220px;\\n background: transparent;\\n}\\n\\n.pb-bar-name:hover {\\n border-color: var(--border-default);\\n}\\n\\n.pb-bar-name:focus {\\n border-color: var(--border-focus);\\n box-shadow: var(--shadow-focus);\\n outline: none;\\n}\\n\\n.pb-bar-sp {\\n flex: 1;\\n}\\n\\n.pb-bar-grp {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n}\\n\\n.pb-bar-grp+.pb-bar-grp {\\n padding-inline-start: var(--s-5);\\n border-inline-start: 1px solid var(--border-subtle);\\n}\\n\\n.pb-bar-lbl {\\n font-size: var(--text-2_5xs);\\n font-weight: 700;\\n letter-spacing: var(--tracking-wide);\\n text-transform: uppercase;\\n color: var(--text-quaternary);\\n}\\n\\n.pb-toggle {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-3);\\n font-size: var(--text-sm);\\n color: var(--text-secondary);\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n\\n.pb-toggle input {\\n accent-color: var(--brand-green);\\n width: 14px;\\n height: 14px;\\n}\\n\\n/* dark stage + preview */\\n.pb-stage {\\n flex: 1;\\n position: relative;\\n min-height: 0;\\n display: flex;\\n background: #4b4f54;\\n overflow: hidden;\\n}\\n\\n.pb-stage-scroll {\\n flex: 1;\\n overflow: auto;\\n padding: 30px 24px 80px;\\n scrollbar-width: thin;\\n}\\n\\n.pb-stage .pb-pages {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 22px;\\n transform-origin: top center;\\n}\\n\\n/* floating zoom pill */\\n.pb-zoomfloat {\\n position: absolute;\\n bottom: 18px;\\n left: 50%;\\n transform: translateX(-50%);\\n z-index: var(--z-popover);\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-2);\\n background: rgba(20, 23, 27, .82);\\n backdrop-filter: blur(6px);\\n border-radius: var(--r-full);\\n padding: 5px 8px;\\n box-shadow: var(--shadow-lg);\\n}\\n\\n.pb-zoomfloat button {\\n width: 26px;\\n height: 26px;\\n border-radius: var(--r-full);\\n display: grid;\\n place-items: center;\\n color: #d4d6d9;\\n}\\n\\n.pb-zoomfloat button.pb-zf-text-btn {\\n width: auto;\\n padding: 0 10px;\\n gap: 4px;\\n display: flex;\\n font-size: var(--text-xs);\\n font-weight: 500;\\n}\\n\\n.pb-zoomfloat button:hover {\\n background: rgba(255, 255, 255, .12);\\n color: #fff;\\n}\\n\\n.pb-zoomfloat .pb-zoom-val {\\n color: #fff;\\n font-size: var(--text-xs);\\n min-width: 40px;\\n text-align: center;\\n font-variant-numeric: tabular-nums;\\n}\\n\\n.pb-zoomfloat .pb-zoom-pages {\\n color: #9da1a6;\\n font-size: var(--text-xs);\\n padding-left: var(--s-3);\\n margin-left: var(--s-2);\\n border-left: 1px solid rgba(255, 255, 255, .16);\\n}\\n\\n/* slide-in customize drawer */\\n.pb-drawer {\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n width: 408px;\\n background: var(--surface-raised);\\n border-left: 1px solid var(--border-default);\\n box-shadow: -12px 0 32px -16px rgba(0, 0, 0, .4);\\n display: flex;\\n flex-direction: column;\\n transform: translateX(0);\\n transition: transform var(--dur-slow) var(--ease-out), width var(--dur-base);\\n z-index: var(--z-drawer);\\n min-height: 0;\\n}\\n\\n.pb-drawer--wide {\\n width: 660px;\\n}\\n\\n.pb-drawer--closed {\\n transform: translateX(101%);\\n box-shadow: none;\\n}\\n\\n.pb-drawer-tabs {\\n flex-shrink: 0;\\n display: flex;\\n align-items: center;\\n gap: var(--s-2);\\n padding: var(--s-4) var(--s-4) 0;\\n border-bottom: 1px solid var(--border-subtle);\\n}\\n\\n.pb-dtab {\\n height: 32px;\\n padding: 0 var(--s-5);\\n border-radius: var(--r-md) var(--r-md) 0 0;\\n font-size: var(--text-sm);\\n font-weight: 500;\\n color: var(--text-tertiary);\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-3);\\n border-bottom: 2px solid transparent;\\n margin-bottom: -1px;\\n}\\n\\n.pb-dtab svg {\\n width: 14px;\\n height: 14px;\\n}\\n\\n.pb-dtab.is-active {\\n color: var(--text-primary);\\n font-weight: 600;\\n border-bottom-color: var(--brand-green);\\n}\\n\\n.pb-dtab:not(.is-active):hover {\\n color: var(--text-secondary);\\n}\\n\\n.pb-drawer-close {\\n margin-left: auto;\\n width: 30px;\\n height: 30px;\\n border-radius: var(--r-md);\\n display: grid;\\n place-items: center;\\n color: var(--text-tertiary);\\n margin-bottom: 2px;\\n}\\n\\n.pb-drawer-close:hover {\\n background: var(--surface-hover);\\n color: var(--text-primary);\\n}\\n\\n.pb-drawer-close svg {\\n width: 15px;\\n height: 15px;\\n}\\n\\n.pb-drawer-body {\\n flex: 1;\\n min-height: 0;\\n display: flex;\\n}\\n\\n/* brand / header-footer form */\\n.pb-form {\\n flex: 1;\\n overflow: auto;\\n padding: var(--s-6);\\n scrollbar-width: thin;\\n}\\n\\n.pb-form-note {\\n font-size: var(--text-xs);\\n color: var(--text-tertiary);\\n line-height: 1.5;\\n margin-bottom: var(--s-6);\\n padding: var(--s-4) var(--s-5);\\n background: var(--ai-bg);\\n border-radius: var(--r-md);\\n color: var(--ai-fg-deep);\\n display: flex;\\n gap: var(--s-3);\\n}\\n\\n.pb-form-note svg {\\n width: 14px;\\n height: 14px;\\n flex-shrink: 0;\\n margin-top: 1px;\\n}\\n\\n.pb-form-sec {\\n font-size: var(--text-2_5xs);\\n font-weight: 700;\\n letter-spacing: var(--tracking-wide);\\n text-transform: uppercase;\\n color: var(--text-quaternary);\\n margin: var(--s-6) 0 var(--s-4);\\n}\\n\\n.pb-fld {\\n display: flex;\\n flex-direction: column;\\n gap: var(--s-2);\\n margin-bottom: var(--s-5);\\n}\\n\\n.pb-fld label {\\n font-size: var(--text-xs);\\n font-weight: 500;\\n color: var(--text-secondary);\\n}\\n\\n.pb-fld input,\\n.pb-fld textarea {\\n height: 32px;\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-md);\\n padding: 0 var(--s-4);\\n font-size: var(--text-sm);\\n background: var(--surface-raised);\\n color: var(--text-primary);\\n}\\n\\n.pb-fld textarea {\\n height: auto;\\n padding: var(--s-3) var(--s-4);\\n resize: vertical;\\n min-height: 52px;\\n line-height: 1.45;\\n}\\n\\n.pb-fld input:focus,\\n.pb-fld textarea:focus {\\n border-color: var(--border-focus);\\n box-shadow: var(--shadow-focus);\\n outline: none;\\n}\\n\\n.pb-fld-row {\\n display: grid;\\n grid-template-columns: 1fr 1fr;\\n gap: var(--s-4);\\n}\\n\\n.pb-fld-tag {\\n font-family: var(--font-mono);\\n font-size: 10px;\\n color: var(--ai-fg-deep);\\n}\\n\\n/* swatches */\\n.pb-swatches {\\n display: flex;\\n gap: var(--s-3);\\n flex-wrap: wrap;\\n}\\n\\n.pb-swatch {\\n width: 30px;\\n height: 30px;\\n border-radius: var(--r-md);\\n border: 2px solid transparent;\\n cursor: pointer;\\n position: relative;\\n}\\n\\n.pb-swatch.is-sel {\\n border-color: var(--text-primary);\\n box-shadow: 0 0 0 2px var(--surface-raised) inset;\\n}\\n\\n/* HTML tab layout inside drawer */\\n.pb-htmltab {\\n flex: 1;\\n display: flex;\\n min-height: 0;\\n min-width: 0;\\n}\\n\\n.pb-htmltab .pb-rail {\\n width: 220px;\\n}\\n\\n.pb-htmltab .pb-editor {\\n width: auto;\\n flex: 1;\\n min-width: 0;\\n max-width: none;\\n border-right: 0;\\n}\\n\\n.pb-ai-dock {\\n flex: 1;\\n min-height: 0;\\n}\\n\\n/* ═══════════════════════════════════════════════════════════════\\n v3 — classic ERP designer shell (left rail · canvas · dock)\\n ═══════════════════════════════════════════════════════════════ */\\n.pb-bar-div {\\n width: 1px;\\n height: 20px;\\n background: var(--border-default);\\n}\\n\\n.pb-bar-stat {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-2);\\n font-size: var(--text-xs);\\n font-weight: 600;\\n padding: 3px 9px;\\n border-radius: var(--r-full);\\n margin-left: var(--s-2);\\n white-space: nowrap;\\n}\\n\\n.pb-bar-stat svg {\\n width: 12px;\\n height: 12px;\\n}\\n\\n.pb-bar-stat.is-saved {\\n color: var(--text-tertiary);\\n}\\n\\n.pb-bar-stat.is-dirty {\\n color: var(--warning-fg-strong);\\n background: var(--warning-bg);\\n}\\n\\n.pb-bar-dirty {\\n color: var(--warning);\\n display: grid;\\n place-items: center;\\n}\\n\\n.pb-bar-dirty svg {\\n width: 12px;\\n height: 12px;\\n}\\n\\n.pb-srv {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-2);\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--text-brand-strong);\\n background: var(--green-50);\\n border: 1px solid var(--green-200);\\n border-radius: var(--r-full);\\n padding: 3px 9px;\\n margin-right: var(--s-2);\\n}\\n\\n.pb-srv svg {\\n width: 12px;\\n height: 12px;\\n}\\n\\n.pb-work {\\n flex: 1;\\n display: flex;\\n min-height: 0;\\n}\\n\\n/* left rail */\\n.pb-side {\\n width: 312px;\\n flex-shrink: 0;\\n background: var(--surface-raised);\\n border-right: 1px solid var(--border-default);\\n display: flex;\\n flex-direction: column;\\n min-height: 0;\\n}\\n\\n.pb-side-head {\\n flex-shrink: 0;\\n padding: var(--s-5) var(--s-6) var(--s-4);\\n border-bottom: 1px solid var(--border-subtle);\\n display: flex;\\n align-items: baseline;\\n gap: var(--s-3);\\n}\\n\\n.pb-side-h-t {\\n font-size: var(--text-2_5xs);\\n font-weight: 700;\\n letter-spacing: var(--tracking-wide);\\n text-transform: uppercase;\\n color: var(--text-quaternary);\\n}\\n\\n.pb-side-h-s {\\n font-size: var(--text-sm);\\n font-weight: 600;\\n color: var(--text-primary);\\n margin-left: auto;\\n}\\n\\n.pb-side-collapse {\\n width: 24px;\\n height: 24px;\\n border-radius: var(--r-sm);\\n display: grid;\\n place-items: center;\\n color: var(--text-tertiary);\\n margin-left: var(--s-3);\\n flex-shrink: 0;\\n}\\n\\n.pb-side-collapse:hover {\\n background: var(--surface-hover);\\n color: var(--text-primary);\\n}\\n\\n.pb-side-collapse svg {\\n width: 15px;\\n height: 15px;\\n}\\n\\n.pb-side-scroll {\\n flex: 1;\\n overflow: auto;\\n scrollbar-width: thin;\\n}\\n\\n/* control sections */\\n.cx-sec {\\n border-bottom: 1px solid var(--border-subtle);\\n}\\n\\n.cx-sec-h {\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n width: 100%;\\n height: 42px;\\n padding: 0 var(--s-6);\\n text-align: left;\\n}\\n\\n.cx-sec-h:hover {\\n background: var(--surface-hover);\\n}\\n\\n.cx-sec-ic {\\n width: 24px;\\n height: 24px;\\n border-radius: var(--r-sm);\\n display: grid;\\n place-items: center;\\n background: var(--surface-muted);\\n color: var(--text-tertiary);\\n flex-shrink: 0;\\n}\\n\\n.cx-sec-ic svg {\\n width: 14px;\\n height: 14px;\\n}\\n\\n.cx-sec-t {\\n font-size: var(--text-md);\\n font-weight: 600;\\n color: var(--text-primary);\\n flex: 1;\\n}\\n\\n.cx-sec-chev {\\n width: 15px;\\n height: 15px;\\n color: var(--text-quaternary);\\n transition: transform var(--dur-fast);\\n}\\n\\n.cx-sec.is-open .cx-sec-chev {\\n transform: rotate(180deg);\\n}\\n\\n.cx-sec-body {\\n padding: var(--s-3) var(--s-6) var(--s-6);\\n}\\n\\n.cx-hint {\\n font-size: var(--text-xs);\\n color: var(--text-tertiary);\\n line-height: 1.5;\\n margin-bottom: var(--s-4);\\n padding: var(--s-3) var(--s-4);\\n background: var(--surface-muted);\\n border-radius: var(--r-sm);\\n}\\n\\n.cx-divline {\\n height: 1px;\\n background: var(--border-subtle);\\n margin: var(--s-5) 0;\\n}\\n\\n.cx-row {\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n min-height: 34px;\\n padding: var(--s-2) 0;\\n}\\n\\n.cx-row-l {\\n display: flex;\\n flex-direction: column;\\n gap: 1px;\\n flex-shrink: 0;\\n}\\n\\n.cx-row-lbl {\\n font-size: var(--text-sm);\\n color: var(--text-secondary);\\n}\\n\\n.cx-row-sub {\\n font-size: var(--text-2_5xs);\\n color: var(--text-quaternary);\\n}\\n\\n.cx-row-c {\\n margin-left: auto;\\n display: flex;\\n justify-content: flex-end;\\n min-width: 0;\\n}\\n\\n.cx-row:has(.cx-seg.is-full),\\n.cx-row:has(.cx-area),\\n.cx-row:has(.cx-range) {\\n align-items: flex-start;\\n flex-direction: column;\\n gap: var(--s-3);\\n}\\n\\n.cx-row:has(.cx-seg.is-full) .cx-row-c,\\n.cx-row:has(.cx-area) .cx-row-c,\\n.cx-row:has(.cx-range) .cx-row-c {\\n margin-left: 0;\\n width: 100%;\\n justify-content: stretch;\\n}\\n\\n/* toggle switch */\\n.cx-switch {\\n width: 34px;\\n height: 20px;\\n border-radius: var(--r-full);\\n background: var(--n-200);\\n position: relative;\\n transition: background var(--dur-base);\\n flex-shrink: 0;\\n}\\n\\n.cx-switch.is-on {\\n background: var(--brand-green);\\n}\\n\\n.cx-switch-dot {\\n position: absolute;\\n top: 2px;\\n left: 2px;\\n width: 16px;\\n height: 16px;\\n border-radius: 50%;\\n background: #fff;\\n box-shadow: var(--shadow-sm);\\n transition: transform var(--dur-base) var(--ease-out);\\n}\\n\\n.cx-switch.is-on .cx-switch-dot {\\n transform: translateX(14px);\\n}\\n\\n/* segmented */\\n.cx-seg {\\n display: inline-flex;\\n background: var(--surface-muted);\\n border-radius: var(--r-md);\\n padding: 2px;\\n gap: 2px;\\n}\\n\\n.cx-seg.is-full {\\n display: flex;\\n width: 100%;\\n}\\n\\n.cx-seg button {\\n height: 26px;\\n padding: 0 var(--s-4);\\n border-radius: var(--r-sm);\\n font-size: var(--text-xs);\\n font-weight: 500;\\n color: var(--text-tertiary);\\n white-space: nowrap;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--s-2);\\n}\\n\\n.cx-seg.is-full button {\\n flex: 1;\\n}\\n\\n.cx-seg button svg {\\n width: 13px;\\n height: 13px;\\n}\\n\\n.cx-seg button.is-active {\\n background: var(--surface-raised);\\n color: var(--text-primary);\\n box-shadow: var(--shadow-xs);\\n font-weight: 600;\\n}\\n\\n.cx-seg button:not(.is-active):hover {\\n color: var(--text-secondary);\\n}\\n\\n/* select */\\n.cx-select {\\n height: 30px;\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-md);\\n padding: 0 var(--s-4);\\n font-size: var(--text-sm);\\n background: var(--surface-raised);\\n color: var(--text-primary);\\n min-width: 150px;\\n cursor: pointer;\\n}\\n\\n.cx-select:focus {\\n border-color: var(--border-focus);\\n box-shadow: var(--shadow-focus);\\n outline: none;\\n}\\n\\n/* range */\\n.cx-range {\\n display: flex;\\n align-items: center;\\n gap: var(--s-4);\\n width: 100%;\\n}\\n\\n.cx-range input[type=range] {\\n flex: 1;\\n accent-color: var(--brand-green);\\n height: 4px;\\n}\\n\\n.cx-range-v {\\n font-size: var(--text-xs);\\n color: var(--text-secondary);\\n font-variant-numeric: tabular-nums;\\n min-width: 40px;\\n text-align: right;\\n}\\n\\n/* text inputs */\\n.cx-input {\\n height: 30px;\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-md);\\n padding: 0 var(--s-4);\\n font-size: var(--text-sm);\\n background: var(--surface-raised);\\n color: var(--text-primary);\\n width: 100%;\\n min-width: 0;\\n}\\n\\n.cx-input:focus {\\n border-color: var(--border-focus);\\n box-shadow: var(--shadow-focus);\\n outline: none;\\n}\\n\\n.cx-area {\\n height: auto;\\n min-height: 54px;\\n padding: var(--s-3) var(--s-4);\\n resize: vertical;\\n line-height: 1.45;\\n}\\n\\n/* swatches */\\n.cx-swatches {\\n display: flex;\\n gap: var(--s-3);\\n flex-wrap: wrap;\\n justify-content: flex-end;\\n}\\n\\n.cx-swatch {\\n width: 26px;\\n height: 26px;\\n border-radius: var(--r-md);\\n border: 2px solid transparent;\\n cursor: pointer;\\n}\\n\\n.cx-swatch.is-sel {\\n border-color: var(--text-primary);\\n box-shadow: 0 0 0 2px var(--surface-raised) inset;\\n}\\n\\n/* line-items editor */\\n.cx-items {\\n display: flex;\\n flex-direction: column;\\n gap: var(--s-4);\\n}\\n\\n.cx-item {\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-md);\\n padding: var(--s-4);\\n background: var(--surface-canvas);\\n}\\n\\n.cx-item-top {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n}\\n\\n.cx-item-n {\\n width: 18px;\\n height: 18px;\\n border-radius: var(--r-xs);\\n background: var(--surface-active);\\n color: var(--text-tertiary);\\n font-size: var(--text-2xs);\\n font-weight: 700;\\n display: grid;\\n place-items: center;\\n flex-shrink: 0;\\n}\\n\\n.cx-item-name {\\n flex: 1;\\n}\\n\\n.cx-item-move {\\n display: flex;\\n gap: 2px;\\n flex-shrink: 0;\\n}\\n\\n.cx-item-move button {\\n width: 24px;\\n height: 24px;\\n border-radius: var(--r-sm);\\n display: grid;\\n place-items: center;\\n color: var(--text-tertiary);\\n}\\n\\n.cx-item-move button:hover {\\n background: var(--surface-hover);\\n color: var(--text-primary);\\n}\\n\\n.cx-item-move button:disabled {\\n opacity: .3;\\n cursor: not-allowed;\\n}\\n\\n.cx-item-move button svg {\\n width: 13px;\\n height: 13px;\\n}\\n\\n.cx-item-del:hover {\\n background: var(--danger-bg) !important;\\n color: var(--danger) !important;\\n}\\n\\n.cx-item-grid {\\n display: grid;\\n grid-template-columns: repeat(4, 1fr);\\n gap: var(--s-3);\\n margin-top: var(--s-3);\\n}\\n\\n.cx-item-grid--2 {\\n grid-template-columns: 1fr 1fr;\\n}\\n\\n.cx-item-grid label {\\n display: flex;\\n flex-direction: column;\\n gap: 2px;\\n}\\n\\n.cx-item-grid label span {\\n font-size: var(--text-2_5xs);\\n color: var(--text-quaternary);\\n font-weight: 600;\\n letter-spacing: .02em;\\n}\\n\\n.cx-item-grid .cx-input {\\n height: 28px;\\n padding: 0 var(--s-3);\\n}\\n\\n.cx-add {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--s-2);\\n height: 32px;\\n border: 1px dashed var(--border-strong);\\n border-radius: var(--r-md);\\n font-size: var(--text-sm);\\n font-weight: 500;\\n color: var(--text-secondary);\\n}\\n\\n.cx-add:hover {\\n border-color: var(--brand-green);\\n color: var(--text-brand-strong);\\n background: var(--green-50);\\n}\\n\\n.cx-add svg {\\n width: 14px;\\n height: 14px;\\n}\\n\\n/* table-column / document-field editors */\\n.cx-cols {\\n display: flex;\\n flex-direction: column;\\n gap: var(--s-3);\\n}\\n\\n.cx-col {\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-md);\\n padding: var(--s-3) var(--s-4);\\n background: var(--surface-canvas);\\n}\\n\\n.cx-col-top {\\n display: flex;\\n align-items: center;\\n gap: var(--s-2);\\n}\\n\\n.cx-grip {\\n color: var(--text-disabled);\\n display: grid;\\n place-items: center;\\n flex-shrink: 0;\\n cursor: grab;\\n}\\n\\n.cx-grip svg {\\n width: 14px;\\n height: 14px;\\n}\\n\\n.cx-col-lbl {\\n flex: 1;\\n height: 28px;\\n}\\n\\n.cx-col-bind {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n margin-top: var(--s-3);\\n}\\n\\n.cx-col-bind .cx-select {\\n flex: 1;\\n min-width: 0;\\n height: 28px;\\n}\\n\\n.cx-col-bind .cx-seg {\\n flex-shrink: 0;\\n}\\n\\n.cx-col-bind .cx-seg button {\\n width: 26px;\\n padding: 0;\\n}\\n\\n.cx-ph-tag {\\n font-family: var(--font-mono);\\n font-size: 10px;\\n color: var(--ai-fg-deep);\\n background: var(--ai-bg);\\n border-radius: var(--r-sm);\\n padding: 3px 6px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n max-width: 130px;\\n}\\n\\n/* lens bar above the canvas */\\n.pb-lensbar {\\n position: absolute;\\n top: 12px;\\n left: 50%;\\n transform: translateX(-50%);\\n z-index: var(--z-popover);\\n display: flex;\\n flex-wrap: wrap;\\n align-items: center;\\n justify-content: center;\\n gap: var(--s-3);\\n width: max-content;\\n max-width: min(calc(100% - 24px), 640px);\\n}\\n\\n.pb-lens {\\n display: inline-flex;\\n background: rgba(20, 23, 27, .82);\\n backdrop-filter: blur(6px);\\n border-radius: var(--r-full);\\n padding: 3px;\\n box-shadow: var(--shadow-lg);\\n flex-shrink: 0;\\n}\\n\\n.pb-lens button {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-2);\\n height: 28px;\\n padding: 0 var(--s-5);\\n border-radius: var(--r-full);\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: #c4c7cb;\\n white-space: nowrap;\\n}\\n\\n.pb-lens button svg {\\n width: 13px;\\n height: 13px;\\n}\\n\\n.pb-lens button.is-active {\\n background: #fff;\\n color: var(--n-900);\\n}\\n\\n.pb-edithint-inline {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-2);\\n font-size: var(--text-xs);\\n color: #d4d6d9;\\n background: rgba(20, 23, 27, .7);\\n backdrop-filter: blur(6px);\\n padding: 5px 10px;\\n border-radius: var(--r-full);\\n max-width: 100%;\\n min-width: 0;\\n}\\n\\n.pb-edithint-inline svg {\\n width: 12px;\\n height: 12px;\\n color: var(--green-400);\\n flex-shrink: 0;\\n}\\n\\n.pb-edithint-inline--ph svg {\\n color: var(--ai-bg-strong);\\n}\\n\\n/* field picker dropdown (Edit lens) */\\n.pb-fp {\\n position: fixed;\\n z-index: 9999;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n background: var(--surface-raised);\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-lg);\\n box-shadow: var(--shadow-xl);\\n}\\n\\n.pb-fp-head {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n padding: var(--s-3) var(--s-4);\\n border-bottom: 1px solid var(--border-subtle);\\n}\\n\\n.pb-fp-head svg {\\n width: 14px;\\n height: 14px;\\n color: var(--text-tertiary);\\n flex-shrink: 0;\\n}\\n\\n.pb-fp-head input {\\n flex: 1;\\n min-width: 0;\\n border: 0;\\n outline: none;\\n background: transparent;\\n font: inherit;\\n font-size: var(--text-sm);\\n color: var(--text-primary);\\n}\\n\\n.pb-fp-list {\\n overflow-y: auto;\\n padding: var(--s-2);\\n scrollbar-width: thin;\\n}\\n\\n.pb-fp-grp+.pb-fp-grp {\\n margin-top: var(--s-2);\\n}\\n\\n.pb-fp-grp-h {\\n font-size: var(--text-2_5xs);\\n font-weight: 700;\\n letter-spacing: .04em;\\n text-transform: uppercase;\\n color: var(--text-quaternary);\\n padding: var(--s-2) var(--s-3) var(--s-1);\\n}\\n\\n.pb-fp-item {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n width: 100%;\\n padding: var(--s-3);\\n border-radius: var(--r-sm);\\n font-size: var(--text-sm);\\n color: var(--text-secondary);\\n text-align: left;\\n}\\n\\n.pb-fp-item:hover {\\n background: var(--surface-hover);\\n color: var(--text-primary);\\n}\\n\\n.pb-fp-item.is-current {\\n color: var(--text-brand-strong);\\n font-weight: 600;\\n}\\n\\n.pb-fp-item-l {\\n flex: 1;\\n}\\n\\n.pb-fp-item svg {\\n width: 14px;\\n height: 14px;\\n color: var(--brand-green);\\n flex-shrink: 0;\\n}\\n\\n.pb-fp-empty {\\n padding: var(--s-6);\\n text-align: center;\\n font-size: var(--text-sm);\\n color: var(--text-tertiary);\\n}\\n\\n.pb-fp-foot {\\n padding: var(--s-3) var(--s-4);\\n border-top: 1px solid var(--border-subtle);\\n font-size: var(--text-2_5xs);\\n color: var(--text-tertiary);\\n background: var(--surface-sunken);\\n line-height: 1.4;\\n}\\n\\n/* placeholder chips in the document (Placeholders lens) */\\n.pbd .pbd-ph {\\n font-family: var(--font-mono);\\n font-size: .82em;\\n color: var(--ai-fg-deep);\\n background: #efe9fc;\\n border: 1px solid #ddd0f8;\\n border-radius: 3px;\\n padding: 0 4px;\\n white-space: normal;\\n word-break: break-all;\\n}\\n\\n/* read-only template-source note */\\n.pb-editor-note {\\n display: flex;\\n align-items: flex-start;\\n gap: var(--s-3);\\n padding: var(--s-3) var(--s-5);\\n font-size: var(--text-xs);\\n color: var(--text-brand-strong);\\n background: var(--green-50);\\n border-bottom: 1px solid var(--border-subtle);\\n line-height: 1.45;\\n}\\n\\n.pb-editor-note svg {\\n width: 13px;\\n height: 13px;\\n flex-shrink: 0;\\n margin-top: 1px;\\n color: var(--brand-green);\\n}\\n\\n/* edit hint chip */\\n.pb-edithint {\\n position: absolute;\\n top: 14px;\\n left: 50%;\\n transform: translateX(-50%);\\n z-index: var(--z-popover);\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-3);\\n background: rgba(20, 23, 27, .86);\\n backdrop-filter: blur(6px);\\n color: #eceef0;\\n font-size: var(--text-xs);\\n font-weight: 500;\\n padding: 6px 8px 6px 12px;\\n border-radius: var(--r-full);\\n box-shadow: var(--shadow-lg);\\n}\\n\\n.pb-edithint svg {\\n width: 14px;\\n height: 14px;\\n color: var(--green-400);\\n}\\n\\n.pb-edithint button {\\n width: 20px;\\n height: 20px;\\n border-radius: 50%;\\n display: grid;\\n place-items: center;\\n color: #aeb2b7;\\n}\\n\\n.pb-edithint button:hover {\\n background: rgba(255, 255, 255, .14);\\n color: #fff;\\n}\\n\\n.pb-edithint button svg {\\n width: 12px;\\n height: 12px;\\n color: inherit;\\n}\\n\\n/* right dock */\\n.pb-dock {\\n width: 340px;\\n flex-shrink: 0;\\n background: var(--surface-raised);\\n border-left: 1px solid var(--border-default);\\n display: flex;\\n flex-direction: column;\\n min-height: 0;\\n position: relative;\\n}\\n\\n.pb-dock--wide {\\n width: 600px;\\n}\\n\\n.pb-dock-resizer {\\n position: absolute;\\n top: 0;\\n left: -3px;\\n width: 7px;\\n height: 100%;\\n cursor: col-resize;\\n z-index: 2;\\n}\\n\\n.pb-dock-resizer:hover {\\n background: linear-gradient(90deg, transparent, rgba(46, 178, 115, .35), transparent);\\n}\\n\\n.pb-dock .pb-htmltab {\\n flex: 1;\\n}\\n\\n.pb-dock-close {\\n width: 28px;\\n height: 28px;\\n border-radius: var(--r-md);\\n display: grid;\\n place-items: center;\\n color: var(--text-tertiary);\\n}\\n\\n.pb-dock-close:hover {\\n background: var(--surface-hover);\\n color: var(--text-primary);\\n}\\n\\n.pb-dock-close svg {\\n width: 15px;\\n height: 15px;\\n}\\n\\n.pb-zoomwrap {\\n transform-origin: top center;\\n}\\n\\n/* editor read-only / warn note + custom-lock banner */\\n.pb-editor-note--warn {\\n color: var(--warning-fg-strong);\\n background: var(--warning-bg);\\n}\\n\\n.pb-editor-note--warn svg {\\n color: var(--warning);\\n}\\n\\n.cx-lockbanner {\\n display: flex;\\n align-items: flex-start;\\n gap: var(--s-3);\\n margin: var(--s-5) var(--s-6) 0;\\n padding: var(--s-4) var(--s-5);\\n font-size: var(--text-xs);\\n line-height: 1.45;\\n color: var(--warning-fg-strong);\\n background: var(--warning-bg);\\n border: 1px solid var(--warning-bg-strong);\\n border-radius: var(--r-md);\\n}\\n\\n.cx-lockbanner svg {\\n width: 14px;\\n height: 14px;\\n flex-shrink: 0;\\n margin-top: 1px;\\n color: var(--warning);\\n}\\n\\n.cx-lockbanner-body {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n gap: var(--s-3);\\n}\\n\\n.cx-lockbanner-btn {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--s-2);\\n padding: var(--s-2) var(--s-3);\\n font: inherit;\\n font-weight: 600;\\n color: var(--warning-fg-strong);\\n background: #fff;\\n border: 1px solid var(--warning-bg-strong);\\n border-radius: var(--r-sm);\\n cursor: pointer;\\n}\\n\\n.cx-lockbanner-btn:hover {\\n background: var(--warning-bg-strong);\\n}\\n\\n.cx-lockbanner-btn svg {\\n margin-top: 0;\\n}\\n\\n.cx-customnote {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n gap: var(--s-3);\\n padding: var(--s-2) 0;\\n}\\n\\n.cx-customnote p {\\n margin: 0;\\n font-size: var(--text-xs);\\n line-height: 1.5;\\n color: var(--text-tertiary);\\n}\\n\\n.cx-customnote .cx-lockbanner-btn {\\n width: auto;\\n white-space: nowrap;\\n}\\n\\n.cx-lockbanner-btn svg {\\n width: 13px;\\n height: 13px;\\n flex-shrink: 0;\\n}\\n\\n/* ── Dynamic Table editor (cx-tbl-*) ─────────────────────── */\\n.cx-tbl-editor {\\n padding: 0 var(--s-4) var(--s-4);\\n display: flex;\\n flex-direction: column;\\n gap: var(--s-3);\\n}\\n\\n.cx-tbl-source {\\n display: flex;\\n align-items: center;\\n gap: var(--s-3);\\n background: var(--surface-sunken);\\n border: 1px solid var(--border-subtle);\\n border-radius: var(--r-md);\\n padding: var(--s-2) var(--s-3);\\n}\\n\\n.cx-tbl-source .cx-ph-tag {\\n flex: 1;\\n font-size: var(--text-2_5xs);\\n}\\n\\n.cx-tbl-cols-hd {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: var(--s-2) 0;\\n font-size: var(--text-xs);\\n font-weight: 600;\\n color: var(--text-secondary);\\n}\\n\\n/* ── Add Table Dialog ─────────────────────────────────────── */\\n.cx-dialog-overlay {\\n position: fixed;\\n inset: 0;\\n z-index: 9999;\\n display: grid;\\n place-items: center;\\n background: rgba(0, 0, 0, .45);\\n backdrop-filter: blur(2px);\\n}\\n\\n.cx-dialog {\\n background: var(--surface-raised);\\n border: 1px solid var(--border-default);\\n border-radius: var(--r-lg);\\n width: 420px;\\n max-width: 95vw;\\n display: flex;\\n flex-direction: column;\\n box-shadow: var(--shadow-xl);\\n}\\n\\n.cx-dialog-head {\\n display: flex;\\n align-items: center;\\n padding: var(--s-4) var(--s-5);\\n border-bottom: 1px solid var(--border-subtle);\\n font-weight: 600;\\n font-size: var(--text-sm);\\n color: var(--text-primary);\\n}\\n\\n.cx-dialog-close {\\n margin-left: auto;\\n width: 26px;\\n height: 26px;\\n display: grid;\\n place-items: center;\\n color: var(--text-tertiary);\\n border-radius: var(--r-sm);\\n}\\n\\n.cx-dialog-close:hover {\\n background: var(--surface-hover);\\n color: var(--text-primary);\\n}\\n\\n.cx-dialog-close svg {\\n width: 14px;\\n height: 14px;\\n}\\n\\n.cx-dialog-body {\\n padding: var(--s-5);\\n display: flex;\\n flex-direction: column;\\n gap: var(--s-4);\\n}\\n\\n.cx-dialog-body .cx-hint {\\n margin: 0;\\n}\\n\\n.cx-dialog-lbl {\\n font-size: var(--text-xs);\\n font-weight: 500;\\n color: var(--text-secondary);\\n}\\n\\n.cx-dialog-body .cx-ph-tag {\\n font-size: var(--text-2_5xs);\\n}\\n\\n.cx-dialog-foot {\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n gap: var(--s-3);\\n padding: var(--s-4) var(--s-5);\\n border-top: 1px solid var(--border-subtle);\\n}\\n\\n/* V2 SVG and Button reset - required for icons (overrides hardcoded fills like white on white) */\\n:where(.pb, .templates, .cx-dialog) button,\\nbutton:where(.pbtn, .pb-bar-back) {\\n font: inherit;\\n cursor: pointer;\\n background: none;\\n border: 0;\\n color: inherit;\\n letter-spacing: inherit;\\n}\\n\\n:where(.pb, .templates, .pbtn, .te-sidebar, .cx-dialog, .pb-bar) svg:not(.MuiSvgIcon-root) {\\n fill: none;\\n stroke: currentColor;\\n stroke-linecap: round;\\n stroke-linejoin: round;\\n}\"","/* eslint-disable */\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport React from 'react';\nimport { STDoc } from '../engine/stationery-doc';\nimport { Ic } from '../engine/icons';\nimport { PBTpl } from '../engine/templatebuilder';\nimport { generateSectionsHTML } from './common';\n\n// Import raw CSS files (Vite ?raw loader)\nimport docCss from '../engine/doc.css?raw';\nimport stationeryCss from '../engine/stationery.css?raw';\nimport stylesCss from '../engine/styles.css?raw';\n\n/**\n * Compiles the V2 Editor State into a V1-compatible payload for the backend.\n * Supports both single-page (legacy sections[]) and multi-page (pages[]) formats.\n *\n * For multi-page: produces one <div class=\"pbd-page\"> per page, each with the correct\n * stationery header/footer based on the repeat config (all / first).\n * Puppeteer renders each pbd-page as one physical PDF page via page-break-after:always.\n */\nexport const compileV2TemplateToV1Payload = (v2Payload: any, effTemplate: string) => {\n const { docId, docData, template, cols, metaFields, customTpl, style, frame, flags, name, stationerySel, stConfig } = v2Payload;\n\n // Dimensions for printing/rendering based on paper and orient\n const paper = v2Payload?.paper || v2Payload?.style?.paper || 'A4';\n const orient = v2Payload?.orient || v2Payload?.style?.orient || 'portrait';\n\n // Stationery config\n const m = (stConfig?.kind === 'preset' && stConfig.preset)\n ? { ...stConfig.preset, paper: paper || stConfig.preset.paper || 'A4', orient: orient || stConfig.preset.orient || 'portrait' }\n : null;\n\n const headerRepeat = m?.header?.repeat || 'all';\n const footerRepeat = m?.footer?.repeat || 'all';\n const compactCont = m?.header?.compactCont || false;\n\n // Helper: render header HTML for a given page index\n const renderHeaderForPage = (pageIdx: number): string => {\n if (!m || !m.header?.show) return '';\n const show = headerRepeat === 'all' || pageIdx === 0;\n if (!show) return '';\n const compact = compactCont && pageIdx > 0;\n return renderToStaticMarkup(<STDoc.Header m={m} compact={compact} ed={null} />);\n };\n\n // Helper: render footer HTML for a given page index\n const renderFooterForPage = (pageIdx: number, totalPages: number): string => {\n if (stConfig?.kind === 'preprinted' && stConfig.preset) {\n return pageIdx === 0\n ? `<div class=\"st-reserve st-reserve--bot\" style=\"height: ${stConfig.preset.reserve?.bottom || 110}px\"></div>`\n : '';\n }\n if (!m || !m.footer?.show) return '';\n const show = footerRepeat === 'all' || pageIdx === 0;\n if (!show) return '';\n return renderToStaticMarkup(<STDoc.Footer m={m} pageIndex={pageIdx} total={totalPages} compact={false} ed={null} />);\n };\n\n // Determine if this is a multi-page template\n const hasPages = v2Payload?.pages && Array.isArray(v2Payload.pages) && v2Payload.pages.length > 0;\n const pageList: { id: string; elements: any[] }[] = hasPages\n ? v2Payload.pages\n : [{ id: 'page-1', elements: v2Payload?.sections || [] }];\n\n const totalPages = pageList.length;\n\n // Construct the inline styles to apply document-level CSS variables\n const accent = style?.accent || '#1B2C6E';\n const logoH = (style?.logoSize || 24) + 'px';\n const isCanvas = true; // Always true for V2 canvas editor\n\n // Optimize V2 state payload (strip docData/content to reduce payload size)\n const optimizedPayload = {\n ...v2Payload,\n type: 'canvas',\n docData: undefined,\n // Save pages[] in new format; strip per-page element content for non-content types\n pages: pageList.map((pg: any) => ({\n id: pg.id,\n elements: (pg.elements || []).map((s: any) =>\n ['image', 'divider', 'table', 'buttons', 'signature', 'qr-code', 'bar-code'].includes(s.type)\n ? { ...s, content: '' }\n : s\n )\n })),\n // Keep legacy sections[] pointing to page 1 for backward compat readers\n sections: (pageList[0]?.elements || []).map((s: any) =>\n ['image', 'divider', 'table', 'buttons', 'signature', 'qr-code', 'bar-code'].includes(s.type)\n ? { ...s, content: '' }\n : s\n )\n };\n\n // Encode V2 state to Base64\n const base64State = btoa(unescape(encodeURIComponent(JSON.stringify(optimizedPayload))));\n\n // Dimensions\n let pW = paper === 'Letter' ? 816 : 794;\n let pH = paper === 'Letter' ? 1056 : 1123;\n if (orient === 'landscape') { const t = pW; pW = pH; pH = t; }\n\n // Watermark HTML\n const wm = v2Payload?.style?.watermark;\n const watermarkHtml = (wm?.show && wm?.image) ? `\n <div class=\"st-wm\" style=\"position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; z-index: 0; pointer-events: none;\">\n <img src=\"${wm.image}\" alt=\"Watermark\" style=\"opacity: ${(wm.opacity ?? 15) / 100}; width: ${wm.size ?? 50}%; transform: rotate(${wm.rotation ?? 0}deg); object-fit: contain; pointer-events: none; user-select: none;\" />\n </div>\n ` : '';\n\n // Preprinted header (top reserve) — only page 1 gets the reserve block\n const preprintedHeaderHtml = (stConfig?.kind === 'preprinted' && stConfig.preset)\n ? `<div class=\"st-reserve st-reserve--top\" style=\"height: ${stConfig.preset.reserve?.top || 150}px\"></div>`\n : '';\n\n const stBrand = stConfig?.preset?.brand || '#2EB273';\n\n /**\n * Build the per-page HTML content.\n * If this is a legacy template (effTemplate used directly), wrap it in one page.\n */\n const buildPageHtml = (elements: any[], pageIdx: number): string => {\n const pageHtml = elements && elements.length > 0\n ? generateSectionsHTML(elements, 0, true)\n : effTemplate || '';\n\n let backendSafeTemplate = pageHtml\n .replace(/<span class=\"cx-ph-tag\">([\\s\\S]*?)<\\/span>/g, '$1')\n .replace(/\\{\\{\\s*money\\s+([^}]+)\\}\\}/g, '{{formatNumber $1 2}}')\n .replace(/\\{\\{\\s*pct\\s+([^}]+)\\}\\}/g, '{{$1}}')\n .replace(/\\{\\{\\s*qty\\s+([^}]+)\\}\\}/g, '{{$1}}')\n .replace(/\\{\\{\\s*@number\\s*\\}\\}/g, '{{inc @index}}')\n .replace(/\\{\\{\\s*customer_data\\s*\\}\\}/g, '{{#if customer}}{{customer}}{{else if customer_data.name}}{{customer_data.name}}{{else if customer_data.company_name}}{{customer_data.company_name}}{{else if customer_data.first_name}}{{customer_data.first_name}} {{customer_data.last_name}}{{else}}{{customer_data}}{{/if}}')\n .replace(/\\{\\{\\s*([a-zA-Z0-9_]+)_data\\s*\\}\\}/g, '{{#if $1}}{{$1}}{{else if $1_data.name}}{{$1_data.name}}{{else if $1_data.company_name}}{{$1_data.company_name}}{{else if $1_data.first_name}}{{$1_data.first_name}} {{$1_data.last_name}}{{else}}{{$1_data}}{{/if}}')\n .replace(/\\{\\{\\s*payment_amount\\s*\\}\\}/g, '{{#if payment_amount}}{{payment_amount}}{{else if amount_paid}}{{amount_paid}}{{else if total_gross_amount}}{{total_gross_amount}}{{else}}0.00{{/if}}')\n .replace(/\\{\\{\\s*discount_amount\\s*\\}\\}/g, '{{#if discount_amount}}{{discount_amount}}{{else if total_discount_amount}}{{total_discount_amount}}{{else}}0.00{{/if}}');\n\n if (pageIdx === 0) {\n // Only apply config block resolution on the first page (where effTemplate-based flags apply)\n backendSafeTemplate = PBTpl.resolveConfigBlocks(backendSafeTemplate, { ...flags, showLogo: style?.showLogo });\n }\n\n const hHtml = renderHeaderForPage(pageIdx);\n const fHtml = renderFooterForPage(pageIdx, totalPages);\n\n const isLastPage = pageIdx === totalPages - 1;\n\n return `\n <div class=\"pbd-page v2-page\" data-page=\"${pageIdx + 1}\" style=\"\n width: ${pW}px;\n min-width: ${pW}px;\n max-width: ${pW}px;\n height: ${pH}px;\n min-height: ${pH}px;\n position: relative;\n display: flex;\n flex-direction: column;\n background: white;\n overflow: hidden;\n ${isLastPage ? 'page-break-after: avoid; break-after: avoid;' : 'page-break-after: always; break-after: page;'}\n \">\n ${watermarkHtml}\n ${pageIdx === 0 && preprintedHeaderHtml ? preprintedHeaderHtml : ''}\n ${hHtml ? `<div class=\"st-head-wrap\" style=\"width:100%;z-index:0;flex-shrink:0;pointer-events:none;\">${hHtml}</div>` : ''}\n <div class=\"pbd-page-inner\" data-density=\"${style?.density || 'normal'}\" data-head=\"${style?.headStyle || 'standard'}\" style=\"flex:1;padding:0;position:relative;z-index:1;overflow:hidden;\">\n ${backendSafeTemplate}\n </div>\n ${fHtml ? `<div class=\"st-foot-wrap\" style=\"width:100%;z-index:0;flex-shrink:0;pointer-events:none;\">${fHtml}</div>` : ''}\n </div>`;\n };\n\n let compiledHtml = '';\n\n // If the effTemplate is a legacy V1 template (already contains <html>), preserve it with v2-state meta only\n const legacyBase = (v2Payload.sections && v2Payload.sections.length === 0 && !hasPages) ? effTemplate : '';\n if (legacyBase && legacyBase.toLowerCase().includes('<html')) {\n if (legacyBase.toLowerCase().includes('</head>')) {\n compiledHtml = legacyBase.replace(\n /<\\/head>/i,\n ` <meta name=\"v2-state\" content=\"${base64State}\">\\n</head>`\n );\n } else {\n compiledHtml = `<meta name=\"v2-state\" content=\"${base64State}\">\\n${legacyBase}`;\n }\n } else {\n // Build the complete multi-page HTML document\n const pagesHtml = pageList\n .map((page: any, idx: number) => buildPageHtml(page.elements || [], idx))\n .join('\\n');\n\n compiledHtml = `\n<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"v2-state\" content=\"${base64State}\">\n <style>\n @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Kufi+Arabic:wght@400;500;600;700&family=Cairo:wght@400;600;700&display=swap');\n @import url('https://fonts.googleapis.com/css2?family=Alex+Brush&family=Allura&family=Dancing+Script:wght@400..700&family=Great+Vibes&family=Parisienne&family=Tangerine:wght@400;700&display=swap');\n \n /* Injected V2 Editor CSS */\n ${stylesCss}\n ${docCss}\n ${stationeryCss}\n\n /* Print-specific overrides */\n @page { \n size: ${paper ? paper.toLowerCase() : 'a4'} ${orient || 'portrait'}; \n margin: 0 !important; \n }\n \n * {\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n }\n\n body { \n margin: 0; \n padding: 0;\n -webkit-print-color-adjust: exact !important; \n print-color-adjust: exact !important; \n }\n\n /* Multi-page layout */\n .v2-pages {\n display: block;\n }\n\n /* Each .pbd-page is one physical PDF page */\n .v2-page {\n box-sizing: border-box;\n }\n\n @media print {\n html, body {\n width: ${pW}px !important;\n min-width: ${pW}px !important;\n max-width: ${pW}px !important;\n margin: 0 !important;\n padding: 0 !important;\n }\n .v2-page {\n width: ${pW}px !important;\n height: ${pH - 1}px !important;\n min-height: ${pH - 1}px !important;\n max-height: ${pH - 1}px !important;\n margin: 0 !important;\n padding: 0 !important;\n page-break-inside: avoid !important;\n }\n }\n \n /* Canvas: no inner padding, elements are absolutely positioned */\n .pbd-page-inner { padding: 0 !important; }\n .st .pbd-page-inner { padding: 0 !important; }\n .pbd-page-inner p, .pbd-page-inner h1, .pbd-page-inner h2,\n .pbd-page-inner h3, .pbd-page-inner h4, .pbd-page-inner h5, .pbd-page-inner h6 {\n margin: 0 !important; padding: 0 !important;\n width: 100% !important; box-sizing: border-box !important;\n }\n .pbd-page-inner hr { width: 100% !important; margin: 0 !important; }\n .pbd-page-inner a { width: 100% !important; height: 100% !important; box-sizing: border-box !important; }\n .pbd-page-inner img { max-width: 100% !important; max-height: 100% !important; box-sizing: border-box !important; }\n .pbd-page-inner table {\n width: 100% !important; height: auto !important;\n min-width: 0 !important; /* Override doc.css min-width: max-content */\n border-collapse: collapse !important; white-space: normal !important;\n table-layout: fixed !important; margin: 0 !important;\n background-color: transparent !important;\n }\n .pbd-page-inner table tr { box-sizing: border-box !important; }\n .pbd-page-inner table td, .pbd-page-inner table th {\n box-sizing: border-box !important; overflow: hidden !important;\n text-overflow: ellipsis !important; vertical-align: middle !important;\n }\n .pbd-page-inner div { box-sizing: border-box !important; }\n\n .st-head, .st-foot {\n position: relative !important; overflow: hidden !important;\n background: transparent !important; padding: 0 !important;\n margin: 0 !important; border: none !important; box-sizing: border-box !important;\n }\n .st-head > *, .st-foot > * { box-sizing: border-box !important; }\n .pbd-page-inner, .st .pbd-page-inner { padding: 0 !important; margin: 0 !important; }\n\n /* Prevent table rows from splitting mid-row across pages */\n .pbd-items tr { page-break-inside: avoid; }\n </style>\n</head>\n<body>\n <div class=\"v2-pages ${stConfig?.kind === 'preset' ? 'st' : ''} ${['preset', 'preprinted', 'blank'].includes(stConfig?.kind) ? 'pb-stn' : ''}\" style=\"--st-brand: ${stBrand}; --pbd-accent: ${accent}; --pbd-logo-h: ${logoH};\">\n ${pagesHtml}\n </div>\n</body>\n</html>`.trim();\n }\n\n // Return the full payload structure expected by the existing backend.\n // sections: [] forces the backend to use raw `contents` HTML (V2 canvas mode).\n return {\n sections: [],\n contents: compiledHtml\n };\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useRef, useCallback } from 'react';\nimport { useDroppable } from '@dnd-kit/core';\nimport { Box } from '@mui/material';\nimport { EnhancedSectionData } from '../../types/editor';\nimport FreeElement from './FreeElement';\n\ninterface FreeCanvasProps {\n sections: EnhancedSectionData[];\n selectedId: string | null;\n canvasWidth: number;\n canvasHeight: number;\n onSelectElement: (id: string | null) => void;\n onMove: (id: string, x: number, y: number) => void;\n onResize: (id: string, x: number, y: number, width: number, height: number) => void;\n onRotate: (id: string, rotation: number) => void;\n onDelete: (id: string) => void;\n onUpdate: (id: string, content: string, extra?: any) => void;\n onBringForward: (id: string) => void;\n onSendBackward: (id: string) => void;\n placeholders?: Array<{ value: string; label: string }>;\n isDraggingFromSidebar?: boolean;\n watermark?: {\n show: boolean;\n opacity: number;\n size: number;\n rotation: number;\n image?: string;\n };\n onMoveToPage?: (id: string, offset: -1 | 1) => void;\n pageIndex?: number;\n totalPages?: number;\n}\n\nconst FreeCanvas: React.FC<FreeCanvasProps> = ({\n sections,\n selectedId,\n canvasWidth,\n canvasHeight,\n onSelectElement,\n onMove,\n onResize,\n onRotate,\n onDelete,\n onUpdate,\n onBringForward,\n onSendBackward,\n placeholders,\n isDraggingFromSidebar,\n watermark,\n onMoveToPage,\n pageIndex,\n totalPages,\n}) => {\n const canvasRef = useRef<HTMLDivElement | null>(null);\n\n const { setNodeRef } = useDroppable({ id: 'main-canvas' });\n\n const mergedRef = useCallback((node: HTMLDivElement | null) => {\n setNodeRef(node);\n canvasRef.current = node;\n }, [setNodeRef]);\n\n const handleCanvasClick = useCallback((e: React.MouseEvent) => {\n // Deselect if clicking on the canvas background\n if (e.target === canvasRef.current) {\n onSelectElement(null);\n }\n }, [onSelectElement]);\n\n const isEmpty = sections.filter(s => !s.hidden).length === 0;\n\n return (\n <Box\n ref={mergedRef}\n onClick={handleCanvasClick}\n data-free-canvas=\"true\"\n style={{\n width: `${canvasWidth}px`,\n minWidth: `${canvasWidth}px`,\n maxWidth: `${canvasWidth}px`,\n minHeight: `${canvasHeight}px`,\n height: '100%',\n }}\n sx={{\n position: 'relative',\n width: `${canvasWidth}px !important`,\n minWidth: `${canvasWidth}px !important`,\n maxWidth: `${canvasWidth}px !important`,\n height: '100%',\n minHeight: `${canvasHeight}px !important`,\n flex: 1,\n bgcolor: '#fff',\n overflow: 'hidden',\n outline: isDraggingFromSidebar ? '2px dashed #6366f1' : 'none',\n outlineOffset: '-2px',\n transition: 'outline 0.15s ease',\n borderRadius: 0,\n }}\n >\n {/* Watermark overlay behind elements */}\n {watermark?.show && watermark?.image && (\n <Box\n className=\"st-wm\"\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n zIndex: 0,\n }}\n >\n <img\n src={watermark.image}\n alt=\"Watermark\"\n style={{\n opacity: (watermark.opacity ?? 15) / 100,\n width: `${watermark.size ?? 50}%`,\n transform: `rotate(${watermark.rotation ?? 0}deg)`,\n objectFit: 'contain',\n userSelect: 'none',\n pointerEvents: 'none',\n }}\n />\n </Box>\n )}\n\n {/* Empty state hint */}\n {isEmpty && !isDraggingFromSidebar && !watermark?.show && (\n <Box\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n gap: 1.5,\n }}\n >\n <Box\n sx={{\n width: 56,\n height: 56,\n borderRadius: '50%',\n bgcolor: '#f0f0ff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 28,\n }}\n >\n 🎨\n </Box>\n <Box sx={{ color: '#9ca3af', fontSize: 14, fontWeight: 500, textAlign: 'center', lineHeight: 1.5 }}>\n Drag elements from the sidebar<br />to place them anywhere on the canvas\n </Box>\n </Box>\n )}\n\n {/* Drop target hint while dragging */}\n {isEmpty && isDraggingFromSidebar && (\n <Box\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n bgcolor: 'rgba(99, 102, 241, 0.04)',\n }}\n >\n <Box sx={{ color: '#6366f1', fontSize: 15, fontWeight: 600 }}>\n Drop here to place element\n </Box>\n </Box>\n )}\n\n {/* Free-positioned elements */}\n {sections\n .filter(s => !s.hidden)\n .sort((a, b) => (a.zIndex ?? 1) - (b.zIndex ?? 1))\n .map(section => (\n <FreeElement\n key={section.id}\n element={section}\n isSelected={selectedId === section.id}\n canvasBounds={{ width: canvasWidth, height: canvasHeight }}\n onSelect={() => onSelectElement(section.id)}\n onMove={onMove}\n onResize={onResize}\n onRotate={onRotate}\n onDelete={onDelete}\n onUpdate={onUpdate}\n onBringForward={onBringForward}\n onSendBackward={onSendBackward}\n placeholders={placeholders}\n onMoveToPage={onMoveToPage}\n pageIndex={pageIndex}\n totalPages={totalPages}\n />\n ))}\n </Box>\n );\n};\n\nexport default FreeCanvas;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';\nimport { Box, Container, Button } from '@mui/material';\nimport Typography from '@/components/typography/typography';\nimport CheckIcon from '@mui/icons-material/Check';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { EnhancedSectionData } from '../types/editor';\nimport { generateEmailPreview } from '../utils/common';\nimport FreeCanvas from './EditorCanvas/FreeCanvas';\nimport { PBPaper } from '../engine/paginator';\n\ninterface EditorCanvasProps {\n sections: EnhancedSectionData[];\n activeId: string | null;\n selectedSection: string | null;\n onSelectSection: (id: string | null) => void;\n onUpdateSection: (id: string, data: any) => void;\n onDeleteSection: (id: string) => void;\n onMoveElement: (id: string, x: number, y: number) => void;\n onResizeElement: (id: string, x: number, y: number, width: number, height: number) => void;\n onRotateElement: (id: string, rotation: number) => void;\n onBringForward: (id: string) => void;\n onSendBackward: (id: string) => void;\n preview: boolean;\n editHtml: boolean;\n onApplyHtmlEdit: (html: string) => void;\n onCancelHtmlEdit: () => void;\n placeholders: Record<string, any>[];\n stConfig?: any;\n stationeryHeaderHtml?: string;\n stationeryFooterHtml?: string;\n zoom?: number;\n paper?: string;\n orient?: string;\n watermark?: {\n show: boolean;\n opacity: number;\n size: number;\n rotation: number;\n image?: string;\n };\n // Multi-page props\n pages?: { id: string; elements: EnhancedSectionData[] }[];\n currentPageIndex?: number;\n onSetCurrentPage?: (idx: number) => void;\n onAddPage?: () => void;\n onDeletePage?: (idx: number) => void;\n onUpdatePageSections?: (pageIdx: number, sections: EnhancedSectionData[]) => void;\n onMoveElementToPage?: (id: string, offset: -1 | 1) => void;\n}\n\nconst EditorCanvas: React.FC<EditorCanvasProps> = ({\n sections,\n activeId,\n selectedSection,\n onSelectSection,\n onUpdateSection,\n onDeleteSection,\n onMoveElement,\n onResizeElement,\n onRotateElement,\n onBringForward,\n onSendBackward,\n preview,\n editHtml,\n onApplyHtmlEdit,\n onCancelHtmlEdit,\n placeholders,\n stConfig,\n stationeryHeaderHtml = '',\n stationeryFooterHtml = '',\n zoom = 100,\n paper = 'A4',\n orient = 'portrait',\n watermark,\n // Multi-page\n pages,\n currentPageIndex = 0,\n onSetCurrentPage,\n onAddPage,\n onDeletePage,\n onUpdatePageSections,\n onMoveElementToPage,\n}) => {\n const [htmlEditValue, setHtmlEditValue] = useState('');\n\n // Sync textarea when entering HTML edit mode\n useEffect(() => {\n if (editHtml) {\n setHtmlEditValue(generateEmailPreview(sections, [], [], false, undefined, stationeryHeaderHtml, stationeryFooterHtml, paper, orient, watermark));\n }\n }, [editHtml]);\n\n // Paper dimensions\n const D = useMemo(() => {\n try {\n return PBPaper.dims(paper, orient);\n } catch {\n let w = paper === 'Letter' ? 816 : 794;\n let h = paper === 'Letter' ? 1056 : 1123;\n if (orient === 'landscape') { const t = w; w = h; h = t; }\n return { w, h, cw: w - 104 };\n }\n }, [paper, orient]);\n\n // Header height in px (same logic for every page)\n const headerHeight = useMemo(() => {\n if (!stationeryHeaderHtml) return 0;\n if (stConfig?.kind === 'preset' && stConfig.preset?.header?.show) {\n return stConfig.preset?.header?.height || stConfig.preset?.reserve?.top || 156;\n }\n if (stConfig?.kind === 'preprinted' && stConfig.preset) {\n return stConfig.preset.reserve?.top || 150;\n }\n return 156;\n }, [stConfig, stationeryHeaderHtml]);\n\n // Footer height in px\n const footerHeight = useMemo(() => {\n if (!stationeryFooterHtml) return 0;\n if (stConfig?.kind === 'preset' && stConfig.preset?.footer?.show) {\n return stConfig.preset?.footer?.height || stConfig.preset?.reserve?.bottom || 120;\n }\n if (stConfig?.kind === 'preprinted' && stConfig.preset) {\n return stConfig.preset.reserve?.bottom || 110;\n }\n return 120;\n }, [stConfig, stationeryFooterHtml]);\n\n // Fixed content height per page — hard boundary, NO Math.max with maxSectionBottom\n const contentHeight = useMemo(() => {\n return Math.max(100, D.h - headerHeight - footerHeight);\n }, [D.h, headerHeight, footerHeight]);\n\n // Legacy: for single-page or non-multi-page mode, keep backward compat\n const maxSectionBottom = useMemo(() => {\n if (!sections || sections.length === 0) return 0;\n return Math.max(0, ...sections.filter(s => !s.hidden).map(s => (s.y ?? 0) + (s.height ?? 60)));\n }, [sections]);\n\n // availableCanvasHeight: fixed (content height) when in multi-page mode, flexible in single-page legacy\n const isMultiPage = pages && pages.length > 0;\n const availableCanvasHeight = isMultiPage ? contentHeight : Math.max(contentHeight, maxSectionBottom + 50);\n\n const formattedPlaceholders = useMemo(() =>\n placeholders.map((p: any) => ({ value: p.value || p.key || '', label: p.label || p.name || String(p.value || p.key || '') })),\n [placeholders]\n );\n\n const isDraggingFromSidebar = !!(activeId && String(activeId).includes('sidebar-'));\n\n // ─── HTML EDIT MODE ──────────────────────────────────────────────────────────\n const renderHtmlEditor = () => (\n <Box sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <Box sx={{\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n px: 2, py: 1, bgcolor: '#1e1e1e', borderBottom: '1px solid #333', borderRadius: '4px 4px 0 0',\n }}>\n <Typography type='s3' sx={{ color: '#ccc', fontFamily: 'monospace' }}>\n HTML Source Editor — changes will replace current sections\n </Typography>\n <Box sx={{ display: 'flex', gap: 1 }}>\n <Button size='small' variant='contained' color='primary' startIcon={<CheckIcon fontSize='small' />}\n onClick={() => onApplyHtmlEdit(htmlEditValue)} sx={{ boxShadow: 'none' }}>\n Apply\n </Button>\n <Button size='small' variant='outlined' startIcon={<CloseIcon fontSize='small' />}\n onClick={() => onCancelHtmlEdit()}\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important`, borderColor: '#555 !important' })}>\n Cancel\n </Button>\n </Box>\n </Box>\n <textarea\n value={htmlEditValue}\n onChange={(e) => setHtmlEditValue(e.target.value)}\n spellCheck={false}\n style={{\n flex: 1, width: '100%', minHeight: 'calc(100vh - 220px)', padding: '16px',\n fontFamily: '\"Fira Code\", \"Cascadia Code\", \"Consolas\", monospace', fontSize: '13px',\n lineHeight: '1.6', color: '#d4d4d4', backgroundColor: '#1e1e1e', border: 'none',\n outline: 'none', resize: 'none', boxSizing: 'border-box', borderRadius: '0 0 4px 4px', tabSize: 2,\n }}\n />\n </Box>\n );\n\n // ─── PREVIEW MODE ────────────────────────────────────────────────────────────\n const renderPreview = () => {\n try {\n const pageList = (pages && pages.length > 0) ? pages : [{ id: 'page-1', elements: sections }];\n return (\n <Box sx={{\n transform: `scale(${zoom / 100})`, transformOrigin: 'top center',\n transition: 'transform 0.2s ease-in-out', margin: '0 auto', overflowX: 'auto',\n display: 'flex', flexDirection: 'column', gap: '24px', pb: 4, alignItems: 'center'\n }}>\n {pageList.map((page, pageIdx) => {\n const hHtml = headerShownOnPage(pageIdx) ? getHeaderHtmlForPage(pageIdx) : '';\n const fHtml = footerShownOnPage(pageIdx) ? stationeryFooterHtml : '';\n return (\n <Box key={page.id} dangerouslySetInnerHTML={{\n __html: generateEmailPreview(page.elements, [], [], false, undefined, hHtml, fHtml, paper, orient, watermark)\n }} />\n );\n })}\n </Box>\n );\n } catch (err: any) {\n return <Box sx={{ p: 4, color: 'red' }}>Preview Error: {err.message || String(err)}</Box>;\n }\n };\n\n // Helper: should the header show on a given page index?\n const headerShownOnPage = useCallback((pageIdx: number) => {\n if (!stationeryHeaderHtml) return false;\n if (stConfig?.kind === 'preprinted') return pageIdx === 0;\n const repeat = stConfig?.preset?.header?.repeat || 'all';\n return repeat === 'all' || pageIdx === 0;\n }, [stConfig, stationeryHeaderHtml]);\n\n // Helper: header html for a given page (compact on pages 2+ when compactCont is on)\n const getHeaderHtmlForPage = useCallback((pageIdx: number) => {\n if (!headerShownOnPage(pageIdx)) return '';\n if (stConfig?.kind === 'preset' && stConfig.preset?.header?.compactCont && pageIdx > 0) {\n // Compact header — the parent already renders compact via stationeryHeaderHtml\n // For now return the same HTML; a future enhancement could render a compact version\n return stationeryHeaderHtml;\n }\n return stationeryHeaderHtml;\n }, [stConfig, stationeryHeaderHtml, headerShownOnPage]);\n\n // Helper: should the footer show on a given page index?\n const footerShownOnPage = useCallback((pageIdx: number) => {\n if (!stationeryFooterHtml) return false;\n if (stConfig?.kind === 'preprinted') return pageIdx === 0;\n const repeat = stConfig?.preset?.footer?.repeat || 'all';\n return repeat === 'all' || pageIdx === 0;\n }, [stConfig, stationeryFooterHtml]);\n\n // ─── EDIT MODE (FREE CANVAS — MULTI-PAGE) ───────────────────────────────────\n const renderEditCanvas = () => {\n try {\n const pageList = (pages && pages.length > 0) ? pages : [{ id: 'page-1', elements: sections }];\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: '24px', pb: 4 }}>\n {pageList.map((page, pageIdx) => {\n const pageElements = page.elements;\n const showH = headerShownOnPage(pageIdx);\n const hHtml = showH ? getHeaderHtmlForPage(pageIdx) : '';\n const showF = footerShownOnPage(pageIdx);\n const isActivePage = pageIdx === currentPageIndex;\n\n const pageHeaderHeight = showH ? headerHeight : 0;\n const pageFooterHeight = showF ? footerHeight : 0;\n const pageContentHeight = D.h - pageHeaderHeight - pageFooterHeight;\n\n return (\n <Box\n key={page.id}\n onClick={() => onSetCurrentPage && onSetCurrentPage(pageIdx)}\n className=\"st pbd-page pb-tpl-view\"\n style={{\n width: `${D.w}px`,\n minWidth: `${D.w}px`,\n maxWidth: `${D.w}px`,\n height: `${D.h}px`,\n minHeight: `${D.h}px`,\n maxHeight: `${D.h}px`,\n overflow: 'hidden',\n }}\n sx={{\n position: 'relative',\n width: `${D.w}px !important`,\n minWidth: `${D.w}px !important`,\n maxWidth: `${D.w}px !important`,\n display: 'flex',\n flexDirection: 'column',\n boxShadow: isActivePage ? '0 0 0 2px #6366f1, 0 4px 24px rgba(0,0,0,0.15)' : '0 4px 24px rgba(0,0,0,0.12)',\n border: isActivePage\n ? '2px solid #6366f1'\n : (activeId && String(activeId).includes('sidebar-') ? '2px dashed #6366f1' : '1px solid #e5e7eb'),\n borderRadius: 0,\n bgcolor: '#fff',\n cursor: isActivePage ? 'default' : 'pointer',\n transition: 'box-shadow 0.2s ease, border-color 0.2s ease',\n flexShrink: 0,\n }}\n >\n {/* Page number badge */}\n <Box sx={{\n position: 'absolute', top: 4, right: 8, zIndex: 100,\n fontSize: 10, color: isActivePage ? '#6366f1' : '#9ca3af',\n fontWeight: 600, letterSpacing: '0.05em', pointerEvents: 'none',\n userSelect: 'none',\n }}>PAGE {pageIdx + 1}</Box>\n\n {/* Stationery header */}\n {hHtml && (\n <Box\n sx={{ width: '100%', zIndex: 0, flexShrink: 0, pointerEvents: 'none' }}\n dangerouslySetInnerHTML={{ __html: hHtml }}\n />\n )}\n\n {/* Free canvas content area — hard fixed height */}\n <Box sx={{ position: 'relative', width: '100%', flexShrink: 0, height: pageContentHeight, overflow: 'hidden', pointerEvents: isActivePage ? 'auto' : 'none' }}>\n <FreeCanvas\n sections={pageElements}\n selectedId={isActivePage ? selectedSection : null}\n canvasWidth={D.w}\n canvasHeight={pageContentHeight}\n onSelectElement={onSelectSection}\n onMove={(id, x, y) => {\n const section = pageElements.find(s => s.id === id);\n const clampedY = Math.max(0, Math.min(y, pageContentHeight - (section?.height ?? 60)));\n onMoveElement(id, x, clampedY);\n }}\n onResize={(id, x, y, w, h) => {\n const clampedY = Math.max(0, Math.min(y, pageContentHeight - h));\n onResizeElement(id, x, clampedY, w, h);\n }}\n onRotate={onRotateElement}\n onDelete={onDeleteSection}\n onUpdate={(id, content, extra) => onUpdateSection(id, { content, ...extra })}\n onBringForward={onBringForward}\n onSendBackward={onSendBackward}\n placeholders={formattedPlaceholders}\n isDraggingFromSidebar={!!(isActivePage && activeId && String(activeId).includes('sidebar-'))}\n watermark={watermark}\n onMoveToPage={onMoveElementToPage}\n pageIndex={pageIdx}\n totalPages={pageList.length}\n />\n </Box>\n\n {/* Stationery footer */}\n {showF && stationeryFooterHtml && (\n <Box\n sx={{ width: '100%', zIndex: 0, flexShrink: 0, mt: 'auto', pointerEvents: 'none' }}\n dangerouslySetInnerHTML={{ __html: stationeryFooterHtml }}\n />\n )}\n </Box>\n );\n })}\n </Box>\n );\n } catch (err: any) {\n return <Box sx={{ p: 4, color: 'red' }}>Edit Canvas Error: {err.message || String(err)}</Box>;\n }\n };\n\n return (\n <Box sx={{ display: 'flex', flex: 1, overflow: 'visible', justifyContent: 'center', width: '100%' }}>\n <Container maxWidth={false} disableGutters sx={{ py: editHtml ? 0 : 2, height: editHtml ? '100%' : undefined, display: 'flex', justifyContent: 'center', width: '100%' }}>\n {editHtml ? renderHtmlEditor() : preview ? renderPreview() : renderEditCanvas()}\n </Container>\n </Box>\n );\n};\n\nexport default EditorCanvas;","import { renderToStaticMarkup } from \"react-dom/server\";\nimport { STDoc } from \"../engine/stationery-doc\";\nimport React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\nimport { useLocation, useParams, useNavigate } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { enqueueSnackbar } from 'notistack';\nimport { getErrorMessage, getToken } from '@/utils/common';\nimport { getV1TemplatesId, patchV1TemplatesId, getV1SubjectsId, getV1FormBuilderRelationalSchemaFieldsName, getV1Templates, patchV1TemplatesIdSetDefault, getV1TemplateHeaderFooterCompanyIdHeaderFooter } from '@/api-client/api.system-feature/api';\nimport TemplateNameModal from '../template-name-modal/template-name-modal';\n// V2 Engine Imports\nimport { Ic } from '../engine/icons';\nimport { PBData } from '../engine/schema';\nimport { PBPaper } from '../engine/paginator';\nimport { PBEdit } from '../engine/editor';\nimport { PBControls } from '../engine/controls';\nimport { PBModel } from '../engine/model';\nimport { STStore } from '../engine/stationery-store';\nimport { PBTemplates } from '../engine/templates';\nimport { PBTpl } from '../engine/templatebuilder';\nimport { PBPicker } from '../engine/picker';\nimport { PBEngine } from '../engine/engine';\nimport { StationeryMasterApp } from '../engine/stationery-app';\nimport { compileV2TemplateToV1Payload } from '../utils/compiler';\nimport { DndContext, DragEndEvent, DragOverEvent, pointerWithin, closestCenter, DragOverlay, DragStartEvent, useSensor, useSensors, PointerSensor } from '@dnd-kit/core';\nimport EditorCanvas from './EditorCanvas';\nimport { generateSectionsHTML, initialStyles, cssScopingService, getInitialSectionData, generateEmailPreview, generateContentHTML } from '../utils/common';\nimport { STATIONERY_CSS } from '../utils/constant';\nimport { ElementType, EnhancedSectionData } from '../../types/editor';\n\n// V2 Styles\n// Removed V2 index.scss import\nimport '../engine/styles.css';\nimport '../engine/doc.css';\nimport '../engine/stationery.css';\nimport '../engine/letterpads.css';\n\n\nconst { DOCS, order } = PBData;\nconst variantsOf = (fam: string) => fam ? order.filter(id => DOCS[id].family === fam) : [];\nconst { PaperDoc, dims } = PBPaper;\nconst { CodeEditor, FieldTree } = PBEdit;\nconst { ControlsPanel } = PBControls;\n\nconst BASE_COMPANY = DOCS.quotation.sample.company;\n\nconst defStyle = (id: string) => ({\n accent: DOCS[id].docAccent,\n density: 'normal',\n headWeight: 700,\n showLogo: true,\n logoSize: 24,\n headStyle: 'standard',\n watermark: {\n show: false,\n opacity: 15,\n size: 50,\n rotation: 0,\n image: '',\n },\n});\nconst defFrame = () => ({\n header: { show: true, repeat: 'all', height: 34, showLogo: true, left: 'company', right: 'docref' },\n footer: { show: true, repeat: 'all', height: 34, pageNumbers: true, format: 'Page {n} of {total}' },\n});\nconst defFlags = (id: string) => {\n const f: any = { showFooter: true };\n (DOCS[id].includes || []).forEach((i: any) => { f[i.flag] = i.flag === 'showTerms' ? (DOCS[id].sample.terms || []).length > 0 : true; });\n return f;\n};\n\n// ═══════════════ stationery picker (toolbar) ═══════════════\nfunction StationeryPicker({ lib, value, onChange, onManage }: any) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: any) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };\n const onEsc = (e: any) => { if (e.key === 'Escape') setOpen(false); };\n document.addEventListener('mousedown', onDoc); document.addEventListener('keydown', onEsc);\n return () => { document.removeEventListener('mousedown', onDoc); document.removeEventListener('keydown', onEsc); };\n }, [open]);\n\n const cur = value === '__blank__' ? { name: 'Blank', icon: 'file', tone: null }\n : value === '__preprinted__' ? { name: 'Pre-printed', icon: 'file', tone: null }\n : (() => { const p = STStore.getById(lib, value) || lib.presets[0] || {}; return { name: p.name || 'Stationery', icon: 'layers', tone: p.brand }; })();\n const pick = (v: string) => { onChange(v); setOpen(false); };\n\n return (\n <div className=\"pb-stnpick\" ref={ref}>\n <button className={`pb-stnpick-btn ${open ? 'is-open' : ''}`} onClick={() => setOpen(o => !o)} title=\"Letterhead & footer for this document\">\n {cur.tone ? <span className=\"pb-stnpick-dot\" style={{ background: cur.tone }} /> : <Ic k={cur.icon} />}\n <span className=\"pb-stnpick-lbl\">{cur.name}</span>\n <Ic k=\"chevD\" />\n </button>\n {open && (\n <div className=\"pb-stnpick-menu\">\n <div className=\"pb-stnpick-grp\">Stationery library</div>\n {lib.presets.map((p: any) => (\n <button key={p.id} className={`pb-stnpick-item ${value === p.id ? 'is-sel' : ''}`} onClick={() => pick(p.id)}>\n <span className=\"pb-stnpick-dot\" style={{ background: p.brand }} />\n <span className=\"pb-stnpick-itemt\">{p.name}<small>{p.mode === 'preprinted' ? 'Pre-printed margins' : `${p.header?.variant} header · ${p.footer?.regBand ? 'reg band' : 'slim'} footer`}</small></span>\n {value === p.id && <Ic k=\"check\" />}\n </button>\n ))}\n <div className=\"pb-stnpick-grp\">No letterhead</div>\n <button className={`pb-stnpick-item ${value === '__blank__' ? 'is-sel' : ''}`} onClick={() => pick('__blank__')}>\n <span className=\"pb-stnpick-ic\"><Ic k=\"file\" /></span>\n <span className=\"pb-stnpick-itemt\">Blank<small>Nothing — bare document</small></span>\n {value === '__blank__' && <Ic k=\"check\" />}\n </button>\n <button className={`pb-stnpick-item ${value === '__preprinted__' ? 'is-sel' : ''}`} onClick={() => pick('__preprinted__')}>\n <span className=\"pb-stnpick-ic\"><Ic k=\"file\" /></span>\n <span className=\"pb-stnpick-itemt\">Pre-printed paper<small>Reserve top & bottom margins</small></span>\n {value === '__preprinted__' && <Ic k=\"check\" />}\n </button>\n\n </div>\n )}\n </div>\n );\n}\n\n// ═══════════════ template-variant picker (set as primary) ═══\nfunction VariantPicker({ subjectId, templateId, companyId, currentName, docId, onNavigate }: any) {\n const [open, setOpen] = useState(false);\n const [templates, setTemplates] = useState<any[]>([]);\n console.log('VariantPicker render, templates:', templates);\n const [loading, setLoading] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n let isMounted = true;\n const fetchTemplates = async () => {\n setLoading(true);\n try {\n let filters = `(subject_id.eq=${subjectId})`;\n if (companyId) filters = `(company_id.eq=${companyId}&subject_id.eq=${subjectId})`;\n\n let res = await getV1Templates({ ...getToken(), filters });\n let data = Array.isArray(res) ? res : (res?.data || []);\n if (data && !Array.isArray(data) && Array.isArray(data.data)) data = data.data;\n\n // Fallback: If 0 results, fetch without companyId\n if (isMounted && Array.isArray(data) && data.length === 0) {\n let fbRes = await getV1Templates({ ...getToken(), filters: `(subject_id.eq=${subjectId})` });\n let fbData = Array.isArray(fbRes) ? fbRes : (fbRes?.data || []);\n if (fbData && !Array.isArray(fbData) && Array.isArray(fbData.data)) fbData = fbData.data;\n if (Array.isArray(fbData) && fbData.length > 0) data = fbData;\n }\n\n if (isMounted && Array.isArray(data)) {\n setTemplates(data);\n }\n } catch (e) { console.error(e); }\n if (isMounted) setLoading(false);\n };\n fetchTemplates();\n\n const onDoc = (e: any) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };\n const onEsc = (e: any) => { if (e.key === 'Escape') setOpen(false); };\n document.addEventListener('mousedown', onDoc); document.addEventListener('keydown', onEsc);\n return () => {\n isMounted = false;\n document.removeEventListener('mousedown', onDoc); document.removeEventListener('keydown', onEsc);\n };\n }, [open, subjectId, companyId]);\n\n const handleSetPrimary = async (e: any, id: string) => {\n e.stopPropagation();\n try {\n await patchV1TemplatesIdSetDefault({ ...getToken(), id });\n enqueueSnackbar('Template set as primary', { variant: 'success' });\n // update local state to reflect the new primary instantly\n setTemplates(prev => prev.map(t => ({ ...t, is_default: t._id === id })));\n } catch (err: any) {\n enqueueSnackbar(getErrorMessage(err?.message), { variant: 'error' });\n }\n };\n\n const primaryTemplate = templates.find(t => t.is_default);\n const isCurrentPrimary = templates.length ? !!templates.find(t => t._id === templateId && t.is_default) : false;\n\n return (\n <div className=\"pb-varpick\" ref={ref}>\n <button className={`pb-stnpick-btn ${open ? 'is-open' : ''}`} onClick={() => setOpen(o => !o)} title=\"Switch templates or set primary\">\n <span className=\"pb-varpick-dot\" style={{ background: DOCS[docId]?.docAccent || '#1B2C6E' }} />\n <span className=\"pb-stnpick-lbl\">{currentName || 'Template'}</span>\n {isCurrentPrimary && <span className=\"pb-varpick-star\" title=\"Primary template\"><Ic k=\"check\" /></span>}\n <Ic k=\"chevD\" />\n </button>\n {open && (\n <div className=\"pb-stnpick-menu pb-varpick-menu\">\n <div className=\"pb-stnpick-grp\">Available Templates</div>\n {loading ? (\n <div style={{ padding: '8px 16px', fontSize: 13, color: '#666' }}>Loading templates...</div>\n ) : templates.map(t => (\n <button key={t._id} className={`pb-stnpick-item ${t._id === templateId ? 'is-sel' : ''}`} onClick={() => { setOpen(false); if (t._id !== templateId) onNavigate(t._id); }}>\n <span className=\"pb-stnpick-itemt\">{t.name || 'Untitled'}</span>\n {t._id === templateId && <Ic k=\"check\" />}\n </button>\n ))}\n\n </div>\n )}\n </div>\n );\n}\n\n// ═══════════════ V2 SectionFlowEditor (replaces Builder) ═══════════════════════════════════\nconst SectionFlowEditor: React.FC<{ modulePath: string; module: string; type: string }> = ({ modulePath, module, type }) => {\n const navigate = useNavigate();\n const { id, template_id } = useParams();\n const locationState = useLocation().state as any;\n const selectedCompany = useSelector((state: any) => state?.company?.selectedCompany?._id);\n const [viewMode, setViewMode] = useState<'template' | 'stationery'>('template');\n const [isDataLoading, setIsDataLoading] = useState(false);\n const [toastMsg, setToastMsg] = useState<string | null>(null);\n const tT = useRef<any>(null);\n\n const flash = (msg: string) => { setToastMsg(msg); clearTimeout(tT.current); tT.current = setTimeout(() => setToastMsg(null), 2000); };\n\n const [apiPayload, setApiPayload] = useState<any>(null);\n const [isModalOpen, setIsModalOpen] = useState<any>(null);\n // Using a hardcoded docId for Phase 1 as this redesign maps to the V2 doc concepts. \n // In Phase 2, this will bridge with the backend `template_id`.\n const [docId, setDocId] = useState('invoice');\n\n const doc = DOCS[docId];\n const [stLib, setStLib] = useState(() => STStore.load());\n const stDefault = docId === 'invoice_ksa'\n ? '__blank__'\n : ((stLib.presets[0] && stLib.presets[0].id) || '__blank__');\n\n const [brand, setBrand] = useState({ company: { ...BASE_COMPANY }, footerNote: 'This is a system-generated document. ' + BASE_COMPANY.web });\n const [primaries, setPrimaries] = useState<any>({});\n\n const [name, setName] = useState(doc.full);\n const [template, setTemplate] = useState('');\n const [docData, setDocData] = useState(() => PBModel.recomputeTotals(PBModel.clone(doc.sample)));\n const [style, setStyle] = useState(defStyle(docId));\n const [frame, setFrame] = useState(defFrame());\n const [flags, setFlags] = useState(defFlags(docId));\n const [paper, setPaper] = useState('A4');\n const [orient, setOrient] = useState('portrait');\n const [stationerySel, setStationerySel] = useState(stDefault);\n const [savedJSON, setSavedJSON] = useState<string | null>('');\n\n const [dock, setDock] = useState('none');\n const [sideOpen, setSideOpen] = useState(true);\n const [railTab, setRailTab] = useState('fields');\n const [zoom, setZoom] = useState<any>('fit');\n const [fitScale, setFitScale] = useState(0.8);\n const [pageCount, setPageCount] = useState(1);\n const [showHint, setShowHint] = useState(true);\n const isInvoice = docId === 'invoice';\n const [cols, setCols] = useState(() => PBTpl.defaultColumns());\n const [metaFields, setMetaFields] = useState(() => PBTpl.defaultMeta());\n const [lens, setLens] = useState('placeholder');\n const [customTpl, setCustomTpl] = useState<any>('');\n const [dockW, setDockW] = useState(600);\n\n const editorApi = useRef<any>({});\n const ctxRef = useRef<any>({});\n const scrollRef = useRef<HTMLDivElement>(null);\n const unitsRef = useRef<any>([]);\n const [picker, setPicker] = useState<any>(null);\n\n const [dynamicGroups, setDynamicGroups] = useState<any[]>([]);\n\n const [overSection, setOverSection] = useState<string | null>(null);\n const [activeCanvas, setActiveCanvas] = useState<string>('main');\n const [activeCanvasSection, setActiveCanvasSection] = useState<any>(null);\n const [activeDragId, setActiveDragId] = useState<string | null>(null);\n const [activeDragData, setActiveDragData] = useState<any>(null);\n const [debugError, setDebugError] = useState<any>('');\n\n // ── Drag and Drop Canvas State ──\n // ── Multi-page canvas state ──\n // Each page: { id: string; elements: EnhancedSectionData[] }\n const [pages, setPages] = useState<{ id: string; elements: EnhancedSectionData[] }[]>([{ id: 'page-1', elements: [] }]);\n const [currentPageIndex, setCurrentPageIndex] = useState(0);\n\n // Legacy flat sections — derived from current page for backward compat with sub-components that still use `sections`\n const sections = pages[currentPageIndex]?.elements ?? [];\n const setSections = useCallback((updater: EnhancedSectionData[] | ((prev: EnhancedSectionData[]) => EnhancedSectionData[])) => {\n setPages(prev => {\n const next = [...prev];\n const idx = currentPageIndex;\n if (!next[idx]) return prev;\n const newElems = typeof updater === 'function' ? updater(next[idx].elements) : updater;\n next[idx] = { ...next[idx], elements: newElems };\n return next;\n });\n }, [currentPageIndex]);\n\n const addPage = useCallback(() => {\n setPages(prev => [...prev, { id: `page-${Date.now()}`, elements: [] }]);\n setCurrentPageIndex(prev => prev + 1);\n }, []);\n\n const deletePage = useCallback((idx: number) => {\n if (pages.length <= 1) return; // must keep at least 1 page\n setPages(prev => prev.filter((_, i) => i !== idx));\n setCurrentPageIndex(prev => Math.max(0, prev >= idx ? prev - 1 : prev));\n }, [pages.length]);\n\n const [activeSectionId, setActiveSectionId] = useState<string | null>(null);\n const [activeDragType, setActiveDragType] = useState<string | null>(null);\n\n const fetchSchema = useCallback(async () => {\n try {\n if (!id) {\n setDebugError('No ID in params');\n return;\n }\n const token = getToken();\n const subjRes = await getV1SubjectsId({ ...token, id });\n\n if (subjRes.data && (subjRes.data as any).resource) {\n const resource = (subjRes.data as any).resource;\n const fRes = await getV1FormBuilderRelationalSchemaFieldsName({ ...token, name: resource });\n\n if (!fRes || !fRes.data) {\n setDebugError('fRes no data: ' + JSON.stringify(fRes));\n return;\n }\n\n const rawFields = ((fRes.data as any)?.fields || []);\n const relTables = ((fRes.data as any)?.relational_fields || []);\n\n const mainFields = rawFields\n .map((f: any) => ({ ...f, key: (f.key || '').replace('__replaceKey', '') }))\n .filter((f: any) => !f.is_inner_join && f.alias && f.alias !== 'id' && !f.alias.includes('_id'));\n\n let dynamicCatalog: any = {\n \"doc\": {\n key: \"doc\",\n icon: \"doc\",\n label: \"Document Info\",\n fields: mainFields.map((f: any) => ({\n label: f.alias.replace(/_/g, ' ').replace(/\\b\\w/g, (c: string) => c.toUpperCase()),\n tag: `{{${f.alias}}}`\n }))\n }\n };\n\n relTables.forEach((table: any) => {\n if (!table) return;\n const tableFields = (table.fields || [])\n .map((f: any) => ({ ...f, key: (f.key || '').replace('__replaceKey', ''), alias: f.templateKey || f.alias }))\n .filter((f: any) => !f.is_inner_join && f.alias && f.alias !== 'id' && !f.alias.includes('_id'));\n\n const uniqueTableFields = Array.from(new Map(tableFields.map((item: any) => [item.alias, item])).values());\n\n if (table.type === 'object') {\n const groupName = table.dataKey ? table.dataKey.replace(/_data$/, '') : 'Related';\n dynamicCatalog[table.dataKey] = {\n key: table.dataKey,\n icon: 'link',\n label: groupName.replace(/_/g, ' ').replace(/\\b\\w/g, (c: string) => c.toUpperCase()),\n fields: uniqueTableFields.map((f: any) => ({\n label: (f.alias || '').replace(/_/g, ' ').replace(/\\b\\w/g, (c: string) => c.toUpperCase()),\n tag: `{{${table.dataKey}.${f.alias}}}`\n }))\n };\n } else if (table.type === 'array') {\n const groupName = table.dataKey ? table.dataKey : 'Items';\n dynamicCatalog[table.dataKey] = {\n key: table.dataKey,\n icon: 'list',\n label: groupName.replace(/_/g, ' ').replace(/\\b\\w/g, (c: string) => c.toUpperCase()),\n fields: uniqueTableFields.map((f: any) => ({\n label: (f.alias || '').replace(/_/g, ' ').replace(/\\b\\w/g, (c: string) => c.toUpperCase()),\n tag: `{{${table.dataKey}.[].${f.alias}}}`\n }))\n };\n }\n });\n\n setDynamicGroups(Object.values(dynamicCatalog));\n } else {\n setDebugError('subjRes no resource: ' + JSON.stringify(subjRes));\n }\n } catch (e) {\n console.error('Failed to fetch schema', e);\n setDebugError('Catch error: ' + (e as any).message);\n }\n }, [id]);\n\n useEffect(() => { fetchSchema(); }, [fetchSchema]);\n\n const fieldCatalog = useMemo(() => PBPicker.buildFieldCatalog(dynamicGroups && dynamicGroups.length > 0 ? dynamicGroups : doc.groups), [doc, dynamicGroups]);\n const labelFor = useCallback((helper: string, path: string) => PBPicker.fieldLabel(fieldCatalog, helper, path), [fieldCatalog]);\n\n const data = useMemo(() => ({\n ...docData, company: brand.company, footerNote: brand.footerNote,\n showLogo: style.showLogo, ...flags,\n }), [docData, brand, style.showLogo, flags]);\n\n const itemsGroup = dynamicGroups?.find((g: any) => g.key !== 'doc' && (g.icon === 'list' || g.key?.includes('item')));\n const arrayKey = itemsGroup ? itemsGroup.key : 'items';\n\n const generatedTemplate = useMemo(() => (\n isInvoice && template ? PBTpl.composeInvoice(PBTemplates.invoice, cols, metaFields, arrayKey) : template\n ), [isInvoice, template, cols, metaFields, arrayKey]);\n const isCustom = customTpl != null && customTpl !== false;\n const effTemplate = isCustom ? customTpl : generatedTemplate;\n\n const stSel = useMemo(() => {\n if (stationerySel === '__blank__') return { kind: 'blank', preset: null };\n if (stationerySel === '__preprinted__') return { kind: 'preprinted', preset: { reserve: { top: 150, bottom: 110 } } };\n const p = STStore.getById(stLib, stationerySel) || stLib.presets[0] || null;\n if (!p) return { kind: 'blank', preset: null };\n if (p.mode === 'preprinted') return { kind: 'preprinted', preset: p };\n return { kind: 'preset', preset: p };\n }, [stationerySel, stLib]);\n\n\n const stationeryHeaderHtml = useMemo(() => {\n if (stSel?.kind === 'preset' && stSel.preset?.header?.show) {\n const effPreset = { ...stSel.preset, paper: paper || stSel.preset.paper || 'A4', orient: orient || stSel.preset.orient || 'portrait' };\n return STATIONERY_CSS + renderToStaticMarkup(<STDoc.Header m={effPreset} compact={false} ed={null} />);\n }\n if (stSel?.kind === 'preprinted' && stSel.preset) {\n return STATIONERY_CSS + `<div class=\"st-reserve st-reserve--top\" style=\"height: ${stSel.preset.reserve?.top || 150}px\"></div>`;\n }\n return '';\n }, [stSel, paper, orient]);\n\n const stationeryFooterHtml = useMemo(() => {\n if (stSel?.kind === 'preset' && stSel.preset?.footer?.show) {\n const effPreset = { ...stSel.preset, paper: paper || stSel.preset.paper || 'A4', orient: orient || stSel.preset.orient || 'portrait' };\n return STATIONERY_CSS + renderToStaticMarkup(<STDoc.Footer m={effPreset} pageIndex={0} total={1} compact={false} ed={null} />);\n }\n if (stSel?.kind === 'preprinted' && stSel.preset) {\n return STATIONERY_CSS + `<div class=\"st-reserve st-reserve--bot\" style=\"height: ${stSel.preset.reserve?.bottom || 110}px\"></div>`;\n }\n return '';\n }, [stSel, paper, orient]);\n\n const payload = useMemo(() => ({\n type: 'canvas',\n docId, docData, template, cols, metaFields, customTpl, paper, orient, style: { ...style, paper, orient }, frame, flags, name, stationerySel, stConfig: stSel,\n // Multi-page: store pages[] in payload. sections kept for backward compat.\n pages,\n sections: pages[currentPageIndex]?.elements ?? []\n }), [docId, docData, template, cols, metaFields, customTpl, style, paper, orient, frame, flags, name, stationerySel, stSel, pages, currentPageIndex]);\n\n // Default sizes for each element type when dropped onto the free canvas\n const DEFAULT_ELEMENT_SIZES: Record<string, { width: number; height: number }> = {\n text: { width: 300, height: 60 },\n 'text-block': { width: 300, height: 80 },\n heading: { width: 360, height: 60 },\n 'heading-2': { width: 320, height: 50 },\n 'heading-3': { width: 280, height: 45 },\n 'heading-4': { width: 260, height: 40 },\n image: { width: 200, height: 150 },\n buttons: { width: 130, height: 40 },\n divider: { width: 400, height: 20 },\n table: { width: 500, height: 78 },\n signature: { width: 200, height: 60 },\n 'qr-code': { width: 100, height: 100 },\n 'bar-code': { width: 180, height: 80 },\n };\n\n // For Phase 1 we use an internal dirty flag based on JSON comparison\n const dirty = savedJSON != null && JSON.stringify(payload) !== savedJSON;\n\n const compiled = useMemo(() => {\n if (lens === 'placeholder') {\n const r = PBTpl.toEditableTemplateView(effTemplate, data, labelFor);\n unitsRef.current = r.units;\n return r.html;\n }\n return PBEngine.render(effTemplate, data).html;\n }, [effTemplate, data, lens]);\n\n ctxRef.current = { docId, template: effTemplate, style, docAccent: doc.docAccent };\n\n const applyMaster = useCallback(async () => {\n try {\n setIsDataLoading(true);\n if (template_id) {\n const token = getToken();\n const res = await getV1TemplatesId({ ...token, id: template_id });\n if (res.status_code === 200 && res.data) {\n const data: any = res.data;\n setApiPayload(data);\n let v2StateObj: any = null;\n\n // 1. Check for Base64 encoded state in the HTML (New standard)\n if (data.contents) {\n const match = data.contents.match(/<meta name=\"v2-state\" content=\"([^\"]+)\">/);\n if (match && match[1]) {\n try {\n v2StateObj = JSON.parse(decodeURIComponent(escape(atob(match[1]))));\n } catch (e) {\n console.error('Failed to parse V2 state from HTML meta tag', e);\n }\n }\n }\n\n // 2. Fallback to old section-based state (if saved before the Base64 fix)\n if (!v2StateObj) {\n const v2Section = (data.sections || []).find((s: any) => s.type === 'v2-state');\n if (v2Section && v2Section.content) {\n try {\n const decodedStr = decodeURIComponent(escape(atob(v2Section.content)));\n v2StateObj = JSON.parse(decodedStr);\n } catch (e) {\n try {\n v2StateObj = JSON.parse(v2Section.content);\n } catch (e2) {\n console.error('Failed to parse V2 state from sections', e2);\n }\n }\n }\n }\n\n if (v2StateObj) {\n // New block-based state\n if (v2StateObj.paper && !v2StateObj.style) {\n setPaper(v2StateObj.paper);\n }\n if (v2StateObj.settings) {\n // setSettings is not defined; ignore legacy settings field gracefully\n }\n\n // Legacy state (if any)\n if (v2StateObj.docId) setDocId(v2StateObj.docId);\n if (v2StateObj.docData) setDocData(v2StateObj.docData);\n if (v2StateObj.template) setTemplate(v2StateObj.template);\n if (v2StateObj.cols) setCols(v2StateObj.cols);\n if (v2StateObj.metaFields) setMetaFields(v2StateObj.metaFields);\n if (v2StateObj.customTpl) setCustomTpl(v2StateObj.customTpl);\n if (v2StateObj.style) setStyle({ ...defStyle(docId), ...v2StateObj.style, watermark: { ...defStyle(docId).watermark, ...(v2StateObj.style.watermark || {}) } });\n if (v2StateObj.frame) setFrame(v2StateObj.frame);\n if (v2StateObj.flags) setFlags(v2StateObj.flags);\n if (v2StateObj.name) setName(v2StateObj.name);\n if (v2StateObj.stationerySel) setStationerySel(v2StateObj.stationerySel);\n\n // Legacy paper state from style\n if (v2StateObj.style?.paper) setPaper(v2StateObj.style.paper);\n if (v2StateObj.style?.orient) setOrient(v2StateObj.style.orient);\n // Multi-page: restore pages[] if present, otherwise migrate flat sections[] to single page\n const migrateSections = (raw: any[]): EnhancedSectionData[] =>\n raw.map((s: any, i: number) => {\n let content = s.content;\n if (['image', 'divider', 'table', 'buttons', 'signature', 'qr-code', 'bar-code'].includes(s.type) && !content) {\n content = generateContentHTML(s.type, '', s.attributes || {}, []);\n }\n return {\n ...s, content,\n x: s.x ?? 52, y: s.y ?? (52 + i * 90),\n width: s.width ?? 500, height: s.height ?? 80,\n rotation: s.rotation ?? 0, zIndex: s.zIndex ?? (i + 1),\n } as EnhancedSectionData;\n });\n\n if (v2StateObj.pages && Array.isArray(v2StateObj.pages) && v2StateObj.pages.length > 0) {\n // New multi-page format\n const restoredPages = v2StateObj.pages.map((p: any) => ({\n id: p.id || `page-${Date.now()}`,\n elements: migrateSections(p.elements || [])\n }));\n setPages(restoredPages);\n setCurrentPageIndex(0);\n } else {\n // Legacy flat sections[] — wrap in single page\n const rawSections: any[] = v2StateObj.sections || [];\n setPages([{ id: 'page-1', elements: migrateSections(rawSections) }]);\n setCurrentPageIndex(0);\n }\n setSavedJSON(JSON.stringify(v2StateObj));\n return;\n } else if (data.contents) {\n // Legacy template fallback: load raw HTML into customTpl so it is preserved\n const blankDocData = PBModel.clone(doc.sample);\n blankDocData.items = [];\n const next = {\n docId,\n docData: PBModel.recomputeTotals(blankDocData),\n template: PBTemplates[docId],\n cols: PBTpl.defaultColumns(),\n metaFields: PBTpl.defaultMeta(),\n customTpl: data.contents,\n style: defStyle(docId),\n frame: defFrame(),\n flags: defFlags(docId),\n name: data.subject?.subject || data.name || doc.full,\n stationerySel: '__blank__',\n stConfig: { kind: 'blank', preset: null },\n sections: data.sections && data.sections.length > 0 ? data.sections : []\n };\n setDocData(next.docData); setTemplate(next.template); setCols(next.cols);\n setMetaFields(next.metaFields); setCustomTpl(next.customTpl); setStyle(next.style);\n setFrame(next.frame); setFlags(next.flags); setName(next.name); setStationerySel(next.stationerySel);\n\n // Migrate V1 sections to multi-page (wrap all in page 1)\n if (data.sections && data.sections.length > 0) {\n const migratedSections = data.sections.map((s: any, i: number) => {\n let content = s.content;\n if (['image', 'divider', 'table', 'buttons', 'signature', 'qr-code', 'bar-code'].includes(s.type) && !content) {\n content = generateContentHTML(s.type, '', s.attributes || {}, []);\n }\n if (s.x !== undefined && s.y !== undefined) return { ...s, content } as EnhancedSectionData;\n return {\n ...s, content,\n x: s.x ?? 50, y: s.y ?? (50 + i * 100),\n width: s.width ?? Math.min(700, 400 + ((content || '').length > 100 ? 300 : 0)),\n height: s.height ?? 100,\n rotation: s.rotation ?? 0, zIndex: s.zIndex ?? (i + 1),\n } as EnhancedSectionData;\n });\n setPages([{ id: 'page-1', elements: migratedSections }]);\n } else {\n setPages([{ id: 'page-1', elements: [] }]);\n }\n setCurrentPageIndex(0);\n\n setSavedJSON(JSON.stringify(next));\n return;\n } else {\n setName(data.subject?.subject || data.name || doc.full);\n }\n }\n }\n } catch (e) {\n console.error(e);\n } finally {\n setIsDataLoading(false);\n }\n\n // Fallback to defaults if no template_id or missing v2-state (New Template)\n const blankSample = PBModel.clone(doc.sample);\n blankSample.items = []; // Start with no sample rows to look blank\n\n const next = {\n docData: PBModel.recomputeTotals(blankSample),\n template: '',\n cols: PBTpl.defaultColumns(),\n metaFields: PBTpl.defaultMeta(),\n customTpl: '',\n style: defStyle(docId), frame: defFrame(), flags: defFlags(docId), name: doc.full,\n stationerySel: '__blank__',\n stConfig: { kind: 'blank', preset: null },\n pages: [{ id: 'page-1', elements: [] }]\n };\n setDocData(next.docData); setTemplate(next.template); setCols(next.cols);\n setMetaFields(next.metaFields); setCustomTpl(next.customTpl); setStyle(next.style);\n setFrame(next.frame); setFlags(next.flags); setName(next.name); setStationerySel(next.stationerySel);\n setPaper('A4'); setOrient('portrait');\n setPages([{ id: 'page-1', elements: [] }]);\n setCurrentPageIndex(0);\n setSavedJSON(JSON.stringify(next));\n }, [docId, doc, stDefault, template_id]);\n\n useEffect(() => { applyMaster(); }, [applyMaster]);\n\n useEffect(() => {\n const fetchStationery = async () => {\n const companyId = locationState?.company_id || selectedCompany;\n if (!companyId) return;\n try {\n const token = getToken();\n const res = await getV1TemplateHeaderFooterCompanyIdHeaderFooter({ ...token, company_id: Number(companyId) } as any);\n if ((res.status_code === 200 || res.success) && res.data) {\n const hfData = Array.isArray(res.data) ? res.data[0] : res.data;\n if (!hfData) return;\n const v2Section = (hfData.header_sections || []).find((s: any) => s.attributes?.stationeryV2Config || s.type === 'stationery-v2');\n if (v2Section) {\n try {\n let loadedLib;\n if (v2Section.attributes?.stationeryV2Config) {\n loadedLib = typeof v2Section.attributes.stationeryV2Config === 'string' ? JSON.parse(v2Section.attributes.stationeryV2Config) : v2Section.attributes.stationeryV2Config;\n } else if (v2Section.content) {\n loadedLib = JSON.parse(v2Section.content);\n }\n if (loadedLib) setStLib(loadedLib);\n } catch (e) {\n console.error('Failed to parse stationery-v2 content', e);\n }\n }\n }\n } catch (e) {\n console.error('Failed to fetch stationery library', e);\n }\n };\n fetchStationery();\n }, [locationState?.company_id, selectedCompany]);\n\n const toast = flash;\n const setDirty = (val: boolean) => { /* Derived from savedJSON */ };\n\n const saveMaster = useCallback(async () => {\n try {\n const v2Payload = payload;\n const compiledData = compileV2TemplateToV1Payload(v2Payload, effTemplate);\n\n const p = {\n ...getToken(),\n ...(template_id ? { id: template_id } : { subject_id: id, is_default: false, company_id: locationState?.company_id ? Number(locationState.company_id) : undefined }),\n sections: compiledData.sections,\n contents: compiledData.contents\n };\n\n if (template_id) {\n setIsDataLoading(true);\n p.name = name;\n const res = await patchV1TemplatesId(p);\n setIsDataLoading(false);\n if (res?.status_code === 200 || res?.status_code === 201 || res?.success) {\n toast('Template saved successfully');\n setSavedJSON(JSON.stringify(v2Payload)); // Update dirty state\n } else {\n enqueueSnackbar(res?.message || 'Failed to save template', { variant: 'error' });\n }\n } else {\n setApiPayload(p);\n setIsModalOpen(true);\n }\n } catch (e) {\n setIsDataLoading(false);\n console.error(e);\n enqueueSnackbar('Failed to prepare save payload', { variant: 'error' });\n }\n }, [payload, docId, docData, template, cols, metaFields, customTpl, style, paper, orient, frame, flags, name, stationerySel, stSel, effTemplate, data, template_id, id, locationState, pages, currentPageIndex]);\n\n const handleSaveSuccess = () => {\n setSavedJSON(JSON.stringify(payload));\n setIsModalOpen(false);\n setApiPayload(null);\n toast('Template saved successfully');\n };\n\n const handleSaveError = () => {\n toast('Failed to save template');\n };\n\n const discardChanges = useCallback(() => { applyMaster(); toast('Reverted to last saved master'); }, [applyMaster]);\n\n useEffect(() => {\n let el = document.getElementById('pb-page-style');\n if (!el) { el = document.createElement('style'); el.id = 'pb-page-style'; document.head.appendChild(el); }\n el.textContent = `@page { size: ${paper} ${orient}; margin: 0; }`;\n }, [paper, orient]);\n\n useEffect(() => {\n const el = scrollRef.current; if (!el) return;\n const calc = () => { const avail = el.clientWidth - 56; setFitScale(Math.max(0.3, Math.min(1, avail / dims(paper, orient).w))); };\n calc();\n const ro = new ResizeObserver(calc); ro.observe(el); return () => ro.disconnect();\n }, [dock, sideOpen, paper, orient, viewMode]);\n\n const z = zoom === 'fit' ? fitScale : zoom;\n\n const onEdit = useCallback((path: string, type: string, text: any) => {\n if (path === 'footerNote') { setBrand(b => PBModel.applyEdit(b, 'footerNote', type, text)); return; }\n if (path.indexOf('company.') === 0) { setBrand(b => PBModel.applyEdit(b, path, type, text)); return; }\n setDocData(d => PBModel.applyEdit(d, path, type, text));\n }, []);\n\n const itemOps = useMemo(() => ({\n field: (i: number, key: string, val: any, t: string) => { setDocData(d => PBModel.applyEdit(d, `items.${i}.${key}`, t === 'num' ? 'num' : 'text', val)); },\n add: () => { setDocData(d => PBModel.addItem(d)); },\n remove: (i: number) => { setDocData(d => PBModel.removeItem(d, i)); },\n move: (i: number, dir: number) => { setDocData(d => PBModel.moveItem(d, i, dir)); },\n }), []);\n\n const setFlag = (k: string, v: any) => { setFlags(f => ({ ...f, [k]: v })); };\n const setFooterNote = (v: string) => setBrand(b => ({ ...b, footerNote: v }));\n\n const onTemplateEdit = useCallback((k: number, text: string) => {\n const unit = unitsRef.current[k]; if (!unit) return;\n const next = PBTpl.applyTemplateEdit(effTemplate, unit, text);\n if (next === effTemplate) return;\n if (isInvoice) setCustomTpl(next); else setTemplate(next);\n }, [effTemplate, isInvoice]);\n\n const onTokenClick = useCallback((k: number, rect: any) => {\n const u = unitsRef.current[k]; if (!u) return;\n setPicker({ k, rect, current: u.helper ? u.helper + ' ' + u.path : u.path });\n }, []);\n\n const onPickField = useCallback((tag: string) => {\n setPicker((p: any) => {\n if (p) {\n const u = unitsRef.current[p.k];\n const next = u && PBTpl.applyTemplateToken(effTemplate, u, tag);\n if (next && next !== effTemplate) { if (isInvoice) setCustomTpl(next); else setTemplate(next); }\n }\n return null;\n });\n }, [effTemplate, isInvoice]);\n\n const api = useMemo(() => ({\n setTemplate: (str: string) => { setTemplate(str); },\n patchStyle: (patch: any) => setStyle(s => ({ ...s, ...patch })),\n restore: (before: any) => { setTemplate(before.template); setStyle(before.style); },\n switchDoc: (id: string) => setDocId(id),\n toast,\n }), []);\n\n const resetAll = () => {\n setTemplate(PBTemplates[docId]); setDocData(PBModel.recomputeTotals(PBModel.clone(doc.sample)));\n setCols(PBTpl.defaultColumns()); setMetaFields(PBTpl.defaultMeta()); setCustomTpl(null);\n setStyle(defStyle(docId)); setFrame(defFrame()); setFlags(defFlags(docId)); setName(doc.full); setStationerySel(stDefault);\n toast('Reset to default');\n };\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n const exportPDF = () => { toast('Preparing print-ready PDF…'); setTimeout(() => window.print(), 350); };\n\n const goHome = () => { navigate(-1); };\n const goOpen = (id: string) => { setDocId(id); };\n const goStationery = () => { setViewMode('stationery'); };\n\n const startResize = (e: any) => {\n e.preventDefault();\n const startX = e.clientX, startW = dockW;\n const move = (ev: any) => setDockW(Math.max(320, Math.min(960, startW + (startX - ev.clientX))));\n const up = () => { document.removeEventListener('mousemove', move); document.removeEventListener('mouseup', up); document.body.style.cursor = ''; };\n document.addEventListener('mousemove', move); document.addEventListener('mouseup', up); document.body.style.cursor = 'col-resize';\n };\n\n const handleDragStart = (e: DragStartEvent) => {\n setActiveDragType(e.active.data.current?.type || null);\n setActiveDragData(e.active.data.current || null);\n setActiveDragId(e.active.id as string);\n };\n\n const handleDragOver = (event: DragOverEvent) => {\n const { over } = event;\n if (!over) {\n setOverSection(null);\n return;\n }\n if (over.id === 'main-canvas') {\n setActiveCanvas('main');\n } else {\n setOverSection(over.id as string);\n }\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n setActiveDragType(null);\n setActiveDragData(null);\n setActiveDragId(null);\n setOverSection(null);\n const { active, over } = event;\n if (!over) return;\n\n const isFromSidebar =\n active.data.current?.label ||\n active.data.current?.imageUrl ||\n (typeof active.id === 'string' && active.id.startsWith('sidebar-'));\n\n if (isFromSidebar && active.data.current?.type) {\n const type = active.data.current.type as ElementType;\n const sizes = DEFAULT_ELEMENT_SIZES[type] || { width: 200, height: 80 };\n\n // Compute drop coordinates relative to the A4 canvas\n const canvasEl = document.querySelector('[data-free-canvas=\"true\"]') as HTMLElement | null;\n let dropX = 52;\n let dropY = 52;\n\n if (canvasEl) {\n const canvasRect = canvasEl.getBoundingClientRect();\n const translated = event.active.rect.current.translated;\n // Use the translated drop position if available, otherwise center\n const pointerX = translated ? translated.left + translated.width / 2 : (canvasRect.left + canvasRect.width / 2);\n const pointerY = translated ? translated.top + translated.height / 2 : (canvasRect.top + canvasRect.height / 2);\n dropX = Math.max(0, Math.min(canvasRect.width - sizes.width, pointerX - canvasRect.left - sizes.width / 2));\n dropY = Math.max(0, Math.min(canvasRect.height - sizes.height, pointerY - canvasRect.top - sizes.height / 2));\n }\n\n const maxZ = sections.length > 0 ? Math.max(...sections.map(s => s.zIndex ?? 1)) : 0;\n\n const initialData = getInitialSectionData(type, {\n src: active.data.current.imageUrl,\n alt: active.data.current.label\n });\n\n const newSection: EnhancedSectionData = {\n ...initialData,\n id: `sec-${Date.now()}`,\n x: dropX,\n y: dropY,\n width: sizes.width,\n height: sizes.height,\n rotation: 0,\n zIndex: maxZ + 1,\n attributes: {\n ...(initialData.attributes || {}),\n styles: {\n ...(initialData.attributes?.styles || {}),\n width: sizes.width,\n ...(type === 'table' ? {} : { height: sizes.height }),\n }\n }\n };\n\n // Add to current page\n setPages(prev => {\n const next = [...prev];\n const idx = currentPageIndex;\n if (!next[idx]) return prev;\n next[idx] = { ...next[idx], elements: [...next[idx].elements, newSection] };\n return next;\n });\n setActiveSectionId(newSection.id);\n }\n };\n\n // ─── Free-positioning handlers ────────────────────────────────────────────────\n const handleMoveElement = useCallback((id: string, x: number, y: number) => {\n setSections(prev => prev.map(s => s.id === id ? { ...s, x, y } : s));\n }, [setSections]);\n\n const handleResizeElement = useCallback((id: string, x: number, y: number, width: number, height: number) => {\n const rWidth = Math.round(width);\n const rHeight = Math.round(height);\n const rX = Math.round(x);\n const rY = Math.round(y);\n setSections(prev => prev.map(s => s.id === id ? {\n ...s,\n x: rX,\n y: rY,\n width: rWidth,\n height: rHeight,\n attributes: {\n ...(s.attributes || {}),\n styles: {\n ...(s.attributes?.styles || {}),\n width: rWidth,\n ...(s.type === 'table' ? {} : { height: rHeight }),\n }\n }\n } : s));\n }, [setSections]);\n\n const handleRotateElement = useCallback((id: string, rotation: number) => {\n setSections(prev => prev.map(s => s.id === id ? { ...s, rotation } : s));\n }, [setSections]);\n\n const handleBringForward = useCallback((id: string) => {\n setSections(prev => {\n const el = prev.find(s => s.id === id);\n if (!el) return prev;\n const maxZ = Math.max(...prev.map(s => s.zIndex ?? 1));\n return prev.map(s => s.id === id ? { ...s, zIndex: maxZ + 1 } : s);\n });\n }, [setSections]);\n\n const handleSendBackward = useCallback((id: string) => {\n setSections(prev => {\n const el = prev.find(s => s.id === id);\n if (!el) return prev;\n const minZ = Math.min(...prev.map(s => s.zIndex ?? 1));\n return prev.map(s => s.id === id ? { ...s, zIndex: Math.max(0, minZ - 1) } : s);\n });\n }, [setSections]);\n\n const handleUpdateSection = useCallback((id: string, content: string, attrs: any) => {\n setSections(prev => prev.map(s => s.id === id ? { ...s, content, ...attrs } : s));\n }, [setSections]);\n\n const handleMoveElementToPage = useCallback((id: string, offset: -1 | 1) => {\n setPages(prev => {\n let elem: EnhancedSectionData | null = null;\n let fromIdx = -1;\n\n for (let i = 0; i < prev.length; i++) {\n const found = prev[i].elements.find(s => s.id === id);\n if (found) {\n elem = found;\n fromIdx = i;\n break;\n }\n }\n\n if (!elem || fromIdx === -1) return prev;\n\n const toIdx = fromIdx + offset;\n if (toIdx < 0 || toIdx >= prev.length) return prev;\n\n const next = [...prev];\n next[fromIdx] = { ...next[fromIdx], elements: next[fromIdx].elements.filter(s => s.id !== id) };\n next[toIdx] = { ...next[toIdx], elements: [...next[toIdx].elements, elem] };\n\n setCurrentPageIndex(toIdx);\n return next;\n });\n }, []);\n\n if (viewMode === 'stationery') {\n return <StationeryMasterApp\n onBack={(updatedLib, activeId) => {\n if (updatedLib) setStLib(updatedLib);\n if (activeId) setStationerySel(activeId);\n setViewMode('template');\n }}\n company_id={locationState?.company_id || selectedCompany || apiPayload?.company_id}\n initialPresetId={stationerySel}\n isNewTemplate={!template_id}\n initialPaper={paper}\n initialOrient={orient}\n placeholders={(() => {\n let dynamicMetaFields: any[] = [];\n if (dynamicGroups && dynamicGroups.length > 0) {\n dynamicGroups.forEach((g: any) => {\n if (g.key !== arrayKey) {\n g.fields.forEach((f: any) => {\n const fieldId = f.tag.replace('{{', '').replace('}}', '');\n dynamicMetaFields.push({ id: fieldId, value: fieldId, label: f.label, expr: f.tag, type: 'text' });\n });\n }\n });\n }\n return dynamicMetaFields.length > 0 ? dynamicMetaFields : [];\n })()}\n />;\n }\n\n return (\n <DndContext sensors={sensors} onDragStart={handleDragStart} onDragOver={handleDragOver} onDragEnd={handleDragEnd} collisionDetection={pointerWithin}>\n <div className=\"pb\">\n <div className=\"pb-bar\">\n <button className=\"pb-bar-back\" onClick={goHome}><Ic k=\"arrowL\" />Templates</button>\n <span className=\"pb-bar-div\" />\n <span className={`pb-bar-doc-ic ${doc.accent}`}><Ic k={doc.icon} /></span>\n <input className=\"pb-bar-name\" value={name} onChange={e => setName(e.target.value)} />\n {template_id && (\n <VariantPicker subjectId={id} templateId={template_id} companyId={selectedCompany || locationState?.company_id || apiPayload?.company_id} currentName={name} docId={docId} onNavigate={(newId: string) => { if (template_id) navigate(window.location.pathname.replace(template_id, newId) + window.location.search); }} />\n )}\n <span className={`pb-bar-stat ${dirty ? 'is-dirty' : 'is-saved'}`} title={dirty ? 'Unsaved changes to the master' : 'All changes saved to the master'}>\n <Ic k={dirty ? 'dot' : 'check'} />{dirty ? 'Unsaved' : 'Saved'}\n </span>\n {dirty && (\n <>\n <button className=\"pbtn pbtn--primary pbtn--sm\" onClick={saveMaster} title=\"Commit changes to the master (⌘S)\"><Ic k=\"save\" />Save master</button>\n <button className=\"pbtn pbtn--ghost pbtn--sm\" onClick={discardChanges} title=\"Revert to the last saved master\"><Ic k=\"undo\" />Discard</button>\n </>\n )}\n <div className=\"pb-bar-sp\" />\n <button className=\"pbtn pbtn--ghost pbtn--sm\" onClick={goStationery}><Ic k=\"palette\" />Edit Header & Footer</button>\n\n <StationeryPicker lib={stLib} value={stationerySel} onChange={(v: string) => { setStationerySel(v); }} onManage={goStationery} />\n <span className=\"pb-bar-div\" />\n <button className={`pbtn pbtn--sm ${sideOpen ? 'is-on' : ''}`} onClick={() => setSideOpen(v => !v)}><Ic k=\"sliders\" />Design</button>\n <button className={`pbtn pbtn--sm ${dock === 'html' ? 'is-on' : ''}`} onClick={() => setDock(d => d === 'html' ? 'none' : 'html')}><Ic k=\"code\" />HTML</button>\n <button className=\"pbtn pbtn--ghost pbtn--sm\" onClick={resetAll} title=\"Reset to default\"><Ic k=\"undo\" /></button>\n </div>\n\n <div className=\"pb-work\">\n {sideOpen && (\n <div className=\"pb-side\">\n <div className=\"pb-side-head\">\n <span className=\"pb-side-h-t\">Design</span>\n <span className=\"pb-side-h-s\">{doc.full}</span>\n <button className=\"pb-side-collapse\" onClick={() => setSideOpen(false)} title=\"Collapse panel\"><Ic k=\"chevL\" /></button>\n </div>\n <div className=\"pb-side-scroll\">\n <ControlsPanel doc={doc} data={data} style={style} setStyle={setStyle} frame={frame} setFrame={setFrame}\n flags={flags} setFlag={setFlag} paper={paper} setPaper={setPaper} orient={orient} setOrient={setOrient}\n itemOps={itemOps} setFooterNote={setFooterNote}\n stnKind={stSel.kind} stnName={stSel.kind === 'preset' ? stSel.preset?.name : (stSel.kind === 'preprinted' ? 'Pre-printed paper' : 'Blank')} onManageStationery={goStationery}\n cols={isInvoice ? cols : undefined} setCols={setCols} metaFields={metaFields} setMetaFields={setMetaFields} isCustom={isCustom}\n dynamicGroups={dynamicGroups} arrayKey={arrayKey}\n activeSectionId={activeSectionId} sections={sections} setSections={setSections}\n onRevertCustom={() => { setCustomTpl(null); toast('Reverted to visual builder'); }} />\n </div>\n </div>\n )}\n\n <div className=\"pb-stage\">\n <style>{`\n .pb-stage .st {\n --pbd-accent: ${style?.accent || '#1B2C6E'} !important;\n ${stSel.kind === 'preset' && stSel.preset?.brand ? `--st-brand: ${stSel.preset.brand} !important;` : ''}\n }\n .pb-stage .pbd-page {\n width: ${dims(paper, orient).w}px !important;\n min-width: ${dims(paper, orient).w}px !important;\n max-width: ${dims(paper, orient).w}px !important;\n min-height: ${dims(paper, orient).h}px !important;\n }\n `}</style>\n <div className=\"pb-lensbar\">\n <div className=\"pb-lens\">\n <button className={lens === 'placeholder' ? 'is-active' : ''} onClick={() => setLens('placeholder')}><Ic k=\"type\" />Edit</button>\n <button className={lens === 'filled' ? 'is-active' : ''} onClick={() => setLens('filled')}><Ic k=\"eye\" />Preview</button>\n </div>\n </div>\n <div className=\"pb-stage-scroll\" ref={scrollRef}>\n <div className=\"pb-zoomwrap\" style={{ transform: `scale(${z})`, transformOrigin: 'top center', position: 'relative' }}>\n\n <EditorCanvas\n sections={sections}\n activeId={activeDragId}\n selectedSection={activeSectionId}\n onSelectSection={setActiveSectionId}\n onUpdateSection={(id, data) => handleUpdateSection(id, data.content, data)}\n onDeleteSection={(id) => {\n setSections(prev => prev.filter(s => s.id !== id));\n if (activeSectionId === id) setActiveSectionId(null);\n }}\n onMoveElement={handleMoveElement}\n onResizeElement={handleResizeElement}\n onRotateElement={handleRotateElement}\n onBringForward={handleBringForward}\n onSendBackward={handleSendBackward}\n preview={lens === 'filled'}\n editHtml={false}\n onApplyHtmlEdit={() => { }}\n onCancelHtmlEdit={() => { }}\n zoom={100}\n placeholders={[]}\n stConfig={stSel}\n stationeryHeaderHtml={stationeryHeaderHtml}\n stationeryFooterHtml={stationeryFooterHtml}\n paper={paper}\n orient={orient}\n watermark={style?.watermark}\n // Multi-page props\n pages={pages}\n currentPageIndex={currentPageIndex}\n onSetCurrentPage={setCurrentPageIndex}\n onAddPage={addPage}\n onDeletePage={deletePage}\n onMoveElementToPage={handleMoveElementToPage}\n onUpdatePageSections={(pageIdx, updatedSections) => {\n setPages(prev => {\n const next = [...prev];\n if (!next[pageIdx]) return prev;\n next[pageIdx] = { ...next[pageIdx], elements: updatedSections };\n return next;\n });\n }}\n />\n </div>\n </div>\n <div className=\"pb-zoomfloat\">\n <button onClick={() => setZoom(Math.max(0.3, (typeof z === 'number' ? z : 1) - 0.1))}><Ic k=\"minus\" /></button>\n <span className=\"pb-zoom-val\">{Math.round((typeof z === 'number' ? z : 1) * 100)}%</span>\n <button onClick={() => setZoom(Math.min(1.6, (typeof z === 'number' ? z : 1) + 0.1))}><Ic k=\"plus\" /></button>\n <button onClick={() => setZoom('fit')} title=\"Fit width\"><Ic k=\"fit\" /></button>\n <span className=\"pb-zoom-div\" />\n {/* Page navigation */}\n <button\n className=\"pbtn pbtn--ghost pbtn--sm\"\n disabled={currentPageIndex === 0}\n onClick={() => setCurrentPageIndex(i => Math.max(0, i - 1))}\n title=\"Previous page\"\n ><Ic k=\"arrowL\" /></button>\n <span className=\"pb-zoom-pages\" style={{ minWidth: 90, textAlign: 'center' }}>\n Page {currentPageIndex + 1} / {pages.length} · {paper}{orient === 'landscape' ? ' (L)' : ''}\n </span>\n <button\n className=\"pbtn pbtn--ghost pbtn--sm\"\n disabled={currentPageIndex >= pages.length - 1}\n onClick={() => setCurrentPageIndex(i => Math.min(pages.length - 1, i + 1))}\n title=\"Next page\"\n ><Ic k=\"arrowR\" /></button>\n <button\n className=\"pb-zf-text-btn\"\n onClick={addPage}\n title=\"Add a new page\"\n style={{ marginLeft: 4 }}\n ><Ic k=\"plus\" /> Add Page</button>\n {pages.length > 1 && (\n <button\n className=\"pbtn pbtn--ghost pbtn--sm\"\n onClick={() => deletePage(currentPageIndex)}\n title=\"Delete current page\"\n style={{ color: '#ef4444' }}\n ><Ic k=\"trash\" /></button>\n )}\n </div>\n </div>\n\n {dock !== 'none' && (\n <div className=\"pb-dock\" style={{ width: dock === 'html' ? dockW : 340 }}>\n <div className=\"pb-dock-resizer\" onMouseDown={startResize} title=\"Drag to resize\" />\n {dock === 'html' && (\n <div className=\"pb-htmltab\">\n <div className=\"pb-rail\">\n <div className=\"pb-rail-tabs\">\n <button className={`pb-rail-tab ${railTab === 'fields' ? 'is-active' : ''}`} onClick={() => setRailTab('fields')}><Ic k=\"list\" />Fields</button>\n <button className={`pb-rail-tab ${railTab === 'docs' ? 'is-active' : ''}`} onClick={() => setRailTab('docs')}><Ic k=\"file\" />Docs</button>\n </div>\n <div className=\"pb-rail-body\">\n {railTab === 'fields'\n ? <FieldTree groups={dynamicGroups && dynamicGroups.length > 0 ? dynamicGroups : doc.groups} onInsert={(tag: string) => { (editorApi.current.insert || (() => { }))(tag); toast('Inserted ' + tag); }} />\n : <div className=\"pb-tlist\">{order.map(id => {\n const d = DOCS[id]; return (\n <button key={id} className={`pb-titem ${id === docId ? 'is-active' : ''}`} onClick={() => goOpen(id)}>\n <span className={`pb-titem-ic ${d.accent}`}><Ic k={d.icon} /></span>\n <span><span className=\"pb-titem-t\" style={{ display: 'block' }}>{d.name}</span><span className=\"pb-titem-s\">{d.full}</span></span>\n </button>);\n })}</div>}\n </div>\n </div>\n <div className=\"pb-editor\">\n <div className=\"pb-editor-bar\">\n <span className=\"pb-editor-bar-t\"><Ic k=\"code\" />{isCustom ? 'Custom HTML · overrides the builder' : (isInvoice ? 'Template source · ships to server' : 'Template · HTML + {{merge}}')}</span>\n <div style={{ flex: 1 }} />\n {isInvoice && !isCustom && <button className=\"pbtn pbtn--ghost pbtn--sm\" onClick={() => { setCustomTpl(effTemplate); toast('Editing raw HTML'); }}><Ic k=\"code\" />Edit as HTML</button>}\n {isCustom && <button className=\"pbtn pbtn--ghost pbtn--sm\" onClick={() => { setCustomTpl(null); toast('Reverted to visual builder'); }}><Ic k=\"undo\" />Revert to builder</button>}\n <button className=\"pb-dock-close\" onClick={() => setDock('none')}><Ic k=\"x\" /></button>\n </div>\n <CodeEditor value={effTemplate} onChange={(s: string) => { if (isInvoice) setCustomTpl(s); else setTemplate(s); }} apiRef={editorApi} dirty={dirty} readOnly={isInvoice && !isCustom} />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n {picker && (\n <PBPicker.FieldPicker catalog={fieldCatalog} rect={picker.rect} current={picker.current}\n onPick={onPickField} onClose={() => setPicker(null)} />\n )}\n {isModalOpen && apiPayload && (\n <TemplateNameModal\n isOpen={isModalOpen}\n setIsOpen={() => { setIsModalOpen(false); setApiPayload(null); }}\n payload={apiPayload}\n templateRoutes={{ LIST: modulePath }}\n mode={template_id ? 'edit' : 'add'}\n templateData={{ name }}\n onSaveSuccess={handleSaveSuccess}\n onSaveError={handleSaveError}\n isSaving={false}\n />\n )}\n\n {toastMsg && <div className=\"pb-toast\"><Ic k=\"check\" />{toastMsg}</div>}\n\n {activeDragId && (\n <DragOverlay dropAnimation={null}>\n {activeDragType === 'image' && activeDragData ? (\n <div style={{ width: 120, height: 120, border: '2px solid #4AC08C', borderRadius: 8, overflow: 'hidden', background: '#fff' }}>\n <img src={activeDragData.imageUrl} alt={activeDragData.label} style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n </div>\n ) : activeDragData ? (\n <div style={{ padding: '12px 24px', background: '#4AC08C', color: '#fff', borderRadius: 8, fontWeight: 500, boxShadow: '0 4px 12px rgba(74, 192, 140, 0.3)' }}>\n {activeDragData.label || 'Dropping section...'}\n </div>\n ) : activeCanvasSection ? (\n <div style={{ padding: '12px 24px', background: '#fff', border: '1px solid #ddd', borderRadius: 4, opacity: 0.8 }}>\n Moving section...\n </div>\n ) : null}\n </DragOverlay>\n )}\n </div>\n </DndContext>\n );\n};\n\nexport default SectionFlowEditor;\n"],"names":["P","jsxs","Fragment","jsx","FontSize","styled","createSvgIcon","useCKEditorStyleExtractor","useState","useRef","useEffect","useMemo","useCallback","useDebouncedUpdate","styles","_a","Box","applyOpacityToColor","IconButton","ITEMS","CUSTOMER","DOC_META","priced","_","useDroppable","_b","_c","_d","f","_e","DOCS","dims","CodeEditor","FieldTree","esc","StyledToggleButtonGroup","ToggleButtonGroup","toggleButtonGroupClasses","Typography","Tooltip","ToggleButton","TextControls","debounce","FormControlLabel","Android12Switch","SearchableSelect","FormControl","Select","MenuItem","TextField","InputAdornment","Switch","Grid","formatText","ColorPickerInput","Slider","UploadMedia","InputLabel","MuiAccordion","_f","_g","_h","_i","_j","c","Tabs","Tab","Chip","Button","Divider","Trash","row","Alert","createElement","AccordionSummary","AccordionDetails","Table","TableHead","TableRow","TableCell","Checkbox","TableBody","Dialog","DialogTitle","DialogContent","DialogActions","ListItem","useDraggable","ListItemIcon","ListItemText","TextIcon","ImageIcon","TableIcon","SignatureIcon","QrCodeIcon","BarcodeIcon","Section","Row","Toggle","Seg","Range","ControlsPanel","uploadFiles","getApiConfigSafe","getToken","postV1Drive","itemsGroup","dynamicItemFields","generateContentHTML","getV1Drive","error","useDropzone","extractStyles","initialStyles","generateInlineStyles","section","_k","_l","getInitialSectionData","Paper","Save","CloseIcon","content","getV1TemplateHeaderFooterCompanyIdHeaderFooter","save","renderToStaticMarkup","DndContext","STATIONERY_CSS","patchV1TemplateHeaderFooterId","postV1TemplateHeaderFooter","useSensors","useSensor","PointerSensor","active","type","newAttributes","DragOverlay","totalPages","generateSectionsHTML","generateEmailPreview","Container","getV1Templates","module","useNavigate","useParams","useLocation","useSelector","getV1SubjectsId","getV1FormBuilderRelationalSchemaFieldsName","DEFAULT_ELEMENT_SIZES","getV1TemplatesId","data","next","patchV1TemplatesId","enqueueSnackbar","id","pointerWithin","TemplateNameModal"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAf,MAAA,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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"}
|