@erpsquad/common 1.11.7 → 1.11.8
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-DOGY6cA_.esm.js → DynamicDependentField-C0XXmMlG.esm.js} +2 -2
- package/dist/chunks/{DynamicDependentField-DOGY6cA_.esm.js.map → DynamicDependentField-C0XXmMlG.esm.js.map} +1 -1
- package/dist/chunks/{DynamicDependentField-GTIwrPfP.js → DynamicDependentField-CQIfDDqc.js} +2 -2
- package/dist/chunks/{DynamicDependentField-GTIwrPfP.js.map → DynamicDependentField-CQIfDDqc.js.map} +1 -1
- package/dist/chunks/{ERPUIProvider-Dz0s77BR.esm.js → ERPUIProvider-I4j_X_SD.esm.js} +3 -3
- package/dist/chunks/{ERPUIProvider-Dz0s77BR.esm.js.map → ERPUIProvider-I4j_X_SD.esm.js.map} +1 -1
- package/dist/chunks/{FORMS-EouVYay1.js → FORMS-CUx32b_4.js} +5 -5
- package/dist/chunks/{FORMS-EouVYay1.js.map → FORMS-CUx32b_4.js.map} +1 -1
- package/dist/chunks/{FORMS-CR_DlD1m.esm.js → FORMS-pxf6g6xE.esm.js} +8 -8
- package/dist/chunks/{FORMS-CR_DlD1m.esm.js.map → FORMS-pxf6g6xE.esm.js.map} +1 -1
- package/dist/chunks/{FlexibleReduxExample-CMUylyy1.js → FlexibleReduxExample--GtoEJhc.js} +3 -3
- package/dist/chunks/{FlexibleReduxExample-CMUylyy1.js.map → FlexibleReduxExample--GtoEJhc.js.map} +1 -1
- package/dist/chunks/{FlexibleReduxExample-B2e7Wa_S.esm.js → FlexibleReduxExample-C-2qOGIw.esm.js} +4 -4
- package/dist/chunks/{FlexibleReduxExample-B2e7Wa_S.esm.js.map → FlexibleReduxExample-C-2qOGIw.esm.js.map} +1 -1
- package/dist/chunks/SectionFlowEditor-CFfJBYKx.esm.js +5479 -0
- package/dist/chunks/SectionFlowEditor-CFfJBYKx.esm.js.map +1 -0
- package/dist/chunks/SectionFlowEditor-sKsZ3oQo.js +5478 -0
- package/dist/chunks/SectionFlowEditor-sKsZ3oQo.js.map +1 -0
- package/dist/chunks/{action-bar-Ci6RlMBM.esm.js → action-bar-C7Alva4T.esm.js} +6 -6
- package/dist/chunks/{action-bar-Ci6RlMBM.esm.js.map → action-bar-C7Alva4T.esm.js.map} +1 -1
- package/dist/chunks/{action-bar-jLqQTqU7.js → action-bar-DdtpxWNk.js} +3 -3
- package/dist/chunks/{action-bar-jLqQTqU7.js.map → action-bar-DdtpxWNk.js.map} +1 -1
- package/dist/chunks/{actionCreator-DIdMRO9L.esm.js → actionCreator-CL5ICuqZ.esm.js} +2 -2
- package/dist/chunks/{actionCreator-DIdMRO9L.esm.js.map → actionCreator-CL5ICuqZ.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-DKYufGAZ.esm.js → actionCreator-Cb3NxILP.esm.js} +2 -2
- package/dist/chunks/{actionCreator-DKYufGAZ.esm.js.map → actionCreator-Cb3NxILP.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-D3uwEAua.esm.js → actionCreator-Cl8vPLVO.esm.js} +3 -3
- package/dist/chunks/{actionCreator-D3uwEAua.esm.js.map → actionCreator-Cl8vPLVO.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-B6lXR_k1.esm.js → actionCreator-CpePNxQM.esm.js} +2 -2
- package/dist/chunks/{actionCreator-B6lXR_k1.esm.js.map → actionCreator-CpePNxQM.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-DcdyGsIX.esm.js → actionCreator-Dar9Z8_d.esm.js} +3 -3
- package/dist/chunks/{actionCreator-DcdyGsIX.esm.js.map → actionCreator-Dar9Z8_d.esm.js.map} +1 -1
- package/dist/chunks/add-template-DVvbD9a4.esm.js +11 -0
- package/dist/chunks/add-template-DVvbD9a4.esm.js.map +1 -0
- package/dist/chunks/add-template-Dohg2bHJ.js +10 -0
- package/dist/chunks/add-template-Dohg2bHJ.js.map +1 -0
- package/dist/chunks/{address-modal-DFd5sQtR.js → address-modal-CYhiC7ui.js} +2 -2
- package/dist/chunks/{address-modal-DFd5sQtR.js.map → address-modal-CYhiC7ui.js.map} +1 -1
- package/dist/chunks/{address-modal-DYGLjrqd.esm.js → address-modal-CkDBjnye.esm.js} +2 -2
- package/dist/chunks/{address-modal-DYGLjrqd.esm.js.map → address-modal-CkDBjnye.esm.js.map} +1 -1
- package/dist/chunks/{ai-summary-x2t8BZCx.esm.js → ai-summary-SKK5KN2s.esm.js} +2 -2
- package/dist/chunks/{ai-summary-x2t8BZCx.esm.js.map → ai-summary-SKK5KN2s.esm.js.map} +1 -1
- package/dist/chunks/{api-8jutPLh0.esm.js → api-BIVCMSwW.esm.js} +3 -3
- package/dist/chunks/{api-8jutPLh0.esm.js.map → api-BIVCMSwW.esm.js.map} +1 -1
- package/dist/chunks/{api-yLpQ3k5s.esm.js → api-DBmWILBN.esm.js} +9 -9
- package/dist/chunks/{api-yLpQ3k5s.esm.js.map → api-DBmWILBN.esm.js.map} +1 -1
- package/dist/chunks/{app-switcher-VhH9z0Rd.js → app-switcher-CyEQmYAN.js} +2 -2
- package/dist/chunks/{app-switcher-VhH9z0Rd.js.map → app-switcher-CyEQmYAN.js.map} +1 -1
- package/dist/chunks/{app-switcher-B6eapuGG.esm.js → app-switcher-D-Bvz9uO.esm.js} +2 -2
- package/dist/chunks/{app-switcher-B6eapuGG.esm.js.map → app-switcher-D-Bvz9uO.esm.js.map} +1 -1
- package/dist/chunks/{appbar-B8EgZsrn.esm.js → appbar-BRbO--as.esm.js} +2 -2
- package/dist/chunks/{appbar-B8EgZsrn.esm.js.map → appbar-BRbO--as.esm.js.map} +1 -1
- package/dist/chunks/{appbar-Is_7kfVo.js → appbar-rqqjZ99v.js} +2 -2
- package/dist/chunks/{appbar-Is_7kfVo.js.map → appbar-rqqjZ99v.js.map} +1 -1
- package/dist/chunks/{approval-wrapper-_kYfACQp.esm.js → approval-wrapper-BTtmXMlk.esm.js} +2 -2
- package/dist/chunks/{approval-wrapper-_kYfACQp.esm.js.map → approval-wrapper-BTtmXMlk.esm.js.map} +1 -1
- package/dist/chunks/{chat-bot-DO3vAGxA.esm.js → chat-bot-BpNtrZEL.esm.js} +39 -33
- package/dist/chunks/chat-bot-BpNtrZEL.esm.js.map +1 -0
- package/dist/chunks/{chat-bot-2Ga_xA_K.js → chat-bot-osiGMG3g.js} +38 -32
- package/dist/chunks/chat-bot-osiGMG3g.js.map +1 -0
- package/dist/chunks/common-C5AokA7z.js +368 -0
- package/dist/chunks/common-C5AokA7z.js.map +1 -0
- package/dist/chunks/{common-PH2uWkqL.js → common-CS5L0Ld_.js} +2 -2
- package/dist/chunks/{common-PH2uWkqL.js.map → common-CS5L0Ld_.js.map} +1 -1
- package/dist/chunks/common-CaomnEjX.esm.js +369 -0
- package/dist/chunks/common-CaomnEjX.esm.js.map +1 -0
- package/dist/chunks/common-utility-CA_Upser.js.map +1 -1
- package/dist/chunks/{common-utility-CS_sNoAC.esm.js → common-utility-DGpbsf7S.esm.js} +2 -2
- package/dist/chunks/common-utility-DGpbsf7S.esm.js.map +1 -0
- package/dist/chunks/{common-Cl5oGXmX.esm.js → common-yORBIVv-.esm.js} +2 -2
- package/dist/chunks/{common-Cl5oGXmX.esm.js.map → common-yORBIVv-.esm.js.map} +1 -1
- 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-BXPcBhJN.esm.js → constant-Bwg2s_Sn.esm.js} +5 -35
- package/dist/chunks/constant-Bwg2s_Sn.esm.js.map +1 -0
- package/dist/chunks/{constant-BXeJD4Af.js → constant-ZYAN_teD.js} +5 -35
- package/dist/chunks/constant-ZYAN_teD.js.map +1 -0
- package/dist/chunks/{constants-D_xuLHSu.js → constants-06kIVUBw.js} +2 -2
- package/dist/chunks/{constants-D_xuLHSu.js.map → constants-06kIVUBw.js.map} +1 -1
- package/dist/chunks/{constants-BrmMAwu2.esm.js → constants-nmkxkzps.esm.js} +2 -2
- package/dist/chunks/{constants-BrmMAwu2.esm.js.map → constants-nmkxkzps.esm.js.map} +1 -1
- package/dist/chunks/{custom-editor-C-B5BK-H.esm.js → custom-editor-6-xqhKz6.esm.js} +3 -3
- package/dist/chunks/{custom-editor-C-B5BK-H.esm.js.map → custom-editor-6-xqhKz6.esm.js.map} +1 -1
- package/dist/chunks/{custom-form-T4yc_sE_.js → custom-form-CFU7NEVb.js} +4 -4
- package/dist/chunks/{custom-form-T4yc_sE_.js.map → custom-form-CFU7NEVb.js.map} +1 -1
- package/dist/chunks/{custom-form-DNUpk0nq.esm.js → custom-form-DD7YOHMF.esm.js} +7 -7
- package/dist/chunks/{custom-form-DNUpk0nq.esm.js.map → custom-form-DD7YOHMF.esm.js.map} +1 -1
- package/dist/chunks/{dashboard-eMHQayU_.js → dashboard-BcWVkWZt.js} +3 -3
- package/dist/chunks/{dashboard-eMHQayU_.js.map → dashboard-BcWVkWZt.js.map} +1 -1
- package/dist/chunks/{dashboard-B4xzJ1Xc.esm.js → dashboard-DL83yYRR.esm.js} +4 -4
- package/dist/chunks/{dashboard-B4xzJ1Xc.esm.js.map → dashboard-DL83yYRR.esm.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-CMguvXj2.esm.js → dynamic-report-tKn-KqAd.esm.js} +4 -4
- package/dist/chunks/{dynamic-report-CMguvXj2.esm.js.map → dynamic-report-tKn-KqAd.esm.js.map} +1 -1
- package/dist/chunks/{dynamic-rows-CmAE9nbA.esm.js → dynamic-rows-CTGETfcP.esm.js} +2 -2
- package/dist/chunks/{dynamic-rows-CmAE9nbA.esm.js.map → dynamic-rows-CTGETfcP.esm.js.map} +1 -1
- package/dist/chunks/{dynamic-text-editor-CSWdR1lK.esm.js → dynamic-text-editor-CPvlGcLK.esm.js} +2 -2
- package/dist/chunks/{dynamic-text-editor-CSWdR1lK.esm.js.map → dynamic-text-editor-CPvlGcLK.esm.js.map} +1 -1
- package/dist/chunks/{edit-section-modal-HihKbN6K.esm.js → edit-section-modal-BW-aZmUv.esm.js} +2 -2
- package/dist/chunks/edit-section-modal-BW-aZmUv.esm.js.map +1 -0
- package/dist/chunks/edit-section-modal-Br2ITvLk.js.map +1 -1
- package/dist/chunks/{filter-D9BHP_qc.esm.js → filter-COXKBEER.esm.js} +5 -5
- package/dist/chunks/{filter-D9BHP_qc.esm.js.map → filter-COXKBEER.esm.js.map} +1 -1
- package/dist/chunks/{filter-DtCrOG6W.js → filter-Cr_OSIpb.js} +3 -3
- package/dist/chunks/{filter-DtCrOG6W.js.map → filter-Cr_OSIpb.js.map} +1 -1
- package/dist/chunks/{footer-DioOh69g.js → footer-CD3kMRdS.js} +2 -2
- package/dist/chunks/{footer-DioOh69g.js.map → footer-CD3kMRdS.js.map} +1 -1
- package/dist/chunks/{footer-Bv5NOAf9.esm.js → footer-m3_dlNl8.esm.js} +2 -2
- package/dist/chunks/{footer-Bv5NOAf9.esm.js.map → footer-m3_dlNl8.esm.js.map} +1 -1
- package/dist/chunks/{form-fields-Di-p9XKG.esm.js → form-fields-hMMnB_wE.esm.js} +2 -2
- package/dist/chunks/{form-fields-Di-p9XKG.esm.js.map → form-fields-hMMnB_wE.esm.js.map} +1 -1
- package/dist/chunks/{form-fields-BYDhbAgB.js → form-fields-yE9kwjvb.js} +2 -2
- package/dist/chunks/{form-fields-BYDhbAgB.js.map → form-fields-yE9kwjvb.js.map} +1 -1
- package/dist/chunks/{form-parser-ZQpEVrzG.esm.js → form-parser-DbnSn5eY.esm.js} +2 -2
- package/dist/chunks/{form-parser-ZQpEVrzG.esm.js.map → form-parser-DbnSn5eY.esm.js.map} +1 -1
- package/dist/chunks/{form-parser-BnMdMDSb.js → form-parser-m4fnw38a.js} +2 -2
- package/dist/chunks/{form-parser-BnMdMDSb.js.map → form-parser-m4fnw38a.js.map} +1 -1
- package/dist/chunks/{form-section-CFeWD-tF.js → form-section-CPIyMdk2.js} +5 -5
- package/dist/chunks/{form-section-CFeWD-tF.js.map → form-section-CPIyMdk2.js.map} +1 -1
- package/dist/chunks/{form-section-BJ7Iqb9R.esm.js → form-section-TMjdOVeW.esm.js} +5 -5
- package/dist/chunks/{form-section-BJ7Iqb9R.esm.js.map → form-section-TMjdOVeW.esm.js.map} +1 -1
- package/dist/chunks/{fullScreen-h0JqBN4O.js → fullScreen-BLLa9ogA.js} +5 -5
- package/dist/chunks/fullScreen-BLLa9ogA.js.map +1 -0
- package/dist/chunks/{fullScreen-Cz3FIdU4.esm.js → fullScreen-DFgzE41_.esm.js} +5 -5
- package/dist/chunks/fullScreen-DFgzE41_.esm.js.map +1 -0
- package/dist/chunks/{global-search-CGmupYFQ.esm.js → global-search-BOkxXiZ0.esm.js} +3 -3
- package/dist/chunks/{global-search-CGmupYFQ.esm.js.map → global-search-BOkxXiZ0.esm.js.map} +1 -1
- package/dist/chunks/{global-search-BTV5iL6-.js → global-search-BjKPmzsQ.js} +2 -2
- package/dist/chunks/{global-search-BTV5iL6-.js.map → global-search-BjKPmzsQ.js.map} +1 -1
- package/dist/chunks/{grid-view-BMfleQMC.esm.js → grid-view-Bo86x7YL.esm.js} +2 -2
- package/dist/chunks/{grid-view-BMfleQMC.esm.js.map → grid-view-Bo86x7YL.esm.js.map} +1 -1
- package/dist/chunks/{header-BnVzqpGs.esm.js → header-B-HaoeK7.esm.js} +10 -12
- package/dist/chunks/{header-BnVzqpGs.esm.js.map → header-B-HaoeK7.esm.js.map} +1 -1
- package/dist/chunks/{header-jWPMgcy6.js → header-BHsex2As.js} +9 -11
- package/dist/chunks/{header-jWPMgcy6.js.map → header-BHsex2As.js.map} +1 -1
- package/dist/chunks/{header-enhanced-CkROCaOF.esm.js → header-enhanced-BjfqyQ1a.esm.js} +3 -3
- package/dist/chunks/{header-enhanced-CkROCaOF.esm.js.map → header-enhanced-BjfqyQ1a.esm.js.map} +1 -1
- package/dist/chunks/{header-enhanced-Dxdetx0I.js → header-enhanced-gJl4iC4m.js} +3 -3
- package/dist/chunks/{header-enhanced-Dxdetx0I.js.map → header-enhanced-gJl4iC4m.js.map} +1 -1
- package/dist/chunks/{index-BCmGHdos.esm.js → index-ALqg8b5U.esm.js} +2 -2
- package/dist/chunks/{index-BCmGHdos.esm.js.map → index-ALqg8b5U.esm.js.map} +1 -1
- package/dist/chunks/{inline-edit-fields-VOIx3qmC.esm.js → inline-edit-fields-BYhRpPcH.esm.js} +2 -2
- package/dist/chunks/{inline-edit-fields-VOIx3qmC.esm.js.map → inline-edit-fields-BYhRpPcH.esm.js.map} +1 -1
- package/dist/chunks/{inline-edit-fields-Cd_qUOjU.js → inline-edit-fields-atDP84QL.js} +2 -2
- package/dist/chunks/{inline-edit-fields-Cd_qUOjU.js.map → inline-edit-fields-atDP84QL.js.map} +1 -1
- package/dist/chunks/{inventory-reports-title-bar-BfUMM54c.js → inventory-reports-title-bar-Bog2i0dr.js} +2 -2
- package/dist/chunks/{inventory-reports-title-bar-BfUMM54c.js.map → inventory-reports-title-bar-Bog2i0dr.js.map} +1 -1
- package/dist/chunks/{inventory-reports-title-bar-CZZFFqDc.esm.js → inventory-reports-title-bar-CP8FzW6A.esm.js} +3 -3
- package/dist/chunks/{inventory-reports-title-bar-CZZFFqDc.esm.js.map → inventory-reports-title-bar-CP8FzW6A.esm.js.map} +1 -1
- package/dist/chunks/{item-response-details-BheThTTK.js → item-response-details-DsGQ7Dlc.js} +2 -2
- package/dist/chunks/{item-response-details-BheThTTK.js.map → item-response-details-DsGQ7Dlc.js.map} +1 -1
- package/dist/chunks/{item-response-details-BTHf6ZvN.esm.js → item-response-details-SHSD-nBh.esm.js} +4 -4
- package/dist/chunks/{item-response-details-BTHf6ZvN.esm.js.map → item-response-details-SHSD-nBh.esm.js.map} +1 -1
- package/dist/chunks/{listing-ELQeM6S3.esm.js → listing-C0Yb6MVq.esm.js} +4 -4
- package/dist/chunks/{listing-ELQeM6S3.esm.js.map → listing-C0Yb6MVq.esm.js.map} +1 -1
- package/dist/chunks/{listing-Dr_1DDBr.js → listing-DIuzQrzb.js} +4 -4
- package/dist/chunks/{listing-Dr_1DDBr.js.map → listing-DIuzQrzb.js.map} +1 -1
- package/dist/chunks/{location-select-z1C88kCy.esm.js → location-select-CFa00fy4.esm.js} +2 -2
- package/dist/chunks/{location-select-z1C88kCy.esm.js.map → location-select-CFa00fy4.esm.js.map} +1 -1
- package/dist/chunks/{location-select-CLyRUilk.js → location-select-g5uczAUF.js} +2 -2
- package/dist/chunks/{location-select-CLyRUilk.js.map → location-select-g5uczAUF.js.map} +1 -1
- package/dist/chunks/{material-editable-table-DFGB0q-s.js → material-editable-table-BGLjrTzT.js} +3 -3
- package/dist/chunks/{material-editable-table-DFGB0q-s.js.map → material-editable-table-BGLjrTzT.js.map} +1 -1
- package/dist/chunks/{material-editable-table-DyGdqNkX.esm.js → material-editable-table-pAyK7KYf.esm.js} +4 -4
- package/dist/chunks/{material-editable-table-DyGdqNkX.esm.js.map → material-editable-table-pAyK7KYf.esm.js.map} +1 -1
- package/dist/chunks/{module-reducer-CEv3LZCX.esm.js → module-reducer-DMxxForv.esm.js} +2 -2
- package/dist/chunks/{module-reducer-CEv3LZCX.esm.js.map → module-reducer-DMxxForv.esm.js.map} +1 -1
- package/dist/chunks/{modules-enwLrpfQ.esm.js → modules-BBu2Y-K9.esm.js} +5 -5
- package/dist/chunks/{modules-enwLrpfQ.esm.js.map → modules-BBu2Y-K9.esm.js.map} +1 -1
- package/dist/chunks/{modules-DTRr7zwt.js → modules-maXT99-4.js} +5 -5
- package/dist/chunks/{modules-DTRr7zwt.js.map → modules-maXT99-4.js.map} +1 -1
- package/dist/chunks/{notification-menu-B00hDUbn.js → notification-menu-D7ASm-K1.js} +2 -2
- package/dist/chunks/{notification-menu-B00hDUbn.js.map → notification-menu-D7ASm-K1.js.map} +1 -1
- package/dist/chunks/{notification-menu-CehCt5fA.esm.js → notification-menu-XAadkn-e.esm.js} +4 -4
- package/dist/chunks/{notification-menu-CehCt5fA.esm.js.map → notification-menu-XAadkn-e.esm.js.map} +1 -1
- package/dist/chunks/{page-action-TMFOytDw.js → page-action-BPzaL2KJ.js} +2 -2
- package/dist/chunks/{page-action-TMFOytDw.js.map → page-action-BPzaL2KJ.js.map} +1 -1
- package/dist/chunks/{page-action-RqVevciV.esm.js → page-action-C07iGjvN.esm.js} +4 -4
- package/dist/chunks/{page-action-RqVevciV.esm.js.map → page-action-C07iGjvN.esm.js.map} +1 -1
- package/dist/chunks/{page-navigator-CuIJ0KGf.esm.js → page-navigator-8gZpp9_P.esm.js} +2 -2
- package/dist/chunks/{page-navigator-CuIJ0KGf.esm.js.map → page-navigator-8gZpp9_P.esm.js.map} +1 -1
- package/dist/chunks/{page-navigator-DdRsmtLy.js → page-navigator-Cgbh3tTG.js} +2 -2
- package/dist/chunks/{page-navigator-DdRsmtLy.js.map → page-navigator-Cgbh3tTG.js.map} +1 -1
- package/dist/chunks/{page-view-Daz-OKd_.esm.js → page-view-CokUNMBn.esm.js} +3 -3
- package/dist/chunks/{page-view-Daz-OKd_.esm.js.map → page-view-CokUNMBn.esm.js.map} +1 -1
- package/dist/chunks/{page-view-CvfqzV03.js → page-view-DJ6HS_dV.js} +3 -3
- package/dist/chunks/{page-view-CvfqzV03.js.map → page-view-DJ6HS_dV.js.map} +1 -1
- package/dist/chunks/{pathname.rental-CwK6JuID.js → pathname.rental-DgH4LoG7.js} +7 -2
- package/dist/chunks/{pathname.rental-CwK6JuID.js.map → pathname.rental-DgH4LoG7.js.map} +1 -1
- package/dist/chunks/{pathname.rental-CqHO_l_D.esm.js → pathname.rental-qsAe3XFd.esm.js} +81 -76
- package/dist/chunks/{pathname.rental-CqHO_l_D.esm.js.map → pathname.rental-qsAe3XFd.esm.js.map} +1 -1
- package/dist/chunks/{quick-approval-modal-B-jvkgue.esm.js → quick-approval-modal-CPWs8htH.esm.js} +2 -2
- package/dist/chunks/{quick-approval-modal-B-jvkgue.esm.js.map → quick-approval-modal-CPWs8htH.esm.js.map} +1 -1
- package/dist/chunks/{reducer-BOwyP0QZ.esm.js → reducer-3tSO6RW6.esm.js} +3 -3
- package/dist/chunks/{reducer-BOwyP0QZ.esm.js.map → reducer-3tSO6RW6.esm.js.map} +1 -1
- package/dist/chunks/{reducer-BMkh_0Py.esm.js → reducer-CdJ6znKF.esm.js} +3 -3
- package/dist/chunks/{reducer-BMkh_0Py.esm.js.map → reducer-CdJ6znKF.esm.js.map} +1 -1
- package/dist/chunks/{reducer-BTfG9J4W.esm.js → reducer-IsgN83rP.esm.js} +2 -2
- package/dist/chunks/{reducer-BTfG9J4W.esm.js.map → reducer-IsgN83rP.esm.js.map} +1 -1
- package/dist/chunks/{reducer-CD1VDqeT.esm.js → reducer-sgaK2vfW.esm.js} +2 -2
- package/dist/chunks/{reducer-CD1VDqeT.esm.js.map → reducer-sgaK2vfW.esm.js.map} +1 -1
- package/dist/chunks/{reducer-BWiX5vxL.esm.js → reducer-yyZtsg1A.esm.js} +2 -2
- package/dist/chunks/{reducer-BWiX5vxL.esm.js.map → reducer-yyZtsg1A.esm.js.map} +1 -1
- package/dist/chunks/{reports-title-bar-Kl8XQe-K.esm.js → reports-title-bar-Cay4E8SQ.esm.js} +4 -4
- package/dist/chunks/{reports-title-bar-Kl8XQe-K.esm.js.map → reports-title-bar-Cay4E8SQ.esm.js.map} +1 -1
- package/dist/chunks/{reports-title-bar-B1_IweEc.js → reports-title-bar-Kz6JjqsY.js} +2 -2
- package/dist/chunks/{reports-title-bar-B1_IweEc.js.map → reports-title-bar-Kz6JjqsY.js.map} +1 -1
- package/dist/chunks/{route-page-map-D6-7jBQT.esm.js → route-page-map-DkWoisiB.esm.js} +133 -76
- package/dist/chunks/{route-page-map-D6-7jBQT.esm.js.map → route-page-map-DkWoisiB.esm.js.map} +1 -1
- package/dist/chunks/{route-page-map-CzFUh-SC.js → route-page-map-Dn-SAbdf.js} +60 -3
- package/dist/chunks/{route-page-map-CzFUh-SC.js.map → route-page-map-Dn-SAbdf.js.map} +1 -1
- package/dist/chunks/{routes-D9y_XQRu.esm.js → routes-CAc76Zan.esm.js} +4 -4
- package/dist/chunks/{routes-D9y_XQRu.esm.js.map → routes-CAc76Zan.esm.js.map} +1 -1
- package/dist/chunks/{routes-Dsumzjw0.js → routes-CfqLAYgR.js} +4 -4
- package/dist/chunks/{routes-Dsumzjw0.js.map → routes-CfqLAYgR.js.map} +1 -1
- package/dist/chunks/{schedule-report-BwmZ5jea.js → schedule-report-B4ZfEuiU.js} +4 -4
- package/dist/chunks/{schedule-report-BwmZ5jea.js.map → schedule-report-B4ZfEuiU.js.map} +1 -1
- package/dist/chunks/{schedule-report-CJXHVZ68.esm.js → schedule-report-CLXjjfjc.esm.js} +6 -6
- package/dist/chunks/{schedule-report-CJXHVZ68.esm.js.map → schedule-report-CLXjjfjc.esm.js.map} +1 -1
- package/dist/chunks/{schedule-report-modal-D8Y-TZ4u.esm.js → schedule-report-modal-CB3G9H7x.esm.js} +3 -3
- package/dist/chunks/{schedule-report-modal-D8Y-TZ4u.esm.js.map → schedule-report-modal-CB3G9H7x.esm.js.map} +1 -1
- package/dist/chunks/{schedule-report-modal-iNnWP9s4.js → schedule-report-modal-iwoDI-sg.js} +2 -2
- package/dist/chunks/{schedule-report-modal-iNnWP9s4.js.map → schedule-report-modal-iwoDI-sg.js.map} +1 -1
- package/dist/chunks/{searchable-select-BQtcqBKV.esm.js → searchable-select-0F6E4XAr.esm.js} +6 -6
- package/dist/chunks/{searchable-select-BQtcqBKV.esm.js.map → searchable-select-0F6E4XAr.esm.js.map} +1 -1
- package/dist/chunks/{searchable-select-DVUCWWti.js → searchable-select-_DCkITfk.js} +2 -2
- package/dist/chunks/{searchable-select-DVUCWWti.js.map → searchable-select-_DCkITfk.js.map} +1 -1
- package/dist/chunks/{share-modal-BOyLBawK.esm.js → share-modal-BaEyZs2h.esm.js} +3 -3
- package/dist/chunks/{share-modal-BOyLBawK.esm.js.map → share-modal-BaEyZs2h.esm.js.map} +1 -1
- package/dist/chunks/{share-modal-CobK7BN7.js → share-modal-DrXvh-fV.js} +2 -2
- package/dist/chunks/{share-modal-CobK7BN7.js.map → share-modal-DrXvh-fV.js.map} +1 -1
- package/dist/chunks/{share-modal-enhanced-DVarD-jt.js → share-modal-enhanced-BTr0zRhF.js} +2 -2
- package/dist/chunks/{share-modal-enhanced-DVarD-jt.js.map → share-modal-enhanced-BTr0zRhF.js.map} +1 -1
- package/dist/chunks/{share-modal-enhanced-CTp-tQw8.esm.js → share-modal-enhanced-DnEdDBmu.esm.js} +2 -2
- package/dist/chunks/{share-modal-enhanced-CTp-tQw8.esm.js.map → share-modal-enhanced-DnEdDBmu.esm.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-lR6rw8bW.esm.js → sidebarScreen-DiOAiXeU.esm.js} +4 -4
- package/dist/chunks/{sidebarScreen-lR6rw8bW.esm.js.map → sidebarScreen-DiOAiXeU.esm.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-K-dlM6NA.js → sidebarScreen-DpYj_wlK.js} +3 -3
- package/dist/chunks/{sidebarScreen-K-dlM6NA.js.map → sidebarScreen-DpYj_wlK.js.map} +1 -1
- package/dist/chunks/{store-DJh8C3Vv.esm.js → store-BL5VFPie.esm.js} +6 -6
- package/dist/chunks/{store-DJh8C3Vv.esm.js.map → store-BL5VFPie.esm.js.map} +1 -1
- package/dist/chunks/{table-Bpt6ggr3.js → table-DWx7x8zw.js} +2 -2
- package/dist/chunks/{table-Bpt6ggr3.js.map → table-DWx7x8zw.js.map} +1 -1
- package/dist/chunks/{table-form-8_f3FwhX.esm.js → table-form-DsTwCUcs.esm.js} +2 -2
- package/dist/chunks/{table-form-8_f3FwhX.esm.js.map → table-form-DsTwCUcs.esm.js.map} +1 -1
- package/dist/chunks/{table-DI3MyTNm.esm.js → table-gxAlAeTq.esm.js} +3 -3
- package/dist/chunks/{table-DI3MyTNm.esm.js.map → table-gxAlAeTq.esm.js.map} +1 -1
- package/dist/chunks/{template-editor-router-uzghBOap.esm.js → template-editor-router-BXLUTvsk.esm.js} +2 -2
- package/dist/chunks/{template-editor-router-uzghBOap.esm.js.map → template-editor-router-BXLUTvsk.esm.js.map} +1 -1
- package/dist/chunks/{template-editor-router-DugWbCh0.js → template-editor-router-D4NIwVws.js} +2 -2
- package/dist/chunks/{template-editor-router-DugWbCh0.js.map → template-editor-router-D4NIwVws.js.map} +1 -1
- package/dist/chunks/{template-modal-D7aLacan.esm.js → template-modal-B2VgotrF.esm.js} +6 -7
- package/dist/chunks/template-modal-B2VgotrF.esm.js.map +1 -0
- package/dist/chunks/{template-modal-Df7gF4QI.js → template-modal-X-iSmlki.js} +4 -5
- package/dist/chunks/template-modal-X-iSmlki.js.map +1 -0
- package/dist/chunks/{template-name-modal-ClreVUaz.js → template-name-modal-CeqxIE2r.js} +5 -12
- package/dist/chunks/template-name-modal-CeqxIE2r.js.map +1 -0
- package/dist/chunks/{template-name-modal-Dwe7U72p.esm.js → template-name-modal-Dctn8t3t.esm.js} +5 -12
- package/dist/chunks/template-name-modal-Dctn8t3t.esm.js.map +1 -0
- package/dist/chunks/{templates-9ZMHwRR6.esm.js → templates-CCy1eG6A.esm.js} +17 -10
- package/dist/chunks/templates-CCy1eG6A.esm.js.map +1 -0
- package/dist/chunks/{templates-DCXbeOtH.js → templates-CUREMwYo.js} +14 -7
- package/dist/chunks/templates-CUREMwYo.js.map +1 -0
- package/dist/chunks/{text-measurement-DMVkqP6b.esm.js → text-measurement-BCjauPbB.esm.js} +2 -2
- package/dist/chunks/{text-measurement-DMVkqP6b.esm.js.map → text-measurement-BCjauPbB.esm.js.map} +1 -1
- package/dist/chunks/{translations-JcE6qyDJ.esm.js → translations-BrwQcVN3.esm.js} +3 -3
- package/dist/chunks/{translations-JcE6qyDJ.esm.js.map → translations-BrwQcVN3.esm.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-CWTsSsSi.esm.js → uom-field-wrapper-CTbEc-MB.esm.js} +2 -2
- package/dist/chunks/{uom-field-wrapper-CWTsSsSi.esm.js.map → uom-field-wrapper-CTbEc-MB.esm.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-CSqeiVPY.js → uom-field-wrapper-DXZgzOYB.js} +2 -2
- package/dist/chunks/{uom-field-wrapper-CSqeiVPY.js.map → uom-field-wrapper-DXZgzOYB.js.map} +1 -1
- package/dist/chunks/{upload-excel-CkEQqZW2.esm.js → upload-excel-BZPP13tP.esm.js} +2 -2
- package/dist/chunks/{upload-excel-CkEQqZW2.esm.js.map → upload-excel-BZPP13tP.esm.js.map} +1 -1
- package/dist/chunks/{use-translations-Cn3b4Kqh.js → use-translations-5wUQBxMm.js} +2 -2
- package/dist/chunks/{use-translations-Cn3b4Kqh.js.map → use-translations-5wUQBxMm.js.map} +1 -1
- package/dist/chunks/{use-translations-BqBPN1DM.esm.js → use-translations-CcjSFA3F.esm.js} +3 -3
- package/dist/chunks/{use-translations-BqBPN1DM.esm.js.map → use-translations-CcjSFA3F.esm.js.map} +1 -1
- package/dist/chunks/{useAccountSetting-DsU5zsjb.esm.js → useAccountSetting-vAqgEiJB.esm.js} +2 -2
- package/dist/chunks/{useAccountSetting-DsU5zsjb.esm.js.map → useAccountSetting-vAqgEiJB.esm.js.map} +1 -1
- package/dist/chunks/{useCheckSkuAndName-5ua30aZf.esm.js → useCheckSkuAndName-Dl24wQO-.esm.js} +2 -2
- package/dist/chunks/{useCheckSkuAndName-5ua30aZf.esm.js.map → useCheckSkuAndName-Dl24wQO-.esm.js.map} +1 -1
- package/dist/chunks/{useReduxIntegration-BlLpfwk6.esm.js → useReduxIntegration-DZBfKF7d.esm.js} +2 -2
- package/dist/chunks/{useReduxIntegration-BlLpfwk6.esm.js.map → useReduxIntegration-DZBfKF7d.esm.js.map} +1 -1
- package/dist/chunks/{useUniquenessCheck-CiR2q5bM.esm.js → useUniquenessCheck-bYjnp_0P.esm.js} +2 -2
- package/dist/chunks/{useUniquenessCheck-CiR2q5bM.esm.js.map → useUniquenessCheck-bYjnp_0P.esm.js.map} +1 -1
- package/dist/chunks/{useVendorAICompare-DMJvJJ3Y.esm.js → useVendorAICompare-DZRFDk4i.esm.js} +2 -2
- package/dist/chunks/{useVendorAICompare-DMJvJJ3Y.esm.js.map → useVendorAICompare-DZRFDk4i.esm.js.map} +1 -1
- package/dist/chunks/{value-editor-Br7X_wEB.js → value-editor-BSS9Ns2T.js} +2 -2
- package/dist/chunks/{value-editor-Br7X_wEB.js.map → value-editor-BSS9Ns2T.js.map} +1 -1
- package/dist/chunks/{value-editor-BxFdnUyM.esm.js → value-editor-DQ1qgZ2u.esm.js} +4 -4
- package/dist/chunks/{value-editor-BxFdnUyM.esm.js.map → value-editor-DQ1qgZ2u.esm.js.map} +1 -1
- package/dist/chunks/{vendor-ai-summary-Cpx90QOx.esm.js → vendor-ai-summary-BA6m2dH9.esm.js} +2 -2
- package/dist/chunks/{vendor-ai-summary-Cpx90QOx.esm.js.map → vendor-ai-summary-BA6m2dH9.esm.js.map} +1 -1
- package/dist/chunks/{vendor-ai-summary-zranZkfk.js → vendor-ai-summary-DWmAaQ_N.js} +2 -2
- package/dist/chunks/{vendor-ai-summary-zranZkfk.js.map → vendor-ai-summary-DWmAaQ_N.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 +36 -36
- package/dist/components/index.js +27 -27
- 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/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 +145 -143
- package/dist/constants/index.js +5 -3
- 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 +232 -235
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +64 -67
- 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 +2 -1
- package/dist/src/components/chat-bot/chat-bot.d.ts +5 -1
- package/dist/src/constants/defaultColumns.d.ts +1 -0
- package/dist/src/constants/pathnames/pathname.procurement.d.ts +4 -0
- package/dist/src/layout/fullScreen/fullScreen.d.ts +1 -0
- package/dist/src/views/template-editor/components/EditorCanvas.d.ts +12 -30
- package/dist/src/views/template-editor/components/EditorHeader.d.ts +0 -6
- package/dist/src/views/template-editor/components/EditorSection.d.ts +0 -1
- package/dist/src/views/template-editor/components/SectionFlowEditor.d.ts +3 -2
- package/dist/src/views/template-editor/components/SectionFormatPanel.d.ts +1 -2
- package/dist/src/views/template-editor/components/controllers/TableControls.d.ts +0 -23
- package/dist/src/views/template-editor/components/controllers/TextControls.d.ts +0 -3
- package/dist/src/views/template-editor/types/editor.d.ts +108 -20
- package/dist/src/views/template-editor/utils/common.d.ts +1 -10
- package/dist/src/views/template-editor/utils/constant.d.ts +1 -4
- package/dist/style.css +100 -4629
- 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 +1 -0
- package/dist/utils/export-filters/index.esm.js.map +1 -1
- package/dist/utils/export-filters/index.js +1 -0
- package/dist/utils/export-filters/index.js.map +1 -1
- package/dist/utils/index.esm.js +8 -8
- 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 +34 -39
- package/dist/views/index.esm.js.map +1 -1
- package/dist/views/index.js +31 -36
- 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 +6 -7
- package/dist/views/template-editor/components/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/index.js +3 -4
- 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 +20 -25
- package/dist/views/template-editor/index.esm.js.map +1 -1
- package/dist/views/template-editor/index.js +11 -16
- 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 +6 -10
- package/dist/views/template-editor/utils/index.js +2 -6
- package/dist/views/template-editor/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/EditorSection-BLGcgQFm.esm.js +0 -849
- package/dist/chunks/EditorSection-BLGcgQFm.esm.js.map +0 -1
- package/dist/chunks/EditorSection-D6yaBfjP.js +0 -848
- package/dist/chunks/EditorSection-D6yaBfjP.js.map +0 -1
- package/dist/chunks/SectionFlowEditor-Dp-mjWT9.esm.js +0 -12543
- package/dist/chunks/SectionFlowEditor-Dp-mjWT9.esm.js.map +0 -1
- package/dist/chunks/SectionFlowEditor-Dz1SuCm2.js +0 -12542
- package/dist/chunks/SectionFlowEditor-Dz1SuCm2.js.map +0 -1
- package/dist/chunks/add-template-CUPbU0z7.js +0 -10
- package/dist/chunks/add-template-CUPbU0z7.js.map +0 -1
- package/dist/chunks/add-template-CxvhzFMF.esm.js +0 -11
- package/dist/chunks/add-template-CxvhzFMF.esm.js.map +0 -1
- package/dist/chunks/chat-bot-2Ga_xA_K.js.map +0 -1
- package/dist/chunks/chat-bot-DO3vAGxA.esm.js.map +0 -1
- package/dist/chunks/common-BgXEAs_y.esm.js +0 -851
- package/dist/chunks/common-BgXEAs_y.esm.js.map +0 -1
- package/dist/chunks/common-D6T6NGWY.js +0 -850
- package/dist/chunks/common-D6T6NGWY.js.map +0 -1
- package/dist/chunks/common-utility-CS_sNoAC.esm.js.map +0 -1
- package/dist/chunks/constant-BXPcBhJN.esm.js.map +0 -1
- package/dist/chunks/constant-BXeJD4Af.js.map +0 -1
- package/dist/chunks/edit-section-modal-HihKbN6K.esm.js.map +0 -1
- package/dist/chunks/fullScreen-Cz3FIdU4.esm.js.map +0 -1
- package/dist/chunks/fullScreen-h0JqBN4O.js.map +0 -1
- package/dist/chunks/template-modal-D7aLacan.esm.js.map +0 -1
- package/dist/chunks/template-modal-Df7gF4QI.js.map +0 -1
- package/dist/chunks/template-name-modal-ClreVUaz.js.map +0 -1
- package/dist/chunks/template-name-modal-Dwe7U72p.esm.js.map +0 -1
- package/dist/chunks/templates-9ZMHwRR6.esm.js.map +0 -1
- package/dist/chunks/templates-DCXbeOtH.js.map +0 -1
- package/dist/src/views/template-editor/components/EditorCanvas/FreeCanvas.d.ts +0 -34
- package/dist/src/views/template-editor/components/EditorCanvas/FreeElement.d.ts +0 -30
- package/dist/src/views/template-editor/components/stationery/StationeryPreview.d.ts +0 -24
- package/dist/src/views/template-editor/components/stationery/StationerySidebar.d.ts +0 -9
- package/dist/src/views/template-editor/engine/ai.d.ts +0 -12
- package/dist/src/views/template-editor/engine/app.d.ts +0 -1
- package/dist/src/views/template-editor/engine/controls.d.ts +0 -4
- package/dist/src/views/template-editor/engine/design-canvas.d.ts +0 -24
- package/dist/src/views/template-editor/engine/editor.d.ts +0 -17
- package/dist/src/views/template-editor/engine/engine.d.ts +0 -18
- package/dist/src/views/template-editor/engine/icons.d.ts +0 -91
- package/dist/src/views/template-editor/engine/letterpads.d.ts +0 -1
- package/dist/src/views/template-editor/engine/model.d.ts +0 -20
- package/dist/src/views/template-editor/engine/paginator.d.ts +0 -30
- package/dist/src/views/template-editor/engine/picker.d.ts +0 -20
- package/dist/src/views/template-editor/engine/schema.d.ts +0 -647
- package/dist/src/views/template-editor/engine/stationery-app.d.ts +0 -10
- package/dist/src/views/template-editor/engine/stationery-doc.d.ts +0 -62
- package/dist/src/views/template-editor/engine/stationery-free-element.d.ts +0 -22
- package/dist/src/views/template-editor/engine/stationery-store.d.ts +0 -154
- package/dist/src/views/template-editor/engine/templatebuilder.d.ts +0 -51
- package/dist/src/views/template-editor/engine/templates.d.ts +0 -11
- package/dist/src/views/template-editor/icons/custom-styled-icon.d.ts +0 -7
- package/dist/src/views/template-editor/icons/edit.d.ts +0 -4
- package/dist/src/views/template-editor/icons/trash.d.ts +0 -4
- package/dist/src/views/template-editor/types/stationery.d.ts +0 -66
- package/dist/src/views/template-editor/utils/compiler.d.ts +0 -12
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SectionFlowEditor-Dp-mjWT9.esm.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","FontSize","extractStyles","useState","useRef","useEffect","useMemo","useCallback","React","_a","ITEMS","CUSTOMER","DOC_META","priced","_","_b","_c","_d","f","_e","DOCS","dims","CodeEditor","FieldTree","esc","StyledToggleButtonGroup","styled","Android12Switch","Select","TextField","styles","MuiAccordion","_f","_g","_h","_i","_j","c","Trash","row","TextIcon","ImageIcon","TableIcon","SignatureIcon","QrCodeIcon","BarcodeIcon","Section","Row","Toggle","Seg","Range","ControlsPanel","itemsGroup","dynamicItemFields","error","TextControls","section","_k","_l","CloseIcon","content","getToken","save","active","type","newAttributes","totalPages","Button","DEFAULT_ELEMENT_SIZES","data","next","id"],"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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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"}
|