@strapi/email 5.37.0 → 5.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/admin/constants.js.map +1 -1
  2. package/dist/admin/constants.mjs.map +1 -1
  3. package/dist/admin/index.js.map +1 -1
  4. package/dist/admin/index.mjs.map +1 -1
  5. package/dist/admin/pages/Settings.js +399 -47
  6. package/dist/admin/pages/Settings.js.map +1 -1
  7. package/dist/admin/pages/Settings.mjs +402 -50
  8. package/dist/admin/pages/Settings.mjs.map +1 -1
  9. package/dist/admin/shared/email-address-parser.js +245 -0
  10. package/dist/admin/shared/email-address-parser.js.map +1 -0
  11. package/dist/admin/shared/email-address-parser.mjs +243 -0
  12. package/dist/admin/shared/email-address-parser.mjs.map +1 -0
  13. package/dist/admin/translations/de.json.js +18 -2
  14. package/dist/admin/translations/de.json.js.map +1 -1
  15. package/dist/admin/translations/de.json.mjs +18 -2
  16. package/dist/admin/translations/de.json.mjs.map +1 -1
  17. package/dist/admin/translations/en.json.js +23 -1
  18. package/dist/admin/translations/en.json.js.map +1 -1
  19. package/dist/admin/translations/en.json.mjs +23 -1
  20. package/dist/admin/translations/en.json.mjs.map +1 -1
  21. package/dist/admin/utils/getYupInnerErrors.js.map +1 -1
  22. package/dist/admin/utils/getYupInnerErrors.mjs.map +1 -1
  23. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
  24. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
  25. package/dist/admin/utils/schema.js.map +1 -1
  26. package/dist/admin/utils/schema.mjs.map +1 -1
  27. package/dist/server/bootstrap.js.map +1 -1
  28. package/dist/server/bootstrap.mjs.map +1 -1
  29. package/dist/server/config.js.map +1 -1
  30. package/dist/server/config.mjs.map +1 -1
  31. package/dist/server/controllers/email.js +33 -1
  32. package/dist/server/controllers/email.js.map +1 -1
  33. package/dist/server/controllers/email.mjs +33 -1
  34. package/dist/server/controllers/email.mjs.map +1 -1
  35. package/dist/server/controllers/index.js.map +1 -1
  36. package/dist/server/controllers/index.mjs.map +1 -1
  37. package/dist/server/index.js +8 -8
  38. package/dist/server/index.js.map +1 -1
  39. package/dist/server/index.mjs.map +1 -1
  40. package/dist/server/middlewares/index.js.map +1 -1
  41. package/dist/server/middlewares/index.mjs.map +1 -1
  42. package/dist/server/middlewares/rateLimit.js.map +1 -1
  43. package/dist/server/middlewares/rateLimit.mjs.map +1 -1
  44. package/dist/server/routes/admin.js +18 -0
  45. package/dist/server/routes/admin.js.map +1 -1
  46. package/dist/server/routes/admin.mjs +18 -0
  47. package/dist/server/routes/admin.mjs.map +1 -1
  48. package/dist/server/routes/content-api.js.map +1 -1
  49. package/dist/server/routes/content-api.mjs.map +1 -1
  50. package/dist/server/routes/index.js.map +1 -1
  51. package/dist/server/routes/index.mjs.map +1 -1
  52. package/dist/server/routes/validation/email.js.map +1 -1
  53. package/dist/server/routes/validation/email.mjs.map +1 -1
  54. package/dist/server/services/email.js.map +1 -1
  55. package/dist/server/services/email.mjs +1 -1
  56. package/dist/server/services/email.mjs.map +1 -1
  57. package/dist/server/services/index.js.map +1 -1
  58. package/dist/server/services/index.mjs.map +1 -1
  59. package/dist/server/src/bootstrap.d.ts.map +1 -1
  60. package/dist/server/src/controllers/email.d.ts +1 -0
  61. package/dist/server/src/controllers/email.d.ts.map +1 -1
  62. package/dist/server/src/controllers/index.d.ts +1 -0
  63. package/dist/server/src/controllers/index.d.ts.map +1 -1
  64. package/dist/server/src/index.d.ts +1 -0
  65. package/dist/server/src/index.d.ts.map +1 -1
  66. package/dist/server/src/routes/admin.d.ts.map +1 -1
  67. package/dist/shared/email-address-parser.d.ts +81 -0
  68. package/dist/shared/email-address-parser.d.ts.map +1 -0
  69. package/dist/shared/types.d.ts +17 -0
  70. package/dist/shared/types.d.ts.map +1 -1
  71. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../admin/src/constants.ts"],"sourcesContent":["export const PERMISSIONS = {\n // This permission regards the main component (App) and is used to tell\n // If the plugin link should be displayed in the menu\n // And also if the plugin is accessible. This use case is found when a user types the url of the\n // plugin directly in the browser\n settings: [{ action: 'plugin::email.settings.read', subject: null }],\n};\n"],"names":["PERMISSIONS","settings","action","subject"],"mappings":";;MAAaA,WAAc,GAAA;;;;;IAKzBC,QAAU,EAAA;AAAC,QAAA;YAAEC,MAAQ,EAAA,6BAAA;YAA+BC,OAAS,EAAA;AAAK;AAAE;AACtE;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../admin/src/constants.ts"],"sourcesContent":["export const PERMISSIONS = {\n // This permission regards the main component (App) and is used to tell\n // If the plugin link should be displayed in the menu\n // And also if the plugin is accessible. This use case is found when a user types the url of the\n // plugin directly in the browser\n settings: [{ action: 'plugin::email.settings.read', subject: null }],\n};\n"],"names":["PERMISSIONS","settings","action","subject"],"mappings":";;MAAaA,WAAAA,GAAc;;;;;IAKzBC,QAAAA,EAAU;AAAC,QAAA;YAAEC,MAAAA,EAAQ,6BAAA;YAA+BC,OAAAA,EAAS;AAAK;AAAE;AACtE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../admin/src/constants.ts"],"sourcesContent":["export const PERMISSIONS = {\n // This permission regards the main component (App) and is used to tell\n // If the plugin link should be displayed in the menu\n // And also if the plugin is accessible. This use case is found when a user types the url of the\n // plugin directly in the browser\n settings: [{ action: 'plugin::email.settings.read', subject: null }],\n};\n"],"names":["PERMISSIONS","settings","action","subject"],"mappings":"MAAaA,WAAc,GAAA;;;;;IAKzBC,QAAU,EAAA;AAAC,QAAA;YAAEC,MAAQ,EAAA,6BAAA;YAA+BC,OAAS,EAAA;AAAK;AAAE;AACtE;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../admin/src/constants.ts"],"sourcesContent":["export const PERMISSIONS = {\n // This permission regards the main component (App) and is used to tell\n // If the plugin link should be displayed in the menu\n // And also if the plugin is accessible. This use case is found when a user types the url of the\n // plugin directly in the browser\n settings: [{ action: 'plugin::email.settings.read', subject: null }],\n};\n"],"names":["PERMISSIONS","settings","action","subject"],"mappings":"MAAaA,WAAAA,GAAc;;;;;IAKzBC,QAAAA,EAAU;AAAC,QAAA;YAAEC,MAAAA,EAAQ,6BAAA;YAA+BC,OAAAA,EAAS;AAAK;AAAE;AACtE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../admin/src/index.ts"],"sourcesContent":["import { PERMISSIONS } from './constants';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n // TODO typing app in strapi/types as every plugin needs it\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n register(app: any) {\n // Create the email settings section\n app.createSettingSection(\n {\n id: 'email',\n intlLabel: { id: 'email.SettingsNav.section-label', defaultMessage: 'Email Plugin' },\n },\n [\n {\n intlLabel: {\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Settings',\n },\n id: 'settings',\n to: 'email',\n Component: () =>\n import('./pages/Settings').then((mod) => ({\n default: mod.ProtectedSettingsPage,\n })),\n permissions: PERMISSIONS.settings,\n },\n ]\n );\n app.registerPlugin({\n id: 'email',\n name: 'email',\n });\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n bootstrap() {},\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, 'email'),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["admin","register","app","createSettingSection","id","intlLabel","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","PERMISSIONS","settings","registerPlugin","name","bootstrap","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,KAAkC,GAAA;;;AAGtCC,IAAAA,QAAAA,CAAAA,CAASC,GAAQ,EAAA;;AAEfA,QAAAA,GAAAA,CAAIC,oBAAoB,CACtB;YACEC,EAAI,EAAA,OAAA;YACJC,SAAW,EAAA;gBAAED,EAAI,EAAA,iCAAA;gBAAmCE,cAAgB,EAAA;AAAe;SAErF,EAAA;AACE,YAAA;gBACED,SAAW,EAAA;oBACTD,EAAI,EAAA,mCAAA;oBACJE,cAAgB,EAAA;AAClB,iBAAA;gBACAF,EAAI,EAAA,UAAA;gBACJG,EAAI,EAAA,OAAA;gBACJC,SAAW,EAAA,IACT,oDAAO,qBAAA,KAAA,CAAoBC,IAAI,CAAC,CAACC,OAAS;AACxCC,4BAAAA,OAAAA,EAASD,IAAIE;yBACf,CAAA,CAAA;AACFC,gBAAAA,WAAAA,EAAaC,sBAAYC;AAC3B;AACD,SAAA,CAAA;AAEHb,QAAAA,GAAAA,CAAIc,cAAc,CAAC;YACjBZ,EAAI,EAAA,OAAA;YACJa,IAAM,EAAA;AACR,SAAA,CAAA;AACF,KAAA;;IAEAC,SAAa,CAAA,GAAA,EAAA;IACb,MAAMC,aAAAA,CAAAA,CAAc,EAAEC,OAAO,EAAyB,EAAA;QACpD,MAAMC,aAAAA,GAAgB,MAAMC,OAAQC,CAAAA,GAAG,CACrCH,OAAQI,CAAAA,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACX,YAAA,OAAO,iCAAM,CAAC,CAAC,eAAe,EAAEA,MAAO,CAAA,KAAK,CAAC,CAAA,CAC1ChB,IAAI,CAAC,CAAC,EAAEE,OAAAA,EAASe,IAAI,EAAE,GAAA;gBACtB,OAAO;AACLA,oBAAAA,IAAAA,EAAMC,kDAAyBD,IAAM,EAAA,OAAA,CAAA;AACrCD,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA,CACCG,KAAK,CAAC,IAAA;gBACL,OAAO;AACLF,oBAAAA,IAAAA,EAAM,EAAC;AACPD,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA;AACJ,SAAA,CAAA,CAAA;QAGF,OAAOH,OAAAA,CAAQO,OAAO,CAACR,aAAAA,CAAAA;AACzB;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../admin/src/index.ts"],"sourcesContent":["import { PERMISSIONS } from './constants';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n // TODO typing app in strapi/types as every plugin needs it\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n register(app: any) {\n // Create the email settings section\n app.createSettingSection(\n {\n id: 'email',\n intlLabel: { id: 'email.SettingsNav.section-label', defaultMessage: 'Email Plugin' },\n },\n [\n {\n intlLabel: {\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Settings',\n },\n id: 'settings',\n to: 'email',\n Component: () =>\n import('./pages/Settings').then((mod) => ({\n default: mod.ProtectedSettingsPage,\n })),\n permissions: PERMISSIONS.settings,\n },\n ]\n );\n app.registerPlugin({\n id: 'email',\n name: 'email',\n });\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n bootstrap() {},\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, 'email'),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["admin","register","app","createSettingSection","id","intlLabel","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","PERMISSIONS","settings","registerPlugin","name","bootstrap","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,KAAAA,GAAkC;;;AAGtCC,IAAAA,QAAAA,CAAAA,CAASC,GAAQ,EAAA;;AAEfA,QAAAA,GAAAA,CAAIC,oBAAoB,CACtB;YACEC,EAAAA,EAAI,OAAA;YACJC,SAAAA,EAAW;gBAAED,EAAAA,EAAI,iCAAA;gBAAmCE,cAAAA,EAAgB;AAAe;SACrF,EACA;AACE,YAAA;gBACED,SAAAA,EAAW;oBACTD,EAAAA,EAAI,mCAAA;oBACJE,cAAAA,EAAgB;AAClB,iBAAA;gBACAF,EAAAA,EAAI,UAAA;gBACJG,EAAAA,EAAI,OAAA;gBACJC,SAAAA,EAAW,IACT,oDAAO,qBAAA,KAAA,CAAoBC,IAAI,CAAC,CAACC,OAAS;AACxCC,4BAAAA,OAAAA,EAASD,IAAIE;yBACf,CAAA,CAAA;AACFC,gBAAAA,WAAAA,EAAaC,sBAAYC;AAC3B;AACD,SAAA,CAAA;AAEHb,QAAAA,GAAAA,CAAIc,cAAc,CAAC;YACjBZ,EAAAA,EAAI,OAAA;YACJa,IAAAA,EAAM;AACR,SAAA,CAAA;AACF,IAAA,CAAA;;IAEAC,SAAAA,CAAAA,GAAAA,CAAa,CAAA;IACb,MAAMC,aAAAA,CAAAA,CAAc,EAAEC,OAAO,EAAyB,EAAA;QACpD,MAAMC,aAAAA,GAAgB,MAAMC,OAAAA,CAAQC,GAAG,CACrCH,OAAAA,CAAQI,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACX,YAAA,OAAO,iCAAM,CAAC,CAAC,eAAe,EAAEA,MAAAA,CAAO,KAAK,CAAC,CAAA,CAC1ChB,IAAI,CAAC,CAAC,EAAEE,OAAAA,EAASe,IAAI,EAAE,GAAA;gBACtB,OAAO;AACLA,oBAAAA,IAAAA,EAAMC,kDAAyBD,IAAAA,EAAM,OAAA,CAAA;AACrCD,oBAAAA;AACF,iBAAA;AACF,YAAA,CAAA,CAAA,CACCG,KAAK,CAAC,IAAA;gBACL,OAAO;AACLF,oBAAAA,IAAAA,EAAM,EAAC;AACPD,oBAAAA;AACF,iBAAA;AACF,YAAA,CAAA,CAAA;AACJ,QAAA,CAAA,CAAA,CAAA;QAGF,OAAOH,OAAAA,CAAQO,OAAO,CAACR,aAAAA,CAAAA;AACzB,IAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../admin/src/index.ts"],"sourcesContent":["import { PERMISSIONS } from './constants';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n // TODO typing app in strapi/types as every plugin needs it\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n register(app: any) {\n // Create the email settings section\n app.createSettingSection(\n {\n id: 'email',\n intlLabel: { id: 'email.SettingsNav.section-label', defaultMessage: 'Email Plugin' },\n },\n [\n {\n intlLabel: {\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Settings',\n },\n id: 'settings',\n to: 'email',\n Component: () =>\n import('./pages/Settings').then((mod) => ({\n default: mod.ProtectedSettingsPage,\n })),\n permissions: PERMISSIONS.settings,\n },\n ]\n );\n app.registerPlugin({\n id: 'email',\n name: 'email',\n });\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n bootstrap() {},\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, 'email'),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["admin","register","app","createSettingSection","id","intlLabel","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","PERMISSIONS","settings","registerPlugin","name","bootstrap","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,KAAkC,GAAA;;;AAGtCC,IAAAA,QAAAA,CAAAA,CAASC,GAAQ,EAAA;;AAEfA,QAAAA,GAAAA,CAAIC,oBAAoB,CACtB;YACEC,EAAI,EAAA,OAAA;YACJC,SAAW,EAAA;gBAAED,EAAI,EAAA,iCAAA;gBAAmCE,cAAgB,EAAA;AAAe;SAErF,EAAA;AACE,YAAA;gBACED,SAAW,EAAA;oBACTD,EAAI,EAAA,mCAAA;oBACJE,cAAgB,EAAA;AAClB,iBAAA;gBACAF,EAAI,EAAA,UAAA;gBACJG,EAAI,EAAA,OAAA;gBACJC,SAAW,EAAA,IACT,OAAO,sBAAA,CAAA,CAAoBC,IAAI,CAAC,CAACC,OAAS;AACxCC,4BAAAA,OAAAA,EAASD,IAAIE;yBACf,CAAA,CAAA;AACFC,gBAAAA,WAAAA,EAAaC,YAAYC;AAC3B;AACD,SAAA,CAAA;AAEHb,QAAAA,GAAAA,CAAIc,cAAc,CAAC;YACjBZ,EAAI,EAAA,OAAA;YACJa,IAAM,EAAA;AACR,SAAA,CAAA;AACF,KAAA;;IAEAC,SAAa,CAAA,GAAA,EAAA;IACb,MAAMC,aAAAA,CAAAA,CAAc,EAAEC,OAAO,EAAyB,EAAA;QACpD,MAAMC,aAAAA,GAAgB,MAAMC,OAAQC,CAAAA,GAAG,CACrCH,OAAQI,CAAAA,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACX,YAAA,OAAO,iCAAM,CAAC,CAAC,eAAe,EAAEA,MAAO,CAAA,KAAK,CAAC,CAAA,CAC1ChB,IAAI,CAAC,CAAC,EAAEE,OAAAA,EAASe,IAAI,EAAE,GAAA;gBACtB,OAAO;AACLA,oBAAAA,IAAAA,EAAMC,yBAAyBD,IAAM,EAAA,OAAA,CAAA;AACrCD,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA,CACCG,KAAK,CAAC,IAAA;gBACL,OAAO;AACLF,oBAAAA,IAAAA,EAAM,EAAC;AACPD,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA;AACJ,SAAA,CAAA,CAAA;QAGF,OAAOH,OAAAA,CAAQO,OAAO,CAACR,aAAAA,CAAAA;AACzB;AACF;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../admin/src/index.ts"],"sourcesContent":["import { PERMISSIONS } from './constants';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n // TODO typing app in strapi/types as every plugin needs it\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n register(app: any) {\n // Create the email settings section\n app.createSettingSection(\n {\n id: 'email',\n intlLabel: { id: 'email.SettingsNav.section-label', defaultMessage: 'Email Plugin' },\n },\n [\n {\n intlLabel: {\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Settings',\n },\n id: 'settings',\n to: 'email',\n Component: () =>\n import('./pages/Settings').then((mod) => ({\n default: mod.ProtectedSettingsPage,\n })),\n permissions: PERMISSIONS.settings,\n },\n ]\n );\n app.registerPlugin({\n id: 'email',\n name: 'email',\n });\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n bootstrap() {},\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, 'email'),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["admin","register","app","createSettingSection","id","intlLabel","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","PERMISSIONS","settings","registerPlugin","name","bootstrap","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,KAAAA,GAAkC;;;AAGtCC,IAAAA,QAAAA,CAAAA,CAASC,GAAQ,EAAA;;AAEfA,QAAAA,GAAAA,CAAIC,oBAAoB,CACtB;YACEC,EAAAA,EAAI,OAAA;YACJC,SAAAA,EAAW;gBAAED,EAAAA,EAAI,iCAAA;gBAAmCE,cAAAA,EAAgB;AAAe;SACrF,EACA;AACE,YAAA;gBACED,SAAAA,EAAW;oBACTD,EAAAA,EAAI,mCAAA;oBACJE,cAAAA,EAAgB;AAClB,iBAAA;gBACAF,EAAAA,EAAI,UAAA;gBACJG,EAAAA,EAAI,OAAA;gBACJC,SAAAA,EAAW,IACT,OAAO,sBAAA,CAAA,CAAoBC,IAAI,CAAC,CAACC,OAAS;AACxCC,4BAAAA,OAAAA,EAASD,IAAIE;yBACf,CAAA,CAAA;AACFC,gBAAAA,WAAAA,EAAaC,YAAYC;AAC3B;AACD,SAAA,CAAA;AAEHb,QAAAA,GAAAA,CAAIc,cAAc,CAAC;YACjBZ,EAAAA,EAAI,OAAA;YACJa,IAAAA,EAAM;AACR,SAAA,CAAA;AACF,IAAA,CAAA;;IAEAC,SAAAA,CAAAA,GAAAA,CAAa,CAAA;IACb,MAAMC,aAAAA,CAAAA,CAAc,EAAEC,OAAO,EAAyB,EAAA;QACpD,MAAMC,aAAAA,GAAgB,MAAMC,OAAAA,CAAQC,GAAG,CACrCH,OAAAA,CAAQI,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACX,YAAA,OAAO,iCAAM,CAAC,CAAC,eAAe,EAAEA,MAAAA,CAAO,KAAK,CAAC,CAAA,CAC1ChB,IAAI,CAAC,CAAC,EAAEE,OAAAA,EAASe,IAAI,EAAE,GAAA;gBACtB,OAAO;AACLA,oBAAAA,IAAAA,EAAMC,yBAAyBD,IAAAA,EAAM,OAAA,CAAA;AACrCD,oBAAAA;AACF,iBAAA;AACF,YAAA,CAAA,CAAA,CACCG,KAAK,CAAC,IAAA;gBACL,OAAO;AACLF,oBAAAA,IAAAA,EAAM,EAAC;AACPD,oBAAAA;AACF,iBAAA;AACF,YAAA,CAAA,CAAA;AACJ,QAAA,CAAA,CAAA,CAAA;QAGF,OAAOH,OAAAA,CAAQO,OAAO,CAACR,aAAAA,CAAAA;AACzB,IAAA;AACF;;;;"}
@@ -9,6 +9,7 @@ var reactIntl = require('react-intl');
9
9
  var reactQuery = require('react-query');
10
10
  var styledComponents = require('styled-components');
11
11
  var yup = require('yup');
12
+ var emailAddressParser = require('../shared/email-address-parser.js');
12
13
  var constants = require('../constants.js');
13
14
  var getYupInnerErrors = require('../utils/getYupInnerErrors.js');
14
15
  var schema = require('../utils/schema.js');
@@ -35,6 +36,190 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
35
36
  const DocumentationLink = styledComponents.styled.a`
36
37
  color: ${({ theme })=>theme.colors.primary600};
37
38
  `;
39
+ const FEATURE_LABELS = {
40
+ dkim: {
41
+ id: 'email.Settings.capabilities.feature.dkim',
42
+ defaultMessage: 'DKIM'
43
+ },
44
+ pool: {
45
+ id: 'email.Settings.capabilities.feature.pool',
46
+ defaultMessage: 'Connection pool'
47
+ },
48
+ rateLimiting: {
49
+ id: 'email.Settings.capabilities.feature.rateLimiting',
50
+ defaultMessage: 'Rate limiting'
51
+ },
52
+ oauth2: {
53
+ id: 'email.Settings.capabilities.feature.oauth2',
54
+ defaultMessage: 'OAuth2'
55
+ },
56
+ requireTLS: {
57
+ id: 'email.Settings.capabilities.feature.requireTLS',
58
+ defaultMessage: 'Require TLS'
59
+ }
60
+ };
61
+ const CapabilitiesSection = ({ capabilities, isIdle, formatMessage })=>{
62
+ const transport = capabilities.transport;
63
+ const auth = capabilities.auth;
64
+ const features = capabilities.features ?? [];
65
+ const encryptionLabel = transport?.secure === true ? 'TLS' : transport?.port === 587 ? 'STARTTLS' : transport?.port === 465 ? 'TLS' : 'None';
66
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
67
+ direction: "column",
68
+ alignItems: "stretch",
69
+ gap: 4,
70
+ children: [
71
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
72
+ direction: "column",
73
+ alignItems: "stretch",
74
+ gap: 1,
75
+ children: [
76
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
77
+ variant: "delta",
78
+ tag: "h2",
79
+ children: formatMessage({
80
+ id: 'email.Settings.capabilities.title',
81
+ defaultMessage: 'Provider capabilities'
82
+ })
83
+ }),
84
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
85
+ children: formatMessage({
86
+ id: 'email.Settings.capabilities.subtitle',
87
+ defaultMessage: 'Current SMTP configuration and enabled features'
88
+ })
89
+ })
90
+ ]
91
+ }),
92
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
93
+ gap: 5,
94
+ children: [
95
+ transport && (transport.host || transport.port) && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
96
+ col: 6,
97
+ xs: 12,
98
+ direction: "column",
99
+ alignItems: "stretch",
100
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
101
+ name: "smtp-server",
102
+ children: [
103
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
104
+ children: formatMessage({
105
+ id: 'email.Settings.capabilities.label.smtpServer',
106
+ defaultMessage: 'SMTP server'
107
+ })
108
+ }),
109
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
110
+ disabled: true,
111
+ readOnly: true,
112
+ value: transport.host && transport.port ? `${transport.host}:${transport.port}` : transport.host || String(transport.port)
113
+ })
114
+ ]
115
+ })
116
+ }),
117
+ transport && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
118
+ col: 6,
119
+ xs: 12,
120
+ direction: "column",
121
+ alignItems: "stretch",
122
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
123
+ name: "encryption",
124
+ children: [
125
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
126
+ children: formatMessage({
127
+ id: 'email.Settings.capabilities.label.encryption',
128
+ defaultMessage: 'Encryption'
129
+ })
130
+ }),
131
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
132
+ disabled: true,
133
+ readOnly: true,
134
+ value: encryptionLabel
135
+ })
136
+ ]
137
+ })
138
+ }),
139
+ auth && (auth.type || auth.user) && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
140
+ col: 6,
141
+ xs: 12,
142
+ direction: "column",
143
+ alignItems: "stretch",
144
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
145
+ name: "auth-type",
146
+ children: [
147
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
148
+ children: formatMessage({
149
+ id: 'email.Settings.capabilities.label.authType',
150
+ defaultMessage: 'Authentication'
151
+ })
152
+ }),
153
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
154
+ disabled: true,
155
+ readOnly: true,
156
+ value: auth.type ? auth.user ? `${auth.type} (${auth.user})` : auth.type : auth.user || 'None'
157
+ })
158
+ ]
159
+ })
160
+ }),
161
+ transport?.pool && isIdle !== undefined && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
162
+ col: 6,
163
+ xs: 12,
164
+ direction: "column",
165
+ alignItems: "stretch",
166
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
167
+ name: "pool-status",
168
+ children: [
169
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
170
+ children: formatMessage({
171
+ id: 'email.Settings.capabilities.label.poolStatus',
172
+ defaultMessage: 'Pool status'
173
+ })
174
+ }),
175
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Badge, {
176
+ backgroundColor: isIdle ? 'success100' : 'primary100',
177
+ textColor: isIdle ? 'success700' : 'primary700',
178
+ children: isIdle ? formatMessage({
179
+ id: 'email.Settings.capabilities.poolStatus.idle',
180
+ defaultMessage: 'Idle'
181
+ }) : formatMessage({
182
+ id: 'email.Settings.capabilities.poolStatus.active',
183
+ defaultMessage: 'Active'
184
+ })
185
+ })
186
+ ]
187
+ })
188
+ }),
189
+ features.length > 0 && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
190
+ col: 12,
191
+ xs: 12,
192
+ direction: "column",
193
+ alignItems: "stretch",
194
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
195
+ name: "features",
196
+ children: [
197
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
198
+ children: formatMessage({
199
+ id: 'email.Settings.capabilities.label.features',
200
+ defaultMessage: 'Enabled features'
201
+ })
202
+ }),
203
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
204
+ gap: 2,
205
+ wrap: "wrap",
206
+ children: features.map((f)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Badge, {
207
+ backgroundColor: "neutral100",
208
+ textColor: "neutral700",
209
+ children: formatMessage(FEATURE_LABELS[f] ?? {
210
+ id: `email.Settings.capabilities.feature.${f}`,
211
+ defaultMessage: f
212
+ })
213
+ }, f))
214
+ })
215
+ ]
216
+ })
217
+ })
218
+ ]
219
+ })
220
+ ]
221
+ });
222
+ };
38
223
  const ProtectedSettingsPage = ()=>/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Protect, {
39
224
  permissions: constants.PERMISSIONS.settings,
40
225
  children: /*#__PURE__*/ jsxRuntime.jsx(SettingsPage, {})
@@ -53,8 +238,13 @@ const SettingsPage = ()=>{
53
238
  'settings'
54
239
  ], async ()=>{
55
240
  const res = await get('/email/settings');
56
- const { data: { config } } = res;
57
- return config;
241
+ const { data: { config, supportsVerify, capabilities, isIdle } } = res;
242
+ return {
243
+ ...config,
244
+ supportsVerify,
245
+ capabilities,
246
+ isIdle
247
+ };
58
248
  });
59
249
  const mutation = reactQuery.useMutation(async (body)=>{
60
250
  await post('/email/test', body);
@@ -83,6 +273,35 @@ const SettingsPage = ()=>{
83
273
  },
84
274
  retry: false
85
275
  });
276
+ const [connectionStatus, setConnectionStatus] = React__namespace.useState('idle');
277
+ const verifyMutation = reactQuery.useMutation(async ()=>{
278
+ await post('/email/verify', {});
279
+ }, {
280
+ onMutate () {
281
+ setConnectionStatus('loading');
282
+ },
283
+ onError () {
284
+ setConnectionStatus('error');
285
+ toggleNotification({
286
+ type: 'danger',
287
+ message: formatMessage({
288
+ id: 'email.Settings.email.plugin.notification.verify.error',
289
+ defaultMessage: 'Connection verification failed'
290
+ })
291
+ });
292
+ },
293
+ onSuccess () {
294
+ setConnectionStatus('success');
295
+ toggleNotification({
296
+ type: 'success',
297
+ message: formatMessage({
298
+ id: 'email.Settings.email.plugin.notification.verify.success',
299
+ defaultMessage: 'Connection verified successfully'
300
+ })
301
+ });
302
+ },
303
+ retry: false
304
+ });
86
305
  React__namespace.useEffect(()=>{
87
306
  schema.schema.validate({
88
307
  email: testAddress
@@ -197,81 +416,200 @@ const SettingsPage = ()=>{
197
416
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
198
417
  gap: 5,
199
418
  children: [
200
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
201
- col: 6,
202
- xs: 12,
203
- direction: "column",
204
- alignItems: "stretch",
205
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
206
- name: "shipper-email",
419
+ (()=>{
420
+ const parsedFrom = emailAddressParser.parseEmailAddress(data.settings.defaultFrom);
421
+ const parsedReplyTo = emailAddressParser.parseEmailAddress(data.settings.defaultReplyTo);
422
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
207
423
  children: [
208
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
209
- children: formatMessage({
210
- id: 'email.Settings.email.plugin.label.defaultFrom',
211
- defaultMessage: 'Default sender email'
424
+ parsedFrom.name && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
425
+ col: 6,
426
+ xs: 12,
427
+ direction: "column",
428
+ alignItems: "stretch",
429
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
430
+ name: "sender-name",
431
+ children: [
432
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
433
+ children: formatMessage({
434
+ id: 'email.Settings.email.plugin.label.senderName',
435
+ defaultMessage: 'Default sender name'
436
+ })
437
+ }),
438
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
439
+ disabled: true,
440
+ readOnly: true,
441
+ value: parsedFrom.name
442
+ })
443
+ ]
212
444
  })
213
445
  }),
214
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
215
- placeholder: formatMessage({
216
- id: 'email.Settings.email.plugin.placeholder.defaultFrom',
217
- defaultMessage: "ex: Strapi No-Reply '<'no-reply@strapi.io'>'"
218
- }),
219
- disabled: true,
220
- readOnly: true,
221
- value: data.settings.defaultFrom,
222
- type: "email"
446
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
447
+ col: 6,
448
+ xs: 12,
449
+ direction: "column",
450
+ alignItems: "stretch",
451
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
452
+ name: "sender-email",
453
+ children: [
454
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
455
+ children: formatMessage({
456
+ id: 'email.Settings.email.plugin.label.defaultFrom',
457
+ defaultMessage: 'Default sender email'
458
+ })
459
+ }),
460
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
461
+ placeholder: formatMessage({
462
+ id: 'email.Settings.email.plugin.placeholder.defaultFrom',
463
+ defaultMessage: 'ex: no-reply@strapi.io'
464
+ }),
465
+ disabled: true,
466
+ readOnly: true,
467
+ value: parsedFrom.email,
468
+ type: "email"
469
+ })
470
+ ]
471
+ })
472
+ }),
473
+ parsedReplyTo.name && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
474
+ col: 6,
475
+ xs: 12,
476
+ direction: "column",
477
+ alignItems: "stretch",
478
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
479
+ name: "reply-to-name",
480
+ children: [
481
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
482
+ children: formatMessage({
483
+ id: 'email.Settings.email.plugin.label.replyToName',
484
+ defaultMessage: 'Default reply-to name'
485
+ })
486
+ }),
487
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
488
+ disabled: true,
489
+ readOnly: true,
490
+ value: parsedReplyTo.name
491
+ })
492
+ ]
493
+ })
494
+ }),
495
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
496
+ col: 6,
497
+ xs: 12,
498
+ direction: "column",
499
+ alignItems: "stretch",
500
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
501
+ name: "reply-to-email",
502
+ children: [
503
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
504
+ children: formatMessage({
505
+ id: 'email.Settings.email.plugin.label.defaultReplyTo',
506
+ defaultMessage: 'Default response email'
507
+ })
508
+ }),
509
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
510
+ placeholder: formatMessage({
511
+ id: 'email.Settings.email.plugin.placeholder.defaultReplyTo',
512
+ defaultMessage: 'ex: support@strapi.io'
513
+ }),
514
+ disabled: true,
515
+ readOnly: true,
516
+ value: parsedReplyTo.email,
517
+ type: "email"
518
+ })
519
+ ]
520
+ })
223
521
  })
224
522
  ]
225
- })
226
- }),
523
+ });
524
+ })(),
227
525
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
228
526
  col: 6,
229
527
  xs: 12,
230
528
  direction: "column",
231
529
  alignItems: "stretch",
232
530
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
233
- name: "response-email",
531
+ name: "email-provider",
234
532
  children: [
235
533
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
236
534
  children: formatMessage({
237
- id: 'email.Settings.email.plugin.label.defaultReplyTo',
238
- defaultMessage: 'Default response email'
535
+ id: 'email.Settings.email.plugin.label.provider',
536
+ defaultMessage: 'Email provider'
239
537
  })
240
538
  }),
241
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
242
- placeholder: formatMessage({
243
- id: 'email.Settings.email.plugin.placeholder.defaultReplyTo',
244
- defaultMessage: `ex: Strapi '<'example@strapi.io'>'`
245
- }),
539
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
246
540
  disabled: true,
247
- readOnly: true,
248
- value: data.settings.defaultReplyTo,
249
- type: "email"
541
+ value: data.provider,
542
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
543
+ value: data.provider,
544
+ children: data.provider
545
+ })
250
546
  })
251
547
  ]
252
548
  })
253
549
  }),
254
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
550
+ data.supportsVerify && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
255
551
  col: 6,
256
552
  xs: 12,
257
553
  direction: "column",
258
- alignItems: "stretch",
554
+ alignItems: "start",
259
555
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
260
- name: "email-provider",
556
+ name: "verify-connection",
261
557
  children: [
262
558
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
263
559
  children: formatMessage({
264
- id: 'email.Settings.email.plugin.label.provider',
265
- defaultMessage: 'Email provider'
560
+ id: 'email.Settings.email.plugin.label.verifyConnection',
561
+ defaultMessage: 'Connection status'
266
562
  })
267
563
  }),
268
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
269
- disabled: true,
270
- value: data.provider,
271
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
272
- value: data.provider,
273
- children: data.provider
274
- })
564
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
565
+ gap: 2,
566
+ alignItems: "center",
567
+ children: [
568
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
569
+ variant: "secondary",
570
+ loading: verifyMutation.isLoading,
571
+ onClick: ()=>verifyMutation.mutate(),
572
+ type: "button",
573
+ children: formatMessage({
574
+ id: 'email.Settings.email.plugin.button.verify',
575
+ defaultMessage: 'Test connection'
576
+ })
577
+ }),
578
+ connectionStatus === 'success' && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Badge, {
579
+ backgroundColor: "success100",
580
+ textColor: "success700",
581
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
582
+ gap: 1,
583
+ children: [
584
+ /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {
585
+ width: "1.2rem",
586
+ height: "1.2rem"
587
+ }),
588
+ formatMessage({
589
+ id: 'email.Settings.email.plugin.status.connected',
590
+ defaultMessage: 'Connected'
591
+ })
592
+ ]
593
+ })
594
+ }),
595
+ connectionStatus === 'error' && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Badge, {
596
+ backgroundColor: "danger100",
597
+ textColor: "danger700",
598
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
599
+ gap: 1,
600
+ children: [
601
+ /*#__PURE__*/ jsxRuntime.jsx(icons.Cross, {
602
+ width: "1.2rem",
603
+ height: "1.2rem"
604
+ }),
605
+ formatMessage({
606
+ id: 'email.Settings.email.plugin.status.error',
607
+ defaultMessage: 'Error'
608
+ })
609
+ ]
610
+ })
611
+ })
612
+ ]
275
613
  })
276
614
  ]
277
615
  })
@@ -281,6 +619,20 @@ const SettingsPage = ()=>{
281
619
  ]
282
620
  })
283
621
  }),
622
+ data.capabilities && (data.capabilities.transport || data.capabilities.auth || data.capabilities.features && data.capabilities.features.length > 0) && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
623
+ background: "neutral0",
624
+ hasRadius: true,
625
+ shadow: "filterShadow",
626
+ paddingTop: 6,
627
+ paddingBottom: 6,
628
+ paddingLeft: 7,
629
+ paddingRight: 7,
630
+ children: /*#__PURE__*/ jsxRuntime.jsx(CapabilitiesSection, {
631
+ capabilities: data.capabilities,
632
+ isIdle: data.isIdle,
633
+ formatMessage: formatMessage
634
+ })
635
+ }),
284
636
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
285
637
  alignItems: "stretch",
286
638
  background: "neutral0",