@erpsquad/common 1.8.79 → 1.8.81

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 (660) hide show
  1. package/CHANGELOG.md +253 -253
  2. package/README.md +979 -979
  3. package/dist/_virtual/index/index.esm10.js +3 -3
  4. package/dist/_virtual/index/index.esm11.js +3 -3
  5. package/dist/_virtual/index/index.esm2.js +2 -4
  6. package/dist/_virtual/index/index.esm2.js.map +1 -1
  7. package/dist/_virtual/index/index.esm3.js +4 -2
  8. package/dist/_virtual/index/index.esm3.js.map +1 -1
  9. package/dist/_virtual/index/index.esm4.js +1 -1
  10. package/dist/_virtual/index/index.esm5.js +3 -3
  11. package/dist/_virtual/index/index.esm6.js +3 -3
  12. package/dist/_virtual/index/index.esm7.js +3 -3
  13. package/dist/_virtual/index/index.esm8.js +3 -3
  14. package/dist/_virtual/index/index.esm9.js +3 -3
  15. package/dist/_virtual/index/index10.js +1 -1
  16. package/dist/_virtual/index/index11.js +1 -1
  17. package/dist/_virtual/index/index2.js +1 -1
  18. package/dist/_virtual/index/index3.js +1 -1
  19. package/dist/_virtual/index/index4.js +1 -1
  20. package/dist/_virtual/index/index5.js +1 -1
  21. package/dist/_virtual/index/index6.js +1 -1
  22. package/dist/_virtual/index/index7.js +1 -1
  23. package/dist/_virtual/index/index8.js +1 -1
  24. package/dist/_virtual/index/index9.js +1 -1
  25. package/dist/api-client/api.accounting/api/index.esm.js.map +1 -1
  26. package/dist/api-client/api.accounting/api/index.js.map +1 -1
  27. package/dist/api-client/api.accounting/api-types.d.ts +15883 -15883
  28. package/dist/api-client/api.drive/api/index.esm.js.map +1 -1
  29. package/dist/api-client/api.drive/api/index.js.map +1 -1
  30. package/dist/api-client/api.drive/api-types.d.ts +696 -696
  31. package/dist/api-client/api.hrms/api/index.esm.js.map +1 -1
  32. package/dist/api-client/api.hrms/api/index.js.map +1 -1
  33. package/dist/api-client/api.inventory/api/index.esm.js.map +1 -1
  34. package/dist/api-client/api.inventory/api/index.js.map +1 -1
  35. package/dist/api-client/api.inventory/api-types.d.ts +6110 -6110
  36. package/dist/api-client/api.manufacturing/api/index.esm.js.map +1 -1
  37. package/dist/api-client/api.manufacturing/api/index.js.map +1 -1
  38. package/dist/api-client/api.manufacturing/api-types.d.ts +10066 -10066
  39. package/dist/api-client/api.purchase/api/index.esm.js.map +1 -1
  40. package/dist/api-client/api.purchase/api/index.js.map +1 -1
  41. package/dist/api-client/api.purchase/api-types.d.ts +6715 -6715
  42. package/dist/api-client/api.rbac/api/index.esm.js.map +1 -1
  43. package/dist/api-client/api.rbac/api/index.esm2.js.map +1 -1
  44. package/dist/api-client/api.rbac/api/index.js.map +1 -1
  45. package/dist/api-client/api.rbac/api/index2.js.map +1 -1
  46. package/dist/api-client/api.rbac/api-types.d.ts +1753 -1753
  47. package/dist/api-client/api.rental/api/index.esm.js.map +1 -1
  48. package/dist/api-client/api.rental/api/index.js.map +1 -1
  49. package/dist/api-client/api.rental/api-types.d.ts +15666 -15666
  50. package/dist/api-client/api.sales/api/index.esm.js.map +1 -1
  51. package/dist/api-client/api.sales/api/index.js.map +1 -1
  52. package/dist/api-client/api.sales/api-types.d.ts +8258 -8258
  53. package/dist/api-client/api.system-feature/api/index.esm.js.map +1 -1
  54. package/dist/api-client/api.system-feature/api/index.js.map +1 -1
  55. package/dist/api-client/api.system-feature/api-types.d.ts +2875 -2875
  56. package/dist/api-client/api.user/api/index.esm.js.map +1 -1
  57. package/dist/api-client/api.user/api/index.js.map +1 -1
  58. package/dist/api-client/api.user/api-types.d.ts +95 -95
  59. package/dist/api-client/api.workflow-automation/api/index.esm.js.map +1 -1
  60. package/dist/api-client/api.workflow-automation/api/index.js.map +1 -1
  61. package/dist/api-client/index.d.ts +39 -39
  62. package/dist/components/accordion/accordion/index.esm.js.map +1 -1
  63. package/dist/components/accordion/accordion/index.js.map +1 -1
  64. package/dist/components/accordion/accordion.d.ts +1 -1
  65. package/dist/components/action-bar/action-bar/index.esm.js +1 -1
  66. package/dist/components/action-bar/action-bar/index.esm.js.map +1 -1
  67. package/dist/components/action-bar/action-bar/index.js +5 -5
  68. package/dist/components/action-bar/action-bar/index.js.map +1 -1
  69. package/dist/components/action-bar/action-bar.d.ts +1 -1
  70. package/dist/components/activity-tag/activity-tag/index.esm.js.map +1 -1
  71. package/dist/components/activity-tag/activity-tag/index.js.map +1 -1
  72. package/dist/components/alert/alert/index.esm.js.map +1 -1
  73. package/dist/components/alert/alert/index.js.map +1 -1
  74. package/dist/components/button/button/index.esm.js.map +1 -1
  75. package/dist/components/button/button/index.js.map +1 -1
  76. package/dist/components/change-user-password-modal/change-user-password-modal/index.esm.js.map +1 -1
  77. package/dist/components/change-user-password-modal/change-user-password-modal/index.js.map +1 -1
  78. package/dist/components/checkbox/checkbox/index.esm.js.map +1 -1
  79. package/dist/components/checkbox/checkbox/index.js.map +1 -1
  80. package/dist/components/checkbox/checkbox.d.ts +1 -1
  81. package/dist/components/chip/chip/index.esm.js.map +1 -1
  82. package/dist/components/chip/chip/index.js.map +1 -1
  83. package/dist/components/chip-generator/chip-generator/index.esm.js.map +1 -1
  84. package/dist/components/chip-generator/chip-generator/index.js.map +1 -1
  85. package/dist/components/date-picker/date-picker/index.esm.js.map +1 -1
  86. package/dist/components/date-picker/date-picker/index.js.map +1 -1
  87. package/dist/components/date-picker/date-picker.d.ts +1 -1
  88. package/dist/components/date-time-picker/date-time-picker/index.esm.js.map +1 -1
  89. package/dist/components/date-time-picker/date-time-picker/index.js.map +1 -1
  90. package/dist/components/editor/custom-editor/index.esm.js.map +1 -1
  91. package/dist/components/editor/custom-editor/index.js.map +1 -1
  92. package/dist/components/filter/components/delete-group/index.esm.js +1 -0
  93. package/dist/components/filter/components/delete-group/index.esm.js.map +1 -1
  94. package/dist/components/filter/components/delete-group/index.js +1 -1
  95. package/dist/components/filter/components/delete-group/index.js.map +1 -1
  96. package/dist/components/filter/filter/index.esm.js +1 -1
  97. package/dist/components/filter/filter/index.esm.js.map +1 -1
  98. package/dist/components/filter/filter/index.js +7 -7
  99. package/dist/components/filter/filter/index.js.map +1 -1
  100. package/dist/components/footer/footer.d.ts +1 -1
  101. package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.esm.js.map +1 -1
  102. package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.js.map +1 -1
  103. package/dist/components/form-control/form-builder/form-builder-element/media.d.ts +1 -1
  104. package/dist/components/form-control/form-builder/form-builder-element/phone.d.ts +1 -1
  105. package/dist/components/form-control/form-builder/form-builder-element/select.d.ts +1 -1
  106. package/dist/components/form-control/form-builder/form-builder-element/text.d.ts +1 -1
  107. package/dist/components/form-control/form-builder/form-builder-element/time.d.ts +1 -1
  108. package/dist/components/form-control/form-parser/form-switcher.d.ts +1 -1
  109. package/dist/components/header/header/index.esm.js.map +1 -1
  110. package/dist/components/header/header/index.js.map +1 -1
  111. package/dist/components/header/redux/actionCreator/index.esm.js +1 -1
  112. package/dist/components/header/redux/actionCreator/index.esm.js.map +1 -1
  113. package/dist/components/header/redux/actionCreator/index.js +1 -1
  114. package/dist/components/header/redux/actionCreator/index.js.map +1 -1
  115. package/dist/components/icons/action/index.esm.js.map +1 -1
  116. package/dist/components/icons/action/index.js.map +1 -1
  117. package/dist/components/icons/action-arrow.d.ts +3 -3
  118. package/dist/components/icons/add-circle.d.ts +3 -3
  119. package/dist/components/icons/arrow-bidirectional.d.ts +3 -3
  120. package/dist/components/icons/arrow-circle-down.d.ts +3 -3
  121. package/dist/components/icons/arrow-down-three.d.ts +3 -3
  122. package/dist/components/icons/arrow-down-two.d.ts +3 -3
  123. package/dist/components/icons/arrow-down.d.ts +3 -3
  124. package/dist/components/icons/arrow-up-down.d.ts +3 -3
  125. package/dist/components/icons/arrow-up-two.d.ts +3 -3
  126. package/dist/components/icons/assignments.d.ts +3 -3
  127. package/dist/components/icons/blank-circle.d.ts +3 -3
  128. package/dist/components/icons/block-filled.d.ts +3 -3
  129. package/dist/components/icons/calendar-add.d.ts +3 -3
  130. package/dist/components/icons/calendar.d.ts +3 -3
  131. package/dist/components/icons/checkbox-square.d.ts +3 -3
  132. package/dist/components/icons/circular-arrow-setting.d.ts +3 -3
  133. package/dist/components/icons/clock.d.ts +3 -3
  134. package/dist/components/icons/close.d.ts +3 -3
  135. package/dist/components/icons/coin-outline.d.ts +3 -3
  136. package/dist/components/icons/copy.d.ts +3 -3
  137. package/dist/components/icons/coupon.d.ts +3 -3
  138. package/dist/components/icons/criteria/index.esm.js.map +1 -1
  139. package/dist/components/icons/criteria/index.js.map +1 -1
  140. package/dist/components/icons/cross/index.esm.js.map +1 -1
  141. package/dist/components/icons/cross/index.js.map +1 -1
  142. package/dist/components/icons/cross-hire.d.ts +3 -3
  143. package/dist/components/icons/custom-styled-icon.d.ts +3 -3
  144. package/dist/components/icons/dashboard.d.ts +3 -3
  145. package/dist/components/icons/document-download.d.ts +3 -3
  146. package/dist/components/icons/document.d.ts +3 -3
  147. package/dist/components/icons/dollar-circle-filled.d.ts +3 -3
  148. package/dist/components/icons/dollar-circle.d.ts +3 -3
  149. package/dist/components/icons/edit.d.ts +3 -3
  150. package/dist/components/icons/email.d.ts +3 -3
  151. package/dist/components/icons/export.d.ts +3 -3
  152. package/dist/components/icons/eye-off.d.ts +3 -3
  153. package/dist/components/icons/eye-plus-circle.d.ts +3 -3
  154. package/dist/components/icons/eye.d.ts +3 -3
  155. package/dist/components/icons/filled-circle.d.ts +3 -3
  156. package/dist/components/icons/filter-remove.d.ts +3 -3
  157. package/dist/components/icons/filter.d.ts +3 -3
  158. package/dist/components/icons/folder-save.d.ts +3 -3
  159. package/dist/components/icons/grid.d.ts +3 -3
  160. package/dist/components/icons/hashtag.d.ts +3 -3
  161. package/dist/components/icons/image.d.ts +3 -3
  162. package/dist/components/icons/import.d.ts +3 -3
  163. package/dist/components/icons/info-circle.d.ts +3 -3
  164. package/dist/components/icons/info.d.ts +3 -3
  165. package/dist/components/icons/link-horizontal.d.ts +3 -3
  166. package/dist/components/icons/link.d.ts +3 -3
  167. package/dist/components/icons/location.d.ts +3 -3
  168. package/dist/components/icons/lowest-lead-time.d.ts +3 -3
  169. package/dist/components/icons/lowest-min-qty.d.ts +3 -3
  170. package/dist/components/icons/lowest-price.d.ts +3 -3
  171. package/dist/components/icons/more.d.ts +3 -3
  172. package/dist/components/icons/notification.d.ts +3 -3
  173. package/dist/components/icons/paper-clip.d.ts +3 -3
  174. package/dist/components/icons/paragraph.d.ts +3 -3
  175. package/dist/components/icons/payment-request.d.ts +3 -3
  176. package/dist/components/icons/phone.d.ts +3 -3
  177. package/dist/components/icons/printer.d.ts +3 -3
  178. package/dist/components/icons/process-calendar.d.ts +3 -3
  179. package/dist/components/icons/promotion.d.ts +3 -3
  180. package/dist/components/icons/radio-button.d.ts +3 -3
  181. package/dist/components/icons/receipt-filled.d.ts +3 -3
  182. package/dist/components/icons/receipt-outline.d.ts +3 -3
  183. package/dist/components/icons/receipt.d.ts +3 -3
  184. package/dist/components/icons/refresh-icon.d.ts +3 -3
  185. package/dist/components/icons/replace.d.ts +3 -3
  186. package/dist/components/icons/save.d.ts +3 -3
  187. package/dist/components/icons/search-status.d.ts +3 -3
  188. package/dist/components/icons/search.d.ts +3 -3
  189. package/dist/components/icons/settings-fallback.d.ts +3 -3
  190. package/dist/components/icons/share/index.esm.js.map +1 -1
  191. package/dist/components/icons/share/index.js.map +1 -1
  192. package/dist/components/icons/sort-arrow-icon.d.ts +3 -3
  193. package/dist/components/icons/stacked-layer.d.ts +3 -3
  194. package/dist/components/icons/start-filled.d.ts +3 -3
  195. package/dist/components/icons/three-dot-icon.d.ts +3 -3
  196. package/dist/components/icons/tick-circle-filled.d.ts +3 -3
  197. package/dist/components/icons/tick-circle.d.ts +3 -3
  198. package/dist/components/icons/tick-octagon.d.ts +3 -3
  199. package/dist/components/icons/tick.d.ts +3 -3
  200. package/dist/components/icons/toggle-switch.d.ts +3 -3
  201. package/dist/components/icons/trash.d.ts +3 -3
  202. package/dist/components/icons/wave.d.ts +3 -3
  203. package/dist/components/icons/with-out-tick-octagon.d.ts +3 -3
  204. package/dist/components/icons/work-centre.d.ts +3 -3
  205. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js +1 -1
  206. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js.map +1 -1
  207. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js +1 -1
  208. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js.map +1 -1
  209. package/dist/components/label-value/label-value/index.esm.js.map +1 -1
  210. package/dist/components/label-value/label-value/index.js.map +1 -1
  211. package/dist/components/listing/listing/index.esm.js.map +1 -1
  212. package/dist/components/listing/listing/index.js.map +1 -1
  213. package/dist/components/loaders/erp-loader/index.esm.js.map +1 -1
  214. package/dist/components/loaders/erp-loader/index.js.map +1 -1
  215. package/dist/components/loaders/form-loader/index.esm.js.map +1 -1
  216. package/dist/components/loaders/form-loader/index.js.map +1 -1
  217. package/dist/components/loaders/modal-loader/index.esm.js.map +1 -1
  218. package/dist/components/loaders/modal-loader/index.js.map +1 -1
  219. package/dist/components/loaders/page-loader/index.esm.js.map +1 -1
  220. package/dist/components/loaders/page-loader/index.js.map +1 -1
  221. package/dist/components/location-select.d.ts +1 -1
  222. package/dist/components/material-editable-table/components/inline-edit-fields/index.esm.js.map +1 -1
  223. package/dist/components/material-editable-table/components/inline-edit-fields/index.js.map +1 -1
  224. package/dist/components/material-editable-table/material-editable-table/index.esm.js.map +1 -1
  225. package/dist/components/material-editable-table/material-editable-table/index.js.map +1 -1
  226. package/dist/components/material-editable-table/material-editable-table.d.ts +1 -1
  227. package/dist/components/material-table/material-table.d.ts +1 -1
  228. package/dist/components/menu/menu/index.esm.js.map +1 -1
  229. package/dist/components/menu/menu/index.js.map +1 -1
  230. package/dist/components/modal/modal/index.esm.js.map +1 -1
  231. package/dist/components/modal/modal/index.js.map +1 -1
  232. package/dist/components/page-navigator/page-navigator/index.esm.js.map +1 -1
  233. package/dist/components/page-navigator/page-navigator/index.js.map +1 -1
  234. package/dist/components/phone-input/phone-input.d.ts +1 -1
  235. package/dist/components/providers/ERPUIProvider/index.esm.js.map +1 -1
  236. package/dist/components/providers/ERPUIProvider/index.js.map +1 -1
  237. package/dist/components/radio/radio.d.ts +1 -1
  238. package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js +1 -1
  239. package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js.map +1 -1
  240. package/dist/components/reports-title-bar/redux/actionCreator/index.js +1 -1
  241. package/dist/components/reports-title-bar/redux/actionCreator/index.js.map +1 -1
  242. package/dist/components/reset-password-modal/reset-password-modal/index.esm.js.map +1 -1
  243. package/dist/components/reset-password-modal/reset-password-modal/index.js.map +1 -1
  244. package/dist/components/search-bar/search-bar/index.esm.js.map +1 -1
  245. package/dist/components/search-bar/search-bar/index.js.map +1 -1
  246. package/dist/components/searchable-select/index.esm.js.map +1 -1
  247. package/dist/components/searchable-select/index.js.map +1 -1
  248. package/dist/components/select/controller/chip-or-placeholder/index.esm.js.map +1 -1
  249. package/dist/components/select/controller/chip-or-placeholder/index.js.map +1 -1
  250. package/dist/components/select/select/index.esm.js.map +1 -1
  251. package/dist/components/select/select/index.js.map +1 -1
  252. package/dist/components/select/select-search/index.esm.js.map +1 -1
  253. package/dist/components/select/select-search/index.js.map +1 -1
  254. package/dist/components/select/select.d.ts +1 -1
  255. package/dist/components/share-modal/redux/actionCreator/index.esm.js +1 -1
  256. package/dist/components/share-modal/redux/actionCreator/index.esm.js.map +1 -1
  257. package/dist/components/share-modal/redux/actionCreator/index.js +1 -1
  258. package/dist/components/share-modal/redux/actionCreator/index.js.map +1 -1
  259. package/dist/components/sub-header-doc/sub-header-doc/index.esm.js.map +1 -1
  260. package/dist/components/sub-header-doc/sub-header-doc/index.js.map +1 -1
  261. package/dist/components/switches/android-12-switch/index.esm.js.map +1 -1
  262. package/dist/components/switches/android-12-switch/index.js.map +1 -1
  263. package/dist/components/switches/android-12-switch.d.ts +1 -3
  264. package/dist/components/text-area/text-area/index.esm.js.map +1 -1
  265. package/dist/components/text-area/text-area/index.js.map +1 -1
  266. package/dist/components/text-field/text-field/index.esm.js.map +1 -1
  267. package/dist/components/text-field/text-field/index.js.map +1 -1
  268. package/dist/components/text-field/text-field.d.ts +1 -1
  269. package/dist/components/time-picker/time-picker/index.esm.js.map +1 -1
  270. package/dist/components/time-picker/time-picker/index.js.map +1 -1
  271. package/dist/components/time-picker/time-picker.d.ts +1 -1
  272. package/dist/components/toast/toast/index.esm.js.map +1 -1
  273. package/dist/components/toast/toast/index.js.map +1 -1
  274. package/dist/components/toggle/toggle/index.esm.js.map +1 -1
  275. package/dist/components/toggle/toggle/index.js.map +1 -1
  276. package/dist/components/typography/typography/index.esm.js.map +1 -1
  277. package/dist/components/typography/typography/index.js.map +1 -1
  278. package/dist/components/upload/upload/index.esm.js +2 -2
  279. package/dist/components/upload/upload/index.esm.js.map +1 -1
  280. package/dist/components/upload/upload/index.js +11 -11
  281. package/dist/components/upload/upload/index.js.map +1 -1
  282. package/dist/components/upload-media/upload-media.d.ts +1 -1
  283. package/dist/constants/defaultColumns/index.esm.js.map +1 -1
  284. package/dist/constants/defaultColumns/index.js.map +1 -1
  285. package/dist/constants/modules/index.esm.js.map +1 -1
  286. package/dist/constants/modules/index.js.map +1 -1
  287. package/dist/constants/pathnames/pathname/index.esm.js.map +1 -1
  288. package/dist/constants/pathnames/pathname/index.js.map +1 -1
  289. package/dist/constants/pathnames/pathname.accounting/index.esm.js.map +1 -1
  290. package/dist/constants/pathnames/pathname.accounting/index.js.map +1 -1
  291. package/dist/constants/pathnames/pathname.crm/index.esm.js.map +1 -1
  292. package/dist/constants/pathnames/pathname.crm/index.js.map +1 -1
  293. package/dist/constants/pathnames/pathname.document/index.esm.js.map +1 -1
  294. package/dist/constants/pathnames/pathname.document/index.js.map +1 -1
  295. package/dist/constants/pathnames/pathname.hrms/index.esm.js.map +1 -1
  296. package/dist/constants/pathnames/pathname.hrms/index.js.map +1 -1
  297. package/dist/constants/pathnames/pathname.inventory/index.esm.js.map +1 -1
  298. package/dist/constants/pathnames/pathname.inventory/index.js.map +1 -1
  299. package/dist/constants/pathnames/pathname.manufacturing/index.esm.js.map +1 -1
  300. package/dist/constants/pathnames/pathname.manufacturing/index.js.map +1 -1
  301. package/dist/constants/pathnames/pathname.office/index.esm.js.map +1 -1
  302. package/dist/constants/pathnames/pathname.office/index.js.map +1 -1
  303. package/dist/constants/pathnames/pathname.procurement/index.esm.js.map +1 -1
  304. package/dist/constants/pathnames/pathname.procurement/index.js.map +1 -1
  305. package/dist/constants/pathnames/pathname.project/index.esm.js.map +1 -1
  306. package/dist/constants/pathnames/pathname.project/index.js.map +1 -1
  307. package/dist/constants/pathnames/pathname.quotes/index.esm.js.map +1 -1
  308. package/dist/constants/pathnames/pathname.quotes/index.js.map +1 -1
  309. package/dist/constants/pathnames/pathname.rental/index.esm.js.map +1 -1
  310. package/dist/constants/pathnames/pathname.rental/index.js.map +1 -1
  311. package/dist/constants/pathnames/pathname.user/index.esm.js.map +1 -1
  312. package/dist/constants/pathnames/pathname.user/index.js.map +1 -1
  313. package/dist/constants/route-page-map/index.esm.js.map +1 -1
  314. package/dist/constants/route-page-map/index.js.map +1 -1
  315. package/dist/constants/status/index.esm.js.map +1 -1
  316. package/dist/constants/status/index.js.map +1 -1
  317. package/dist/contexts/AuthContext/index.esm.js +1 -1
  318. package/dist/contexts/AuthContext/index.esm.js.map +1 -1
  319. package/dist/contexts/AuthContext/index.js +1 -1
  320. package/dist/contexts/AuthContext/index.js.map +1 -1
  321. package/dist/contexts/languageContext/index.esm.js +1 -1
  322. package/dist/contexts/languageContext/index.esm.js.map +1 -1
  323. package/dist/contexts/languageContext/index.js +1 -1
  324. package/dist/contexts/languageContext/index.js.map +1 -1
  325. package/dist/contexts/page-context/index.esm.js.map +1 -1
  326. package/dist/contexts/page-context/index.js.map +1 -1
  327. package/dist/hooks/use-translations/index.esm.js.map +1 -1
  328. package/dist/hooks/use-translations/index.js.map +1 -1
  329. package/dist/hooks/useApi/index.esm.js +2 -4
  330. package/dist/hooks/useApi/index.esm.js.map +1 -1
  331. package/dist/hooks/useApi/index.js +1 -1
  332. package/dist/hooks/useApi/index.js.map +1 -1
  333. package/dist/hooks/useDataFetcher/index.esm.js.map +1 -1
  334. package/dist/hooks/useDataFetcher/index.js.map +1 -1
  335. package/dist/layout/fullScreen/fullScreen/index.esm.js.map +1 -1
  336. package/dist/layout/fullScreen/fullScreen/index.js.map +1 -1
  337. package/dist/layout/sidebarScreen/sidebarScreen/index.esm.js.map +1 -1
  338. package/dist/layout/sidebarScreen/sidebarScreen/index.js.map +1 -1
  339. package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.esm.js +1 -1
  340. package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.js +1 -1
  341. package/dist/node_modules/@glideapps/glide-data-grid-cells/dist/js/article-cell-editor-JDI676YI/index.esm.js +1 -1
  342. package/dist/node_modules/@glideapps/glide-data-grid-cells/dist/js/article-cell-editor-JDI676YI/index.js +2 -2
  343. package/dist/node_modules/@glideapps/glide-data-grid-cells/dist/js/article-cell-editor-JDI676YI/index.js.map +1 -1
  344. package/dist/node_modules/{@toast-ui → @glideapps/glide-data-grid-cells/node_modules/@toast-ui}/react-editor/dist/esm/index/index.esm.js +2 -2
  345. package/dist/node_modules/@glideapps/glide-data-grid-cells/node_modules/@toast-ui/react-editor/dist/esm/index/index.esm.js.map +1 -0
  346. package/dist/node_modules/@glideapps/glide-data-grid-cells/node_modules/@toast-ui/react-editor/dist/esm/index/index.js +2 -0
  347. package/dist/node_modules/@glideapps/glide-data-grid-cells/node_modules/@toast-ui/react-editor/dist/esm/index/index.js.map +1 -0
  348. package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.esm.js +1 -1
  349. package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.js +1 -1
  350. package/dist/node_modules/@mui/system/colorManipulator/index.esm.js +2 -2
  351. package/dist/node_modules/@mui/system/colorManipulator/index.js +1 -1
  352. package/dist/node_modules/@mui/system/colorManipulator/index.js.map +1 -1
  353. package/dist/node_modules/@mui/system/createStyled/index.esm.js +6 -6
  354. package/dist/node_modules/@mui/system/createStyled/index.js +1 -1
  355. package/dist/node_modules/@mui/system/createStyled/index.js.map +1 -1
  356. package/dist/node_modules/@mui/system/useThemeWithoutDefault/index.esm.js +1 -1
  357. package/dist/node_modules/@mui/system/useThemeWithoutDefault/index.js +1 -1
  358. package/dist/node_modules/material-react-table/dist/index.esm/index.esm.js +1 -1
  359. package/dist/node_modules/material-react-table/dist/index.esm/index.js +1 -1
  360. package/dist/node_modules/material-react-table/dist/index.esm/index.js.map +1 -1
  361. package/dist/node_modules/{@tanstack → material-react-table/node_modules/@tanstack}/react-virtual/dist/esm/index/index.esm.js +2 -2
  362. package/dist/node_modules/material-react-table/node_modules/@tanstack/react-virtual/dist/esm/index/index.esm.js.map +1 -0
  363. package/dist/node_modules/material-react-table/node_modules/@tanstack/react-virtual/dist/esm/index/index.js +2 -0
  364. package/dist/node_modules/material-react-table/node_modules/@tanstack/react-virtual/dist/esm/index/index.js.map +1 -0
  365. package/dist/redux/actionCreator/index.esm.js.map +1 -1
  366. package/dist/redux/actionCreator/index.js.map +1 -1
  367. package/dist/redux/module-reducer/index.esm.js.map +1 -1
  368. package/dist/redux/module-reducer/index.js.map +1 -1
  369. package/dist/redux/store/index.esm.js.map +1 -1
  370. package/dist/redux/store/index.js.map +1 -1
  371. package/dist/server/index.esm.js.map +1 -1
  372. package/dist/server/index.js.map +1 -1
  373. package/dist/src/components/accordion/accordion.d.ts +1 -1
  374. package/dist/src/components/action-bar/action-bar.d.ts +1 -1
  375. package/dist/src/components/checkbox/checkbox.d.ts +1 -1
  376. package/dist/src/components/date-picker/date-picker.d.ts +1 -1
  377. package/dist/src/components/footer/footer.d.ts +1 -1
  378. package/dist/src/components/form-control/form-builder/form-builder-element/media.d.ts +1 -1
  379. package/dist/src/components/form-control/form-builder/form-builder-element/phone.d.ts +1 -1
  380. package/dist/src/components/form-control/form-builder/form-builder-element/select.d.ts +1 -1
  381. package/dist/src/components/form-control/form-builder/form-builder-element/text.d.ts +1 -1
  382. package/dist/src/components/form-control/form-builder/form-builder-element/time.d.ts +1 -1
  383. package/dist/src/components/form-control/form-parser/form-switcher.d.ts +1 -1
  384. package/dist/src/components/icons/action-arrow.d.ts +3 -3
  385. package/dist/src/components/icons/add-circle.d.ts +3 -3
  386. package/dist/src/components/icons/arrow-bidirectional.d.ts +3 -3
  387. package/dist/src/components/icons/arrow-circle-down.d.ts +3 -3
  388. package/dist/src/components/icons/arrow-down-three.d.ts +3 -3
  389. package/dist/src/components/icons/arrow-down-two.d.ts +3 -3
  390. package/dist/src/components/icons/arrow-down.d.ts +3 -3
  391. package/dist/src/components/icons/arrow-up-down.d.ts +3 -3
  392. package/dist/src/components/icons/arrow-up-two.d.ts +3 -3
  393. package/dist/src/components/icons/assignments.d.ts +3 -3
  394. package/dist/src/components/icons/blank-circle.d.ts +3 -3
  395. package/dist/src/components/icons/block-filled.d.ts +3 -3
  396. package/dist/src/components/icons/calendar-add.d.ts +3 -3
  397. package/dist/src/components/icons/calendar.d.ts +3 -3
  398. package/dist/src/components/icons/checkbox-square.d.ts +3 -3
  399. package/dist/src/components/icons/circular-arrow-setting.d.ts +3 -3
  400. package/dist/src/components/icons/clock.d.ts +3 -3
  401. package/dist/src/components/icons/close.d.ts +3 -3
  402. package/dist/src/components/icons/coin-outline.d.ts +3 -3
  403. package/dist/src/components/icons/copy.d.ts +3 -3
  404. package/dist/src/components/icons/coupon.d.ts +3 -3
  405. package/dist/src/components/icons/cross-hire.d.ts +3 -3
  406. package/dist/src/components/icons/custom-styled-icon.d.ts +3 -3
  407. package/dist/src/components/icons/dashboard.d.ts +3 -3
  408. package/dist/src/components/icons/document-download.d.ts +3 -3
  409. package/dist/src/components/icons/document.d.ts +3 -3
  410. package/dist/src/components/icons/dollar-circle-filled.d.ts +3 -3
  411. package/dist/src/components/icons/dollar-circle.d.ts +3 -3
  412. package/dist/src/components/icons/edit.d.ts +3 -3
  413. package/dist/src/components/icons/email.d.ts +3 -3
  414. package/dist/src/components/icons/export.d.ts +3 -3
  415. package/dist/src/components/icons/eye-off.d.ts +3 -3
  416. package/dist/src/components/icons/eye-plus-circle.d.ts +3 -3
  417. package/dist/src/components/icons/eye.d.ts +3 -3
  418. package/dist/src/components/icons/filled-circle.d.ts +3 -3
  419. package/dist/src/components/icons/filter-remove.d.ts +3 -3
  420. package/dist/src/components/icons/filter.d.ts +3 -3
  421. package/dist/src/components/icons/folder-save.d.ts +3 -3
  422. package/dist/src/components/icons/grid.d.ts +3 -3
  423. package/dist/src/components/icons/hashtag.d.ts +3 -3
  424. package/dist/src/components/icons/image.d.ts +3 -3
  425. package/dist/src/components/icons/import.d.ts +3 -3
  426. package/dist/src/components/icons/info-circle.d.ts +3 -3
  427. package/dist/src/components/icons/info.d.ts +3 -3
  428. package/dist/src/components/icons/link-horizontal.d.ts +3 -3
  429. package/dist/src/components/icons/link.d.ts +3 -3
  430. package/dist/src/components/icons/location.d.ts +3 -3
  431. package/dist/src/components/icons/lowest-lead-time.d.ts +3 -3
  432. package/dist/src/components/icons/lowest-min-qty.d.ts +3 -3
  433. package/dist/src/components/icons/lowest-price.d.ts +3 -3
  434. package/dist/src/components/icons/more.d.ts +3 -3
  435. package/dist/src/components/icons/notification.d.ts +3 -3
  436. package/dist/src/components/icons/paper-clip.d.ts +3 -3
  437. package/dist/src/components/icons/paragraph.d.ts +3 -3
  438. package/dist/src/components/icons/payment-request.d.ts +3 -3
  439. package/dist/src/components/icons/phone.d.ts +3 -3
  440. package/dist/src/components/icons/printer.d.ts +3 -3
  441. package/dist/src/components/icons/process-calendar.d.ts +3 -3
  442. package/dist/src/components/icons/promotion.d.ts +3 -3
  443. package/dist/src/components/icons/radio-button.d.ts +3 -3
  444. package/dist/src/components/icons/receipt-filled.d.ts +3 -3
  445. package/dist/src/components/icons/receipt-outline.d.ts +3 -3
  446. package/dist/src/components/icons/receipt.d.ts +3 -3
  447. package/dist/src/components/icons/refresh-icon.d.ts +3 -3
  448. package/dist/src/components/icons/replace.d.ts +3 -3
  449. package/dist/src/components/icons/save.d.ts +3 -3
  450. package/dist/src/components/icons/search-status.d.ts +3 -3
  451. package/dist/src/components/icons/search.d.ts +3 -3
  452. package/dist/src/components/icons/settings-fallback.d.ts +3 -3
  453. package/dist/src/components/icons/sort-arrow-icon.d.ts +3 -3
  454. package/dist/src/components/icons/stacked-layer.d.ts +3 -3
  455. package/dist/src/components/icons/start-filled.d.ts +3 -3
  456. package/dist/src/components/icons/three-dot-icon.d.ts +3 -3
  457. package/dist/src/components/icons/tick-circle-filled.d.ts +3 -3
  458. package/dist/src/components/icons/tick-circle.d.ts +3 -3
  459. package/dist/src/components/icons/tick-octagon.d.ts +3 -3
  460. package/dist/src/components/icons/tick.d.ts +3 -3
  461. package/dist/src/components/icons/toggle-switch.d.ts +3 -3
  462. package/dist/src/components/icons/trash.d.ts +3 -3
  463. package/dist/src/components/icons/wave.d.ts +3 -3
  464. package/dist/src/components/icons/with-out-tick-octagon.d.ts +3 -3
  465. package/dist/src/components/icons/work-centre.d.ts +3 -3
  466. package/dist/src/components/location-select.d.ts +1 -1
  467. package/dist/src/components/material-editable-table/material-editable-table.d.ts +1 -1
  468. package/dist/src/components/material-table/material-table.d.ts +1 -1
  469. package/dist/src/components/phone-input/phone-input.d.ts +1 -1
  470. package/dist/src/components/radio/radio.d.ts +1 -1
  471. package/dist/src/components/select/select.d.ts +1 -1
  472. package/dist/src/components/switches/android-12-switch.d.ts +1 -3
  473. package/dist/src/components/text-field/text-field.d.ts +1 -1
  474. package/dist/src/components/time-picker/time-picker.d.ts +1 -1
  475. package/dist/src/components/upload-media/upload-media.d.ts +1 -1
  476. package/dist/src/utils/common-utility.d.ts +1 -1
  477. package/dist/style.css +69 -69
  478. package/dist/styles/index.d.ts +1 -1
  479. package/dist/theme/theme-impl/index.esm.js.map +1 -1
  480. package/dist/theme/theme-impl/index.js.map +1 -1
  481. package/dist/utils/api/index.esm.js +6 -6
  482. package/dist/utils/api/index.esm.js.map +1 -1
  483. package/dist/utils/api/index.js +1 -1
  484. package/dist/utils/api/index.js.map +1 -1
  485. package/dist/utils/common/index.esm.js +6 -6
  486. package/dist/utils/common/index.esm.js.map +1 -1
  487. package/dist/utils/common/index.js +1 -1
  488. package/dist/utils/common/index.js.map +1 -1
  489. package/dist/utils/common-utility.d.ts +1 -1
  490. package/dist/utils/date-range/index.esm.js.map +1 -1
  491. package/dist/utils/date-range/index.js.map +1 -1
  492. package/dist/utils/i18n/index.esm.js.map +1 -1
  493. package/dist/utils/i18n/index.js.map +1 -1
  494. package/dist/utils/menu-filter/index.esm.js.map +1 -1
  495. package/dist/utils/menu-filter/index.js.map +1 -1
  496. package/dist/views/404/index.esm.js.map +1 -1
  497. package/dist/views/404/index.js.map +1 -1
  498. package/dist/views/afterAuth/dashboard/dashboard/index.esm.js.map +1 -1
  499. package/dist/views/afterAuth/dashboard/dashboard/index.js.map +1 -1
  500. package/dist/views/afterAuth/dashboard/redux/actionCreator/index.esm.js.map +1 -1
  501. package/dist/views/afterAuth/dashboard/redux/actionCreator/index.js.map +1 -1
  502. package/dist/views/afterAuth/dashboard/redux/reducer/index.esm.js.map +1 -1
  503. package/dist/views/afterAuth/dashboard/redux/reducer/index.js.map +1 -1
  504. package/dist/views/afterAuth/dashboard/redux/state/index.esm.js.map +1 -1
  505. package/dist/views/afterAuth/dashboard/redux/state/index.js.map +1 -1
  506. package/dist/views/afterAuth/page-view/page-view/index.esm.js.map +1 -1
  507. package/dist/views/afterAuth/page-view/page-view/index.js.map +1 -1
  508. package/dist/views/afterAuth/page-view/redux/actionCreator/index.esm.js.map +1 -1
  509. package/dist/views/afterAuth/page-view/redux/actionCreator/index.js.map +1 -1
  510. package/dist/views/afterAuth/page-view/redux/reducer/index.esm.js.map +1 -1
  511. package/dist/views/afterAuth/page-view/redux/reducer/index.js.map +1 -1
  512. package/dist/views/afterAuth/page-view/redux/state/index.esm.js.map +1 -1
  513. package/dist/views/afterAuth/page-view/redux/state/index.js.map +1 -1
  514. package/dist/views/afterAuth/page-view/utils/default-data/index.esm.js.map +1 -1
  515. package/dist/views/afterAuth/page-view/utils/default-data/index.js.map +1 -1
  516. package/dist/views/afterAuth/page-view/utils/local-data/index.esm.js.map +1 -1
  517. package/dist/views/afterAuth/page-view/utils/local-data/index.js.map +1 -1
  518. package/dist/views/beforeAuth/change-password/change-password/index.esm.js.map +1 -1
  519. package/dist/views/beforeAuth/change-password/change-password/index.js.map +1 -1
  520. package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.esm.js.map +1 -1
  521. package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.js.map +1 -1
  522. package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.esm.js.map +1 -1
  523. package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.js.map +1 -1
  524. package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.esm.js.map +1 -1
  525. package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.js.map +1 -1
  526. package/dist/views/beforeAuth/components/grid-data/grid-data/index.esm.js.map +1 -1
  527. package/dist/views/beforeAuth/components/grid-data/grid-data/index.js.map +1 -1
  528. package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.esm.js.map +1 -1
  529. package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.js.map +1 -1
  530. package/dist/views/beforeAuth/components/list-content/column-raw/index.esm.js.map +1 -1
  531. package/dist/views/beforeAuth/components/list-content/column-raw/index.js.map +1 -1
  532. package/dist/views/beforeAuth/components/list-content/list-data/index.esm.js.map +1 -1
  533. package/dist/views/beforeAuth/components/list-content/list-data/index.js.map +1 -1
  534. package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.esm.js.map +1 -1
  535. package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.js.map +1 -1
  536. package/dist/views/beforeAuth/components/share-modal-data/share-modal-data/index.esm.js.map +1 -1
  537. package/dist/views/beforeAuth/components/share-modal-data/share-modal-data/index.js.map +1 -1
  538. package/dist/views/beforeAuth/components/shared-pages-data/shared-pages-data/index.esm.js.map +1 -1
  539. package/dist/views/beforeAuth/components/shared-pages-data/shared-pages-data/index.js.map +1 -1
  540. package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.esm.js.map +1 -1
  541. package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.js.map +1 -1
  542. package/dist/views/beforeAuth/components/user-dashboard-data/user-dashboard-data/index.esm.js.map +1 -1
  543. package/dist/views/beforeAuth/components/user-dashboard-data/user-dashboard-data/index.js.map +1 -1
  544. package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.esm.js.map +1 -1
  545. package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.js.map +1 -1
  546. package/dist/views/beforeAuth/forgot-password/forgot-password/index.esm.js.map +1 -1
  547. package/dist/views/beforeAuth/forgot-password/forgot-password/index.js.map +1 -1
  548. package/dist/views/beforeAuth/landing/landing/index.esm.js.map +1 -1
  549. package/dist/views/beforeAuth/landing/landing/index.js.map +1 -1
  550. package/dist/views/beforeAuth/reset-password/reset-password/index.esm.js.map +1 -1
  551. package/dist/views/beforeAuth/reset-password/reset-password/index.js.map +1 -1
  552. package/dist/views/form-builder/custom-form/index.esm.js.map +1 -1
  553. package/dist/views/form-builder/custom-form/index.js.map +1 -1
  554. package/dist/views/form-builder/element-edit-forms/checkbox/index.esm.js.map +1 -1
  555. package/dist/views/form-builder/element-edit-forms/checkbox/index.js.map +1 -1
  556. package/dist/views/form-builder/element-edit-forms/column-width/index.esm.js.map +1 -1
  557. package/dist/views/form-builder/element-edit-forms/column-width/index.js.map +1 -1
  558. package/dist/views/form-builder/element-edit-forms/field-select/index.esm.js.map +1 -1
  559. package/dist/views/form-builder/element-edit-forms/field-select/index.js.map +1 -1
  560. package/dist/views/form-builder/element-edit-forms/section/index.esm.js.map +1 -1
  561. package/dist/views/form-builder/element-edit-forms/section/index.js.map +1 -1
  562. package/dist/views/form-builder/element-edit-forms/select/index.esm.js.map +1 -1
  563. package/dist/views/form-builder/element-edit-forms/select/index.js.map +1 -1
  564. package/dist/views/form-builder/element-edit-forms/table-form/index.esm.js.map +1 -1
  565. package/dist/views/form-builder/element-edit-forms/table-form/index.js.map +1 -1
  566. package/dist/views/form-builder/element-edit-forms/text/index.esm.js.map +1 -1
  567. package/dist/views/form-builder/element-edit-forms/text/index.js.map +1 -1
  568. package/dist/views/form-builder/field_properties/index.esm.js.map +1 -1
  569. package/dist/views/form-builder/field_properties/index.js.map +1 -1
  570. package/dist/views/form-builder/form-fields/index.esm.js.map +1 -1
  571. package/dist/views/form-builder/form-fields/index.js.map +1 -1
  572. package/dist/views/form-builder/redux/actionCreator/index.esm.js +1 -1
  573. package/dist/views/form-builder/redux/actionCreator/index.esm.js.map +1 -1
  574. package/dist/views/form-builder/redux/actionCreator/index.js +1 -1
  575. package/dist/views/form-builder/redux/actionCreator/index.js.map +1 -1
  576. package/dist/views/form-builder/redux/reducer/index.esm.js.map +1 -1
  577. package/dist/views/form-builder/redux/reducer/index.js.map +1 -1
  578. package/dist/views/form-builder/redux/state/index.esm.js.map +1 -1
  579. package/dist/views/form-builder/redux/state/index.js.map +1 -1
  580. package/dist/views/form-builder/utils/common/index.esm.js.map +1 -1
  581. package/dist/views/form-builder/utils/common/index.js.map +1 -1
  582. package/dist/views/index.d.ts +8 -8
  583. package/dist/views/privateRoute/index.esm.js.map +1 -1
  584. package/dist/views/privateRoute/index.js.map +1 -1
  585. package/dist/views/template-editor/add-template/add-template/index.esm.js.map +1 -1
  586. package/dist/views/template-editor/add-template/add-template/index.js.map +1 -1
  587. package/dist/views/template-editor/company-selection-modal/company-selection-modal/index.esm.js.map +1 -1
  588. package/dist/views/template-editor/company-selection-modal/company-selection-modal/index.js.map +1 -1
  589. package/dist/views/template-editor/components/EditorCanvas/index.esm.js.map +1 -1
  590. package/dist/views/template-editor/components/EditorCanvas/index.js.map +1 -1
  591. package/dist/views/template-editor/components/EditorHeader/index.esm.js.map +1 -1
  592. package/dist/views/template-editor/components/EditorHeader/index.js.map +1 -1
  593. package/dist/views/template-editor/components/EditorSection/index.esm.js.map +1 -1
  594. package/dist/views/template-editor/components/EditorSection/index.js.map +1 -1
  595. package/dist/views/template-editor/components/EditorSidebar/index.esm.js +1 -1
  596. package/dist/views/template-editor/components/EditorSidebar/index.esm.js.map +1 -1
  597. package/dist/views/template-editor/components/EditorSidebar/index.js +1 -1
  598. package/dist/views/template-editor/components/EditorSidebar/index.js.map +1 -1
  599. package/dist/views/template-editor/components/SectionFlowEditor/index.esm.js.map +1 -1
  600. package/dist/views/template-editor/components/SectionFlowEditor/index.js.map +1 -1
  601. package/dist/views/template-editor/components/SectionFormatPanel/index.esm.js.map +1 -1
  602. package/dist/views/template-editor/components/SectionFormatPanel/index.js.map +1 -1
  603. package/dist/views/template-editor/components/controllers/AlignmentControl/index.esm.js.map +1 -1
  604. package/dist/views/template-editor/components/controllers/AlignmentControl/index.js.map +1 -1
  605. package/dist/views/template-editor/components/controllers/ButtonControls/index.esm.js.map +1 -1
  606. package/dist/views/template-editor/components/controllers/ButtonControls/index.js.map +1 -1
  607. package/dist/views/template-editor/components/controllers/CodeControls/index.esm.js.map +1 -1
  608. package/dist/views/template-editor/components/controllers/CodeControls/index.js.map +1 -1
  609. package/dist/views/template-editor/components/controllers/DividerControls/index.esm.js.map +1 -1
  610. package/dist/views/template-editor/components/controllers/DividerControls/index.js.map +1 -1
  611. package/dist/views/template-editor/components/controllers/ImageControls/index.esm.js.map +1 -1
  612. package/dist/views/template-editor/components/controllers/ImageControls/index.js.map +1 -1
  613. package/dist/views/template-editor/components/controllers/SignatureControls/index.esm.js.map +1 -1
  614. package/dist/views/template-editor/components/controllers/SignatureControls/index.js.map +1 -1
  615. package/dist/views/template-editor/components/controllers/TableControls/index.esm.js.map +1 -1
  616. package/dist/views/template-editor/components/controllers/TableControls/index.js.map +1 -1
  617. package/dist/views/template-editor/components/controllers/TextControls/index.esm.js.map +1 -1
  618. package/dist/views/template-editor/components/controllers/TextControls/index.js.map +1 -1
  619. package/dist/views/template-editor/components/controllers/border-control/index.esm.js.map +1 -1
  620. package/dist/views/template-editor/components/controllers/border-control/index.js.map +1 -1
  621. package/dist/views/template-editor/edit-section-modal/edit-section-modal/index.esm.js.map +1 -1
  622. package/dist/views/template-editor/edit-section-modal/edit-section-modal/index.js.map +1 -1
  623. package/dist/views/template-editor/routes/index.esm.js.map +1 -1
  624. package/dist/views/template-editor/routes/index.js.map +1 -1
  625. package/dist/views/template-editor/template-modal/html-thumbnail-preview/index.esm.js.map +1 -1
  626. package/dist/views/template-editor/template-modal/html-thumbnail-preview/index.js.map +1 -1
  627. package/dist/views/template-editor/template-modal/template-modal/index.esm.js.map +1 -1
  628. package/dist/views/template-editor/template-modal/template-modal/index.js.map +1 -1
  629. package/dist/views/template-editor/template-name-modal/template-name-modal/index.esm.js.map +1 -1
  630. package/dist/views/template-editor/template-name-modal/template-name-modal/index.js.map +1 -1
  631. package/dist/views/template-editor/templates/index.esm.js +1 -1
  632. package/dist/views/template-editor/templates/index.esm.js.map +1 -1
  633. package/dist/views/template-editor/templates/index.js +1 -1
  634. package/dist/views/template-editor/templates/index.js.map +1 -1
  635. package/dist/views/template-editor/utils/common/index.esm.js.map +1 -1
  636. package/dist/views/template-editor/utils/common/index.js.map +1 -1
  637. package/dist/views/template-editor/utils/constant/index.esm.js.map +1 -1
  638. package/dist/views/template-editor/utils/constant/index.js.map +1 -1
  639. package/dist/views/template-editor/utils/default-data/index.esm.js.map +1 -1
  640. package/dist/views/template-editor/utils/default-data/index.js.map +1 -1
  641. package/dist/views/template-editor/utils/style-extractor/index.esm.js.map +1 -1
  642. package/dist/views/template-editor/utils/style-extractor/index.js.map +1 -1
  643. package/dist/vite-env.d.ts +23 -23
  644. package/package.json +299 -299
  645. package/src/styles/README.md +287 -287
  646. package/src/styles/all.scss +7 -7
  647. package/src/styles/animations.scss +5 -5
  648. package/src/styles/css/reset.css +1 -1
  649. package/src/styles/index.d.ts +1 -1
  650. package/src/styles/index.ts +1 -1
  651. package/src/styles/mixins.scss +5 -5
  652. package/src/styles/sass/main.scss +11 -11
  653. package/src/styles/utils.scss +5 -5
  654. package/src/styles/variables.scss +4 -4
  655. package/dist/node_modules/@tanstack/react-virtual/dist/esm/index/index.esm.js.map +0 -1
  656. package/dist/node_modules/@tanstack/react-virtual/dist/esm/index/index.js +0 -2
  657. package/dist/node_modules/@tanstack/react-virtual/dist/esm/index/index.js.map +0 -1
  658. package/dist/node_modules/@toast-ui/react-editor/dist/esm/index/index.esm.js.map +0 -1
  659. package/dist/node_modules/@toast-ui/react-editor/dist/esm/index/index.js +0 -2
  660. package/dist/node_modules/@toast-ui/react-editor/dist/esm/index/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../../../../src/views/template-editor/utils/common.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ElementType, EnhancedSectionData } from '../types/editor';\nimport { initialStyles, TEMPLATE_EDITOR_PATHS } from './constant';\n\n\nexport const templateRoutes = (modulePath: string, type: string) => {\n const list = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST(type)}`\n const add = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD(type)}`\n const edit = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT(type)}`\n return {\n LIST: list,\n ADD_TEMPLATE: (id: string) => add.replace(':id', id),\n EDIT_TEMPLATE: (id: string, templateId: string) => edit.replace(':id', id).replace(':template_id', templateId),\n }\n};\n\n\nexport const generateEmailPreview = (sections: EnhancedSectionData[], headerSections?: EnhancedSectionData[] = [], footerSections?: EnhancedSectionData[] = [], isSaving = false) => {\n const headerHtml = (headerSections && headerSections?.length) ? generateHeaderFooterPreview(headerSections, 'header') : '';\n const footerHtml = (footerSections && footerSections?.length) ? generateHeaderFooterPreview(footerSections, 'footer') : '';\n let html = `\n <html>\n <head>\n <style>\n .email-container {\n margin: 0 auto;\n padding: 20px;\n background-color: #fff;\n border-radius: 8px;\n width: ${isSaving ? '65%' : 'auto'};\n }\n a {\n color: #007bff !important;\n text-decoration: none !important;\n }\n a:hover {\n text-decoration: underline;\n }\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n body {\n font-family: \"Inter\", sans-serif !important;\n font-size: 16px;\n font-weight: 400;\n color: #00011c;\n font-style: normal;\n }\n\n img {\n display: block;\n max-width: 100%;\n height: auto;\n }\n\n table,\n tr,\n td {\n border-collapse: collapse;\n }\n\n a {\n text-decoration: none;\n }\n\n table.our-details,\n .our-details td,\n .our-details th {\n border: 1px solid #d3d3d4;\n }\n\n table.amount-word-table,\n table.amount-word-table td,\n table.amount-word-table th {\n border: 1px solid #d6d6d6;\n }\n\n .amount-word-table thead th {\n background-color: #f5f6f5;\n }\n\n .amount-word-table thead td {\n background-color: #f5f6f5;\n }\n\n .amount-word-table tbody tr:nth-child(even) {\n background-color: #f5f6f5;\n }\n\n .amount-word-table tbody tr td {\n border-top: 0;\n border-bottom: 0;\n }\n\n .deliver-table thead th {\n background-color: transparent;\n }\n </style>\n </head>\n <body>\n <div class=\"email-container\">\n ${headerHtml}\n ${headerHtml ? '<hr/>' : ''}\n `;\n\n // Group sections by splitGroupId\n const groupedSections = [];\n let currentGroup = [];\n let lastSplitGroupId = null;\n\n for (const section of sections) {\n if (section.isSplitPair && section.splitGroupId !== 0) {\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n currentGroup = [];\n }\n currentGroup.push(section);\n lastSplitGroupId = section.splitGroupId;\n } else {\n if (currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n currentGroup = [];\n lastSplitGroupId = null;\n }\n groupedSections.push([section]);\n }\n }\n if (currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n }\n\n // Generate HTML\n for (const group of groupedSections) {\n if (group.length === 1 && !group[0].isSplitPair) {\n // Concatenate normal section content directly\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\n } else {\n // Generate table for split sections\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\n for (const section of group) {\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\n ${section.content}\n </td>`;\n }\n html += '</tr></table>';\n }\n }\n\thtml += `\n ${footerHtml ? '<hr/>' : ''}\n ${footerHtml}\n </div></body></html>`;\n\n return html;\n}\nexport const generateHeaderFooterPreview = (sections: EnhancedSectionData[], type = 'header') => {\n let html = `<${type} class=\"${type}\">`;\n\n // Group sections by splitGroupId\n const groupedSections = [];\n let currentGroup = [];\n let lastSplitGroupId = null;\n\n for (const section of sections) {\n if (section.isSplitPair && section.splitGroupId !== 0) {\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n currentGroup = [];\n }\n currentGroup.push(section);\n lastSplitGroupId = section.splitGroupId;\n } else {\n if (currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n currentGroup = [];\n lastSplitGroupId = null;\n }\n groupedSections.push([section]);\n }\n }\n if (currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n }\n\n // Generate HTML\n for (const group of groupedSections) {\n if (group.length === 1 && !group[0].isSplitPair) {\n // Concatenate normal section content directly\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\n } else {\n // Generate table for split sections\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\n for (const section of group) {\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\n ${section.content}\n </td>`;\n }\n html += '</tr></table>';\n }\n }\n\thtml += `</${type}>`;\n\n return html;\n}\n\nexport const extractStyles = (html: string, sectionType: string) => {\n // Create a temporary div to parse the HTML\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = html;\n \n // Get the first element (our styled element)\n const element = tempDiv.firstChild as HTMLElement;\n \n if (!element) return {};\n\n if(element?.getAttribute instanceof Function === false) {\n return {};\n }\n \n // Get the inline styles\n const styleAttr = element?.getAttribute('style');\n\n const allAttributes = element?.attributes || [];\n \n // const attrObj: Record<string, any> = {};\n const attrObj = Array.from(allAttributes).reduce((obj, attr) => {\n obj[attr.name] = attr.value;\n return obj;\n }, {});\n\n if (!styleAttr) return {};\n \n // Parse the style attribute into an object\n const styleObj: Record<string, any> = {};\n const stylePairs = styleAttr.split(';').filter(pair => pair.trim() !== '');\n \n stylePairs.forEach(pair => {\n const [prop, value] = pair.split(':').map(part => part.trim());\n if (prop && value) {\n // Convert CSS property names to camelCase for React\n const propName = prop.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n styleObj[propName] = value;\n }\n });\n attrObj.styles = styleObj\n return attrObj\n}\n\n\ntype StyleValue = string | number | boolean | null | undefined | StyleObject;\ninterface StyleObject {\n [key: string]: StyleValue;\n}\n\nconst EMAIL_SAFE_PROPERTIES = new Set([\n 'background', 'background-color',\n 'border', 'border-style', 'border-collapse', 'border-top', 'border-right', 'border-bottom', 'border-left', 'border-color', 'border-radius',\n 'color', 'display', 'font', 'font-family', 'font-size', 'font-style', 'font-weight',\n 'height', 'line-height',\n 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left',\n 'padding', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left',\n 'text-align', 'text-decoration',\n 'vertical-align', 'width',\n 'max-width', 'min-width', 'max-height', 'min-height'\n]);\n\nexport const generateInlineStyles = (\n styles: StyleObject,\n parentKey = ''\n): string => {\n if (!styles || typeof styles !== 'object') return '';\n\n const styleEntries = Object.entries(styles).reduce<string[]>((acc, [key, value]) => {\n if (value === undefined || value === null) return acc;\n\n const fullKey = parentKey ? `${parentKey}-${key}` : key;\n\n // Recursively flatten nested objects\n if (typeof value === 'object' && !Array.isArray(value)) {\n acc.push(generateInlineStyles(value as StyleObject, fullKey));\n return acc;\n }\n\n // Convert camelCase to kebab-case\n const cssKey = fullKey.replace(/([A-Z])/g, '-$1').toLowerCase();\n\n // Skip non-email-safe properties\n if (!EMAIL_SAFE_PROPERTIES.has(cssKey) && key !== 'fullWidth' && key !== 'alignment') {\n return acc;\n }\n\n // Special case: fullWidth\n if (key === 'fullWidth' && value === true) {\n acc.push('width: 100%');\n return acc;\n }\n\n // Special case: alignment (converted to text-align)\n if (key === 'alignment' && typeof value === 'string') {\n acc.push(`text-align: ${value}`);\n return acc;\n }\n\n // Ignore other boolean values\n if (typeof value === 'boolean') return acc;\n\n const cssValue =\n typeof value === 'number' && !['z-index', 'opacity', 'line-height'].includes(key)\n ? `${value}px`\n : value;\n\n acc.push(`${cssKey}: ${cssValue}`);\n return acc;\n }, []);\n\n return styleEntries.filter(Boolean).join('; ');\n};\n\nexport const getInitialSectionData = (type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\n let content = '';\n const styles = initialStyles[type] || {};\n const inlineStyles: string = generateInlineStyles(styles);\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 { 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({...styles.thCells, border, borderStyle, borderColor });\n const tbCellInlineStyles: string = generateInlineStyles({...styles.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 }\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 content, \n type, \n attributes: {...(attrs || {}), styles}\n };\n};\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../../src/views/template-editor/utils/common.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ElementType, EnhancedSectionData } from '../types/editor';\r\nimport { initialStyles, TEMPLATE_EDITOR_PATHS } from './constant';\r\n\r\n\r\nexport const templateRoutes = (modulePath: string, type: string) => {\r\n const list = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST(type)}`\r\n const add = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD(type)}`\r\n const edit = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT(type)}`\r\n return {\r\n LIST: list,\r\n ADD_TEMPLATE: (id: string) => add.replace(':id', id),\r\n EDIT_TEMPLATE: (id: string, templateId: string) => edit.replace(':id', id).replace(':template_id', templateId),\r\n }\r\n};\r\n\r\n\r\nexport const generateEmailPreview = (sections: EnhancedSectionData[], headerSections?: EnhancedSectionData[] = [], footerSections?: EnhancedSectionData[] = [], isSaving = false) => {\r\n const headerHtml = (headerSections && headerSections?.length) ? generateHeaderFooterPreview(headerSections, 'header') : '';\r\n const footerHtml = (footerSections && footerSections?.length) ? generateHeaderFooterPreview(footerSections, 'footer') : '';\r\n let html = `\r\n <html>\r\n <head>\r\n <style>\r\n .email-container {\r\n margin: 0 auto;\r\n padding: 20px;\r\n background-color: #fff;\r\n border-radius: 8px;\r\n width: ${isSaving ? '65%' : 'auto'};\r\n }\r\n a {\r\n color: #007bff !important;\r\n text-decoration: none !important;\r\n }\r\n a:hover {\r\n text-decoration: underline;\r\n }\r\n * {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n }\r\n\r\n body {\r\n font-family: \"Inter\", sans-serif !important;\r\n font-size: 16px;\r\n font-weight: 400;\r\n color: #00011c;\r\n font-style: normal;\r\n }\r\n\r\n img {\r\n display: block;\r\n max-width: 100%;\r\n height: auto;\r\n }\r\n\r\n table,\r\n tr,\r\n td {\r\n border-collapse: collapse;\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n }\r\n\r\n table.our-details,\r\n .our-details td,\r\n .our-details th {\r\n border: 1px solid #d3d3d4;\r\n }\r\n\r\n table.amount-word-table,\r\n table.amount-word-table td,\r\n table.amount-word-table th {\r\n border: 1px solid #d6d6d6;\r\n }\r\n\r\n .amount-word-table thead th {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table thead td {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table tbody tr:nth-child(even) {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table tbody tr td {\r\n border-top: 0;\r\n border-bottom: 0;\r\n }\r\n\r\n .deliver-table thead th {\r\n background-color: transparent;\r\n }\r\n </style>\r\n </head>\r\n <body>\r\n <div class=\"email-container\">\r\n ${headerHtml}\r\n ${headerHtml ? '<hr/>' : ''}\r\n `;\r\n\r\n // Group sections by splitGroupId\r\n const groupedSections = [];\r\n let currentGroup = [];\r\n let lastSplitGroupId = null;\r\n\r\n for (const section of sections) {\r\n if (section.isSplitPair && section.splitGroupId !== 0) {\r\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n }\r\n currentGroup.push(section);\r\n lastSplitGroupId = section.splitGroupId;\r\n } else {\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n lastSplitGroupId = null;\r\n }\r\n groupedSections.push([section]);\r\n }\r\n }\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n }\r\n\r\n // Generate HTML\r\n for (const group of groupedSections) {\r\n if (group.length === 1 && !group[0].isSplitPair) {\r\n // Concatenate normal section content directly\r\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\r\n } else {\r\n // Generate table for split sections\r\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\r\n for (const section of group) {\r\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\r\n ${section.content}\r\n </td>`;\r\n }\r\n html += '</tr></table>';\r\n }\r\n }\r\n\thtml += `\r\n ${footerHtml ? '<hr/>' : ''}\r\n ${footerHtml}\r\n </div></body></html>`;\r\n\r\n return html;\r\n}\r\nexport const generateHeaderFooterPreview = (sections: EnhancedSectionData[], type = 'header') => {\r\n let html = `<${type} class=\"${type}\">`;\r\n\r\n // Group sections by splitGroupId\r\n const groupedSections = [];\r\n let currentGroup = [];\r\n let lastSplitGroupId = null;\r\n\r\n for (const section of sections) {\r\n if (section.isSplitPair && section.splitGroupId !== 0) {\r\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n }\r\n currentGroup.push(section);\r\n lastSplitGroupId = section.splitGroupId;\r\n } else {\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n lastSplitGroupId = null;\r\n }\r\n groupedSections.push([section]);\r\n }\r\n }\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n }\r\n\r\n // Generate HTML\r\n for (const group of groupedSections) {\r\n if (group.length === 1 && !group[0].isSplitPair) {\r\n // Concatenate normal section content directly\r\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\r\n } else {\r\n // Generate table for split sections\r\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\r\n for (const section of group) {\r\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\r\n ${section.content}\r\n </td>`;\r\n }\r\n html += '</tr></table>';\r\n }\r\n }\r\n\thtml += `</${type}>`;\r\n\r\n return html;\r\n}\r\n\r\nexport const extractStyles = (html: string, sectionType: string) => {\r\n // Create a temporary div to parse the HTML\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = html;\r\n \r\n // Get the first element (our styled element)\r\n const element = tempDiv.firstChild as HTMLElement;\r\n \r\n if (!element) return {};\r\n\r\n if(element?.getAttribute instanceof Function === false) {\r\n return {};\r\n }\r\n \r\n // Get the inline styles\r\n const styleAttr = element?.getAttribute('style');\r\n\r\n const allAttributes = element?.attributes || [];\r\n \r\n // const attrObj: Record<string, any> = {};\r\n const attrObj = Array.from(allAttributes).reduce((obj, attr) => {\r\n obj[attr.name] = attr.value;\r\n return obj;\r\n }, {});\r\n\r\n if (!styleAttr) return {};\r\n \r\n // Parse the style attribute into an object\r\n const styleObj: Record<string, any> = {};\r\n const stylePairs = styleAttr.split(';').filter(pair => pair.trim() !== '');\r\n \r\n stylePairs.forEach(pair => {\r\n const [prop, value] = pair.split(':').map(part => part.trim());\r\n if (prop && value) {\r\n // Convert CSS property names to camelCase for React\r\n const propName = prop.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\r\n styleObj[propName] = value;\r\n }\r\n });\r\n attrObj.styles = styleObj\r\n return attrObj\r\n}\r\n\r\n\r\ntype StyleValue = string | number | boolean | null | undefined | StyleObject;\r\ninterface StyleObject {\r\n [key: string]: StyleValue;\r\n}\r\n\r\nconst EMAIL_SAFE_PROPERTIES = new Set([\r\n 'background', 'background-color',\r\n 'border', 'border-style', 'border-collapse', 'border-top', 'border-right', 'border-bottom', 'border-left', 'border-color', 'border-radius',\r\n 'color', 'display', 'font', 'font-family', 'font-size', 'font-style', 'font-weight',\r\n 'height', 'line-height',\r\n 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left',\r\n 'padding', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left',\r\n 'text-align', 'text-decoration',\r\n 'vertical-align', 'width',\r\n 'max-width', 'min-width', 'max-height', 'min-height'\r\n]);\r\n\r\nexport const generateInlineStyles = (\r\n styles: StyleObject,\r\n parentKey = ''\r\n): string => {\r\n if (!styles || typeof styles !== 'object') return '';\r\n\r\n const styleEntries = Object.entries(styles).reduce<string[]>((acc, [key, value]) => {\r\n if (value === undefined || value === null) return acc;\r\n\r\n const fullKey = parentKey ? `${parentKey}-${key}` : key;\r\n\r\n // Recursively flatten nested objects\r\n if (typeof value === 'object' && !Array.isArray(value)) {\r\n acc.push(generateInlineStyles(value as StyleObject, fullKey));\r\n return acc;\r\n }\r\n\r\n // Convert camelCase to kebab-case\r\n const cssKey = fullKey.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n\r\n // Skip non-email-safe properties\r\n if (!EMAIL_SAFE_PROPERTIES.has(cssKey) && key !== 'fullWidth' && key !== 'alignment') {\r\n return acc;\r\n }\r\n\r\n // Special case: fullWidth\r\n if (key === 'fullWidth' && value === true) {\r\n acc.push('width: 100%');\r\n return acc;\r\n }\r\n\r\n // Special case: alignment (converted to text-align)\r\n if (key === 'alignment' && typeof value === 'string') {\r\n acc.push(`text-align: ${value}`);\r\n return acc;\r\n }\r\n\r\n // Ignore other boolean values\r\n if (typeof value === 'boolean') return acc;\r\n\r\n const cssValue =\r\n typeof value === 'number' && !['z-index', 'opacity', 'line-height'].includes(key)\r\n ? `${value}px`\r\n : value;\r\n\r\n acc.push(`${cssKey}: ${cssValue}`);\r\n return acc;\r\n }, []);\r\n\r\n return styleEntries.filter(Boolean).join('; ');\r\n};\r\n\r\nexport const getInitialSectionData = (type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\r\n let content = '';\r\n const styles = initialStyles[type] || {};\r\n const inlineStyles: string = generateInlineStyles(styles);\r\n\r\n switch (type) {\r\n case 'heading':\r\n content = `<h1 style=\"${inlineStyles}\">Heading 1</h1>`;\r\n break;\r\n case 'heading-2':\r\n content = `<h2 style=\"${inlineStyles}\">Heading 2</h2>`;\r\n break;\r\n case 'heading-3':\r\n content = `<h3 style=\"${inlineStyles}\">Heading 3</h3>`;\r\n break;\r\n case 'heading-4':\r\n content = `<h4 style=\"${inlineStyles}\">Heading 4</h4>`;\r\n break;\r\n case 'text':\r\n content = `<p style=\"${inlineStyles}\">Hello, enter your text here...</p>`;\r\n break;\r\n case 'image':\r\n content = `<img src=\"${attrs?.src || ''}\" alt=\"${attrs?.alt || ''}\" style=\"${inlineStyles};\" />`;\r\n break;\r\n case 'buttons':\r\n attrs.text = attrs?.text || 'Button text';\r\n content = `<button style=\"${inlineStyles}\">${attrs.text}</button>`;\r\n break;\r\n case 'divider':\r\n content = `<hr style=\"${inlineStyles}\" />`;\r\n break;\r\n case 'table': {\r\n const { border, borderStyle, borderColor, ...rest } = styles;\r\n const tInlineStyles = generateInlineStyles(styles.is_bordered ? styles : rest);\r\n const tHeadInlineStyles: string = generateInlineStyles(styles.tHead);\r\n const tBodyInlineStyles: string = generateInlineStyles(styles.tBody);\r\n const thCellInlineStyles: string = generateInlineStyles({...styles.thCells, border, borderStyle, borderColor });\r\n const tbCellInlineStyles: string = generateInlineStyles({...styles.tbCells, border, borderStyle, borderColor});\r\n content = `\r\n <table style=\"${tInlineStyles}\">\r\n <thead style=\"${tHeadInlineStyles}\">\r\n <tr style=\"background-color: #f5f5f5;\">\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody style=\"${tBodyInlineStyles}\">\r\n <tr>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n `;\r\n break;\r\n }\r\n case 'signature':\r\n content = `<div style=\"${inlineStyles}\">Signature: <input type='text' style=\"border:0; border-bottom:1px solid black\" class='signature-input'/></div>`;\r\n break;\r\n case 'qr-code':\r\n attrs.placeholder = attrs?.placeholder || '{{qr_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n case 'bar-code':\r\n attrs.placeholder = attrs?.placeholder || '{{barcode_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n default:\r\n content = '<p style=\"font-size: 16px; color: #333333; line-height: 1.5;\">New section</p>';\r\n }\r\n\r\n let attributes: Record<string, any> = {};\r\n attributes = extractStyles(content, type);\r\n\r\n return {\r\n content, \r\n type, \r\n attributes: {...(attrs || {}), styles}\r\n };\r\n};\r\n\r\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/views/template-editor/utils/common.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ElementType, EnhancedSectionData } from '../types/editor';\nimport { initialStyles, TEMPLATE_EDITOR_PATHS } from './constant';\n\n\nexport const templateRoutes = (modulePath: string, type: string) => {\n const list = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST(type)}`\n const add = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD(type)}`\n const edit = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT(type)}`\n return {\n LIST: list,\n ADD_TEMPLATE: (id: string) => add.replace(':id', id),\n EDIT_TEMPLATE: (id: string, templateId: string) => edit.replace(':id', id).replace(':template_id', templateId),\n }\n};\n\n\nexport const generateEmailPreview = (sections: EnhancedSectionData[], headerSections?: EnhancedSectionData[] = [], footerSections?: EnhancedSectionData[] = [], isSaving = false) => {\n const headerHtml = (headerSections && headerSections?.length) ? generateHeaderFooterPreview(headerSections, 'header') : '';\n const footerHtml = (footerSections && footerSections?.length) ? generateHeaderFooterPreview(footerSections, 'footer') : '';\n let html = `\n <html>\n <head>\n <style>\n .email-container {\n margin: 0 auto;\n padding: 20px;\n background-color: #fff;\n border-radius: 8px;\n width: ${isSaving ? '65%' : 'auto'};\n }\n a {\n color: #007bff !important;\n text-decoration: none !important;\n }\n a:hover {\n text-decoration: underline;\n }\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n body {\n font-family: \"Inter\", sans-serif !important;\n font-size: 16px;\n font-weight: 400;\n color: #00011c;\n font-style: normal;\n }\n\n img {\n display: block;\n max-width: 100%;\n height: auto;\n }\n\n table,\n tr,\n td {\n border-collapse: collapse;\n }\n\n a {\n text-decoration: none;\n }\n\n table.our-details,\n .our-details td,\n .our-details th {\n border: 1px solid #d3d3d4;\n }\n\n table.amount-word-table,\n table.amount-word-table td,\n table.amount-word-table th {\n border: 1px solid #d6d6d6;\n }\n\n .amount-word-table thead th {\n background-color: #f5f6f5;\n }\n\n .amount-word-table thead td {\n background-color: #f5f6f5;\n }\n\n .amount-word-table tbody tr:nth-child(even) {\n background-color: #f5f6f5;\n }\n\n .amount-word-table tbody tr td {\n border-top: 0;\n border-bottom: 0;\n }\n\n .deliver-table thead th {\n background-color: transparent;\n }\n </style>\n </head>\n <body>\n <div class=\"email-container\">\n ${headerHtml}\n ${headerHtml ? '<hr/>' : ''}\n `;\n\n // Group sections by splitGroupId\n const groupedSections = [];\n let currentGroup = [];\n let lastSplitGroupId = null;\n\n for (const section of sections) {\n if (section.isSplitPair && section.splitGroupId !== 0) {\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n currentGroup = [];\n }\n currentGroup.push(section);\n lastSplitGroupId = section.splitGroupId;\n } else {\n if (currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n currentGroup = [];\n lastSplitGroupId = null;\n }\n groupedSections.push([section]);\n }\n }\n if (currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n }\n\n // Generate HTML\n for (const group of groupedSections) {\n if (group.length === 1 && !group[0].isSplitPair) {\n // Concatenate normal section content directly\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\n } else {\n // Generate table for split sections\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\n for (const section of group) {\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\n ${section.content}\n </td>`;\n }\n html += '</tr></table>';\n }\n }\n\thtml += `\n ${footerHtml ? '<hr/>' : ''}\n ${footerHtml}\n </div></body></html>`;\n\n return html;\n}\nexport const generateHeaderFooterPreview = (sections: EnhancedSectionData[], type = 'header') => {\n let html = `<${type} class=\"${type}\">`;\n\n // Group sections by splitGroupId\n const groupedSections = [];\n let currentGroup = [];\n let lastSplitGroupId = null;\n\n for (const section of sections) {\n if (section.isSplitPair && section.splitGroupId !== 0) {\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n currentGroup = [];\n }\n currentGroup.push(section);\n lastSplitGroupId = section.splitGroupId;\n } else {\n if (currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n currentGroup = [];\n lastSplitGroupId = null;\n }\n groupedSections.push([section]);\n }\n }\n if (currentGroup.length > 0) {\n groupedSections.push(currentGroup);\n }\n\n // Generate HTML\n for (const group of groupedSections) {\n if (group.length === 1 && !group[0].isSplitPair) {\n // Concatenate normal section content directly\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\n } else {\n // Generate table for split sections\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\n for (const section of group) {\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\n ${section.content}\n </td>`;\n }\n html += '</tr></table>';\n }\n }\n\thtml += `</${type}>`;\n\n return html;\n}\n\nexport const extractStyles = (html: string, sectionType: string) => {\n // Create a temporary div to parse the HTML\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = html;\n \n // Get the first element (our styled element)\n const element = tempDiv.firstChild as HTMLElement;\n \n if (!element) return {};\n\n if(element?.getAttribute instanceof Function === false) {\n return {};\n }\n \n // Get the inline styles\n const styleAttr = element?.getAttribute('style');\n\n const allAttributes = element?.attributes || [];\n \n // const attrObj: Record<string, any> = {};\n const attrObj = Array.from(allAttributes).reduce((obj, attr) => {\n obj[attr.name] = attr.value;\n return obj;\n }, {});\n\n if (!styleAttr) return {};\n \n // Parse the style attribute into an object\n const styleObj: Record<string, any> = {};\n const stylePairs = styleAttr.split(';').filter(pair => pair.trim() !== '');\n \n stylePairs.forEach(pair => {\n const [prop, value] = pair.split(':').map(part => part.trim());\n if (prop && value) {\n // Convert CSS property names to camelCase for React\n const propName = prop.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n styleObj[propName] = value;\n }\n });\n attrObj.styles = styleObj\n return attrObj\n}\n\n\ntype StyleValue = string | number | boolean | null | undefined | StyleObject;\ninterface StyleObject {\n [key: string]: StyleValue;\n}\n\nconst EMAIL_SAFE_PROPERTIES = new Set([\n 'background', 'background-color',\n 'border', 'border-style', 'border-collapse', 'border-top', 'border-right', 'border-bottom', 'border-left', 'border-color', 'border-radius',\n 'color', 'display', 'font', 'font-family', 'font-size', 'font-style', 'font-weight',\n 'height', 'line-height',\n 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left',\n 'padding', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left',\n 'text-align', 'text-decoration',\n 'vertical-align', 'width',\n 'max-width', 'min-width', 'max-height', 'min-height'\n]);\n\nexport const generateInlineStyles = (\n styles: StyleObject,\n parentKey = ''\n): string => {\n if (!styles || typeof styles !== 'object') return '';\n\n const styleEntries = Object.entries(styles).reduce<string[]>((acc, [key, value]) => {\n if (value === undefined || value === null) return acc;\n\n const fullKey = parentKey ? `${parentKey}-${key}` : key;\n\n // Recursively flatten nested objects\n if (typeof value === 'object' && !Array.isArray(value)) {\n acc.push(generateInlineStyles(value as StyleObject, fullKey));\n return acc;\n }\n\n // Convert camelCase to kebab-case\n const cssKey = fullKey.replace(/([A-Z])/g, '-$1').toLowerCase();\n\n // Skip non-email-safe properties\n if (!EMAIL_SAFE_PROPERTIES.has(cssKey) && key !== 'fullWidth' && key !== 'alignment') {\n return acc;\n }\n\n // Special case: fullWidth\n if (key === 'fullWidth' && value === true) {\n acc.push('width: 100%');\n return acc;\n }\n\n // Special case: alignment (converted to text-align)\n if (key === 'alignment' && typeof value === 'string') {\n acc.push(`text-align: ${value}`);\n return acc;\n }\n\n // Ignore other boolean values\n if (typeof value === 'boolean') return acc;\n\n const cssValue =\n typeof value === 'number' && !['z-index', 'opacity', 'line-height'].includes(key)\n ? `${value}px`\n : value;\n\n acc.push(`${cssKey}: ${cssValue}`);\n return acc;\n }, []);\n\n return styleEntries.filter(Boolean).join('; ');\n};\n\nexport const getInitialSectionData = (type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\n let content = '';\n const styles = initialStyles[type] || {};\n const inlineStyles: string = generateInlineStyles(styles);\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 { 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({...styles.thCells, border, borderStyle, borderColor });\n const tbCellInlineStyles: string = generateInlineStyles({...styles.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 }\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 content, \n type, \n attributes: {...(attrs || {}), styles}\n };\n};\n\n"],"names":["generateHeaderFooterPreview","sections","type","html","groupedSections","currentGroup","lastSplitGroupId","section","isSplitPair","splitGroupId","length","push","group","splitWidth","content","extractStyles","sectionType","tempDiv","document","createElement","innerHTML","element","firstChild","getAttribute","Function","styleAttr","allAttributes","attributes","attrObj","Array","from","reduce","obj","attr","name","value","styleObj","split","filter","pair","trim","forEach","prop","map","part","propName","replace","g","toUpperCase","styles","EMAIL_SAFE_PROPERTIES","Set","generateInlineStyles","parentKey","Object","entries","acc","key","fullKey","isArray","cssKey","toLowerCase","has","cssValue","includes","Boolean","join","headerSections","footerSections","isSaving","headerHtml","footerHtml","attrs","initialStyles","inlineStyles","src","alt","text","border","borderStyle","borderColor","rest","tInlineStyles","is_bordered","tHeadInlineStyles","tHead","tBodyInlineStyles","tBody","thCellInlineStyles","thCells","tbCellInlineStyles","tbCells","placeholder","modulePath","list","TEMPLATE_EDITOR_PATHS","TEMPLATES_LIST","add","TEMPLATES_ADD","edit","TEMPLATES_EDIT","LIST","ADD_TEMPLATE","id","EDIT_TEMPLATE","templateId"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/views/template-editor/utils/common.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ElementType, EnhancedSectionData } from '../types/editor';\r\nimport { initialStyles, TEMPLATE_EDITOR_PATHS } from './constant';\r\n\r\n\r\nexport const templateRoutes = (modulePath: string, type: string) => {\r\n const list = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST(type)}`\r\n const add = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD(type)}`\r\n const edit = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT(type)}`\r\n return {\r\n LIST: list,\r\n ADD_TEMPLATE: (id: string) => add.replace(':id', id),\r\n EDIT_TEMPLATE: (id: string, templateId: string) => edit.replace(':id', id).replace(':template_id', templateId),\r\n }\r\n};\r\n\r\n\r\nexport const generateEmailPreview = (sections: EnhancedSectionData[], headerSections?: EnhancedSectionData[] = [], footerSections?: EnhancedSectionData[] = [], isSaving = false) => {\r\n const headerHtml = (headerSections && headerSections?.length) ? generateHeaderFooterPreview(headerSections, 'header') : '';\r\n const footerHtml = (footerSections && footerSections?.length) ? generateHeaderFooterPreview(footerSections, 'footer') : '';\r\n let html = `\r\n <html>\r\n <head>\r\n <style>\r\n .email-container {\r\n margin: 0 auto;\r\n padding: 20px;\r\n background-color: #fff;\r\n border-radius: 8px;\r\n width: ${isSaving ? '65%' : 'auto'};\r\n }\r\n a {\r\n color: #007bff !important;\r\n text-decoration: none !important;\r\n }\r\n a:hover {\r\n text-decoration: underline;\r\n }\r\n * {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n }\r\n\r\n body {\r\n font-family: \"Inter\", sans-serif !important;\r\n font-size: 16px;\r\n font-weight: 400;\r\n color: #00011c;\r\n font-style: normal;\r\n }\r\n\r\n img {\r\n display: block;\r\n max-width: 100%;\r\n height: auto;\r\n }\r\n\r\n table,\r\n tr,\r\n td {\r\n border-collapse: collapse;\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n }\r\n\r\n table.our-details,\r\n .our-details td,\r\n .our-details th {\r\n border: 1px solid #d3d3d4;\r\n }\r\n\r\n table.amount-word-table,\r\n table.amount-word-table td,\r\n table.amount-word-table th {\r\n border: 1px solid #d6d6d6;\r\n }\r\n\r\n .amount-word-table thead th {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table thead td {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table tbody tr:nth-child(even) {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table tbody tr td {\r\n border-top: 0;\r\n border-bottom: 0;\r\n }\r\n\r\n .deliver-table thead th {\r\n background-color: transparent;\r\n }\r\n </style>\r\n </head>\r\n <body>\r\n <div class=\"email-container\">\r\n ${headerHtml}\r\n ${headerHtml ? '<hr/>' : ''}\r\n `;\r\n\r\n // Group sections by splitGroupId\r\n const groupedSections = [];\r\n let currentGroup = [];\r\n let lastSplitGroupId = null;\r\n\r\n for (const section of sections) {\r\n if (section.isSplitPair && section.splitGroupId !== 0) {\r\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n }\r\n currentGroup.push(section);\r\n lastSplitGroupId = section.splitGroupId;\r\n } else {\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n lastSplitGroupId = null;\r\n }\r\n groupedSections.push([section]);\r\n }\r\n }\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n }\r\n\r\n // Generate HTML\r\n for (const group of groupedSections) {\r\n if (group.length === 1 && !group[0].isSplitPair) {\r\n // Concatenate normal section content directly\r\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\r\n } else {\r\n // Generate table for split sections\r\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\r\n for (const section of group) {\r\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\r\n ${section.content}\r\n </td>`;\r\n }\r\n html += '</tr></table>';\r\n }\r\n }\r\n\thtml += `\r\n ${footerHtml ? '<hr/>' : ''}\r\n ${footerHtml}\r\n </div></body></html>`;\r\n\r\n return html;\r\n}\r\nexport const generateHeaderFooterPreview = (sections: EnhancedSectionData[], type = 'header') => {\r\n let html = `<${type} class=\"${type}\">`;\r\n\r\n // Group sections by splitGroupId\r\n const groupedSections = [];\r\n let currentGroup = [];\r\n let lastSplitGroupId = null;\r\n\r\n for (const section of sections) {\r\n if (section.isSplitPair && section.splitGroupId !== 0) {\r\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n }\r\n currentGroup.push(section);\r\n lastSplitGroupId = section.splitGroupId;\r\n } else {\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n lastSplitGroupId = null;\r\n }\r\n groupedSections.push([section]);\r\n }\r\n }\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n }\r\n\r\n // Generate HTML\r\n for (const group of groupedSections) {\r\n if (group.length === 1 && !group[0].isSplitPair) {\r\n // Concatenate normal section content directly\r\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\r\n } else {\r\n // Generate table for split sections\r\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\r\n for (const section of group) {\r\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\r\n ${section.content}\r\n </td>`;\r\n }\r\n html += '</tr></table>';\r\n }\r\n }\r\n\thtml += `</${type}>`;\r\n\r\n return html;\r\n}\r\n\r\nexport const extractStyles = (html: string, sectionType: string) => {\r\n // Create a temporary div to parse the HTML\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = html;\r\n \r\n // Get the first element (our styled element)\r\n const element = tempDiv.firstChild as HTMLElement;\r\n \r\n if (!element) return {};\r\n\r\n if(element?.getAttribute instanceof Function === false) {\r\n return {};\r\n }\r\n \r\n // Get the inline styles\r\n const styleAttr = element?.getAttribute('style');\r\n\r\n const allAttributes = element?.attributes || [];\r\n \r\n // const attrObj: Record<string, any> = {};\r\n const attrObj = Array.from(allAttributes).reduce((obj, attr) => {\r\n obj[attr.name] = attr.value;\r\n return obj;\r\n }, {});\r\n\r\n if (!styleAttr) return {};\r\n \r\n // Parse the style attribute into an object\r\n const styleObj: Record<string, any> = {};\r\n const stylePairs = styleAttr.split(';').filter(pair => pair.trim() !== '');\r\n \r\n stylePairs.forEach(pair => {\r\n const [prop, value] = pair.split(':').map(part => part.trim());\r\n if (prop && value) {\r\n // Convert CSS property names to camelCase for React\r\n const propName = prop.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\r\n styleObj[propName] = value;\r\n }\r\n });\r\n attrObj.styles = styleObj\r\n return attrObj\r\n}\r\n\r\n\r\ntype StyleValue = string | number | boolean | null | undefined | StyleObject;\r\ninterface StyleObject {\r\n [key: string]: StyleValue;\r\n}\r\n\r\nconst EMAIL_SAFE_PROPERTIES = new Set([\r\n 'background', 'background-color',\r\n 'border', 'border-style', 'border-collapse', 'border-top', 'border-right', 'border-bottom', 'border-left', 'border-color', 'border-radius',\r\n 'color', 'display', 'font', 'font-family', 'font-size', 'font-style', 'font-weight',\r\n 'height', 'line-height',\r\n 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left',\r\n 'padding', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left',\r\n 'text-align', 'text-decoration',\r\n 'vertical-align', 'width',\r\n 'max-width', 'min-width', 'max-height', 'min-height'\r\n]);\r\n\r\nexport const generateInlineStyles = (\r\n styles: StyleObject,\r\n parentKey = ''\r\n): string => {\r\n if (!styles || typeof styles !== 'object') return '';\r\n\r\n const styleEntries = Object.entries(styles).reduce<string[]>((acc, [key, value]) => {\r\n if (value === undefined || value === null) return acc;\r\n\r\n const fullKey = parentKey ? `${parentKey}-${key}` : key;\r\n\r\n // Recursively flatten nested objects\r\n if (typeof value === 'object' && !Array.isArray(value)) {\r\n acc.push(generateInlineStyles(value as StyleObject, fullKey));\r\n return acc;\r\n }\r\n\r\n // Convert camelCase to kebab-case\r\n const cssKey = fullKey.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n\r\n // Skip non-email-safe properties\r\n if (!EMAIL_SAFE_PROPERTIES.has(cssKey) && key !== 'fullWidth' && key !== 'alignment') {\r\n return acc;\r\n }\r\n\r\n // Special case: fullWidth\r\n if (key === 'fullWidth' && value === true) {\r\n acc.push('width: 100%');\r\n return acc;\r\n }\r\n\r\n // Special case: alignment (converted to text-align)\r\n if (key === 'alignment' && typeof value === 'string') {\r\n acc.push(`text-align: ${value}`);\r\n return acc;\r\n }\r\n\r\n // Ignore other boolean values\r\n if (typeof value === 'boolean') return acc;\r\n\r\n const cssValue =\r\n typeof value === 'number' && !['z-index', 'opacity', 'line-height'].includes(key)\r\n ? `${value}px`\r\n : value;\r\n\r\n acc.push(`${cssKey}: ${cssValue}`);\r\n return acc;\r\n }, []);\r\n\r\n return styleEntries.filter(Boolean).join('; ');\r\n};\r\n\r\nexport const getInitialSectionData = (type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\r\n let content = '';\r\n const styles = initialStyles[type] || {};\r\n const inlineStyles: string = generateInlineStyles(styles);\r\n\r\n switch (type) {\r\n case 'heading':\r\n content = `<h1 style=\"${inlineStyles}\">Heading 1</h1>`;\r\n break;\r\n case 'heading-2':\r\n content = `<h2 style=\"${inlineStyles}\">Heading 2</h2>`;\r\n break;\r\n case 'heading-3':\r\n content = `<h3 style=\"${inlineStyles}\">Heading 3</h3>`;\r\n break;\r\n case 'heading-4':\r\n content = `<h4 style=\"${inlineStyles}\">Heading 4</h4>`;\r\n break;\r\n case 'text':\r\n content = `<p style=\"${inlineStyles}\">Hello, enter your text here...</p>`;\r\n break;\r\n case 'image':\r\n content = `<img src=\"${attrs?.src || ''}\" alt=\"${attrs?.alt || ''}\" style=\"${inlineStyles};\" />`;\r\n break;\r\n case 'buttons':\r\n attrs.text = attrs?.text || 'Button text';\r\n content = `<button style=\"${inlineStyles}\">${attrs.text}</button>`;\r\n break;\r\n case 'divider':\r\n content = `<hr style=\"${inlineStyles}\" />`;\r\n break;\r\n case 'table': {\r\n const { border, borderStyle, borderColor, ...rest } = styles;\r\n const tInlineStyles = generateInlineStyles(styles.is_bordered ? styles : rest);\r\n const tHeadInlineStyles: string = generateInlineStyles(styles.tHead);\r\n const tBodyInlineStyles: string = generateInlineStyles(styles.tBody);\r\n const thCellInlineStyles: string = generateInlineStyles({...styles.thCells, border, borderStyle, borderColor });\r\n const tbCellInlineStyles: string = generateInlineStyles({...styles.tbCells, border, borderStyle, borderColor});\r\n content = `\r\n <table style=\"${tInlineStyles}\">\r\n <thead style=\"${tHeadInlineStyles}\">\r\n <tr style=\"background-color: #f5f5f5;\">\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody style=\"${tBodyInlineStyles}\">\r\n <tr>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n `;\r\n break;\r\n }\r\n case 'signature':\r\n content = `<div style=\"${inlineStyles}\">Signature: <input type='text' style=\"border:0; border-bottom:1px solid black\" class='signature-input'/></div>`;\r\n break;\r\n case 'qr-code':\r\n attrs.placeholder = attrs?.placeholder || '{{qr_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n case 'bar-code':\r\n attrs.placeholder = attrs?.placeholder || '{{barcode_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n default:\r\n content = '<p style=\"font-size: 16px; color: #333333; line-height: 1.5;\">New section</p>';\r\n }\r\n\r\n let attributes: Record<string, any> = {};\r\n attributes = extractStyles(content, type);\r\n\r\n return {\r\n content, \r\n type, \r\n attributes: {...(attrs || {}), styles}\r\n };\r\n};\r\n\r\n"],"names":["generateHeaderFooterPreview","sections","type","html","groupedSections","currentGroup","lastSplitGroupId","section","isSplitPair","splitGroupId","length","push","group","splitWidth","content","extractStyles","sectionType","tempDiv","document","createElement","innerHTML","element","firstChild","getAttribute","Function","styleAttr","allAttributes","attributes","attrObj","Array","from","reduce","obj","attr","name","value","styleObj","split","filter","pair","trim","forEach","prop","map","part","propName","replace","g","toUpperCase","styles","EMAIL_SAFE_PROPERTIES","Set","generateInlineStyles","parentKey","Object","entries","acc","key","fullKey","isArray","cssKey","toLowerCase","has","cssValue","includes","Boolean","join","headerSections","footerSections","isSaving","headerHtml","footerHtml","attrs","initialStyles","inlineStyles","src","alt","text","border","borderStyle","borderColor","rest","tInlineStyles","is_bordered","tHeadInlineStyles","tHead","tBodyInlineStyles","tBody","thCellInlineStyles","thCells","tbCellInlineStyles","tbCells","placeholder","modulePath","list","TEMPLATE_EDITOR_PATHS","TEMPLATES_LIST","add","TEMPLATES_ADD","edit","TEMPLATES_EDIT","LIST","ADD_TEMPLATE","id","EDIT_TEMPLATE","templateId"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../../../../src/views/template-editor/utils/constant.ts"],"sourcesContent":["\n// Initial styles for each section type\nexport const initialStyles = {\n 'text': {\n color: '#333333',\n fontSize: 16,\n fontWeight: 'normal',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.5,\n },\n 'text-block': {\n color: '#333333',\n fontSize: 16,\n fontWeight: 'normal',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.5,\n },\n 'heading': {\n color: '#111111',\n fontSize: 24,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.2,\n margin: '0.5em 0',\n },\n 'heading-2': {\n color: '#111111',\n fontSize: 20,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.2,\n margin: '0.5em 0',\n },\n 'heading-3': {\n color: '#111111',\n fontSize: 18,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.2,\n margin: '0.5em 0',\n },\n 'heading-4': {\n color: '#111111',\n fontSize: 16,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.2,\n margin: '0.5em 0',\n },\n 'buttons': {\n backgroundColor: '#4CAF50',\n color: '#ffffff',\n padding: '10px 20px',\n border: 'none',\n borderRadius: 4,\n fontSize: 16,\n text: 'Click Me',\n display: 'block',\n margin: '0 auto',\n },\n 'image': {\n src: '',\n alt: 'Image description',\n width: '100%',\n height: 'auto',\n objectFit: 'contain',\n alignment: 'center',\n fullWidth: true,\n display: 'block',\n margin: '0 auto',\n },\n 'divider': {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: '#e0e0e0',\n },\n 'table': {\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 'signature': {\n fontSize: 14,\n fontFamily: 'Arial, sans-serif',\n color: '#666666',\n },\n 'qr-code': {\n fontSize: 15,\n placeholder: '{{qr_data}}',\n backgroundColor: '#f5f5f5',\n padding: 16,\n textAlign: 'center'\n },\n 'bar-code': {\n fontSize: 15,\n placeholder: '{{barcode_data}}',\n backgroundColor: '#f5f5f5',\n padding: 16,\n textAlign: 'center'\n },\n};\n\nexport const TEMPLATE_EDITOR_PATHS = {\n TEMPLATES_LIST: (type: string) => `/templates/${type}`,\n TEMPLATES_ADD: (type: string) => `/templates/${type}/:id/add-template`,\n TEMPLATES_EDIT: (type: string) => `/templates/${type}/:id/edit-template/:template_id`,\n}"],"names":[],"mappings":"AAEO,MAAM,gBAAgB;AAAA,EAC3B,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,EAAA;AAAA,EAEd,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,EAAA;AAAA,EAEd,WAAW;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,EAAA;AAAA,EAEV,aAAa;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,EAAA;AAAA,EAEV,aAAa;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,EAAA;AAAA,EAEV,aAAa;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,EAAA;AAAA,EAEV,WAAW;AAAA,IACT,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAAA,EAEV,SAAS;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAAA,EAEV,WAAW;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EAAA;AAAA,EAEf,SAAS;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,SAAS;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,IAEX,SAAS;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,IAEX,OAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,OAAO;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,QAAQ;AAAA,IAAA;AAAA,IAEV,OAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,OAAO;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,aAAa;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA;AAAA,EAET,WAAW;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,YAAY;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAEf;AAEO,MAAM,wBAAwB;AAAA,EACnC,gBAAgB,CAAC,SAAiB,cAAc,IAAI;AAAA,EACpD,eAAe,CAAC,SAAiB,cAAc,IAAI;AAAA,EACnD,gBAAgB,CAAC,SAAiB,cAAc,IAAI;AACtD;"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../../src/views/template-editor/utils/constant.ts"],"sourcesContent":["\r\n// Initial styles for each section type\r\nexport const initialStyles = {\r\n 'text': {\r\n color: '#333333',\r\n fontSize: 16,\r\n fontWeight: 'normal',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.5,\r\n },\r\n 'text-block': {\r\n color: '#333333',\r\n fontSize: 16,\r\n fontWeight: 'normal',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.5,\r\n },\r\n 'heading': {\r\n color: '#111111',\r\n fontSize: 24,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.2,\r\n margin: '0.5em 0',\r\n },\r\n 'heading-2': {\r\n color: '#111111',\r\n fontSize: 20,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.2,\r\n margin: '0.5em 0',\r\n },\r\n 'heading-3': {\r\n color: '#111111',\r\n fontSize: 18,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.2,\r\n margin: '0.5em 0',\r\n },\r\n 'heading-4': {\r\n color: '#111111',\r\n fontSize: 16,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.2,\r\n margin: '0.5em 0',\r\n },\r\n 'buttons': {\r\n backgroundColor: '#4CAF50',\r\n color: '#ffffff',\r\n padding: '10px 20px',\r\n border: 'none',\r\n borderRadius: 4,\r\n fontSize: 16,\r\n text: 'Click Me',\r\n display: 'block',\r\n margin: '0 auto',\r\n },\r\n 'image': {\r\n src: '',\r\n alt: 'Image description',\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n alignment: 'center',\r\n fullWidth: true,\r\n display: 'block',\r\n margin: '0 auto',\r\n },\r\n 'divider': {\r\n borderWidth: 1,\r\n borderStyle: 'solid',\r\n borderColor: '#e0e0e0',\r\n },\r\n 'table': {\r\n is_bordered: true,\r\n border: 1,\r\n borderStyle: 'solid',\r\n borderColor: '#e0e0e0',\r\n borderCollapse: 'collapse',\r\n width: '100%',\r\n thCells: {\r\n padding: 8\r\n },\r\n tbCells: {\r\n padding: 8\r\n },\r\n tHead: {\r\n backgroundColor: '#f5f5f5',\r\n color: '#333333',\r\n fontSize: 14,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n margin: '0.5em 0',\r\n },\r\n tBody: {\r\n backgroundColor: '#ffffff',\r\n color: '#333333',\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n }\r\n },\r\n 'signature': {\r\n fontSize: 14,\r\n fontFamily: 'Arial, sans-serif',\r\n color: '#666666',\r\n },\r\n 'qr-code': {\r\n fontSize: 15,\r\n placeholder: '{{qr_data}}',\r\n backgroundColor: '#f5f5f5',\r\n padding: 16,\r\n textAlign: 'center'\r\n },\r\n 'bar-code': {\r\n fontSize: 15,\r\n placeholder: '{{barcode_data}}',\r\n backgroundColor: '#f5f5f5',\r\n padding: 16,\r\n textAlign: 'center'\r\n },\r\n};\r\n\r\nexport const TEMPLATE_EDITOR_PATHS = {\r\n TEMPLATES_LIST: (type: string) => `/templates/${type}`,\r\n TEMPLATES_ADD: (type: string) => `/templates/${type}/:id/add-template`,\r\n TEMPLATES_EDIT: (type: string) => `/templates/${type}/:id/edit-template/:template_id`,\r\n}"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/views/template-editor/utils/constant.ts"],"sourcesContent":["\n// Initial styles for each section type\nexport const initialStyles = {\n 'text': {\n color: '#333333',\n fontSize: 16,\n fontWeight: 'normal',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.5,\n },\n 'text-block': {\n color: '#333333',\n fontSize: 16,\n fontWeight: 'normal',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.5,\n },\n 'heading': {\n color: '#111111',\n fontSize: 24,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.2,\n margin: '0.5em 0',\n },\n 'heading-2': {\n color: '#111111',\n fontSize: 20,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.2,\n margin: '0.5em 0',\n },\n 'heading-3': {\n color: '#111111',\n fontSize: 18,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.2,\n margin: '0.5em 0',\n },\n 'heading-4': {\n color: '#111111',\n fontSize: 16,\n fontWeight: 'bold',\n fontFamily: 'Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.2,\n margin: '0.5em 0',\n },\n 'buttons': {\n backgroundColor: '#4CAF50',\n color: '#ffffff',\n padding: '10px 20px',\n border: 'none',\n borderRadius: 4,\n fontSize: 16,\n text: 'Click Me',\n display: 'block',\n margin: '0 auto',\n },\n 'image': {\n src: '',\n alt: 'Image description',\n width: '100%',\n height: 'auto',\n objectFit: 'contain',\n alignment: 'center',\n fullWidth: true,\n display: 'block',\n margin: '0 auto',\n },\n 'divider': {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: '#e0e0e0',\n },\n 'table': {\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 'signature': {\n fontSize: 14,\n fontFamily: 'Arial, sans-serif',\n color: '#666666',\n },\n 'qr-code': {\n fontSize: 15,\n placeholder: '{{qr_data}}',\n backgroundColor: '#f5f5f5',\n padding: 16,\n textAlign: 'center'\n },\n 'bar-code': {\n fontSize: 15,\n placeholder: '{{barcode_data}}',\n backgroundColor: '#f5f5f5',\n padding: 16,\n textAlign: 'center'\n },\n};\n\nexport const TEMPLATE_EDITOR_PATHS = {\n TEMPLATES_LIST: (type: string) => `/templates/${type}`,\n TEMPLATES_ADD: (type: string) => `/templates/${type}/:id/add-template`,\n TEMPLATES_EDIT: (type: string) => `/templates/${type}/:id/edit-template/:template_id`,\n}"],"names":["TEMPLATES_LIST","type","TEMPLATES_ADD","TEMPLATES_EDIT","text","color","fontSize","fontWeight","fontFamily","textAlign","lineHeight","heading","margin","buttons","backgroundColor","padding","border","borderRadius","display","image","src","alt","width","height","objectFit","alignment","fullWidth","divider","borderWidth","borderStyle","borderColor","table","is_bordered","borderCollapse","thCells","tbCells","tHead","tBody","signature","placeholder"],"mappings":"kGAsIqC,CACnCA,eAAiBC,GAAiB,cAAcA,IAChDC,cAAgBD,GAAiB,cAAcA,qBAC/CE,eAAiBF,GAAiB,cAAcA,0DAvIrB,CAC3BG,KAAQ,CACNC,MAAO,UACPC,SAAU,GACVC,WAAY,SACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,KAEd,aAAc,CACZL,MAAO,UACPC,SAAU,GACVC,WAAY,SACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,KAEdC,QAAW,CACTN,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,IACZE,OAAQ,WAEV,YAAa,CACXP,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,IACZE,OAAQ,WAEV,YAAa,CACXP,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,IACZE,OAAQ,WAEV,YAAa,CACXP,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,IACZE,OAAQ,WAEVC,QAAW,CACTC,gBAAiB,UACjBT,MAAO,UACPU,QAAS,YACTC,OAAQ,OACRC,aAAc,EACdX,SAAU,GACVF,KAAM,WACNc,QAAS,QACTN,OAAQ,UAEVO,MAAS,CACPC,IAAK,GACLC,IAAK,oBACLC,MAAO,OACPC,OAAQ,OACRC,UAAW,UACXC,UAAW,SACXC,WAAW,EACXR,QAAS,QACTN,OAAQ,UAEVe,QAAW,CACTC,YAAa,EACbC,YAAa,QACbC,YAAa,WAEfC,MAAS,CACPC,aAAa,EACbhB,OAAQ,EACRa,YAAa,QACbC,YAAa,UACbG,eAAgB,WAChBX,MAAO,OACPY,QAAS,CACPnB,QAAS,GAEXoB,QAAS,CACPpB,QAAS,GAEXqB,MAAO,CACLtB,gBAAiB,UACjBT,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXG,OAAQ,WAEVyB,MAAO,CACLvB,gBAAiB,UACjBT,MAAO,UACPC,SAAU,GACVC,WAAY,SACZC,WAAY,oBACZC,UAAW,SAGf6B,UAAa,CACXhC,SAAU,GACVE,WAAY,oBACZH,MAAO,WAET,UAAW,CACTC,SAAU,GACViC,YAAa,cACbzB,gBAAiB,UACjBC,QAAS,GACTN,UAAW,UAEb,WAAY,CACVH,SAAU,GACViC,YAAa,mBACbzB,gBAAiB,UACjBC,QAAS,GACTN,UAAW"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/views/template-editor/utils/constant.ts"],"sourcesContent":["\r\n// Initial styles for each section type\r\nexport const initialStyles = {\r\n 'text': {\r\n color: '#333333',\r\n fontSize: 16,\r\n fontWeight: 'normal',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.5,\r\n },\r\n 'text-block': {\r\n color: '#333333',\r\n fontSize: 16,\r\n fontWeight: 'normal',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.5,\r\n },\r\n 'heading': {\r\n color: '#111111',\r\n fontSize: 24,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.2,\r\n margin: '0.5em 0',\r\n },\r\n 'heading-2': {\r\n color: '#111111',\r\n fontSize: 20,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.2,\r\n margin: '0.5em 0',\r\n },\r\n 'heading-3': {\r\n color: '#111111',\r\n fontSize: 18,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.2,\r\n margin: '0.5em 0',\r\n },\r\n 'heading-4': {\r\n color: '#111111',\r\n fontSize: 16,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n lineHeight: 1.2,\r\n margin: '0.5em 0',\r\n },\r\n 'buttons': {\r\n backgroundColor: '#4CAF50',\r\n color: '#ffffff',\r\n padding: '10px 20px',\r\n border: 'none',\r\n borderRadius: 4,\r\n fontSize: 16,\r\n text: 'Click Me',\r\n display: 'block',\r\n margin: '0 auto',\r\n },\r\n 'image': {\r\n src: '',\r\n alt: 'Image description',\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n alignment: 'center',\r\n fullWidth: true,\r\n display: 'block',\r\n margin: '0 auto',\r\n },\r\n 'divider': {\r\n borderWidth: 1,\r\n borderStyle: 'solid',\r\n borderColor: '#e0e0e0',\r\n },\r\n 'table': {\r\n is_bordered: true,\r\n border: 1,\r\n borderStyle: 'solid',\r\n borderColor: '#e0e0e0',\r\n borderCollapse: 'collapse',\r\n width: '100%',\r\n thCells: {\r\n padding: 8\r\n },\r\n tbCells: {\r\n padding: 8\r\n },\r\n tHead: {\r\n backgroundColor: '#f5f5f5',\r\n color: '#333333',\r\n fontSize: 14,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n margin: '0.5em 0',\r\n },\r\n tBody: {\r\n backgroundColor: '#ffffff',\r\n color: '#333333',\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n }\r\n },\r\n 'signature': {\r\n fontSize: 14,\r\n fontFamily: 'Arial, sans-serif',\r\n color: '#666666',\r\n },\r\n 'qr-code': {\r\n fontSize: 15,\r\n placeholder: '{{qr_data}}',\r\n backgroundColor: '#f5f5f5',\r\n padding: 16,\r\n textAlign: 'center'\r\n },\r\n 'bar-code': {\r\n fontSize: 15,\r\n placeholder: '{{barcode_data}}',\r\n backgroundColor: '#f5f5f5',\r\n padding: 16,\r\n textAlign: 'center'\r\n },\r\n};\r\n\r\nexport const TEMPLATE_EDITOR_PATHS = {\r\n TEMPLATES_LIST: (type: string) => `/templates/${type}`,\r\n TEMPLATES_ADD: (type: string) => `/templates/${type}/:id/add-template`,\r\n TEMPLATES_EDIT: (type: string) => `/templates/${type}/:id/edit-template/:template_id`,\r\n}"],"names":["TEMPLATES_LIST","type","TEMPLATES_ADD","TEMPLATES_EDIT","text","color","fontSize","fontWeight","fontFamily","textAlign","lineHeight","heading","margin","buttons","backgroundColor","padding","border","borderRadius","display","image","src","alt","width","height","objectFit","alignment","fullWidth","divider","borderWidth","borderStyle","borderColor","table","is_bordered","borderCollapse","thCells","tbCells","tHead","tBody","signature","placeholder"],"mappings":"kGAsIqC,CACnCA,eAAiBC,GAAiB,cAAcA,IAChDC,cAAgBD,GAAiB,cAAcA,qBAC/CE,eAAiBF,GAAiB,cAAcA,0DAvIrB,CAC3BG,KAAQ,CACNC,MAAO,UACPC,SAAU,GACVC,WAAY,SACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,KAEd,aAAc,CACZL,MAAO,UACPC,SAAU,GACVC,WAAY,SACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,KAEdC,QAAW,CACTN,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,IACZE,OAAQ,WAEV,YAAa,CACXP,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,IACZE,OAAQ,WAEV,YAAa,CACXP,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,IACZE,OAAQ,WAEV,YAAa,CACXP,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXC,WAAY,IACZE,OAAQ,WAEVC,QAAW,CACTC,gBAAiB,UACjBT,MAAO,UACPU,QAAS,YACTC,OAAQ,OACRC,aAAc,EACdX,SAAU,GACVF,KAAM,WACNc,QAAS,QACTN,OAAQ,UAEVO,MAAS,CACPC,IAAK,GACLC,IAAK,oBACLC,MAAO,OACPC,OAAQ,OACRC,UAAW,UACXC,UAAW,SACXC,WAAW,EACXR,QAAS,QACTN,OAAQ,UAEVe,QAAW,CACTC,YAAa,EACbC,YAAa,QACbC,YAAa,WAEfC,MAAS,CACPC,aAAa,EACbhB,OAAQ,EACRa,YAAa,QACbC,YAAa,UACbG,eAAgB,WAChBX,MAAO,OACPY,QAAS,CACPnB,QAAS,GAEXoB,QAAS,CACPpB,QAAS,GAEXqB,MAAO,CACLtB,gBAAiB,UACjBT,MAAO,UACPC,SAAU,GACVC,WAAY,OACZC,WAAY,oBACZC,UAAW,OACXG,OAAQ,WAEVyB,MAAO,CACLvB,gBAAiB,UACjBT,MAAO,UACPC,SAAU,GACVC,WAAY,SACZC,WAAY,oBACZC,UAAW,SAGf6B,UAAa,CACXhC,SAAU,GACVE,WAAY,oBACZH,MAAO,WAET,UAAW,CACTC,SAAU,GACViC,YAAa,cACbzB,gBAAiB,UACjBC,QAAS,GACTN,UAAW,UAEb,WAAY,CACVH,SAAU,GACViC,YAAa,mBACbzB,gBAAiB,UACjBC,QAAS,GACTN,UAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../../../../src/views/template-editor/utils/default-data.ts"],"sourcesContent":["import { MaterialTableColumnProps } from \"../../../components/material-table/material-table\";\n\nexport const textOptions = [\n { label: 'Heading 1', value: 'heading' },\n { label: 'Heading 2', value: 'heading-2' },\n { label: 'Heading 3', value: 'heading-3' },\n { label: 'Heading 4', value: 'heading-4' },\n { label: 'Body', value: 'text' },\n { label: 'Text Block', value: 'text-block' },\n]\n\nexport const emailColumns:MaterialTableColumnProps[] = [\n {\n header: 'ID',\n accessorKey: '_id',\n visible: true,\n type: 'string'\n },\n {\n header: 'Date',\n accessorKey: 'created_at',\n visible: true,\n type: 'date'\n },\n {\n header: 'Subject',\n accessorKey: 'subject',\n visible: true,\n type: 'string'\n },\n]"],"names":[],"mappings":"AAEO,MAAM,cAAc;AAAA,EACzB,EAAE,OAAO,aAAa,OAAO,UAAA;AAAA,EAC7B,EAAE,OAAO,aAAa,OAAO,YAAA;AAAA,EAC7B,EAAE,OAAO,aAAa,OAAO,YAAA;AAAA,EAC7B,EAAE,OAAO,aAAa,OAAO,YAAA;AAAA,EAC7B,EAAE,OAAO,QAAQ,OAAO,OAAA;AAAA,EACxB,EAAE,OAAO,cAAc,OAAO,aAAA;AAChC;AAEO,MAAM,eAA0C;AAAA,EACrD;AAAA,IACE,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAEV;"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../../src/views/template-editor/utils/default-data.ts"],"sourcesContent":["import { MaterialTableColumnProps } from \"../../../components/material-table/material-table\";\r\n\r\nexport const textOptions = [\r\n { label: 'Heading 1', value: 'heading' },\r\n { label: 'Heading 2', value: 'heading-2' },\r\n { label: 'Heading 3', value: 'heading-3' },\r\n { label: 'Heading 4', value: 'heading-4' },\r\n { label: 'Body', value: 'text' },\r\n { label: 'Text Block', value: 'text-block' },\r\n]\r\n\r\nexport const emailColumns:MaterialTableColumnProps[] = [\r\n {\r\n header: 'ID',\r\n accessorKey: '_id',\r\n visible: true,\r\n type: 'string'\r\n },\r\n {\r\n header: 'Date',\r\n accessorKey: 'created_at',\r\n visible: true,\r\n type: 'date'\r\n },\r\n {\r\n header: 'Subject',\r\n accessorKey: 'subject',\r\n visible: true,\r\n type: 'string'\r\n },\r\n]"],"names":[],"mappings":"AAEO,MAAM,cAAc;AAAA,EACzB,EAAE,OAAO,aAAa,OAAO,UAAA;AAAA,EAC7B,EAAE,OAAO,aAAa,OAAO,YAAA;AAAA,EAC7B,EAAE,OAAO,aAAa,OAAO,YAAA;AAAA,EAC7B,EAAE,OAAO,aAAa,OAAO,YAAA;AAAA,EAC7B,EAAE,OAAO,QAAQ,OAAO,OAAA;AAAA,EACxB,EAAE,OAAO,cAAc,OAAO,aAAA;AAChC;AAEO,MAAM,eAA0C;AAAA,EACrD;AAAA,IACE,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAEV;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/views/template-editor/utils/default-data.ts"],"sourcesContent":["import { MaterialTableColumnProps } from \"../../../components/material-table/material-table\";\n\nexport const textOptions = [\n { label: 'Heading 1', value: 'heading' },\n { label: 'Heading 2', value: 'heading-2' },\n { label: 'Heading 3', value: 'heading-3' },\n { label: 'Heading 4', value: 'heading-4' },\n { label: 'Body', value: 'text' },\n { label: 'Text Block', value: 'text-block' },\n]\n\nexport const emailColumns:MaterialTableColumnProps[] = [\n {\n header: 'ID',\n accessorKey: '_id',\n visible: true,\n type: 'string'\n },\n {\n header: 'Date',\n accessorKey: 'created_at',\n visible: true,\n type: 'date'\n },\n {\n header: 'Subject',\n accessorKey: 'subject',\n visible: true,\n type: 'string'\n },\n]"],"names":["header","accessorKey","visible","type","label","value"],"mappings":"yFAWuD,CACrD,CACEA,OAAQ,KACRC,YAAa,MACbC,SAAS,EACTC,KAAM,UAER,CACEH,OAAQ,OACRC,YAAa,aACbC,SAAS,EACTC,KAAM,QAER,CACEH,OAAQ,UACRC,YAAa,UACbC,SAAS,EACTC,KAAM,+BA1BiB,CACzB,CAAEC,MAAO,YAAaC,MAAO,WAC7B,CAAED,MAAO,YAAaC,MAAO,aAC7B,CAAED,MAAO,YAAaC,MAAO,aAC7B,CAAED,MAAO,YAAaC,MAAO,aAC7B,CAAED,MAAO,OAAQC,MAAO,QACxB,CAAED,MAAO,aAAcC,MAAO"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/views/template-editor/utils/default-data.ts"],"sourcesContent":["import { MaterialTableColumnProps } from \"../../../components/material-table/material-table\";\r\n\r\nexport const textOptions = [\r\n { label: 'Heading 1', value: 'heading' },\r\n { label: 'Heading 2', value: 'heading-2' },\r\n { label: 'Heading 3', value: 'heading-3' },\r\n { label: 'Heading 4', value: 'heading-4' },\r\n { label: 'Body', value: 'text' },\r\n { label: 'Text Block', value: 'text-block' },\r\n]\r\n\r\nexport const emailColumns:MaterialTableColumnProps[] = [\r\n {\r\n header: 'ID',\r\n accessorKey: '_id',\r\n visible: true,\r\n type: 'string'\r\n },\r\n {\r\n header: 'Date',\r\n accessorKey: 'created_at',\r\n visible: true,\r\n type: 'date'\r\n },\r\n {\r\n header: 'Subject',\r\n accessorKey: 'subject',\r\n visible: true,\r\n type: 'string'\r\n },\r\n]"],"names":["header","accessorKey","visible","type","label","value"],"mappings":"yFAWuD,CACrD,CACEA,OAAQ,KACRC,YAAa,MACbC,SAAS,EACTC,KAAM,UAER,CACEH,OAAQ,OACRC,YAAa,aACbC,SAAS,EACTC,KAAM,QAER,CACEH,OAAQ,UACRC,YAAa,UACbC,SAAS,EACTC,KAAM,+BA1BiB,CACzB,CAAEC,MAAO,YAAaC,MAAO,WAC7B,CAAED,MAAO,YAAaC,MAAO,aAC7B,CAAED,MAAO,YAAaC,MAAO,aAC7B,CAAED,MAAO,YAAaC,MAAO,aAC7B,CAAED,MAAO,OAAQC,MAAO,QACxB,CAAED,MAAO,aAAcC,MAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../../../../src/views/template-editor/utils/style-extractor.ts"],"sourcesContent":["/* eslint-disable unused-imports/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport { useCallback, useMemo } from 'react';\n\n// Enhanced Custom hook for CKEditor style extraction and reverse conversion\nexport const useCKEditorStyleExtractor = () => {\n // HTML tag to CSS style mappings\n const tagStyleMap = useMemo(() => ({\n 'i': { fontStyle: 'italic' },\n 'em': { fontStyle: 'italic' },\n 'b': { fontWeight: 'bold' },\n 'strong': { fontWeight: 'bold' },\n 'u': { textDecoration: 'underline' },\n 's': { textDecoration: 'line-through' },\n 'strike': { textDecoration: 'line-through' },\n 'del': { textDecoration: 'line-through' },\n 'sup': { verticalAlign: 'super', fontSize: 'smaller' },\n 'sub': { verticalAlign: 'sub', fontSize: 'smaller' },\n 'small': { fontSize: 'smaller' },\n 'big': { fontSize: 'larger' },\n 'mark': { backgroundColor: 'yellow' },\n 'code': { fontFamily: 'monospace' },\n 'kbd': { fontFamily: 'monospace', backgroundColor: '#f1f1f1', padding: '2px 4px', borderRadius: '3px' },\n 'samp': { fontFamily: 'monospace' },\n 'var': { fontStyle: 'italic', fontFamily: 'monospace' }\n }), []);\n\n // Reverse mapping: CSS styles to HTML tags (for reverse conversion)\n const styleTagMap = useMemo(() => {\n const reverseMap = {};\n \n // Create reverse mapping with priority for semantic tags\n const tagPriority = {\n 'fontStyle-italic': 'i',\n 'fontWeight-bold': 'b',\n 'textDecoration-underline': 'u',\n 'textDecoration-line-through': 's',\n 'verticalAlign-super': 'sup',\n 'verticalAlign-sub': 'sub',\n 'fontSize-smaller': 'small',\n 'fontSize-larger': 'big',\n 'backgroundColor-yellow': 'mark'\n };\n\n Object.entries(tagPriority).forEach(([styleKey, tag]) => {\n reverseMap[styleKey] = tag;\n });\n\n return reverseMap;\n }, []);\n\n // CSS property mappings for camelCase conversion\n const cssPropertyMap = useMemo(() => ({\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-weight': 'fontWeight',\n 'font-style': 'fontStyle',\n 'text-align': 'textAlign',\n 'text-decoration': 'textDecoration',\n 'text-transform': 'textTransform',\n 'line-height': 'lineHeight',\n 'letter-spacing': 'letterSpacing',\n 'word-spacing': 'wordSpacing',\n 'color': 'color',\n 'background-color': 'backgroundColor',\n 'background-image': 'backgroundImage',\n 'background-size': 'backgroundSize',\n 'background-position': 'backgroundPosition',\n 'background-repeat': 'backgroundRepeat',\n 'border': 'border',\n 'border-color': 'borderColor',\n 'border-width': 'borderWidth',\n 'border-style': 'borderStyle',\n 'border-radius': 'borderRadius',\n 'margin': 'margin',\n 'margin-top': 'marginTop',\n 'margin-right': 'marginRight',\n 'margin-bottom': 'marginBottom',\n 'margin-left': 'marginLeft',\n 'padding': 'padding',\n 'padding-top': 'paddingTop',\n 'padding-right': 'paddingRight',\n 'padding-bottom': 'paddingBottom',\n 'padding-left': 'paddingLeft',\n 'width': 'width',\n 'height': 'height',\n 'max-width': 'maxWidth',\n 'max-height': 'maxHeight',\n 'min-width': 'minWidth',\n 'min-height': 'minHeight',\n 'display': 'display',\n 'position': 'position',\n 'top': 'top',\n 'right': 'right',\n 'bottom': 'bottom',\n 'left': 'left',\n 'float': 'float',\n 'clear': 'clear',\n 'overflow': 'overflow',\n 'opacity': 'opacity',\n 'z-index': 'zIndex',\n 'box-shadow': 'boxShadow',\n 'text-shadow': 'textShadow',\n 'vertical-align': 'verticalAlign'\n }), []);\n\n // Convert CSS property to camelCase\n const toCamelCase = useCallback((property) => {\n return cssPropertyMap[property] || \n property.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());\n }, [cssPropertyMap]);\n\n // Convert camelCase to kebab-case\n const toKebabCase = useCallback((property) => {\n return property.replace(/([A-Z])/g, '-$1').toLowerCase();\n }, []);\n\n // Parse inline styles from element.style object\n const parseInlineStyles = useCallback((styleDeclaration) => {\n const styles = {};\n\n for (let i = 0; i < styleDeclaration.length; i++) {\n const property = styleDeclaration[i];\n const value = styleDeclaration.getPropertyValue(property);\n \n if (value) {\n const camelCaseProperty = toCamelCase(property);\n styles[camelCaseProperty] = value.trim();\n }\n }\n\n return styles;\n }, [toCamelCase]);\n\n // Extract styles based on semantic HTML tags\n const extractTagStyles = useCallback((element) => {\n const tagName = element.tagName.toLowerCase();\n return tagStyleMap[tagName] || {};\n }, [tagStyleMap]);\n\n // Extract nested/inherited styles from parent elements\n const extractNestedStyles = useCallback((element) => {\n const nestedStyles = {};\n let currentElement = element.parentElement;\n\n // Traverse up the DOM tree to collect inherited styles\n while (currentElement && currentElement.tagName !== 'BODY') {\n const tagName = currentElement.tagName.toLowerCase();\n \n // Add tag-based styles from parents\n if (tagStyleMap[tagName]) {\n Object.entries(tagStyleMap[tagName]).forEach(([prop, value]) => {\n // Only add if not already defined (child takes precedence)\n if (!nestedStyles[prop]) {\n nestedStyles[prop] = value;\n }\n });\n }\n\n // Add inline styles from parents that can be inherited\n if (currentElement.style.length > 0) {\n const inheritableProps = ['color', 'fontFamily', 'fontSize', 'lineHeight', 'textAlign'];\n const parentStyles = parseInlineStyles(currentElement.style);\n \n inheritableProps.forEach(prop => {\n if (parentStyles[prop] && !nestedStyles[prop]) {\n nestedStyles[prop] = parentStyles[prop];\n }\n });\n }\n\n currentElement = currentElement.parentElement;\n }\n\n return nestedStyles;\n }, [tagStyleMap, parseInlineStyles]);\n\n // Extract image-specific styles\n const extractImageStyles = useCallback((imgElement, styleData) => {\n const imageStyles = {};\n\n if (imgElement.width) imageStyles.width = `${imgElement.width}px`;\n if (imgElement.height) imageStyles.height = `${imgElement.height}px`;\n if (imgElement.getAttribute('align')) {\n imageStyles.textAlign = imgElement.getAttribute('align');\n }\n\n // Merge with existing styles\n Object.assign(styleData.styles, imageStyles);\n \n // Add image-specific metadata\n styleData.src = imgElement.src;\n styleData.alt = imgElement.alt;\n }, []);\n\n // Main extraction function\n const extractStyles = useCallback((editorContent, options = {}) => {\n const {\n includeInlineStyles = true,\n includeTagStyles = true,\n includeComputedStyles = false,\n groupByElement = false,\n filterEmptyStyles = true,\n mergeNestedStyles = true\n } = options;\n\n // Create a temporary DOM element to parse the content\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = editorContent;\n\n const results = [];\n const elements = tempDiv.querySelectorAll('*');\n\n elements.forEach((element, index) => {\n const styleData = {\n elementType: element.tagName.toLowerCase(),\n elementIndex: index,\n className: element.className || null,\n id: element.id || null,\n styles: {},\n textContent: element.textContent?.trim() || null\n };\n\n // Extract inline styles\n if (includeInlineStyles && element.style.length > 0) {\n styleData.styles = { ...styleData.styles, ...parseInlineStyles(element.style) };\n }\n\n // Extract semantic tag styles (like <i>, <b>, etc.)\n if (includeTagStyles) {\n const tagStyles = extractTagStyles(element);\n styleData.styles = { ...styleData.styles, ...tagStyles };\n }\n\n // Extract nested styling context\n if (mergeNestedStyles) {\n const nestedStyles = extractNestedStyles(element);\n styleData.styles = { ...styleData.styles, ...nestedStyles };\n styleData.inheritedStyles = nestedStyles;\n }\n\n // Handle special cases for images\n if (element.tagName.toLowerCase() === 'img') {\n extractImageStyles(element, styleData);\n }\n\n // Filter empty styles if requested\n if (filterEmptyStyles && Object.keys(styleData.styles).length === 0 && !styleData.textContent) {\n return;\n }\n\n results.push(styleData);\n });\n\n return results;\n }, [parseInlineStyles, extractTagStyles, extractNestedStyles, extractImageStyles]);\n\n // Extract styles specifically for formatting tags\n const extractFormattingStyles = useCallback((editorContent) => {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = editorContent;\n \n const formattingTags = ['i', 'em', 'b', 'strong', 'u', 's', 'strike', 'del', 'sup', 'sub'];\n const formattingStyles = {};\n\n formattingTags.forEach(tag => {\n const elements = tempDiv.querySelectorAll(tag);\n elements.forEach((element, index) => {\n const key = `${tag}_${index}`;\n formattingStyles[key] = {\n ...tagStyleMap[tag],\n textContent: element.textContent,\n };\n });\n });\n\n return formattingStyles;\n }, [tagStyleMap]);\n\n // NEW: Convert styles object to HTML with semantic tags\n const stylesToHtml = useCallback((text, styles = {}, options = {}) => {\n const {\n preferSemanticTags = true,\n wrapInParagraph = true,\n preserveWhitespace = true\n } = options;\n\n if (!text || typeof text !== 'string') {\n return '';\n }\n\n let wrappedText = text;\n const inlineStyles = {};\n\n // Process each style property\n Object.entries(styles).forEach(([property, value]) => {\n const styleKey = `${property}-${value}`;\n \n // Check if this style can be converted to a semantic tag\n if (preferSemanticTags && styleTagMap[styleKey]) {\n const tag = styleTagMap[styleKey];\n wrappedText = `<${tag}>${wrappedText}</${tag}>`;\n } else {\n // Add to inline styles for non-semantic styles\n inlineStyles[property] = value;\n }\n });\n\n // Apply remaining inline styles\n if (Object.keys(inlineStyles).length > 0) {\n const styleAttr = Object.entries(inlineStyles)\n .map(([prop, val]) => `${toKebabCase(prop)}: ${val}`)\n .join('; ');\n \n wrappedText = `<span style=\"${styleAttr}\">${wrappedText}</span>`;\n }\n\n // Wrap in paragraph if requested\n if (wrapInParagraph) {\n wrappedText = `<p>${wrappedText}</p>`;\n }\n\n return wrappedText;\n }, [styleTagMap, toKebabCase]);\n\n // NEW: Convert multiple styled text segments to HTML\n const multipleStylesToHtml = useCallback((segments, options = {}) => {\n const {\n wrapInContainer = true,\n containerTag = 'div',\n separateElements = false\n } = options;\n\n if (!Array.isArray(segments)) {\n return '';\n }\n\n const htmlSegments = segments.map(segment => {\n const { text, styles = {}, wrapInParagraph = false } = segment;\n return stylesToHtml(text, styles, { ...options, wrapInParagraph });\n });\n\n let result = separateElements ? htmlSegments.join('\\n') : htmlSegments.join(' ');\n\n if (wrapInContainer) {\n result = `<${containerTag}>${result}</${containerTag}>`;\n }\n\n return result;\n }, [stylesToHtml]);\n\n // NEW: Apply styles to existing HTML content\n const applyStylesToHtml = useCallback((htmlContent, styles = {}, targetSelector = '*') => {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = htmlContent;\n\n const targetElements = targetSelector === '*' \n ? tempDiv.querySelectorAll('*') \n : tempDiv.querySelectorAll(targetSelector);\n\n targetElements.forEach(element => {\n Object.entries(styles).forEach(([property, value]) => {\n const styleKey = `${property}-${value}`;\n \n // Check if this style should be converted to semantic tag\n if (styleTagMap[styleKey]) {\n const tag = styleTagMap[styleKey];\n const wrapper = document.createElement(tag);\n \n // Move the element's content to the wrapper\n while (element.firstChild) {\n wrapper.appendChild(element.firstChild);\n }\n \n element.appendChild(wrapper);\n } else {\n // Apply as inline style\n const kebabProperty = toKebabCase(property);\n element.style[kebabProperty] = value;\n }\n });\n });\n\n return tempDiv.innerHTML;\n }, [styleTagMap, toKebabCase]);\n\n // NEW: Extract and convert - one-step process\n const extractAndConvert = useCallback((editorContent, targetStyles = {}) => {\n const extracted = extractStyles(editorContent);\n const converted = {};\n\n extracted.forEach(item => {\n const key = item.className || item.id || `${item.elementType}_${item.elementIndex}`;\n const mergedStyles = { ...item.styles, ...targetStyles };\n \n if (item.textContent) {\n converted[key] = stylesToHtml(item.textContent, mergedStyles, { wrapInParagraph: false });\n }\n });\n\n return converted;\n }, [extractStyles, stylesToHtml]);\n\n // Generate CSS string from extracted styles\n const generateCSS = useCallback((extractedStyles) => {\n let css = '';\n \n extractedStyles.forEach((item, index) => {\n const selector = item.className \n ? `.${item.className}` \n : item.id \n ? `#${item.id}` \n : `${item.elementType}-${index}`;\n\n const styleRules = Object.entries(item.styles)\n .map(([prop, value]) => ` ${toKebabCase(prop)}: ${value};`)\n .join('\\n');\n\n if (styleRules) {\n css += `${selector} {\\n${styleRules}\\n}\\n\\n`;\n }\n });\n\n return css;\n }, [toKebabCase]);\n\n // Get flattened styles object\n const getFlattenedStyles = useCallback((extractedStyles) => {\n const flattened = {};\n \n extractedStyles.forEach((item, index) => {\n const prefix = item.className || item.id || `${item.elementType}_${index}`;\n Object.entries(item.styles).forEach(([prop, value]) => {\n flattened[`${prefix}_${prop}`] = value;\n });\n });\n\n return flattened;\n }, []);\n\n const getSingleStyles = useCallback((extractedStyles) => {\n const flattened = {};\n \n extractedStyles.forEach((item, index) => {\n // const prefix = item.className || item.id || `${item.elementType}_${index}`;\n Object.entries(item.styles).forEach(([prop, value]) => {\n flattened[prop] = value;\n });\n });\n\n return flattened;\n }, []);\n\n return {\n // Original functions\n extractStyles,\n extractFormattingStyles,\n generateCSS,\n getFlattenedStyles,\n getSingleStyles,\n \n \n // New reverse conversion functions\n stylesToHtml,\n multipleStylesToHtml,\n applyStylesToHtml,\n extractAndConvert\n };\n};"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../../src/views/template-editor/utils/style-extractor.ts"],"sourcesContent":["/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n\r\nimport { useCallback, useMemo } from 'react';\r\n\r\n// Enhanced Custom hook for CKEditor style extraction and reverse conversion\r\nexport const useCKEditorStyleExtractor = () => {\r\n // HTML tag to CSS style mappings\r\n const tagStyleMap = useMemo(() => ({\r\n 'i': { fontStyle: 'italic' },\r\n 'em': { fontStyle: 'italic' },\r\n 'b': { fontWeight: 'bold' },\r\n 'strong': { fontWeight: 'bold' },\r\n 'u': { textDecoration: 'underline' },\r\n 's': { textDecoration: 'line-through' },\r\n 'strike': { textDecoration: 'line-through' },\r\n 'del': { textDecoration: 'line-through' },\r\n 'sup': { verticalAlign: 'super', fontSize: 'smaller' },\r\n 'sub': { verticalAlign: 'sub', fontSize: 'smaller' },\r\n 'small': { fontSize: 'smaller' },\r\n 'big': { fontSize: 'larger' },\r\n 'mark': { backgroundColor: 'yellow' },\r\n 'code': { fontFamily: 'monospace' },\r\n 'kbd': { fontFamily: 'monospace', backgroundColor: '#f1f1f1', padding: '2px 4px', borderRadius: '3px' },\r\n 'samp': { fontFamily: 'monospace' },\r\n 'var': { fontStyle: 'italic', fontFamily: 'monospace' }\r\n }), []);\r\n\r\n // Reverse mapping: CSS styles to HTML tags (for reverse conversion)\r\n const styleTagMap = useMemo(() => {\r\n const reverseMap = {};\r\n \r\n // Create reverse mapping with priority for semantic tags\r\n const tagPriority = {\r\n 'fontStyle-italic': 'i',\r\n 'fontWeight-bold': 'b',\r\n 'textDecoration-underline': 'u',\r\n 'textDecoration-line-through': 's',\r\n 'verticalAlign-super': 'sup',\r\n 'verticalAlign-sub': 'sub',\r\n 'fontSize-smaller': 'small',\r\n 'fontSize-larger': 'big',\r\n 'backgroundColor-yellow': 'mark'\r\n };\r\n\r\n Object.entries(tagPriority).forEach(([styleKey, tag]) => {\r\n reverseMap[styleKey] = tag;\r\n });\r\n\r\n return reverseMap;\r\n }, []);\r\n\r\n // CSS property mappings for camelCase conversion\r\n const cssPropertyMap = useMemo(() => ({\r\n 'font-family': 'fontFamily',\r\n 'font-size': 'fontSize',\r\n 'font-weight': 'fontWeight',\r\n 'font-style': 'fontStyle',\r\n 'text-align': 'textAlign',\r\n 'text-decoration': 'textDecoration',\r\n 'text-transform': 'textTransform',\r\n 'line-height': 'lineHeight',\r\n 'letter-spacing': 'letterSpacing',\r\n 'word-spacing': 'wordSpacing',\r\n 'color': 'color',\r\n 'background-color': 'backgroundColor',\r\n 'background-image': 'backgroundImage',\r\n 'background-size': 'backgroundSize',\r\n 'background-position': 'backgroundPosition',\r\n 'background-repeat': 'backgroundRepeat',\r\n 'border': 'border',\r\n 'border-color': 'borderColor',\r\n 'border-width': 'borderWidth',\r\n 'border-style': 'borderStyle',\r\n 'border-radius': 'borderRadius',\r\n 'margin': 'margin',\r\n 'margin-top': 'marginTop',\r\n 'margin-right': 'marginRight',\r\n 'margin-bottom': 'marginBottom',\r\n 'margin-left': 'marginLeft',\r\n 'padding': 'padding',\r\n 'padding-top': 'paddingTop',\r\n 'padding-right': 'paddingRight',\r\n 'padding-bottom': 'paddingBottom',\r\n 'padding-left': 'paddingLeft',\r\n 'width': 'width',\r\n 'height': 'height',\r\n 'max-width': 'maxWidth',\r\n 'max-height': 'maxHeight',\r\n 'min-width': 'minWidth',\r\n 'min-height': 'minHeight',\r\n 'display': 'display',\r\n 'position': 'position',\r\n 'top': 'top',\r\n 'right': 'right',\r\n 'bottom': 'bottom',\r\n 'left': 'left',\r\n 'float': 'float',\r\n 'clear': 'clear',\r\n 'overflow': 'overflow',\r\n 'opacity': 'opacity',\r\n 'z-index': 'zIndex',\r\n 'box-shadow': 'boxShadow',\r\n 'text-shadow': 'textShadow',\r\n 'vertical-align': 'verticalAlign'\r\n }), []);\r\n\r\n // Convert CSS property to camelCase\r\n const toCamelCase = useCallback((property) => {\r\n return cssPropertyMap[property] || \r\n property.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());\r\n }, [cssPropertyMap]);\r\n\r\n // Convert camelCase to kebab-case\r\n const toKebabCase = useCallback((property) => {\r\n return property.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n }, []);\r\n\r\n // Parse inline styles from element.style object\r\n const parseInlineStyles = useCallback((styleDeclaration) => {\r\n const styles = {};\r\n\r\n for (let i = 0; i < styleDeclaration.length; i++) {\r\n const property = styleDeclaration[i];\r\n const value = styleDeclaration.getPropertyValue(property);\r\n \r\n if (value) {\r\n const camelCaseProperty = toCamelCase(property);\r\n styles[camelCaseProperty] = value.trim();\r\n }\r\n }\r\n\r\n return styles;\r\n }, [toCamelCase]);\r\n\r\n // Extract styles based on semantic HTML tags\r\n const extractTagStyles = useCallback((element) => {\r\n const tagName = element.tagName.toLowerCase();\r\n return tagStyleMap[tagName] || {};\r\n }, [tagStyleMap]);\r\n\r\n // Extract nested/inherited styles from parent elements\r\n const extractNestedStyles = useCallback((element) => {\r\n const nestedStyles = {};\r\n let currentElement = element.parentElement;\r\n\r\n // Traverse up the DOM tree to collect inherited styles\r\n while (currentElement && currentElement.tagName !== 'BODY') {\r\n const tagName = currentElement.tagName.toLowerCase();\r\n \r\n // Add tag-based styles from parents\r\n if (tagStyleMap[tagName]) {\r\n Object.entries(tagStyleMap[tagName]).forEach(([prop, value]) => {\r\n // Only add if not already defined (child takes precedence)\r\n if (!nestedStyles[prop]) {\r\n nestedStyles[prop] = value;\r\n }\r\n });\r\n }\r\n\r\n // Add inline styles from parents that can be inherited\r\n if (currentElement.style.length > 0) {\r\n const inheritableProps = ['color', 'fontFamily', 'fontSize', 'lineHeight', 'textAlign'];\r\n const parentStyles = parseInlineStyles(currentElement.style);\r\n \r\n inheritableProps.forEach(prop => {\r\n if (parentStyles[prop] && !nestedStyles[prop]) {\r\n nestedStyles[prop] = parentStyles[prop];\r\n }\r\n });\r\n }\r\n\r\n currentElement = currentElement.parentElement;\r\n }\r\n\r\n return nestedStyles;\r\n }, [tagStyleMap, parseInlineStyles]);\r\n\r\n // Extract image-specific styles\r\n const extractImageStyles = useCallback((imgElement, styleData) => {\r\n const imageStyles = {};\r\n\r\n if (imgElement.width) imageStyles.width = `${imgElement.width}px`;\r\n if (imgElement.height) imageStyles.height = `${imgElement.height}px`;\r\n if (imgElement.getAttribute('align')) {\r\n imageStyles.textAlign = imgElement.getAttribute('align');\r\n }\r\n\r\n // Merge with existing styles\r\n Object.assign(styleData.styles, imageStyles);\r\n \r\n // Add image-specific metadata\r\n styleData.src = imgElement.src;\r\n styleData.alt = imgElement.alt;\r\n }, []);\r\n\r\n // Main extraction function\r\n const extractStyles = useCallback((editorContent, options = {}) => {\r\n const {\r\n includeInlineStyles = true,\r\n includeTagStyles = true,\r\n includeComputedStyles = false,\r\n groupByElement = false,\r\n filterEmptyStyles = true,\r\n mergeNestedStyles = true\r\n } = options;\r\n\r\n // Create a temporary DOM element to parse the content\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = editorContent;\r\n\r\n const results = [];\r\n const elements = tempDiv.querySelectorAll('*');\r\n\r\n elements.forEach((element, index) => {\r\n const styleData = {\r\n elementType: element.tagName.toLowerCase(),\r\n elementIndex: index,\r\n className: element.className || null,\r\n id: element.id || null,\r\n styles: {},\r\n textContent: element.textContent?.trim() || null\r\n };\r\n\r\n // Extract inline styles\r\n if (includeInlineStyles && element.style.length > 0) {\r\n styleData.styles = { ...styleData.styles, ...parseInlineStyles(element.style) };\r\n }\r\n\r\n // Extract semantic tag styles (like <i>, <b>, etc.)\r\n if (includeTagStyles) {\r\n const tagStyles = extractTagStyles(element);\r\n styleData.styles = { ...styleData.styles, ...tagStyles };\r\n }\r\n\r\n // Extract nested styling context\r\n if (mergeNestedStyles) {\r\n const nestedStyles = extractNestedStyles(element);\r\n styleData.styles = { ...styleData.styles, ...nestedStyles };\r\n styleData.inheritedStyles = nestedStyles;\r\n }\r\n\r\n // Handle special cases for images\r\n if (element.tagName.toLowerCase() === 'img') {\r\n extractImageStyles(element, styleData);\r\n }\r\n\r\n // Filter empty styles if requested\r\n if (filterEmptyStyles && Object.keys(styleData.styles).length === 0 && !styleData.textContent) {\r\n return;\r\n }\r\n\r\n results.push(styleData);\r\n });\r\n\r\n return results;\r\n }, [parseInlineStyles, extractTagStyles, extractNestedStyles, extractImageStyles]);\r\n\r\n // Extract styles specifically for formatting tags\r\n const extractFormattingStyles = useCallback((editorContent) => {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = editorContent;\r\n \r\n const formattingTags = ['i', 'em', 'b', 'strong', 'u', 's', 'strike', 'del', 'sup', 'sub'];\r\n const formattingStyles = {};\r\n\r\n formattingTags.forEach(tag => {\r\n const elements = tempDiv.querySelectorAll(tag);\r\n elements.forEach((element, index) => {\r\n const key = `${tag}_${index}`;\r\n formattingStyles[key] = {\r\n ...tagStyleMap[tag],\r\n textContent: element.textContent,\r\n };\r\n });\r\n });\r\n\r\n return formattingStyles;\r\n }, [tagStyleMap]);\r\n\r\n // NEW: Convert styles object to HTML with semantic tags\r\n const stylesToHtml = useCallback((text, styles = {}, options = {}) => {\r\n const {\r\n preferSemanticTags = true,\r\n wrapInParagraph = true,\r\n preserveWhitespace = true\r\n } = options;\r\n\r\n if (!text || typeof text !== 'string') {\r\n return '';\r\n }\r\n\r\n let wrappedText = text;\r\n const inlineStyles = {};\r\n\r\n // Process each style property\r\n Object.entries(styles).forEach(([property, value]) => {\r\n const styleKey = `${property}-${value}`;\r\n \r\n // Check if this style can be converted to a semantic tag\r\n if (preferSemanticTags && styleTagMap[styleKey]) {\r\n const tag = styleTagMap[styleKey];\r\n wrappedText = `<${tag}>${wrappedText}</${tag}>`;\r\n } else {\r\n // Add to inline styles for non-semantic styles\r\n inlineStyles[property] = value;\r\n }\r\n });\r\n\r\n // Apply remaining inline styles\r\n if (Object.keys(inlineStyles).length > 0) {\r\n const styleAttr = Object.entries(inlineStyles)\r\n .map(([prop, val]) => `${toKebabCase(prop)}: ${val}`)\r\n .join('; ');\r\n \r\n wrappedText = `<span style=\"${styleAttr}\">${wrappedText}</span>`;\r\n }\r\n\r\n // Wrap in paragraph if requested\r\n if (wrapInParagraph) {\r\n wrappedText = `<p>${wrappedText}</p>`;\r\n }\r\n\r\n return wrappedText;\r\n }, [styleTagMap, toKebabCase]);\r\n\r\n // NEW: Convert multiple styled text segments to HTML\r\n const multipleStylesToHtml = useCallback((segments, options = {}) => {\r\n const {\r\n wrapInContainer = true,\r\n containerTag = 'div',\r\n separateElements = false\r\n } = options;\r\n\r\n if (!Array.isArray(segments)) {\r\n return '';\r\n }\r\n\r\n const htmlSegments = segments.map(segment => {\r\n const { text, styles = {}, wrapInParagraph = false } = segment;\r\n return stylesToHtml(text, styles, { ...options, wrapInParagraph });\r\n });\r\n\r\n let result = separateElements ? htmlSegments.join('\\n') : htmlSegments.join(' ');\r\n\r\n if (wrapInContainer) {\r\n result = `<${containerTag}>${result}</${containerTag}>`;\r\n }\r\n\r\n return result;\r\n }, [stylesToHtml]);\r\n\r\n // NEW: Apply styles to existing HTML content\r\n const applyStylesToHtml = useCallback((htmlContent, styles = {}, targetSelector = '*') => {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = htmlContent;\r\n\r\n const targetElements = targetSelector === '*' \r\n ? tempDiv.querySelectorAll('*') \r\n : tempDiv.querySelectorAll(targetSelector);\r\n\r\n targetElements.forEach(element => {\r\n Object.entries(styles).forEach(([property, value]) => {\r\n const styleKey = `${property}-${value}`;\r\n \r\n // Check if this style should be converted to semantic tag\r\n if (styleTagMap[styleKey]) {\r\n const tag = styleTagMap[styleKey];\r\n const wrapper = document.createElement(tag);\r\n \r\n // Move the element's content to the wrapper\r\n while (element.firstChild) {\r\n wrapper.appendChild(element.firstChild);\r\n }\r\n \r\n element.appendChild(wrapper);\r\n } else {\r\n // Apply as inline style\r\n const kebabProperty = toKebabCase(property);\r\n element.style[kebabProperty] = value;\r\n }\r\n });\r\n });\r\n\r\n return tempDiv.innerHTML;\r\n }, [styleTagMap, toKebabCase]);\r\n\r\n // NEW: Extract and convert - one-step process\r\n const extractAndConvert = useCallback((editorContent, targetStyles = {}) => {\r\n const extracted = extractStyles(editorContent);\r\n const converted = {};\r\n\r\n extracted.forEach(item => {\r\n const key = item.className || item.id || `${item.elementType}_${item.elementIndex}`;\r\n const mergedStyles = { ...item.styles, ...targetStyles };\r\n \r\n if (item.textContent) {\r\n converted[key] = stylesToHtml(item.textContent, mergedStyles, { wrapInParagraph: false });\r\n }\r\n });\r\n\r\n return converted;\r\n }, [extractStyles, stylesToHtml]);\r\n\r\n // Generate CSS string from extracted styles\r\n const generateCSS = useCallback((extractedStyles) => {\r\n let css = '';\r\n \r\n extractedStyles.forEach((item, index) => {\r\n const selector = item.className \r\n ? `.${item.className}` \r\n : item.id \r\n ? `#${item.id}` \r\n : `${item.elementType}-${index}`;\r\n\r\n const styleRules = Object.entries(item.styles)\r\n .map(([prop, value]) => ` ${toKebabCase(prop)}: ${value};`)\r\n .join('\\n');\r\n\r\n if (styleRules) {\r\n css += `${selector} {\\n${styleRules}\\n}\\n\\n`;\r\n }\r\n });\r\n\r\n return css;\r\n }, [toKebabCase]);\r\n\r\n // Get flattened styles object\r\n const getFlattenedStyles = useCallback((extractedStyles) => {\r\n const flattened = {};\r\n \r\n extractedStyles.forEach((item, index) => {\r\n const prefix = item.className || item.id || `${item.elementType}_${index}`;\r\n Object.entries(item.styles).forEach(([prop, value]) => {\r\n flattened[`${prefix}_${prop}`] = value;\r\n });\r\n });\r\n\r\n return flattened;\r\n }, []);\r\n\r\n const getSingleStyles = useCallback((extractedStyles) => {\r\n const flattened = {};\r\n \r\n extractedStyles.forEach((item, index) => {\r\n // const prefix = item.className || item.id || `${item.elementType}_${index}`;\r\n Object.entries(item.styles).forEach(([prop, value]) => {\r\n flattened[prop] = value;\r\n });\r\n });\r\n\r\n return flattened;\r\n }, []);\r\n\r\n return {\r\n // Original functions\r\n extractStyles,\r\n extractFormattingStyles,\r\n generateCSS,\r\n getFlattenedStyles,\r\n getSingleStyles,\r\n \r\n \r\n // New reverse conversion functions\r\n stylesToHtml,\r\n multipleStylesToHtml,\r\n applyStylesToHtml,\r\n extractAndConvert\r\n };\r\n};"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/views/template-editor/utils/style-extractor.ts"],"sourcesContent":["/* eslint-disable unused-imports/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport { useCallback, useMemo } from 'react';\n\n// Enhanced Custom hook for CKEditor style extraction and reverse conversion\nexport const useCKEditorStyleExtractor = () => {\n // HTML tag to CSS style mappings\n const tagStyleMap = useMemo(() => ({\n 'i': { fontStyle: 'italic' },\n 'em': { fontStyle: 'italic' },\n 'b': { fontWeight: 'bold' },\n 'strong': { fontWeight: 'bold' },\n 'u': { textDecoration: 'underline' },\n 's': { textDecoration: 'line-through' },\n 'strike': { textDecoration: 'line-through' },\n 'del': { textDecoration: 'line-through' },\n 'sup': { verticalAlign: 'super', fontSize: 'smaller' },\n 'sub': { verticalAlign: 'sub', fontSize: 'smaller' },\n 'small': { fontSize: 'smaller' },\n 'big': { fontSize: 'larger' },\n 'mark': { backgroundColor: 'yellow' },\n 'code': { fontFamily: 'monospace' },\n 'kbd': { fontFamily: 'monospace', backgroundColor: '#f1f1f1', padding: '2px 4px', borderRadius: '3px' },\n 'samp': { fontFamily: 'monospace' },\n 'var': { fontStyle: 'italic', fontFamily: 'monospace' }\n }), []);\n\n // Reverse mapping: CSS styles to HTML tags (for reverse conversion)\n const styleTagMap = useMemo(() => {\n const reverseMap = {};\n \n // Create reverse mapping with priority for semantic tags\n const tagPriority = {\n 'fontStyle-italic': 'i',\n 'fontWeight-bold': 'b',\n 'textDecoration-underline': 'u',\n 'textDecoration-line-through': 's',\n 'verticalAlign-super': 'sup',\n 'verticalAlign-sub': 'sub',\n 'fontSize-smaller': 'small',\n 'fontSize-larger': 'big',\n 'backgroundColor-yellow': 'mark'\n };\n\n Object.entries(tagPriority).forEach(([styleKey, tag]) => {\n reverseMap[styleKey] = tag;\n });\n\n return reverseMap;\n }, []);\n\n // CSS property mappings for camelCase conversion\n const cssPropertyMap = useMemo(() => ({\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-weight': 'fontWeight',\n 'font-style': 'fontStyle',\n 'text-align': 'textAlign',\n 'text-decoration': 'textDecoration',\n 'text-transform': 'textTransform',\n 'line-height': 'lineHeight',\n 'letter-spacing': 'letterSpacing',\n 'word-spacing': 'wordSpacing',\n 'color': 'color',\n 'background-color': 'backgroundColor',\n 'background-image': 'backgroundImage',\n 'background-size': 'backgroundSize',\n 'background-position': 'backgroundPosition',\n 'background-repeat': 'backgroundRepeat',\n 'border': 'border',\n 'border-color': 'borderColor',\n 'border-width': 'borderWidth',\n 'border-style': 'borderStyle',\n 'border-radius': 'borderRadius',\n 'margin': 'margin',\n 'margin-top': 'marginTop',\n 'margin-right': 'marginRight',\n 'margin-bottom': 'marginBottom',\n 'margin-left': 'marginLeft',\n 'padding': 'padding',\n 'padding-top': 'paddingTop',\n 'padding-right': 'paddingRight',\n 'padding-bottom': 'paddingBottom',\n 'padding-left': 'paddingLeft',\n 'width': 'width',\n 'height': 'height',\n 'max-width': 'maxWidth',\n 'max-height': 'maxHeight',\n 'min-width': 'minWidth',\n 'min-height': 'minHeight',\n 'display': 'display',\n 'position': 'position',\n 'top': 'top',\n 'right': 'right',\n 'bottom': 'bottom',\n 'left': 'left',\n 'float': 'float',\n 'clear': 'clear',\n 'overflow': 'overflow',\n 'opacity': 'opacity',\n 'z-index': 'zIndex',\n 'box-shadow': 'boxShadow',\n 'text-shadow': 'textShadow',\n 'vertical-align': 'verticalAlign'\n }), []);\n\n // Convert CSS property to camelCase\n const toCamelCase = useCallback((property) => {\n return cssPropertyMap[property] || \n property.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());\n }, [cssPropertyMap]);\n\n // Convert camelCase to kebab-case\n const toKebabCase = useCallback((property) => {\n return property.replace(/([A-Z])/g, '-$1').toLowerCase();\n }, []);\n\n // Parse inline styles from element.style object\n const parseInlineStyles = useCallback((styleDeclaration) => {\n const styles = {};\n\n for (let i = 0; i < styleDeclaration.length; i++) {\n const property = styleDeclaration[i];\n const value = styleDeclaration.getPropertyValue(property);\n \n if (value) {\n const camelCaseProperty = toCamelCase(property);\n styles[camelCaseProperty] = value.trim();\n }\n }\n\n return styles;\n }, [toCamelCase]);\n\n // Extract styles based on semantic HTML tags\n const extractTagStyles = useCallback((element) => {\n const tagName = element.tagName.toLowerCase();\n return tagStyleMap[tagName] || {};\n }, [tagStyleMap]);\n\n // Extract nested/inherited styles from parent elements\n const extractNestedStyles = useCallback((element) => {\n const nestedStyles = {};\n let currentElement = element.parentElement;\n\n // Traverse up the DOM tree to collect inherited styles\n while (currentElement && currentElement.tagName !== 'BODY') {\n const tagName = currentElement.tagName.toLowerCase();\n \n // Add tag-based styles from parents\n if (tagStyleMap[tagName]) {\n Object.entries(tagStyleMap[tagName]).forEach(([prop, value]) => {\n // Only add if not already defined (child takes precedence)\n if (!nestedStyles[prop]) {\n nestedStyles[prop] = value;\n }\n });\n }\n\n // Add inline styles from parents that can be inherited\n if (currentElement.style.length > 0) {\n const inheritableProps = ['color', 'fontFamily', 'fontSize', 'lineHeight', 'textAlign'];\n const parentStyles = parseInlineStyles(currentElement.style);\n \n inheritableProps.forEach(prop => {\n if (parentStyles[prop] && !nestedStyles[prop]) {\n nestedStyles[prop] = parentStyles[prop];\n }\n });\n }\n\n currentElement = currentElement.parentElement;\n }\n\n return nestedStyles;\n }, [tagStyleMap, parseInlineStyles]);\n\n // Extract image-specific styles\n const extractImageStyles = useCallback((imgElement, styleData) => {\n const imageStyles = {};\n\n if (imgElement.width) imageStyles.width = `${imgElement.width}px`;\n if (imgElement.height) imageStyles.height = `${imgElement.height}px`;\n if (imgElement.getAttribute('align')) {\n imageStyles.textAlign = imgElement.getAttribute('align');\n }\n\n // Merge with existing styles\n Object.assign(styleData.styles, imageStyles);\n \n // Add image-specific metadata\n styleData.src = imgElement.src;\n styleData.alt = imgElement.alt;\n }, []);\n\n // Main extraction function\n const extractStyles = useCallback((editorContent, options = {}) => {\n const {\n includeInlineStyles = true,\n includeTagStyles = true,\n includeComputedStyles = false,\n groupByElement = false,\n filterEmptyStyles = true,\n mergeNestedStyles = true\n } = options;\n\n // Create a temporary DOM element to parse the content\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = editorContent;\n\n const results = [];\n const elements = tempDiv.querySelectorAll('*');\n\n elements.forEach((element, index) => {\n const styleData = {\n elementType: element.tagName.toLowerCase(),\n elementIndex: index,\n className: element.className || null,\n id: element.id || null,\n styles: {},\n textContent: element.textContent?.trim() || null\n };\n\n // Extract inline styles\n if (includeInlineStyles && element.style.length > 0) {\n styleData.styles = { ...styleData.styles, ...parseInlineStyles(element.style) };\n }\n\n // Extract semantic tag styles (like <i>, <b>, etc.)\n if (includeTagStyles) {\n const tagStyles = extractTagStyles(element);\n styleData.styles = { ...styleData.styles, ...tagStyles };\n }\n\n // Extract nested styling context\n if (mergeNestedStyles) {\n const nestedStyles = extractNestedStyles(element);\n styleData.styles = { ...styleData.styles, ...nestedStyles };\n styleData.inheritedStyles = nestedStyles;\n }\n\n // Handle special cases for images\n if (element.tagName.toLowerCase() === 'img') {\n extractImageStyles(element, styleData);\n }\n\n // Filter empty styles if requested\n if (filterEmptyStyles && Object.keys(styleData.styles).length === 0 && !styleData.textContent) {\n return;\n }\n\n results.push(styleData);\n });\n\n return results;\n }, [parseInlineStyles, extractTagStyles, extractNestedStyles, extractImageStyles]);\n\n // Extract styles specifically for formatting tags\n const extractFormattingStyles = useCallback((editorContent) => {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = editorContent;\n \n const formattingTags = ['i', 'em', 'b', 'strong', 'u', 's', 'strike', 'del', 'sup', 'sub'];\n const formattingStyles = {};\n\n formattingTags.forEach(tag => {\n const elements = tempDiv.querySelectorAll(tag);\n elements.forEach((element, index) => {\n const key = `${tag}_${index}`;\n formattingStyles[key] = {\n ...tagStyleMap[tag],\n textContent: element.textContent,\n };\n });\n });\n\n return formattingStyles;\n }, [tagStyleMap]);\n\n // NEW: Convert styles object to HTML with semantic tags\n const stylesToHtml = useCallback((text, styles = {}, options = {}) => {\n const {\n preferSemanticTags = true,\n wrapInParagraph = true,\n preserveWhitespace = true\n } = options;\n\n if (!text || typeof text !== 'string') {\n return '';\n }\n\n let wrappedText = text;\n const inlineStyles = {};\n\n // Process each style property\n Object.entries(styles).forEach(([property, value]) => {\n const styleKey = `${property}-${value}`;\n \n // Check if this style can be converted to a semantic tag\n if (preferSemanticTags && styleTagMap[styleKey]) {\n const tag = styleTagMap[styleKey];\n wrappedText = `<${tag}>${wrappedText}</${tag}>`;\n } else {\n // Add to inline styles for non-semantic styles\n inlineStyles[property] = value;\n }\n });\n\n // Apply remaining inline styles\n if (Object.keys(inlineStyles).length > 0) {\n const styleAttr = Object.entries(inlineStyles)\n .map(([prop, val]) => `${toKebabCase(prop)}: ${val}`)\n .join('; ');\n \n wrappedText = `<span style=\"${styleAttr}\">${wrappedText}</span>`;\n }\n\n // Wrap in paragraph if requested\n if (wrapInParagraph) {\n wrappedText = `<p>${wrappedText}</p>`;\n }\n\n return wrappedText;\n }, [styleTagMap, toKebabCase]);\n\n // NEW: Convert multiple styled text segments to HTML\n const multipleStylesToHtml = useCallback((segments, options = {}) => {\n const {\n wrapInContainer = true,\n containerTag = 'div',\n separateElements = false\n } = options;\n\n if (!Array.isArray(segments)) {\n return '';\n }\n\n const htmlSegments = segments.map(segment => {\n const { text, styles = {}, wrapInParagraph = false } = segment;\n return stylesToHtml(text, styles, { ...options, wrapInParagraph });\n });\n\n let result = separateElements ? htmlSegments.join('\\n') : htmlSegments.join(' ');\n\n if (wrapInContainer) {\n result = `<${containerTag}>${result}</${containerTag}>`;\n }\n\n return result;\n }, [stylesToHtml]);\n\n // NEW: Apply styles to existing HTML content\n const applyStylesToHtml = useCallback((htmlContent, styles = {}, targetSelector = '*') => {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = htmlContent;\n\n const targetElements = targetSelector === '*' \n ? tempDiv.querySelectorAll('*') \n : tempDiv.querySelectorAll(targetSelector);\n\n targetElements.forEach(element => {\n Object.entries(styles).forEach(([property, value]) => {\n const styleKey = `${property}-${value}`;\n \n // Check if this style should be converted to semantic tag\n if (styleTagMap[styleKey]) {\n const tag = styleTagMap[styleKey];\n const wrapper = document.createElement(tag);\n \n // Move the element's content to the wrapper\n while (element.firstChild) {\n wrapper.appendChild(element.firstChild);\n }\n \n element.appendChild(wrapper);\n } else {\n // Apply as inline style\n const kebabProperty = toKebabCase(property);\n element.style[kebabProperty] = value;\n }\n });\n });\n\n return tempDiv.innerHTML;\n }, [styleTagMap, toKebabCase]);\n\n // NEW: Extract and convert - one-step process\n const extractAndConvert = useCallback((editorContent, targetStyles = {}) => {\n const extracted = extractStyles(editorContent);\n const converted = {};\n\n extracted.forEach(item => {\n const key = item.className || item.id || `${item.elementType}_${item.elementIndex}`;\n const mergedStyles = { ...item.styles, ...targetStyles };\n \n if (item.textContent) {\n converted[key] = stylesToHtml(item.textContent, mergedStyles, { wrapInParagraph: false });\n }\n });\n\n return converted;\n }, [extractStyles, stylesToHtml]);\n\n // Generate CSS string from extracted styles\n const generateCSS = useCallback((extractedStyles) => {\n let css = '';\n \n extractedStyles.forEach((item, index) => {\n const selector = item.className \n ? `.${item.className}` \n : item.id \n ? `#${item.id}` \n : `${item.elementType}-${index}`;\n\n const styleRules = Object.entries(item.styles)\n .map(([prop, value]) => ` ${toKebabCase(prop)}: ${value};`)\n .join('\\n');\n\n if (styleRules) {\n css += `${selector} {\\n${styleRules}\\n}\\n\\n`;\n }\n });\n\n return css;\n }, [toKebabCase]);\n\n // Get flattened styles object\n const getFlattenedStyles = useCallback((extractedStyles) => {\n const flattened = {};\n \n extractedStyles.forEach((item, index) => {\n const prefix = item.className || item.id || `${item.elementType}_${index}`;\n Object.entries(item.styles).forEach(([prop, value]) => {\n flattened[`${prefix}_${prop}`] = value;\n });\n });\n\n return flattened;\n }, []);\n\n const getSingleStyles = useCallback((extractedStyles) => {\n const flattened = {};\n \n extractedStyles.forEach((item, index) => {\n // const prefix = item.className || item.id || `${item.elementType}_${index}`;\n Object.entries(item.styles).forEach(([prop, value]) => {\n flattened[prop] = value;\n });\n });\n\n return flattened;\n }, []);\n\n return {\n // Original functions\n extractStyles,\n extractFormattingStyles,\n generateCSS,\n getFlattenedStyles,\n getSingleStyles,\n \n \n // New reverse conversion functions\n stylesToHtml,\n multipleStylesToHtml,\n applyStylesToHtml,\n extractAndConvert\n };\n};"],"names":["tagStyleMap","useMemo","i","fontStyle","em","b","fontWeight","strong","u","textDecoration","s","strike","del","sup","verticalAlign","fontSize","sub","small","big","mark","backgroundColor","code","fontFamily","kbd","padding","borderRadius","samp","var","styleTagMap","reverseMap","Object","entries","forEach","styleKey","tag","cssPropertyMap","color","border","margin","width","height","display","position","top","right","bottom","left","float","clear","overflow","opacity","toCamelCase","useCallback","property","replace","match","letter","toUpperCase","toKebabCase","toLowerCase","parseInlineStyles","styleDeclaration","styles","length","value","getPropertyValue","trim","extractTagStyles","element","tagName","extractNestedStyles","nestedStyles","currentElement","parentElement","prop","style","inheritableProps","parentStyles","extractImageStyles","imgElement","styleData","imageStyles","getAttribute","textAlign","assign","src","alt","extractStyles","editorContent","options","includeInlineStyles","includeTagStyles","filterEmptyStyles","mergeNestedStyles","tempDiv","document","createElement","innerHTML","results","querySelectorAll","index","elementType","elementIndex","className","id","textContent","_a","tagStyles","inheritedStyles","keys","push","extractFormattingStyles","formattingStyles","stylesToHtml","text","preferSemanticTags","wrapInParagraph","wrappedText","inlineStyles","styleAttr","map","val","join","multipleStylesToHtml","segments","wrapInContainer","containerTag","separateElements","Array","isArray","htmlSegments","segment","result","applyStylesToHtml","htmlContent","targetSelector","wrapper","firstChild","appendChild","kebabProperty","extractAndConvert","targetStyles","extracted","converted","item","key","mergedStyles","generateCSS","extractedStyles","css","selector","styleRules","getFlattenedStyles","flattened","prefix","getSingleStyles"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/views/template-editor/utils/style-extractor.ts"],"sourcesContent":["/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n\r\nimport { useCallback, useMemo } from 'react';\r\n\r\n// Enhanced Custom hook for CKEditor style extraction and reverse conversion\r\nexport const useCKEditorStyleExtractor = () => {\r\n // HTML tag to CSS style mappings\r\n const tagStyleMap = useMemo(() => ({\r\n 'i': { fontStyle: 'italic' },\r\n 'em': { fontStyle: 'italic' },\r\n 'b': { fontWeight: 'bold' },\r\n 'strong': { fontWeight: 'bold' },\r\n 'u': { textDecoration: 'underline' },\r\n 's': { textDecoration: 'line-through' },\r\n 'strike': { textDecoration: 'line-through' },\r\n 'del': { textDecoration: 'line-through' },\r\n 'sup': { verticalAlign: 'super', fontSize: 'smaller' },\r\n 'sub': { verticalAlign: 'sub', fontSize: 'smaller' },\r\n 'small': { fontSize: 'smaller' },\r\n 'big': { fontSize: 'larger' },\r\n 'mark': { backgroundColor: 'yellow' },\r\n 'code': { fontFamily: 'monospace' },\r\n 'kbd': { fontFamily: 'monospace', backgroundColor: '#f1f1f1', padding: '2px 4px', borderRadius: '3px' },\r\n 'samp': { fontFamily: 'monospace' },\r\n 'var': { fontStyle: 'italic', fontFamily: 'monospace' }\r\n }), []);\r\n\r\n // Reverse mapping: CSS styles to HTML tags (for reverse conversion)\r\n const styleTagMap = useMemo(() => {\r\n const reverseMap = {};\r\n \r\n // Create reverse mapping with priority for semantic tags\r\n const tagPriority = {\r\n 'fontStyle-italic': 'i',\r\n 'fontWeight-bold': 'b',\r\n 'textDecoration-underline': 'u',\r\n 'textDecoration-line-through': 's',\r\n 'verticalAlign-super': 'sup',\r\n 'verticalAlign-sub': 'sub',\r\n 'fontSize-smaller': 'small',\r\n 'fontSize-larger': 'big',\r\n 'backgroundColor-yellow': 'mark'\r\n };\r\n\r\n Object.entries(tagPriority).forEach(([styleKey, tag]) => {\r\n reverseMap[styleKey] = tag;\r\n });\r\n\r\n return reverseMap;\r\n }, []);\r\n\r\n // CSS property mappings for camelCase conversion\r\n const cssPropertyMap = useMemo(() => ({\r\n 'font-family': 'fontFamily',\r\n 'font-size': 'fontSize',\r\n 'font-weight': 'fontWeight',\r\n 'font-style': 'fontStyle',\r\n 'text-align': 'textAlign',\r\n 'text-decoration': 'textDecoration',\r\n 'text-transform': 'textTransform',\r\n 'line-height': 'lineHeight',\r\n 'letter-spacing': 'letterSpacing',\r\n 'word-spacing': 'wordSpacing',\r\n 'color': 'color',\r\n 'background-color': 'backgroundColor',\r\n 'background-image': 'backgroundImage',\r\n 'background-size': 'backgroundSize',\r\n 'background-position': 'backgroundPosition',\r\n 'background-repeat': 'backgroundRepeat',\r\n 'border': 'border',\r\n 'border-color': 'borderColor',\r\n 'border-width': 'borderWidth',\r\n 'border-style': 'borderStyle',\r\n 'border-radius': 'borderRadius',\r\n 'margin': 'margin',\r\n 'margin-top': 'marginTop',\r\n 'margin-right': 'marginRight',\r\n 'margin-bottom': 'marginBottom',\r\n 'margin-left': 'marginLeft',\r\n 'padding': 'padding',\r\n 'padding-top': 'paddingTop',\r\n 'padding-right': 'paddingRight',\r\n 'padding-bottom': 'paddingBottom',\r\n 'padding-left': 'paddingLeft',\r\n 'width': 'width',\r\n 'height': 'height',\r\n 'max-width': 'maxWidth',\r\n 'max-height': 'maxHeight',\r\n 'min-width': 'minWidth',\r\n 'min-height': 'minHeight',\r\n 'display': 'display',\r\n 'position': 'position',\r\n 'top': 'top',\r\n 'right': 'right',\r\n 'bottom': 'bottom',\r\n 'left': 'left',\r\n 'float': 'float',\r\n 'clear': 'clear',\r\n 'overflow': 'overflow',\r\n 'opacity': 'opacity',\r\n 'z-index': 'zIndex',\r\n 'box-shadow': 'boxShadow',\r\n 'text-shadow': 'textShadow',\r\n 'vertical-align': 'verticalAlign'\r\n }), []);\r\n\r\n // Convert CSS property to camelCase\r\n const toCamelCase = useCallback((property) => {\r\n return cssPropertyMap[property] || \r\n property.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());\r\n }, [cssPropertyMap]);\r\n\r\n // Convert camelCase to kebab-case\r\n const toKebabCase = useCallback((property) => {\r\n return property.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n }, []);\r\n\r\n // Parse inline styles from element.style object\r\n const parseInlineStyles = useCallback((styleDeclaration) => {\r\n const styles = {};\r\n\r\n for (let i = 0; i < styleDeclaration.length; i++) {\r\n const property = styleDeclaration[i];\r\n const value = styleDeclaration.getPropertyValue(property);\r\n \r\n if (value) {\r\n const camelCaseProperty = toCamelCase(property);\r\n styles[camelCaseProperty] = value.trim();\r\n }\r\n }\r\n\r\n return styles;\r\n }, [toCamelCase]);\r\n\r\n // Extract styles based on semantic HTML tags\r\n const extractTagStyles = useCallback((element) => {\r\n const tagName = element.tagName.toLowerCase();\r\n return tagStyleMap[tagName] || {};\r\n }, [tagStyleMap]);\r\n\r\n // Extract nested/inherited styles from parent elements\r\n const extractNestedStyles = useCallback((element) => {\r\n const nestedStyles = {};\r\n let currentElement = element.parentElement;\r\n\r\n // Traverse up the DOM tree to collect inherited styles\r\n while (currentElement && currentElement.tagName !== 'BODY') {\r\n const tagName = currentElement.tagName.toLowerCase();\r\n \r\n // Add tag-based styles from parents\r\n if (tagStyleMap[tagName]) {\r\n Object.entries(tagStyleMap[tagName]).forEach(([prop, value]) => {\r\n // Only add if not already defined (child takes precedence)\r\n if (!nestedStyles[prop]) {\r\n nestedStyles[prop] = value;\r\n }\r\n });\r\n }\r\n\r\n // Add inline styles from parents that can be inherited\r\n if (currentElement.style.length > 0) {\r\n const inheritableProps = ['color', 'fontFamily', 'fontSize', 'lineHeight', 'textAlign'];\r\n const parentStyles = parseInlineStyles(currentElement.style);\r\n \r\n inheritableProps.forEach(prop => {\r\n if (parentStyles[prop] && !nestedStyles[prop]) {\r\n nestedStyles[prop] = parentStyles[prop];\r\n }\r\n });\r\n }\r\n\r\n currentElement = currentElement.parentElement;\r\n }\r\n\r\n return nestedStyles;\r\n }, [tagStyleMap, parseInlineStyles]);\r\n\r\n // Extract image-specific styles\r\n const extractImageStyles = useCallback((imgElement, styleData) => {\r\n const imageStyles = {};\r\n\r\n if (imgElement.width) imageStyles.width = `${imgElement.width}px`;\r\n if (imgElement.height) imageStyles.height = `${imgElement.height}px`;\r\n if (imgElement.getAttribute('align')) {\r\n imageStyles.textAlign = imgElement.getAttribute('align');\r\n }\r\n\r\n // Merge with existing styles\r\n Object.assign(styleData.styles, imageStyles);\r\n \r\n // Add image-specific metadata\r\n styleData.src = imgElement.src;\r\n styleData.alt = imgElement.alt;\r\n }, []);\r\n\r\n // Main extraction function\r\n const extractStyles = useCallback((editorContent, options = {}) => {\r\n const {\r\n includeInlineStyles = true,\r\n includeTagStyles = true,\r\n includeComputedStyles = false,\r\n groupByElement = false,\r\n filterEmptyStyles = true,\r\n mergeNestedStyles = true\r\n } = options;\r\n\r\n // Create a temporary DOM element to parse the content\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = editorContent;\r\n\r\n const results = [];\r\n const elements = tempDiv.querySelectorAll('*');\r\n\r\n elements.forEach((element, index) => {\r\n const styleData = {\r\n elementType: element.tagName.toLowerCase(),\r\n elementIndex: index,\r\n className: element.className || null,\r\n id: element.id || null,\r\n styles: {},\r\n textContent: element.textContent?.trim() || null\r\n };\r\n\r\n // Extract inline styles\r\n if (includeInlineStyles && element.style.length > 0) {\r\n styleData.styles = { ...styleData.styles, ...parseInlineStyles(element.style) };\r\n }\r\n\r\n // Extract semantic tag styles (like <i>, <b>, etc.)\r\n if (includeTagStyles) {\r\n const tagStyles = extractTagStyles(element);\r\n styleData.styles = { ...styleData.styles, ...tagStyles };\r\n }\r\n\r\n // Extract nested styling context\r\n if (mergeNestedStyles) {\r\n const nestedStyles = extractNestedStyles(element);\r\n styleData.styles = { ...styleData.styles, ...nestedStyles };\r\n styleData.inheritedStyles = nestedStyles;\r\n }\r\n\r\n // Handle special cases for images\r\n if (element.tagName.toLowerCase() === 'img') {\r\n extractImageStyles(element, styleData);\r\n }\r\n\r\n // Filter empty styles if requested\r\n if (filterEmptyStyles && Object.keys(styleData.styles).length === 0 && !styleData.textContent) {\r\n return;\r\n }\r\n\r\n results.push(styleData);\r\n });\r\n\r\n return results;\r\n }, [parseInlineStyles, extractTagStyles, extractNestedStyles, extractImageStyles]);\r\n\r\n // Extract styles specifically for formatting tags\r\n const extractFormattingStyles = useCallback((editorContent) => {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = editorContent;\r\n \r\n const formattingTags = ['i', 'em', 'b', 'strong', 'u', 's', 'strike', 'del', 'sup', 'sub'];\r\n const formattingStyles = {};\r\n\r\n formattingTags.forEach(tag => {\r\n const elements = tempDiv.querySelectorAll(tag);\r\n elements.forEach((element, index) => {\r\n const key = `${tag}_${index}`;\r\n formattingStyles[key] = {\r\n ...tagStyleMap[tag],\r\n textContent: element.textContent,\r\n };\r\n });\r\n });\r\n\r\n return formattingStyles;\r\n }, [tagStyleMap]);\r\n\r\n // NEW: Convert styles object to HTML with semantic tags\r\n const stylesToHtml = useCallback((text, styles = {}, options = {}) => {\r\n const {\r\n preferSemanticTags = true,\r\n wrapInParagraph = true,\r\n preserveWhitespace = true\r\n } = options;\r\n\r\n if (!text || typeof text !== 'string') {\r\n return '';\r\n }\r\n\r\n let wrappedText = text;\r\n const inlineStyles = {};\r\n\r\n // Process each style property\r\n Object.entries(styles).forEach(([property, value]) => {\r\n const styleKey = `${property}-${value}`;\r\n \r\n // Check if this style can be converted to a semantic tag\r\n if (preferSemanticTags && styleTagMap[styleKey]) {\r\n const tag = styleTagMap[styleKey];\r\n wrappedText = `<${tag}>${wrappedText}</${tag}>`;\r\n } else {\r\n // Add to inline styles for non-semantic styles\r\n inlineStyles[property] = value;\r\n }\r\n });\r\n\r\n // Apply remaining inline styles\r\n if (Object.keys(inlineStyles).length > 0) {\r\n const styleAttr = Object.entries(inlineStyles)\r\n .map(([prop, val]) => `${toKebabCase(prop)}: ${val}`)\r\n .join('; ');\r\n \r\n wrappedText = `<span style=\"${styleAttr}\">${wrappedText}</span>`;\r\n }\r\n\r\n // Wrap in paragraph if requested\r\n if (wrapInParagraph) {\r\n wrappedText = `<p>${wrappedText}</p>`;\r\n }\r\n\r\n return wrappedText;\r\n }, [styleTagMap, toKebabCase]);\r\n\r\n // NEW: Convert multiple styled text segments to HTML\r\n const multipleStylesToHtml = useCallback((segments, options = {}) => {\r\n const {\r\n wrapInContainer = true,\r\n containerTag = 'div',\r\n separateElements = false\r\n } = options;\r\n\r\n if (!Array.isArray(segments)) {\r\n return '';\r\n }\r\n\r\n const htmlSegments = segments.map(segment => {\r\n const { text, styles = {}, wrapInParagraph = false } = segment;\r\n return stylesToHtml(text, styles, { ...options, wrapInParagraph });\r\n });\r\n\r\n let result = separateElements ? htmlSegments.join('\\n') : htmlSegments.join(' ');\r\n\r\n if (wrapInContainer) {\r\n result = `<${containerTag}>${result}</${containerTag}>`;\r\n }\r\n\r\n return result;\r\n }, [stylesToHtml]);\r\n\r\n // NEW: Apply styles to existing HTML content\r\n const applyStylesToHtml = useCallback((htmlContent, styles = {}, targetSelector = '*') => {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = htmlContent;\r\n\r\n const targetElements = targetSelector === '*' \r\n ? tempDiv.querySelectorAll('*') \r\n : tempDiv.querySelectorAll(targetSelector);\r\n\r\n targetElements.forEach(element => {\r\n Object.entries(styles).forEach(([property, value]) => {\r\n const styleKey = `${property}-${value}`;\r\n \r\n // Check if this style should be converted to semantic tag\r\n if (styleTagMap[styleKey]) {\r\n const tag = styleTagMap[styleKey];\r\n const wrapper = document.createElement(tag);\r\n \r\n // Move the element's content to the wrapper\r\n while (element.firstChild) {\r\n wrapper.appendChild(element.firstChild);\r\n }\r\n \r\n element.appendChild(wrapper);\r\n } else {\r\n // Apply as inline style\r\n const kebabProperty = toKebabCase(property);\r\n element.style[kebabProperty] = value;\r\n }\r\n });\r\n });\r\n\r\n return tempDiv.innerHTML;\r\n }, [styleTagMap, toKebabCase]);\r\n\r\n // NEW: Extract and convert - one-step process\r\n const extractAndConvert = useCallback((editorContent, targetStyles = {}) => {\r\n const extracted = extractStyles(editorContent);\r\n const converted = {};\r\n\r\n extracted.forEach(item => {\r\n const key = item.className || item.id || `${item.elementType}_${item.elementIndex}`;\r\n const mergedStyles = { ...item.styles, ...targetStyles };\r\n \r\n if (item.textContent) {\r\n converted[key] = stylesToHtml(item.textContent, mergedStyles, { wrapInParagraph: false });\r\n }\r\n });\r\n\r\n return converted;\r\n }, [extractStyles, stylesToHtml]);\r\n\r\n // Generate CSS string from extracted styles\r\n const generateCSS = useCallback((extractedStyles) => {\r\n let css = '';\r\n \r\n extractedStyles.forEach((item, index) => {\r\n const selector = item.className \r\n ? `.${item.className}` \r\n : item.id \r\n ? `#${item.id}` \r\n : `${item.elementType}-${index}`;\r\n\r\n const styleRules = Object.entries(item.styles)\r\n .map(([prop, value]) => ` ${toKebabCase(prop)}: ${value};`)\r\n .join('\\n');\r\n\r\n if (styleRules) {\r\n css += `${selector} {\\n${styleRules}\\n}\\n\\n`;\r\n }\r\n });\r\n\r\n return css;\r\n }, [toKebabCase]);\r\n\r\n // Get flattened styles object\r\n const getFlattenedStyles = useCallback((extractedStyles) => {\r\n const flattened = {};\r\n \r\n extractedStyles.forEach((item, index) => {\r\n const prefix = item.className || item.id || `${item.elementType}_${index}`;\r\n Object.entries(item.styles).forEach(([prop, value]) => {\r\n flattened[`${prefix}_${prop}`] = value;\r\n });\r\n });\r\n\r\n return flattened;\r\n }, []);\r\n\r\n const getSingleStyles = useCallback((extractedStyles) => {\r\n const flattened = {};\r\n \r\n extractedStyles.forEach((item, index) => {\r\n // const prefix = item.className || item.id || `${item.elementType}_${index}`;\r\n Object.entries(item.styles).forEach(([prop, value]) => {\r\n flattened[prop] = value;\r\n });\r\n });\r\n\r\n return flattened;\r\n }, []);\r\n\r\n return {\r\n // Original functions\r\n extractStyles,\r\n extractFormattingStyles,\r\n generateCSS,\r\n getFlattenedStyles,\r\n getSingleStyles,\r\n \r\n \r\n // New reverse conversion functions\r\n stylesToHtml,\r\n multipleStylesToHtml,\r\n applyStylesToHtml,\r\n extractAndConvert\r\n };\r\n};"],"names":["tagStyleMap","useMemo","i","fontStyle","em","b","fontWeight","strong","u","textDecoration","s","strike","del","sup","verticalAlign","fontSize","sub","small","big","mark","backgroundColor","code","fontFamily","kbd","padding","borderRadius","samp","var","styleTagMap","reverseMap","Object","entries","forEach","styleKey","tag","cssPropertyMap","color","border","margin","width","height","display","position","top","right","bottom","left","float","clear","overflow","opacity","toCamelCase","useCallback","property","replace","match","letter","toUpperCase","toKebabCase","toLowerCase","parseInlineStyles","styleDeclaration","styles","length","value","getPropertyValue","trim","extractTagStyles","element","tagName","extractNestedStyles","nestedStyles","currentElement","parentElement","prop","style","inheritableProps","parentStyles","extractImageStyles","imgElement","styleData","imageStyles","getAttribute","textAlign","assign","src","alt","extractStyles","editorContent","options","includeInlineStyles","includeTagStyles","filterEmptyStyles","mergeNestedStyles","tempDiv","document","createElement","innerHTML","results","querySelectorAll","index","elementType","elementIndex","className","id","textContent","_a","tagStyles","inheritedStyles","keys","push","extractFormattingStyles","formattingStyles","stylesToHtml","text","preferSemanticTags","wrapInParagraph","wrappedText","inlineStyles","styleAttr","map","val","join","multipleStylesToHtml","segments","wrapInContainer","containerTag","separateElements","Array","isArray","htmlSegments","segment","result","applyStylesToHtml","htmlContent","targetSelector","wrapper","firstChild","appendChild","kebabProperty","extractAndConvert","targetStyles","extracted","converted","item","key","mergedStyles","generateCSS","extractedStyles","css","selector","styleRules","getFlattenedStyles","flattened","prefix","getSingleStyles"],"mappings":"6HAMyC,KAEvC,MAAMA,EAAcC,EAAAA,QAAQ,KAAA,CAC1BC,EAAK,CAAEC,UAAW,UAClBC,GAAM,CAAED,UAAW,UACnBE,EAAK,CAAEC,WAAY,QACnBC,OAAU,CAAED,WAAY,QACxBE,EAAK,CAAEC,eAAgB,aACvBC,EAAK,CAAED,eAAgB,gBACvBE,OAAU,CAAEF,eAAgB,gBAC5BG,IAAO,CAAEH,eAAgB,gBACzBI,IAAO,CAAEC,cAAe,QAASC,SAAU,WAC3CC,IAAO,CAAEF,cAAe,MAAOC,SAAU,WACzCE,MAAS,CAAEF,SAAU,WACrBG,IAAO,CAAEH,SAAU,UACnBI,KAAQ,CAAEC,gBAAiB,UAC3BC,KAAQ,CAAEC,WAAY,aACtBC,IAAO,CAAED,WAAY,YAAaF,gBAAiB,UAAWI,QAAS,UAAWC,aAAc,OAChGC,KAAQ,CAAEJ,WAAY,aACtBK,IAAO,CAAExB,UAAW,SAAUmB,WAAY,eACxC,IAGEM,EAAc3B,EAAAA,QAAQ,KAC1B,MAAM4B,EAAa,CAAA,EAmBnB,OAJAC,OAAOC,QAZa,CAClB,mBAAoB,IACpB,kBAAmB,IACnB,2BAA4B,IAC5B,8BAA+B,IAC/B,sBAAuB,MACvB,oBAAqB,MACrB,mBAAoB,QACpB,kBAAmB,MACnB,yBAA0B,SAGAC,QAAQ,EAAEC,EAAUC,MAC9CL,EAAWI,GAAYC,IAGlBL,GACN,IAGGM,EAAiBlC,EAAAA,QAAQ,KAAA,CAC7B,cAAe,aACf,YAAa,WACb,cAAe,aACf,aAAc,YACd,aAAc,YACd,kBAAmB,iBACnB,iBAAkB,gBAClB,cAAe,aACf,iBAAkB,gBAClB,eAAgB,cAChBmC,MAAS,QACT,mBAAoB,kBACpB,mBAAoB,kBACpB,kBAAmB,iBACnB,sBAAuB,qBACvB,oBAAqB,mBACrBC,OAAU,SACV,eAAgB,cAChB,eAAgB,cAChB,eAAgB,cAChB,gBAAiB,eACjBC,OAAU,SACV,aAAc,YACd,eAAgB,cAChB,gBAAiB,eACjB,cAAe,aACfd,QAAW,UACX,cAAe,aACf,gBAAiB,eACjB,iBAAkB,gBAClB,eAAgB,cAChBe,MAAS,QACTC,OAAU,SACV,YAAa,WACb,aAAc,YACd,YAAa,WACb,aAAc,YACdC,QAAW,UACXC,SAAY,WACZC,IAAO,MACPC,MAAS,QACTC,OAAU,SACVC,KAAQ,OACRC,MAAS,QACTC,MAAS,QACTC,SAAY,WACZC,QAAW,UACX,UAAW,SACX,aAAc,YACd,cAAe,aACf,iBAAkB,kBAChB,IAGEC,EAAcC,cAAaC,GACxBlB,EAAekB,IACfA,EAASC,QAAQ,YAAa,CAACC,EAAOC,IAAWA,EAAOC,eAC9D,CAACtB,IAGEuB,EAAcN,cAAaC,GACxBA,EAASC,QAAQ,WAAY,OAAOK,cAC1C,IAGGC,EAAoBR,cAAaS,IACrC,MAAMC,EAAS,CAAA,EAEf,IAAA,IAAS5D,EAAI,EAAGA,EAAI2D,EAAiBE,OAAQ7D,IAAK,CAChD,MAAMmD,EAAWQ,EAAiB3D,GAC5B8D,EAAQH,EAAiBI,iBAAiBZ,GAE5CW,IAEFF,EAD0BX,EAAYE,IACVW,EAAME,OAEtC,CAEA,OAAOJ,GACN,CAACX,IAGEgB,EAAmBf,cAAagB,IACpC,MAAMC,EAAUD,EAAQC,QAAQV,cAChC,OAAO3D,EAAYqE,IAAY,CAAA,GAC9B,CAACrE,IAGEsE,EAAsBlB,cAAagB,IACvC,MAAMG,EAAe,CAAA,EACrB,IAAIC,EAAiBJ,EAAQK,cAG7B,KAAOD,GAA6C,SAA3BA,EAAeH,SAAoB,CAC1D,MAAMA,EAAUG,EAAeH,QAAQV,cAavC,GAVI3D,EAAYqE,IACdvC,OAAOC,QAAQ/B,EAAYqE,IAAUrC,QAAQ,EAAE0C,EAAMV,MAE9CO,EAAaG,KAChBH,EAAaG,GAAQV,KAMvBQ,EAAeG,MAAMZ,OAAS,EAAG,CACnC,MAAMa,EAAmB,CAAC,QAAS,aAAc,WAAY,aAAc,aACrEC,EAAejB,EAAkBY,EAAeG,OAEtDC,EAAiB5C,QAAQ0C,IACnBG,EAAaH,KAAUH,EAAaG,KACtCH,EAAaG,GAAQG,EAAaH,KAGxC,CAEAF,EAAiBA,EAAeC,aAClC,CAEA,OAAOF,GACN,CAACvE,EAAa4D,IAGXkB,EAAqB1B,EAAAA,YAAY,CAAC2B,EAAYC,KAClD,MAAMC,EAAc,CAAA,EAEhBF,EAAWxC,QAAO0C,EAAY1C,MAAQ,GAAGwC,EAAWxC,WACpDwC,EAAWvC,SAAQyC,EAAYzC,OAAS,GAAGuC,EAAWvC,YACtDuC,EAAWG,aAAa,WAC1BD,EAAYE,UAAYJ,EAAWG,aAAa,UAIlDpD,OAAOsD,OAAOJ,EAAUlB,OAAQmB,GAGhCD,EAAUK,IAAMN,EAAWM,IAC3BL,EAAUM,IAAMP,EAAWO,KAC1B,IAGGC,EAAgBnC,EAAAA,YAAY,CAACoC,EAAeC,EAAU,CAAA,KAC1D,MAAMC,oBACJA,GAAsB,EAAAC,iBACtBA,GAAmB,EAAAC,kBAGnBA,GAAoB,EAAAC,kBACpBA,GAAoB,GAClBJ,EAGEK,EAAUC,SAASC,cAAc,OACvCF,EAAQG,UAAYT,EAEpB,MAAMU,EAAU,GA4ChB,OA3CiBJ,EAAQK,iBAAiB,KAEjCnE,QAAQ,CAACoC,EAASgC,WACzB,MAAMpB,EAAY,CAChBqB,YAAajC,EAAQC,QAAQV,cAC7B2C,aAAcF,EACdG,UAAWnC,EAAQmC,WAAa,KAChCC,GAAIpC,EAAQoC,IAAM,KAClB1C,OAAQ,CAAA,EACR2C,aAAa,OAAAC,EAAAtC,EAAQqC,kBAAR,EAAAC,EAAqBxC,SAAU,MAS9C,GALIwB,GAAuBtB,EAAQO,MAAMZ,OAAS,IAChDiB,EAAUlB,OAAS,IAAKkB,EAAUlB,UAAWF,EAAkBQ,EAAQO,SAIrEgB,EAAkB,CACpB,MAAMgB,EAAYxC,EAAiBC,GACnCY,EAAUlB,OAAS,IAAKkB,EAAUlB,UAAW6C,EAC/C,CAGA,GAAId,EAAmB,CACrB,MAAMtB,EAAeD,EAAoBF,GACzCY,EAAUlB,OAAS,IAAKkB,EAAUlB,UAAWS,GAC7CS,EAAU4B,gBAAkBrC,CAC9B,CAGsC,QAAlCH,EAAQC,QAAQV,eAClBmB,EAAmBV,EAASY,GAI1BY,GAA8D,IAAzC9D,OAAO+E,KAAK7B,EAAUlB,QAAQC,SAAiBiB,EAAUyB,aAIlFP,EAAQY,KAAK9B,KAGRkB,GACN,CAACtC,EAAmBO,EAAkBG,EAAqBQ,IAGxDiC,EAA0B3D,cAAaoC,IAC3C,MAAMM,EAAUC,SAASC,cAAc,OACvCF,EAAQG,UAAYT,EAEpB,MACMwB,EAAmB,CAAA,EAazB,MAduB,CAAC,IAAK,KAAM,IAAK,SAAU,IAAK,IAAK,SAAU,MAAO,MAAO,OAGrEhF,QAAQE,IACJ4D,EAAQK,iBAAiBjE,GACjCF,QAAQ,CAACoC,EAASgC,KAEzBY,EADY,GAAG9E,KAAOkE,KACE,IACnBpG,EAAYkC,GACfuE,YAAarC,EAAQqC,iBAKpBO,GACN,CAAChH,IAGEiH,EAAe7D,EAAAA,YAAY,CAAC8D,EAAMpD,EAAS,CAAA,EAAI2B,EAAU,MAC7D,MAAM0B,mBACJA,GAAqB,EAAAC,gBACrBA,GAAkB,GAEhB3B,EAEJ,IAAKyB,GAAwB,iBAATA,EAClB,MAAO,GAGT,IAAIG,EAAcH,EAClB,MAAMI,EAAe,CAAA,EAiBrB,GAdAxF,OAAOC,QAAQ+B,GAAQ9B,QAAQ,EAAEqB,EAAUW,MACzC,MAAM/B,EAAW,GAAGoB,KAAYW,IAGhC,GAAImD,GAAsBvF,EAAYK,GAAW,CAC/C,MAAMC,EAAMN,EAAYK,GACxBoF,EAAc,IAAInF,KAAOmF,MAAgBnF,IAC3C,MAEEoF,EAAajE,GAAYW,IAKzBlC,OAAO+E,KAAKS,GAAcvD,OAAS,EAAG,CACxC,MAAMwD,EAAYzF,OAAOC,QAAQuF,GAC9BE,IAAI,EAAE9C,EAAM+C,KAAS,GAAG/D,EAAYgB,OAAU+C,KAC9CC,KAAK,MAERL,EAAc,gBAAgBE,MAAcF,UAC9C,CAOA,OAJID,IACFC,EAAc,MAAMA,SAGfA,GACN,CAACzF,EAAa8B,IAGXiE,EAAuBvE,EAAAA,YAAY,CAACwE,EAAUnC,EAAU,CAAA,KAC5D,MAAMoC,gBACJA,GAAkB,EAAAC,aAClBA,EAAe,MAAAC,iBACfA,GAAmB,GACjBtC,EAEJ,IAAKuC,MAAMC,QAAQL,GACjB,MAAO,GAGT,MAAMM,EAAeN,EAASJ,IAAIW,IAChC,MAAMjB,KAAEA,EAAApD,OAAMA,EAAS,CAAA,EAAAsD,gBAAIA,GAAkB,GAAUe,EACvD,OAAOlB,EAAaC,EAAMpD,EAAQ,IAAK2B,EAAS2B,sBAGlD,IAAIgB,EAASL,EAAmBG,EAAaR,KAAK,MAAQQ,EAAaR,KAAK,KAM5E,OAJIG,IACFO,EAAS,IAAIN,KAAgBM,MAAWN,MAGnCM,GACN,CAACnB,IAGEoB,EAAoBjF,EAAAA,YAAY,CAACkF,EAAaxE,EAAS,CAAA,EAAIyE,EAAiB,OAChF,MAAMzC,EAAUC,SAASC,cAAc,OA8BvC,OA7BAF,EAAQG,UAAYqC,GAEsB,MAAnBC,EACnBzC,EAAQK,iBAAiB,KACzBL,EAAQK,iBAAiBoC,IAEdvG,QAAQoC,IACrBtC,OAAOC,QAAQ+B,GAAQ9B,QAAQ,EAAEqB,EAAUW,MACzC,MAAM/B,EAAW,GAAGoB,KAAYW,IAGhC,GAAIpC,EAAYK,GAAW,CACzB,MAAMC,EAAMN,EAAYK,GAClBuG,EAAUzC,SAASC,cAAc9D,GAGvC,KAAOkC,EAAQqE,YACbD,EAAQE,YAAYtE,EAAQqE,YAG9BrE,EAAQsE,YAAYF,EACtB,KAAO,CAEL,MAAMG,EAAgBjF,EAAYL,GAClCe,EAAQO,MAAMgE,GAAiB3E,CACjC,MAIG8B,EAAQG,WACd,CAACrE,EAAa8B,IAGXkF,EAAoBxF,EAAAA,YAAY,CAACoC,EAAeqD,EAAe,CAAA,KACnE,MAAMC,EAAYvD,EAAcC,GAC1BuD,EAAY,CAAA,EAWlB,OATAD,EAAU9G,QAAQgH,IAChB,MAAMC,EAAMD,EAAKzC,WAAayC,EAAKxC,IAAM,GAAGwC,EAAK3C,eAAe2C,EAAK1C,eAC/D4C,EAAe,IAAKF,EAAKlF,UAAW+E,GAEtCG,EAAKvC,cACPsC,EAAUE,GAAOhC,EAAa+B,EAAKvC,YAAayC,EAAc,CAAE9B,iBAAiB,OAI9E2B,GACN,CAACxD,EAAe0B,IAGbkC,EAAc/F,cAAagG,IAC/B,IAAIC,EAAM,GAkBV,OAhBAD,EAAgBpH,QAAQ,CAACgH,EAAM5C,KAC7B,MAAMkD,EAAWN,EAAKzC,UAClB,IAAIyC,EAAKzC,YACTyC,EAAKxC,GACL,IAAIwC,EAAKxC,KACT,GAAGwC,EAAK3C,eAAeD,IAErBmD,EAAazH,OAAOC,QAAQiH,EAAKlF,QACpC0D,IAAI,EAAE9C,EAAMV,KAAW,KAAKN,EAAYgB,OAAUV,MAClD0D,KAAK,MAEJ6B,IACFF,GAAO,GAAGC,QAAeC,cAItBF,GACN,CAAC3F,IAGE8F,EAAqBpG,cAAagG,IACtC,MAAMK,EAAY,CAAA,EASlB,OAPAL,EAAgBpH,QAAQ,CAACgH,EAAM5C,KAC7B,MAAMsD,EAASV,EAAKzC,WAAayC,EAAKxC,IAAM,GAAGwC,EAAK3C,eAAeD,IACnEtE,OAAOC,QAAQiH,EAAKlF,QAAQ9B,QAAQ,EAAE0C,EAAMV,MAC1CyF,EAAU,GAAGC,KAAUhF,KAAUV,MAI9ByF,GACN,IAEGE,EAAkBvG,cAAagG,IACnC,MAAMK,EAAY,CAAA,EASlB,OAPAL,EAAgBpH,QAAQ,CAACgH,EAAM5C,KAE7BtE,OAAOC,QAAQiH,EAAKlF,QAAQ9B,QAAQ,EAAE0C,EAAMV,MAC1CyF,EAAU/E,GAAQV,MAIfyF,GACN,IAEH,MAAO,CAELlE,gBACAwB,0BACAoC,cACAK,qBACAG,kBAIA1C,eACAU,uBACAU,oBACAO"}