{"_id":"@duongtruongan/easy-email-extensions","_rev":"1-db608c0a178463986508b77541129d62","name":"@duongtruongan/easy-email-extensions","dist-tags":{"latest":"4.8.1"},"versions":{"4.8.0":{"name":"@duongtruongan/easy-email-extensions","license":"MIT","description":"Email editor","version":"4.8.0","author":{"name":"m-Ryan"},"repository":{"type":"git","url":"git+ssh://git@github.com/m-Ryan/easy-email.git"},"keywords":["email editor core"],"main":"lib/index.js","types":"lib/index.d.ts","scripts":{"dev":"vite","typings":"tsc --declaration --emitDeclarationOnly --project tsconfig.lib.json && tsc-alias -p tsconfig.alias.json","build":"rimraf lib && npm run typings   && vite build --config vite.config.ts","format":"eslint --fix  --ext .tsx,.ts,.tsx src/"},"husky":{"hooks":{"pre-commit":"yarn test && yarn lint-staged"}},"lint-staged":{"src/*.{js,jsx,ts,tsx}, example/*.{js,jsx,ts,tsx}":["yarn lint"]},"devDependencies":{"@types/lodash":"^4.14.178","@types/node":"^16.11.7","@types/react":"17.0.2","@types/react-dom":"^17.0.11","@typescript-eslint/eslint-plugin":"^4.28.3","@typescript-eslint/parser":"^4.28.3","@vitejs/plugin-react-refresh":"^1.3.6","cross-env":"^7.0.3","eslint":"^7.31.0","eslint-config-prettier":"^8.3.0","eslint-loader":"^4.0.2","eslint-plugin-import":"^2.23.4","eslint-plugin-prettier":"^3.4.0","eslint-plugin-react":"^7.24.0","eslint-plugin-react-hooks":"^4.2.0","lerna":"^4.0.0","less":"^4.1.2","react":"^17.0.2","react-dom":"^17.0.2","react-final-form":"^6.5.7","rollup-plugin-visualizer":"^5.5.2","sass":"^1.43.4","tsc-alias":"^1.4.1","typescript":"^4.4.4","vite":"^2.6.14","vite-plugin-html":"^2.1.1","vite-plugin-style-import":"^1.3.0"},"dependencies":{"@arco-design/web-react":"^2.36.1","@types/color":"^3.0.3","@types/react-color":"^3.0.6","@types/uuid":"^8.3.4","codemirror":"^5.63.3","color":"^4.2.3","final-form":"^4.20.4","final-form-arrays":"^3.0.2","final-form-set-field-touched":"^1.0.1","is-hotkey":"^0.2.0","lodash":"^4.17.21","mjml-browser":"^4.10.4","overlayscrollbars":"^1.13.2","overlayscrollbars-react":"^0.3.0","react-codemirror2":"^7.2.1","react-color":"^2.19.3","react-final-form-arrays":"^3.1.3","react-use":"^17.3.1"},"peerDependencies":{"@duongtruongan/easy-email-core":"^4.3.6","@duongtruongan/easy-email-editor":"^4.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-final-form":"^6.5.7"},"gitHead":"bb5757eb3146f55c31d4354f1480939c3af8efe1","publishConfig":{"access":"public"},"bugs":{"url":"https://github.com/m-Ryan/easy-email/issues"},"homepage":"https://github.com/m-Ryan/easy-email#readme","_id":"@duongtruongan/easy-email-extensions@4.8.0","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-bnSN4GdR7iCcdlZU1dl/q81er/TXZW0aQjYSW5+Hq8XEVF1PWj1awDXzr3mEKu0lmpXG86Q03wX6g05xLtMEyQ==","shasum":"888b52915829e70068a0cc637c6d5de2332ddef9","tarball":"https://registry.npmjs.org/@duongtruongan/easy-email-extensions/-/easy-email-extensions-4.8.0.tgz","fileCount":2,"unpackedSize":8035,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVtSY7k8lId1lwAA95NyqAkC/Ow/sJ5Y5rOxcgocKfEwIhAJgC6CDo+mL7ooS04wrqd5I9gCRWmi9btWsPma2rKyZN"}]},"_npmUser":{"name":"duongtruongan","email":"duongtruongan@outlook.com"},"directories":{},"maintainers":[{"name":"duongtruongan","email":"duongtruongan@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/easy-email-extensions_4.8.0_1702371924197_0.8504076394651381"},"_hasShrinkwrap":false},"4.8.1":{"name":"@duongtruongan/easy-email-extensions","license":"MIT","description":"Email editor","version":"4.8.1","author":{"name":"m-Ryan"},"repository":{"type":"git","url":"git+ssh://git@github.com/m-Ryan/easy-email.git"},"keywords":["email editor core"],"main":"lib/index.js","types":"lib/index.d.ts","scripts":{"dev":"vite","typings":"tsc --declaration --emitDeclarationOnly --project tsconfig.lib.json && tsc-alias -p tsconfig.alias.json","build":"rimraf lib && npm run typings   && vite build --config vite.config.ts","format":"eslint --fix  --ext .tsx,.ts,.tsx src/"},"husky":{"hooks":{"pre-commit":"yarn test && yarn lint-staged"}},"lint-staged":{"src/*.{js,jsx,ts,tsx}, example/*.{js,jsx,ts,tsx}":["yarn lint"]},"devDependencies":{"@types/lodash":"^4.14.178","@types/node":"^16.11.7","@types/react":"17.0.2","@types/react-dom":"^17.0.11","@typescript-eslint/eslint-plugin":"^4.28.3","@typescript-eslint/parser":"^4.28.3","@vitejs/plugin-react-refresh":"^1.3.6","cross-env":"^7.0.3","eslint":"^7.31.0","eslint-config-prettier":"^8.3.0","eslint-loader":"^4.0.2","eslint-plugin-import":"^2.23.4","eslint-plugin-prettier":"^3.4.0","eslint-plugin-react":"^7.24.0","eslint-plugin-react-hooks":"^4.2.0","lerna":"^4.0.0","less":"^4.1.2","react":"^17.0.2","react-dom":"^17.0.2","react-final-form":"^6.5.7","rollup-plugin-visualizer":"^5.5.2","sass":"^1.43.4","tsc-alias":"^1.4.1","typescript":"^4.4.4","vite":"^2.6.14","vite-plugin-html":"^2.1.1","vite-plugin-style-import":"^1.3.0"},"dependencies":{"@arco-design/web-react":"^2.36.1","@types/color":"^3.0.3","@types/react-color":"^3.0.6","@types/uuid":"^8.3.4","codemirror":"^5.63.3","color":"^4.2.3","final-form":"^4.20.4","final-form-arrays":"^3.0.2","final-form-set-field-touched":"^1.0.1","is-hotkey":"^0.2.0","lodash":"^4.17.21","mjml-browser":"^4.10.4","overlayscrollbars":"^1.13.2","overlayscrollbars-react":"^0.3.0","react-codemirror2":"^7.2.1","react-color":"^2.19.3","react-final-form-arrays":"^3.1.3","react-use":"^17.3.1"},"peerDependencies":{"@duongtruongan/easy-email-core":"^4.3.6","@duongtruongan/easy-email-editor":"^4.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-final-form":"^6.5.7"},"gitHead":"bb5757eb3146f55c31d4354f1480939c3af8efe1","publishConfig":{"access":"public"},"bugs":{"url":"https://github.com/m-Ryan/easy-email/issues"},"homepage":"https://github.com/m-Ryan/easy-email#readme","_id":"@duongtruongan/easy-email-extensions@4.8.1","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-axlWH6rHB+PYN4ODeUGp0++c/RVBFi7opddlQk6aiRr2iXe7i1SH3c67lgABLKrJn++BawSgtu/x59QR52Mong==","shasum":"38bf247a8798416e611a1df0cc2a59d33a62d2c6","tarball":"https://registry.npmjs.org/@duongtruongan/easy-email-extensions/-/easy-email-extensions-4.8.1.tgz","fileCount":186,"unpackedSize":7472859,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgKSW01YaqNJ449po5fSUQoHQay0vVbzHWVcN8Q5OOgAiEAt6cTNtVYJvI5xgf2Ycvx1VY6Z3LJtfzrBawxgBa/Z8w="}]},"_npmUser":{"name":"duongtruongan","email":"duongtruongan@outlook.com"},"directories":{},"maintainers":[{"name":"duongtruongan","email":"duongtruongan@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/easy-email-extensions_4.8.1_1702374694819_0.8005431665529934"},"_hasShrinkwrap":false}},"time":{"created":"2023-12-12T09:05:24.095Z","4.8.0":"2023-12-12T09:05:24.424Z","modified":"2023-12-12T09:51:35.223Z","4.8.1":"2023-12-12T09:51:35.065Z"},"maintainers":[{"name":"duongtruongan","email":"duongtruongan@outlook.com"}],"description":"Email editor","homepage":"https://github.com/m-Ryan/easy-email#readme","keywords":["email editor core"],"repository":{"type":"git","url":"git+ssh://git@github.com/m-Ryan/easy-email.git"},"author":{"name":"m-Ryan"},"bugs":{"url":"https://github.com/m-Ryan/easy-email/issues"},"license":"MIT","readme":"# Easy-email-extensions\n\n## Introduction\n\nProvide default UI components, when they don’t meet your needs, you can refer to it and write your own\n\n## usage\n\n```sh\n$ npm install --save easy-email-extensions\n```\n\nor\n\n```sh\n$ yarn add easy-email-extensions\n```\n\n```js\nimport React from 'react';\nimport { BlockManager, BasicType, AdvancedType } from '@duongtruongan/easy-email-core';\nimport { EmailEditor, EmailEditorProvider } from '@duongtruongan/easy-email-editor';\nimport { ExtensionProps, StandardLayout } from '@duongtruongan/easy-email-extensions';\nimport { useWindowSize } from 'react-use';\n\nimport '@duongtruongan/lib/style.css';\nimport '@duongtruongan/easy-email-extensions/lib/style.css';\n\nconst categories: ExtensionProps['categories'] = [\n  {\n    label: 'Content',\n    active: true,\n    blocks: [\n      {\n        type: AdvancedType.TEXT,\n      },\n      {\n        type: AdvancedType.IMAGE,\n        payload: { attributes: { padding: '0px 0px 0px 0px' } },\n      },\n      {\n        type: AdvancedType.BUTTON,\n      },\n      {\n        type: AdvancedType.SOCIAL,\n      },\n      {\n        type: AdvancedType.DIVIDER,\n      },\n      {\n        type: AdvancedType.SPACER,\n      },\n      {\n        type: AdvancedType.HERO,\n      },\n      {\n        type: AdvancedType.WRAPPER,\n      },\n    ],\n  },\n  {\n    label: 'Layout',\n    active: true,\n    displayType: 'column',\n    blocks: [\n      {\n        title: '2 columns',\n        payload: [\n          ['50%', '50%'],\n          ['33%', '67%'],\n          ['67%', '33%'],\n          ['25%', '75%'],\n          ['75%', '25%'],\n        ],\n      },\n      {\n        title: '3 columns',\n        payload: [\n          ['33.33%', '33.33%', '33.33%'],\n          ['25%', '25%', '50%'],\n          ['50%', '25%', '25%'],\n        ],\n      },\n      {\n        title: '4 columns',\n        payload: [[['25%', '25%', '25%', '25%']]],\n      },\n    ],\n  },\n];\n\nconst initialValues = {\n  subject: 'Welcome to Easy-email',\n  subTitle: 'Nice to meet you!',\n  content: BlockManager.getBlockByType(BasicType.PAGE)!.create({}),\n};\n\nexport default function App() {\n  const { width } = useWindowSize();\n\n  const smallScene = width < 1400;\n\n  return (\n    <EmailEditorProvider\n      data={initialValues}\n      height={'calc(100vh - 72px)'}\n      autoComplete\n      dashed={false}\n    >\n      {({ values }) => {\n        return (\n          <StandardLayout\n            compact={!smallScene}\n            categories={categories}\n            showSourceCode={true}\n          >\n            <EmailEditor />\n          </StandardLayout>\n        );\n      }}\n    </EmailEditorProvider>\n  );\n}\n\n```\n\n## Extensions\n\n- `AttributePanel`\n\n  - Basic block configuration panel\n\n  - <img src=\"https://assets.maocanhua.cn/3e74a61d-ab22-4cf3-afc9-d511b82e08cd-image.png\" alt=\"AttributePanel\">\n\n  - You can add or overwrite\n\n    ```tsx\n    import { BlockAttributeConfigurationManager } from '@duongtruongan/easy-email-extensions';\n\n    BlockAttributeConfigurationManager.add({\n      [BasicType.TEXT]: () => <div>will be overwrite `Text`</div>,\n    });\n    ```\n\n  - Hide Page block subject & subTitle\n\n    ```tsx\n    const DefaultPageConfigPanel = BlockAttributeConfigurationManager.get(BasicType.PAGE);\n    BlockAttributeConfigurationManager.add({\n      [BasicType.PAGE]: () => (\n        <DefaultPageConfigPanel\n          hideSubject\n          hideSubTitle\n        />\n      ),\n    });\n    ```\n\n- `InteractivePrompt`\n\n  - block hover and focus style\n\n  - <img src=\"https://assets.maocanhua.cn/298d72d6-a509-4cd2-85c7-dfb915971620-image.png\" alt=\"InteractivePrompt\">\n\n  - No configuration items\n\n- `BlockLayer`\n\n  - <img src=\"https://assets.maocanhua.cn/de1f5211-350e-43c9-9c99-d97a2f196e04-image.png\" alt=\"ShortcutToolbar\">\n  - No configuration items\n\n- `ShortcutToolbar`\n\n  - <img src=\"https://assets.maocanhua.cn/f0e2ccc6-0627-472b-ad78-bc92bdb46ad1-image.png\">\n  - You can add or overwrite popover's preset blocks\n\n    ```tsx\n    import { BasicType } from '@duongtruongan/easy-email-core';\n    import {\n      BlockMarketManager,\n      BlockMaskWrapper,\n    } from '@duongtruongan/easy-email-extensions';\n\n    BlockMarketManager.addCategories([\n      {\n        title: 'Custom',\n        name: 'custom',\n        blocks: [\n          {\n            type: BasicType.TEXT,\n            title: 'Text',\n            description: 'This block allows you to display text in your email.',\n            component: () => {\n              return (\n                <BlockMaskWrapper\n                  type={BasicType.TEXT}\n                  payload={{\n                    attributes: {\n                      'font-size': '20px',\n                      align: 'center',\n                      padding: '0px 0px 0px 0px',\n                      color: '#4A90E2',\n                    },\n                    data: {\n                      value: {\n                        content: '20px',\n                      },\n                    },\n                  }}\n                >\n                  <div style={{ fontSize: 20, width: '100%', paddingLeft: 20 }}>20px</div>\n                </BlockMaskWrapper>\n              );\n            },\n          },\n        ],\n      },\n    ]);\n    ```\n\n- `SimpleLayout`\n\n  - props\n    - showSourceCode\n    - defaultShowLayer\n\n- `StandardLayout`\n\n  - props\n    - compact\n    - categories\n    - showSourceCode\n","readmeFilename":"readme.md"}