@erpsquad/common 1.11.8 → 1.11.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (599) hide show
  1. package/dist/api-client/index.esm.js +1 -1
  2. package/dist/api-client/index.js +1 -1
  3. package/dist/chunks/{DynamicDependentField-C0XXmMlG.esm.js → DynamicDependentField-CzEJwzIq.esm.js} +2 -2
  4. package/dist/chunks/{DynamicDependentField-C0XXmMlG.esm.js.map → DynamicDependentField-CzEJwzIq.esm.js.map} +1 -1
  5. package/dist/chunks/{DynamicDependentField-CQIfDDqc.js → DynamicDependentField-D8K1QyqC.js} +2 -2
  6. package/dist/chunks/{DynamicDependentField-CQIfDDqc.js.map → DynamicDependentField-D8K1QyqC.js.map} +1 -1
  7. package/dist/chunks/{ERPUIProvider-I4j_X_SD.esm.js → ERPUIProvider-CqbIIC8j.esm.js} +3 -3
  8. package/dist/chunks/{ERPUIProvider-I4j_X_SD.esm.js.map → ERPUIProvider-CqbIIC8j.esm.js.map} +1 -1
  9. package/dist/chunks/{ERPUIProvider-CcSTcdEo.js → ERPUIProvider-TOq-GnAq.js} +3 -3
  10. package/dist/chunks/{ERPUIProvider-CcSTcdEo.js.map → ERPUIProvider-TOq-GnAq.js.map} +1 -1
  11. package/dist/chunks/{FORMS-pxf6g6xE.esm.js → FORMS-C1qQnoDd.esm.js} +7 -7
  12. package/dist/chunks/{FORMS-pxf6g6xE.esm.js.map → FORMS-C1qQnoDd.esm.js.map} +1 -1
  13. package/dist/chunks/{FORMS-CUx32b_4.js → FORMS-qlTftaaD.js} +7 -7
  14. package/dist/chunks/{FORMS-CUx32b_4.js.map → FORMS-qlTftaaD.js.map} +1 -1
  15. package/dist/chunks/{FlexibleReduxExample--GtoEJhc.js → FlexibleReduxExample-BEK1732S.js} +4 -4
  16. package/dist/chunks/{FlexibleReduxExample--GtoEJhc.js.map → FlexibleReduxExample-BEK1732S.js.map} +1 -1
  17. package/dist/chunks/{FlexibleReduxExample-C-2qOGIw.esm.js → FlexibleReduxExample-CfMjfKUf.esm.js} +4 -4
  18. package/dist/chunks/{FlexibleReduxExample-C-2qOGIw.esm.js.map → FlexibleReduxExample-CfMjfKUf.esm.js.map} +1 -1
  19. package/dist/chunks/{SectionFlowEditor-sKsZ3oQo.js → SectionFlowEditor-Bo7czbNc.js} +5 -5
  20. package/dist/chunks/{SectionFlowEditor-sKsZ3oQo.js.map → SectionFlowEditor-Bo7czbNc.js.map} +1 -1
  21. package/dist/chunks/{SectionFlowEditor-CFfJBYKx.esm.js → SectionFlowEditor-Ch24-oHf.esm.js} +5 -5
  22. package/dist/chunks/{SectionFlowEditor-CFfJBYKx.esm.js.map → SectionFlowEditor-Ch24-oHf.esm.js.map} +1 -1
  23. package/dist/chunks/{action-bar-C7Alva4T.esm.js → action-bar-BQ3DcZpw.esm.js} +4 -4
  24. package/dist/chunks/{action-bar-C7Alva4T.esm.js.map → action-bar-BQ3DcZpw.esm.js.map} +1 -1
  25. package/dist/chunks/{action-bar-DdtpxWNk.js → action-bar-CiYO9X02.js} +4 -4
  26. package/dist/chunks/{action-bar-DdtpxWNk.js.map → action-bar-CiYO9X02.js.map} +1 -1
  27. package/dist/chunks/{actionCreator-o4ecxFME.js → actionCreator-BdAKTPvT.js} +3 -3
  28. package/dist/chunks/{actionCreator-o4ecxFME.js.map → actionCreator-BdAKTPvT.js.map} +1 -1
  29. package/dist/chunks/{actionCreator-Cl8vPLVO.esm.js → actionCreator-C5C0Rg3P.esm.js} +2 -2
  30. package/dist/chunks/{actionCreator-Cl8vPLVO.esm.js.map → actionCreator-C5C0Rg3P.esm.js.map} +1 -1
  31. package/dist/chunks/{actionCreator-Cb3NxILP.esm.js → actionCreator-C6VISpYt.esm.js} +3 -3
  32. package/dist/chunks/{actionCreator-Cb3NxILP.esm.js.map → actionCreator-C6VISpYt.esm.js.map} +1 -1
  33. package/dist/chunks/{actionCreator-Dar9Z8_d.esm.js → actionCreator-C7fR-FtF.esm.js} +2 -2
  34. package/dist/chunks/{actionCreator-Dar9Z8_d.esm.js.map → actionCreator-C7fR-FtF.esm.js.map} +1 -1
  35. package/dist/chunks/{actionCreator-CMigYdax.js → actionCreator-CPRDrGDt.js} +3 -3
  36. package/dist/chunks/{actionCreator-CMigYdax.js.map → actionCreator-CPRDrGDt.js.map} +1 -1
  37. package/dist/chunks/{actionCreator-CXmvL3vl.js → actionCreator-D1M0-Fq1.js} +2 -2
  38. package/dist/chunks/{actionCreator-CXmvL3vl.js.map → actionCreator-D1M0-Fq1.js.map} +1 -1
  39. package/dist/chunks/{actionCreator-Bas2FW_X.js → actionCreator-Dds_g-Bu.js} +2 -2
  40. package/dist/chunks/{actionCreator-Bas2FW_X.js.map → actionCreator-Dds_g-Bu.js.map} +1 -1
  41. package/dist/chunks/{actionCreator-CpePNxQM.esm.js → actionCreator-EaDmUCRb.esm.js} +2 -2
  42. package/dist/chunks/{actionCreator-CpePNxQM.esm.js.map → actionCreator-EaDmUCRb.esm.js.map} +1 -1
  43. package/dist/chunks/{actionCreator-CL5ICuqZ.esm.js → actionCreator-Jk4efZIf.esm.js} +3 -3
  44. package/dist/chunks/{actionCreator-CL5ICuqZ.esm.js.map → actionCreator-Jk4efZIf.esm.js.map} +1 -1
  45. package/dist/chunks/{actionCreator-Dl5gTT9c.js → actionCreator-cbPvURIw.js} +2 -2
  46. package/dist/chunks/{actionCreator-Dl5gTT9c.js.map → actionCreator-cbPvURIw.js.map} +1 -1
  47. package/dist/chunks/{add-template-DVvbD9a4.esm.js → add-template-CMJffU6X.esm.js} +2 -2
  48. package/dist/chunks/{add-template-DVvbD9a4.esm.js.map → add-template-CMJffU6X.esm.js.map} +1 -1
  49. package/dist/chunks/{add-template-Dohg2bHJ.js → add-template-xJNMepo_.js} +2 -2
  50. package/dist/chunks/{add-template-Dohg2bHJ.js.map → add-template-xJNMepo_.js.map} +1 -1
  51. package/dist/chunks/{address-modal-CYhiC7ui.js → address-modal-D-FwM2i_.js} +2 -2
  52. package/dist/chunks/{address-modal-CYhiC7ui.js.map → address-modal-D-FwM2i_.js.map} +1 -1
  53. package/dist/chunks/{address-modal-CkDBjnye.esm.js → address-modal-DuLY8PAg.esm.js} +2 -2
  54. package/dist/chunks/{address-modal-CkDBjnye.esm.js.map → address-modal-DuLY8PAg.esm.js.map} +1 -1
  55. package/dist/chunks/{ai-summary-BxcrnNNM.js → ai-summary-CzLIVEbV.js} +3 -3
  56. package/dist/chunks/{ai-summary-BxcrnNNM.js.map → ai-summary-CzLIVEbV.js.map} +1 -1
  57. package/dist/chunks/{ai-summary-SKK5KN2s.esm.js → ai-summary-DGQyEhsD.esm.js} +3 -3
  58. package/dist/chunks/{ai-summary-SKK5KN2s.esm.js.map → ai-summary-DGQyEhsD.esm.js.map} +1 -1
  59. package/dist/chunks/{api-DBhNDBh9.js → api-CMF1LApB.js} +57 -1
  60. package/dist/chunks/{api-DBhNDBh9.js.map → api-CMF1LApB.js.map} +1 -1
  61. package/dist/chunks/{api-BIVCMSwW.esm.js → api-COFUx2RW.esm.js} +2 -2
  62. package/dist/chunks/{api-BIVCMSwW.esm.js.map → api-COFUx2RW.esm.js.map} +1 -1
  63. package/dist/chunks/{api-Bl6wVi9D.esm.js → api-D4FV2rsK.esm.js} +69 -13
  64. package/dist/chunks/{api-Bl6wVi9D.esm.js.map → api-D4FV2rsK.esm.js.map} +1 -1
  65. package/dist/chunks/{api-EomXz8pk.js → api-DuBJvpDR.js} +2 -2
  66. package/dist/chunks/{api-EomXz8pk.js.map → api-DuBJvpDR.js.map} +1 -1
  67. package/dist/chunks/{appbar-rqqjZ99v.js → appbar-DzkTUvFH.js} +2 -2
  68. package/dist/chunks/{appbar-rqqjZ99v.js.map → appbar-DzkTUvFH.js.map} +1 -1
  69. package/dist/chunks/{appbar-BRbO--as.esm.js → appbar-NK7cEVYo.esm.js} +2 -2
  70. package/dist/chunks/{appbar-BRbO--as.esm.js.map → appbar-NK7cEVYo.esm.js.map} +1 -1
  71. package/dist/chunks/{approval-wrapper-BTtmXMlk.esm.js → approval-wrapper-Dkc8WEg5.esm.js} +2 -2
  72. package/dist/chunks/{approval-wrapper-BTtmXMlk.esm.js.map → approval-wrapper-Dkc8WEg5.esm.js.map} +1 -1
  73. package/dist/chunks/{approval-wrapper-BM5NxbtT.js → approval-wrapper-Nh3CVait.js} +2 -2
  74. package/dist/chunks/{approval-wrapper-BM5NxbtT.js.map → approval-wrapper-Nh3CVait.js.map} +1 -1
  75. package/dist/chunks/{chat-bot-BpNtrZEL.esm.js → chat-bot-3MwduUlf.esm.js} +245 -68
  76. package/dist/chunks/chat-bot-3MwduUlf.esm.js.map +1 -0
  77. package/dist/chunks/{chat-bot-osiGMG3g.js → chat-bot-sjkDRlr3.js} +244 -67
  78. package/dist/chunks/chat-bot-sjkDRlr3.js.map +1 -0
  79. package/dist/chunks/{common-utility-DGpbsf7S.esm.js → common-utility-GjUrjpEf.esm.js} +2 -2
  80. package/dist/chunks/{common-utility-DGpbsf7S.esm.js.map → common-utility-GjUrjpEf.esm.js.map} +1 -1
  81. package/dist/chunks/{common-utility-CA_Upser.js → common-utility-TLpddkaa.js} +2 -2
  82. package/dist/chunks/{common-utility-CA_Upser.js.map → common-utility-TLpddkaa.js.map} +1 -1
  83. package/dist/chunks/{custom-editor-6-xqhKz6.esm.js → custom-editor-BjUUIs4F.esm.js} +2 -2
  84. package/dist/chunks/{custom-editor-6-xqhKz6.esm.js.map → custom-editor-BjUUIs4F.esm.js.map} +1 -1
  85. package/dist/chunks/{custom-editor-BeLYFfpv.js → custom-editor-ByC55Z4G.js} +2 -2
  86. package/dist/chunks/{custom-editor-BeLYFfpv.js.map → custom-editor-ByC55Z4G.js.map} +1 -1
  87. package/dist/chunks/{custom-form-CFU7NEVb.js → custom-form-DEzUMeYP.js} +6 -6
  88. package/dist/chunks/{custom-form-CFU7NEVb.js.map → custom-form-DEzUMeYP.js.map} +1 -1
  89. package/dist/chunks/{custom-form-DD7YOHMF.esm.js → custom-form-RvoE2OQr.esm.js} +6 -6
  90. package/dist/chunks/{custom-form-DD7YOHMF.esm.js.map → custom-form-RvoE2OQr.esm.js.map} +1 -1
  91. package/dist/chunks/{dashboard-DL83yYRR.esm.js → dashboard-C-HlBEpm.esm.js} +3 -3
  92. package/dist/chunks/{dashboard-DL83yYRR.esm.js.map → dashboard-C-HlBEpm.esm.js.map} +1 -1
  93. package/dist/chunks/{dashboard-BcWVkWZt.js → dashboard-CSms9RGu.js} +3 -3
  94. package/dist/chunks/{dashboard-BcWVkWZt.js.map → dashboard-CSms9RGu.js.map} +1 -1
  95. package/dist/chunks/{dynamic-report-Z7TQNhUq.js → dynamic-report-2BfQqTlE.js} +4 -4
  96. package/dist/chunks/{dynamic-report-Z7TQNhUq.js.map → dynamic-report-2BfQqTlE.js.map} +1 -1
  97. package/dist/chunks/{dynamic-report-tKn-KqAd.esm.js → dynamic-report-6NS0z5pW.esm.js} +4 -4
  98. package/dist/chunks/{dynamic-report-tKn-KqAd.esm.js.map → dynamic-report-6NS0z5pW.esm.js.map} +1 -1
  99. package/dist/chunks/{dynamic-rows-CTGETfcP.esm.js → dynamic-rows-CZ1dmLX-.esm.js} +2 -2
  100. package/dist/chunks/{dynamic-rows-CTGETfcP.esm.js.map → dynamic-rows-CZ1dmLX-.esm.js.map} +1 -1
  101. package/dist/chunks/{dynamic-rows-CNd_zBwf.js → dynamic-rows-DXy4dtIP.js} +2 -2
  102. package/dist/chunks/{dynamic-rows-CNd_zBwf.js.map → dynamic-rows-DXy4dtIP.js.map} +1 -1
  103. package/dist/chunks/{dynamic-text-editor-BBIYTdKZ.js → dynamic-text-editor-BsS7d6iX.js} +2 -2
  104. package/dist/chunks/{dynamic-text-editor-BBIYTdKZ.js.map → dynamic-text-editor-BsS7d6iX.js.map} +1 -1
  105. package/dist/chunks/{dynamic-text-editor-CPvlGcLK.esm.js → dynamic-text-editor-CLrhRiKM.esm.js} +2 -2
  106. package/dist/chunks/{dynamic-text-editor-CPvlGcLK.esm.js.map → dynamic-text-editor-CLrhRiKM.esm.js.map} +1 -1
  107. package/dist/chunks/{edit-section-modal-BW-aZmUv.esm.js → edit-section-modal-BVH6gzyy.esm.js} +2 -2
  108. package/dist/chunks/{edit-section-modal-BW-aZmUv.esm.js.map → edit-section-modal-BVH6gzyy.esm.js.map} +1 -1
  109. package/dist/chunks/{edit-section-modal-Br2ITvLk.js → edit-section-modal-CB6-TNxs.js} +2 -2
  110. package/dist/chunks/{edit-section-modal-Br2ITvLk.js.map → edit-section-modal-CB6-TNxs.js.map} +1 -1
  111. package/dist/chunks/{filter-Cr_OSIpb.js → filter-Chgp8Ga-.js} +3 -3
  112. package/dist/chunks/{filter-Cr_OSIpb.js.map → filter-Chgp8Ga-.js.map} +1 -1
  113. package/dist/chunks/{filter-COXKBEER.esm.js → filter-DgzeYnXU.esm.js} +3 -3
  114. package/dist/chunks/{filter-COXKBEER.esm.js.map → filter-DgzeYnXU.esm.js.map} +1 -1
  115. package/dist/chunks/{footer-CD3kMRdS.js → footer-CTDZ2Qkg.js} +2 -2
  116. package/dist/chunks/{footer-CD3kMRdS.js.map → footer-CTDZ2Qkg.js.map} +1 -1
  117. package/dist/chunks/{footer-m3_dlNl8.esm.js → footer-Db5CEUun.esm.js} +2 -2
  118. package/dist/chunks/{footer-m3_dlNl8.esm.js.map → footer-Db5CEUun.esm.js.map} +1 -1
  119. package/dist/chunks/{form-fields-yE9kwjvb.js → form-fields-BrEECDh1.js} +2 -2
  120. package/dist/chunks/{form-fields-yE9kwjvb.js.map → form-fields-BrEECDh1.js.map} +1 -1
  121. package/dist/chunks/{form-fields-hMMnB_wE.esm.js → form-fields-CpOWIV5e.esm.js} +2 -2
  122. package/dist/chunks/{form-fields-hMMnB_wE.esm.js.map → form-fields-CpOWIV5e.esm.js.map} +1 -1
  123. package/dist/chunks/{form-parser-DbnSn5eY.esm.js → form-parser-BOBQohRY.esm.js} +2 -2
  124. package/dist/chunks/{form-parser-DbnSn5eY.esm.js.map → form-parser-BOBQohRY.esm.js.map} +1 -1
  125. package/dist/chunks/{form-parser-m4fnw38a.js → form-parser-Bo_xCoz5.js} +2 -2
  126. package/dist/chunks/{form-parser-m4fnw38a.js.map → form-parser-Bo_xCoz5.js.map} +1 -1
  127. package/dist/chunks/{form-section-CPIyMdk2.js → form-section-CQkrOcT4.js} +5 -5
  128. package/dist/chunks/{form-section-CPIyMdk2.js.map → form-section-CQkrOcT4.js.map} +1 -1
  129. package/dist/chunks/{form-section-TMjdOVeW.esm.js → form-section-CuA5Rmec.esm.js} +5 -5
  130. package/dist/chunks/{form-section-TMjdOVeW.esm.js.map → form-section-CuA5Rmec.esm.js.map} +1 -1
  131. package/dist/chunks/{fullScreen-BLLa9ogA.js → fullScreen-CKsAPzW8.js} +3 -3
  132. package/dist/chunks/{fullScreen-BLLa9ogA.js.map → fullScreen-CKsAPzW8.js.map} +1 -1
  133. package/dist/chunks/{fullScreen-DFgzE41_.esm.js → fullScreen-Dq0rkDY2.esm.js} +3 -3
  134. package/dist/chunks/{fullScreen-DFgzE41_.esm.js.map → fullScreen-Dq0rkDY2.esm.js.map} +1 -1
  135. package/dist/chunks/{global-search-BOkxXiZ0.esm.js → global-search-CzTd58hv.esm.js} +3 -3
  136. package/dist/chunks/{global-search-BOkxXiZ0.esm.js.map → global-search-CzTd58hv.esm.js.map} +1 -1
  137. package/dist/chunks/{global-search-BjKPmzsQ.js → global-search-mE46QvyY.js} +3 -3
  138. package/dist/chunks/{global-search-BjKPmzsQ.js.map → global-search-mE46QvyY.js.map} +1 -1
  139. package/dist/chunks/{grid-view-Bo86x7YL.esm.js → grid-view-Ccl3P7WG.esm.js} +2 -2
  140. package/dist/chunks/{grid-view-Bo86x7YL.esm.js.map → grid-view-Ccl3P7WG.esm.js.map} +1 -1
  141. package/dist/chunks/{grid-view-B1u_x5yr.js → grid-view-CcmdZI39.js} +2 -2
  142. package/dist/chunks/{grid-view-B1u_x5yr.js.map → grid-view-CcmdZI39.js.map} +1 -1
  143. package/dist/chunks/{header-BHsex2As.js → header-BLQberkS.js} +3 -3
  144. package/dist/chunks/{header-BHsex2As.js.map → header-BLQberkS.js.map} +1 -1
  145. package/dist/chunks/{header-B-HaoeK7.esm.js → header-DJXi29Ed.esm.js} +3 -3
  146. package/dist/chunks/{header-B-HaoeK7.esm.js.map → header-DJXi29Ed.esm.js.map} +1 -1
  147. package/dist/chunks/{header-enhanced-BjfqyQ1a.esm.js → header-enhanced-BXn_RBUl.esm.js} +2 -2
  148. package/dist/chunks/{header-enhanced-BjfqyQ1a.esm.js.map → header-enhanced-BXn_RBUl.esm.js.map} +1 -1
  149. package/dist/chunks/{header-enhanced-gJl4iC4m.js → header-enhanced-GQeFu_BL.js} +2 -2
  150. package/dist/chunks/{header-enhanced-gJl4iC4m.js.map → header-enhanced-GQeFu_BL.js.map} +1 -1
  151. package/dist/chunks/{inline-edit-fields-BYhRpPcH.esm.js → inline-edit-fields-D68s-Ll-.esm.js} +2 -2
  152. package/dist/chunks/{inline-edit-fields-BYhRpPcH.esm.js.map → inline-edit-fields-D68s-Ll-.esm.js.map} +1 -1
  153. package/dist/chunks/{inline-edit-fields-atDP84QL.js → inline-edit-fields-vGyiNTyf.js} +2 -2
  154. package/dist/chunks/{inline-edit-fields-atDP84QL.js.map → inline-edit-fields-vGyiNTyf.js.map} +1 -1
  155. package/dist/chunks/{inventory-reports-title-bar-Bog2i0dr.js → inventory-reports-title-bar-CT7SIGlT.js} +3 -3
  156. package/dist/chunks/{inventory-reports-title-bar-Bog2i0dr.js.map → inventory-reports-title-bar-CT7SIGlT.js.map} +1 -1
  157. package/dist/chunks/{inventory-reports-title-bar-CP8FzW6A.esm.js → inventory-reports-title-bar-Ddh26t2X.esm.js} +3 -3
  158. package/dist/chunks/{inventory-reports-title-bar-CP8FzW6A.esm.js.map → inventory-reports-title-bar-Ddh26t2X.esm.js.map} +1 -1
  159. package/dist/chunks/{item-response-details-DsGQ7Dlc.js → item-response-details-BGtHtJ76.js} +4 -4
  160. package/dist/chunks/{item-response-details-DsGQ7Dlc.js.map → item-response-details-BGtHtJ76.js.map} +1 -1
  161. package/dist/chunks/{item-response-details-SHSD-nBh.esm.js → item-response-details-DSCdVRmu.esm.js} +4 -4
  162. package/dist/chunks/{item-response-details-SHSD-nBh.esm.js.map → item-response-details-DSCdVRmu.esm.js.map} +1 -1
  163. package/dist/chunks/{listing-DIuzQrzb.js → listing-CTIuYwFQ.js} +4 -4
  164. package/dist/chunks/{listing-DIuzQrzb.js.map → listing-CTIuYwFQ.js.map} +1 -1
  165. package/dist/chunks/{listing-C0Yb6MVq.esm.js → listing-Dy2Rksst.esm.js} +4 -4
  166. package/dist/chunks/{listing-C0Yb6MVq.esm.js.map → listing-Dy2Rksst.esm.js.map} +1 -1
  167. package/dist/chunks/{location-select-g5uczAUF.js → location-select-Dij5uwHV.js} +2 -2
  168. package/dist/chunks/{location-select-g5uczAUF.js.map → location-select-Dij5uwHV.js.map} +1 -1
  169. package/dist/chunks/{location-select-CFa00fy4.esm.js → location-select-N7YryMzR.esm.js} +2 -2
  170. package/dist/chunks/{location-select-CFa00fy4.esm.js.map → location-select-N7YryMzR.esm.js.map} +1 -1
  171. package/dist/chunks/{material-editable-table-pAyK7KYf.esm.js → material-editable-table-DH-mHUyW.esm.js} +3 -3
  172. package/dist/chunks/{material-editable-table-pAyK7KYf.esm.js.map → material-editable-table-DH-mHUyW.esm.js.map} +1 -1
  173. package/dist/chunks/{material-editable-table-BGLjrTzT.js → material-editable-table-flZ7dwOO.js} +3 -3
  174. package/dist/chunks/{material-editable-table-BGLjrTzT.js.map → material-editable-table-flZ7dwOO.js.map} +1 -1
  175. package/dist/chunks/{module-reducer-DMxxForv.esm.js → module-reducer-BOqAXAJs.esm.js} +2 -2
  176. package/dist/chunks/{module-reducer-DMxxForv.esm.js.map → module-reducer-BOqAXAJs.esm.js.map} +1 -1
  177. package/dist/chunks/{module-reducer-Ck36ZEmZ.js → module-reducer-khxO3m2l.js} +2 -2
  178. package/dist/chunks/{module-reducer-Ck36ZEmZ.js.map → module-reducer-khxO3m2l.js.map} +1 -1
  179. package/dist/chunks/{notification-menu-D7ASm-K1.js → notification-menu-DhXt9aJ6.js} +2 -2
  180. package/dist/chunks/{notification-menu-D7ASm-K1.js.map → notification-menu-DhXt9aJ6.js.map} +1 -1
  181. package/dist/chunks/{notification-menu-XAadkn-e.esm.js → notification-menu-INKsWdja.esm.js} +2 -2
  182. package/dist/chunks/{notification-menu-XAadkn-e.esm.js.map → notification-menu-INKsWdja.esm.js.map} +1 -1
  183. package/dist/chunks/{page-action-BPzaL2KJ.js → page-action-8XNeWxvS.js} +4 -4
  184. package/dist/chunks/{page-action-BPzaL2KJ.js.map → page-action-8XNeWxvS.js.map} +1 -1
  185. package/dist/chunks/{page-action-C07iGjvN.esm.js → page-action-BhSpPGBy.esm.js} +4 -4
  186. package/dist/chunks/{page-action-C07iGjvN.esm.js.map → page-action-BhSpPGBy.esm.js.map} +1 -1
  187. package/dist/chunks/{page-navigator-Cgbh3tTG.js → page-navigator-DSmNN1Eb.js} +2 -2
  188. package/dist/chunks/{page-navigator-Cgbh3tTG.js.map → page-navigator-DSmNN1Eb.js.map} +1 -1
  189. package/dist/chunks/{page-navigator-8gZpp9_P.esm.js → page-navigator-DjG5btI1.esm.js} +2 -2
  190. package/dist/chunks/{page-navigator-8gZpp9_P.esm.js.map → page-navigator-DjG5btI1.esm.js.map} +1 -1
  191. package/dist/chunks/{page-view-DJ6HS_dV.js → page-view-Dbf_t78X.js} +3 -3
  192. package/dist/chunks/{page-view-DJ6HS_dV.js.map → page-view-Dbf_t78X.js.map} +1 -1
  193. package/dist/chunks/{page-view-CokUNMBn.esm.js → page-view-DknSUnFR.esm.js} +3 -3
  194. package/dist/chunks/{page-view-CokUNMBn.esm.js.map → page-view-DknSUnFR.esm.js.map} +1 -1
  195. package/dist/chunks/{quick-approval-modal-BwYjIbO5.js → quick-approval-modal-BQcjEC5r.js} +2 -2
  196. package/dist/chunks/{quick-approval-modal-BwYjIbO5.js.map → quick-approval-modal-BQcjEC5r.js.map} +1 -1
  197. package/dist/chunks/{quick-approval-modal-CPWs8htH.esm.js → quick-approval-modal-DcZGFHAN.esm.js} +2 -2
  198. package/dist/chunks/{quick-approval-modal-CPWs8htH.esm.js.map → quick-approval-modal-DcZGFHAN.esm.js.map} +1 -1
  199. package/dist/chunks/{reducer-IsgN83rP.esm.js → reducer-C3tNAbZa.esm.js} +2 -2
  200. package/dist/chunks/{reducer-IsgN83rP.esm.js.map → reducer-C3tNAbZa.esm.js.map} +1 -1
  201. package/dist/chunks/{reducer-CdJ6znKF.esm.js → reducer-CACnVYCu.esm.js} +2 -2
  202. package/dist/chunks/{reducer-CdJ6znKF.esm.js.map → reducer-CACnVYCu.esm.js.map} +1 -1
  203. package/dist/chunks/{reducer-Qab0amzE.js → reducer-Ca4A9Z08.js} +3 -3
  204. package/dist/chunks/{reducer-Qab0amzE.js.map → reducer-Ca4A9Z08.js.map} +1 -1
  205. package/dist/chunks/{reducer-BRD8W9sK.js → reducer-CqXx-nCW.js} +2 -2
  206. package/dist/chunks/{reducer-BRD8W9sK.js.map → reducer-CqXx-nCW.js.map} +1 -1
  207. package/dist/chunks/{reducer-3tSO6RW6.esm.js → reducer-D5uYbcnW.esm.js} +3 -3
  208. package/dist/chunks/{reducer-3tSO6RW6.esm.js.map → reducer-D5uYbcnW.esm.js.map} +1 -1
  209. package/dist/chunks/{reducer-CpOEECi1.js → reducer-D9YsCrPV.js} +2 -2
  210. package/dist/chunks/{reducer-CpOEECi1.js.map → reducer-D9YsCrPV.js.map} +1 -1
  211. package/dist/chunks/{reducer-sgaK2vfW.esm.js → reducer-DgqigQMj.esm.js} +2 -2
  212. package/dist/chunks/{reducer-sgaK2vfW.esm.js.map → reducer-DgqigQMj.esm.js.map} +1 -1
  213. package/dist/chunks/{reducer-CPisqqqN.js → reducer-LZj3gYJv.js} +2 -2
  214. package/dist/chunks/{reducer-CPisqqqN.js.map → reducer-LZj3gYJv.js.map} +1 -1
  215. package/dist/chunks/{reducer-yyZtsg1A.esm.js → reducer-TleDUmAC.esm.js} +2 -2
  216. package/dist/chunks/{reducer-yyZtsg1A.esm.js.map → reducer-TleDUmAC.esm.js.map} +1 -1
  217. package/dist/chunks/{reducer-Bmr6fvcs.js → reducer-zvGfUKoI.js} +2 -2
  218. package/dist/chunks/{reducer-Bmr6fvcs.js.map → reducer-zvGfUKoI.js.map} +1 -1
  219. package/dist/chunks/{reports-title-bar-Kz6JjqsY.js → reports-title-bar-D-1LT4fp.js} +4 -4
  220. package/dist/chunks/{reports-title-bar-Kz6JjqsY.js.map → reports-title-bar-D-1LT4fp.js.map} +1 -1
  221. package/dist/chunks/{reports-title-bar-Cay4E8SQ.esm.js → reports-title-bar-QUF0UaA5.esm.js} +4 -4
  222. package/dist/chunks/{reports-title-bar-Cay4E8SQ.esm.js.map → reports-title-bar-QUF0UaA5.esm.js.map} +1 -1
  223. package/dist/chunks/{routes-CfqLAYgR.js → routes--Iz18uA1.js} +3 -3
  224. package/dist/chunks/{routes-CfqLAYgR.js.map → routes--Iz18uA1.js.map} +1 -1
  225. package/dist/chunks/{routes-CAc76Zan.esm.js → routes-JUv69qeO.esm.js} +3 -3
  226. package/dist/chunks/{routes-CAc76Zan.esm.js.map → routes-JUv69qeO.esm.js.map} +1 -1
  227. package/dist/chunks/{schedule-report-B4ZfEuiU.js → schedule-report-Br9G5M-o.js} +6 -6
  228. package/dist/chunks/{schedule-report-B4ZfEuiU.js.map → schedule-report-Br9G5M-o.js.map} +1 -1
  229. package/dist/chunks/{schedule-report-CLXjjfjc.esm.js → schedule-report-Ce2EEmZX.esm.js} +6 -6
  230. package/dist/chunks/{schedule-report-CLXjjfjc.esm.js.map → schedule-report-Ce2EEmZX.esm.js.map} +1 -1
  231. package/dist/chunks/{schedule-report-modal-CB3G9H7x.esm.js → schedule-report-modal-C5CAD-AQ.esm.js} +3 -3
  232. package/dist/chunks/{schedule-report-modal-CB3G9H7x.esm.js.map → schedule-report-modal-C5CAD-AQ.esm.js.map} +1 -1
  233. package/dist/chunks/{schedule-report-modal-iwoDI-sg.js → schedule-report-modal-CraO2R9I.js} +3 -3
  234. package/dist/chunks/{schedule-report-modal-iwoDI-sg.js.map → schedule-report-modal-CraO2R9I.js.map} +1 -1
  235. package/dist/chunks/{searchable-select-_DCkITfk.js → searchable-select-BdR8A-uG.js} +6 -6
  236. package/dist/chunks/{searchable-select-_DCkITfk.js.map → searchable-select-BdR8A-uG.js.map} +1 -1
  237. package/dist/chunks/{searchable-select-0F6E4XAr.esm.js → searchable-select-DSxOplyJ.esm.js} +6 -6
  238. package/dist/chunks/{searchable-select-0F6E4XAr.esm.js.map → searchable-select-DSxOplyJ.esm.js.map} +1 -1
  239. package/dist/chunks/{share-modal-BaEyZs2h.esm.js → share-modal-0Xrxwpxh.esm.js} +3 -3
  240. package/dist/chunks/{share-modal-BaEyZs2h.esm.js.map → share-modal-0Xrxwpxh.esm.js.map} +1 -1
  241. package/dist/chunks/{share-modal-DrXvh-fV.js → share-modal-CP_CC8wR.js} +3 -3
  242. package/dist/chunks/{share-modal-DrXvh-fV.js.map → share-modal-CP_CC8wR.js.map} +1 -1
  243. package/dist/chunks/{share-modal-enhanced-DnEdDBmu.esm.js → share-modal-enhanced-BFmwba0h.esm.js} +2 -2
  244. package/dist/chunks/{share-modal-enhanced-DnEdDBmu.esm.js.map → share-modal-enhanced-BFmwba0h.esm.js.map} +1 -1
  245. package/dist/chunks/{share-modal-enhanced-BTr0zRhF.js → share-modal-enhanced-BajRayrK.js} +2 -2
  246. package/dist/chunks/{share-modal-enhanced-BTr0zRhF.js.map → share-modal-enhanced-BajRayrK.js.map} +1 -1
  247. package/dist/chunks/{sidebarScreen-DpYj_wlK.js → sidebarScreen-CaNfS0JJ.js} +5 -5
  248. package/dist/chunks/{sidebarScreen-DpYj_wlK.js.map → sidebarScreen-CaNfS0JJ.js.map} +1 -1
  249. package/dist/chunks/{sidebarScreen-DiOAiXeU.esm.js → sidebarScreen-CmnTAXY7.esm.js} +5 -5
  250. package/dist/chunks/{sidebarScreen-DiOAiXeU.esm.js.map → sidebarScreen-CmnTAXY7.esm.js.map} +1 -1
  251. package/dist/chunks/{store-BSJc1kCM.js → store-CqIuLzOS.js} +6 -6
  252. package/dist/chunks/{store-BSJc1kCM.js.map → store-CqIuLzOS.js.map} +1 -1
  253. package/dist/chunks/{store-BL5VFPie.esm.js → store-DH8pCqim.esm.js} +6 -6
  254. package/dist/chunks/{store-BL5VFPie.esm.js.map → store-DH8pCqim.esm.js.map} +1 -1
  255. package/dist/chunks/{table-gxAlAeTq.esm.js → table-ClKu8f94.esm.js} +3 -3
  256. package/dist/chunks/{table-gxAlAeTq.esm.js.map → table-ClKu8f94.esm.js.map} +1 -1
  257. package/dist/chunks/{table-DWx7x8zw.js → table-DgWNw_5R.js} +3 -3
  258. package/dist/chunks/{table-DWx7x8zw.js.map → table-DgWNw_5R.js.map} +1 -1
  259. package/dist/chunks/{table-form-DsTwCUcs.esm.js → table-form-BonoJoe4.esm.js} +2 -2
  260. package/dist/chunks/{table-form-DsTwCUcs.esm.js.map → table-form-BonoJoe4.esm.js.map} +1 -1
  261. package/dist/chunks/{table-form-DQ-pp0A_.js → table-form-DlMHRtLK.js} +2 -2
  262. package/dist/chunks/{table-form-DQ-pp0A_.js.map → table-form-DlMHRtLK.js.map} +1 -1
  263. package/dist/chunks/{template-editor-router-D4NIwVws.js → template-editor-router-BsD0ydNM.js} +2 -2
  264. package/dist/chunks/{template-editor-router-D4NIwVws.js.map → template-editor-router-BsD0ydNM.js.map} +1 -1
  265. package/dist/chunks/{template-editor-router-BXLUTvsk.esm.js → template-editor-router-DoOt_Usq.esm.js} +2 -2
  266. package/dist/chunks/{template-editor-router-BXLUTvsk.esm.js.map → template-editor-router-DoOt_Usq.esm.js.map} +1 -1
  267. package/dist/chunks/{template-modal-X-iSmlki.js → template-modal-BXZblB-i.js} +2 -2
  268. package/dist/chunks/{template-modal-X-iSmlki.js.map → template-modal-BXZblB-i.js.map} +1 -1
  269. package/dist/chunks/{template-modal-B2VgotrF.esm.js → template-modal-Cyj0AUks.esm.js} +2 -2
  270. package/dist/chunks/{template-modal-B2VgotrF.esm.js.map → template-modal-Cyj0AUks.esm.js.map} +1 -1
  271. package/dist/chunks/{templates-CCy1eG6A.esm.js → templates-BK_pcPtR.esm.js} +7 -7
  272. package/dist/chunks/{templates-CCy1eG6A.esm.js.map → templates-BK_pcPtR.esm.js.map} +1 -1
  273. package/dist/chunks/{templates-CUREMwYo.js → templates-C5whh_WJ.js} +7 -7
  274. package/dist/chunks/{templates-CUREMwYo.js.map → templates-C5whh_WJ.js.map} +1 -1
  275. package/dist/chunks/{text-measurement-BRaY2UMX.js → text-measurement-C5RUDcy3.js} +2 -2
  276. package/dist/chunks/{text-measurement-BRaY2UMX.js.map → text-measurement-C5RUDcy3.js.map} +1 -1
  277. package/dist/chunks/{text-measurement-BCjauPbB.esm.js → text-measurement-DvKHzZhR.esm.js} +2 -2
  278. package/dist/chunks/{text-measurement-BCjauPbB.esm.js.map → text-measurement-DvKHzZhR.esm.js.map} +1 -1
  279. package/dist/chunks/{translations-BrwQcVN3.esm.js → translations-BLrQX9my.esm.js} +2 -2
  280. package/dist/chunks/{translations-BrwQcVN3.esm.js.map → translations-BLrQX9my.esm.js.map} +1 -1
  281. package/dist/chunks/{translations-DoVrWLog.js → translations-CaEkNqOX.js} +2 -2
  282. package/dist/chunks/{translations-DoVrWLog.js.map → translations-CaEkNqOX.js.map} +1 -1
  283. package/dist/chunks/{uom-field-wrapper-CTbEc-MB.esm.js → uom-field-wrapper-By-UFGEf.esm.js} +2 -2
  284. package/dist/chunks/{uom-field-wrapper-CTbEc-MB.esm.js.map → uom-field-wrapper-By-UFGEf.esm.js.map} +1 -1
  285. package/dist/chunks/{uom-field-wrapper-DXZgzOYB.js → uom-field-wrapper-CPbf2ESo.js} +2 -2
  286. package/dist/chunks/{uom-field-wrapper-DXZgzOYB.js.map → uom-field-wrapper-CPbf2ESo.js.map} +1 -1
  287. package/dist/chunks/{upload-excel-BZPP13tP.esm.js → upload-excel-Bv2QulNF.esm.js} +2 -2
  288. package/dist/chunks/{upload-excel-BZPP13tP.esm.js.map → upload-excel-Bv2QulNF.esm.js.map} +1 -1
  289. package/dist/chunks/{upload-excel-rzyINtLp.js → upload-excel-Dki_3fi7.js} +2 -2
  290. package/dist/chunks/{upload-excel-rzyINtLp.js.map → upload-excel-Dki_3fi7.js.map} +1 -1
  291. package/dist/chunks/{use-translations-5wUQBxMm.js → use-translations-CiaeAhQ7.js} +2 -2
  292. package/dist/chunks/{use-translations-5wUQBxMm.js.map → use-translations-CiaeAhQ7.js.map} +1 -1
  293. package/dist/chunks/{use-translations-CcjSFA3F.esm.js → use-translations-Cplg_xvQ.esm.js} +2 -2
  294. package/dist/chunks/{use-translations-CcjSFA3F.esm.js.map → use-translations-Cplg_xvQ.esm.js.map} +1 -1
  295. package/dist/chunks/{useAccountSetting-vAqgEiJB.esm.js → useAccountSetting-D2zH-h5F.esm.js} +3 -3
  296. package/dist/chunks/{useAccountSetting-vAqgEiJB.esm.js.map → useAccountSetting-D2zH-h5F.esm.js.map} +1 -1
  297. package/dist/chunks/{useAccountSetting-9XBALMnW.js → useAccountSetting-Dvyv7WUv.js} +3 -3
  298. package/dist/chunks/{useAccountSetting-9XBALMnW.js.map → useAccountSetting-Dvyv7WUv.js.map} +1 -1
  299. package/dist/chunks/{useCheckSkuAndName-CqSLFlhD.js → useCheckSkuAndName-3SCc5HGN.js} +2 -2
  300. package/dist/chunks/{useCheckSkuAndName-CqSLFlhD.js.map → useCheckSkuAndName-3SCc5HGN.js.map} +1 -1
  301. package/dist/chunks/{useCheckSkuAndName-Dl24wQO-.esm.js → useCheckSkuAndName-BuHzZ_fJ.esm.js} +2 -2
  302. package/dist/chunks/{useCheckSkuAndName-Dl24wQO-.esm.js.map → useCheckSkuAndName-BuHzZ_fJ.esm.js.map} +1 -1
  303. package/dist/chunks/{useReduxIntegration-DZBfKF7d.esm.js → useReduxIntegration-B0bZ0VOc.esm.js} +2 -2
  304. package/dist/chunks/{useReduxIntegration-DZBfKF7d.esm.js.map → useReduxIntegration-B0bZ0VOc.esm.js.map} +1 -1
  305. package/dist/chunks/{useReduxIntegration-Ct1UN9fB.js → useReduxIntegration-GG8n-C3E.js} +2 -2
  306. package/dist/chunks/{useReduxIntegration-Ct1UN9fB.js.map → useReduxIntegration-GG8n-C3E.js.map} +1 -1
  307. package/dist/chunks/{useUniquenessCheck-bYjnp_0P.esm.js → useUniquenessCheck-B_KNcS14.esm.js} +2 -2
  308. package/dist/chunks/{useUniquenessCheck-bYjnp_0P.esm.js.map → useUniquenessCheck-B_KNcS14.esm.js.map} +1 -1
  309. package/dist/chunks/{useUniquenessCheck-By5zlovX.js → useUniquenessCheck-SyibUppM.js} +2 -2
  310. package/dist/chunks/{useUniquenessCheck-By5zlovX.js.map → useUniquenessCheck-SyibUppM.js.map} +1 -1
  311. package/dist/chunks/{useVendorAICompare-BAkWpJbe.js → useVendorAICompare-Br8Zaj9n.js} +3 -3
  312. package/dist/chunks/{useVendorAICompare-BAkWpJbe.js.map → useVendorAICompare-Br8Zaj9n.js.map} +1 -1
  313. package/dist/chunks/{useVendorAICompare-DZRFDk4i.esm.js → useVendorAICompare-MAhIaPcK.esm.js} +3 -3
  314. package/dist/chunks/{useVendorAICompare-DZRFDk4i.esm.js.map → useVendorAICompare-MAhIaPcK.esm.js.map} +1 -1
  315. package/dist/chunks/{value-editor-BSS9Ns2T.js → value-editor-CjBbeBcy.js} +3 -3
  316. package/dist/chunks/{value-editor-BSS9Ns2T.js.map → value-editor-CjBbeBcy.js.map} +1 -1
  317. package/dist/chunks/{value-editor-DQ1qgZ2u.esm.js → value-editor-Du1_lUxK.esm.js} +3 -3
  318. package/dist/chunks/{value-editor-DQ1qgZ2u.esm.js.map → value-editor-Du1_lUxK.esm.js.map} +1 -1
  319. package/dist/chunks/{vendor-ai-summary-DWmAaQ_N.js → vendor-ai-summary-ChCg_E_J.js} +2 -2
  320. package/dist/chunks/{vendor-ai-summary-DWmAaQ_N.js.map → vendor-ai-summary-ChCg_E_J.js.map} +1 -1
  321. package/dist/chunks/{vendor-ai-summary-BA6m2dH9.esm.js → vendor-ai-summary-DICDiSMd.esm.js} +2 -2
  322. package/dist/chunks/{vendor-ai-summary-BA6m2dH9.esm.js.map → vendor-ai-summary-DICDiSMd.esm.js.map} +1 -1
  323. package/dist/components/action-bar/action-bar/index.esm.js +1 -1
  324. package/dist/components/action-bar/action-bar/index.js +1 -1
  325. package/dist/components/action-bar/index.esm.js +1 -1
  326. package/dist/components/action-bar/index.js +1 -1
  327. package/dist/components/address-modal/index.esm.js +1 -1
  328. package/dist/components/address-modal/index.js +1 -1
  329. package/dist/components/ai-summary/ai-summary/index.esm.js +1 -1
  330. package/dist/components/ai-summary/ai-summary/index.js +1 -1
  331. package/dist/components/ai-summary/index.esm.js +1 -1
  332. package/dist/components/ai-summary/index.js +1 -1
  333. package/dist/components/appbar/appbar/index.esm.js +1 -1
  334. package/dist/components/appbar/appbar/index.js +1 -1
  335. package/dist/components/appbar/index.esm.js +1 -1
  336. package/dist/components/appbar/index.js +1 -1
  337. package/dist/components/approval-wrapper/approval-wrapper/index.esm.js +1 -1
  338. package/dist/components/approval-wrapper/approval-wrapper/index.js +1 -1
  339. package/dist/components/approval-wrapper/index.esm.js +1 -1
  340. package/dist/components/approval-wrapper/index.js +1 -1
  341. package/dist/components/chat-bot/index.esm.js +1 -1
  342. package/dist/components/chat-bot/index.js +1 -1
  343. package/dist/components/custom-forms/FORMS/index.esm.js +1 -1
  344. package/dist/components/custom-forms/FORMS/index.js +1 -1
  345. package/dist/components/custom-forms/grid-view/grid-view/index.esm.js +1 -1
  346. package/dist/components/custom-forms/grid-view/grid-view/index.js +1 -1
  347. package/dist/components/custom-forms/grid-view/index.esm.js +1 -1
  348. package/dist/components/custom-forms/grid-view/index.js +1 -1
  349. package/dist/components/custom-forms/index.esm.js +2 -2
  350. package/dist/components/custom-forms/index.js +2 -2
  351. package/dist/components/department-add-modal/index.esm.js +1 -1
  352. package/dist/components/department-add-modal/index.js +1 -1
  353. package/dist/components/designation-add-modal/index.esm.js +1 -1
  354. package/dist/components/designation-add-modal/index.js +1 -1
  355. package/dist/components/editor/custom-editor/index.esm.js +1 -1
  356. package/dist/components/editor/custom-editor/index.js +1 -1
  357. package/dist/components/editor/index.esm.js +1 -1
  358. package/dist/components/editor/index.js +1 -1
  359. package/dist/components/examples/FlexibleReduxExample/index.esm.js +1 -1
  360. package/dist/components/examples/FlexibleReduxExample/index.js +1 -1
  361. package/dist/components/examples/index.esm.js +1 -1
  362. package/dist/components/examples/index.js +1 -1
  363. package/dist/components/filter/components/index.esm.js +1 -1
  364. package/dist/components/filter/components/index.js +1 -1
  365. package/dist/components/filter/components/value-editor/index.esm.js +1 -1
  366. package/dist/components/filter/components/value-editor/index.js +1 -1
  367. package/dist/components/filter/filter/index.esm.js +1 -1
  368. package/dist/components/filter/filter/index.js +1 -1
  369. package/dist/components/filter/index.esm.js +2 -2
  370. package/dist/components/filter/index.js +2 -2
  371. package/dist/components/footer/footer/index.esm.js +1 -1
  372. package/dist/components/footer/footer/index.js +1 -1
  373. package/dist/components/footer/index.esm.js +1 -1
  374. package/dist/components/footer/index.js +1 -1
  375. package/dist/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/index.esm.js +1 -1
  376. package/dist/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/index.js +1 -1
  377. package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.esm.js +1 -1
  378. package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.js +1 -1
  379. package/dist/components/form-control/form-builder/form-builder-element/dynamic-text-editor/index.esm.js +1 -1
  380. package/dist/components/form-control/form-builder/form-builder-element/dynamic-text-editor/index.js +1 -1
  381. package/dist/components/form-control/form-builder/form-builder-element/fixed-asset-item-add-modal/index.esm.js +1 -1
  382. package/dist/components/form-control/form-builder/form-builder-element/fixed-asset-item-add-modal/index.js +1 -1
  383. package/dist/components/form-control/form-builder/form-builder-element/index.esm.js +4 -4
  384. package/dist/components/form-control/form-builder/form-builder-element/index.js +4 -4
  385. package/dist/components/form-control/form-builder/form-builder-element/location-add-modal/index.esm.js +1 -1
  386. package/dist/components/form-control/form-builder/form-builder-element/location-add-modal/index.js +1 -1
  387. package/dist/components/form-control/form-builder/form-builder-element/select-configuration/index.esm.js +1 -1
  388. package/dist/components/form-control/form-builder/form-builder-element/select-configuration/index.js +1 -1
  389. package/dist/components/form-control/form-builder/form-builder-element/table/index.esm.js +1 -1
  390. package/dist/components/form-control/form-builder/form-builder-element/table/index.js +1 -1
  391. package/dist/components/form-control/form-builder/index.esm.js +4 -4
  392. package/dist/components/form-control/form-builder/index.js +4 -4
  393. package/dist/components/form-control/form-parser/form-parser/index.esm.js +1 -1
  394. package/dist/components/form-control/form-parser/form-parser/index.js +1 -1
  395. package/dist/components/form-control/form-parser/form-section/index.esm.js +1 -1
  396. package/dist/components/form-control/form-parser/form-section/index.js +1 -1
  397. package/dist/components/form-control/form-parser/index.esm.js +2 -2
  398. package/dist/components/form-control/form-parser/index.js +2 -2
  399. package/dist/components/form-control/index.esm.js +6 -6
  400. package/dist/components/form-control/index.js +6 -6
  401. package/dist/components/header/components/global-search/index.esm.js +1 -1
  402. package/dist/components/header/components/global-search/index.js +1 -1
  403. package/dist/components/header/components/index.esm.js +1 -1
  404. package/dist/components/header/components/index.js +1 -1
  405. package/dist/components/header/components/notification-menu/index.esm.js +1 -1
  406. package/dist/components/header/components/notification-menu/index.js +1 -1
  407. package/dist/components/header/components/notification-menu/notification-menu/index.esm.js +1 -1
  408. package/dist/components/header/components/notification-menu/notification-menu/index.js +1 -1
  409. package/dist/components/header/header/index.esm.js +1 -1
  410. package/dist/components/header/header/index.js +1 -1
  411. package/dist/components/header/header-enhanced/index.esm.js +1 -1
  412. package/dist/components/header/header-enhanced/index.js +1 -1
  413. package/dist/components/header/index.esm.js +5 -5
  414. package/dist/components/header/index.js +5 -5
  415. package/dist/components/header/redux/actionCreator/index.esm.js +1 -1
  416. package/dist/components/header/redux/actionCreator/index.js +1 -1
  417. package/dist/components/header/redux/index.esm.js +2 -2
  418. package/dist/components/header/redux/index.js +2 -2
  419. package/dist/components/header/redux/reducer/index.esm.js +1 -1
  420. package/dist/components/header/redux/reducer/index.js +1 -1
  421. package/dist/components/index.esm.js +36 -36
  422. package/dist/components/index.js +36 -36
  423. package/dist/components/inventory-reports-title-bar/index.esm.js +3 -3
  424. package/dist/components/inventory-reports-title-bar/index.js +3 -3
  425. package/dist/components/inventory-reports-title-bar/inventory-reports-title-bar/index.esm.js +1 -1
  426. package/dist/components/inventory-reports-title-bar/inventory-reports-title-bar/index.js +1 -1
  427. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js +1 -1
  428. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js +1 -1
  429. package/dist/components/inventory-reports-title-bar/redux/index.esm.js +2 -2
  430. package/dist/components/inventory-reports-title-bar/redux/index.js +2 -2
  431. package/dist/components/inventory-reports-title-bar/redux/reducer/index.esm.js +1 -1
  432. package/dist/components/inventory-reports-title-bar/redux/reducer/index.js +1 -1
  433. package/dist/components/listing/index.esm.js +1 -1
  434. package/dist/components/listing/index.js +1 -1
  435. package/dist/components/listing/listing/index.esm.js +1 -1
  436. package/dist/components/listing/listing/index.js +1 -1
  437. package/dist/components/location-select/index.esm.js +1 -1
  438. package/dist/components/location-select/index.js +1 -1
  439. package/dist/components/material-editable-table/components/index.esm.js +1 -1
  440. package/dist/components/material-editable-table/components/index.js +1 -1
  441. package/dist/components/material-editable-table/components/inline-edit-fields/index.esm.js +1 -1
  442. package/dist/components/material-editable-table/components/inline-edit-fields/index.js +1 -1
  443. package/dist/components/material-editable-table/index.esm.js +2 -2
  444. package/dist/components/material-editable-table/index.js +2 -2
  445. package/dist/components/material-editable-table/material-editable-table/index.esm.js +1 -1
  446. package/dist/components/material-editable-table/material-editable-table/index.js +1 -1
  447. package/dist/components/material-table/components/index.esm.js +1 -1
  448. package/dist/components/material-table/components/index.js +1 -1
  449. package/dist/components/material-table/components/inline-edit-fields/index.esm.js +1 -1
  450. package/dist/components/material-table/components/inline-edit-fields/index.js +1 -1
  451. package/dist/components/material-table/index.esm.js +1 -1
  452. package/dist/components/material-table/index.js +1 -1
  453. package/dist/components/material-table/material-table/index.esm.js +1 -1
  454. package/dist/components/material-table/material-table/index.js +1 -1
  455. package/dist/components/page-navigator/components/index.esm.js +1 -1
  456. package/dist/components/page-navigator/components/index.js +1 -1
  457. package/dist/components/page-navigator/components/page-action/index.esm.js +1 -1
  458. package/dist/components/page-navigator/components/page-action/index.js +1 -1
  459. package/dist/components/page-navigator/index.esm.js +2 -2
  460. package/dist/components/page-navigator/index.js +2 -2
  461. package/dist/components/page-navigator/page-navigator/index.esm.js +1 -1
  462. package/dist/components/page-navigator/page-navigator/index.js +1 -1
  463. package/dist/components/parties-modal/index.esm.js +1 -1
  464. package/dist/components/parties-modal/index.js +1 -1
  465. package/dist/components/parties-modal/parties-modal/index.esm.js +1 -1
  466. package/dist/components/parties-modal/parties-modal/index.js +1 -1
  467. package/dist/components/providers/ERPUIProvider/index.esm.js +1 -1
  468. package/dist/components/providers/ERPUIProvider/index.js +1 -1
  469. package/dist/components/providers/index.esm.js +1 -1
  470. package/dist/components/providers/index.js +1 -1
  471. package/dist/components/quick-approval-modal/index.esm.js +1 -1
  472. package/dist/components/quick-approval-modal/index.js +1 -1
  473. package/dist/components/quick-approval-modal/quick-approval-modal/index.esm.js +1 -1
  474. package/dist/components/quick-approval-modal/quick-approval-modal/index.js +1 -1
  475. package/dist/components/reports/dynamic-report/dynamic-report/index.esm.js +1 -1
  476. package/dist/components/reports/dynamic-report/dynamic-report/index.js +1 -1
  477. package/dist/components/reports/dynamic-report/dynamic-rows/index.esm.js +1 -1
  478. package/dist/components/reports/dynamic-report/dynamic-rows/index.js +1 -1
  479. package/dist/components/reports/dynamic-report/index.esm.js +2 -2
  480. package/dist/components/reports/dynamic-report/index.js +2 -2
  481. package/dist/components/reports/index.esm.js +2 -2
  482. package/dist/components/reports/index.js +2 -2
  483. package/dist/components/reports-title-bar/index.esm.js +3 -3
  484. package/dist/components/reports-title-bar/index.js +3 -3
  485. package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js +1 -1
  486. package/dist/components/reports-title-bar/redux/actionCreator/index.js +1 -1
  487. package/dist/components/reports-title-bar/redux/index.esm.js +2 -2
  488. package/dist/components/reports-title-bar/redux/index.js +2 -2
  489. package/dist/components/reports-title-bar/redux/reducer/index.esm.js +1 -1
  490. package/dist/components/reports-title-bar/redux/reducer/index.js +1 -1
  491. package/dist/components/reports-title-bar/reports-title-bar/index.esm.js +1 -1
  492. package/dist/components/reports-title-bar/reports-title-bar/index.js +1 -1
  493. package/dist/components/rfq-response/index.esm.js +1 -1
  494. package/dist/components/rfq-response/index.js +1 -1
  495. package/dist/components/rfq-response/item-response-details/index.esm.js +1 -1
  496. package/dist/components/rfq-response/item-response-details/index.js +1 -1
  497. package/dist/components/schedule-report/index.esm.js +2 -2
  498. package/dist/components/schedule-report/index.js +2 -2
  499. package/dist/components/schedule-report/schedule-report/index.esm.js +1 -1
  500. package/dist/components/schedule-report/schedule-report/index.js +1 -1
  501. package/dist/components/schedule-report/schedule-report-modal/index.esm.js +1 -1
  502. package/dist/components/schedule-report/schedule-report-modal/index.js +1 -1
  503. package/dist/components/searchable-select/index.esm.js +1 -1
  504. package/dist/components/searchable-select/index.js +1 -1
  505. package/dist/components/share-modal/index.esm.js +4 -4
  506. package/dist/components/share-modal/index.js +4 -4
  507. package/dist/components/share-modal/redux/actionCreator/index.esm.js +1 -1
  508. package/dist/components/share-modal/redux/actionCreator/index.js +1 -1
  509. package/dist/components/share-modal/redux/index.esm.js +2 -2
  510. package/dist/components/share-modal/redux/index.js +2 -2
  511. package/dist/components/share-modal/redux/reducer/index.esm.js +1 -1
  512. package/dist/components/share-modal/redux/reducer/index.js +1 -1
  513. package/dist/components/share-modal/share-modal/index.esm.js +1 -1
  514. package/dist/components/share-modal/share-modal/index.js +1 -1
  515. package/dist/components/share-modal/share-modal-enhanced/index.esm.js +1 -1
  516. package/dist/components/share-modal/share-modal-enhanced/index.js +1 -1
  517. package/dist/components/team-add-modal/index.esm.js +1 -1
  518. package/dist/components/team-add-modal/index.js +1 -1
  519. package/dist/components/uom-field-wrapper/index.esm.js +1 -1
  520. package/dist/components/uom-field-wrapper/index.js +1 -1
  521. package/dist/components/uom-field-wrapper/uom-field-wrapper/index.esm.js +1 -1
  522. package/dist/components/uom-field-wrapper/uom-field-wrapper/index.js +1 -1
  523. package/dist/components/upload-excel/index.esm.js +1 -1
  524. package/dist/components/upload-excel/index.js +1 -1
  525. package/dist/components/upload-excel/upload-excel/index.esm.js +1 -1
  526. package/dist/components/upload-excel/upload-excel/index.js +1 -1
  527. package/dist/components/vendor-ai-summary/index.esm.js +1 -1
  528. package/dist/components/vendor-ai-summary/index.js +1 -1
  529. package/dist/hooks/index.esm.js +6 -6
  530. package/dist/hooks/index.js +6 -6
  531. package/dist/hooks/use-translations/index.esm.js +1 -1
  532. package/dist/hooks/use-translations/index.js +1 -1
  533. package/dist/hooks/useAccountSetting/index.esm.js +1 -1
  534. package/dist/hooks/useAccountSetting/index.js +1 -1
  535. package/dist/hooks/useCheckSkuAndName/index.esm.js +1 -1
  536. package/dist/hooks/useCheckSkuAndName/index.js +1 -1
  537. package/dist/hooks/useReduxIntegration/index.esm.js +1 -1
  538. package/dist/hooks/useReduxIntegration/index.js +1 -1
  539. package/dist/hooks/useUniquenessCheck/index.esm.js +1 -1
  540. package/dist/hooks/useUniquenessCheck/index.js +1 -1
  541. package/dist/index.esm.js +64 -64
  542. package/dist/index.js +64 -64
  543. package/dist/layout/fullScreen/index.esm.js +1 -1
  544. package/dist/layout/fullScreen/index.js +1 -1
  545. package/dist/layout/index.esm.js +2 -2
  546. package/dist/layout/index.js +2 -2
  547. package/dist/layout/sidebarScreen/index.esm.js +1 -1
  548. package/dist/layout/sidebarScreen/index.js +1 -1
  549. package/dist/redux/index.esm.js +3 -3
  550. package/dist/redux/index.js +3 -3
  551. package/dist/runtime/index.esm.js +1 -1
  552. package/dist/runtime/index.js +1 -1
  553. package/dist/src/api-client/api.ai-feature/api.d.ts +15 -0
  554. package/dist/src/components/chat-bot/types.d.ts +1 -1
  555. package/dist/utils/api/index.esm.js +1 -1
  556. package/dist/utils/api/index.js +1 -1
  557. package/dist/utils/common/index.esm.js +1 -1
  558. package/dist/utils/common/index.js +1 -1
  559. package/dist/utils/common-utility/index.esm.js +1 -1
  560. package/dist/utils/common-utility/index.js +1 -1
  561. package/dist/utils/index.esm.js +5 -5
  562. package/dist/utils/index.js +4 -4
  563. package/dist/utils/text-measurement/index.esm.js +1 -1
  564. package/dist/utils/text-measurement/index.js +1 -1
  565. package/dist/views/afterAuth/dashboard/index.esm.js +1 -1
  566. package/dist/views/afterAuth/dashboard/index.js +1 -1
  567. package/dist/views/afterAuth/index.esm.js +2 -2
  568. package/dist/views/afterAuth/index.js +2 -2
  569. package/dist/views/afterAuth/page-view/index.esm.js +1 -1
  570. package/dist/views/afterAuth/page-view/index.js +1 -1
  571. package/dist/views/form-builder/custom-form/index.esm.js +1 -1
  572. package/dist/views/form-builder/custom-form/index.js +1 -1
  573. package/dist/views/form-builder/element-edit-forms/index.esm.js +1 -1
  574. package/dist/views/form-builder/element-edit-forms/index.js +1 -1
  575. package/dist/views/form-builder/form-fields/index.esm.js +1 -1
  576. package/dist/views/form-builder/form-fields/index.js +1 -1
  577. package/dist/views/form-builder/index.esm.js +4 -4
  578. package/dist/views/form-builder/index.js +4 -4
  579. package/dist/views/form-builder/redux/index.esm.js +1 -1
  580. package/dist/views/form-builder/redux/index.js +1 -1
  581. package/dist/views/index.esm.js +13 -13
  582. package/dist/views/index.js +13 -13
  583. package/dist/views/template-editor/add-template/index.esm.js +1 -1
  584. package/dist/views/template-editor/add-template/index.js +1 -1
  585. package/dist/views/template-editor/components/index.esm.js +1 -1
  586. package/dist/views/template-editor/components/index.js +1 -1
  587. package/dist/views/template-editor/edit-section-modal/index.esm.js +1 -1
  588. package/dist/views/template-editor/edit-section-modal/index.js +1 -1
  589. package/dist/views/template-editor/index.esm.js +7 -7
  590. package/dist/views/template-editor/index.js +7 -7
  591. package/dist/views/template-editor/routes/index.esm.js +1 -1
  592. package/dist/views/template-editor/routes/index.js +1 -1
  593. package/dist/views/template-editor/template-modal/index.esm.js +1 -1
  594. package/dist/views/template-editor/template-modal/index.js +1 -1
  595. package/dist/views/template-editor/templates/index.esm.js +1 -1
  596. package/dist/views/template-editor/templates/index.js +1 -1
  597. package/package.json +1 -1
  598. package/dist/chunks/chat-bot-BpNtrZEL.esm.js.map +0 -1
  599. package/dist/chunks/chat-bot-osiGMG3g.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SectionFlowEditor-sKsZ3oQo.js","sources":["../../src/views/template-editor/components/EditorHeader.tsx","../../src/views/template-editor/components/EditorSection.tsx","../../src/views/template-editor/components/controllers/AlignmentControl.tsx","../../src/views/template-editor/components/controllers/TextControls.tsx","../../src/views/template-editor/components/controllers/ButtonControls.tsx","../../src/views/template-editor/components/controllers/border-control.tsx","../../src/views/template-editor/components/controllers/ImageControls.tsx","../../src/views/template-editor/components/controllers/DividerControls.tsx","../../src/views/template-editor/components/controllers/TableControls.tsx","../../src/views/template-editor/components/controllers/SignatureControls.tsx","../../src/views/template-editor/components/controllers/CodeControls.tsx","../../src/views/template-editor/components/SectionFormatPanel.tsx","../../src/views/template-editor/components/EditorSidebar.tsx","../../src/views/template-editor/components/EditorCanvas.tsx","../../src/views/template-editor/components/SectionFlowEditor.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport {\n AppBar,\n Toolbar,\n Box,\n Link,\n Stack,\n IconButton,\n Divider,\n} from '@mui/material';\nimport { ZoomIn, ZoomOut, ZoomOutMap } from '@mui/icons-material';\nimport Button from '../../../components/button/button';\nimport Typography from '../../../components/typography/typography';\nimport { Edit, Eye, EyeOff } from '../../../components/icons';\nimport CodeOutlinedIcon from '@mui/icons-material/CodeOutlined';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { templateRoutes } from '../utils/common';\nimport { EnhancedSectionData } from '../types/editor';\n\ninterface EditorHeaderProps {\n onSave: () => void;\n onPreview: () => void;\n preview: boolean;\n editHtml: boolean;\n onEditHtml: () => void;\n onEditModeChange?: () => void;\n sections: EnhancedSectionData[];\n isEditingHeaderFooter: boolean;\n setIsEditingHeaderFooter: (value: boolean) => void;\n onSaveHeaderFooter: (value: boolean) => void;\n modulePath: string;\n type: string;\n mode: 'add' | 'edit';\n templateData: Record<string, any> | null;\n isSaving?: boolean;\n editMode: boolean;\n fromPreview?: boolean;\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onResetZoom: () => void;\n}\n\nconst EditorHeader: React.FC<EditorHeaderProps> = ({\n onSave,\n onPreview,\n preview,\n editHtml,\n onEditHtml,\n sections,\n isEditingHeaderFooter,\n onEditModeChange,\n setIsEditingHeaderFooter,\n onSaveHeaderFooter,\n modulePath,\n type,\n mode = 'add',\n templateData,\n isSaving = false,\n editMode,\n fromPreview = false,\n zoom,\n onZoomIn,\n onZoomOut,\n onResetZoom,\n}) => {\n const ROUTES = templateRoutes(modulePath, type);\n return (\n <AppBar\n position=\"static\"\n color=\"default\"\n elevation={0}\n sx={{\n borderColor: 'divider',\n bgcolor: 'background.paper'\n }}\n >\n <Toolbar variant=\"dense\" sx={{ justifyContent: 'space-between', p: 3 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Link\n component={RouterLink}\n to={ROUTES.LIST}\n underline=\"hover\"\n color=\"text.secondary\"\n sx={{ fontSize: '0.875rem' }}\n >\n <Typography type=\"s5\" color='theme.secondary.800'>{type === 'email' ? 'Emails' : 'PDF'}</Typography>\n </Link>\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>/</Typography>\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>\n {mode === 'add' ? 'Add New' : editMode ? 'Edit' : 'Preview'} Template\n </Typography>\n {templateData && templateData?.name &&\n <>\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>/</Typography>\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>\n {templateData?.name}\n </Typography>\n </>\n }\n </Box>\n\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {/* Zoom Controls - Only show in preview mode */}\n {preview && (\n <>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n borderRadius: 1,\n bgcolor: 'rgba(74, 192, 140, 0.08)',\n border: '1px solid rgba(74, 192, 140, 0.2)',\n }}\n >\n <IconButton\n size=\"small\"\n onClick={onZoomOut}\n disabled={zoom <= 50}\n color='#4AC08C'\n sx={{\n color: '#4AC08C',\n '&:hover': {\n bgcolor: 'rgba(74, 192, 140, 0.15)',\n },\n '&.Mui-disabled': {\n opacity: 0.3,\n color: '#4AC08C'\n }\n }}\n >\n <ZoomOut fontSize=\"small\" />\n </IconButton>\n\n <Typography\n type=\"s5\"\n weight='medium'\n sx={{\n minWidth: '50px',\n textAlign: 'center',\n color: '#4AC08C'\n }}\n >\n {zoom}%\n </Typography>\n\n <IconButton\n size=\"small\"\n onClick={onZoomIn}\n disabled={zoom >= 150}\n sx={{\n color: '#4AC08C',\n '&:hover': {\n bgcolor: 'rgba(74, 192, 140, 0.15)',\n },\n '&.Mui-disabled': {\n opacity: 0.3,\n color: '#4AC08C'\n }\n }}\n >\n <ZoomIn fontSize=\"small\" />\n </IconButton>\n\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{\n mx: 0.5,\n bgcolor: 'rgba(74, 192, 140, 0.3)'\n }}\n />\n\n <IconButton\n size=\"small\"\n onClick={onResetZoom}\n disabled={zoom === 100}\n title=\"Reset Zoom\"\n sx={{\n color: '#4AC08C',\n '&:hover': {\n bgcolor: 'rgba(74, 192, 140, 0.15)',\n },\n '&.Mui-disabled': {\n opacity: 0.3,\n color: '#4AC08C'\n }\n }}\n >\n <ZoomOutMap fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 1 }} />\n </>\n )}\n\n {!fromPreview ? (\n <>\n <Button\n onClick={() => setIsEditingHeaderFooter(true)}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={<Edit fontSize='small' />}\n disabled={preview}\n >\n Edit Header/Footer\n </Button>\n <Button\n onClick={onPreview}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={preview ? <EyeOff fontSize='small' /> : <Eye fontSize='small' />}\n disabled={!sections?.length}\n >\n Preview\n </Button>\n <Button\n onClick={onEditHtml}\n size=\"small\"\n variant={editHtml ? 'contained' : 'outlined'}\n color={editHtml ? 'primary' : 'inherit'}\n sx={(theme) => ({ color: editHtml ? undefined : `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={<CodeOutlinedIcon fontSize='small' />}\n disabled={!sections?.length || preview}\n >\n {editHtml ? 'Exit HTML Edit' : 'Edit HTML'}\n </Button>\n <Button\n variant=\"contained\"\n onClick={onSave}\n size=\"small\"\n sx={{ boxShadow: 'none' }}\n disabled={!sections?.length || isSaving}\n >\n {isSaving ? 'Saving...' : 'Save'}\n </Button>\n </>\n ) : (\n editMode ? (\n <>\n {isEditingHeaderFooter ? (\n <>\n <Button\n onClick={() => setIsEditingHeaderFooter(false)}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n >\n Cancel Editing\n </Button>\n <Button\n variant=\"contained\"\n onClick={onSaveHeaderFooter}\n size=\"small\"\n sx={{ boxShadow: 'none' }}\n >\n Save Changes\n </Button>\n </>\n ) : (\n <>\n <Button\n onClick={() => setIsEditingHeaderFooter(true)}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={<Edit fontSize='small' />}\n disabled={preview}\n >\n Edit Header/Footer\n </Button>\n <Button\n onClick={onPreview}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={preview ? <EyeOff fontSize='small' /> : <Eye fontSize='small' />}\n disabled={!sections?.length}\n >\n Preview\n </Button>\n <Button\n variant=\"contained\"\n onClick={onSave}\n size=\"small\"\n sx={{ boxShadow: 'none' }}\n disabled={!sections?.length}\n >\n Save\n </Button>\n <Button\n onClick={() => onEditModeChange && onEditModeChange()}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n >\n Cancel\n </Button>\n </>\n )}\n </>\n ) : (\n <Button\n variant=\"contained\"\n onClick={() => onEditModeChange && onEditModeChange()}\n size=\"small\"\n sx={{ boxShadow: 'none' }}\n startIcon={<Edit fontSize='small' />}\n disabled={!sections?.length}\n >\n Edit\n </Button>\n )\n )}\n </Stack>\n </Toolbar>\n </AppBar>\n );\n};\n\nexport default EditorHeader;","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { useRef, useState, lazy, Suspense, useCallback, useMemo } from 'react';\nimport { useDraggable, useDroppable } from '@dnd-kit/core';\nimport {\n\tBox,\n\tPaper,\n\tMenuItem,\n\tFormControl,\n\tIconButton,\n\tFade,\n\tFormControlLabel,\n\tSkeleton\n} from '@mui/material';\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport SplitIcon from '@mui/icons-material/CallSplit';\nimport { SectionData } from '../types/editor';\nimport { Edit, Save, Trash } from '../../../components/icons';\nimport Select from '../../../components/select/select';\nimport Typography from '../../../components/typography/typography';\nimport EditSectionModal from '../edit-section-modal/edit-section-modal';\nimport Checkbox from '../../../components/checkbox/checkbox';\nimport Chip from '../../../components/chip/chip';\nimport Close from '@mui/icons-material/Close';\nimport { useCKEditorStyleExtractor } from '../utils/style-extractor';\nimport { useDebouncedUpdate } from '../hooks/useDebouncedUpdate';\n\nconst CustomEditor = lazy(() => import('../../../components/editor/custom-editor'));\n\ninterface EditorSectionProps {\n\tsection: SectionData;\n\tisSelected: boolean;\n\tisDragging: boolean;\n\tisOver: boolean;\n\tonSelect: () => void;\n\tonUpdate: (content: string, options?: any) => void;\n\tonSplit: (content1: string, content2: string) => void;\n\tonDelete: () => void;\n\tplaceholders: Array<{ value: string; label: string }>;\n\tsetIsSectionEditing:(value: boolean)=> void;\n}\n\nconst editableSections = ['text', 'text-block', 'heading', 'heading-1', 'heading-2', 'heading-3', 'heading-4'];\n\nconst EditorSection: React.FC<EditorSectionProps> = ({\n\tsection,\n\tisSelected,\n\tisDragging,\n\tisOver,\n\tonSelect,\n\tonUpdate,\n\tonSplit,\n\tonDelete,\n\tplaceholders,\n\tsetIsSectionEditing\n}) => {\n\tconst { extractStyles, getSingleStyles } = useCKEditorStyleExtractor();\n\n\tconst {\n\t\tattributes,\n\t\tlisteners,\n\t\tsetNodeRef: setDraggableRef,\n\t\ttransform\n\t} = useDraggable({ id: section.id });\n\n\tconst { setNodeRef: setDroppableRef } = useDroppable({ id: section.id });\n\tconst [isEditing, setIsEditing] = useState(false);\n\tconst [isHovered, setIsHovered] = useState(false);\n\tconst [isOpenEditSectionModal, setIsOpenEditSectionModal] = useState(false);\n\tconst [isEditedFromSource, setIsEditedFromSource] = useState(Boolean(section?.is_edited_from_source));\n\tconst [localContent, setLocalContent] = useState(section.content);\n\tconst [hasUserEdited, setHasUserEdited] = useState(false); // Track if user actually made changes\n\tconst editorRef = useRef<any>(null);\n\tconst mouseHoverTimeoutRef = useRef<number | null>(null);\n\tconst cursorPositionRef = useRef<{ from: number; to: number } | null>(null);\n\tconst isRestoringCursorRef = useRef(false);\n\t\n\t// Ref-based content tracking for contentEditable optimization\n\t// This ref tracks content changes without triggering re-renders during editing,\n\t// improving performance and preventing cursor position loss\n\tconst contentRef = useRef<string>(section.content);\n\tconst originalContentRef = useRef<string>(section.content); // Store original content\n\n\t// Create debounced version of onUpdate with 300ms delay\n\tconst debouncedUpdate = useDebouncedUpdate(onUpdate, 300);\n\n\t// Memoize style calculation\n\tconst style = useMemo(() => {\n\t\treturn transform\n\t\t\t? {\n\t\t\t\t\ttransform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,\n\t\t\t\t\ttransition: 'none'\n\t\t\t\t}\n\t\t\t: { transition: 'all 0.2s ease' };\n\t}, [transform]);\n\n\t// Memoize sx prop for Paper to prevent re-creation\n\tconst paperSx = useMemo(() => ({\n\t\tposition: 'relative',\n\t\tborder: '1px dashed',\n\t\tborderColor: isSelected ? 'primary.main' : isOver ? 'primary.main' : 'grey.400',\n\t\tborderRadius: 1,\n\t\tbgcolor: 'white',\n\t\topacity: isDragging ? 0.7 : 1,\n\t\tboxShadow: 'none',\n\t\ttransition: 'all 0.2s ease',\n\t\t'&:hover': {\n\t\t\tboxShadow: 'none'\n\t\t},\n\t\t...(isOver && { borderColor: 'primary.main', boxShadow: 'none' })\n\t}), [isSelected, isOver, isDragging]);\n\n\t// Memoize merged ref to prevent re-creation\n\tconst mergedRef = useCallback((node: HTMLElement | null) => {\n\t\tsetDraggableRef(node);\n\t\tsetDroppableRef(node);\n\t}, [setDraggableRef, setDroppableRef]);\n\n\t// Memoize event handlers\n\tconst handleDblClick = useCallback(() => {\n\t\tif (editableSections.includes(section.type)) {\n\t\t\thandleEditing();\n\t\t}\n\t}, [section.type]);\n\n\tconst handleEditing = useCallback(() => {\n\t\t// Store original content when entering edit mode\n\t\toriginalContentRef.current = section.content;\n\t\tsetHasUserEdited(false);\n\t\t\n\t\tif (section?.isSplitPair) {\n\t\t\tsetIsOpenEditSectionModal(true);\n\t\t} else {\n\t\t\tsetIsEditing(true);\n\t\t\tsetIsSectionEditing(true);\n\t\t}\n\t}, [section?.isSplitPair, section.content, setIsSectionEditing]);\n\n\tconst handleEditorReady = useCallback((editor: any) => {\n\t\teditorRef.current = editor;\n\t\t\n\t\t// Track cursor position changes in the editor\n\t\tif (editor?._tiptap) {\n\t\t\teditor._tiptap.on('selectionUpdate', () => {\n\t\t\t\tif (!isRestoringCursorRef.current && editor._tiptap) {\n\t\t\t\t\tconst { from, to } = editor._tiptap.state.selection;\n\t\t\t\t\tcursorPositionRef.current = { from, to };\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t// Track when user actually makes changes\n\t\t\teditor._tiptap.on('update', ({ transaction }) => {\n\t\t\t\t// Only mark as edited if the transaction actually changed the document\n\t\t\t\tif (transaction.docChanged) {\n\t\t\t\t\tsetHasUserEdited(true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, []);\n\n\tconst handleSave = useCallback((e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tif (editorRef.current) {\n\t\t\t// Save cursor position before getting content\n\t\t\tif (editorRef.current._tiptap) {\n\t\t\t\tconst { from, to } = editorRef.current._tiptap.state.selection;\n\t\t\t\tcursorPositionRef.current = { from, to };\n\t\t\t}\n\t\t\t\n\t\t\t// Get content from editor\n\t\t\t// Use getData() which returns sourceCodeRef.current from CustomEditor\n\t\t\t// This preserves the HTML structure better than getHTML()\n\t\t\tconst content = editorRef.current.getData();\n\t\t\t\n\t\t\t// Update ref immediately for instant tracking\n\t\t\tcontentRef.current = content;\n\t\t\t\n\t\t\t// Update local state for UI feedback\n\t\t\tsetLocalContent(content);\n\t\t\t\n\t\t\tconst styles = extractStyles(section.content, {\n\t\t\t\tincludeTagStyles: true,\n\t\t\t\tincludeInlineStyles: true,\n\t\t\t\tmergeNestedStyles: true,\n\t\t\t\tfilterEmptyStyles: true\n\t\t\t});\n\t\t\tconst single = getSingleStyles(styles);\n\t\t\t// Merge styles safely\n\t\t\tconst mergedStyles = {\n\t\t\t\t...(section.attributes?.styles || {}),\n\t\t\t\t...single\n\t\t\t};\n\t\n\t\t\t// Merge attributes, giving priority to new props\n\t\t\tconst mergedAttributes = {\n\t\t\t\t...(section.attributes || {}),\n\t\t\t\tstyles: mergedStyles,\n\t\t\t};\n\t\t\t\n\t\t\t// Use debounced update to prevent excessive re-renders and API calls\n\t\t\tdebouncedUpdate(content, { is_edited_from_source: isEditedFromSource, attributes: mergedAttributes });\n\t\t}\n\t\tsetIsEditing(false);\n\t\tsetIsSectionEditing(false)\n\t\tsetIsOpenEditSectionModal(false);\n\t\tsetHasUserEdited(false); // Reset edit flag\n\t}, [debouncedUpdate, isEditedFromSource, extractStyles, getSingleStyles, section.content, section.attributes, setIsSectionEditing, hasUserEdited]);\n\n\tconst handleSplit = useCallback(() => {\n\t\tconst content = section.content || '';\n\t\tconst firstHalf = content;\n\t\tconst secondHalf = '';\n\t\tonSplit(firstHalf, secondHalf);\n\t}, [section.content, onSplit]);\n\n\tconst handleAddPlaceholder = useCallback((placeholder: string) => {\n\t\tif (editorRef.current) {\n\t\t\tconst viewFragment = editorRef.current.data.processor.toView(\n\t\t\t\t`{{${placeholder}}}`\n\t\t\t);\n\t\t\tconst modelFragment = editorRef.current.data.toModel(viewFragment);\n\t\t\teditorRef.current.model.insertContent(modelFragment);\n\t\t}\n\t}, []);\n\n\tconst handleMouseEnter = useCallback(() => {\n\t\tif (mouseHoverTimeoutRef.current !== null) {\n\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\n\t\t}\n\t\tmouseHoverTimeoutRef.current = window.setTimeout(() => {\n\t\t\tsetIsHovered(true);\n\t\t}, 50);\n\t}, []);\n\n\tconst handleMouseLeave = useCallback(() => {\n\t\tif (mouseHoverTimeoutRef.current !== null) {\n\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\n\t\t}\n\t\tmouseHoverTimeoutRef.current = window.setTimeout(() => {\n\t\t\tsetIsHovered(false);\n\t\t}, 50);\n\t}, []);\n\n\tconst handleClick = useCallback((e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tonSelect();\n\t}, [onSelect]);\n\n\tconst handleDeleteClick = useCallback((e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tonDelete();\n\t}, [onDelete]);\n\n\tconst handleCancelEdit = useCallback(() => {\n\t\tsetIsEditing(false);\n\t\tsetIsSectionEditing(false)\n\t}, [setIsSectionEditing]);\n\n\tconst handleCheckboxChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tsetIsEditedFromSource(e.target.checked);\n\t}, []);\n\n\tconst handleSelectChange = useCallback((e: any) => {\n\t\tif (e.target.value) {\n\t\t\thandleAddPlaceholder(e.target.value as string);\n\t\t\te.target.value = '';\n\t\t}\n\t}, [handleAddPlaceholder]);\n\n\t// Cleanup function for hover timeout\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (mouseHoverTimeoutRef.current !== null) {\n\t\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\t// Sync local content with section content when it changes externally\n\t// and restore cursor position if editor is focused\n\tReact.useEffect(() => {\n\t\t// Only update if content actually changed from external source\n\t\t// Skip if we're currently editing (content changes come from user input)\n\t\tif (contentRef.current === section.content) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// Update both ref and state for consistency\n\t\tcontentRef.current = section.content;\n\t\tsetLocalContent(section.content);\n\t\t\n\t\t// Only restore cursor position if:\n\t\t// 1. Editor is active (isEditing)\n\t\t// 2. Content change came from external source (not from user typing)\n\t\t// 3. We're not currently in the middle of restoring cursor\n\t\tif (isEditing && editorRef.current?._tiptap && cursorPositionRef.current && !isRestoringCursorRef.current) {\n\t\t\tconst editor = editorRef.current._tiptap;\n\t\t\tconst { from, to } = cursorPositionRef.current;\n\t\t\t\n\t\t\t// Use requestAnimationFrame to ensure DOM has updated\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\ttry {\n\t\t\t\t\tisRestoringCursorRef.current = true;\n\t\t\t\t\t\n\t\t\t\t\t// Validate that the cursor position is still valid after content update\n\t\t\t\t\tconst docSize = editor.state.doc.content.size;\n\t\t\t\t\tconst validFrom = Math.min(from, docSize);\n\t\t\t\t\tconst validTo = Math.min(to, docSize);\n\t\t\t\t\t\n\t\t\t\t\t// Restore selection\n\t\t\t\t\teditor.commands.setTextSelection({ from: validFrom, to: validTo });\n\t\t\t\t\t\n\t\t\t\t\t// Ensure editor maintains focus\n\t\t\t\t\tif (!editor.isFocused) {\n\t\t\t\t\t\teditor.commands.focus();\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.warn('Failed to restore cursor position:', error);\n\t\t\t\t} finally {\n\t\t\t\t\tisRestoringCursorRef.current = false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, [section.content, isEditing]);\n\n\t// Memoize content rendering to prevent unnecessary re-renders\n\t// Only re-render when isEditing state changes or when not editing and localContent changes\n\tconst contentRenderer = useMemo(() => {\n\t\tif (isEditing) {\n\t\t\treturn (\n\t\t\t\t<Suspense fallback={<Skeleton />}>\n\t\t\t\t\t<CustomEditor \n\t\t\t\t\t\tkey={`editor-${section.id}`}\n\t\t\t\t\t\teditorRef={editorRef}\n\t\t\t\t\t\thandleEditorReady={handleEditorReady} \n\t\t\t\t\t\tdata={localContent}\n\t\t\t\t\t\tonError={(error: Error) => console.error('Editor error:', error)}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t);\n\t\t}\n\t\t\n\t\treturn (\n\t\t\t<Box\n\t\t\t\tdangerouslySetInnerHTML={{ __html: localContent }}\n\t\t\t\tsx={{\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tpy: section.type === 'divider' ? 1 : 0,\n\t\t\t\t\tlineHeight: 1.6,\n\t\t\t\t\t'& p': { margin: 0 }\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t}, [isEditing, localContent, section.type, section.id]);\n\n\t// Memoize placeholder options\n\tconst placeholderOptions = useMemo(() => \n\t\tplaceholders.map((option) => (\n\t\t\t<MenuItem key={option.value} value={option.value}>\n\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>{option.label}</Typography>\n\t\t\t</MenuItem>\n\t\t))\n\t, [placeholders]);\n\n\treturn (\n\t\t<Paper\n\t\t\tref={mergedRef}\n\t\t\tstyle={style}\n\t\t\televation={isHovered || isSelected ? 3 : 1}\n\t\t\tsx={paperSx}\n\t\t\tonClick={handleClick}\n\t\t\tonDoubleClick={handleDblClick}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}>\n\t\t\t{isOver && !isDragging && (\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tborder: '2px dashed',\n\t\t\t\t\t\tborderColor: 'primary.main',\n\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\tbgcolor: 'rgba(25, 118, 210, 0.04)',\n\t\t\t\t\t\tzIndex: 10,\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\tpointerEvents: 'none'\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Typography type='s2' color='primary' weight='medium'>Drop here</Typography>\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t\t<Box\n\t\t\t\tsx={{\n\t\t\t\t\tbgcolor: 'grey.50',\n\t\t\t\t\tp: 1,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\tborderBottom: '1px solid',\n\t\t\t\t\tborderColor: 'grey.200'\n\t\t\t\t}}>\n\t\t\t\t<Box\n\t\t\t\t\t{...listeners}\n\t\t\t\t\t{...attributes}\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tcursor: 'grab',\n\t\t\t\t\t\tpx: 1,\n\t\t\t\t\t\tpy: 0.5,\n\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\ttransition: 'background-color 0.2s ease',\n\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.100' },\n\t\t\t\t\t\t'&:active': { cursor: 'grabbing' }\n\t\t\t\t\t}}>\n\t\t\t\t\t<DragIndicatorIcon\n\t\t\t\t\t\tsx={{ color: 'grey.600', fontSize: '1.2rem', mr: 0.5 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.600' weight='medium'>Move</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n\t\t\t\t\t{isEditing ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<FormControlLabel control={\n\t\t\t\t\t\t\t\t<Checkbox \n\t\t\t\t\t\t\t\t\tonChange={handleCheckboxChange} \n\t\t\t\t\t\t\t\t\tdefaultChecked={isEditedFromSource}/>} \n\t\t\t\t\t\t\t\t\tlabel={<Typography type='s2' color='theme.secondary.1000'>Edited from source</Typography>} />\n\t\t\t\t\t\t\t<FormControl size='small' sx={{ minWidth: 160 }}>\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\t\t\t\tvalue=''\n\t\t\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\t\t\trenderValue={() => 'Add placeholder...'}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'white',\n\t\t\t\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\t\t\t\t'& .MuiSelect-select': { py: 0.75 }\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonChange={handleSelectChange}>\n\t\t\t\t\t\t\t\t\t{placeholderOptions}\n\t\t\t\t\t\t\t\t</Select>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<IconButton size='small' onClick={handleSave}>\n\t\t\t\t\t\t\t\t\t<Save fontSize='small' color='inherit' />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t<IconButton size='small' onClick={handleCancelEdit} color='error'>\n\t\t\t\t\t\t\t\t\t<Close fontSize='small' color='inherit' />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Fade in={isHovered || isSelected} timeout={200}>\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0.5 }}>\n\t\t\t\t\t\t\t\t{section?.is_edited_from_source && (\n\t\t\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\t\t\tlabel=\"Edited From Source\"\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tsx={(theme) => ({ \n\t\t\t\t\t\t\t\t\t\t\ttextTransform: 'capitalize', \n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette.theme?.tertiary1?.[200], \n\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette.theme?.tertiary1?.[900]\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{editableSections.includes(section.type) &&\n\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\t\t\t\tonClick={handleEditing}\n\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\n\t\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' }\n\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t<Edit fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\n\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\t\t\tonClick={handleSplit}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\n\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' },\n\t\t\t\t\t\t\t\t\t\topacity: section?.splitWidth === 25 ? 0.5 : 1\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tdisabled={section?.splitWidth === 25}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<SplitIcon fontSize='small' color='primary' />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\t\t\tonClick={handleDeleteClick}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\n\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' }\n\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.error.500' }} />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</Fade>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t\t<Box sx={{ p: 3, bgcolor: 'white' }}>\n\t\t\t\t<style>\n {`\n\t\t\t\t\t\ta {\n\t\t\t\t\t\t\tcolor: #007bff !important;\n\t\t\t\t\t\t\ttext-decoration: none !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta:hover {\n\t\t\t\t\t\t\ttext-decoration: underline;\n\t\t\t\t\t\t}\n `}\n </style>\n\t\t\t\t{contentRenderer}\n\t\t\t</Box>\n\t\t\t{isOpenEditSectionModal && <EditSectionModal\n\t\t\t\tisOpen={isOpenEditSectionModal}\n\t\t\t\tsetIsOpen={setIsOpenEditSectionModal}\n\t\t\t\tmodalProps={{ open: isOpenEditSectionModal }}\n\t\t\t\tplaceholders={placeholders}\n\t\t\t\thandleSave={handleSave}\n\t\t\t\thandleAddPlaceholder={handleAddPlaceholder}\n\t\t\t\thandleEditorReady={handleEditorReady}\n\t\t\t\tsection={section}\n\t\t\t/>}\n\t\t</Paper>\n\t);\n};\n\n// Custom comparison function to prevent unnecessary re-renders\n// Return true if props are equal (skip re-render), false if different (re-render)\nconst arePropsEqual = (prevProps: EditorSectionProps, nextProps: EditorSectionProps): boolean => {\n\t// Check if section data has changed\n\tif (prevProps.section.id !== nextProps.section.id) return false;\n\tif (prevProps.section.content !== nextProps.section.content) return false;\n\tif (prevProps.section.type !== nextProps.section.type) return false;\n\tif (prevProps.section.is_edited_from_source !== nextProps.section.is_edited_from_source) return false;\n\tif (prevProps.section.isSplitPair !== nextProps.section.isSplitPair) return false;\n\tif (prevProps.section.splitWidth !== nextProps.section.splitWidth) return false;\n\t\n\t// Check if interaction states have changed\n\tif (prevProps.isSelected !== nextProps.isSelected) return false;\n\tif (prevProps.isDragging !== nextProps.isDragging) return false;\n\tif (prevProps.isOver !== nextProps.isOver) return false;\n\t\n\t// Check if placeholders array reference has changed\n\tif (prevProps.placeholders !== nextProps.placeholders) return false;\n\t\n\t// Deep comparison for section attributes (styles, etc.)\n\tconst prevAttrs = JSON.stringify(prevProps.section.attributes);\n\tconst nextAttrs = JSON.stringify(nextProps.section.attributes);\n\tif (prevAttrs !== nextAttrs) return false;\n\t\n\t// All props are equal, skip re-render\n\treturn true;\n};\n\n// Wrap component with React.memo and custom comparison function\nconst MemoizedEditorSection = React.memo(EditorSection, arePropsEqual);\nMemoizedEditorSection.displayName = 'EditorSection';\n\nexport default MemoizedEditorSection;","/* 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.theme.primary[800]}!important`,\n color: `#fff !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 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 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.theme.primary[800]} !important`,\n color: '#fff !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}\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 }) => {\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 {/* 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) => `${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\">\n <ColorLensIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n </>\n );\n};\n\nexport default React.memo(TextControls);","/* 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 AlignmentControl from './AlignmentControl';\nimport Select from '../../../../components/select/select';\nimport ColorPickerInput from '../../../../components/color-picker-input/color-picker-input';\n\ninterface ButtonControlsProps {\n attrs: Record<string, any>;\n updateAttrs: (attr: Record<string, any>) => void;\n}\n\nconst borderOptions = [\n {label: 'None', value: 'none'},\n {value: '1px solid #e0e0e0', label: 'Solid'},\n {value: '1px dashed #e0e0e0', label: 'Dashed'},\n {value: '1px dotted #e0e0e0', label: 'Dotted'},\n]\n\nconst ButtonControls: React.FC<ButtonControlsProps> = ({\n attrs,\n updateAttrs\n}) => {\n\n const { text, styles } = attrs\n const handleAlignmentChange = (\n event: React.MouseEvent<HTMLElement>,\n newAlignment: string | null,\n ) => {\n if(newAlignment) {\n let margin = '0';\n switch (newAlignment) {\n \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 = 'auto 0 0 0';\n break;\n default:\n margin = '0 auto';\n break;\n }\n updateAttrs({ styles : { margin } });\n }\n };\n\n const getAlignment = () => {\n if (styles?.margin === '0 auto') {\n return 'center';\n } else if (styles?.margin === '0 0 0 auto') {\n return 'right';\n } else if (styles?.margin === 'auto 0 0 0') {\n return 'left';\n } else {\n return 'justify';\n }\n };\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 <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 <Box sx={{ mb: 2 }}>\n <ColorPickerInput\n value={styles?.color || '#333333'}\n onChange={(color) => updateAttrs({ styles :{ color: color }})}\n label='Text Color'\n // sx={{ maxWidth: 150 }}\n />\n </Box>\n <FormControl fullWidth size=\"small\" sx={{ mb: 2 }}>\n <Select\n value={styles?.border}\n renderValue={(value) => borderOptions.find((option) => option.value === value)?.label || 'None'}\n onChange={(e) => updateAttrs({ styles :{ border :e.target.value }})}\n label='Border'\n >\n <MenuItem value=\"none\">None</MenuItem>\n <MenuItem value=\"1px solid #e0e0e0\">Solid</MenuItem>\n <MenuItem value=\"1px dashed #e0e0e0\">Dashed</MenuItem>\n </Select>\n </FormControl>\n <Box sx={{ mb: 2 }}>\n <Typography type=\"s3\" color='theme.neutral.800'>\n Border Radius\n </Typography>\n <Slider\n value={styles?.borderRadius}\n onChange={(_, value) => updateAttrs({ styles :{ borderRadius: value as number }})}\n min={0}\n max={20}\n step={1}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n marks\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 <Typography type=\"s3\" color='theme.neutral.800'>\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={20}\n step={1}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n marks\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={getAlignment()} onAlignmentChange={handleAlignmentChange}/>\n </>\n );\n};\n\nexport default ButtonControls;","/* 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\n useEffect(() => {\n if(initiateStyles instanceof Function) {\n if (!isBordered) {\n initiateStyles({\n 'border': 0,\n 'borderStyle':'none',\n 'borderColor':'#000000',\n 'borderCollapse':'separate',\n 'borderRadius':0,\n });\n } else{\n initiateStyles({\n 'border': 1,\n 'borderStyle':'solid',\n 'borderColor':'#000000',\n 'borderCollapse':'collapse',\n 'borderRadius':0,\n });\n }\n }\n }, [isBordered]);\n return (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <FormControlLabel\n control={\n <Android12Switch\n checked={isBordered}\n onChange={(e) => onChange('is_bordered', e.target.checked)}\n />\n }\n label={<Typography type='s5' weight='medium' color='theme.secondary.800'>Bordered Table</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 marks\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 // Select,\n MenuItem,\n styled,\n Switch,\n Grid,\n FormControlLabel\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 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 { 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 = 'auto 0 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 URL */}\n <TextField\n label=\"Image URL\"\n fullWidth\n value={src}\n onChange={(e) => updateAttrs({ src: e.target.value })}\n size=\"small\"\n sx={{ mb: 2 }}\n />\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 ? 'auto' : 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}\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?.fullWidth ? '' : 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 disabled={styles?.fullWidth}\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 {/* 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}\n onChange={(e) => updateAttrs({ styles: { borderColor: e.target.value }})}\n size=\"small\"\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 DividerControls;","/* 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 } 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} 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 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}\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 TableData {\n columns: TableColumn[];\n rows: TableRow[];\n mergedCells?: CellMerge[];\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(true);\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 [selectedTable, setSelectedTable] = useState<string | null>(null);\n // Fix: Change customText to an object type\n const [customText, setCustomText] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\n // New state to track row-level placeholder assignments\n const [rowPlaceholders, setRowPlaceholders] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\n // Initialize merged cells from attrs\n const mergedCells = tableData.mergedCells || [];\nconst [isUpdating, setIsUpdating] = useState(false);\n\nconst getAttributes = (tableId: string) => {\n\n if (!relation_table || !Array.isArray(relation_table)) {\n return [];\n }\n \n const table = relation_table.find((table: any) => {\n return table?.dataKey == tableId\n })\n if (!table || !table.fields || !Array.isArray(table.fields)) {\n return [];\n }\n\n return table.fields\n // .map(field => {\n // const fieldName = field.key;\n // return {\n // label: fieldName?.replace(/_id$/, '') || '', \n // value: field?.select,\n // };\n // });\n};\n\nconst tableAttributes = useMemo(() => \n selectedTable ? getAttributes(selectedTable) : placeholders,\n [placeholders, selectedTable, relation_table] \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: '#f5f5f5',\n color: '#333333',\n fontSize: 14,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n margin: '0.5em 0',\n },\n tBody: {\n backgroundColor: '#ffffff',\n color: '#333333',\n fontSize: 14,\n fontWeight: 'normal',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\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);\n if (!placeholder) return '';\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 return `{{${placeholder.value}}}` || 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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\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 // Add new row\nconst 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:selectedTable||'',\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:selectedTable||'',\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\nconst 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:selectedTable||'',\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:selectedTable||'',\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 };\nconst 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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\n rows: prev.rows.map((row: TableRow) => {\n return {...Object.fromEntries(prev.columns.map((col: TableColumn) => [col?.id, '']))\n \t}\n })\n }));\n }\n // Count columns with placeholders\n const columnsWithPlaceholders = tPlaceholders ? Object.keys(tPlaceholders).length : 0;\nuseEffect(() => {\n // Determine if rowLevel should be enabled\n setRowLevel(levelType);\n setSelectedTable(tableData?.name || null); // Set default table if available\n // Update custom text by extracting values from _static fields\n setCustomText((prev: { [rowIndex: number]: { [columnId: string]: string } }) => {\n const updated: { [rowIndex: number]: { [columnId: string]: string } } = {}; // Fixed missing bracket here\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 // Get the original column value (without _static suffix)\n const columnValue = row[originalColumnId] || '';\n \n // Get the static value and remove the original column value if it appears\n let staticValue = row[columnId] || '';\n if (columnValue && staticValue.includes(columnValue)) {\n staticValue = staticValue.replace(columnValue, '').trim();\n }\n \n // Also remove any {{value}} placeholders\n staticValue = staticValue.replace(/\\{\\{\\s*value\\s*\\}\\}/g, '').trim();\n \n updated[rowIndex][originalColumnId] = staticValue;\n }\n });\n });\n \n return updated;\n });\n\n}, [tableData]);\n\nuseEffect(()=>{\n if(!selectedTable) {\n resetTable()\n }\n\n},[selectedTable]);\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) => setAutoPopulateEnabled(e.target.checked)}\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 setRowLevel(e.target.checked);\n setSelectedTable(null); // Reset selected table when toggling row level\n setParentRowLevel(e.target.checked);\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 }}>\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 <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 1 }}>\n Columns\n </Typography>\n {tableData.columns?.map((column, index) => (\n <Box key={column.id} sx={{ mb: 1, display: 'flex', alignItems: 'center', gap: 1 }}>\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={{ flex: 1 }}\n />\n <IconButton\n size=\"small\"\n onClick={() => removeColumn(column.id)}\n disabled={tableData.columns.length <= 1}\n color=\"error\"\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 <Divider sx={{ my: 2 }} />\n\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 disabled={selectedTable}\n onClick={() => addRow()}\n startIcon={<AddIcon />}\n className='black-outlined-btn'\n >\n Add Row\n </Button>\n </Box>\n {!rowLevel &&\n <Box sx={{ mb: 2 }}>\n <SearchableSelect\n value={selectedTable || ''}\n label={'Select Table'}\n options={relation_table?.map(table=>(\n { value: table?.dataKey, label: (table.name.charAt(0).toUpperCase() + table.name.slice(1)).replaceAll('_', ' ') }\n )) || []}\n onChange={(e) => {\n setSelectedTable(e.target.value);\n }}\n />\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 flexDirection: 'row',\n gap: 1,\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\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 sx={{ flex: 1, minWidth: 150 }}\n />\n <Box sx={{ flex: 1, minWidth: 150 }}>\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 || []}\n // disabled={isUpdating}\n sx={{\n flex: 1,\n maxWidth: 150,\n minWidth: 150,\n '& .MuiInputBase-input': {\n bgcolor:\n hasPlaceholder && autoPopulateEnabled\n ? 'grey.100'\n : mergeInfo\n ? 'blue.50'\n : 'transparent',\n width: 150,\n \n },\n }}\n />\n </Box>\n </Box>\n </>\n ) : (\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 '& .MuiInputBase-input': {\n bgcolor:\n hasPlaceholder && autoPopulateEnabled\n ? 'grey.100'\n : mergeInfo\n ? 'blue.50'\n : 'transparent',\n },\n }}\n />\n )}\n </Grid>\n );\n })}\n </Grid>\n </Box>\n ))}\n </Box>\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 {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 => ({\n value: attr.value,\n label: attr.label,\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 {/* <Select\n value={rowLevel ? '' : (currentPlaceholder || '')}\n onChange={(e) => updateColumnPlaceholder(column.id, e.target.value as string)}\n renderValue={(value) => {\n if (!value) return 'Select Data Source';\n const placeholder = placeholders.find(p => p.value === value);\n return placeholder?.label||currentPlaceholder || 'Unknown Placeholder';\n }}\n fullWidth\n disabled={isUpdating}\n size=\"small\"\n displayEmpty\n disabled={rowLevel}\n >\n <MenuItem value=\"\">\n <Typography type=\"s5\" color=\"theme.secondary.600\">No Data Source</Typography>\n </MenuItem>\n {tableAttributes.map((placeholder) => (\n <MenuItem key={placeholder.value} value={placeholder.value}>\n <Box>\n <Typography type=\"s5\" color=\"theme.secondary.1000\">\n {placeholder.label}\n </Typography>\n {placeholder.description && (\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\n {placeholder.description}\n </Typography>\n )}\n </Box>\n </MenuItem>\n ))}\n </Select> */}\n </Grid>\n </React.Fragment>\n );\n })}\n </Grid>\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 disableRadius\n />\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 || '#f5f5f5'}\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', parseInt(e.target.value) || 14)}\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', parseInt(e.target.value) || 8)}\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 || '#ffffff'}\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', parseInt(e.target.value) || 14)}\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', parseInt(e.target.value) || 8)}\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 </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 <TableRow>\n {tableData.columns.map((column, colIndex) => {\n const mergeInfo = getCellMergeInfo('thead', 0, colIndex);\n const isSelected = isCellSelected('thead', 0, colIndex);\n \n if (mergeInfo?.isCovered) {\n return null;\n }\n\n const cellContent = mergeInfo ? mergeInfo.merge.value : column.header;\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('thead', 0, 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 </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 );\n};\n\nexport default TableControls;","/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport {\n Box,\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';\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: 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={20}\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 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';\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 } 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 relation_table?:any;\n handleSave?: () => void;\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 relation_table,\n handleSave }) => {\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 // Initialize table data from section attributes\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);\n if (!placeholder) return '';\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 return placeholder.label || placeholder.value;\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 `<button style=\"${inlineStyles}\">${text || 'Button Text'}</button>`;\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, ...rest } = styles;\n const tInlineStyles = generateInlineStyles(styles.is_bordered ? styles : rest); \n const tHeadInlineStyles: string = generateInlineStyles(styles.tHead || {});\n const tBodyInlineStyles: string = generateInlineStyles(styles.tBody || {});\n const thCellInlineStyles: string = generateInlineStyles({\n ...(styles.thCells || {}), \n ...(styles.is_bordered ? { border, borderStyle, borderColor } : {}) \n });\n const tbCellInlineStyles: string = generateInlineStyles({\n ...(styles.tbCells || {}), \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\n return `<th style=\"${thCellInlineStyles}\"${mergeAttributes}>${cellValue}</th>`;\n }).filter(cell => cell !== '').join('');\n\n // Generate table body with #each loop using tableData.name\n let tableRowsHTML = '';\n \n // Check if we should use #each loop with tableData.name\n if (tableData.name) {\n // Generate template with #each handlebars syntax\n const rowTemplate = tableData.columns.map((column, colIndex) => {\n const mergeInfo = getCellMergeInfo('tbody', 0, colIndex); // Use first row as template\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 // Use handlebars template syntax for dynamic content\n let cellTemplate = '';\n \n // Handle special cases\n if (column.id === 'index' || column.id === 'incrementIndex') {\n cellTemplate = `{{incrementIndex @index}}`;\n } else if (column.id.includes('.')) {\n // Handle nested properties (like items.sku, tax_code_data.[0].rate)\n const cellValue = tableData?.rows?.[0][column.id];\n cellTemplate = typeof cellValue === 'string' ? cellValue.replace(tableData.name + '.', '') : String(cellValue || '');\n } else {\n // Direct property access\n const cellValue = tableData?.rows?.[0][column.id];\n cellTemplate = typeof cellValue === 'string' ? cellValue.replace(tableData.name + '.', '') : String(cellValue || '');\n }\n\n return `<td style=\"${tbCellInlineStyles}\"${mergeAttributes}>${cellTemplate}</td>`;\n }).filter(cell => cell !== '').join('');\n\n // Add zebra striping logic if enabled\n const rowStyleTemplate = styles.tBody?.zebraStriping \n ? `{{#if (isOdd @index)}}${tBodyInlineStyles}; background-color: ${styles.tBody.alternateRowColor || '#f9f9f9'}{{else}}${tBodyInlineStyles}{{/if}}`\n : tBodyInlineStyles;\n\n tableRowsHTML = `{{#each ${tableData.name}}}\n <tr style=\"${rowStyleTemplate}\">\n ${rowTemplate}\n </tr>\n {{/each}}`;\n \n } else {\n // Fallback to static rows when no tableData.name is provided\n tableRowsHTML = tableData.rows.map((row, rowIndex) => {\n const rowStyleAddition = styles.tBody?.zebraStriping && rowIndex % 2 === 1 \n ? `; background-color: ${styles.tBody.alternateRowColor || '#f9f9f9'}` \n : '';\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 const finalCellValue = mergeInfo ? mergeInfo.value : cellValue;\n\n return `<td style=\"${tbCellInlineStyles}\"${mergeAttributes}>${finalCellValue}</td>`;\n }).filter(cell => cell !== '').join('');\n \n return `<tr style=\"${tBodyInlineStyles}${rowStyleAddition}\">${cellsHTML}</tr>`;\n }).join('');\n }\n \n return `\n <table style=\"${tInlineStyles}\">\n <thead>\n <tr style=\"${tHeadInlineStyles}\">\n ${headerCellsHTML}\n </tr>\n </thead>\n <tbody>\n ${tableRowsHTML}\n </tbody>\n </table>\n `;\n } else if (sectionType === 'qr-code' || sectionType === 'bar-code') {\n return `<div style=\"${inlineStyles}\">${placeholder}</div>`;\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 `<div style=\"${inlineStyles}\">${content}</div>`;\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 };\nuseEffect(() => {\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 // Compose the update payload, omitting unknown properties\n onUpdate({\n ...sectionRest,\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={3}\n sx={{\n width: { xs: '100%', sm: 320, lg: 390 },\n height: '100%',\n overflow: 'auto',\n borderLeft: '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: '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 <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 {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 />\n )}\n {sectionType === 'buttons' && (\n <ButtonControls\n attrs={section?.attributes || {}}\n updateAttrs={updateAttrs}\n />\n )}\n {sectionType === 'image' && (\n <ImageControls\n attrs={section?.attributes || {}}\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 tableData={{\n ...tableData,\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) => {\n handleTableDataUpdate({\n ...value,\n border: tableData.border,\n name: tableData.name || ''\n });\n }}\n attrs={section?.attributes || {}}\n updateAttrs={updateAttrs}\n placeholders={placeholders}\n handleSave={handleSave}\n setParentRowLevel={setRowLevel}\n levelType={rowLevel}\n relation_table={relation_table}\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;","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { useDraggable } from '@dnd-kit/core';\nimport { useDropzone } from 'react-dropzone';\nimport {\n Box,\n Divider,\n ListItem,\n ListItemIcon,\n ListItemText,\n Grid,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n CircularProgress,\n Alert,\n} from '@mui/material';\nimport {\n Heading,\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 FileCode,\n} from 'lucide-react';\nimport { styled } from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { getV1Drive, postV1Drive } from '../../../api-client/api.drive/api';\nimport SearchBar from '../../../components/search-bar/search-bar';\nimport { getToken, uploadFiles } from '../../../utils/common';\nimport { getApiConfig } from '@/utils';\nimport Button from '../../../components/button/button';\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 DropzoneBox = styled(Box)(({ theme }) => ({\n border: `2px dashed ${theme.palette.grey[400]}`,\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(2),\n textAlign: 'center',\n backgroundColor: theme.palette.grey[50],\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: theme.palette.grey[100],\n },\n}));\n\nconst SidebarItem = ({ id, icon, label, imageUrl }: { id: string; icon?: React.ReactElement; label: string; imageUrl?: 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 // Pass the correct type based on the id\n type: imageUrl ? 'image' : elementType,\n imageUrl,\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 {imageUrl ? (\n <img\n src={imageUrl}\n alt={label}\n style={{ width: '100%', height: 140, objectFit: 'cover', marginRight: 8 }}\n />\n ) : (\n <>\n <ListItemIcon sx={{ minWidth: 40 }}>{icon}</ListItemIcon>\n <ListItemText primary={label} primaryTypographyProps={{ variant: 'body2' }} />\n </>\n )}\n </StyledListItem>\n );\n};\n\ninterface EditorSidebarProps {\n onHtmlUpload?: (html: string) => void;\n}\n\nconst EditorSidebar = ({ onHtmlUpload }: EditorSidebarProps) => {\n const [expanded, setExpanded] = useState('text');\n const [uploadedImages, setUploadedImages] = useState([]);\n const [uploading, setUploading] = useState(false);\n const [uploadingHtml, setUploadingHtml] = useState(false);\n const [error, setError] = useState(null);\n\n const handleChange = (panel) => (event, isExpanded) => {\n setExpanded(isExpanded ? panel : false);\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\": `${getApiConfig().s3BucketUrl}${uFiles[0]}`\n }\n // Replace with your actual API endpoint\n await postV1Drive(payload);\n\n setUploadedImages((prev) => [\n ...prev,\n {\n id: `uploaded-image-${Date.now()}-${Math.random()}`,\n url: `${getApiConfig().s3BucketUrl}${uFiles[0]}`, // Assume API returns imageUrl\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'] },\n multiple: true,\n });\n\n const onHtmlDrop = useCallback(async (acceptedFiles) => {\n if (!onHtmlUpload) return;\n \n setUploadingHtml(true);\n setError(null);\n \n try {\n const file = acceptedFiles[0];\n if (!file) return;\n\n const reader = new FileReader();\n \n reader.onload = (e) => {\n const htmlContent = e.target?.result as string;\n if (htmlContent) {\n onHtmlUpload(htmlContent);\n setUploadingHtml(false);\n }\n };\n\n reader.onerror = () => {\n setError('Failed to read HTML file. Please try again.');\n setUploadingHtml(false);\n };\n\n reader.readAsText(file);\n } catch (err) {\n setError('Failed to process HTML file. Please try again.');\n setUploadingHtml(false);\n }\n }, [onHtmlUpload]);\n\n const { getRootProps: getHtmlRootProps, getInputProps: getHtmlInputProps, isDragActive: isHtmlDragActive } = useDropzone({\n onDrop: onHtmlDrop,\n accept: { 'text/html': ['.html', '.htm'] },\n multiple: false,\n maxFiles: 1,\n });\n\n const sections = [\n {\n id: 'html-upload',\n icon: <FileCode size={18} />,\n label: 'Upload HTML',\n content: (\n <Box sx={{ mt: 2 }}>\n <DropzoneBox {...getHtmlRootProps()}>\n <input {...getHtmlInputProps()} />\n {isHtmlDragActive ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Drop the HTML file here...\n </Typography>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Drag and drop HTML file here, or click to select\n </Typography>\n )}\n {uploadingHtml && (\n <Box sx={{ mt: 1 }}>\n <CircularProgress size={20} />\n </Box>\n )}\n </DropzoneBox>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 1, display: 'block' }}>\n Upload an HTML file to replace current sections with the file content\n </Typography>\n </Box>\n ),\n },\n {\n id: 'text',\n icon: <TextIcon size={18} />,\n label: 'Text',\n content: (\n <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 1 }}>\n <SidebarItem id=\"sidebar-heading\" icon={<Heading size={20} />} label=\"Heading 1\" />\n <SidebarItem id=\"sidebar-heading-2\" icon={<Heading size={18} />} label=\"Heading 2\" />\n <SidebarItem id=\"sidebar-heading-3\" icon={<Heading size={16} />} label=\"Heading 3\" />\n <SidebarItem id=\"sidebar-heading-4\" icon={<Heading size={14} />} label=\"Heading 4\" />\n <SidebarItem id=\"sidebar-text\" icon={<TextIcon size={20} />} label=\"Body\" />\n <SidebarItem id=\"sidebar-text-block\" icon={<TextIcon size={20} />} label=\"Text Block\" />\n </Box>\n ),\n },\n {\n id: 'images',\n icon: <ImageIcon size={18} />,\n label: 'Images',\n content: (\n <Box sx={{ mt: 2 }}>\n <Box sx={{ mt: 2 }}>\n <DropzoneBox {...getRootProps()}>\n <input {...getInputProps()} />\n {isDragActive ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Drop the images here...\n </Typography>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Drag and drop images here, or click to select\n </Typography>\n )}\n {uploading && (\n <Box sx={{ mt: 1 }}>\n <CircularProgress size={20} />\n </Box>\n )}\n </DropzoneBox>\n {error && (\n <Alert severity=\"error\" sx={{ mt: 2 }}>\n {error}\n </Alert>\n )}\n {uploadedImages.length > 0 && (\n <Box sx={{ mt: 2 }}>\n <Typography variant=\"body2\" sx={{ mb: 1, color: 'grey.500' }}>\n Uploaded Images\n </Typography>\n <Grid container spacing={1}>\n {uploadedImages.map((image) => (\n <Grid item xs={6} key={image.id}>\n <SidebarItem\n id={image.id}\n label={image.name}\n imageUrl={image.url}\n />\n </Grid>\n ))}\n </Grid>\n </Box>\n )}\n </Box>\n </Box>\n ),\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 content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem\n id=\"sidebar-buttons\"\n icon={\n <Box\n sx={{\n width: 20,\n height: 20,\n bgcolor: 'success.main',\n borderRadius: 1,\n color: 'white',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '10px',\n }}\n >\n BTN\n </Box>\n }\n label=\"Buttons\"\n />\n </Box>\n ),\n },\n {\n id: 'divider',\n icon: <Divider sx={{ width: 18 }} />,\n label: 'Divider',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-divider\" icon={<Divider sx={{ width: 20 }} />} label=\"Divider\" />\n </Box>\n ),\n },\n {\n id: 'table',\n icon: <TableIcon size={18} />,\n label: 'Table',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-table\" icon={<TableIcon size={20} />} label=\"Table\" />\n </Box>\n ),\n },\n {\n id: 'signature',\n icon: <SignatureIcon size={18} />,\n label: 'Signature',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-signature\" icon={<SignatureIcon size={20} />} label=\"Signature\" />\n </Box>\n ),\n },\n {\n id: 'qr-code',\n icon: <QrCodeIcon size={18} />,\n label: 'QR Code',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-qr-code\" icon={<QrCodeIcon size={20} />} label=\"QR Code\" />\n </Box>\n ),\n },\n {\n id: 'bar-code',\n icon: <BarcodeIcon size={18} />,\n label: 'Bar Code',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-bar-code\" icon={<BarcodeIcon size={20} />} label=\"Bar Code\" />\n </Box>\n ),\n },\n ];\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 // Check if response is successful and has data\n if ('data' in response && response.data && typeof response.data === 'object' && 'drive' in response.data) {\n const files = (response.data as any).drive || [];\n setUploadedImages(files);\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n useEffect(() => {\n getDriveFiles()\n }, [])\n\n return (\n <Box\n sx={{\n bgcolor: 'background.paper',\n borderRight: 1,\n borderColor: 'grey.200',\n width: 390,\n display: 'flex',\n flexDirection: 'column',\n height: 'calc(100vh - 104px)',\n boxShadow: '0 2px 8px rgba(0,0,0,0.05)',\n fontFamily: 'Inter, system-ui, Avenir, Helvetica, Arial, sans-serif',\n }}\n >\n <Box sx={{ p: 2, borderBottom: 1, borderColor: 'grey.200' }}>\n <SearchBar\n handleSearch={(key) => console.log('Search:', key)}\n sx={{ backgroundColor: \"#fff !important\", border: \"1px solid grey\" }}\n />\n </Box>\n <Box sx={{ flexGrow: 1, overflowY: 'auto', p: 1 }}>\n {sections.map((section) => (\n <Accordion\n key={section.id}\n expanded={expanded === section.id}\n onChange={handleChange(section.id)}\n sx={{\n border: 'none',\n boxShadow: 'none',\n backgroundColor: 'transparent',\n '&:before': { display: 'none' },\n marginBottom: 1,\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon sx={{ color: 'grey.600' }} />}\n sx={{\n borderRadius: '8px',\n padding: '0 12px',\n backgroundColor: expanded === section.id ? 'grey.200' : 'grey.50',\n '&:hover': {\n backgroundColor: 'grey.50',\n },\n transition: 'background-color 0.2s ease',\n minHeight: 42,\n '& .MuiAccordionSummary-content': {\n alignItems: 'center',\n margin: '8px 0',\n },\n '&.Mui-expanded': {\n minHeight: 42,\n },\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {section.icon}\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 500, color: 'text.primary' }}\n >\n {section.label}\n </Typography>\n </Box>\n </AccordionSummary>\n <AccordionDetails sx={{ padding: '8px 16px' }}>\n {section.content}\n </AccordionDetails>\n </Accordion>\n ))}\n </Box>\n </Box>\n );\n};\n\nexport { EditorSidebar };\nexport default EditorSidebar;","/* 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 { useDroppable } from '@dnd-kit/core';\nimport EditorSection from './EditorSection';\nimport { Box, Container, Paper, Tooltip } from '@mui/material';\nimport Typography from '../../../components/typography/typography';\nimport SectionFormatPanel from './SectionFormatPanel';\nimport EditorSidebar from './EditorSidebar';\nimport { generateEmailPreview, generateHeaderFooterPreview } from '../utils/common';\nimport { EnhancedSectionData } from '../types/editor';\nimport Button from '../../../components/button/button';\nimport CheckIcon from '@mui/icons-material/Check';\nimport CloseIcon from '@mui/icons-material/Close';\n\nconst CANVAS_TYPES = {\n HEADER: 'header',\n MAIN: 'main',\n FOOTER: 'footer'\n};\n\ninterface DropPosition {\n id: string | null;\n type: 'before' | 'after' | 'inside' | 'left' | 'right';\n canvasType: string;\n}\n\ninterface EditorCanvasProps {\n sections: EnhancedSectionData[];\n headerSections: EnhancedSectionData[];\n footerSections: EnhancedSectionData[];\n activeId: string | null;\n overSection: string | null;\n selectedSection: string | null;\n onSelectSection: (id: string | null) => void;\n onUpdateSection: (id: string, data: any, canvasType?: string) => void;\n onSplitSection: (id: string, content1: string, content2: string, canvasType?: string) => void;\n onDeleteSection: (id: string, canvasType?: string) => void;\n preview: boolean;\n editHtml: boolean;\n onApplyHtmlEdit: (html: string) => void;\n onCancelHtmlEdit: () => void;\n editMode: boolean;\n isFromPreview: boolean;\n zoom?: number;\n placeholders: Record<string, any>[];\n isEditingHeaderFooter: boolean;\n relation_table: any[];\n handleSave?: () => Promise<void>;\n}\n\nconst EditorCanvas: React.FC<EditorCanvasProps> = ({\n sections,\n headerSections,\n footerSections,\n activeId,\n selectedSection,\n onSelectSection,\n onUpdateSection,\n onSplitSection,\n onDeleteSection,\n preview,\n editHtml,\n onApplyHtmlEdit,\n onCancelHtmlEdit,\n editMode,\n isFromPreview,\n placeholders,\n isEditingHeaderFooter,\n handleSave,\n relation_table,\n zoom = 100\n}) => {\n // Convert placeholders to the expected format\n const formattedPlaceholders = useMemo(() => {\n return placeholders.map((p: Record<string, any>) => ({\n value: p.value || p.key || '',\n label: p.label || p.name || String(p.value || p.key || '')\n }));\n }, [placeholders]);\n\n const { setNodeRef: setMainCanvasRef } = useDroppable({ id: 'main-canvas' });\n const { setNodeRef: setHeaderCanvasRef } = useDroppable({ id: 'header-canvas' });\n const { setNodeRef: setFooterCanvasRef } = useDroppable({ id: 'footer-canvas' });\n\n const selectedSectionData = useMemo(() => {\n return [...sections, ...headerSections, ...footerSections].find((section) => section.id === selectedSection);\n }, [sections, selectedSection]);\n\n const [dropTarget, setDropTarget] = useState<DropPosition>({\n id: null,\n type: 'inside',\n canvasType: CANVAS_TYPES.MAIN\n });\n const [isDraggingFromSidebar, setIsDraggingFromSidebar] = useState(false);\n const [isSectionEditing, setIsSectionEditing] = useState(false);\n const [htmlEditValue, setHtmlEditValue] = useState('');\n\n // Sync textarea content when entering HTML edit mode\n useEffect(() => {\n if (editHtml) {\n setHtmlEditValue(generateEmailPreview(sections, headerSections, footerSections));\n }\n }, [editHtml]);\n\n const lastUpdateTimeRef = useRef(0);\n const lastPositionRef = useRef({ x: 0, y: 0 });\n const activeIdRef = useRef<string | null>(null);\n const mainCanvasRef = useRef<HTMLDivElement | null>(null);\n const headerCanvasRef = useRef<HTMLDivElement | null>(null);\n const footerCanvasRef = useRef<HTMLDivElement | null>(null);\n\n const DEBOUNCE_MS = 50;\n const MIN_MOUSE_MOVE = 5;\n const POSITION_HYSTERESIS = 0.1;\n\n const getTargetSections = (canvasType: string) => {\n switch (canvasType) {\n case CANVAS_TYPES.HEADER:\n return headerSections;\n case CANVAS_TYPES.FOOTER:\n return footerSections;\n default:\n return sections;\n }\n };\n\n useEffect(() => {\n activeIdRef.current = activeId;\n\n if (activeId && String(activeId).includes('sidebar-')) {\n setIsDraggingFromSidebar(true);\n\n if (sections?.length > 0) {\n updateDropTarget(sections[0].id, 'before', CANVAS_TYPES.MAIN);\n } else if (headerSections?.length > 0 && isEditingHeaderFooter) {\n updateDropTarget(headerSections[0].id, 'before', CANVAS_TYPES.HEADER);\n } else if (footerSections?.length > 0 && isEditingHeaderFooter) {\n updateDropTarget(footerSections[0].id, 'before', CANVAS_TYPES.FOOTER);\n } else {\n updateDropTarget(null, 'inside', CANVAS_TYPES.MAIN);\n }\n } else if (!activeId) {\n setIsDraggingFromSidebar(false);\n setDropTarget({ id: null, type: 'inside', canvasType: CANVAS_TYPES.MAIN });\n }\n }, [activeId, sections, headerSections, footerSections, isEditingHeaderFooter]);\n\n const updateDropTarget = useCallback((id: string | null, type: DropPosition['type'], canvasType: string) => {\n const now = Date.now();\n if (now - lastUpdateTimeRef.current < DEBOUNCE_MS) return;\n\n // Prevent state updates if position hasn't actually changed\n setDropTarget(prev => {\n if (prev.id === id && prev.type === type && prev.canvasType === canvasType) {\n return prev; // Return same reference to prevent re-render\n }\n lastUpdateTimeRef.current = now;\n return { id, type, canvasType };\n });\n }, []);\n\n const handleMouseMove = useCallback((e: React.MouseEvent, canvasType: string) => {\n if (!activeIdRef.current) return;\n if (canvasType !== CANVAS_TYPES.MAIN && !isEditingHeaderFooter) return;\n\n const dx = e.clientX - lastPositionRef.current.x;\n const dy = e.clientY - lastPositionRef.current.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (distance < MIN_MOUSE_MOVE) return;\n\n lastPositionRef.current = { x: e.clientX, y: e.clientY };\n\n const elementsUnderCursor = document.elementsFromPoint(e.clientX, e.clientY);\n const sectionElement = elementsUnderCursor.find(el =>\n el.hasAttribute('data-section-id')\n );\n\n const targetSections = getTargetSections(canvasType);\n\n if (!sectionElement) {\n if (targetSections.length === 0) {\n updateDropTarget(null, 'inside', canvasType);\n } else if (isDraggingFromSidebar) {\n updateDropTarget(targetSections[targetSections.length - 1].id, 'after', canvasType);\n }\n return;\n }\n\n const sectionId = sectionElement.getAttribute('data-section-id');\n if (!sectionId) return;\n\n const sectionCanvasType = sectionElement.hasAttribute('data-canvas-type')\n ? sectionElement.getAttribute('data-canvas-type') as string\n : canvasType;\n\n const rect = sectionElement.getBoundingClientRect();\n const relativeY = e.clientY - rect.top;\n const relativeX = e.clientX - rect.left;\n const sectionHeight = rect.height;\n const sectionWidth = rect.width;\n\n const canvasSections = getTargetSections(sectionCanvasType);\n const section = canvasSections.find(s => s.id === sectionId);\n\n const isSplitGroup = sectionId.startsWith('split-group-');\n\n if (isSplitGroup || (section && section.isSplitPair)) {\n if (relativeX < sectionWidth * (0.5 - POSITION_HYSTERESIS)) {\n updateDropTarget(sectionId, 'left', sectionCanvasType);\n } else if (relativeX > sectionWidth * (0.5 + POSITION_HYSTERESIS)) {\n updateDropTarget(sectionId, 'right', sectionCanvasType);\n } else {\n updateDropTarget(sectionId, 'inside', sectionCanvasType);\n }\n } else {\n let position: DropPosition['type'] = 'inside';\n if (relativeY < sectionHeight * (0.3 - POSITION_HYSTERESIS)) {\n position = 'before';\n } else if (relativeY > sectionHeight * (0.7 + POSITION_HYSTERESIS)) {\n position = 'after';\n } else {\n position = 'inside';\n }\n updateDropTarget(sectionId, position, sectionCanvasType);\n }\n }, [isEditingHeaderFooter, isDraggingFromSidebar, updateDropTarget]);\n\n const handleMouseEnter = useCallback((e: React.MouseEvent, canvasType: string) => {\n if (!activeIdRef.current || !isDraggingFromSidebar) return;\n if (canvasType !== CANVAS_TYPES.MAIN && !isEditingHeaderFooter) return;\n\n const targetSections = getTargetSections(canvasType);\n\n if (targetSections.length > 0) {\n updateDropTarget(targetSections[0].id, 'before', canvasType);\n } else {\n updateDropTarget(null, 'inside', canvasType);\n }\n\n lastPositionRef.current = { x: e.clientX, y: e.clientY };\n }, [isDraggingFromSidebar, isEditingHeaderFooter, updateDropTarget]);\n\n const renderSectionsForCanvas = useCallback((canvasSections: EnhancedSectionData[], canvasType: string) => {\n const result: React.ReactNode[] = [];\n const processedGroups = new Set<string>();\n let i = 0;\n\n const renderDropIndicator = (key: string, isHorizontal = false) => (\n <Box\n key={key}\n sx={{\n [isHorizontal ? 'width' : 'height']: '50px',\n border: '2px dashed',\n borderColor: 'primary.main',\n borderRadius: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: 'rgba(25, 118, 210, 0.04)',\n [isHorizontal ? 'mx' : 'mb']: 2,\n opacity: 0,\n animation: 'fadeIn 0.3s ease-in-out forwards',\n '@keyframes fadeIn': {\n '0%': { opacity: 0, transform: isHorizontal ? 'translateX(-10px)' : 'translateY(-10px)' },\n '100%': { opacity: 1, transform: 'translate(0)' },\n },\n }}\n >\n <Typography type='s2' color='primary' weight='medium'>\n Drop here\n </Typography>\n </Box>\n );\n\n if (isDraggingFromSidebar &&\n canvasSections?.length > 0 &&\n dropTarget.type === 'before' &&\n dropTarget.id === canvasSections[0].id &&\n dropTarget.canvasType === canvasType) {\n result.push(renderDropIndicator(`drop-before-first-${canvasType}`));\n }\n\n while (i < canvasSections?.length) {\n const section = canvasSections[i];\n const sectionId = section.id;\n\n if (dropTarget.id === sectionId &&\n dropTarget.type === 'before' &&\n dropTarget.canvasType === canvasType &&\n !(isDraggingFromSidebar && i === 0)) {\n result.push(renderDropIndicator(`drop-before-${sectionId}-${canvasType}`));\n }\n\n if (!section.isSplitPair) {\n result.push(\n <Box\n key={section.id}\n data-section-id={section.id}\n data-canvas-type={canvasType}\n >\n <EditorSection\n section={section}\n isSelected={selectedSection === section.id}\n isDragging={activeId === section.id}\n isOver={dropTarget.id === section.id && dropTarget.type === 'inside' && dropTarget.canvasType === canvasType}\n onSelect={() => onSelectSection(section.id)}\n onUpdate={(content, extra) => {\n onUpdateSection(section.id, { content, ...extra }, canvasType);\n onSelectSection(null);\n }}\n onSplit={(content1, content2) => onSplitSection(section.id, content1, content2, canvasType)}\n onDelete={() => onDeleteSection(section.id, canvasType)}\n placeholders={formattedPlaceholders}\n setIsSectionEditing={setIsSectionEditing}\n />\n </Box>\n );\n i++;\n } else {\n const splitGroupId = section.splitGroupId;\n if (splitGroupId && processedGroups.has(splitGroupId)) {\n i++;\n continue;\n }\n\n const splitSections = canvasSections.filter(s => s.splitGroupId === splitGroupId);\n if (splitSections.length > 0) {\n if (splitGroupId) processedGroups.add(splitGroupId);\n\n // Split sections use stable keys based on section IDs and splitGroupId\n // This ensures React doesn't unnecessarily re-render or lose component state\n // when sections are reordered or updated\n const splitRow = (\n <Box\n key={`split-row-${splitGroupId}`}\n sx={{\n display: 'flex',\n gap: 2,\n mb: 2,\n bgcolor: 'rgba(0, 0, 0, 0.02)',\n p: 1,\n borderRadius: 1\n }}\n data-section-id={`split-group-${splitGroupId}`}\n data-canvas-type={canvasType}\n >\n {splitSections.map((splitSection, index) => (\n <React.Fragment key={splitSection.id}>\n {dropTarget.id === splitSection.id &&\n dropTarget.type === 'left' &&\n dropTarget.canvasType === canvasType && (\n renderDropIndicator(`drop-left-${splitSection.id}-${canvasType}`, true)\n )}\n <Box\n sx={{\n width: splitSection.splitWidth ? `${splitSection.splitWidth}%` : `${100 / splitSections.length}%`,\n transition: 'width 0.3s ease-in-out',\n }}\n data-section-id={splitSection.id}\n data-canvas-type={canvasType}\n >\n <EditorSection\n section={splitSection}\n isSelected={selectedSection === splitSection.id}\n isDragging={activeId === splitSection.id}\n isOver={dropTarget.id === splitSection.id && dropTarget.type === 'inside' && dropTarget.canvasType === canvasType}\n onSelect={() => onSelectSection(splitSection.id)}\n onUpdate={(content, extra) => {\n onUpdateSection(splitSection.id, { content, ...extra }, canvasType);\n onSelectSection(null);\n }}\n onSplit={(content1, content2) => onSplitSection(splitSection.id, content1, content2, canvasType)}\n onDelete={() => onDeleteSection(splitSection.id, canvasType)}\n placeholders={formattedPlaceholders}\n setIsSectionEditing={setIsSectionEditing}\n />\n </Box>\n {dropTarget.id === splitSection.id &&\n dropTarget.type === 'right' &&\n dropTarget.canvasType === canvasType && (\n renderDropIndicator(`drop-right-${splitSection.id}-${canvasType}`, true)\n )}\n </React.Fragment>\n ))}\n </Box>\n );\n result.push(splitRow);\n i += splitSections.length;\n } else {\n i++;\n }\n }\n\n if (dropTarget.id === sectionId &&\n dropTarget.type === 'after' &&\n dropTarget.canvasType === canvasType) {\n result.push(renderDropIndicator(`drop-after-${sectionId}-${canvasType}`));\n }\n }\n\n if ((canvasSections?.length === 0 && activeId && dropTarget.canvasType === canvasType) ||\n (canvasSections?.length === 0 && isDraggingFromSidebar && dropTarget.canvasType === canvasType)) {\n result.push(renderDropIndicator(`drop-empty-canvas-${canvasType}`));\n }\n\n return result;\n }, [\n isDraggingFromSidebar,\n dropTarget,\n activeId,\n selectedSection,\n onSelectSection,\n onUpdateSection,\n onSplitSection,\n onDeleteSection,\n formattedPlaceholders\n ]);\n\n const renderedMainSections = useMemo(() =>\n renderSectionsForCanvas(sections, CANVAS_TYPES.MAIN),\n [sections, dropTarget, activeId, isDraggingFromSidebar, selectedSection]\n );\n\n const renderedHeaderSections = useMemo(() =>\n renderSectionsForCanvas(headerSections, CANVAS_TYPES.HEADER),\n [headerSections, dropTarget, activeId, isDraggingFromSidebar, selectedSection, isEditingHeaderFooter]\n );\n\n const renderedFooterSections = useMemo(() =>\n renderSectionsForCanvas(footerSections, CANVAS_TYPES.FOOTER),\n [footerSections, dropTarget, activeId, isDraggingFromSidebar, selectedSection, isEditingHeaderFooter]\n );\n\n const renderPreview = () => {\n return (\n <Box\n sx={{\n transform: `scale(${zoom / 100})`,\n transformOrigin: 'top center',\n transition: 'transform 0.2s ease-in-out',\n bgcolor: 'white',\n p: 2,\n borderRadius: 1,\n boxShadow: 1,\n }}\n >\n <Box dangerouslySetInnerHTML={{ __html: generateEmailPreview(sections, headerSections, footerSections) }} />\n </Box>\n );\n };\n\n const renderHtmlEditor = () => (\n <Box sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n px: 2,\n py: 1,\n bgcolor: '#1e1e1e',\n borderBottom: '1px solid #333',\n borderRadius: '4px 4px 0 0',\n }}\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\n size='small'\n variant='contained'\n color='primary'\n startIcon={<CheckIcon fontSize='small' />}\n onClick={() => onApplyHtmlEdit(htmlEditValue)}\n sx={{ boxShadow: 'none' }}\n >\n Apply\n </Button>\n <Button\n size='small'\n variant='outlined'\n startIcon={<CloseIcon fontSize='small' />}\n onClick={() => onCancelHtmlEdit()}\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important`, borderColor: '#555 !important' })}\n >\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,\n width: '100%',\n minHeight: 'calc(100vh - 220px)',\n padding: '16px',\n fontFamily: '\"Fira Code\", \"Cascadia Code\", \"Consolas\", monospace',\n fontSize: '13px',\n lineHeight: '1.6',\n color: '#d4d4d4',\n backgroundColor: '#1e1e1e',\n border: 'none',\n outline: 'none',\n resize: 'none',\n boxSizing: 'border-box',\n borderRadius: '0 0 4px 4px',\n tabSize: 2,\n }}\n />\n </Box>\n );\n\n const renderCanvas = (\n title: string,\n canvasType: string,\n renderedSections: React.ReactNode[],\n setCanvasRef: (node: HTMLElement | null) => void,\n ref: React.MutableRefObject<HTMLDivElement | null>,\n visible: boolean = true\n ) => {\n if (!visible) return null;\n\n return (\n <Box sx={{ mb: 3 }}>\n {CANVAS_TYPES.MAIN === canvasType && visible && headerSections.length > 0 && (\n <>\n {/* <Accordion\n sx= {{\n boxShadow: 'none !important',\n \".MuiAccordionSummary-root\": {\n backgroundColor: '#fafafa !important',\n border: `0 !important`,\n p: 0,\n pb: 1,\n // mb: 1,\n m:0,\n minHeight: 'unset'\n }\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n > */}\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'}>Header</Typography>\n {/* </AccordionSummary> */}\n <Paper sx={{ mb: 1, boxShadow: 'none', opacity: 0.5 }} dangerouslySetInnerHTML={{ __html: generateHeaderFooterPreview(headerSections) }} />\n {/* </Accordion> */}\n </>\n )}\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'} sx={{ mb: 1 }}>{title}</Typography>\n <Paper\n ref={(node) => {\n setCanvasRef(node);\n ref.current = node;\n }}\n elevation={0}\n sx={{\n p: 4,\n border: '1px dashed',\n borderColor: isDraggingFromSidebar && dropTarget.canvasType === canvasType\n ? 'primary.main'\n : 'primary.light',\n borderRadius: 1,\n bgcolor: 'background.paper',\n position: 'relative',\n minHeight: title === 'Header' || title === 'Footer' ? '100px' : '200px',\n transition: 'border-color 0.3s ease, background-color 0.3s ease',\n '&:hover': {\n bgcolor: isDraggingFromSidebar && dropTarget.canvasType === canvasType\n ? 'rgba(25, 118, 210, 0.04)'\n : 'background.paper',\n },\n pointerEvents: (canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter\n ? 'none'\n : 'auto',\n opacity: (canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter\n ? 0.5\n : 1,\n }}\n onClick={() => {\n if ((canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter) return;\n onSelectSection(null);\n }}\n onMouseMove={(e) => handleMouseMove(e, canvasType)}\n onMouseEnter={(e) => handleMouseEnter(e, canvasType)}\n >\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {renderedSections}\n {getTargetSections(canvasType)?.length === 0 &&\n !activeId &&\n !isDraggingFromSidebar && (\n <Box sx={{ borderRadius: 1, p: 2, textAlign: 'center', color: 'text.secondary' }}>\n <Typography type='s2' color='theme.secondary.600' weight='medium'>\n Drag Sections from side panel to start building the {title.toLowerCase()}\n </Typography>\n </Box>\n )}\n </Box>\n </Paper>\n {CANVAS_TYPES.MAIN === canvasType && visible && footerSections.length > 0 && (\n <>\n {/* <Accordion\n sx= {{\n boxShadow: 'none !important',\n \".MuiAccordionSummary-root\": {\n backgroundColor: '#fafafa !important',\n border: `0 !important`,\n p: 0,\n pb: 1,\n // mb: 1,\n m:0,\n minHeight: 'unset'\n }\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n > */}\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'} sx={{ mt: 1 }}>Footer</Typography>\n {/* </AccordionSummary> */}\n <Paper sx={{ mb: 1, boxShadow: 'none', opacity: 0.5 }} dangerouslySetInnerHTML={{ __html: generateHeaderFooterPreview(footerSections) }} />\n {/* </Accordion> */}\n </>\n )}\n </Box>\n );\n };\n\n return (\n <Box sx={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n <Box sx={{ flex: 1, overflow: 'auto', height: 'calc(100vh - 104px)' }}>\n <Container maxWidth={editHtml ? false : 'lg'} sx={{ py: editHtml ? 0 : 4, height: editHtml ? '100%' : undefined }}>\n {editHtml ? (\n renderHtmlEditor()\n ) : preview ? (\n renderPreview()\n ) : (\n <>\n {renderCanvas(\n 'Header',\n CANVAS_TYPES.HEADER,\n renderedHeaderSections,\n setHeaderCanvasRef,\n headerCanvasRef,\n isEditingHeaderFooter\n )}\n {renderCanvas(\n 'Content',\n CANVAS_TYPES.MAIN,\n renderedMainSections,\n setMainCanvasRef,\n mainCanvasRef,\n !isEditingHeaderFooter\n )}\n {renderCanvas(\n 'Footer',\n CANVAS_TYPES.FOOTER,\n renderedFooterSections,\n setFooterCanvasRef,\n footerCanvasRef,\n isEditingHeaderFooter\n )}\n </>\n )}\n </Container>\n </Box >\n {!editHtml && (\n <Box\n sx={{\n width: isFromPreview ? (editMode ? 400 : 0) : 400,\n flexShrink: 0,\n position: 'sticky',\n top: 0,\n alignSelf: 'flex-start',\n height: 'calc(100vh - 104px)',\n overflowY: 'auto',\n borderLeft: '1px solid',\n borderColor: 'divider',\n bgcolor: 'background.paper',\n zIndex: 1,\n }}\n >\n {(selectedSection && !selectedSectionData?.is_edited_from_source && !isSectionEditing) ? (\n <SectionFormatPanel\n section={selectedSectionData}\n onClose={() => onSelectSection(null)}\n onUpdate={(data) => {\n if (selectedSection) {\n const canvasType = headerSections.some(s => s.id === selectedSection)\n ? CANVAS_TYPES.HEADER\n : footerSections.some(s => s.id === selectedSection)\n ? CANVAS_TYPES.FOOTER\n : CANVAS_TYPES.MAIN;\n onUpdateSection(selectedSection, data, canvasType);\n }\n }}\n placeholders={placeholders}\n handleSave={handleSave}\n relation_table={relation_table}\n />\n ) : (\n isFromPreview ? (editMode && <EditorSidebar />) : <EditorSidebar />\n )}\n </Box>\n )}\n </Box >\n );\n};\n\nexport default EditorCanvas;","/* eslint-disable no-case-declarations */\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, useCallback, useMemo } from 'react';\nimport EditorHeader from './EditorHeader';\nimport EditorCanvas from './EditorCanvas';\nimport {\n DndContext,\n DragEndEvent,\n DragOverEvent,\n DragStartEvent,\n pointerWithin,\n} from '@dnd-kit/core';\nimport { SectionData, ElementType } from '../types/editor';\nimport { v4 as uuidv4 } from 'uuid';\nimport { enqueueSnackbar } from 'notistack';\nimport { Box } from '@mui/material';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { getErrorMessage, getToken } from '../../../utils/common';\nimport { getV1FormBuilderRelationalSchemaFieldsName, getV1SubjectsId, getV1TemplateHeaderFooterCompanyIdHeaderFooter, getV1TemplatesId, patchV1TemplateHeaderFooterId, postV1TemplateHeaderFooter } from '../../../api-client/api.system-feature/api';\nimport { templateRoutes, extractStyles, generateEmailPreview, generateHeaderFooterPreview, generateInlineStyles } from '../utils/common';\nimport { initialStyles } from '../utils/constant';\nimport _ from 'lodash';\nimport formatText from '../../../utils/format-text';\nimport TemplateNameModal from \"../template-name-modal/template-name-modal\";\nimport { useDebouncedUpdate } from '../hooks/useDebouncedUpdate';\n\ninterface EnhancedSectionData extends SectionData {\n isSplitPair?: boolean;\n splitGroupId?: string;\n splitWidth?: number;\n}\n\ninterface SectionFlowEditorProps {\n modulePath: string;\n module: string;\n type: string;\n}\n\nconst SectionFlowEditor: React.FC<SectionFlowEditorProps> = ({ modulePath, module, type }) => {\n const { id, template_id } = useParams();\n const { state: locationState } = useLocation();\n\n const [sections, setSections] = useState<EnhancedSectionData[]>([]);\n const [headerSections, setHeaderSections] = useState<EnhancedSectionData[]>([]);\n const [footerSections, setFooterSections] = useState<EnhancedSectionData[]>([]);\n const [activeId, setActiveId] = useState<string | null>(null);\n const [editMode, setEditMode] = useState<true | false>(false);\n const [fromPreview, setFromPreview] = useState<boolean>(false);\n const [selectedSection, setSelectedSection] = useState<string | null>(null);\n const [overSection, setOverSection] = useState<string | null>(null);\n const [preview, setPreview] = useState<boolean>(locationState?.fromPreview ? true : false);\n const [editHtml, setEditHtml] = useState<boolean>(false);\n const [placeholders, setPlaceholders] = useState<Record<string, any>[]>([]);\n const [activeCanvas, setActiveCanvas] = useState<'main' | 'header' | 'footer'>('main');\n const [isEditingHeaderFooter, setIsEditingHeaderFooter] = useState<boolean>(false);\n const [payload, setPayload] = useState<any>(null);\n const [headerFooterId, setHeaderFooterId] = useState<string>('');\n const ROUTES = templateRoutes(modulePath, type);\n const [relation_table, setRelationTable] = useState<any[]>([]);\n const [templateData, setTemplateData] = useState<Record<string, any> | null>(null);\n\n // Optimistic update state\n const [isSaving, setIsSaving] = useState<boolean>(false);\n const [savedSnapshot, setSavedSnapshot] = useState<{\n sections: EnhancedSectionData[];\n headerSections: EnhancedSectionData[];\n footerSections: EnhancedSectionData[];\n } | null>(null);\n const [zoom, setZoom] = useState<number>(100);\n\n const handleZoomIn = () => {\n setZoom(prev => Math.min(prev + 10, 150));\n };\n\n const handleZoomOut = () => {\n setZoom(prev => Math.max(prev - 10, 50));\n };\n\n const handleResetZoom = () => {\n setZoom(100);\n };\n // History state for undo/redo functionality\n const [history, setHistory] = useState<{\n past: Array<{ sections: EnhancedSectionData[]; headerSections: EnhancedSectionData[]; footerSections: EnhancedSectionData[] }>;\n future: Array<{ sections: EnhancedSectionData[]; headerSections: EnhancedSectionData[]; footerSections: EnhancedSectionData[] }>;\n }>({\n past: [],\n future: [],\n });\n const MAX_HISTORY_SIZE = 50;\n\n // Memoize placeholders to prevent recreation on every render\n const memoizedPlaceholders = useMemo(() => placeholders, [JSON.stringify(placeholders)]);\n\n // Helper function to save current state to history\n const saveToHistory = useCallback(() => {\n setHistory((prev) => {\n const newPast = [\n ...prev.past,\n {\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n },\n ].slice(-MAX_HISTORY_SIZE); // Keep only last 50 operations\n\n return {\n past: newPast,\n future: [], // Clear future when new action is performed\n };\n });\n }, [sections, headerSections, footerSections]);\n\n // Undo handler\n const handleUndo = useCallback(() => {\n if (history.past.length === 0) return;\n\n const previous = history.past[history.past.length - 1];\n const newPast = history.past.slice(0, -1);\n\n setHistory({\n past: newPast,\n future: [\n {\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n },\n ...history.future,\n ].slice(0, MAX_HISTORY_SIZE),\n });\n\n setSections(previous.sections);\n setHeaderSections(previous.headerSections);\n setFooterSections(previous.footerSections);\n }, [history, sections, headerSections, footerSections]);\n\n // Redo handler\n const handleRedo = useCallback(() => {\n if (history.future.length === 0) return;\n\n const next = history.future[0];\n const newFuture = history.future.slice(1);\n\n setHistory({\n past: [\n ...history.past,\n {\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n },\n ].slice(-MAX_HISTORY_SIZE),\n future: newFuture,\n });\n\n setSections(next.sections);\n setHeaderSections(next.headerSections);\n setFooterSections(next.footerSections);\n }, [history, sections, headerSections, footerSections]);\n\n // Keyboard shortcuts for undo/redo\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n // Ctrl+Z or Cmd+Z for undo\n if ((event.ctrlKey || event.metaKey) && event.key === 'z' && !event.shiftKey) {\n event.preventDefault();\n handleUndo();\n }\n // Ctrl+Y or Cmd+Shift+Z for redo\n else if (\n ((event.ctrlKey || event.metaKey) && event.key === 'y') ||\n ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === 'z')\n ) {\n event.preventDefault();\n handleRedo();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleUndo, handleRedo]);\n\n const createNewSection = useCallback((type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\n let content = '';\n const styles = initialStyles[type] || {};\n const inlineStyles: string = generateInlineStyles(styles);\n\n const idPrefix = activeCanvas === 'header' && isEditingHeaderFooter ? 'header-' :\n activeCanvas === 'footer' && isEditingHeaderFooter ? 'footer-' : '';\n\n switch (type) {\n case 'heading':\n content = `<h1 style=\"${inlineStyles}\">Heading 1</h1>`;\n break;\n case 'heading-2':\n content = `<h2 style=\"${inlineStyles}\">Heading 2</h2>`;\n break;\n case 'heading-3':\n content = `<h3 style=\"${inlineStyles}\">Heading 3</h3>`;\n break;\n case 'heading-4':\n content = `<h4 style=\"${inlineStyles}\">Heading 4</h4>`;\n break;\n case 'text':\n content = `<p style=\"${inlineStyles}\">Hello, enter your text here...</p>`;\n break;\n case 'image':\n content = `<img src=\"${attrs.src}\" alt=\"${attrs.alt}\" style=\"${inlineStyles};\" />`;\n break;\n case 'buttons':\n attrs.text = attrs?.text || 'Button text';\n content = `<button style=\"${inlineStyles}\">${attrs.text}</button>`;\n break;\n case 'divider':\n content = `<hr style=\"${inlineStyles}\" />`;\n break;\n case 'table':\n const tableStyles = styles as any;\n const { border, borderStyle, borderColor, ...rest } = tableStyles;\n const tInlineStyles = generateInlineStyles(tableStyles.is_bordered ? tableStyles : rest);\n const tHeadInlineStyles: string = generateInlineStyles(tableStyles.tHead);\n const tBodyInlineStyles: string = generateInlineStyles(tableStyles.tBody);\n const thCellInlineStyles: string = generateInlineStyles({ ...tableStyles.thCells, border, borderStyle, borderColor });\n const tbCellInlineStyles: string = generateInlineStyles({ ...tableStyles.tbCells, border, borderStyle, borderColor });\n content = `\n <table style=\"${tInlineStyles}\">\n <thead style=\"${tHeadInlineStyles}\">\n <tr style=\"background-color: #f5f5f5;\">\n <th style=\"${thCellInlineStyles}\"></th>\n <th style=\"${thCellInlineStyles}\"></th>\n <th style=\"${thCellInlineStyles}\"></th>\n </tr>\n </thead>\n <tbody style=\"${tBodyInlineStyles}\">\n <tr>\n <td style=\"${tbCellInlineStyles}\"></td>\n <td style=\"${tbCellInlineStyles}\"></td>\n <td style=\"${tbCellInlineStyles}\"></td>\n </tr>\n </tbody>\n </table>\n `;\n break;\n case 'signature':\n content = `<div style=\"${inlineStyles}\">Signature: <input type='text' style=\"border:0; border-bottom:1px solid black\" class='signature-input'/></div>`;\n break;\n case 'qr-code':\n attrs.placeholder = attrs?.placeholder || '{{qr_data}}';\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\n break;\n case 'bar-code':\n attrs.placeholder = attrs?.placeholder || '{{barcode_data}}';\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\n break;\n default:\n content = '<p style=\"font-size: 16px; color: #333333; line-height: 1.5;\">New section</p>';\n }\n\n let attributes: Record<string, any> = {};\n attributes = extractStyles(content, type);\n\n return {\n id: `${idPrefix}section-${uuidv4()}`,\n content,\n type,\n attributes: { ...(attrs || {}), styles },\n is_edited_from_source: false\n };\n }, [activeCanvas, isEditingHeaderFooter]);\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n const { active } = event;\n setActiveId(active.id as string);\n }, []);\n\n const handleDragOver = useCallback((event: DragOverEvent) => {\n const { /* active, */ over } = event;\n\n if (!over) {\n setOverSection(null);\n return;\n }\n\n if (over.id === 'header-canvas' && isEditingHeaderFooter) {\n setActiveCanvas('header');\n } else if (over.id === 'footer-canvas' && isEditingHeaderFooter) {\n setActiveCanvas('footer');\n } else if (over.id === 'main-canvas') {\n setActiveCanvas('main');\n }\n\n if (over.id !== 'header-canvas' && over.id !== 'main-canvas' && over.id !== 'footer-canvas') {\n setOverSection(over.id as string);\n }\n }, [isEditingHeaderFooter]);\n\n const handleDragEnd = useCallback((event: DragEndEvent) => {\n const { active, over } = event;\n\n setActiveId(null);\n setOverSection(null);\n\n if (!over) return;\n\n let targetSections = sections;\n let setTargetSections = setSections;\n\n if ((over.id === 'header-canvas' || overSection?.startsWith('header-')) && isEditingHeaderFooter) {\n targetSections = headerSections;\n setTargetSections = setHeaderSections;\n setActiveCanvas('header');\n } else if ((over.id === 'footer-canvas' || overSection?.startsWith('footer-')) && isEditingHeaderFooter) {\n targetSections = footerSections;\n setTargetSections = setFooterSections;\n setActiveCanvas('footer');\n } else {\n setActiveCanvas('main');\n }\n\n if (active.data.current?.type === 'image') {\n saveToHistory(); // Save state before adding image section\n const imageUrl = active.data.current.imageUrl;\n const newSection: EnhancedSectionData = createNewSection('image', { src: imageUrl, alt: 'Image' });\n\n const overIndex = targetSections.findIndex((section) => section.id === over.id);\n const newSections = [...targetSections];\n\n if (over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas' || overIndex === -1) {\n setTargetSections([...targetSections, newSection]);\n } else {\n newSections.splice(overIndex, 0, newSection);\n setTargetSections(newSections);\n }\n\n enqueueSnackbar('Added uploaded image section');\n return;\n }\n\n if (typeof active.id === 'string' && active.id.startsWith('sidebar-')) {\n saveToHistory(); // Save state before adding new section\n const type = active.id.replace('sidebar-', '') as ElementType;\n const newSection = createNewSection(type);\n\n const overIndex = targetSections.findIndex((section) => section.id === over.id);\n const isOverSection = overIndex !== -1;\n\n if (!isOverSection || over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas') {\n setTargetSections([...targetSections, newSection]);\n } else {\n const targetSection = targetSections[overIndex];\n const isEmpty =\n !targetSection.content ||\n targetSection.content.includes('Click to add') ||\n targetSection.content.includes('enter your text');\n\n if (isEmpty) {\n const updatedSections = [...targetSections];\n updatedSections[overIndex] = {\n ...targetSection,\n type,\n content: newSection.content,\n };\n setTargetSections(updatedSections);\n // enqueueSnackbar(`Changed section to ${type}`);\n } else {\n const updatedSections = [...targetSections];\n updatedSections.splice(overIndex, 0, newSection);\n setTargetSections(updatedSections);\n // enqueueSnackbar(`Added new ${type} section`);\n }\n }\n return;\n }\n\n if (\n active.id !== over.id &&\n typeof active.id === 'string' &&\n typeof over.id === 'string'\n ) {\n saveToHistory(); // Save state before reordering sections\n let sourceSections: EnhancedSectionData[] = [];\n let sourceSetSections: React.Dispatch<React.SetStateAction<EnhancedSectionData[]>> | null = null;\n let canvasId = '';\n\n if (active.id.startsWith('header-') && isEditingHeaderFooter) {\n sourceSections = headerSections;\n sourceSetSections = setHeaderSections;\n canvasId = 'header-canvas';\n } else if (active.id.startsWith('footer-') && isEditingHeaderFooter) {\n sourceSections = footerSections;\n sourceSetSections = setFooterSections;\n canvasId = 'footer-canvas';\n } else {\n sourceSections = sections;\n sourceSetSections = setSections;\n canvasId = 'main-canvas';\n }\n\n const cleanActiveId = active.id.replace(/^(header-|footer-)/, '');\n\n const oldIndex = sourceSections.findIndex((section) =>\n section.id === cleanActiveId || section.id === active.id\n );\n\n let newIndex = targetSections.findIndex((section) =>\n section.id === String(over.id).replace(/^(header-|footer-)/, '')\n );\n\n if (over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas') {\n newIndex = targetSections.length;\n }\n\n if (oldIndex !== -1 && newIndex !== -1) {\n if (sourceSections === targetSections) {\n const newSections = [...sourceSections];\n const [movedSection] = newSections.splice(oldIndex, 1);\n\n if (movedSection.isSplitPair && movedSection.splitGroupId) {\n const groupId = movedSection.splitGroupId;\n const groupSections = [movedSection, ...sourceSections.filter(\n s => s.splitGroupId === groupId && s.id !== movedSection.id\n )];\n\n const cleaned = newSections.filter(s => s.splitGroupId !== groupId);\n cleaned.splice(newIndex, 0, ...groupSections);\n sourceSetSections(cleaned);\n } else {\n newSections.splice(newIndex, 0, movedSection);\n sourceSetSections(newSections);\n }\n } else {\n const originalSection = sourceSections[oldIndex];\n\n const newSourceSections = [...sourceSections];\n newSourceSections.splice(oldIndex, 1);\n sourceSetSections(newSourceSections);\n\n const newTargetSections = [...targetSections];\n\n const movedSection = { ...originalSection };\n\n if ((over.id === 'header-canvas' || over.id.startsWith('header-')) && isEditingHeaderFooter) {\n if (!movedSection.id.startsWith('header-')) {\n movedSection.id = `header-${movedSection.id}`;\n }\n } else if ((over.id === 'footer-canvas' || over.id.startsWith('footer-')) && isEditingHeaderFooter) {\n if (!movedSection.id.startsWith('footer-')) {\n movedSection.id = `footer-${movedSection.id}`;\n }\n } else {\n movedSection.id = movedSection.id.replace(/^(header-|footer-)/, '');\n }\n\n newTargetSections.splice(newIndex, 0, movedSection);\n setTargetSections(newTargetSections);\n }\n }\n }\n }, [sections, headerSections, footerSections, overSection, isEditingHeaderFooter, activeCanvas, createNewSection, saveToHistory]);\n\n const getRelevantSections = useCallback((canvasType: string) => {\n if (canvasType === 'header' && isEditingHeaderFooter) return headerSections;\n if (canvasType === 'footer' && isEditingHeaderFooter) return footerSections;\n return sections;\n }, [sections, headerSections, footerSections, isEditingHeaderFooter]);\n\n const getRelevantSetSections = useCallback((canvasType: string) => {\n if (canvasType === 'header' && isEditingHeaderFooter) return setHeaderSections;\n if (canvasType === 'footer' && isEditingHeaderFooter) return setFooterSections;\n return setSections;\n }, [isEditingHeaderFooter]);\n\n // Internal update function (not debounced)\n const updateSectionImmediate = useCallback((id: string, data: Partial<EnhancedSectionData>, canvasType: string) => {\n const relevantSections = getRelevantSections(canvasType);\n const relevantSetSections = getRelevantSetSections(canvasType);\n\n const cleanId = id.replace(/^(header-|footer-)/, '');\n\n relevantSetSections(\n relevantSections.map((section) =>\n section.id === cleanId || section.id === id ? { ...section, ...data } : section\n )\n );\n }, [getRelevantSections, getRelevantSetSections]);\n\n // Debounced version for section content updates (300ms delay)\n const handleUpdateSectionDebounced = useDebouncedUpdate(updateSectionImmediate, 300);\n\n // Main handler that decides whether to debounce\n const handleUpdateSection = useCallback((id: string, data: Partial<EnhancedSectionData>, canvasType: string) => {\n // Only debounce content updates, apply other updates immediately\n if (data.content !== undefined && Object.keys(data).length === 1) {\n handleUpdateSectionDebounced(id, data, canvasType);\n } else {\n updateSectionImmediate(id, data, canvasType);\n }\n }, [updateSectionImmediate, handleUpdateSectionDebounced]);\n\n const handleSplitSection = useCallback((id: string, content1: string, content2: string, canvasType: string) => {\n saveToHistory(); // Save state before splitting section\n\n const relevantSections = getRelevantSections(canvasType);\n const relevantSetSections = getRelevantSetSections(canvasType);\n\n const cleanId = id.replace(/^(header-|footer-)/, '');\n\n const index = relevantSections.findIndex((section) => section.id === cleanId || section.id === id);\n if (index === -1) return;\n\n const section = relevantSections[index];\n const newSections = [...relevantSections];\n\n const sectionPrefix = canvasType === 'header' ? 'header-' : canvasType === 'footer' ? 'footer-' : '';\n\n if (section.isSplitPair && section.splitGroupId) {\n const splitGroupId = section.splitGroupId;\n const splitSections = newSections.filter(s => s.splitGroupId === splitGroupId);\n const totalSections = splitSections.length + 1;\n const newWidth = 100 / totalSections;\n\n newSections[index] = {\n ...section,\n content: content1,\n splitWidth: newWidth\n };\n\n const newSection: EnhancedSectionData = {\n id: `${sectionPrefix}section-${uuidv4()}`,\n content: content2,\n type: section.type,\n isSplitPair: true,\n splitGroupId: splitGroupId,\n splitWidth: newWidth,\n attributes: section.attributes,\n is_edited_from_source: false\n };\n\n newSections.splice(index + 1, 0, newSection);\n\n for (let i = 0; i < newSections.length; i++) {\n if (newSections[i].splitGroupId === splitGroupId) {\n newSections[i].splitWidth = newWidth;\n }\n }\n } else {\n const splitGroupId = uuidv4();\n const initialWidth = 50;\n\n newSections[index] = {\n ...section,\n content: content1,\n isSplitPair: true,\n splitGroupId,\n splitWidth: initialWidth\n };\n\n const newSection: EnhancedSectionData = {\n id: `${sectionPrefix}section-${uuidv4()}`,\n content: content2,\n type: section.type,\n isSplitPair: true,\n splitGroupId,\n splitWidth: initialWidth,\n attributes: section.attributes,\n is_edited_from_source: false\n };\n\n newSections.splice(index + 1, 0, newSection);\n }\n\n relevantSetSections(newSections);\n // enqueueSnackbar('Section split successfully');\n }, [getRelevantSections, getRelevantSetSections, activeCanvas, isEditingHeaderFooter, saveToHistory]);\n\n const handleDeleteSection = useCallback((id: string, canvasType: string) => {\n saveToHistory(); // Save state before deleting section\n\n const relevantSections = getRelevantSections(canvasType);\n const relevantSetSections = getRelevantSetSections(canvasType);\n\n const cleanId = id.replace(/^(header-|footer-)/, '');\n\n const sectionToDelete = relevantSections.find(s => s.id === cleanId || s.id === id);\n\n if (!sectionToDelete) return;\n\n if (sectionToDelete.isSplitPair && sectionToDelete.splitGroupId) {\n const splitSections = relevantSections.filter(s => s.splitGroupId === sectionToDelete.splitGroupId);\n\n if (splitSections.length <= 2) {\n const remainingSection = splitSections.find(s => s.id !== cleanId && s.id !== id);\n if (remainingSection) {\n remainingSection.isSplitPair = false;\n remainingSection.splitGroupId = undefined;\n remainingSection.splitWidth = undefined;\n }\n relevantSetSections(relevantSections.filter(s => s.id !== cleanId && s.id !== id));\n } else {\n const remainingSplitSections = splitSections.filter(s => s.id !== cleanId && s.id !== id);\n const newWidth = 100 / remainingSplitSections.length;\n\n const updatedSections = relevantSections.filter(section => section.id !== cleanId && section.id !== id).map(section => {\n if (section.splitGroupId === sectionToDelete.splitGroupId) {\n return { ...section, splitWidth: newWidth };\n }\n return section;\n });\n\n relevantSetSections(updatedSections);\n // enqueueSnackbar('Section removed from split group');\n }\n } else {\n relevantSetSections(relevantSections.filter(section => section.id !== cleanId && section.id !== id));\n // enqueueSnackbar('Section deleted');\n }\n\n if (selectedSection === id) {\n setSelectedSection(null);\n }\n }, [getRelevantSections, getRelevantSetSections, selectedSection, saveToHistory]);\n\n useEffect(() => {\n if (locationState?.fromPreview) {\n setEditMode(locationState?.isViewOnly ? false : true);\n setFromPreview(true);\n }\n document.body.style.overflow = 'hidden';\n const main = document.getElementsByTagName('main')?.[0];\n if (main) {\n main.style.marginTop = '4.125rem';\n }\n return () => {\n document.body.removeAttribute('style');\n }\n }, []);\n\n const getData = async () => {\n if (id) {\n const token = getToken();\n const subjRes = await getV1SubjectsId({\n ...token,\n 'x-timezone': token['x-timezone']?.toString() || '',\n id\n });\n\n if ('data' in subjRes && subjRes.data && typeof subjRes.data === 'object' && 'resource' in subjRes.data) {\n const resource = (subjRes.data as any).resource;\n const token2 = getToken();\n const fRes = await getV1FormBuilderRelationalSchemaFieldsName({\n ...token2,\n 'x-timezone': token2['x-timezone']?.toString() || '',\n name: resource,\n });\n const schemaFields = ('data' in fRes && fRes.data && typeof fRes.data === 'object' && 'fields' in fRes.data)\n ? ((fRes.data as any).fields || [])\n : [];\n const relation_table = ('data' in fRes && fRes.data && typeof fRes.data === 'object' && 'relational_fields' in fRes.data)\n ? ((fRes.data as any).relational_fields || [])\n : [];\n\n // Process main schema fields\n const updatedFields = schemaFields\n .map((field) => ({\n ...field,\n key: field.key.replace('__replaceKey', ''),\n }))\n .filter((field) => !field.is_inner_join && field.alias !== 'id' && !field?.alias?.includes('_id'));\n\n // Process relation tables - separate array and object types\n const arrayRelationTables = [];\n const objectRelationFields = [];\n\n relation_table.forEach((table) => {\n if (!table) return;\n\n const updatedTableFields = (table.fields || []).map((field) => {\n const updatedField = {\n ...field,\n key: field.key.replace('__replaceKey', ''),\n alias: field?.templateKey ? field?.templateKey : field.alias,\n };\n\n // Prepend dataKey to field keys for object types\n if (table.type === 'object' && table.dataKey) {\n updatedField.key = `${table.dataKey}.${updatedField.key}`;\n }\n\n return updatedField;\n }).filter(\n (field) =>\n !field.is_inner_join &&\n field.alias !== 'id' &&\n !field.alias.includes('_id')\n );\n\n const uniqueTableFields = _.differenceWith(\n updatedTableFields,\n updatedTableFields,\n (fieldA: any, fieldB: any) => fieldA.key === fieldB?.joinKey\n );\n\n const tableFields = uniqueTableFields.map((f: any) => {\n const field = formatText(f.alias.replace(/_data$/, '').replace(/_/g, ' '));\n const value = table.type === 'object' && table.dataKey\n ? `${table.dataKey}.${f.alias.replace(/ /g, '_').toLowerCase()}`\n : f.alias.replace(/ /g, '_').toLowerCase();\n\n return {\n label: field,\n value: value\n };\n });\n\n if (table.type === 'object') {\n // Merge object type fields into main fields\n objectRelationFields.push(...tableFields);\n } else {\n // Keep array types separate\n arrayRelationTables.push({\n ...table,\n fields: tableFields\n });\n }\n });\n\n // Combine main fields and object relation fields\n const allFields = [\n ...updatedFields.map((f) => {\n const n = f?.alias || f?.key\n const field = formatText(n.replace(/_data$/, '').replace(/_/g, ' '));\n return {\n label: field,\n value: field.replace(/ /g, '_').toLowerCase()\n };\n }),\n ...objectRelationFields\n ];\n\n const uniqueAllFields = _.uniqBy(allFields, 'value');\n\n setPlaceholders(uniqueAllFields);\n setRelationTable(arrayRelationTables);\n }\n }\n\n // Rest of the function remains the same...\n if (template_id) {\n const token3 = getToken();\n const res = await getV1TemplatesId({\n ...token3,\n 'x-timezone': token3['x-timezone']?.toString() || '',\n id: template_id\n });\n const templateSections = ('data' in res && res.data && typeof res.data === 'object' && 'sections' in res.data)\n ? ((res.data as any).sections || [])\n : [];\n const mainSecs = templateSections.map((s: any) => ({\n ...s,\n id: s.id || `section-${uuidv4()}`,\n attributes: {\n ...s.attributes,\n styles: s.attributes?.styles || initialStyles[s.type] || {}\n }\n }));\n setTemplateData(('data' in res && res.data) ? res.data as any : null);\n\n setSections(mainSecs);\n }\n\n if (locationState?.company_id) {\n const token4 = getToken();\n const res = await getV1TemplateHeaderFooterCompanyIdHeaderFooter({\n ...token4,\n 'x-timezone': token4['x-timezone']?.toString() || '',\n company_id: locationState.company_id,\n });\n const resData = ('data' in res && res.data && typeof res.data === 'object') ? res.data as any : null;\n setHeaderFooterId(resData?._id || '');\n const headerSections = resData?.header_sections || [];\n const footerSections = resData?.footer_sections || [];\n const headerSecs = headerSections.map((s) => ({\n ...s,\n id: s.id || `header-section-${uuidv4()}`,\n attributes: {\n ...s.attributes,\n styles: s.attributes?.styles || initialStyles[s.type] || {}\n }\n }));\n const footerSecs = footerSections.map((s) => ({\n ...s,\n id: s.id || `footer-section-${uuidv4()}`,\n attributes: {\n ...s.attributes,\n styles: s.attributes?.styles || initialStyles[s.type] || {}\n }\n }));\n\n setHeaderSections(headerSecs);\n setFooterSections(footerSecs);\n }\n };\n\n useEffect(() => {\n getData();\n }, [template_id, id, locationState?.company_id]);\n\n const handleApplyHtmlEdit = useCallback((html: string) => {\n saveToHistory(); // Save state before applying HTML edit\n const newSection: EnhancedSectionData = {\n id: `section-${uuidv4()}`,\n content: html,\n type: 'text',\n is_edited_from_source: true,\n };\n setSections([newSection]);\n setEditHtml(false);\n }, [saveToHistory]);\n\n const handleCancelHtmlEdit = useCallback(() => {\n setEditHtml(false);\n }, []);\n\n const handleSave = useCallback(async () => {\n if (sections.length === 0 && headerSections.length === 0 && footerSections.length === 0) {\n enqueueSnackbar('Please add at least one section');\n return;\n }\n\n // Save snapshot for potential rollback\n setSavedSnapshot({\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n });\n\n const mainHtml = generateEmailPreview(sections, headerSections, footerSections, true);\n try {\n const p = {\n ...getToken(),\n ...(template_id ? { id: template_id } : { subject_id: id, is_default: false, company_id: locationState.company_id }),\n sections: sections.map(s => ({ ...s, attributes: s.attributes })),\n contents: mainHtml\n }\n setPayload(p);\n } catch (error) {\n const m = getErrorMessage(error?.message);\n enqueueSnackbar(m, { variant: 'error' });\n setSavedSnapshot(null);\n }\n }, [sections, headerSections, footerSections, template_id, id, locationState]);\n\n const handleSaveHeaderFooter = useCallback(async () => {\n if (sections.length === 0 && headerSections.length === 0 && footerSections.length === 0) {\n enqueueSnackbar('Please add at least one section', { variant: 'error' });\n return;\n } else if (!locationState?.company_id) {\n enqueueSnackbar('Company has not been selected', { variant: 'error' });\n return;\n }\n\n // Save snapshot for potential rollback\n setSavedSnapshot({\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n });\n\n // Show loading state immediately (optimistic update)\n setIsSaving(true);\n\n const headerHtml = generateHeaderFooterPreview(headerSections, 'header');\n const footerHtml = generateHeaderFooterPreview(footerSections, 'footer');\n const combinedHtml = `${headerHtml}${footerHtml}`;\n\n // Convert splitWidth from number to string for API\n const convertSectionForApi = (section: EnhancedSectionData) => ({\n id: section.id,\n content: section.content,\n type: section.type,\n isSplitPair: section.isSplitPair,\n splitGroupId: section.splitGroupId,\n splitWidth: section.splitWidth !== undefined ? String(section.splitWidth) : undefined,\n attributes: section.attributes,\n });\n\n const convertedHeaderSections = headerSections.map(convertSectionForApi);\n const convertedFooterSections = footerSections.map(convertSectionForApi);\n\n try {\n if (headerFooterId) {\n const token5 = getToken();\n const res = await patchV1TemplateHeaderFooterId({\n ...token5,\n 'x-timezone': token5['x-timezone']?.toString() || '',\n id: headerFooterId,\n header_sections: convertedHeaderSections,\n footer_sections: convertedFooterSections,\n contents: combinedHtml\n });\n if (res.status_code === 200) {\n enqueueSnackbar('Header/Footer saved successfully', { variant: 'success' });\n setIsEditingHeaderFooter(false);\n setSavedSnapshot(null);\n }\n } else {\n const token6 = getToken();\n const res = await postV1TemplateHeaderFooter({\n ...token6,\n 'x-timezone': token6['x-timezone']?.toString() || '',\n header_sections: convertedHeaderSections,\n footer_sections: convertedFooterSections,\n contents: combinedHtml,\n company_id: locationState.company_id\n });\n if (res.status_code === 200) {\n enqueueSnackbar('Header/Footer saved successfully', { variant: 'success' });\n setIsEditingHeaderFooter(false);\n setSavedSnapshot(null);\n }\n }\n } catch (error) {\n const m = getErrorMessage(error?.message);\n enqueueSnackbar(m, { variant: 'error' });\n\n // Revert to saved snapshot on error\n if (savedSnapshot) {\n setSections(savedSnapshot.sections);\n setHeaderSections(savedSnapshot.headerSections);\n setFooterSections(savedSnapshot.footerSections);\n enqueueSnackbar('Changes reverted due to save error', { variant: 'warning' });\n }\n } finally {\n setIsSaving(false);\n setSavedSnapshot(null);\n }\n }, [sections, headerSections, footerSections, headerFooterId, locationState, savedSnapshot]);\n\n const toggleHeaderFooterEditing = useCallback(() => {\n setIsEditingHeaderFooter(!isEditingHeaderFooter);\n if (isEditingHeaderFooter) {\n setActiveCanvas('main');\n }\n }, [isEditingHeaderFooter]);\n\n // Handle save success from TemplateNameModal\n const handleSaveSuccess = useCallback(() => {\n setSavedSnapshot(null);\n setPayload(null);\n }, []);\n\n // Handle save error from TemplateNameModal\n const handleSaveError = useCallback(() => {\n // Revert to saved snapshot on error\n if (savedSnapshot) {\n setSections(savedSnapshot.sections);\n setHeaderSections(savedSnapshot.headerSections);\n setFooterSections(savedSnapshot.footerSections);\n enqueueSnackbar('Changes reverted due to save error', { variant: 'warning' });\n }\n\n setSavedSnapshot(null);\n setPayload(null);\n }, [savedSnapshot]);\n\n const toggleEditMode = () => {\n setEditMode(!editMode);\n if (editMode) {\n setPreview(true);\n } else {\n setPreview(false);\n }\n }\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', height: '100vh' }}>\n <EditorHeader\n fromPreview={fromPreview}\n onPreview={() => setPreview(!preview)}\n onSave={handleSave}\n onEditModeChange={toggleEditMode}\n zoom={zoom}\n onZoomIn={handleZoomIn}\n onZoomOut={handleZoomOut}\n onResetZoom={handleResetZoom}\n editMode={editMode}\n preview={preview}\n editHtml={editHtml}\n onEditHtml={() => setEditHtml(!editHtml)}\n sections={sections}\n isEditingHeaderFooter={isEditingHeaderFooter}\n setIsEditingHeaderFooter={toggleHeaderFooterEditing}\n onSaveHeaderFooter={handleSaveHeaderFooter}\n modulePath={modulePath}\n type={type}\n mode={template_id ? 'edit' : 'add'}\n templateData={templateData}\n isSaving={isSaving}\n />\n <Box sx={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n <DndContext\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n collisionDetection={pointerWithin}\n >\n <EditorCanvas\n sections={sections}\n headerSections={headerSections}\n footerSections={footerSections}\n activeId={activeId}\n overSection={overSection}\n selectedSection={selectedSection}\n onSelectSection={setSelectedSection}\n onUpdateSection={handleUpdateSection}\n onSplitSection={handleSplitSection}\n onDeleteSection={handleDeleteSection}\n preview={preview}\n editHtml={editHtml}\n onApplyHtmlEdit={handleApplyHtmlEdit}\n onCancelHtmlEdit={handleCancelHtmlEdit}\n zoom={zoom}\n editMode={editMode}\n isFromPreview={fromPreview}\n handleSave={handleSave}\n placeholders={memoizedPlaceholders}\n isEditingHeaderFooter={isEditingHeaderFooter}\n relation_table={relation_table}\n />\n </DndContext>\n </Box>\n {payload !== null &&\n <TemplateNameModal\n isOpen={payload !== null}\n setIsOpen={() => setPayload(null)}\n payload={payload}\n templateRoutes={ROUTES}\n mode={template_id ? 'edit' : 'add'}\n templateData={templateData}\n onSaveSuccess={handleSaveSuccess}\n onSaveError={handleSaveError}\n isSaving={isSaving}\n />\n }\n </Box>\n );\n};\n\nexport default SectionFlowEditor;"],"names":["templateRoutes","jsx","AppBar","jsxs","Toolbar","Box","Link","RouterLink","Typography","Fragment","Stack","IconButton","ZoomOut","ZoomIn","Divider","ZoomOutMap","Button","Edit","EyeOff","Eye","lazy","useCKEditorStyleExtractor","useDraggable","useDroppable","useState","useRef","useDebouncedUpdate","useMemo","useCallback","Suspense","Skeleton","MenuItem","Paper","FormControlLabel","Checkbox","FormControl","Select","Save","Fade","Chip","Trash","EditSectionModal","StyledToggleButtonGroup","styled","ToggleButtonGroup","toggleButtonGroupClasses","Tooltip","ToggleButton","TextControls","debounce","TextField","InputAdornment","ColorPickerInput","Slider","_","Android12Switch","Switch","useEffect","Grid","formatText","styles","MuiAccordion","table","_a","_b","_c","_d","Tabs","Tab","SearchableSelect","row","Alert","createElement","AccordionSummary","AccordionDetails","Table","TableHead","TableRow","TableCell","TableBody","Dialog","DialogTitle","DialogContent","DialogActions","extractStyles","initialStyles","generateInlineStyles","section","getInitialSectionData","CloseIcon","ListItem","ListItemIcon","ListItemText","uploadFiles","getToken","getApiConfig","postV1Drive","useDropzone","FileCode","CircularProgress","TextIcon","Heading","ImageIcon","TableIcon","SignatureIcon","QrCodeIcon","BarcodeIcon","getV1Drive","error","SearchBar","Accordion","generateEmailPreview","EditorSection","generateHeaderFooterPreview","Container","module","useParams","useLocation","type","uuidv4","enqueueSnackbar","id","getV1SubjectsId","getV1FormBuilderRelationalSchemaFieldsName","relation_table","getV1TemplatesId","getV1TemplateHeaderFooterCompanyIdHeaderFooter","headerSections","footerSections","getErrorMessage","patchV1TemplateHeaderFooterId","postV1TemplateHeaderFooter","DndContext","pointerWithin","TemplateNameModal"],"mappings":"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"}
1
+ {"version":3,"file":"SectionFlowEditor-Bo7czbNc.js","sources":["../../src/views/template-editor/components/EditorHeader.tsx","../../src/views/template-editor/components/EditorSection.tsx","../../src/views/template-editor/components/controllers/AlignmentControl.tsx","../../src/views/template-editor/components/controllers/TextControls.tsx","../../src/views/template-editor/components/controllers/ButtonControls.tsx","../../src/views/template-editor/components/controllers/border-control.tsx","../../src/views/template-editor/components/controllers/ImageControls.tsx","../../src/views/template-editor/components/controllers/DividerControls.tsx","../../src/views/template-editor/components/controllers/TableControls.tsx","../../src/views/template-editor/components/controllers/SignatureControls.tsx","../../src/views/template-editor/components/controllers/CodeControls.tsx","../../src/views/template-editor/components/SectionFormatPanel.tsx","../../src/views/template-editor/components/EditorSidebar.tsx","../../src/views/template-editor/components/EditorCanvas.tsx","../../src/views/template-editor/components/SectionFlowEditor.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport {\n AppBar,\n Toolbar,\n Box,\n Link,\n Stack,\n IconButton,\n Divider,\n} from '@mui/material';\nimport { ZoomIn, ZoomOut, ZoomOutMap } from '@mui/icons-material';\nimport Button from '../../../components/button/button';\nimport Typography from '../../../components/typography/typography';\nimport { Edit, Eye, EyeOff } from '../../../components/icons';\nimport CodeOutlinedIcon from '@mui/icons-material/CodeOutlined';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { templateRoutes } from '../utils/common';\nimport { EnhancedSectionData } from '../types/editor';\n\ninterface EditorHeaderProps {\n onSave: () => void;\n onPreview: () => void;\n preview: boolean;\n editHtml: boolean;\n onEditHtml: () => void;\n onEditModeChange?: () => void;\n sections: EnhancedSectionData[];\n isEditingHeaderFooter: boolean;\n setIsEditingHeaderFooter: (value: boolean) => void;\n onSaveHeaderFooter: (value: boolean) => void;\n modulePath: string;\n type: string;\n mode: 'add' | 'edit';\n templateData: Record<string, any> | null;\n isSaving?: boolean;\n editMode: boolean;\n fromPreview?: boolean;\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onResetZoom: () => void;\n}\n\nconst EditorHeader: React.FC<EditorHeaderProps> = ({\n onSave,\n onPreview,\n preview,\n editHtml,\n onEditHtml,\n sections,\n isEditingHeaderFooter,\n onEditModeChange,\n setIsEditingHeaderFooter,\n onSaveHeaderFooter,\n modulePath,\n type,\n mode = 'add',\n templateData,\n isSaving = false,\n editMode,\n fromPreview = false,\n zoom,\n onZoomIn,\n onZoomOut,\n onResetZoom,\n}) => {\n const ROUTES = templateRoutes(modulePath, type);\n return (\n <AppBar\n position=\"static\"\n color=\"default\"\n elevation={0}\n sx={{\n borderColor: 'divider',\n bgcolor: 'background.paper'\n }}\n >\n <Toolbar variant=\"dense\" sx={{ justifyContent: 'space-between', p: 3 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Link\n component={RouterLink}\n to={ROUTES.LIST}\n underline=\"hover\"\n color=\"text.secondary\"\n sx={{ fontSize: '0.875rem' }}\n >\n <Typography type=\"s5\" color='theme.secondary.800'>{type === 'email' ? 'Emails' : 'PDF'}</Typography>\n </Link>\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>/</Typography>\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>\n {mode === 'add' ? 'Add New' : editMode ? 'Edit' : 'Preview'} Template\n </Typography>\n {templateData && templateData?.name &&\n <>\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>/</Typography>\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>\n {templateData?.name}\n </Typography>\n </>\n }\n </Box>\n\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {/* Zoom Controls - Only show in preview mode */}\n {preview && (\n <>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n borderRadius: 1,\n bgcolor: 'rgba(74, 192, 140, 0.08)',\n border: '1px solid rgba(74, 192, 140, 0.2)',\n }}\n >\n <IconButton\n size=\"small\"\n onClick={onZoomOut}\n disabled={zoom <= 50}\n color='#4AC08C'\n sx={{\n color: '#4AC08C',\n '&:hover': {\n bgcolor: 'rgba(74, 192, 140, 0.15)',\n },\n '&.Mui-disabled': {\n opacity: 0.3,\n color: '#4AC08C'\n }\n }}\n >\n <ZoomOut fontSize=\"small\" />\n </IconButton>\n\n <Typography\n type=\"s5\"\n weight='medium'\n sx={{\n minWidth: '50px',\n textAlign: 'center',\n color: '#4AC08C'\n }}\n >\n {zoom}%\n </Typography>\n\n <IconButton\n size=\"small\"\n onClick={onZoomIn}\n disabled={zoom >= 150}\n sx={{\n color: '#4AC08C',\n '&:hover': {\n bgcolor: 'rgba(74, 192, 140, 0.15)',\n },\n '&.Mui-disabled': {\n opacity: 0.3,\n color: '#4AC08C'\n }\n }}\n >\n <ZoomIn fontSize=\"small\" />\n </IconButton>\n\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{\n mx: 0.5,\n bgcolor: 'rgba(74, 192, 140, 0.3)'\n }}\n />\n\n <IconButton\n size=\"small\"\n onClick={onResetZoom}\n disabled={zoom === 100}\n title=\"Reset Zoom\"\n sx={{\n color: '#4AC08C',\n '&:hover': {\n bgcolor: 'rgba(74, 192, 140, 0.15)',\n },\n '&.Mui-disabled': {\n opacity: 0.3,\n color: '#4AC08C'\n }\n }}\n >\n <ZoomOutMap fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 1 }} />\n </>\n )}\n\n {!fromPreview ? (\n <>\n <Button\n onClick={() => setIsEditingHeaderFooter(true)}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={<Edit fontSize='small' />}\n disabled={preview}\n >\n Edit Header/Footer\n </Button>\n <Button\n onClick={onPreview}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={preview ? <EyeOff fontSize='small' /> : <Eye fontSize='small' />}\n disabled={!sections?.length}\n >\n Preview\n </Button>\n <Button\n onClick={onEditHtml}\n size=\"small\"\n variant={editHtml ? 'contained' : 'outlined'}\n color={editHtml ? 'primary' : 'inherit'}\n sx={(theme) => ({ color: editHtml ? undefined : `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={<CodeOutlinedIcon fontSize='small' />}\n disabled={!sections?.length || preview}\n >\n {editHtml ? 'Exit HTML Edit' : 'Edit HTML'}\n </Button>\n <Button\n variant=\"contained\"\n onClick={onSave}\n size=\"small\"\n sx={{ boxShadow: 'none' }}\n disabled={!sections?.length || isSaving}\n >\n {isSaving ? 'Saving...' : 'Save'}\n </Button>\n </>\n ) : (\n editMode ? (\n <>\n {isEditingHeaderFooter ? (\n <>\n <Button\n onClick={() => setIsEditingHeaderFooter(false)}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n >\n Cancel Editing\n </Button>\n <Button\n variant=\"contained\"\n onClick={onSaveHeaderFooter}\n size=\"small\"\n sx={{ boxShadow: 'none' }}\n >\n Save Changes\n </Button>\n </>\n ) : (\n <>\n <Button\n onClick={() => setIsEditingHeaderFooter(true)}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={<Edit fontSize='small' />}\n disabled={preview}\n >\n Edit Header/Footer\n </Button>\n <Button\n onClick={onPreview}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n startIcon={preview ? <EyeOff fontSize='small' /> : <Eye fontSize='small' />}\n disabled={!sections?.length}\n >\n Preview\n </Button>\n <Button\n variant=\"contained\"\n onClick={onSave}\n size=\"small\"\n sx={{ boxShadow: 'none' }}\n disabled={!sections?.length}\n >\n Save\n </Button>\n <Button\n onClick={() => onEditModeChange && onEditModeChange()}\n size=\"small\"\n variant='outlined'\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\n >\n Cancel\n </Button>\n </>\n )}\n </>\n ) : (\n <Button\n variant=\"contained\"\n onClick={() => onEditModeChange && onEditModeChange()}\n size=\"small\"\n sx={{ boxShadow: 'none' }}\n startIcon={<Edit fontSize='small' />}\n disabled={!sections?.length}\n >\n Edit\n </Button>\n )\n )}\n </Stack>\n </Toolbar>\n </AppBar>\n );\n};\n\nexport default EditorHeader;","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { useRef, useState, lazy, Suspense, useCallback, useMemo } from 'react';\nimport { useDraggable, useDroppable } from '@dnd-kit/core';\nimport {\n\tBox,\n\tPaper,\n\tMenuItem,\n\tFormControl,\n\tIconButton,\n\tFade,\n\tFormControlLabel,\n\tSkeleton\n} from '@mui/material';\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport SplitIcon from '@mui/icons-material/CallSplit';\nimport { SectionData } from '../types/editor';\nimport { Edit, Save, Trash } from '../../../components/icons';\nimport Select from '../../../components/select/select';\nimport Typography from '../../../components/typography/typography';\nimport EditSectionModal from '../edit-section-modal/edit-section-modal';\nimport Checkbox from '../../../components/checkbox/checkbox';\nimport Chip from '../../../components/chip/chip';\nimport Close from '@mui/icons-material/Close';\nimport { useCKEditorStyleExtractor } from '../utils/style-extractor';\nimport { useDebouncedUpdate } from '../hooks/useDebouncedUpdate';\n\nconst CustomEditor = lazy(() => import('../../../components/editor/custom-editor'));\n\ninterface EditorSectionProps {\n\tsection: SectionData;\n\tisSelected: boolean;\n\tisDragging: boolean;\n\tisOver: boolean;\n\tonSelect: () => void;\n\tonUpdate: (content: string, options?: any) => void;\n\tonSplit: (content1: string, content2: string) => void;\n\tonDelete: () => void;\n\tplaceholders: Array<{ value: string; label: string }>;\n\tsetIsSectionEditing:(value: boolean)=> void;\n}\n\nconst editableSections = ['text', 'text-block', 'heading', 'heading-1', 'heading-2', 'heading-3', 'heading-4'];\n\nconst EditorSection: React.FC<EditorSectionProps> = ({\n\tsection,\n\tisSelected,\n\tisDragging,\n\tisOver,\n\tonSelect,\n\tonUpdate,\n\tonSplit,\n\tonDelete,\n\tplaceholders,\n\tsetIsSectionEditing\n}) => {\n\tconst { extractStyles, getSingleStyles } = useCKEditorStyleExtractor();\n\n\tconst {\n\t\tattributes,\n\t\tlisteners,\n\t\tsetNodeRef: setDraggableRef,\n\t\ttransform\n\t} = useDraggable({ id: section.id });\n\n\tconst { setNodeRef: setDroppableRef } = useDroppable({ id: section.id });\n\tconst [isEditing, setIsEditing] = useState(false);\n\tconst [isHovered, setIsHovered] = useState(false);\n\tconst [isOpenEditSectionModal, setIsOpenEditSectionModal] = useState(false);\n\tconst [isEditedFromSource, setIsEditedFromSource] = useState(Boolean(section?.is_edited_from_source));\n\tconst [localContent, setLocalContent] = useState(section.content);\n\tconst [hasUserEdited, setHasUserEdited] = useState(false); // Track if user actually made changes\n\tconst editorRef = useRef<any>(null);\n\tconst mouseHoverTimeoutRef = useRef<number | null>(null);\n\tconst cursorPositionRef = useRef<{ from: number; to: number } | null>(null);\n\tconst isRestoringCursorRef = useRef(false);\n\t\n\t// Ref-based content tracking for contentEditable optimization\n\t// This ref tracks content changes without triggering re-renders during editing,\n\t// improving performance and preventing cursor position loss\n\tconst contentRef = useRef<string>(section.content);\n\tconst originalContentRef = useRef<string>(section.content); // Store original content\n\n\t// Create debounced version of onUpdate with 300ms delay\n\tconst debouncedUpdate = useDebouncedUpdate(onUpdate, 300);\n\n\t// Memoize style calculation\n\tconst style = useMemo(() => {\n\t\treturn transform\n\t\t\t? {\n\t\t\t\t\ttransform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,\n\t\t\t\t\ttransition: 'none'\n\t\t\t\t}\n\t\t\t: { transition: 'all 0.2s ease' };\n\t}, [transform]);\n\n\t// Memoize sx prop for Paper to prevent re-creation\n\tconst paperSx = useMemo(() => ({\n\t\tposition: 'relative',\n\t\tborder: '1px dashed',\n\t\tborderColor: isSelected ? 'primary.main' : isOver ? 'primary.main' : 'grey.400',\n\t\tborderRadius: 1,\n\t\tbgcolor: 'white',\n\t\topacity: isDragging ? 0.7 : 1,\n\t\tboxShadow: 'none',\n\t\ttransition: 'all 0.2s ease',\n\t\t'&:hover': {\n\t\t\tboxShadow: 'none'\n\t\t},\n\t\t...(isOver && { borderColor: 'primary.main', boxShadow: 'none' })\n\t}), [isSelected, isOver, isDragging]);\n\n\t// Memoize merged ref to prevent re-creation\n\tconst mergedRef = useCallback((node: HTMLElement | null) => {\n\t\tsetDraggableRef(node);\n\t\tsetDroppableRef(node);\n\t}, [setDraggableRef, setDroppableRef]);\n\n\t// Memoize event handlers\n\tconst handleDblClick = useCallback(() => {\n\t\tif (editableSections.includes(section.type)) {\n\t\t\thandleEditing();\n\t\t}\n\t}, [section.type]);\n\n\tconst handleEditing = useCallback(() => {\n\t\t// Store original content when entering edit mode\n\t\toriginalContentRef.current = section.content;\n\t\tsetHasUserEdited(false);\n\t\t\n\t\tif (section?.isSplitPair) {\n\t\t\tsetIsOpenEditSectionModal(true);\n\t\t} else {\n\t\t\tsetIsEditing(true);\n\t\t\tsetIsSectionEditing(true);\n\t\t}\n\t}, [section?.isSplitPair, section.content, setIsSectionEditing]);\n\n\tconst handleEditorReady = useCallback((editor: any) => {\n\t\teditorRef.current = editor;\n\t\t\n\t\t// Track cursor position changes in the editor\n\t\tif (editor?._tiptap) {\n\t\t\teditor._tiptap.on('selectionUpdate', () => {\n\t\t\t\tif (!isRestoringCursorRef.current && editor._tiptap) {\n\t\t\t\t\tconst { from, to } = editor._tiptap.state.selection;\n\t\t\t\t\tcursorPositionRef.current = { from, to };\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t// Track when user actually makes changes\n\t\t\teditor._tiptap.on('update', ({ transaction }) => {\n\t\t\t\t// Only mark as edited if the transaction actually changed the document\n\t\t\t\tif (transaction.docChanged) {\n\t\t\t\t\tsetHasUserEdited(true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, []);\n\n\tconst handleSave = useCallback((e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tif (editorRef.current) {\n\t\t\t// Save cursor position before getting content\n\t\t\tif (editorRef.current._tiptap) {\n\t\t\t\tconst { from, to } = editorRef.current._tiptap.state.selection;\n\t\t\t\tcursorPositionRef.current = { from, to };\n\t\t\t}\n\t\t\t\n\t\t\t// Get content from editor\n\t\t\t// Use getData() which returns sourceCodeRef.current from CustomEditor\n\t\t\t// This preserves the HTML structure better than getHTML()\n\t\t\tconst content = editorRef.current.getData();\n\t\t\t\n\t\t\t// Update ref immediately for instant tracking\n\t\t\tcontentRef.current = content;\n\t\t\t\n\t\t\t// Update local state for UI feedback\n\t\t\tsetLocalContent(content);\n\t\t\t\n\t\t\tconst styles = extractStyles(section.content, {\n\t\t\t\tincludeTagStyles: true,\n\t\t\t\tincludeInlineStyles: true,\n\t\t\t\tmergeNestedStyles: true,\n\t\t\t\tfilterEmptyStyles: true\n\t\t\t});\n\t\t\tconst single = getSingleStyles(styles);\n\t\t\t// Merge styles safely\n\t\t\tconst mergedStyles = {\n\t\t\t\t...(section.attributes?.styles || {}),\n\t\t\t\t...single\n\t\t\t};\n\t\n\t\t\t// Merge attributes, giving priority to new props\n\t\t\tconst mergedAttributes = {\n\t\t\t\t...(section.attributes || {}),\n\t\t\t\tstyles: mergedStyles,\n\t\t\t};\n\t\t\t\n\t\t\t// Use debounced update to prevent excessive re-renders and API calls\n\t\t\tdebouncedUpdate(content, { is_edited_from_source: isEditedFromSource, attributes: mergedAttributes });\n\t\t}\n\t\tsetIsEditing(false);\n\t\tsetIsSectionEditing(false)\n\t\tsetIsOpenEditSectionModal(false);\n\t\tsetHasUserEdited(false); // Reset edit flag\n\t}, [debouncedUpdate, isEditedFromSource, extractStyles, getSingleStyles, section.content, section.attributes, setIsSectionEditing, hasUserEdited]);\n\n\tconst handleSplit = useCallback(() => {\n\t\tconst content = section.content || '';\n\t\tconst firstHalf = content;\n\t\tconst secondHalf = '';\n\t\tonSplit(firstHalf, secondHalf);\n\t}, [section.content, onSplit]);\n\n\tconst handleAddPlaceholder = useCallback((placeholder: string) => {\n\t\tif (editorRef.current) {\n\t\t\tconst viewFragment = editorRef.current.data.processor.toView(\n\t\t\t\t`{{${placeholder}}}`\n\t\t\t);\n\t\t\tconst modelFragment = editorRef.current.data.toModel(viewFragment);\n\t\t\teditorRef.current.model.insertContent(modelFragment);\n\t\t}\n\t}, []);\n\n\tconst handleMouseEnter = useCallback(() => {\n\t\tif (mouseHoverTimeoutRef.current !== null) {\n\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\n\t\t}\n\t\tmouseHoverTimeoutRef.current = window.setTimeout(() => {\n\t\t\tsetIsHovered(true);\n\t\t}, 50);\n\t}, []);\n\n\tconst handleMouseLeave = useCallback(() => {\n\t\tif (mouseHoverTimeoutRef.current !== null) {\n\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\n\t\t}\n\t\tmouseHoverTimeoutRef.current = window.setTimeout(() => {\n\t\t\tsetIsHovered(false);\n\t\t}, 50);\n\t}, []);\n\n\tconst handleClick = useCallback((e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tonSelect();\n\t}, [onSelect]);\n\n\tconst handleDeleteClick = useCallback((e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tonDelete();\n\t}, [onDelete]);\n\n\tconst handleCancelEdit = useCallback(() => {\n\t\tsetIsEditing(false);\n\t\tsetIsSectionEditing(false)\n\t}, [setIsSectionEditing]);\n\n\tconst handleCheckboxChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tsetIsEditedFromSource(e.target.checked);\n\t}, []);\n\n\tconst handleSelectChange = useCallback((e: any) => {\n\t\tif (e.target.value) {\n\t\t\thandleAddPlaceholder(e.target.value as string);\n\t\t\te.target.value = '';\n\t\t}\n\t}, [handleAddPlaceholder]);\n\n\t// Cleanup function for hover timeout\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (mouseHoverTimeoutRef.current !== null) {\n\t\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\t// Sync local content with section content when it changes externally\n\t// and restore cursor position if editor is focused\n\tReact.useEffect(() => {\n\t\t// Only update if content actually changed from external source\n\t\t// Skip if we're currently editing (content changes come from user input)\n\t\tif (contentRef.current === section.content) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// Update both ref and state for consistency\n\t\tcontentRef.current = section.content;\n\t\tsetLocalContent(section.content);\n\t\t\n\t\t// Only restore cursor position if:\n\t\t// 1. Editor is active (isEditing)\n\t\t// 2. Content change came from external source (not from user typing)\n\t\t// 3. We're not currently in the middle of restoring cursor\n\t\tif (isEditing && editorRef.current?._tiptap && cursorPositionRef.current && !isRestoringCursorRef.current) {\n\t\t\tconst editor = editorRef.current._tiptap;\n\t\t\tconst { from, to } = cursorPositionRef.current;\n\t\t\t\n\t\t\t// Use requestAnimationFrame to ensure DOM has updated\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\ttry {\n\t\t\t\t\tisRestoringCursorRef.current = true;\n\t\t\t\t\t\n\t\t\t\t\t// Validate that the cursor position is still valid after content update\n\t\t\t\t\tconst docSize = editor.state.doc.content.size;\n\t\t\t\t\tconst validFrom = Math.min(from, docSize);\n\t\t\t\t\tconst validTo = Math.min(to, docSize);\n\t\t\t\t\t\n\t\t\t\t\t// Restore selection\n\t\t\t\t\teditor.commands.setTextSelection({ from: validFrom, to: validTo });\n\t\t\t\t\t\n\t\t\t\t\t// Ensure editor maintains focus\n\t\t\t\t\tif (!editor.isFocused) {\n\t\t\t\t\t\teditor.commands.focus();\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.warn('Failed to restore cursor position:', error);\n\t\t\t\t} finally {\n\t\t\t\t\tisRestoringCursorRef.current = false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, [section.content, isEditing]);\n\n\t// Memoize content rendering to prevent unnecessary re-renders\n\t// Only re-render when isEditing state changes or when not editing and localContent changes\n\tconst contentRenderer = useMemo(() => {\n\t\tif (isEditing) {\n\t\t\treturn (\n\t\t\t\t<Suspense fallback={<Skeleton />}>\n\t\t\t\t\t<CustomEditor \n\t\t\t\t\t\tkey={`editor-${section.id}`}\n\t\t\t\t\t\teditorRef={editorRef}\n\t\t\t\t\t\thandleEditorReady={handleEditorReady} \n\t\t\t\t\t\tdata={localContent}\n\t\t\t\t\t\tonError={(error: Error) => console.error('Editor error:', error)}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t);\n\t\t}\n\t\t\n\t\treturn (\n\t\t\t<Box\n\t\t\t\tdangerouslySetInnerHTML={{ __html: localContent }}\n\t\t\t\tsx={{\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tpy: section.type === 'divider' ? 1 : 0,\n\t\t\t\t\tlineHeight: 1.6,\n\t\t\t\t\t'& p': { margin: 0 }\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t}, [isEditing, localContent, section.type, section.id]);\n\n\t// Memoize placeholder options\n\tconst placeholderOptions = useMemo(() => \n\t\tplaceholders.map((option) => (\n\t\t\t<MenuItem key={option.value} value={option.value}>\n\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>{option.label}</Typography>\n\t\t\t</MenuItem>\n\t\t))\n\t, [placeholders]);\n\n\treturn (\n\t\t<Paper\n\t\t\tref={mergedRef}\n\t\t\tstyle={style}\n\t\t\televation={isHovered || isSelected ? 3 : 1}\n\t\t\tsx={paperSx}\n\t\t\tonClick={handleClick}\n\t\t\tonDoubleClick={handleDblClick}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}>\n\t\t\t{isOver && !isDragging && (\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tborder: '2px dashed',\n\t\t\t\t\t\tborderColor: 'primary.main',\n\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\tbgcolor: 'rgba(25, 118, 210, 0.04)',\n\t\t\t\t\t\tzIndex: 10,\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\tpointerEvents: 'none'\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Typography type='s2' color='primary' weight='medium'>Drop here</Typography>\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t\t<Box\n\t\t\t\tsx={{\n\t\t\t\t\tbgcolor: 'grey.50',\n\t\t\t\t\tp: 1,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\tborderBottom: '1px solid',\n\t\t\t\t\tborderColor: 'grey.200'\n\t\t\t\t}}>\n\t\t\t\t<Box\n\t\t\t\t\t{...listeners}\n\t\t\t\t\t{...attributes}\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tcursor: 'grab',\n\t\t\t\t\t\tpx: 1,\n\t\t\t\t\t\tpy: 0.5,\n\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\ttransition: 'background-color 0.2s ease',\n\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.100' },\n\t\t\t\t\t\t'&:active': { cursor: 'grabbing' }\n\t\t\t\t\t}}>\n\t\t\t\t\t<DragIndicatorIcon\n\t\t\t\t\t\tsx={{ color: 'grey.600', fontSize: '1.2rem', mr: 0.5 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.600' weight='medium'>Move</Typography>\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n\t\t\t\t\t{isEditing ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<FormControlLabel control={\n\t\t\t\t\t\t\t\t<Checkbox \n\t\t\t\t\t\t\t\t\tonChange={handleCheckboxChange} \n\t\t\t\t\t\t\t\t\tdefaultChecked={isEditedFromSource}/>} \n\t\t\t\t\t\t\t\t\tlabel={<Typography type='s2' color='theme.secondary.1000'>Edited from source</Typography>} />\n\t\t\t\t\t\t\t<FormControl size='small' sx={{ minWidth: 160 }}>\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\t\t\t\tvalue=''\n\t\t\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\t\t\trenderValue={() => 'Add placeholder...'}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'white',\n\t\t\t\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\t\t\t\t'& .MuiSelect-select': { py: 0.75 }\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonChange={handleSelectChange}>\n\t\t\t\t\t\t\t\t\t{placeholderOptions}\n\t\t\t\t\t\t\t\t</Select>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t\t<IconButton size='small' onClick={handleSave}>\n\t\t\t\t\t\t\t\t\t<Save fontSize='small' color='inherit' />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t<IconButton size='small' onClick={handleCancelEdit} color='error'>\n\t\t\t\t\t\t\t\t\t<Close fontSize='small' color='inherit' />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Fade in={isHovered || isSelected} timeout={200}>\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0.5 }}>\n\t\t\t\t\t\t\t\t{section?.is_edited_from_source && (\n\t\t\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\t\t\tlabel=\"Edited From Source\"\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tsx={(theme) => ({ \n\t\t\t\t\t\t\t\t\t\t\ttextTransform: 'capitalize', \n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette.theme?.tertiary1?.[200], \n\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette.theme?.tertiary1?.[900]\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{editableSections.includes(section.type) &&\n\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\t\t\t\tonClick={handleEditing}\n\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\n\t\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' }\n\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t<Edit fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\n\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\t\t\tonClick={handleSplit}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\n\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' },\n\t\t\t\t\t\t\t\t\t\topacity: section?.splitWidth === 25 ? 0.5 : 1\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tdisabled={section?.splitWidth === 25}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<SplitIcon fontSize='small' color='primary' />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\t\t\tonClick={handleDeleteClick}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\n\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' }\n\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.error.500' }} />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</Fade>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t\t<Box sx={{ p: 3, bgcolor: 'white' }}>\n\t\t\t\t<style>\n {`\n\t\t\t\t\t\ta {\n\t\t\t\t\t\t\tcolor: #007bff !important;\n\t\t\t\t\t\t\ttext-decoration: none !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta:hover {\n\t\t\t\t\t\t\ttext-decoration: underline;\n\t\t\t\t\t\t}\n `}\n </style>\n\t\t\t\t{contentRenderer}\n\t\t\t</Box>\n\t\t\t{isOpenEditSectionModal && <EditSectionModal\n\t\t\t\tisOpen={isOpenEditSectionModal}\n\t\t\t\tsetIsOpen={setIsOpenEditSectionModal}\n\t\t\t\tmodalProps={{ open: isOpenEditSectionModal }}\n\t\t\t\tplaceholders={placeholders}\n\t\t\t\thandleSave={handleSave}\n\t\t\t\thandleAddPlaceholder={handleAddPlaceholder}\n\t\t\t\thandleEditorReady={handleEditorReady}\n\t\t\t\tsection={section}\n\t\t\t/>}\n\t\t</Paper>\n\t);\n};\n\n// Custom comparison function to prevent unnecessary re-renders\n// Return true if props are equal (skip re-render), false if different (re-render)\nconst arePropsEqual = (prevProps: EditorSectionProps, nextProps: EditorSectionProps): boolean => {\n\t// Check if section data has changed\n\tif (prevProps.section.id !== nextProps.section.id) return false;\n\tif (prevProps.section.content !== nextProps.section.content) return false;\n\tif (prevProps.section.type !== nextProps.section.type) return false;\n\tif (prevProps.section.is_edited_from_source !== nextProps.section.is_edited_from_source) return false;\n\tif (prevProps.section.isSplitPair !== nextProps.section.isSplitPair) return false;\n\tif (prevProps.section.splitWidth !== nextProps.section.splitWidth) return false;\n\t\n\t// Check if interaction states have changed\n\tif (prevProps.isSelected !== nextProps.isSelected) return false;\n\tif (prevProps.isDragging !== nextProps.isDragging) return false;\n\tif (prevProps.isOver !== nextProps.isOver) return false;\n\t\n\t// Check if placeholders array reference has changed\n\tif (prevProps.placeholders !== nextProps.placeholders) return false;\n\t\n\t// Deep comparison for section attributes (styles, etc.)\n\tconst prevAttrs = JSON.stringify(prevProps.section.attributes);\n\tconst nextAttrs = JSON.stringify(nextProps.section.attributes);\n\tif (prevAttrs !== nextAttrs) return false;\n\t\n\t// All props are equal, skip re-render\n\treturn true;\n};\n\n// Wrap component with React.memo and custom comparison function\nconst MemoizedEditorSection = React.memo(EditorSection, arePropsEqual);\nMemoizedEditorSection.displayName = 'EditorSection';\n\nexport default MemoizedEditorSection;","/* 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.theme.primary[800]}!important`,\n color: `#fff !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 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 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.theme.primary[800]} !important`,\n color: '#fff !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}\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 }) => {\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 {/* 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) => `${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\">\n <ColorLensIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n </>\n );\n};\n\nexport default React.memo(TextControls);","/* 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 AlignmentControl from './AlignmentControl';\nimport Select from '../../../../components/select/select';\nimport ColorPickerInput from '../../../../components/color-picker-input/color-picker-input';\n\ninterface ButtonControlsProps {\n attrs: Record<string, any>;\n updateAttrs: (attr: Record<string, any>) => void;\n}\n\nconst borderOptions = [\n {label: 'None', value: 'none'},\n {value: '1px solid #e0e0e0', label: 'Solid'},\n {value: '1px dashed #e0e0e0', label: 'Dashed'},\n {value: '1px dotted #e0e0e0', label: 'Dotted'},\n]\n\nconst ButtonControls: React.FC<ButtonControlsProps> = ({\n attrs,\n updateAttrs\n}) => {\n\n const { text, styles } = attrs\n const handleAlignmentChange = (\n event: React.MouseEvent<HTMLElement>,\n newAlignment: string | null,\n ) => {\n if(newAlignment) {\n let margin = '0';\n switch (newAlignment) {\n \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 = 'auto 0 0 0';\n break;\n default:\n margin = '0 auto';\n break;\n }\n updateAttrs({ styles : { margin } });\n }\n };\n\n const getAlignment = () => {\n if (styles?.margin === '0 auto') {\n return 'center';\n } else if (styles?.margin === '0 0 0 auto') {\n return 'right';\n } else if (styles?.margin === 'auto 0 0 0') {\n return 'left';\n } else {\n return 'justify';\n }\n };\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 <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 <Box sx={{ mb: 2 }}>\n <ColorPickerInput\n value={styles?.color || '#333333'}\n onChange={(color) => updateAttrs({ styles :{ color: color }})}\n label='Text Color'\n // sx={{ maxWidth: 150 }}\n />\n </Box>\n <FormControl fullWidth size=\"small\" sx={{ mb: 2 }}>\n <Select\n value={styles?.border}\n renderValue={(value) => borderOptions.find((option) => option.value === value)?.label || 'None'}\n onChange={(e) => updateAttrs({ styles :{ border :e.target.value }})}\n label='Border'\n >\n <MenuItem value=\"none\">None</MenuItem>\n <MenuItem value=\"1px solid #e0e0e0\">Solid</MenuItem>\n <MenuItem value=\"1px dashed #e0e0e0\">Dashed</MenuItem>\n </Select>\n </FormControl>\n <Box sx={{ mb: 2 }}>\n <Typography type=\"s3\" color='theme.neutral.800'>\n Border Radius\n </Typography>\n <Slider\n value={styles?.borderRadius}\n onChange={(_, value) => updateAttrs({ styles :{ borderRadius: value as number }})}\n min={0}\n max={20}\n step={1}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n marks\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 <Typography type=\"s3\" color='theme.neutral.800'>\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={20}\n step={1}\n valueLabelDisplay=\"auto\"\n size=\"small\"\n marks\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={getAlignment()} onAlignmentChange={handleAlignmentChange}/>\n </>\n );\n};\n\nexport default ButtonControls;","/* 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\n useEffect(() => {\n if(initiateStyles instanceof Function) {\n if (!isBordered) {\n initiateStyles({\n 'border': 0,\n 'borderStyle':'none',\n 'borderColor':'#000000',\n 'borderCollapse':'separate',\n 'borderRadius':0,\n });\n } else{\n initiateStyles({\n 'border': 1,\n 'borderStyle':'solid',\n 'borderColor':'#000000',\n 'borderCollapse':'collapse',\n 'borderRadius':0,\n });\n }\n }\n }, [isBordered]);\n return (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <FormControlLabel\n control={\n <Android12Switch\n checked={isBordered}\n onChange={(e) => onChange('is_bordered', e.target.checked)}\n />\n }\n label={<Typography type='s5' weight='medium' color='theme.secondary.800'>Bordered Table</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 marks\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 // Select,\n MenuItem,\n styled,\n Switch,\n Grid,\n FormControlLabel\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 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 { 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 = 'auto 0 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 URL */}\n <TextField\n label=\"Image URL\"\n fullWidth\n value={src}\n onChange={(e) => updateAttrs({ src: e.target.value })}\n size=\"small\"\n sx={{ mb: 2 }}\n />\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 ? 'auto' : 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}\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?.fullWidth ? '' : 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 disabled={styles?.fullWidth}\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 {/* 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}\n onChange={(e) => updateAttrs({ styles: { borderColor: e.target.value }})}\n size=\"small\"\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 DividerControls;","/* 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 } 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} 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 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}\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 TableData {\n columns: TableColumn[];\n rows: TableRow[];\n mergedCells?: CellMerge[];\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(true);\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 [selectedTable, setSelectedTable] = useState<string | null>(null);\n // Fix: Change customText to an object type\n const [customText, setCustomText] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\n // New state to track row-level placeholder assignments\n const [rowPlaceholders, setRowPlaceholders] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\n // Initialize merged cells from attrs\n const mergedCells = tableData.mergedCells || [];\nconst [isUpdating, setIsUpdating] = useState(false);\n\nconst getAttributes = (tableId: string) => {\n\n if (!relation_table || !Array.isArray(relation_table)) {\n return [];\n }\n \n const table = relation_table.find((table: any) => {\n return table?.dataKey == tableId\n })\n if (!table || !table.fields || !Array.isArray(table.fields)) {\n return [];\n }\n\n return table.fields\n // .map(field => {\n // const fieldName = field.key;\n // return {\n // label: fieldName?.replace(/_id$/, '') || '', \n // value: field?.select,\n // };\n // });\n};\n\nconst tableAttributes = useMemo(() => \n selectedTable ? getAttributes(selectedTable) : placeholders,\n [placeholders, selectedTable, relation_table] \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: '#f5f5f5',\n color: '#333333',\n fontSize: 14,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n margin: '0.5em 0',\n },\n tBody: {\n backgroundColor: '#ffffff',\n color: '#333333',\n fontSize: 14,\n fontWeight: 'normal',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\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);\n if (!placeholder) return '';\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 return `{{${placeholder.value}}}` || 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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\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 // Add new row\nconst 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:selectedTable||'',\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:selectedTable||'',\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\nconst 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:selectedTable||'',\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:selectedTable||'',\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 };\nconst 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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\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:selectedTable||'',\n rows: prev.rows.map((row: TableRow) => {\n return {...Object.fromEntries(prev.columns.map((col: TableColumn) => [col?.id, '']))\n \t}\n })\n }));\n }\n // Count columns with placeholders\n const columnsWithPlaceholders = tPlaceholders ? Object.keys(tPlaceholders).length : 0;\nuseEffect(() => {\n // Determine if rowLevel should be enabled\n setRowLevel(levelType);\n setSelectedTable(tableData?.name || null); // Set default table if available\n // Update custom text by extracting values from _static fields\n setCustomText((prev: { [rowIndex: number]: { [columnId: string]: string } }) => {\n const updated: { [rowIndex: number]: { [columnId: string]: string } } = {}; // Fixed missing bracket here\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 // Get the original column value (without _static suffix)\n const columnValue = row[originalColumnId] || '';\n \n // Get the static value and remove the original column value if it appears\n let staticValue = row[columnId] || '';\n if (columnValue && staticValue.includes(columnValue)) {\n staticValue = staticValue.replace(columnValue, '').trim();\n }\n \n // Also remove any {{value}} placeholders\n staticValue = staticValue.replace(/\\{\\{\\s*value\\s*\\}\\}/g, '').trim();\n \n updated[rowIndex][originalColumnId] = staticValue;\n }\n });\n });\n \n return updated;\n });\n\n}, [tableData]);\n\nuseEffect(()=>{\n if(!selectedTable) {\n resetTable()\n }\n\n},[selectedTable]);\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) => setAutoPopulateEnabled(e.target.checked)}\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 setRowLevel(e.target.checked);\n setSelectedTable(null); // Reset selected table when toggling row level\n setParentRowLevel(e.target.checked);\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 }}>\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 <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 1 }}>\n Columns\n </Typography>\n {tableData.columns?.map((column, index) => (\n <Box key={column.id} sx={{ mb: 1, display: 'flex', alignItems: 'center', gap: 1 }}>\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={{ flex: 1 }}\n />\n <IconButton\n size=\"small\"\n onClick={() => removeColumn(column.id)}\n disabled={tableData.columns.length <= 1}\n color=\"error\"\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 <Divider sx={{ my: 2 }} />\n\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 disabled={selectedTable}\n onClick={() => addRow()}\n startIcon={<AddIcon />}\n className='black-outlined-btn'\n >\n Add Row\n </Button>\n </Box>\n {!rowLevel &&\n <Box sx={{ mb: 2 }}>\n <SearchableSelect\n value={selectedTable || ''}\n label={'Select Table'}\n options={relation_table?.map(table=>(\n { value: table?.dataKey, label: (table.name.charAt(0).toUpperCase() + table.name.slice(1)).replaceAll('_', ' ') }\n )) || []}\n onChange={(e) => {\n setSelectedTable(e.target.value);\n }}\n />\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 flexDirection: 'row',\n gap: 1,\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\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 sx={{ flex: 1, minWidth: 150 }}\n />\n <Box sx={{ flex: 1, minWidth: 150 }}>\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 || []}\n // disabled={isUpdating}\n sx={{\n flex: 1,\n maxWidth: 150,\n minWidth: 150,\n '& .MuiInputBase-input': {\n bgcolor:\n hasPlaceholder && autoPopulateEnabled\n ? 'grey.100'\n : mergeInfo\n ? 'blue.50'\n : 'transparent',\n width: 150,\n \n },\n }}\n />\n </Box>\n </Box>\n </>\n ) : (\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 '& .MuiInputBase-input': {\n bgcolor:\n hasPlaceholder && autoPopulateEnabled\n ? 'grey.100'\n : mergeInfo\n ? 'blue.50'\n : 'transparent',\n },\n }}\n />\n )}\n </Grid>\n );\n })}\n </Grid>\n </Box>\n ))}\n </Box>\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 {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 => ({\n value: attr.value,\n label: attr.label,\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 {/* <Select\n value={rowLevel ? '' : (currentPlaceholder || '')}\n onChange={(e) => updateColumnPlaceholder(column.id, e.target.value as string)}\n renderValue={(value) => {\n if (!value) return 'Select Data Source';\n const placeholder = placeholders.find(p => p.value === value);\n return placeholder?.label||currentPlaceholder || 'Unknown Placeholder';\n }}\n fullWidth\n disabled={isUpdating}\n size=\"small\"\n displayEmpty\n disabled={rowLevel}\n >\n <MenuItem value=\"\">\n <Typography type=\"s5\" color=\"theme.secondary.600\">No Data Source</Typography>\n </MenuItem>\n {tableAttributes.map((placeholder) => (\n <MenuItem key={placeholder.value} value={placeholder.value}>\n <Box>\n <Typography type=\"s5\" color=\"theme.secondary.1000\">\n {placeholder.label}\n </Typography>\n {placeholder.description && (\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\n {placeholder.description}\n </Typography>\n )}\n </Box>\n </MenuItem>\n ))}\n </Select> */}\n </Grid>\n </React.Fragment>\n );\n })}\n </Grid>\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 disableRadius\n />\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 || '#f5f5f5'}\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', parseInt(e.target.value) || 14)}\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', parseInt(e.target.value) || 8)}\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 || '#ffffff'}\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', parseInt(e.target.value) || 14)}\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', parseInt(e.target.value) || 8)}\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 </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 <TableRow>\n {tableData.columns.map((column, colIndex) => {\n const mergeInfo = getCellMergeInfo('thead', 0, colIndex);\n const isSelected = isCellSelected('thead', 0, colIndex);\n \n if (mergeInfo?.isCovered) {\n return null;\n }\n\n const cellContent = mergeInfo ? mergeInfo.merge.value : column.header;\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('thead', 0, 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 </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 );\n};\n\nexport default TableControls;","/* eslint-disable unused-imports/no-unused-vars */\nimport React from 'react';\nimport {\n Box,\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';\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: 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={20}\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 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';\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 } 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 relation_table?:any;\n handleSave?: () => void;\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 relation_table,\n handleSave }) => {\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 // Initialize table data from section attributes\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);\n if (!placeholder) return '';\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 return placeholder.label || placeholder.value;\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 `<button style=\"${inlineStyles}\">${text || 'Button Text'}</button>`;\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, ...rest } = styles;\n const tInlineStyles = generateInlineStyles(styles.is_bordered ? styles : rest); \n const tHeadInlineStyles: string = generateInlineStyles(styles.tHead || {});\n const tBodyInlineStyles: string = generateInlineStyles(styles.tBody || {});\n const thCellInlineStyles: string = generateInlineStyles({\n ...(styles.thCells || {}), \n ...(styles.is_bordered ? { border, borderStyle, borderColor } : {}) \n });\n const tbCellInlineStyles: string = generateInlineStyles({\n ...(styles.tbCells || {}), \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\n return `<th style=\"${thCellInlineStyles}\"${mergeAttributes}>${cellValue}</th>`;\n }).filter(cell => cell !== '').join('');\n\n // Generate table body with #each loop using tableData.name\n let tableRowsHTML = '';\n \n // Check if we should use #each loop with tableData.name\n if (tableData.name) {\n // Generate template with #each handlebars syntax\n const rowTemplate = tableData.columns.map((column, colIndex) => {\n const mergeInfo = getCellMergeInfo('tbody', 0, colIndex); // Use first row as template\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 // Use handlebars template syntax for dynamic content\n let cellTemplate = '';\n \n // Handle special cases\n if (column.id === 'index' || column.id === 'incrementIndex') {\n cellTemplate = `{{incrementIndex @index}}`;\n } else if (column.id.includes('.')) {\n // Handle nested properties (like items.sku, tax_code_data.[0].rate)\n const cellValue = tableData?.rows?.[0][column.id];\n cellTemplate = typeof cellValue === 'string' ? cellValue.replace(tableData.name + '.', '') : String(cellValue || '');\n } else {\n // Direct property access\n const cellValue = tableData?.rows?.[0][column.id];\n cellTemplate = typeof cellValue === 'string' ? cellValue.replace(tableData.name + '.', '') : String(cellValue || '');\n }\n\n return `<td style=\"${tbCellInlineStyles}\"${mergeAttributes}>${cellTemplate}</td>`;\n }).filter(cell => cell !== '').join('');\n\n // Add zebra striping logic if enabled\n const rowStyleTemplate = styles.tBody?.zebraStriping \n ? `{{#if (isOdd @index)}}${tBodyInlineStyles}; background-color: ${styles.tBody.alternateRowColor || '#f9f9f9'}{{else}}${tBodyInlineStyles}{{/if}}`\n : tBodyInlineStyles;\n\n tableRowsHTML = `{{#each ${tableData.name}}}\n <tr style=\"${rowStyleTemplate}\">\n ${rowTemplate}\n </tr>\n {{/each}}`;\n \n } else {\n // Fallback to static rows when no tableData.name is provided\n tableRowsHTML = tableData.rows.map((row, rowIndex) => {\n const rowStyleAddition = styles.tBody?.zebraStriping && rowIndex % 2 === 1 \n ? `; background-color: ${styles.tBody.alternateRowColor || '#f9f9f9'}` \n : '';\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 const finalCellValue = mergeInfo ? mergeInfo.value : cellValue;\n\n return `<td style=\"${tbCellInlineStyles}\"${mergeAttributes}>${finalCellValue}</td>`;\n }).filter(cell => cell !== '').join('');\n \n return `<tr style=\"${tBodyInlineStyles}${rowStyleAddition}\">${cellsHTML}</tr>`;\n }).join('');\n }\n \n return `\n <table style=\"${tInlineStyles}\">\n <thead>\n <tr style=\"${tHeadInlineStyles}\">\n ${headerCellsHTML}\n </tr>\n </thead>\n <tbody>\n ${tableRowsHTML}\n </tbody>\n </table>\n `;\n } else if (sectionType === 'qr-code' || sectionType === 'bar-code') {\n return `<div style=\"${inlineStyles}\">${placeholder}</div>`;\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 `<div style=\"${inlineStyles}\">${content}</div>`;\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 };\nuseEffect(() => {\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 // Compose the update payload, omitting unknown properties\n onUpdate({\n ...sectionRest,\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={3}\n sx={{\n width: { xs: '100%', sm: 320, lg: 390 },\n height: '100%',\n overflow: 'auto',\n borderLeft: '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: '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 <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 {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 />\n )}\n {sectionType === 'buttons' && (\n <ButtonControls\n attrs={section?.attributes || {}}\n updateAttrs={updateAttrs}\n />\n )}\n {sectionType === 'image' && (\n <ImageControls\n attrs={section?.attributes || {}}\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 tableData={{\n ...tableData,\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) => {\n handleTableDataUpdate({\n ...value,\n border: tableData.border,\n name: tableData.name || ''\n });\n }}\n attrs={section?.attributes || {}}\n updateAttrs={updateAttrs}\n placeholders={placeholders}\n handleSave={handleSave}\n setParentRowLevel={setRowLevel}\n levelType={rowLevel}\n relation_table={relation_table}\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;","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { useDraggable } from '@dnd-kit/core';\nimport { useDropzone } from 'react-dropzone';\nimport {\n Box,\n Divider,\n ListItem,\n ListItemIcon,\n ListItemText,\n Grid,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n CircularProgress,\n Alert,\n} from '@mui/material';\nimport {\n Heading,\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 FileCode,\n} from 'lucide-react';\nimport { styled } from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { getV1Drive, postV1Drive } from '../../../api-client/api.drive/api';\nimport SearchBar from '../../../components/search-bar/search-bar';\nimport { getToken, uploadFiles } from '../../../utils/common';\nimport { getApiConfig } from '@/utils';\nimport Button from '../../../components/button/button';\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 DropzoneBox = styled(Box)(({ theme }) => ({\n border: `2px dashed ${theme.palette.grey[400]}`,\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(2),\n textAlign: 'center',\n backgroundColor: theme.palette.grey[50],\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: theme.palette.grey[100],\n },\n}));\n\nconst SidebarItem = ({ id, icon, label, imageUrl }: { id: string; icon?: React.ReactElement; label: string; imageUrl?: 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 // Pass the correct type based on the id\n type: imageUrl ? 'image' : elementType,\n imageUrl,\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 {imageUrl ? (\n <img\n src={imageUrl}\n alt={label}\n style={{ width: '100%', height: 140, objectFit: 'cover', marginRight: 8 }}\n />\n ) : (\n <>\n <ListItemIcon sx={{ minWidth: 40 }}>{icon}</ListItemIcon>\n <ListItemText primary={label} primaryTypographyProps={{ variant: 'body2' }} />\n </>\n )}\n </StyledListItem>\n );\n};\n\ninterface EditorSidebarProps {\n onHtmlUpload?: (html: string) => void;\n}\n\nconst EditorSidebar = ({ onHtmlUpload }: EditorSidebarProps) => {\n const [expanded, setExpanded] = useState('text');\n const [uploadedImages, setUploadedImages] = useState([]);\n const [uploading, setUploading] = useState(false);\n const [uploadingHtml, setUploadingHtml] = useState(false);\n const [error, setError] = useState(null);\n\n const handleChange = (panel) => (event, isExpanded) => {\n setExpanded(isExpanded ? panel : false);\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\": `${getApiConfig().s3BucketUrl}${uFiles[0]}`\n }\n // Replace with your actual API endpoint\n await postV1Drive(payload);\n\n setUploadedImages((prev) => [\n ...prev,\n {\n id: `uploaded-image-${Date.now()}-${Math.random()}`,\n url: `${getApiConfig().s3BucketUrl}${uFiles[0]}`, // Assume API returns imageUrl\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'] },\n multiple: true,\n });\n\n const onHtmlDrop = useCallback(async (acceptedFiles) => {\n if (!onHtmlUpload) return;\n \n setUploadingHtml(true);\n setError(null);\n \n try {\n const file = acceptedFiles[0];\n if (!file) return;\n\n const reader = new FileReader();\n \n reader.onload = (e) => {\n const htmlContent = e.target?.result as string;\n if (htmlContent) {\n onHtmlUpload(htmlContent);\n setUploadingHtml(false);\n }\n };\n\n reader.onerror = () => {\n setError('Failed to read HTML file. Please try again.');\n setUploadingHtml(false);\n };\n\n reader.readAsText(file);\n } catch (err) {\n setError('Failed to process HTML file. Please try again.');\n setUploadingHtml(false);\n }\n }, [onHtmlUpload]);\n\n const { getRootProps: getHtmlRootProps, getInputProps: getHtmlInputProps, isDragActive: isHtmlDragActive } = useDropzone({\n onDrop: onHtmlDrop,\n accept: { 'text/html': ['.html', '.htm'] },\n multiple: false,\n maxFiles: 1,\n });\n\n const sections = [\n {\n id: 'html-upload',\n icon: <FileCode size={18} />,\n label: 'Upload HTML',\n content: (\n <Box sx={{ mt: 2 }}>\n <DropzoneBox {...getHtmlRootProps()}>\n <input {...getHtmlInputProps()} />\n {isHtmlDragActive ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Drop the HTML file here...\n </Typography>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Drag and drop HTML file here, or click to select\n </Typography>\n )}\n {uploadingHtml && (\n <Box sx={{ mt: 1 }}>\n <CircularProgress size={20} />\n </Box>\n )}\n </DropzoneBox>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 1, display: 'block' }}>\n Upload an HTML file to replace current sections with the file content\n </Typography>\n </Box>\n ),\n },\n {\n id: 'text',\n icon: <TextIcon size={18} />,\n label: 'Text',\n content: (\n <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 1 }}>\n <SidebarItem id=\"sidebar-heading\" icon={<Heading size={20} />} label=\"Heading 1\" />\n <SidebarItem id=\"sidebar-heading-2\" icon={<Heading size={18} />} label=\"Heading 2\" />\n <SidebarItem id=\"sidebar-heading-3\" icon={<Heading size={16} />} label=\"Heading 3\" />\n <SidebarItem id=\"sidebar-heading-4\" icon={<Heading size={14} />} label=\"Heading 4\" />\n <SidebarItem id=\"sidebar-text\" icon={<TextIcon size={20} />} label=\"Body\" />\n <SidebarItem id=\"sidebar-text-block\" icon={<TextIcon size={20} />} label=\"Text Block\" />\n </Box>\n ),\n },\n {\n id: 'images',\n icon: <ImageIcon size={18} />,\n label: 'Images',\n content: (\n <Box sx={{ mt: 2 }}>\n <Box sx={{ mt: 2 }}>\n <DropzoneBox {...getRootProps()}>\n <input {...getInputProps()} />\n {isDragActive ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Drop the images here...\n </Typography>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Drag and drop images here, or click to select\n </Typography>\n )}\n {uploading && (\n <Box sx={{ mt: 1 }}>\n <CircularProgress size={20} />\n </Box>\n )}\n </DropzoneBox>\n {error && (\n <Alert severity=\"error\" sx={{ mt: 2 }}>\n {error}\n </Alert>\n )}\n {uploadedImages.length > 0 && (\n <Box sx={{ mt: 2 }}>\n <Typography variant=\"body2\" sx={{ mb: 1, color: 'grey.500' }}>\n Uploaded Images\n </Typography>\n <Grid container spacing={1}>\n {uploadedImages.map((image) => (\n <Grid item xs={6} key={image.id}>\n <SidebarItem\n id={image.id}\n label={image.name}\n imageUrl={image.url}\n />\n </Grid>\n ))}\n </Grid>\n </Box>\n )}\n </Box>\n </Box>\n ),\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 content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem\n id=\"sidebar-buttons\"\n icon={\n <Box\n sx={{\n width: 20,\n height: 20,\n bgcolor: 'success.main',\n borderRadius: 1,\n color: 'white',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '10px',\n }}\n >\n BTN\n </Box>\n }\n label=\"Buttons\"\n />\n </Box>\n ),\n },\n {\n id: 'divider',\n icon: <Divider sx={{ width: 18 }} />,\n label: 'Divider',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-divider\" icon={<Divider sx={{ width: 20 }} />} label=\"Divider\" />\n </Box>\n ),\n },\n {\n id: 'table',\n icon: <TableIcon size={18} />,\n label: 'Table',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-table\" icon={<TableIcon size={20} />} label=\"Table\" />\n </Box>\n ),\n },\n {\n id: 'signature',\n icon: <SignatureIcon size={18} />,\n label: 'Signature',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-signature\" icon={<SignatureIcon size={20} />} label=\"Signature\" />\n </Box>\n ),\n },\n {\n id: 'qr-code',\n icon: <QrCodeIcon size={18} />,\n label: 'QR Code',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-qr-code\" icon={<QrCodeIcon size={20} />} label=\"QR Code\" />\n </Box>\n ),\n },\n {\n id: 'bar-code',\n icon: <BarcodeIcon size={18} />,\n label: 'Bar Code',\n content: (\n <Box sx={{ mt: 2 }}>\n <SidebarItem id=\"sidebar-bar-code\" icon={<BarcodeIcon size={20} />} label=\"Bar Code\" />\n </Box>\n ),\n },\n ];\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 // Check if response is successful and has data\n if ('data' in response && response.data && typeof response.data === 'object' && 'drive' in response.data) {\n const files = (response.data as any).drive || [];\n setUploadedImages(files);\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n useEffect(() => {\n getDriveFiles()\n }, [])\n\n return (\n <Box\n sx={{\n bgcolor: 'background.paper',\n borderRight: 1,\n borderColor: 'grey.200',\n width: 390,\n display: 'flex',\n flexDirection: 'column',\n height: 'calc(100vh - 104px)',\n boxShadow: '0 2px 8px rgba(0,0,0,0.05)',\n fontFamily: 'Inter, system-ui, Avenir, Helvetica, Arial, sans-serif',\n }}\n >\n <Box sx={{ p: 2, borderBottom: 1, borderColor: 'grey.200' }}>\n <SearchBar\n handleSearch={(key) => console.log('Search:', key)}\n sx={{ backgroundColor: \"#fff !important\", border: \"1px solid grey\" }}\n />\n </Box>\n <Box sx={{ flexGrow: 1, overflowY: 'auto', p: 1 }}>\n {sections.map((section) => (\n <Accordion\n key={section.id}\n expanded={expanded === section.id}\n onChange={handleChange(section.id)}\n sx={{\n border: 'none',\n boxShadow: 'none',\n backgroundColor: 'transparent',\n '&:before': { display: 'none' },\n marginBottom: 1,\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon sx={{ color: 'grey.600' }} />}\n sx={{\n borderRadius: '8px',\n padding: '0 12px',\n backgroundColor: expanded === section.id ? 'grey.200' : 'grey.50',\n '&:hover': {\n backgroundColor: 'grey.50',\n },\n transition: 'background-color 0.2s ease',\n minHeight: 42,\n '& .MuiAccordionSummary-content': {\n alignItems: 'center',\n margin: '8px 0',\n },\n '&.Mui-expanded': {\n minHeight: 42,\n },\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {section.icon}\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 500, color: 'text.primary' }}\n >\n {section.label}\n </Typography>\n </Box>\n </AccordionSummary>\n <AccordionDetails sx={{ padding: '8px 16px' }}>\n {section.content}\n </AccordionDetails>\n </Accordion>\n ))}\n </Box>\n </Box>\n );\n};\n\nexport { EditorSidebar };\nexport default EditorSidebar;","/* 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 { useDroppable } from '@dnd-kit/core';\nimport EditorSection from './EditorSection';\nimport { Box, Container, Paper, Tooltip } from '@mui/material';\nimport Typography from '../../../components/typography/typography';\nimport SectionFormatPanel from './SectionFormatPanel';\nimport EditorSidebar from './EditorSidebar';\nimport { generateEmailPreview, generateHeaderFooterPreview } from '../utils/common';\nimport { EnhancedSectionData } from '../types/editor';\nimport Button from '../../../components/button/button';\nimport CheckIcon from '@mui/icons-material/Check';\nimport CloseIcon from '@mui/icons-material/Close';\n\nconst CANVAS_TYPES = {\n HEADER: 'header',\n MAIN: 'main',\n FOOTER: 'footer'\n};\n\ninterface DropPosition {\n id: string | null;\n type: 'before' | 'after' | 'inside' | 'left' | 'right';\n canvasType: string;\n}\n\ninterface EditorCanvasProps {\n sections: EnhancedSectionData[];\n headerSections: EnhancedSectionData[];\n footerSections: EnhancedSectionData[];\n activeId: string | null;\n overSection: string | null;\n selectedSection: string | null;\n onSelectSection: (id: string | null) => void;\n onUpdateSection: (id: string, data: any, canvasType?: string) => void;\n onSplitSection: (id: string, content1: string, content2: string, canvasType?: string) => void;\n onDeleteSection: (id: string, canvasType?: string) => void;\n preview: boolean;\n editHtml: boolean;\n onApplyHtmlEdit: (html: string) => void;\n onCancelHtmlEdit: () => void;\n editMode: boolean;\n isFromPreview: boolean;\n zoom?: number;\n placeholders: Record<string, any>[];\n isEditingHeaderFooter: boolean;\n relation_table: any[];\n handleSave?: () => Promise<void>;\n}\n\nconst EditorCanvas: React.FC<EditorCanvasProps> = ({\n sections,\n headerSections,\n footerSections,\n activeId,\n selectedSection,\n onSelectSection,\n onUpdateSection,\n onSplitSection,\n onDeleteSection,\n preview,\n editHtml,\n onApplyHtmlEdit,\n onCancelHtmlEdit,\n editMode,\n isFromPreview,\n placeholders,\n isEditingHeaderFooter,\n handleSave,\n relation_table,\n zoom = 100\n}) => {\n // Convert placeholders to the expected format\n const formattedPlaceholders = useMemo(() => {\n return placeholders.map((p: Record<string, any>) => ({\n value: p.value || p.key || '',\n label: p.label || p.name || String(p.value || p.key || '')\n }));\n }, [placeholders]);\n\n const { setNodeRef: setMainCanvasRef } = useDroppable({ id: 'main-canvas' });\n const { setNodeRef: setHeaderCanvasRef } = useDroppable({ id: 'header-canvas' });\n const { setNodeRef: setFooterCanvasRef } = useDroppable({ id: 'footer-canvas' });\n\n const selectedSectionData = useMemo(() => {\n return [...sections, ...headerSections, ...footerSections].find((section) => section.id === selectedSection);\n }, [sections, selectedSection]);\n\n const [dropTarget, setDropTarget] = useState<DropPosition>({\n id: null,\n type: 'inside',\n canvasType: CANVAS_TYPES.MAIN\n });\n const [isDraggingFromSidebar, setIsDraggingFromSidebar] = useState(false);\n const [isSectionEditing, setIsSectionEditing] = useState(false);\n const [htmlEditValue, setHtmlEditValue] = useState('');\n\n // Sync textarea content when entering HTML edit mode\n useEffect(() => {\n if (editHtml) {\n setHtmlEditValue(generateEmailPreview(sections, headerSections, footerSections));\n }\n }, [editHtml]);\n\n const lastUpdateTimeRef = useRef(0);\n const lastPositionRef = useRef({ x: 0, y: 0 });\n const activeIdRef = useRef<string | null>(null);\n const mainCanvasRef = useRef<HTMLDivElement | null>(null);\n const headerCanvasRef = useRef<HTMLDivElement | null>(null);\n const footerCanvasRef = useRef<HTMLDivElement | null>(null);\n\n const DEBOUNCE_MS = 50;\n const MIN_MOUSE_MOVE = 5;\n const POSITION_HYSTERESIS = 0.1;\n\n const getTargetSections = (canvasType: string) => {\n switch (canvasType) {\n case CANVAS_TYPES.HEADER:\n return headerSections;\n case CANVAS_TYPES.FOOTER:\n return footerSections;\n default:\n return sections;\n }\n };\n\n useEffect(() => {\n activeIdRef.current = activeId;\n\n if (activeId && String(activeId).includes('sidebar-')) {\n setIsDraggingFromSidebar(true);\n\n if (sections?.length > 0) {\n updateDropTarget(sections[0].id, 'before', CANVAS_TYPES.MAIN);\n } else if (headerSections?.length > 0 && isEditingHeaderFooter) {\n updateDropTarget(headerSections[0].id, 'before', CANVAS_TYPES.HEADER);\n } else if (footerSections?.length > 0 && isEditingHeaderFooter) {\n updateDropTarget(footerSections[0].id, 'before', CANVAS_TYPES.FOOTER);\n } else {\n updateDropTarget(null, 'inside', CANVAS_TYPES.MAIN);\n }\n } else if (!activeId) {\n setIsDraggingFromSidebar(false);\n setDropTarget({ id: null, type: 'inside', canvasType: CANVAS_TYPES.MAIN });\n }\n }, [activeId, sections, headerSections, footerSections, isEditingHeaderFooter]);\n\n const updateDropTarget = useCallback((id: string | null, type: DropPosition['type'], canvasType: string) => {\n const now = Date.now();\n if (now - lastUpdateTimeRef.current < DEBOUNCE_MS) return;\n\n // Prevent state updates if position hasn't actually changed\n setDropTarget(prev => {\n if (prev.id === id && prev.type === type && prev.canvasType === canvasType) {\n return prev; // Return same reference to prevent re-render\n }\n lastUpdateTimeRef.current = now;\n return { id, type, canvasType };\n });\n }, []);\n\n const handleMouseMove = useCallback((e: React.MouseEvent, canvasType: string) => {\n if (!activeIdRef.current) return;\n if (canvasType !== CANVAS_TYPES.MAIN && !isEditingHeaderFooter) return;\n\n const dx = e.clientX - lastPositionRef.current.x;\n const dy = e.clientY - lastPositionRef.current.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (distance < MIN_MOUSE_MOVE) return;\n\n lastPositionRef.current = { x: e.clientX, y: e.clientY };\n\n const elementsUnderCursor = document.elementsFromPoint(e.clientX, e.clientY);\n const sectionElement = elementsUnderCursor.find(el =>\n el.hasAttribute('data-section-id')\n );\n\n const targetSections = getTargetSections(canvasType);\n\n if (!sectionElement) {\n if (targetSections.length === 0) {\n updateDropTarget(null, 'inside', canvasType);\n } else if (isDraggingFromSidebar) {\n updateDropTarget(targetSections[targetSections.length - 1].id, 'after', canvasType);\n }\n return;\n }\n\n const sectionId = sectionElement.getAttribute('data-section-id');\n if (!sectionId) return;\n\n const sectionCanvasType = sectionElement.hasAttribute('data-canvas-type')\n ? sectionElement.getAttribute('data-canvas-type') as string\n : canvasType;\n\n const rect = sectionElement.getBoundingClientRect();\n const relativeY = e.clientY - rect.top;\n const relativeX = e.clientX - rect.left;\n const sectionHeight = rect.height;\n const sectionWidth = rect.width;\n\n const canvasSections = getTargetSections(sectionCanvasType);\n const section = canvasSections.find(s => s.id === sectionId);\n\n const isSplitGroup = sectionId.startsWith('split-group-');\n\n if (isSplitGroup || (section && section.isSplitPair)) {\n if (relativeX < sectionWidth * (0.5 - POSITION_HYSTERESIS)) {\n updateDropTarget(sectionId, 'left', sectionCanvasType);\n } else if (relativeX > sectionWidth * (0.5 + POSITION_HYSTERESIS)) {\n updateDropTarget(sectionId, 'right', sectionCanvasType);\n } else {\n updateDropTarget(sectionId, 'inside', sectionCanvasType);\n }\n } else {\n let position: DropPosition['type'] = 'inside';\n if (relativeY < sectionHeight * (0.3 - POSITION_HYSTERESIS)) {\n position = 'before';\n } else if (relativeY > sectionHeight * (0.7 + POSITION_HYSTERESIS)) {\n position = 'after';\n } else {\n position = 'inside';\n }\n updateDropTarget(sectionId, position, sectionCanvasType);\n }\n }, [isEditingHeaderFooter, isDraggingFromSidebar, updateDropTarget]);\n\n const handleMouseEnter = useCallback((e: React.MouseEvent, canvasType: string) => {\n if (!activeIdRef.current || !isDraggingFromSidebar) return;\n if (canvasType !== CANVAS_TYPES.MAIN && !isEditingHeaderFooter) return;\n\n const targetSections = getTargetSections(canvasType);\n\n if (targetSections.length > 0) {\n updateDropTarget(targetSections[0].id, 'before', canvasType);\n } else {\n updateDropTarget(null, 'inside', canvasType);\n }\n\n lastPositionRef.current = { x: e.clientX, y: e.clientY };\n }, [isDraggingFromSidebar, isEditingHeaderFooter, updateDropTarget]);\n\n const renderSectionsForCanvas = useCallback((canvasSections: EnhancedSectionData[], canvasType: string) => {\n const result: React.ReactNode[] = [];\n const processedGroups = new Set<string>();\n let i = 0;\n\n const renderDropIndicator = (key: string, isHorizontal = false) => (\n <Box\n key={key}\n sx={{\n [isHorizontal ? 'width' : 'height']: '50px',\n border: '2px dashed',\n borderColor: 'primary.main',\n borderRadius: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: 'rgba(25, 118, 210, 0.04)',\n [isHorizontal ? 'mx' : 'mb']: 2,\n opacity: 0,\n animation: 'fadeIn 0.3s ease-in-out forwards',\n '@keyframes fadeIn': {\n '0%': { opacity: 0, transform: isHorizontal ? 'translateX(-10px)' : 'translateY(-10px)' },\n '100%': { opacity: 1, transform: 'translate(0)' },\n },\n }}\n >\n <Typography type='s2' color='primary' weight='medium'>\n Drop here\n </Typography>\n </Box>\n );\n\n if (isDraggingFromSidebar &&\n canvasSections?.length > 0 &&\n dropTarget.type === 'before' &&\n dropTarget.id === canvasSections[0].id &&\n dropTarget.canvasType === canvasType) {\n result.push(renderDropIndicator(`drop-before-first-${canvasType}`));\n }\n\n while (i < canvasSections?.length) {\n const section = canvasSections[i];\n const sectionId = section.id;\n\n if (dropTarget.id === sectionId &&\n dropTarget.type === 'before' &&\n dropTarget.canvasType === canvasType &&\n !(isDraggingFromSidebar && i === 0)) {\n result.push(renderDropIndicator(`drop-before-${sectionId}-${canvasType}`));\n }\n\n if (!section.isSplitPair) {\n result.push(\n <Box\n key={section.id}\n data-section-id={section.id}\n data-canvas-type={canvasType}\n >\n <EditorSection\n section={section}\n isSelected={selectedSection === section.id}\n isDragging={activeId === section.id}\n isOver={dropTarget.id === section.id && dropTarget.type === 'inside' && dropTarget.canvasType === canvasType}\n onSelect={() => onSelectSection(section.id)}\n onUpdate={(content, extra) => {\n onUpdateSection(section.id, { content, ...extra }, canvasType);\n onSelectSection(null);\n }}\n onSplit={(content1, content2) => onSplitSection(section.id, content1, content2, canvasType)}\n onDelete={() => onDeleteSection(section.id, canvasType)}\n placeholders={formattedPlaceholders}\n setIsSectionEditing={setIsSectionEditing}\n />\n </Box>\n );\n i++;\n } else {\n const splitGroupId = section.splitGroupId;\n if (splitGroupId && processedGroups.has(splitGroupId)) {\n i++;\n continue;\n }\n\n const splitSections = canvasSections.filter(s => s.splitGroupId === splitGroupId);\n if (splitSections.length > 0) {\n if (splitGroupId) processedGroups.add(splitGroupId);\n\n // Split sections use stable keys based on section IDs and splitGroupId\n // This ensures React doesn't unnecessarily re-render or lose component state\n // when sections are reordered or updated\n const splitRow = (\n <Box\n key={`split-row-${splitGroupId}`}\n sx={{\n display: 'flex',\n gap: 2,\n mb: 2,\n bgcolor: 'rgba(0, 0, 0, 0.02)',\n p: 1,\n borderRadius: 1\n }}\n data-section-id={`split-group-${splitGroupId}`}\n data-canvas-type={canvasType}\n >\n {splitSections.map((splitSection, index) => (\n <React.Fragment key={splitSection.id}>\n {dropTarget.id === splitSection.id &&\n dropTarget.type === 'left' &&\n dropTarget.canvasType === canvasType && (\n renderDropIndicator(`drop-left-${splitSection.id}-${canvasType}`, true)\n )}\n <Box\n sx={{\n width: splitSection.splitWidth ? `${splitSection.splitWidth}%` : `${100 / splitSections.length}%`,\n transition: 'width 0.3s ease-in-out',\n }}\n data-section-id={splitSection.id}\n data-canvas-type={canvasType}\n >\n <EditorSection\n section={splitSection}\n isSelected={selectedSection === splitSection.id}\n isDragging={activeId === splitSection.id}\n isOver={dropTarget.id === splitSection.id && dropTarget.type === 'inside' && dropTarget.canvasType === canvasType}\n onSelect={() => onSelectSection(splitSection.id)}\n onUpdate={(content, extra) => {\n onUpdateSection(splitSection.id, { content, ...extra }, canvasType);\n onSelectSection(null);\n }}\n onSplit={(content1, content2) => onSplitSection(splitSection.id, content1, content2, canvasType)}\n onDelete={() => onDeleteSection(splitSection.id, canvasType)}\n placeholders={formattedPlaceholders}\n setIsSectionEditing={setIsSectionEditing}\n />\n </Box>\n {dropTarget.id === splitSection.id &&\n dropTarget.type === 'right' &&\n dropTarget.canvasType === canvasType && (\n renderDropIndicator(`drop-right-${splitSection.id}-${canvasType}`, true)\n )}\n </React.Fragment>\n ))}\n </Box>\n );\n result.push(splitRow);\n i += splitSections.length;\n } else {\n i++;\n }\n }\n\n if (dropTarget.id === sectionId &&\n dropTarget.type === 'after' &&\n dropTarget.canvasType === canvasType) {\n result.push(renderDropIndicator(`drop-after-${sectionId}-${canvasType}`));\n }\n }\n\n if ((canvasSections?.length === 0 && activeId && dropTarget.canvasType === canvasType) ||\n (canvasSections?.length === 0 && isDraggingFromSidebar && dropTarget.canvasType === canvasType)) {\n result.push(renderDropIndicator(`drop-empty-canvas-${canvasType}`));\n }\n\n return result;\n }, [\n isDraggingFromSidebar,\n dropTarget,\n activeId,\n selectedSection,\n onSelectSection,\n onUpdateSection,\n onSplitSection,\n onDeleteSection,\n formattedPlaceholders\n ]);\n\n const renderedMainSections = useMemo(() =>\n renderSectionsForCanvas(sections, CANVAS_TYPES.MAIN),\n [sections, dropTarget, activeId, isDraggingFromSidebar, selectedSection]\n );\n\n const renderedHeaderSections = useMemo(() =>\n renderSectionsForCanvas(headerSections, CANVAS_TYPES.HEADER),\n [headerSections, dropTarget, activeId, isDraggingFromSidebar, selectedSection, isEditingHeaderFooter]\n );\n\n const renderedFooterSections = useMemo(() =>\n renderSectionsForCanvas(footerSections, CANVAS_TYPES.FOOTER),\n [footerSections, dropTarget, activeId, isDraggingFromSidebar, selectedSection, isEditingHeaderFooter]\n );\n\n const renderPreview = () => {\n return (\n <Box\n sx={{\n transform: `scale(${zoom / 100})`,\n transformOrigin: 'top center',\n transition: 'transform 0.2s ease-in-out',\n bgcolor: 'white',\n p: 2,\n borderRadius: 1,\n boxShadow: 1,\n }}\n >\n <Box dangerouslySetInnerHTML={{ __html: generateEmailPreview(sections, headerSections, footerSections) }} />\n </Box>\n );\n };\n\n const renderHtmlEditor = () => (\n <Box sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n px: 2,\n py: 1,\n bgcolor: '#1e1e1e',\n borderBottom: '1px solid #333',\n borderRadius: '4px 4px 0 0',\n }}\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\n size='small'\n variant='contained'\n color='primary'\n startIcon={<CheckIcon fontSize='small' />}\n onClick={() => onApplyHtmlEdit(htmlEditValue)}\n sx={{ boxShadow: 'none' }}\n >\n Apply\n </Button>\n <Button\n size='small'\n variant='outlined'\n startIcon={<CloseIcon fontSize='small' />}\n onClick={() => onCancelHtmlEdit()}\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important`, borderColor: '#555 !important' })}\n >\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,\n width: '100%',\n minHeight: 'calc(100vh - 220px)',\n padding: '16px',\n fontFamily: '\"Fira Code\", \"Cascadia Code\", \"Consolas\", monospace',\n fontSize: '13px',\n lineHeight: '1.6',\n color: '#d4d4d4',\n backgroundColor: '#1e1e1e',\n border: 'none',\n outline: 'none',\n resize: 'none',\n boxSizing: 'border-box',\n borderRadius: '0 0 4px 4px',\n tabSize: 2,\n }}\n />\n </Box>\n );\n\n const renderCanvas = (\n title: string,\n canvasType: string,\n renderedSections: React.ReactNode[],\n setCanvasRef: (node: HTMLElement | null) => void,\n ref: React.MutableRefObject<HTMLDivElement | null>,\n visible: boolean = true\n ) => {\n if (!visible) return null;\n\n return (\n <Box sx={{ mb: 3 }}>\n {CANVAS_TYPES.MAIN === canvasType && visible && headerSections.length > 0 && (\n <>\n {/* <Accordion\n sx= {{\n boxShadow: 'none !important',\n \".MuiAccordionSummary-root\": {\n backgroundColor: '#fafafa !important',\n border: `0 !important`,\n p: 0,\n pb: 1,\n // mb: 1,\n m:0,\n minHeight: 'unset'\n }\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n > */}\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'}>Header</Typography>\n {/* </AccordionSummary> */}\n <Paper sx={{ mb: 1, boxShadow: 'none', opacity: 0.5 }} dangerouslySetInnerHTML={{ __html: generateHeaderFooterPreview(headerSections) }} />\n {/* </Accordion> */}\n </>\n )}\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'} sx={{ mb: 1 }}>{title}</Typography>\n <Paper\n ref={(node) => {\n setCanvasRef(node);\n ref.current = node;\n }}\n elevation={0}\n sx={{\n p: 4,\n border: '1px dashed',\n borderColor: isDraggingFromSidebar && dropTarget.canvasType === canvasType\n ? 'primary.main'\n : 'primary.light',\n borderRadius: 1,\n bgcolor: 'background.paper',\n position: 'relative',\n minHeight: title === 'Header' || title === 'Footer' ? '100px' : '200px',\n transition: 'border-color 0.3s ease, background-color 0.3s ease',\n '&:hover': {\n bgcolor: isDraggingFromSidebar && dropTarget.canvasType === canvasType\n ? 'rgba(25, 118, 210, 0.04)'\n : 'background.paper',\n },\n pointerEvents: (canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter\n ? 'none'\n : 'auto',\n opacity: (canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter\n ? 0.5\n : 1,\n }}\n onClick={() => {\n if ((canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter) return;\n onSelectSection(null);\n }}\n onMouseMove={(e) => handleMouseMove(e, canvasType)}\n onMouseEnter={(e) => handleMouseEnter(e, canvasType)}\n >\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {renderedSections}\n {getTargetSections(canvasType)?.length === 0 &&\n !activeId &&\n !isDraggingFromSidebar && (\n <Box sx={{ borderRadius: 1, p: 2, textAlign: 'center', color: 'text.secondary' }}>\n <Typography type='s2' color='theme.secondary.600' weight='medium'>\n Drag Sections from side panel to start building the {title.toLowerCase()}\n </Typography>\n </Box>\n )}\n </Box>\n </Paper>\n {CANVAS_TYPES.MAIN === canvasType && visible && footerSections.length > 0 && (\n <>\n {/* <Accordion\n sx= {{\n boxShadow: 'none !important',\n \".MuiAccordionSummary-root\": {\n backgroundColor: '#fafafa !important',\n border: `0 !important`,\n p: 0,\n pb: 1,\n // mb: 1,\n m:0,\n minHeight: 'unset'\n }\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n > */}\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'} sx={{ mt: 1 }}>Footer</Typography>\n {/* </AccordionSummary> */}\n <Paper sx={{ mb: 1, boxShadow: 'none', opacity: 0.5 }} dangerouslySetInnerHTML={{ __html: generateHeaderFooterPreview(footerSections) }} />\n {/* </Accordion> */}\n </>\n )}\n </Box>\n );\n };\n\n return (\n <Box sx={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n <Box sx={{ flex: 1, overflow: 'auto', height: 'calc(100vh - 104px)' }}>\n <Container maxWidth={editHtml ? false : 'lg'} sx={{ py: editHtml ? 0 : 4, height: editHtml ? '100%' : undefined }}>\n {editHtml ? (\n renderHtmlEditor()\n ) : preview ? (\n renderPreview()\n ) : (\n <>\n {renderCanvas(\n 'Header',\n CANVAS_TYPES.HEADER,\n renderedHeaderSections,\n setHeaderCanvasRef,\n headerCanvasRef,\n isEditingHeaderFooter\n )}\n {renderCanvas(\n 'Content',\n CANVAS_TYPES.MAIN,\n renderedMainSections,\n setMainCanvasRef,\n mainCanvasRef,\n !isEditingHeaderFooter\n )}\n {renderCanvas(\n 'Footer',\n CANVAS_TYPES.FOOTER,\n renderedFooterSections,\n setFooterCanvasRef,\n footerCanvasRef,\n isEditingHeaderFooter\n )}\n </>\n )}\n </Container>\n </Box >\n {!editHtml && (\n <Box\n sx={{\n width: isFromPreview ? (editMode ? 400 : 0) : 400,\n flexShrink: 0,\n position: 'sticky',\n top: 0,\n alignSelf: 'flex-start',\n height: 'calc(100vh - 104px)',\n overflowY: 'auto',\n borderLeft: '1px solid',\n borderColor: 'divider',\n bgcolor: 'background.paper',\n zIndex: 1,\n }}\n >\n {(selectedSection && !selectedSectionData?.is_edited_from_source && !isSectionEditing) ? (\n <SectionFormatPanel\n section={selectedSectionData}\n onClose={() => onSelectSection(null)}\n onUpdate={(data) => {\n if (selectedSection) {\n const canvasType = headerSections.some(s => s.id === selectedSection)\n ? CANVAS_TYPES.HEADER\n : footerSections.some(s => s.id === selectedSection)\n ? CANVAS_TYPES.FOOTER\n : CANVAS_TYPES.MAIN;\n onUpdateSection(selectedSection, data, canvasType);\n }\n }}\n placeholders={placeholders}\n handleSave={handleSave}\n relation_table={relation_table}\n />\n ) : (\n isFromPreview ? (editMode && <EditorSidebar />) : <EditorSidebar />\n )}\n </Box>\n )}\n </Box >\n );\n};\n\nexport default EditorCanvas;","/* eslint-disable no-case-declarations */\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, useCallback, useMemo } from 'react';\nimport EditorHeader from './EditorHeader';\nimport EditorCanvas from './EditorCanvas';\nimport {\n DndContext,\n DragEndEvent,\n DragOverEvent,\n DragStartEvent,\n pointerWithin,\n} from '@dnd-kit/core';\nimport { SectionData, ElementType } from '../types/editor';\nimport { v4 as uuidv4 } from 'uuid';\nimport { enqueueSnackbar } from 'notistack';\nimport { Box } from '@mui/material';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { getErrorMessage, getToken } from '../../../utils/common';\nimport { getV1FormBuilderRelationalSchemaFieldsName, getV1SubjectsId, getV1TemplateHeaderFooterCompanyIdHeaderFooter, getV1TemplatesId, patchV1TemplateHeaderFooterId, postV1TemplateHeaderFooter } from '../../../api-client/api.system-feature/api';\nimport { templateRoutes, extractStyles, generateEmailPreview, generateHeaderFooterPreview, generateInlineStyles } from '../utils/common';\nimport { initialStyles } from '../utils/constant';\nimport _ from 'lodash';\nimport formatText from '../../../utils/format-text';\nimport TemplateNameModal from \"../template-name-modal/template-name-modal\";\nimport { useDebouncedUpdate } from '../hooks/useDebouncedUpdate';\n\ninterface EnhancedSectionData extends SectionData {\n isSplitPair?: boolean;\n splitGroupId?: string;\n splitWidth?: number;\n}\n\ninterface SectionFlowEditorProps {\n modulePath: string;\n module: string;\n type: string;\n}\n\nconst SectionFlowEditor: React.FC<SectionFlowEditorProps> = ({ modulePath, module, type }) => {\n const { id, template_id } = useParams();\n const { state: locationState } = useLocation();\n\n const [sections, setSections] = useState<EnhancedSectionData[]>([]);\n const [headerSections, setHeaderSections] = useState<EnhancedSectionData[]>([]);\n const [footerSections, setFooterSections] = useState<EnhancedSectionData[]>([]);\n const [activeId, setActiveId] = useState<string | null>(null);\n const [editMode, setEditMode] = useState<true | false>(false);\n const [fromPreview, setFromPreview] = useState<boolean>(false);\n const [selectedSection, setSelectedSection] = useState<string | null>(null);\n const [overSection, setOverSection] = useState<string | null>(null);\n const [preview, setPreview] = useState<boolean>(locationState?.fromPreview ? true : false);\n const [editHtml, setEditHtml] = useState<boolean>(false);\n const [placeholders, setPlaceholders] = useState<Record<string, any>[]>([]);\n const [activeCanvas, setActiveCanvas] = useState<'main' | 'header' | 'footer'>('main');\n const [isEditingHeaderFooter, setIsEditingHeaderFooter] = useState<boolean>(false);\n const [payload, setPayload] = useState<any>(null);\n const [headerFooterId, setHeaderFooterId] = useState<string>('');\n const ROUTES = templateRoutes(modulePath, type);\n const [relation_table, setRelationTable] = useState<any[]>([]);\n const [templateData, setTemplateData] = useState<Record<string, any> | null>(null);\n\n // Optimistic update state\n const [isSaving, setIsSaving] = useState<boolean>(false);\n const [savedSnapshot, setSavedSnapshot] = useState<{\n sections: EnhancedSectionData[];\n headerSections: EnhancedSectionData[];\n footerSections: EnhancedSectionData[];\n } | null>(null);\n const [zoom, setZoom] = useState<number>(100);\n\n const handleZoomIn = () => {\n setZoom(prev => Math.min(prev + 10, 150));\n };\n\n const handleZoomOut = () => {\n setZoom(prev => Math.max(prev - 10, 50));\n };\n\n const handleResetZoom = () => {\n setZoom(100);\n };\n // History state for undo/redo functionality\n const [history, setHistory] = useState<{\n past: Array<{ sections: EnhancedSectionData[]; headerSections: EnhancedSectionData[]; footerSections: EnhancedSectionData[] }>;\n future: Array<{ sections: EnhancedSectionData[]; headerSections: EnhancedSectionData[]; footerSections: EnhancedSectionData[] }>;\n }>({\n past: [],\n future: [],\n });\n const MAX_HISTORY_SIZE = 50;\n\n // Memoize placeholders to prevent recreation on every render\n const memoizedPlaceholders = useMemo(() => placeholders, [JSON.stringify(placeholders)]);\n\n // Helper function to save current state to history\n const saveToHistory = useCallback(() => {\n setHistory((prev) => {\n const newPast = [\n ...prev.past,\n {\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n },\n ].slice(-MAX_HISTORY_SIZE); // Keep only last 50 operations\n\n return {\n past: newPast,\n future: [], // Clear future when new action is performed\n };\n });\n }, [sections, headerSections, footerSections]);\n\n // Undo handler\n const handleUndo = useCallback(() => {\n if (history.past.length === 0) return;\n\n const previous = history.past[history.past.length - 1];\n const newPast = history.past.slice(0, -1);\n\n setHistory({\n past: newPast,\n future: [\n {\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n },\n ...history.future,\n ].slice(0, MAX_HISTORY_SIZE),\n });\n\n setSections(previous.sections);\n setHeaderSections(previous.headerSections);\n setFooterSections(previous.footerSections);\n }, [history, sections, headerSections, footerSections]);\n\n // Redo handler\n const handleRedo = useCallback(() => {\n if (history.future.length === 0) return;\n\n const next = history.future[0];\n const newFuture = history.future.slice(1);\n\n setHistory({\n past: [\n ...history.past,\n {\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n },\n ].slice(-MAX_HISTORY_SIZE),\n future: newFuture,\n });\n\n setSections(next.sections);\n setHeaderSections(next.headerSections);\n setFooterSections(next.footerSections);\n }, [history, sections, headerSections, footerSections]);\n\n // Keyboard shortcuts for undo/redo\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n // Ctrl+Z or Cmd+Z for undo\n if ((event.ctrlKey || event.metaKey) && event.key === 'z' && !event.shiftKey) {\n event.preventDefault();\n handleUndo();\n }\n // Ctrl+Y or Cmd+Shift+Z for redo\n else if (\n ((event.ctrlKey || event.metaKey) && event.key === 'y') ||\n ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === 'z')\n ) {\n event.preventDefault();\n handleRedo();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleUndo, handleRedo]);\n\n const createNewSection = useCallback((type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\n let content = '';\n const styles = initialStyles[type] || {};\n const inlineStyles: string = generateInlineStyles(styles);\n\n const idPrefix = activeCanvas === 'header' && isEditingHeaderFooter ? 'header-' :\n activeCanvas === 'footer' && isEditingHeaderFooter ? 'footer-' : '';\n\n switch (type) {\n case 'heading':\n content = `<h1 style=\"${inlineStyles}\">Heading 1</h1>`;\n break;\n case 'heading-2':\n content = `<h2 style=\"${inlineStyles}\">Heading 2</h2>`;\n break;\n case 'heading-3':\n content = `<h3 style=\"${inlineStyles}\">Heading 3</h3>`;\n break;\n case 'heading-4':\n content = `<h4 style=\"${inlineStyles}\">Heading 4</h4>`;\n break;\n case 'text':\n content = `<p style=\"${inlineStyles}\">Hello, enter your text here...</p>`;\n break;\n case 'image':\n content = `<img src=\"${attrs.src}\" alt=\"${attrs.alt}\" style=\"${inlineStyles};\" />`;\n break;\n case 'buttons':\n attrs.text = attrs?.text || 'Button text';\n content = `<button style=\"${inlineStyles}\">${attrs.text}</button>`;\n break;\n case 'divider':\n content = `<hr style=\"${inlineStyles}\" />`;\n break;\n case 'table':\n const tableStyles = styles as any;\n const { border, borderStyle, borderColor, ...rest } = tableStyles;\n const tInlineStyles = generateInlineStyles(tableStyles.is_bordered ? tableStyles : rest);\n const tHeadInlineStyles: string = generateInlineStyles(tableStyles.tHead);\n const tBodyInlineStyles: string = generateInlineStyles(tableStyles.tBody);\n const thCellInlineStyles: string = generateInlineStyles({ ...tableStyles.thCells, border, borderStyle, borderColor });\n const tbCellInlineStyles: string = generateInlineStyles({ ...tableStyles.tbCells, border, borderStyle, borderColor });\n content = `\n <table style=\"${tInlineStyles}\">\n <thead style=\"${tHeadInlineStyles}\">\n <tr style=\"background-color: #f5f5f5;\">\n <th style=\"${thCellInlineStyles}\"></th>\n <th style=\"${thCellInlineStyles}\"></th>\n <th style=\"${thCellInlineStyles}\"></th>\n </tr>\n </thead>\n <tbody style=\"${tBodyInlineStyles}\">\n <tr>\n <td style=\"${tbCellInlineStyles}\"></td>\n <td style=\"${tbCellInlineStyles}\"></td>\n <td style=\"${tbCellInlineStyles}\"></td>\n </tr>\n </tbody>\n </table>\n `;\n break;\n case 'signature':\n content = `<div style=\"${inlineStyles}\">Signature: <input type='text' style=\"border:0; border-bottom:1px solid black\" class='signature-input'/></div>`;\n break;\n case 'qr-code':\n attrs.placeholder = attrs?.placeholder || '{{qr_data}}';\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\n break;\n case 'bar-code':\n attrs.placeholder = attrs?.placeholder || '{{barcode_data}}';\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\n break;\n default:\n content = '<p style=\"font-size: 16px; color: #333333; line-height: 1.5;\">New section</p>';\n }\n\n let attributes: Record<string, any> = {};\n attributes = extractStyles(content, type);\n\n return {\n id: `${idPrefix}section-${uuidv4()}`,\n content,\n type,\n attributes: { ...(attrs || {}), styles },\n is_edited_from_source: false\n };\n }, [activeCanvas, isEditingHeaderFooter]);\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n const { active } = event;\n setActiveId(active.id as string);\n }, []);\n\n const handleDragOver = useCallback((event: DragOverEvent) => {\n const { /* active, */ over } = event;\n\n if (!over) {\n setOverSection(null);\n return;\n }\n\n if (over.id === 'header-canvas' && isEditingHeaderFooter) {\n setActiveCanvas('header');\n } else if (over.id === 'footer-canvas' && isEditingHeaderFooter) {\n setActiveCanvas('footer');\n } else if (over.id === 'main-canvas') {\n setActiveCanvas('main');\n }\n\n if (over.id !== 'header-canvas' && over.id !== 'main-canvas' && over.id !== 'footer-canvas') {\n setOverSection(over.id as string);\n }\n }, [isEditingHeaderFooter]);\n\n const handleDragEnd = useCallback((event: DragEndEvent) => {\n const { active, over } = event;\n\n setActiveId(null);\n setOverSection(null);\n\n if (!over) return;\n\n let targetSections = sections;\n let setTargetSections = setSections;\n\n if ((over.id === 'header-canvas' || overSection?.startsWith('header-')) && isEditingHeaderFooter) {\n targetSections = headerSections;\n setTargetSections = setHeaderSections;\n setActiveCanvas('header');\n } else if ((over.id === 'footer-canvas' || overSection?.startsWith('footer-')) && isEditingHeaderFooter) {\n targetSections = footerSections;\n setTargetSections = setFooterSections;\n setActiveCanvas('footer');\n } else {\n setActiveCanvas('main');\n }\n\n if (active.data.current?.type === 'image') {\n saveToHistory(); // Save state before adding image section\n const imageUrl = active.data.current.imageUrl;\n const newSection: EnhancedSectionData = createNewSection('image', { src: imageUrl, alt: 'Image' });\n\n const overIndex = targetSections.findIndex((section) => section.id === over.id);\n const newSections = [...targetSections];\n\n if (over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas' || overIndex === -1) {\n setTargetSections([...targetSections, newSection]);\n } else {\n newSections.splice(overIndex, 0, newSection);\n setTargetSections(newSections);\n }\n\n enqueueSnackbar('Added uploaded image section');\n return;\n }\n\n if (typeof active.id === 'string' && active.id.startsWith('sidebar-')) {\n saveToHistory(); // Save state before adding new section\n const type = active.id.replace('sidebar-', '') as ElementType;\n const newSection = createNewSection(type);\n\n const overIndex = targetSections.findIndex((section) => section.id === over.id);\n const isOverSection = overIndex !== -1;\n\n if (!isOverSection || over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas') {\n setTargetSections([...targetSections, newSection]);\n } else {\n const targetSection = targetSections[overIndex];\n const isEmpty =\n !targetSection.content ||\n targetSection.content.includes('Click to add') ||\n targetSection.content.includes('enter your text');\n\n if (isEmpty) {\n const updatedSections = [...targetSections];\n updatedSections[overIndex] = {\n ...targetSection,\n type,\n content: newSection.content,\n };\n setTargetSections(updatedSections);\n // enqueueSnackbar(`Changed section to ${type}`);\n } else {\n const updatedSections = [...targetSections];\n updatedSections.splice(overIndex, 0, newSection);\n setTargetSections(updatedSections);\n // enqueueSnackbar(`Added new ${type} section`);\n }\n }\n return;\n }\n\n if (\n active.id !== over.id &&\n typeof active.id === 'string' &&\n typeof over.id === 'string'\n ) {\n saveToHistory(); // Save state before reordering sections\n let sourceSections: EnhancedSectionData[] = [];\n let sourceSetSections: React.Dispatch<React.SetStateAction<EnhancedSectionData[]>> | null = null;\n let canvasId = '';\n\n if (active.id.startsWith('header-') && isEditingHeaderFooter) {\n sourceSections = headerSections;\n sourceSetSections = setHeaderSections;\n canvasId = 'header-canvas';\n } else if (active.id.startsWith('footer-') && isEditingHeaderFooter) {\n sourceSections = footerSections;\n sourceSetSections = setFooterSections;\n canvasId = 'footer-canvas';\n } else {\n sourceSections = sections;\n sourceSetSections = setSections;\n canvasId = 'main-canvas';\n }\n\n const cleanActiveId = active.id.replace(/^(header-|footer-)/, '');\n\n const oldIndex = sourceSections.findIndex((section) =>\n section.id === cleanActiveId || section.id === active.id\n );\n\n let newIndex = targetSections.findIndex((section) =>\n section.id === String(over.id).replace(/^(header-|footer-)/, '')\n );\n\n if (over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas') {\n newIndex = targetSections.length;\n }\n\n if (oldIndex !== -1 && newIndex !== -1) {\n if (sourceSections === targetSections) {\n const newSections = [...sourceSections];\n const [movedSection] = newSections.splice(oldIndex, 1);\n\n if (movedSection.isSplitPair && movedSection.splitGroupId) {\n const groupId = movedSection.splitGroupId;\n const groupSections = [movedSection, ...sourceSections.filter(\n s => s.splitGroupId === groupId && s.id !== movedSection.id\n )];\n\n const cleaned = newSections.filter(s => s.splitGroupId !== groupId);\n cleaned.splice(newIndex, 0, ...groupSections);\n sourceSetSections(cleaned);\n } else {\n newSections.splice(newIndex, 0, movedSection);\n sourceSetSections(newSections);\n }\n } else {\n const originalSection = sourceSections[oldIndex];\n\n const newSourceSections = [...sourceSections];\n newSourceSections.splice(oldIndex, 1);\n sourceSetSections(newSourceSections);\n\n const newTargetSections = [...targetSections];\n\n const movedSection = { ...originalSection };\n\n if ((over.id === 'header-canvas' || over.id.startsWith('header-')) && isEditingHeaderFooter) {\n if (!movedSection.id.startsWith('header-')) {\n movedSection.id = `header-${movedSection.id}`;\n }\n } else if ((over.id === 'footer-canvas' || over.id.startsWith('footer-')) && isEditingHeaderFooter) {\n if (!movedSection.id.startsWith('footer-')) {\n movedSection.id = `footer-${movedSection.id}`;\n }\n } else {\n movedSection.id = movedSection.id.replace(/^(header-|footer-)/, '');\n }\n\n newTargetSections.splice(newIndex, 0, movedSection);\n setTargetSections(newTargetSections);\n }\n }\n }\n }, [sections, headerSections, footerSections, overSection, isEditingHeaderFooter, activeCanvas, createNewSection, saveToHistory]);\n\n const getRelevantSections = useCallback((canvasType: string) => {\n if (canvasType === 'header' && isEditingHeaderFooter) return headerSections;\n if (canvasType === 'footer' && isEditingHeaderFooter) return footerSections;\n return sections;\n }, [sections, headerSections, footerSections, isEditingHeaderFooter]);\n\n const getRelevantSetSections = useCallback((canvasType: string) => {\n if (canvasType === 'header' && isEditingHeaderFooter) return setHeaderSections;\n if (canvasType === 'footer' && isEditingHeaderFooter) return setFooterSections;\n return setSections;\n }, [isEditingHeaderFooter]);\n\n // Internal update function (not debounced)\n const updateSectionImmediate = useCallback((id: string, data: Partial<EnhancedSectionData>, canvasType: string) => {\n const relevantSections = getRelevantSections(canvasType);\n const relevantSetSections = getRelevantSetSections(canvasType);\n\n const cleanId = id.replace(/^(header-|footer-)/, '');\n\n relevantSetSections(\n relevantSections.map((section) =>\n section.id === cleanId || section.id === id ? { ...section, ...data } : section\n )\n );\n }, [getRelevantSections, getRelevantSetSections]);\n\n // Debounced version for section content updates (300ms delay)\n const handleUpdateSectionDebounced = useDebouncedUpdate(updateSectionImmediate, 300);\n\n // Main handler that decides whether to debounce\n const handleUpdateSection = useCallback((id: string, data: Partial<EnhancedSectionData>, canvasType: string) => {\n // Only debounce content updates, apply other updates immediately\n if (data.content !== undefined && Object.keys(data).length === 1) {\n handleUpdateSectionDebounced(id, data, canvasType);\n } else {\n updateSectionImmediate(id, data, canvasType);\n }\n }, [updateSectionImmediate, handleUpdateSectionDebounced]);\n\n const handleSplitSection = useCallback((id: string, content1: string, content2: string, canvasType: string) => {\n saveToHistory(); // Save state before splitting section\n\n const relevantSections = getRelevantSections(canvasType);\n const relevantSetSections = getRelevantSetSections(canvasType);\n\n const cleanId = id.replace(/^(header-|footer-)/, '');\n\n const index = relevantSections.findIndex((section) => section.id === cleanId || section.id === id);\n if (index === -1) return;\n\n const section = relevantSections[index];\n const newSections = [...relevantSections];\n\n const sectionPrefix = canvasType === 'header' ? 'header-' : canvasType === 'footer' ? 'footer-' : '';\n\n if (section.isSplitPair && section.splitGroupId) {\n const splitGroupId = section.splitGroupId;\n const splitSections = newSections.filter(s => s.splitGroupId === splitGroupId);\n const totalSections = splitSections.length + 1;\n const newWidth = 100 / totalSections;\n\n newSections[index] = {\n ...section,\n content: content1,\n splitWidth: newWidth\n };\n\n const newSection: EnhancedSectionData = {\n id: `${sectionPrefix}section-${uuidv4()}`,\n content: content2,\n type: section.type,\n isSplitPair: true,\n splitGroupId: splitGroupId,\n splitWidth: newWidth,\n attributes: section.attributes,\n is_edited_from_source: false\n };\n\n newSections.splice(index + 1, 0, newSection);\n\n for (let i = 0; i < newSections.length; i++) {\n if (newSections[i].splitGroupId === splitGroupId) {\n newSections[i].splitWidth = newWidth;\n }\n }\n } else {\n const splitGroupId = uuidv4();\n const initialWidth = 50;\n\n newSections[index] = {\n ...section,\n content: content1,\n isSplitPair: true,\n splitGroupId,\n splitWidth: initialWidth\n };\n\n const newSection: EnhancedSectionData = {\n id: `${sectionPrefix}section-${uuidv4()}`,\n content: content2,\n type: section.type,\n isSplitPair: true,\n splitGroupId,\n splitWidth: initialWidth,\n attributes: section.attributes,\n is_edited_from_source: false\n };\n\n newSections.splice(index + 1, 0, newSection);\n }\n\n relevantSetSections(newSections);\n // enqueueSnackbar('Section split successfully');\n }, [getRelevantSections, getRelevantSetSections, activeCanvas, isEditingHeaderFooter, saveToHistory]);\n\n const handleDeleteSection = useCallback((id: string, canvasType: string) => {\n saveToHistory(); // Save state before deleting section\n\n const relevantSections = getRelevantSections(canvasType);\n const relevantSetSections = getRelevantSetSections(canvasType);\n\n const cleanId = id.replace(/^(header-|footer-)/, '');\n\n const sectionToDelete = relevantSections.find(s => s.id === cleanId || s.id === id);\n\n if (!sectionToDelete) return;\n\n if (sectionToDelete.isSplitPair && sectionToDelete.splitGroupId) {\n const splitSections = relevantSections.filter(s => s.splitGroupId === sectionToDelete.splitGroupId);\n\n if (splitSections.length <= 2) {\n const remainingSection = splitSections.find(s => s.id !== cleanId && s.id !== id);\n if (remainingSection) {\n remainingSection.isSplitPair = false;\n remainingSection.splitGroupId = undefined;\n remainingSection.splitWidth = undefined;\n }\n relevantSetSections(relevantSections.filter(s => s.id !== cleanId && s.id !== id));\n } else {\n const remainingSplitSections = splitSections.filter(s => s.id !== cleanId && s.id !== id);\n const newWidth = 100 / remainingSplitSections.length;\n\n const updatedSections = relevantSections.filter(section => section.id !== cleanId && section.id !== id).map(section => {\n if (section.splitGroupId === sectionToDelete.splitGroupId) {\n return { ...section, splitWidth: newWidth };\n }\n return section;\n });\n\n relevantSetSections(updatedSections);\n // enqueueSnackbar('Section removed from split group');\n }\n } else {\n relevantSetSections(relevantSections.filter(section => section.id !== cleanId && section.id !== id));\n // enqueueSnackbar('Section deleted');\n }\n\n if (selectedSection === id) {\n setSelectedSection(null);\n }\n }, [getRelevantSections, getRelevantSetSections, selectedSection, saveToHistory]);\n\n useEffect(() => {\n if (locationState?.fromPreview) {\n setEditMode(locationState?.isViewOnly ? false : true);\n setFromPreview(true);\n }\n document.body.style.overflow = 'hidden';\n const main = document.getElementsByTagName('main')?.[0];\n if (main) {\n main.style.marginTop = '4.125rem';\n }\n return () => {\n document.body.removeAttribute('style');\n }\n }, []);\n\n const getData = async () => {\n if (id) {\n const token = getToken();\n const subjRes = await getV1SubjectsId({\n ...token,\n 'x-timezone': token['x-timezone']?.toString() || '',\n id\n });\n\n if ('data' in subjRes && subjRes.data && typeof subjRes.data === 'object' && 'resource' in subjRes.data) {\n const resource = (subjRes.data as any).resource;\n const token2 = getToken();\n const fRes = await getV1FormBuilderRelationalSchemaFieldsName({\n ...token2,\n 'x-timezone': token2['x-timezone']?.toString() || '',\n name: resource,\n });\n const schemaFields = ('data' in fRes && fRes.data && typeof fRes.data === 'object' && 'fields' in fRes.data)\n ? ((fRes.data as any).fields || [])\n : [];\n const relation_table = ('data' in fRes && fRes.data && typeof fRes.data === 'object' && 'relational_fields' in fRes.data)\n ? ((fRes.data as any).relational_fields || [])\n : [];\n\n // Process main schema fields\n const updatedFields = schemaFields\n .map((field) => ({\n ...field,\n key: field.key.replace('__replaceKey', ''),\n }))\n .filter((field) => !field.is_inner_join && field.alias !== 'id' && !field?.alias?.includes('_id'));\n\n // Process relation tables - separate array and object types\n const arrayRelationTables = [];\n const objectRelationFields = [];\n\n relation_table.forEach((table) => {\n if (!table) return;\n\n const updatedTableFields = (table.fields || []).map((field) => {\n const updatedField = {\n ...field,\n key: field.key.replace('__replaceKey', ''),\n alias: field?.templateKey ? field?.templateKey : field.alias,\n };\n\n // Prepend dataKey to field keys for object types\n if (table.type === 'object' && table.dataKey) {\n updatedField.key = `${table.dataKey}.${updatedField.key}`;\n }\n\n return updatedField;\n }).filter(\n (field) =>\n !field.is_inner_join &&\n field.alias !== 'id' &&\n !field.alias.includes('_id')\n );\n\n const uniqueTableFields = _.differenceWith(\n updatedTableFields,\n updatedTableFields,\n (fieldA: any, fieldB: any) => fieldA.key === fieldB?.joinKey\n );\n\n const tableFields = uniqueTableFields.map((f: any) => {\n const field = formatText(f.alias.replace(/_data$/, '').replace(/_/g, ' '));\n const value = table.type === 'object' && table.dataKey\n ? `${table.dataKey}.${f.alias.replace(/ /g, '_').toLowerCase()}`\n : f.alias.replace(/ /g, '_').toLowerCase();\n\n return {\n label: field,\n value: value\n };\n });\n\n if (table.type === 'object') {\n // Merge object type fields into main fields\n objectRelationFields.push(...tableFields);\n } else {\n // Keep array types separate\n arrayRelationTables.push({\n ...table,\n fields: tableFields\n });\n }\n });\n\n // Combine main fields and object relation fields\n const allFields = [\n ...updatedFields.map((f) => {\n const n = f?.alias || f?.key\n const field = formatText(n.replace(/_data$/, '').replace(/_/g, ' '));\n return {\n label: field,\n value: field.replace(/ /g, '_').toLowerCase()\n };\n }),\n ...objectRelationFields\n ];\n\n const uniqueAllFields = _.uniqBy(allFields, 'value');\n\n setPlaceholders(uniqueAllFields);\n setRelationTable(arrayRelationTables);\n }\n }\n\n // Rest of the function remains the same...\n if (template_id) {\n const token3 = getToken();\n const res = await getV1TemplatesId({\n ...token3,\n 'x-timezone': token3['x-timezone']?.toString() || '',\n id: template_id\n });\n const templateSections = ('data' in res && res.data && typeof res.data === 'object' && 'sections' in res.data)\n ? ((res.data as any).sections || [])\n : [];\n const mainSecs = templateSections.map((s: any) => ({\n ...s,\n id: s.id || `section-${uuidv4()}`,\n attributes: {\n ...s.attributes,\n styles: s.attributes?.styles || initialStyles[s.type] || {}\n }\n }));\n setTemplateData(('data' in res && res.data) ? res.data as any : null);\n\n setSections(mainSecs);\n }\n\n if (locationState?.company_id) {\n const token4 = getToken();\n const res = await getV1TemplateHeaderFooterCompanyIdHeaderFooter({\n ...token4,\n 'x-timezone': token4['x-timezone']?.toString() || '',\n company_id: locationState.company_id,\n });\n const resData = ('data' in res && res.data && typeof res.data === 'object') ? res.data as any : null;\n setHeaderFooterId(resData?._id || '');\n const headerSections = resData?.header_sections || [];\n const footerSections = resData?.footer_sections || [];\n const headerSecs = headerSections.map((s) => ({\n ...s,\n id: s.id || `header-section-${uuidv4()}`,\n attributes: {\n ...s.attributes,\n styles: s.attributes?.styles || initialStyles[s.type] || {}\n }\n }));\n const footerSecs = footerSections.map((s) => ({\n ...s,\n id: s.id || `footer-section-${uuidv4()}`,\n attributes: {\n ...s.attributes,\n styles: s.attributes?.styles || initialStyles[s.type] || {}\n }\n }));\n\n setHeaderSections(headerSecs);\n setFooterSections(footerSecs);\n }\n };\n\n useEffect(() => {\n getData();\n }, [template_id, id, locationState?.company_id]);\n\n const handleApplyHtmlEdit = useCallback((html: string) => {\n saveToHistory(); // Save state before applying HTML edit\n const newSection: EnhancedSectionData = {\n id: `section-${uuidv4()}`,\n content: html,\n type: 'text',\n is_edited_from_source: true,\n };\n setSections([newSection]);\n setEditHtml(false);\n }, [saveToHistory]);\n\n const handleCancelHtmlEdit = useCallback(() => {\n setEditHtml(false);\n }, []);\n\n const handleSave = useCallback(async () => {\n if (sections.length === 0 && headerSections.length === 0 && footerSections.length === 0) {\n enqueueSnackbar('Please add at least one section');\n return;\n }\n\n // Save snapshot for potential rollback\n setSavedSnapshot({\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n });\n\n const mainHtml = generateEmailPreview(sections, headerSections, footerSections, true);\n try {\n const p = {\n ...getToken(),\n ...(template_id ? { id: template_id } : { subject_id: id, is_default: false, company_id: locationState.company_id }),\n sections: sections.map(s => ({ ...s, attributes: s.attributes })),\n contents: mainHtml\n }\n setPayload(p);\n } catch (error) {\n const m = getErrorMessage(error?.message);\n enqueueSnackbar(m, { variant: 'error' });\n setSavedSnapshot(null);\n }\n }, [sections, headerSections, footerSections, template_id, id, locationState]);\n\n const handleSaveHeaderFooter = useCallback(async () => {\n if (sections.length === 0 && headerSections.length === 0 && footerSections.length === 0) {\n enqueueSnackbar('Please add at least one section', { variant: 'error' });\n return;\n } else if (!locationState?.company_id) {\n enqueueSnackbar('Company has not been selected', { variant: 'error' });\n return;\n }\n\n // Save snapshot for potential rollback\n setSavedSnapshot({\n sections: [...sections],\n headerSections: [...headerSections],\n footerSections: [...footerSections],\n });\n\n // Show loading state immediately (optimistic update)\n setIsSaving(true);\n\n const headerHtml = generateHeaderFooterPreview(headerSections, 'header');\n const footerHtml = generateHeaderFooterPreview(footerSections, 'footer');\n const combinedHtml = `${headerHtml}${footerHtml}`;\n\n // Convert splitWidth from number to string for API\n const convertSectionForApi = (section: EnhancedSectionData) => ({\n id: section.id,\n content: section.content,\n type: section.type,\n isSplitPair: section.isSplitPair,\n splitGroupId: section.splitGroupId,\n splitWidth: section.splitWidth !== undefined ? String(section.splitWidth) : undefined,\n attributes: section.attributes,\n });\n\n const convertedHeaderSections = headerSections.map(convertSectionForApi);\n const convertedFooterSections = footerSections.map(convertSectionForApi);\n\n try {\n if (headerFooterId) {\n const token5 = getToken();\n const res = await patchV1TemplateHeaderFooterId({\n ...token5,\n 'x-timezone': token5['x-timezone']?.toString() || '',\n id: headerFooterId,\n header_sections: convertedHeaderSections,\n footer_sections: convertedFooterSections,\n contents: combinedHtml\n });\n if (res.status_code === 200) {\n enqueueSnackbar('Header/Footer saved successfully', { variant: 'success' });\n setIsEditingHeaderFooter(false);\n setSavedSnapshot(null);\n }\n } else {\n const token6 = getToken();\n const res = await postV1TemplateHeaderFooter({\n ...token6,\n 'x-timezone': token6['x-timezone']?.toString() || '',\n header_sections: convertedHeaderSections,\n footer_sections: convertedFooterSections,\n contents: combinedHtml,\n company_id: locationState.company_id\n });\n if (res.status_code === 200) {\n enqueueSnackbar('Header/Footer saved successfully', { variant: 'success' });\n setIsEditingHeaderFooter(false);\n setSavedSnapshot(null);\n }\n }\n } catch (error) {\n const m = getErrorMessage(error?.message);\n enqueueSnackbar(m, { variant: 'error' });\n\n // Revert to saved snapshot on error\n if (savedSnapshot) {\n setSections(savedSnapshot.sections);\n setHeaderSections(savedSnapshot.headerSections);\n setFooterSections(savedSnapshot.footerSections);\n enqueueSnackbar('Changes reverted due to save error', { variant: 'warning' });\n }\n } finally {\n setIsSaving(false);\n setSavedSnapshot(null);\n }\n }, [sections, headerSections, footerSections, headerFooterId, locationState, savedSnapshot]);\n\n const toggleHeaderFooterEditing = useCallback(() => {\n setIsEditingHeaderFooter(!isEditingHeaderFooter);\n if (isEditingHeaderFooter) {\n setActiveCanvas('main');\n }\n }, [isEditingHeaderFooter]);\n\n // Handle save success from TemplateNameModal\n const handleSaveSuccess = useCallback(() => {\n setSavedSnapshot(null);\n setPayload(null);\n }, []);\n\n // Handle save error from TemplateNameModal\n const handleSaveError = useCallback(() => {\n // Revert to saved snapshot on error\n if (savedSnapshot) {\n setSections(savedSnapshot.sections);\n setHeaderSections(savedSnapshot.headerSections);\n setFooterSections(savedSnapshot.footerSections);\n enqueueSnackbar('Changes reverted due to save error', { variant: 'warning' });\n }\n\n setSavedSnapshot(null);\n setPayload(null);\n }, [savedSnapshot]);\n\n const toggleEditMode = () => {\n setEditMode(!editMode);\n if (editMode) {\n setPreview(true);\n } else {\n setPreview(false);\n }\n }\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', height: '100vh' }}>\n <EditorHeader\n fromPreview={fromPreview}\n onPreview={() => setPreview(!preview)}\n onSave={handleSave}\n onEditModeChange={toggleEditMode}\n zoom={zoom}\n onZoomIn={handleZoomIn}\n onZoomOut={handleZoomOut}\n onResetZoom={handleResetZoom}\n editMode={editMode}\n preview={preview}\n editHtml={editHtml}\n onEditHtml={() => setEditHtml(!editHtml)}\n sections={sections}\n isEditingHeaderFooter={isEditingHeaderFooter}\n setIsEditingHeaderFooter={toggleHeaderFooterEditing}\n onSaveHeaderFooter={handleSaveHeaderFooter}\n modulePath={modulePath}\n type={type}\n mode={template_id ? 'edit' : 'add'}\n templateData={templateData}\n isSaving={isSaving}\n />\n <Box sx={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n <DndContext\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n collisionDetection={pointerWithin}\n >\n <EditorCanvas\n sections={sections}\n headerSections={headerSections}\n footerSections={footerSections}\n activeId={activeId}\n overSection={overSection}\n selectedSection={selectedSection}\n onSelectSection={setSelectedSection}\n onUpdateSection={handleUpdateSection}\n onSplitSection={handleSplitSection}\n onDeleteSection={handleDeleteSection}\n preview={preview}\n editHtml={editHtml}\n onApplyHtmlEdit={handleApplyHtmlEdit}\n onCancelHtmlEdit={handleCancelHtmlEdit}\n zoom={zoom}\n editMode={editMode}\n isFromPreview={fromPreview}\n handleSave={handleSave}\n placeholders={memoizedPlaceholders}\n isEditingHeaderFooter={isEditingHeaderFooter}\n relation_table={relation_table}\n />\n </DndContext>\n </Box>\n {payload !== null &&\n <TemplateNameModal\n isOpen={payload !== null}\n setIsOpen={() => setPayload(null)}\n payload={payload}\n templateRoutes={ROUTES}\n mode={template_id ? 'edit' : 'add'}\n templateData={templateData}\n onSaveSuccess={handleSaveSuccess}\n onSaveError={handleSaveError}\n isSaving={isSaving}\n />\n }\n </Box>\n );\n};\n\nexport default SectionFlowEditor;"],"names":["templateRoutes","jsx","AppBar","jsxs","Toolbar","Box","Link","RouterLink","Typography","Fragment","Stack","IconButton","ZoomOut","ZoomIn","Divider","ZoomOutMap","Button","Edit","EyeOff","Eye","lazy","useCKEditorStyleExtractor","useDraggable","useDroppable","useState","useRef","useDebouncedUpdate","useMemo","useCallback","Suspense","Skeleton","MenuItem","Paper","FormControlLabel","Checkbox","FormControl","Select","Save","Fade","Chip","Trash","EditSectionModal","StyledToggleButtonGroup","styled","ToggleButtonGroup","toggleButtonGroupClasses","Tooltip","ToggleButton","TextControls","debounce","TextField","InputAdornment","ColorPickerInput","Slider","_","Android12Switch","Switch","useEffect","Grid","formatText","styles","MuiAccordion","table","_a","_b","_c","_d","Tabs","Tab","SearchableSelect","row","Alert","createElement","AccordionSummary","AccordionDetails","Table","TableHead","TableRow","TableCell","TableBody","Dialog","DialogTitle","DialogContent","DialogActions","extractStyles","initialStyles","generateInlineStyles","section","getInitialSectionData","CloseIcon","ListItem","ListItemIcon","ListItemText","uploadFiles","getToken","getApiConfig","postV1Drive","useDropzone","FileCode","CircularProgress","TextIcon","Heading","ImageIcon","TableIcon","SignatureIcon","QrCodeIcon","BarcodeIcon","getV1Drive","error","SearchBar","Accordion","generateEmailPreview","EditorSection","generateHeaderFooterPreview","Container","module","useParams","useLocation","type","uuidv4","enqueueSnackbar","id","getV1SubjectsId","getV1FormBuilderRelationalSchemaFieldsName","relation_table","getV1TemplatesId","getV1TemplateHeaderFooterCompanyIdHeaderFooter","headerSections","footerSections","getErrorMessage","patchV1TemplateHeaderFooterId","postV1TemplateHeaderFooter","DndContext","pointerWithin","TemplateNameModal"],"mappings":"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"}