@erpsquad/common 1.8.81 → 1.8.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +253 -253
- package/README.md +979 -979
- package/dist/_virtual/index/index.esm10.js +3 -3
- package/dist/_virtual/index/index.esm11.js +3 -3
- package/dist/_virtual/index/index.esm4.js +1 -1
- package/dist/_virtual/index/index.esm5.js +3 -3
- package/dist/_virtual/index/index.esm6.js +3 -3
- package/dist/_virtual/index/index.esm7.js +3 -3
- package/dist/_virtual/index/index.esm8.js +3 -3
- package/dist/_virtual/index/index.esm9.js +3 -3
- package/dist/_virtual/index/index10.js +1 -1
- package/dist/_virtual/index/index11.js +1 -1
- package/dist/_virtual/index/index4.js +1 -1
- package/dist/_virtual/index/index5.js +1 -1
- package/dist/_virtual/index/index6.js +1 -1
- package/dist/_virtual/index/index7.js +1 -1
- package/dist/_virtual/index/index8.js +1 -1
- package/dist/_virtual/index/index9.js +1 -1
- package/dist/api-client/api.accounting/api/index.esm.js.map +1 -1
- package/dist/api-client/api.accounting/api/index.js.map +1 -1
- package/dist/api-client/api.accounting/api-types.d.ts +15883 -15883
- package/dist/api-client/api.drive/api/index.esm.js.map +1 -1
- package/dist/api-client/api.drive/api/index.js.map +1 -1
- package/dist/api-client/api.drive/api-types.d.ts +696 -696
- package/dist/api-client/api.hrms/api/index.esm.js.map +1 -1
- package/dist/api-client/api.hrms/api/index.js.map +1 -1
- package/dist/api-client/api.inventory/api/index.esm.js.map +1 -1
- package/dist/api-client/api.inventory/api/index.js.map +1 -1
- package/dist/api-client/api.inventory/api-types.d.ts +6110 -6110
- package/dist/api-client/api.manufacturing/api/index.esm.js.map +1 -1
- package/dist/api-client/api.manufacturing/api/index.js.map +1 -1
- package/dist/api-client/api.manufacturing/api-types.d.ts +10066 -10066
- package/dist/api-client/api.purchase/api/index.esm.js.map +1 -1
- package/dist/api-client/api.purchase/api/index.js.map +1 -1
- package/dist/api-client/api.purchase/api-types.d.ts +6715 -6715
- package/dist/api-client/api.rbac/api/index.esm.js.map +1 -1
- package/dist/api-client/api.rbac/api/index.esm2.js.map +1 -1
- package/dist/api-client/api.rbac/api/index.js.map +1 -1
- package/dist/api-client/api.rbac/api/index2.js.map +1 -1
- package/dist/api-client/api.rbac/api-types.d.ts +1753 -1753
- package/dist/api-client/api.rental/api/index.esm.js.map +1 -1
- package/dist/api-client/api.rental/api/index.js.map +1 -1
- package/dist/api-client/api.rental/api-types.d.ts +15666 -15666
- package/dist/api-client/api.sales/api/index.esm.js.map +1 -1
- package/dist/api-client/api.sales/api/index.js.map +1 -1
- package/dist/api-client/api.sales/api-types.d.ts +8258 -8258
- package/dist/api-client/api.system-feature/api/index.esm.js.map +1 -1
- package/dist/api-client/api.system-feature/api/index.js.map +1 -1
- package/dist/api-client/api.system-feature/api-types.d.ts +2875 -2875
- package/dist/api-client/api.user/api/index.esm.js.map +1 -1
- package/dist/api-client/api.user/api/index.js.map +1 -1
- package/dist/api-client/api.user/api-types.d.ts +95 -95
- package/dist/api-client/api.workflow-automation/api/index.esm.js.map +1 -1
- package/dist/api-client/api.workflow-automation/api/index.js.map +1 -1
- package/dist/api-client/index.d.ts +39 -39
- package/dist/components/accordion/accordion/index.esm.js.map +1 -1
- package/dist/components/accordion/accordion/index.js.map +1 -1
- package/dist/components/accordion/accordion.d.ts +1 -1
- package/dist/components/action-bar/action-bar/index.esm.js +1 -1
- package/dist/components/action-bar/action-bar/index.esm.js.map +1 -1
- package/dist/components/action-bar/action-bar/index.js +5 -5
- package/dist/components/action-bar/action-bar/index.js.map +1 -1
- package/dist/components/action-bar/action-bar.d.ts +1 -1
- package/dist/components/activity-tag/activity-tag/index.esm.js.map +1 -1
- package/dist/components/activity-tag/activity-tag/index.js.map +1 -1
- package/dist/components/alert/alert/index.esm.js.map +1 -1
- package/dist/components/alert/alert/index.js.map +1 -1
- package/dist/components/button/button/index.esm.js.map +1 -1
- package/dist/components/button/button/index.js.map +1 -1
- package/dist/components/change-user-password-modal/change-user-password-modal/index.esm.js.map +1 -1
- package/dist/components/change-user-password-modal/change-user-password-modal/index.js.map +1 -1
- package/dist/components/checkbox/checkbox/index.esm.js.map +1 -1
- package/dist/components/checkbox/checkbox/index.js.map +1 -1
- package/dist/components/checkbox/checkbox.d.ts +1 -1
- package/dist/components/chip/chip/index.esm.js.map +1 -1
- package/dist/components/chip/chip/index.js.map +1 -1
- package/dist/components/chip-generator/chip-generator/index.esm.js.map +1 -1
- package/dist/components/chip-generator/chip-generator/index.js.map +1 -1
- package/dist/components/date-picker/date-picker/index.esm.js.map +1 -1
- package/dist/components/date-picker/date-picker/index.js.map +1 -1
- package/dist/components/date-picker/date-picker.d.ts +1 -1
- package/dist/components/date-time-picker/date-time-picker/index.esm.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker/index.js.map +1 -1
- package/dist/components/editor/custom-editor/index.esm.js.map +1 -1
- package/dist/components/editor/custom-editor/index.js.map +1 -1
- package/dist/components/filter/components/delete-group/index.esm.js +0 -1
- package/dist/components/filter/components/delete-group/index.esm.js.map +1 -1
- package/dist/components/filter/components/delete-group/index.js +1 -1
- package/dist/components/filter/components/delete-group/index.js.map +1 -1
- package/dist/components/filter/filter/index.esm.js +1 -1
- package/dist/components/filter/filter/index.esm.js.map +1 -1
- package/dist/components/filter/filter/index.js +7 -7
- package/dist/components/filter/filter/index.js.map +1 -1
- package/dist/components/footer/footer.d.ts +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.esm.js.map +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.js.map +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/media.d.ts +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/phone.d.ts +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/select.d.ts +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/text.d.ts +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/time.d.ts +1 -1
- package/dist/components/form-control/form-parser/form-switcher.d.ts +1 -1
- package/dist/components/header/header/index.esm.js.map +1 -1
- package/dist/components/header/header/index.js.map +1 -1
- package/dist/components/header/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/header/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/components/header/redux/actionCreator/index.js +1 -1
- package/dist/components/header/redux/actionCreator/index.js.map +1 -1
- package/dist/components/icons/action/index.esm.js.map +1 -1
- package/dist/components/icons/action/index.js.map +1 -1
- package/dist/components/icons/action-arrow.d.ts +3 -3
- package/dist/components/icons/add-circle.d.ts +3 -3
- package/dist/components/icons/arrow-bidirectional.d.ts +3 -3
- package/dist/components/icons/arrow-circle-down.d.ts +3 -3
- package/dist/components/icons/arrow-down-three.d.ts +3 -3
- package/dist/components/icons/arrow-down-two.d.ts +3 -3
- package/dist/components/icons/arrow-down.d.ts +3 -3
- package/dist/components/icons/arrow-up-down.d.ts +3 -3
- package/dist/components/icons/arrow-up-two.d.ts +3 -3
- package/dist/components/icons/assignments.d.ts +3 -3
- package/dist/components/icons/blank-circle.d.ts +3 -3
- package/dist/components/icons/block-filled.d.ts +3 -3
- package/dist/components/icons/calendar-add.d.ts +3 -3
- package/dist/components/icons/calendar.d.ts +3 -3
- package/dist/components/icons/checkbox-square.d.ts +3 -3
- package/dist/components/icons/circular-arrow-setting.d.ts +3 -3
- package/dist/components/icons/clock.d.ts +3 -3
- package/dist/components/icons/close.d.ts +3 -3
- package/dist/components/icons/coin-outline.d.ts +3 -3
- package/dist/components/icons/copy.d.ts +3 -3
- package/dist/components/icons/coupon.d.ts +3 -3
- package/dist/components/icons/criteria/index.esm.js.map +1 -1
- package/dist/components/icons/criteria/index.js.map +1 -1
- package/dist/components/icons/cross/index.esm.js.map +1 -1
- package/dist/components/icons/cross/index.js.map +1 -1
- package/dist/components/icons/cross-hire.d.ts +3 -3
- package/dist/components/icons/custom-styled-icon.d.ts +3 -3
- package/dist/components/icons/dashboard.d.ts +3 -3
- package/dist/components/icons/document-download.d.ts +3 -3
- package/dist/components/icons/document.d.ts +3 -3
- package/dist/components/icons/dollar-circle-filled.d.ts +3 -3
- package/dist/components/icons/dollar-circle.d.ts +3 -3
- package/dist/components/icons/edit.d.ts +3 -3
- package/dist/components/icons/email.d.ts +3 -3
- package/dist/components/icons/export.d.ts +3 -3
- package/dist/components/icons/eye-off.d.ts +3 -3
- package/dist/components/icons/eye-plus-circle.d.ts +3 -3
- package/dist/components/icons/eye.d.ts +3 -3
- package/dist/components/icons/filled-circle.d.ts +3 -3
- package/dist/components/icons/filter-remove.d.ts +3 -3
- package/dist/components/icons/filter.d.ts +3 -3
- package/dist/components/icons/folder-save.d.ts +3 -3
- package/dist/components/icons/grid.d.ts +3 -3
- package/dist/components/icons/hashtag.d.ts +3 -3
- package/dist/components/icons/image.d.ts +3 -3
- package/dist/components/icons/import.d.ts +3 -3
- package/dist/components/icons/info-circle.d.ts +3 -3
- package/dist/components/icons/info.d.ts +3 -3
- package/dist/components/icons/link-horizontal.d.ts +3 -3
- package/dist/components/icons/link.d.ts +3 -3
- package/dist/components/icons/location.d.ts +3 -3
- package/dist/components/icons/lowest-lead-time.d.ts +3 -3
- package/dist/components/icons/lowest-min-qty.d.ts +3 -3
- package/dist/components/icons/lowest-price.d.ts +3 -3
- package/dist/components/icons/more.d.ts +3 -3
- package/dist/components/icons/notification.d.ts +3 -3
- package/dist/components/icons/paper-clip.d.ts +3 -3
- package/dist/components/icons/paragraph.d.ts +3 -3
- package/dist/components/icons/payment-request.d.ts +3 -3
- package/dist/components/icons/phone.d.ts +3 -3
- package/dist/components/icons/printer.d.ts +3 -3
- package/dist/components/icons/process-calendar.d.ts +3 -3
- package/dist/components/icons/promotion.d.ts +3 -3
- package/dist/components/icons/radio-button.d.ts +3 -3
- package/dist/components/icons/receipt-filled.d.ts +3 -3
- package/dist/components/icons/receipt-outline.d.ts +3 -3
- package/dist/components/icons/receipt.d.ts +3 -3
- package/dist/components/icons/refresh-icon.d.ts +3 -3
- package/dist/components/icons/replace.d.ts +3 -3
- package/dist/components/icons/save.d.ts +3 -3
- package/dist/components/icons/search-status.d.ts +3 -3
- package/dist/components/icons/search.d.ts +3 -3
- package/dist/components/icons/settings-fallback.d.ts +3 -3
- package/dist/components/icons/share/index.esm.js.map +1 -1
- package/dist/components/icons/share/index.js.map +1 -1
- package/dist/components/icons/sort-arrow-icon.d.ts +3 -3
- package/dist/components/icons/stacked-layer.d.ts +3 -3
- package/dist/components/icons/start-filled.d.ts +3 -3
- package/dist/components/icons/three-dot-icon.d.ts +3 -3
- package/dist/components/icons/tick-circle-filled.d.ts +3 -3
- package/dist/components/icons/tick-circle.d.ts +3 -3
- package/dist/components/icons/tick-octagon.d.ts +3 -3
- package/dist/components/icons/tick.d.ts +3 -3
- package/dist/components/icons/toggle-switch.d.ts +3 -3
- package/dist/components/icons/trash.d.ts +3 -3
- package/dist/components/icons/wave.d.ts +3 -3
- package/dist/components/icons/with-out-tick-octagon.d.ts +3 -3
- package/dist/components/icons/work-centre.d.ts +3 -3
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js +1 -1
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js.map +1 -1
- package/dist/components/label-value/label-value/index.esm.js.map +1 -1
- package/dist/components/label-value/label-value/index.js.map +1 -1
- package/dist/components/listing/listing/index.esm.js.map +1 -1
- package/dist/components/listing/listing/index.js.map +1 -1
- package/dist/components/loaders/erp-loader/index.esm.js.map +1 -1
- package/dist/components/loaders/erp-loader/index.js.map +1 -1
- package/dist/components/loaders/form-loader/index.esm.js.map +1 -1
- package/dist/components/loaders/form-loader/index.js.map +1 -1
- package/dist/components/loaders/modal-loader/index.esm.js.map +1 -1
- package/dist/components/loaders/modal-loader/index.js.map +1 -1
- package/dist/components/loaders/page-loader/index.esm.js.map +1 -1
- package/dist/components/loaders/page-loader/index.js.map +1 -1
- package/dist/components/location-select.d.ts +1 -1
- package/dist/components/material-editable-table/components/inline-edit-fields/index.esm.js.map +1 -1
- package/dist/components/material-editable-table/components/inline-edit-fields/index.js.map +1 -1
- package/dist/components/material-editable-table/material-editable-table/index.esm.js.map +1 -1
- package/dist/components/material-editable-table/material-editable-table/index.js.map +1 -1
- package/dist/components/material-editable-table/material-editable-table.d.ts +1 -1
- package/dist/components/material-table/material-table.d.ts +1 -1
- package/dist/components/menu/menu/index.esm.js.map +1 -1
- package/dist/components/menu/menu/index.js.map +1 -1
- package/dist/components/modal/modal/index.esm.js.map +1 -1
- package/dist/components/modal/modal/index.js.map +1 -1
- package/dist/components/page-navigator/page-navigator/index.esm.js.map +1 -1
- package/dist/components/page-navigator/page-navigator/index.js.map +1 -1
- package/dist/components/phone-input/phone-input.d.ts +1 -1
- package/dist/components/providers/ERPUIProvider/index.esm.js.map +1 -1
- package/dist/components/providers/ERPUIProvider/index.js.map +1 -1
- package/dist/components/radio/radio.d.ts +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.js +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.js.map +1 -1
- package/dist/components/reset-password-modal/reset-password-modal/index.esm.js.map +1 -1
- package/dist/components/reset-password-modal/reset-password-modal/index.js.map +1 -1
- package/dist/components/search-bar/search-bar/index.esm.js.map +1 -1
- package/dist/components/search-bar/search-bar/index.js.map +1 -1
- package/dist/components/searchable-select/index.esm.js.map +1 -1
- package/dist/components/searchable-select/index.js.map +1 -1
- package/dist/components/select/controller/chip-or-placeholder/index.esm.js.map +1 -1
- package/dist/components/select/controller/chip-or-placeholder/index.js.map +1 -1
- package/dist/components/select/select/index.esm.js.map +1 -1
- package/dist/components/select/select/index.js.map +1 -1
- package/dist/components/select/select-search/index.esm.js.map +1 -1
- package/dist/components/select/select-search/index.js.map +1 -1
- package/dist/components/select/select.d.ts +1 -1
- package/dist/components/share-modal/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/share-modal/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/components/share-modal/redux/actionCreator/index.js +1 -1
- package/dist/components/share-modal/redux/actionCreator/index.js.map +1 -1
- package/dist/components/sub-header-doc/sub-header-doc/index.esm.js.map +1 -1
- package/dist/components/sub-header-doc/sub-header-doc/index.js.map +1 -1
- package/dist/components/switches/android-12-switch/index.esm.js.map +1 -1
- package/dist/components/switches/android-12-switch/index.js.map +1 -1
- package/dist/components/switches/android-12-switch.d.ts +3 -1
- package/dist/components/text-area/text-area/index.esm.js.map +1 -1
- package/dist/components/text-area/text-area/index.js.map +1 -1
- package/dist/components/text-field/text-field/index.esm.js.map +1 -1
- package/dist/components/text-field/text-field/index.js.map +1 -1
- package/dist/components/text-field/text-field.d.ts +1 -1
- package/dist/components/time-picker/time-picker/index.esm.js.map +1 -1
- package/dist/components/time-picker/time-picker/index.js.map +1 -1
- package/dist/components/time-picker/time-picker.d.ts +1 -1
- package/dist/components/toast/toast/index.esm.js.map +1 -1
- package/dist/components/toast/toast/index.js.map +1 -1
- package/dist/components/toggle/toggle/index.esm.js.map +1 -1
- package/dist/components/toggle/toggle/index.js.map +1 -1
- package/dist/components/typography/typography/index.esm.js.map +1 -1
- package/dist/components/typography/typography/index.js.map +1 -1
- package/dist/components/upload/upload/index.esm.js +2 -2
- package/dist/components/upload/upload/index.esm.js.map +1 -1
- package/dist/components/upload/upload/index.js +11 -11
- package/dist/components/upload/upload/index.js.map +1 -1
- package/dist/components/upload-media/upload-media.d.ts +1 -1
- package/dist/constants/defaultColumns/index.esm.js.map +1 -1
- package/dist/constants/defaultColumns/index.js.map +1 -1
- package/dist/constants/modules/index.esm.js.map +1 -1
- package/dist/constants/modules/index.js.map +1 -1
- package/dist/constants/pathnames/pathname/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.accounting/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.accounting/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.crm/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.crm/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.document/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.document/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.hrms/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.hrms/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.inventory/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.inventory/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.manufacturing/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.manufacturing/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.office/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.office/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.procurement/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.procurement/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.project/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.project/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.quotes/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.quotes/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.rental/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.rental/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.user/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.user/index.js.map +1 -1
- package/dist/constants/route-page-map/index.esm.js.map +1 -1
- package/dist/constants/route-page-map/index.js.map +1 -1
- package/dist/constants/status/index.esm.js.map +1 -1
- package/dist/constants/status/index.js.map +1 -1
- package/dist/contexts/AuthContext/index.esm.js +1 -1
- package/dist/contexts/AuthContext/index.esm.js.map +1 -1
- package/dist/contexts/AuthContext/index.js +1 -1
- package/dist/contexts/AuthContext/index.js.map +1 -1
- package/dist/contexts/languageContext/index.esm.js +1 -1
- package/dist/contexts/languageContext/index.esm.js.map +1 -1
- package/dist/contexts/languageContext/index.js +1 -1
- package/dist/contexts/languageContext/index.js.map +1 -1
- package/dist/contexts/page-context/index.esm.js.map +1 -1
- package/dist/contexts/page-context/index.js.map +1 -1
- package/dist/hooks/use-translations/index.esm.js.map +1 -1
- package/dist/hooks/use-translations/index.js.map +1 -1
- package/dist/hooks/useApi/index.esm.js.map +1 -1
- package/dist/hooks/useApi/index.js.map +1 -1
- package/dist/hooks/useDataFetcher/index.esm.js.map +1 -1
- package/dist/hooks/useDataFetcher/index.js.map +1 -1
- package/dist/layout/fullScreen/fullScreen/index.esm.js.map +1 -1
- package/dist/layout/fullScreen/fullScreen/index.js.map +1 -1
- package/dist/layout/sidebarScreen/sidebarScreen/index.esm.js.map +1 -1
- package/dist/layout/sidebarScreen/sidebarScreen/index.js.map +1 -1
- package/dist/node_modules/@glideapps/glide-data-grid-cells/dist/js/article-cell-editor-JDI676YI/index.esm.js +1 -1
- package/dist/node_modules/@glideapps/glide-data-grid-cells/dist/js/article-cell-editor-JDI676YI/index.js +2 -2
- package/dist/node_modules/@glideapps/glide-data-grid-cells/dist/js/article-cell-editor-JDI676YI/index.js.map +1 -1
- package/dist/node_modules/@mui/system/colorManipulator/index.esm.js +2 -2
- package/dist/node_modules/@mui/system/colorManipulator/index.js +1 -1
- package/dist/node_modules/@mui/system/colorManipulator/index.js.map +1 -1
- package/dist/node_modules/@mui/system/createStyled/index.esm.js +6 -6
- package/dist/node_modules/@mui/system/createStyled/index.js +1 -1
- package/dist/node_modules/@mui/system/createStyled/index.js.map +1 -1
- package/dist/node_modules/@mui/system/useThemeWithoutDefault/index.esm.js +1 -1
- package/dist/node_modules/@mui/system/useThemeWithoutDefault/index.js +1 -1
- package/dist/node_modules/{material-react-table/node_modules/@tanstack → @tanstack}/react-virtual/dist/esm/index/index.esm.js +2 -2
- package/dist/node_modules/@tanstack/react-virtual/dist/esm/index/index.esm.js.map +1 -0
- package/dist/node_modules/@tanstack/react-virtual/dist/esm/index/index.js +2 -0
- package/dist/node_modules/@tanstack/react-virtual/dist/esm/index/index.js.map +1 -0
- package/dist/node_modules/{@glideapps/glide-data-grid-cells/node_modules/@toast-ui → @toast-ui}/react-editor/dist/esm/index/index.esm.js +2 -2
- package/dist/node_modules/@toast-ui/react-editor/dist/esm/index/index.esm.js.map +1 -0
- package/dist/node_modules/@toast-ui/react-editor/dist/esm/index/index.js +2 -0
- package/dist/node_modules/@toast-ui/react-editor/dist/esm/index/index.js.map +1 -0
- package/dist/node_modules/material-react-table/dist/index.esm/index.esm.js +1 -1
- package/dist/node_modules/material-react-table/dist/index.esm/index.js +1 -1
- package/dist/node_modules/material-react-table/dist/index.esm/index.js.map +1 -1
- package/dist/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/redux/actionCreator/index.js.map +1 -1
- package/dist/redux/module-reducer/index.esm.js.map +1 -1
- package/dist/redux/module-reducer/index.js.map +1 -1
- package/dist/redux/store/index.esm.js.map +1 -1
- package/dist/redux/store/index.js.map +1 -1
- package/dist/server/index.esm.js.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/src/components/accordion/accordion.d.ts +1 -1
- package/dist/src/components/action-bar/action-bar.d.ts +1 -1
- package/dist/src/components/checkbox/checkbox.d.ts +1 -1
- package/dist/src/components/date-picker/date-picker.d.ts +1 -1
- package/dist/src/components/footer/footer.d.ts +1 -1
- package/dist/src/components/form-control/form-builder/form-builder-element/media.d.ts +1 -1
- package/dist/src/components/form-control/form-builder/form-builder-element/phone.d.ts +1 -1
- package/dist/src/components/form-control/form-builder/form-builder-element/select.d.ts +1 -1
- package/dist/src/components/form-control/form-builder/form-builder-element/text.d.ts +1 -1
- package/dist/src/components/form-control/form-builder/form-builder-element/time.d.ts +1 -1
- package/dist/src/components/form-control/form-parser/form-switcher.d.ts +1 -1
- package/dist/src/components/icons/action-arrow.d.ts +3 -3
- package/dist/src/components/icons/add-circle.d.ts +3 -3
- package/dist/src/components/icons/arrow-bidirectional.d.ts +3 -3
- package/dist/src/components/icons/arrow-circle-down.d.ts +3 -3
- package/dist/src/components/icons/arrow-down-three.d.ts +3 -3
- package/dist/src/components/icons/arrow-down-two.d.ts +3 -3
- package/dist/src/components/icons/arrow-down.d.ts +3 -3
- package/dist/src/components/icons/arrow-up-down.d.ts +3 -3
- package/dist/src/components/icons/arrow-up-two.d.ts +3 -3
- package/dist/src/components/icons/assignments.d.ts +3 -3
- package/dist/src/components/icons/blank-circle.d.ts +3 -3
- package/dist/src/components/icons/block-filled.d.ts +3 -3
- package/dist/src/components/icons/calendar-add.d.ts +3 -3
- package/dist/src/components/icons/calendar.d.ts +3 -3
- package/dist/src/components/icons/checkbox-square.d.ts +3 -3
- package/dist/src/components/icons/circular-arrow-setting.d.ts +3 -3
- package/dist/src/components/icons/clock.d.ts +3 -3
- package/dist/src/components/icons/close.d.ts +3 -3
- package/dist/src/components/icons/coin-outline.d.ts +3 -3
- package/dist/src/components/icons/copy.d.ts +3 -3
- package/dist/src/components/icons/coupon.d.ts +3 -3
- package/dist/src/components/icons/cross-hire.d.ts +3 -3
- package/dist/src/components/icons/custom-styled-icon.d.ts +3 -3
- package/dist/src/components/icons/dashboard.d.ts +3 -3
- package/dist/src/components/icons/document-download.d.ts +3 -3
- package/dist/src/components/icons/document.d.ts +3 -3
- package/dist/src/components/icons/dollar-circle-filled.d.ts +3 -3
- package/dist/src/components/icons/dollar-circle.d.ts +3 -3
- package/dist/src/components/icons/edit.d.ts +3 -3
- package/dist/src/components/icons/email.d.ts +3 -3
- package/dist/src/components/icons/export.d.ts +3 -3
- package/dist/src/components/icons/eye-off.d.ts +3 -3
- package/dist/src/components/icons/eye-plus-circle.d.ts +3 -3
- package/dist/src/components/icons/eye.d.ts +3 -3
- package/dist/src/components/icons/filled-circle.d.ts +3 -3
- package/dist/src/components/icons/filter-remove.d.ts +3 -3
- package/dist/src/components/icons/filter.d.ts +3 -3
- package/dist/src/components/icons/folder-save.d.ts +3 -3
- package/dist/src/components/icons/grid.d.ts +3 -3
- package/dist/src/components/icons/hashtag.d.ts +3 -3
- package/dist/src/components/icons/image.d.ts +3 -3
- package/dist/src/components/icons/import.d.ts +3 -3
- package/dist/src/components/icons/info-circle.d.ts +3 -3
- package/dist/src/components/icons/info.d.ts +3 -3
- package/dist/src/components/icons/link-horizontal.d.ts +3 -3
- package/dist/src/components/icons/link.d.ts +3 -3
- package/dist/src/components/icons/location.d.ts +3 -3
- package/dist/src/components/icons/lowest-lead-time.d.ts +3 -3
- package/dist/src/components/icons/lowest-min-qty.d.ts +3 -3
- package/dist/src/components/icons/lowest-price.d.ts +3 -3
- package/dist/src/components/icons/more.d.ts +3 -3
- package/dist/src/components/icons/notification.d.ts +3 -3
- package/dist/src/components/icons/paper-clip.d.ts +3 -3
- package/dist/src/components/icons/paragraph.d.ts +3 -3
- package/dist/src/components/icons/payment-request.d.ts +3 -3
- package/dist/src/components/icons/phone.d.ts +3 -3
- package/dist/src/components/icons/printer.d.ts +3 -3
- package/dist/src/components/icons/process-calendar.d.ts +3 -3
- package/dist/src/components/icons/promotion.d.ts +3 -3
- package/dist/src/components/icons/radio-button.d.ts +3 -3
- package/dist/src/components/icons/receipt-filled.d.ts +3 -3
- package/dist/src/components/icons/receipt-outline.d.ts +3 -3
- package/dist/src/components/icons/receipt.d.ts +3 -3
- package/dist/src/components/icons/refresh-icon.d.ts +3 -3
- package/dist/src/components/icons/replace.d.ts +3 -3
- package/dist/src/components/icons/save.d.ts +3 -3
- package/dist/src/components/icons/search-status.d.ts +3 -3
- package/dist/src/components/icons/search.d.ts +3 -3
- package/dist/src/components/icons/settings-fallback.d.ts +3 -3
- package/dist/src/components/icons/sort-arrow-icon.d.ts +3 -3
- package/dist/src/components/icons/stacked-layer.d.ts +3 -3
- package/dist/src/components/icons/start-filled.d.ts +3 -3
- package/dist/src/components/icons/three-dot-icon.d.ts +3 -3
- package/dist/src/components/icons/tick-circle-filled.d.ts +3 -3
- package/dist/src/components/icons/tick-circle.d.ts +3 -3
- package/dist/src/components/icons/tick-octagon.d.ts +3 -3
- package/dist/src/components/icons/tick.d.ts +3 -3
- package/dist/src/components/icons/toggle-switch.d.ts +3 -3
- package/dist/src/components/icons/trash.d.ts +3 -3
- package/dist/src/components/icons/wave.d.ts +3 -3
- package/dist/src/components/icons/with-out-tick-octagon.d.ts +3 -3
- package/dist/src/components/icons/work-centre.d.ts +3 -3
- package/dist/src/components/location-select.d.ts +1 -1
- package/dist/src/components/material-editable-table/material-editable-table.d.ts +1 -1
- package/dist/src/components/material-table/material-table.d.ts +1 -1
- package/dist/src/components/phone-input/phone-input.d.ts +1 -1
- package/dist/src/components/radio/radio.d.ts +1 -1
- package/dist/src/components/select/select.d.ts +1 -1
- package/dist/src/components/switches/android-12-switch.d.ts +3 -1
- package/dist/src/components/text-field/text-field.d.ts +1 -1
- package/dist/src/components/time-picker/time-picker.d.ts +1 -1
- package/dist/src/components/upload-media/upload-media.d.ts +1 -1
- package/dist/src/utils/common-utility.d.ts +1 -1
- package/dist/style.css +69 -69
- package/dist/styles/index.d.ts +1 -1
- package/dist/theme/theme-impl/index.esm.js.map +1 -1
- package/dist/theme/theme-impl/index.js.map +1 -1
- package/dist/utils/api/index.esm.js +6 -6
- package/dist/utils/api/index.esm.js.map +1 -1
- package/dist/utils/api/index.js +1 -1
- package/dist/utils/api/index.js.map +1 -1
- package/dist/utils/common/index.esm.js +6 -6
- package/dist/utils/common/index.esm.js.map +1 -1
- package/dist/utils/common/index.js +1 -1
- package/dist/utils/common/index.js.map +1 -1
- package/dist/utils/common-utility.d.ts +1 -1
- package/dist/utils/date-range/index.esm.js.map +1 -1
- package/dist/utils/date-range/index.js.map +1 -1
- package/dist/utils/i18n/index.esm.js.map +1 -1
- package/dist/utils/i18n/index.js.map +1 -1
- package/dist/utils/menu-filter/index.esm.js.map +1 -1
- package/dist/utils/menu-filter/index.js.map +1 -1
- package/dist/views/404/index.esm.js.map +1 -1
- package/dist/views/404/index.js.map +1 -1
- package/dist/views/afterAuth/dashboard/dashboard/index.esm.js.map +1 -1
- package/dist/views/afterAuth/dashboard/dashboard/index.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/actionCreator/index.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/reducer/index.esm.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/reducer/index.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/state/index.esm.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/state/index.js.map +1 -1
- package/dist/views/afterAuth/page-view/page-view/index.esm.js.map +1 -1
- package/dist/views/afterAuth/page-view/page-view/index.js.map +1 -1
- package/dist/views/afterAuth/page-view/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/views/afterAuth/page-view/redux/actionCreator/index.js.map +1 -1
- package/dist/views/afterAuth/page-view/redux/reducer/index.esm.js.map +1 -1
- package/dist/views/afterAuth/page-view/redux/reducer/index.js.map +1 -1
- package/dist/views/afterAuth/page-view/redux/state/index.esm.js.map +1 -1
- package/dist/views/afterAuth/page-view/redux/state/index.js.map +1 -1
- package/dist/views/afterAuth/page-view/utils/default-data/index.esm.js.map +1 -1
- package/dist/views/afterAuth/page-view/utils/default-data/index.js.map +1 -1
- package/dist/views/afterAuth/page-view/utils/local-data/index.esm.js.map +1 -1
- package/dist/views/afterAuth/page-view/utils/local-data/index.js.map +1 -1
- package/dist/views/beforeAuth/change-password/change-password/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/change-password/change-password/index.js.map +1 -1
- package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/grid-data/grid-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/grid-data/grid-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.js.map +1 -1
- package/dist/views/beforeAuth/components/list-content/column-raw/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/list-content/column-raw/index.js.map +1 -1
- package/dist/views/beforeAuth/components/list-content/list-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/list-content/list-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/share-modal-data/share-modal-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/share-modal-data/share-modal-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/shared-pages-data/shared-pages-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/shared-pages-data/shared-pages-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/user-dashboard-data/user-dashboard-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/user-dashboard-data/user-dashboard-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.js.map +1 -1
- package/dist/views/beforeAuth/forgot-password/forgot-password/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/forgot-password/forgot-password/index.js.map +1 -1
- package/dist/views/beforeAuth/landing/landing/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/landing/landing/index.js.map +1 -1
- package/dist/views/beforeAuth/reset-password/reset-password/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/reset-password/reset-password/index.js.map +1 -1
- package/dist/views/form-builder/custom-form/index.esm.js.map +1 -1
- package/dist/views/form-builder/custom-form/index.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/checkbox/index.esm.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/checkbox/index.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/column-width/index.esm.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/column-width/index.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/field-select/index.esm.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/field-select/index.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/section/index.esm.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/section/index.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/select/index.esm.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/select/index.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/table-form/index.esm.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/table-form/index.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/text/index.esm.js.map +1 -1
- package/dist/views/form-builder/element-edit-forms/text/index.js.map +1 -1
- package/dist/views/form-builder/field_properties/index.esm.js.map +1 -1
- package/dist/views/form-builder/field_properties/index.js.map +1 -1
- package/dist/views/form-builder/form-fields/index.esm.js.map +1 -1
- package/dist/views/form-builder/form-fields/index.js.map +1 -1
- package/dist/views/form-builder/redux/actionCreator/index.esm.js +1 -1
- package/dist/views/form-builder/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/views/form-builder/redux/actionCreator/index.js +1 -1
- package/dist/views/form-builder/redux/actionCreator/index.js.map +1 -1
- package/dist/views/form-builder/redux/reducer/index.esm.js.map +1 -1
- package/dist/views/form-builder/redux/reducer/index.js.map +1 -1
- package/dist/views/form-builder/redux/state/index.esm.js.map +1 -1
- package/dist/views/form-builder/redux/state/index.js.map +1 -1
- package/dist/views/form-builder/utils/common/index.esm.js.map +1 -1
- package/dist/views/form-builder/utils/common/index.js.map +1 -1
- package/dist/views/index.d.ts +8 -8
- package/dist/views/privateRoute/index.esm.js.map +1 -1
- package/dist/views/privateRoute/index.js.map +1 -1
- package/dist/views/template-editor/add-template/add-template/index.esm.js.map +1 -1
- package/dist/views/template-editor/add-template/add-template/index.js.map +1 -1
- package/dist/views/template-editor/company-selection-modal/company-selection-modal/index.esm.js.map +1 -1
- package/dist/views/template-editor/company-selection-modal/company-selection-modal/index.js.map +1 -1
- package/dist/views/template-editor/components/EditorCanvas/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/EditorCanvas/index.js.map +1 -1
- package/dist/views/template-editor/components/EditorHeader/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/EditorHeader/index.js.map +1 -1
- package/dist/views/template-editor/components/EditorSection/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/EditorSection/index.js.map +1 -1
- package/dist/views/template-editor/components/EditorSidebar/index.esm.js +1 -1
- package/dist/views/template-editor/components/EditorSidebar/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/EditorSidebar/index.js +1 -1
- package/dist/views/template-editor/components/EditorSidebar/index.js.map +1 -1
- package/dist/views/template-editor/components/SectionFlowEditor/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/SectionFlowEditor/index.js.map +1 -1
- package/dist/views/template-editor/components/SectionFormatPanel/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/SectionFormatPanel/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/AlignmentControl/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/AlignmentControl/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/ButtonControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/ButtonControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/CodeControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/CodeControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/DividerControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/DividerControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/ImageControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/ImageControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/SignatureControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/SignatureControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/TableControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/TableControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/TextControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/TextControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/border-control/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/border-control/index.js.map +1 -1
- package/dist/views/template-editor/edit-section-modal/edit-section-modal/index.esm.js.map +1 -1
- package/dist/views/template-editor/edit-section-modal/edit-section-modal/index.js.map +1 -1
- package/dist/views/template-editor/routes/index.esm.js.map +1 -1
- package/dist/views/template-editor/routes/index.js.map +1 -1
- package/dist/views/template-editor/template-modal/html-thumbnail-preview/index.esm.js.map +1 -1
- package/dist/views/template-editor/template-modal/html-thumbnail-preview/index.js.map +1 -1
- package/dist/views/template-editor/template-modal/template-modal/index.esm.js.map +1 -1
- package/dist/views/template-editor/template-modal/template-modal/index.js.map +1 -1
- package/dist/views/template-editor/template-name-modal/template-name-modal/index.esm.js.map +1 -1
- package/dist/views/template-editor/template-name-modal/template-name-modal/index.js.map +1 -1
- package/dist/views/template-editor/templates/index.esm.js +1 -1
- package/dist/views/template-editor/templates/index.esm.js.map +1 -1
- package/dist/views/template-editor/templates/index.js +1 -1
- package/dist/views/template-editor/templates/index.js.map +1 -1
- package/dist/views/template-editor/utils/common/index.esm.js.map +1 -1
- package/dist/views/template-editor/utils/common/index.js.map +1 -1
- package/dist/views/template-editor/utils/constant/index.esm.js.map +1 -1
- package/dist/views/template-editor/utils/constant/index.js.map +1 -1
- package/dist/views/template-editor/utils/default-data/index.esm.js.map +1 -1
- package/dist/views/template-editor/utils/default-data/index.js.map +1 -1
- package/dist/views/template-editor/utils/style-extractor/index.esm.js.map +1 -1
- package/dist/views/template-editor/utils/style-extractor/index.js.map +1 -1
- package/dist/vite-env.d.ts +23 -23
- package/package.json +299 -299
- package/src/styles/README.md +287 -287
- package/src/styles/all.scss +7 -7
- package/src/styles/animations.scss +5 -5
- package/src/styles/css/reset.css +1 -1
- package/src/styles/index.d.ts +1 -1
- package/src/styles/index.ts +1 -1
- package/src/styles/mixins.scss +5 -5
- package/src/styles/sass/main.scss +11 -11
- package/src/styles/utils.scss +5 -5
- package/src/styles/variables.scss +4 -4
- package/dist/node_modules/@glideapps/glide-data-grid-cells/node_modules/@toast-ui/react-editor/dist/esm/index/index.esm.js.map +0 -1
- package/dist/node_modules/@glideapps/glide-data-grid-cells/node_modules/@toast-ui/react-editor/dist/esm/index/index.js +0 -2
- package/dist/node_modules/@glideapps/glide-data-grid-cells/node_modules/@toast-ui/react-editor/dist/esm/index/index.js.map +0 -1
- package/dist/node_modules/material-react-table/node_modules/@tanstack/react-virtual/dist/esm/index/index.esm.js.map +0 -1
- package/dist/node_modules/material-react-table/node_modules/@tanstack/react-virtual/dist/esm/index/index.js +0 -2
- package/dist/node_modules/material-react-table/node_modules/@tanstack/react-virtual/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 */\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
|
+
{"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 +1 @@
|
|
|
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
|
+
{"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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../../../src/views/template-editor/utils/constant.ts"],"sourcesContent":["\
|
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/views/template-editor/utils/constant.ts"],"sourcesContent":["\
|
|
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 +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\";\
|
|
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 +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\";\
|
|
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 +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 */\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
|
+
{"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 +1 @@
|
|
|
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":"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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 */\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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"}
|