@webiny/app-mailer 6.0.0-alpha.5 → 6.0.0-rc.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.
@@ -1,21 +1,22 @@
1
1
  import React, { lazy, Suspense } from "react";
2
- import { AdminConfig, Plugins, Layout } from "@webiny/app-admin";
3
- import { HasPermission } from "@webiny/app-security";
4
- import Helmet from "react-helmet";
5
- import { usePermission } from "../hooks/usePermission";
6
- import { CircularProgress } from "@webiny/ui/Progress";
2
+ import { AdminConfig, Plugins, AdminLayout, useRouter } from "@webiny/app-admin";
3
+ import { HasPermission } from "@webiny/app-admin";
4
+ import { OverlayLoader } from "@webiny/admin-ui";
5
+ import { usePermission } from "./hooks/usePermission.js";
6
+ import { Routes } from "./routes.js";
7
7
  const {
8
8
  Menu,
9
9
  Route
10
10
  } = AdminConfig;
11
- const Settings = /*#__PURE__*/lazy(() => import(/* webpackChunkName: "MailerModuleSettings" */"../views/settings"));
11
+ const Settings = /*#__PURE__*/lazy(() => import(/* webpackChunkName: "mailer-settings" */"./views/settings/index.js"));
12
12
  const Loader = ({
13
13
  children,
14
14
  ...props
15
15
  }) => /*#__PURE__*/React.createElement(Suspense, {
16
- fallback: /*#__PURE__*/React.createElement(CircularProgress, null)
16
+ fallback: /*#__PURE__*/React.createElement(OverlayLoader, null)
17
17
  }, /*#__PURE__*/React.cloneElement(children, props));
18
18
  const MailerSettings = () => {
19
+ const router = useRouter();
19
20
  const {
20
21
  canChangeSettings
21
22
  } = usePermission();
@@ -26,12 +27,10 @@ const MailerSettings = () => {
26
27
  return /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(HasPermission, {
27
28
  name: "mailer.settings"
28
29
  }, /*#__PURE__*/React.createElement(Route, {
29
- name: "mailer.settings",
30
- exact: true,
31
- path: "/mailer/settings",
32
- element: /*#__PURE__*/React.createElement(Layout, null, /*#__PURE__*/React.createElement(Helmet, {
30
+ route: Routes.Settings,
31
+ element: /*#__PURE__*/React.createElement(AdminLayout, {
33
32
  title: "Mailer - Settings"
34
- }), /*#__PURE__*/React.createElement(Loader, null, /*#__PURE__*/React.createElement(Settings, null)))
33
+ }, /*#__PURE__*/React.createElement(Loader, null, /*#__PURE__*/React.createElement(Settings, null)))
35
34
  }), /*#__PURE__*/React.createElement(Menu, {
36
35
  name: "mailer.settings",
37
36
  parent: "settings",
@@ -43,7 +42,8 @@ const MailerSettings = () => {
43
42
  parent: "settings",
44
43
  element: /*#__PURE__*/React.createElement(Menu.Link, {
45
44
  text: "Settings",
46
- to: "/mailer/settings"
45
+ to: router.getLink(Routes.Settings),
46
+ pinnable: true
47
47
  })
48
48
  })));
49
49
  };
package/Module.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","lazy","Suspense","AdminConfig","Plugins","AdminLayout","useRouter","HasPermission","OverlayLoader","usePermission","Routes","Menu","Route","Settings","Loader","children","props","createElement","fallback","cloneElement","MailerSettings","router","canChangeSettings","changeSettings","name","route","element","title","parent","Group","text","Link","to","getLink","pinnable","Module"],"sources":["Module.tsx"],"sourcesContent":["import React, { lazy, Suspense } from \"react\";\nimport { AdminConfig, Plugins, AdminLayout, useRouter } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\nimport { usePermission } from \"~/hooks/usePermission.js\";\nimport { Routes } from \"~/routes.js\";\n\nconst { Menu, Route } = AdminConfig;\n\nconst Settings = lazy(\n () =>\n import(\n /* webpackChunkName: \"mailer-settings\" */\n \"~/views/settings/index.js\"\n )\n);\n\ninterface LoaderProps {\n children: React.ReactElement;\n}\n\nconst Loader = ({ children, ...props }: LoaderProps) => (\n <Suspense fallback={<OverlayLoader />}>{React.cloneElement(children, props)}</Suspense>\n);\n\nconst MailerSettings = () => {\n const router = useRouter();\n const { canChangeSettings } = usePermission();\n\n const changeSettings = canChangeSettings();\n\n if (!changeSettings) {\n return null;\n }\n\n return (\n <AdminConfig>\n <HasPermission name={\"mailer.settings\"}>\n <Route\n route={Routes.Settings}\n element={\n <AdminLayout title={\"Mailer - Settings\"}>\n <Loader>\n <Settings />\n </Loader>\n </AdminLayout>\n }\n />\n <Menu\n name={\"mailer.settings\"}\n parent={\"settings\"}\n element={<Menu.Group text={\"Mailer\"} />}\n />\n <Menu\n name={\"mailer.settings.general\"}\n parent={\"settings\"}\n element={\n <Menu.Link\n text={\"Settings\"}\n to={router.getLink(Routes.Settings)}\n pinnable={true}\n />\n }\n />\n </HasPermission>\n </AdminConfig>\n );\n};\n\nexport const Module = () => {\n return (\n <Plugins>\n <MailerSettings />\n </Plugins>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,QAAQ,QAAQ,OAAO;AAC7C,SAASC,WAAW,EAAEC,OAAO,EAAEC,WAAW,EAAEC,SAAS,QAAQ,mBAAmB;AAChF,SAASC,aAAa,QAAQ,mBAAmB;AACjD,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,aAAa;AACtB,SAASC,MAAM;AAEf,MAAM;EAAEC,IAAI;EAAEC;AAAM,CAAC,GAAGT,WAAW;AAEnC,MAAMU,QAAQ,gBAAGZ,IAAI,CACjB,MACI,MAAM,CACF,oEAEJ,CACR,CAAC;AAMD,MAAMa,MAAM,GAAGA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAmB,CAAC,kBAC/ChB,KAAA,CAAAiB,aAAA,CAACf,QAAQ;EAACgB,QAAQ,eAAElB,KAAA,CAAAiB,aAAA,CAACT,aAAa,MAAE;AAAE,gBAAER,KAAK,CAACmB,YAAY,CAACJ,QAAQ,EAAEC,KAAK,CAAY,CACzF;AAED,MAAMI,cAAc,GAAGA,CAAA,KAAM;EACzB,MAAMC,MAAM,GAAGf,SAAS,CAAC,CAAC;EAC1B,MAAM;IAAEgB;EAAkB,CAAC,GAAGb,aAAa,CAAC,CAAC;EAE7C,MAAMc,cAAc,GAAGD,iBAAiB,CAAC,CAAC;EAE1C,IAAI,CAACC,cAAc,EAAE;IACjB,OAAO,IAAI;EACf;EAEA,oBACIvB,KAAA,CAAAiB,aAAA,CAACd,WAAW,qBACRH,KAAA,CAAAiB,aAAA,CAACV,aAAa;IAACiB,IAAI,EAAE;EAAkB,gBACnCxB,KAAA,CAAAiB,aAAA,CAACL,KAAK;IACFa,KAAK,EAAEf,MAAM,CAACG,QAAS;IACvBa,OAAO,eACH1B,KAAA,CAAAiB,aAAA,CAACZ,WAAW;MAACsB,KAAK,EAAE;IAAoB,gBACpC3B,KAAA,CAAAiB,aAAA,CAACH,MAAM,qBACHd,KAAA,CAAAiB,aAAA,CAACJ,QAAQ,MAAE,CACP,CACC;EAChB,CACJ,CAAC,eACFb,KAAA,CAAAiB,aAAA,CAACN,IAAI;IACDa,IAAI,EAAE,iBAAkB;IACxBI,MAAM,EAAE,UAAW;IACnBF,OAAO,eAAE1B,KAAA,CAAAiB,aAAA,CAACN,IAAI,CAACkB,KAAK;MAACC,IAAI,EAAE;IAAS,CAAE;EAAE,CAC3C,CAAC,eACF9B,KAAA,CAAAiB,aAAA,CAACN,IAAI;IACDa,IAAI,EAAE,yBAA0B;IAChCI,MAAM,EAAE,UAAW;IACnBF,OAAO,eACH1B,KAAA,CAAAiB,aAAA,CAACN,IAAI,CAACoB,IAAI;MACND,IAAI,EAAE,UAAW;MACjBE,EAAE,EAAEX,MAAM,CAACY,OAAO,CAACvB,MAAM,CAACG,QAAQ,CAAE;MACpCqB,QAAQ,EAAE;IAAK,CAClB;EACJ,CACJ,CACU,CACN,CAAC;AAEtB,CAAC;AAED,OAAO,MAAMC,MAAM,GAAGA,CAAA,KAAM;EACxB,oBACInC,KAAA,CAAAiB,aAAA,CAACb,OAAO,qBACJJ,KAAA,CAAAiB,aAAA,CAACG,cAAc,MAAE,CACZ,CAAC;AAElB,CAAC","ignoreList":[]}
package/README.md CHANGED
@@ -1,22 +1,11 @@
1
1
  # @webiny/app-mailer
2
2
 
3
- [![](https://img.shields.io/npm/dw/@webiny/app-mailer.svg)](https://www.npmjs.com/package/@webiny/app-mailer)
4
- [![](https://img.shields.io/npm/v/@webiny/app-mailer.svg)](https://www.npmjs.com/package/@webiny/app-mailer)
5
- [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
6
- [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
3
+ > [!NOTE]
4
+ > This package is part of the [Webiny](https://www.webiny.com) monorepo.
5
+ > It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
7
6
 
8
- An app for changing the mailer settings.
7
+ 📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
9
8
 
10
- Use together with [@webiny/api-mailer](../api-mailer) package.
9
+ ---
11
10
 
12
- ## Install
13
-
14
- ```
15
- npm install --save @webiny/app-mailer
16
- ```
17
-
18
- Or if you prefer yarn:
19
-
20
- ```
21
- yarn add @webiny/app-mailer
22
- ```
11
+ _This README file is automatically generated during the publish process._
@@ -1,4 +1,4 @@
1
- import { useSecurity } from "@webiny/app-security";
1
+ import { useSecurity } from "@webiny/app-admin";
2
2
  import { useCallback } from "react";
3
3
  export const usePermission = () => {
4
4
  const {
@@ -1 +1 @@
1
- {"version":3,"names":["useSecurity","useCallback","usePermission","identity","getPermission","canChangeSettings","permission"],"sources":["usePermission.ts"],"sourcesContent":["import { useSecurity } from \"@webiny/app-security\";\nimport { useCallback } from \"react\";\nimport type { MailerSecurityPermission } from \"~/types\";\n\nexport const usePermission = () => {\n const { identity, getPermission } = useSecurity();\n\n const canChangeSettings = useCallback((): boolean => {\n const permission = getPermission<MailerSecurityPermission>(\"mailer.settings\");\n return !!permission;\n }, [identity]);\n\n return {\n canChangeSettings\n };\n};\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,sBAAsB;AAClD,SAASC,WAAW,QAAQ,OAAO;AAGnC,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EAC/B,MAAM;IAAEC,QAAQ;IAAEC;EAAc,CAAC,GAAGJ,WAAW,CAAC,CAAC;EAEjD,MAAMK,iBAAiB,GAAGJ,WAAW,CAAC,MAAe;IACjD,MAAMK,UAAU,GAAGF,aAAa,CAA2B,iBAAiB,CAAC;IAC7E,OAAO,CAAC,CAACE,UAAU;EACvB,CAAC,EAAE,CAACH,QAAQ,CAAC,CAAC;EAEd,OAAO;IACHE;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useSecurity","useCallback","usePermission","identity","getPermission","canChangeSettings","permission"],"sources":["usePermission.ts"],"sourcesContent":["import { useSecurity } from \"@webiny/app-admin\";\nimport { useCallback } from \"react\";\nimport type { MailerSecurityPermission } from \"~/types.js\";\n\nexport const usePermission = () => {\n const { identity, getPermission } = useSecurity();\n\n const canChangeSettings = useCallback((): boolean => {\n const permission = getPermission<MailerSecurityPermission>(\"mailer.settings\");\n return !!permission;\n }, [identity]);\n\n return {\n canChangeSettings\n };\n};\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,WAAW,QAAQ,OAAO;AAGnC,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EAC/B,MAAM;IAAEC,QAAQ;IAAEC;EAAc,CAAC,GAAGJ,WAAW,CAAC,CAAC;EAEjD,MAAMK,iBAAiB,GAAGJ,WAAW,CAAC,MAAe;IACjD,MAAMK,UAAU,GAAGF,aAAa,CAA2B,iBAAiB,CAAC;IAC7E,OAAO,CAAC,CAACE,UAAU;EACvB,CAAC,EAAE,CAACH,QAAQ,CAAC,CAAC;EAEd,OAAO;IACHE;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
package/index.d.ts CHANGED
@@ -1,2 +1 @@
1
- import { Module } from "./plugins/Module";
2
- export { Module };
1
+ export { Module } from "./Module.js";
package/index.js CHANGED
@@ -1,4 +1,3 @@
1
- import { Module } from "./plugins/Module";
2
- export { Module };
1
+ export { Module } from "./Module.js";
3
2
 
4
3
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["Module"],"sources":["index.tsx"],"sourcesContent":["import { Module } from \"~/plugins/Module\";\n\nexport { Module };\n"],"mappings":"AAAA,SAASA,MAAM;AAEf,SAASA,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["Module"],"sources":["index.tsx"],"sourcesContent":["export { Module } from \"./Module.js\";\n"],"mappings":"AAAA,SAASA,MAAM","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@webiny/app-mailer",
3
- "version": "6.0.0-alpha.5",
3
+ "version": "6.0.0-rc.0",
4
+ "type": "module",
4
5
  "main": "index.js",
5
6
  "repository": {
6
7
  "type": "git",
@@ -10,42 +11,35 @@
10
11
  "license": "MIT",
11
12
  "dependencies": {
12
13
  "@apollo/react-components": "3.1.5",
13
- "@webiny/admin-ui": "6.0.0-alpha.5",
14
- "@webiny/app-admin": "6.0.0-alpha.5",
15
- "@webiny/app-security": "6.0.0-alpha.5",
16
- "@webiny/form": "6.0.0-alpha.5",
17
- "@webiny/ui": "6.0.0-alpha.5",
18
- "@webiny/validation": "6.0.0-alpha.5",
14
+ "@webiny/admin-ui": "6.0.0-rc.0",
15
+ "@webiny/app-admin": "6.0.0-rc.0",
16
+ "@webiny/form": "6.0.0-rc.0",
17
+ "@webiny/validation": "6.0.0-rc.0",
19
18
  "apollo-cache": "1.3.5",
20
19
  "apollo-client": "2.6.10",
21
20
  "apollo-link": "1.2.14",
22
21
  "apollo-utilities": "1.3.4",
23
22
  "dot-prop-immutable": "2.1.1",
24
- "graphql": "15.9.0",
23
+ "graphql": "16.12.0",
25
24
  "graphql-tag": "2.12.6",
26
25
  "prop-types": "15.8.1",
27
26
  "react": "18.2.0",
28
- "react-dom": "18.2.0",
29
- "react-helmet": "6.1.0"
27
+ "react-dom": "18.2.0"
30
28
  },
31
29
  "devDependencies": {
32
30
  "@types/react": "18.2.79",
33
- "@webiny/project-utils": "6.0.0-alpha.5",
34
- "rimraf": "6.0.1",
35
- "typescript": "5.3.3"
31
+ "@webiny/build-tools": "6.0.0-rc.0",
32
+ "rimraf": "6.1.3",
33
+ "typescript": "5.9.3"
36
34
  },
37
35
  "publishConfig": {
38
36
  "access": "public",
39
37
  "directory": "dist"
40
38
  },
41
- "scripts": {
42
- "build": "node ../cli/bin.js run build",
43
- "watch": "node ../cli/bin.js run watch"
44
- },
45
39
  "svgo": {
46
40
  "plugins": {
47
41
  "removeViewBox": false
48
42
  }
49
43
  },
50
- "gitHead": "b7e120541b093e91f214904a9f13e4c2c4640978"
44
+ "gitHead": "0f2aa699f4642e550ab62c96fcd050e8d02345c9"
51
45
  }
package/routes.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { Route } from "@webiny/app-admin";
2
+ export declare const Routes: {
3
+ Settings: Route<undefined>;
4
+ };
package/routes.js ADDED
@@ -0,0 +1,9 @@
1
+ import { Route } from "@webiny/app-admin";
2
+ export const Routes = {
3
+ Settings: new Route({
4
+ name: "Mailer/Settings",
5
+ path: "/mailer/settings"
6
+ })
7
+ };
8
+
9
+ //# sourceMappingURL=routes.js.map
package/routes.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Route","Routes","Settings","name","path"],"sources":["routes.ts"],"sourcesContent":["import { Route } from \"@webiny/app-admin\";\n\nexport const Routes = {\n Settings: new Route({\n name: \"Mailer/Settings\",\n path: \"/mailer/settings\"\n })\n};\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,mBAAmB;AAEzC,OAAO,MAAMC,MAAM,GAAG;EAClBC,QAAQ,EAAE,IAAIF,KAAK,CAAC;IAChBG,IAAI,EAAE,iBAAiB;IACvBC,IAAI,EAAE;EACV,CAAC;AACL,CAAC","ignoreList":[]}
package/types.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import type { SecurityPermission } from "@webiny/app-security/types";
1
+ import { Identity } from "@webiny/app-admin/domain/Identity.js";
2
2
  /**
3
3
  * A base security permission for APW.
4
4
  *
5
5
  * @category SecurityPermission
6
6
  */
7
- export interface MailerSecurityPermission extends SecurityPermission {
7
+ export interface MailerSecurityPermission extends Identity.Permission {
8
8
  changeSettings?: boolean;
9
9
  }
10
10
  /**
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { SecurityPermission } from \"@webiny/app-security/types\";\n\n/**\n * A base security permission for APW.\n *\n * @category SecurityPermission\n */\nexport interface MailerSecurityPermission extends SecurityPermission {\n changeSettings?: boolean;\n}\n\n/**\n * GraphQL API call response for the transport settings values\n * @category GraphQL\n */\nexport interface TransportSettings {\n host: string;\n user: string;\n from: string;\n replyTo?: string;\n password?: string;\n}\n/**\n *\n * @category GraphQL\n */\nexport interface ApiError<T = Record<string, any>> {\n message: string;\n code: string;\n data: T;\n}\n\n/**\n * Description of the JOI validation errors received from the API.\n *\n * @category GraphQL\n */\nexport interface ValidationError {\n message: string;\n path: string[];\n}\n\nexport interface ValidationErrors {\n errors: ValidationError[];\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { Identity } from \"@webiny/app-admin/domain/Identity.js\";\n\n/**\n * A base security permission for APW.\n *\n * @category SecurityPermission\n */\nexport interface MailerSecurityPermission extends Identity.Permission {\n changeSettings?: boolean;\n}\n\n/**\n * GraphQL API call response for the transport settings values\n * @category GraphQL\n */\nexport interface TransportSettings {\n host: string;\n user: string;\n from: string;\n replyTo?: string;\n password?: string;\n}\n/**\n *\n * @category GraphQL\n */\nexport interface ApiError<T = Record<string, any>> {\n message: string;\n code: string;\n data: T;\n}\n\n/**\n * Description of the JOI validation errors received from the API.\n *\n * @category GraphQL\n */\nexport interface ValidationError {\n message: string;\n path: string[];\n}\n\nexport interface ValidationErrors {\n errors: ValidationError[];\n}\n"],"mappings":"","ignoreList":[]}
@@ -2,9 +2,9 @@ import React, { useEffect, useRef, useState } from "react";
2
2
  import { CenteredView, useSnackbar } from "@webiny/app-admin";
3
3
  import { Mutation, Query } from "@apollo/react-components";
4
4
  import { Form } from "@webiny/form";
5
- import { SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader } from "@webiny/app-admin/components/SimpleForm";
5
+ import { SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader } from "@webiny/app-admin";
6
6
  import { validation } from "@webiny/validation";
7
- import { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION } from "./graphql";
7
+ import { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION } from "./graphql.js";
8
8
  import dotPropImmutable from "dot-prop-immutable";
9
9
  import { Alert, Button, Grid, Input, OverlayLoader } from "@webiny/admin-ui";
10
10
  const displayErrors = errors => {
@@ -27,7 +27,7 @@ export const Settings = () => {
27
27
  const {
28
28
  showSnackbar
29
29
  } = useSnackbar();
30
- const password = useRef();
30
+ const password = useRef(null);
31
31
  const [errors, setErrors] = useState();
32
32
  useEffect(() => {
33
33
  const t = setTimeout(() => {
@@ -94,7 +94,7 @@ export const Settings = () => {
94
94
  }, /*#__PURE__*/React.createElement(Alert, {
95
95
  title: settingsError.message,
96
96
  type: "danger"
97
- }, settingsError.data?.description && /*#__PURE__*/React.createElement("p", null, settingsError.data.description))))), /*#__PURE__*/React.createElement(SimpleFormFooter, null, ""));
97
+ }, settingsError.code === "PASSWORD_SECRET_ERROR" && /*#__PURE__*/React.createElement("p", null, "To store the Mailer settings, you must have a password secret environment variable defined."))))), /*#__PURE__*/React.createElement(SimpleFormFooter, null, ""));
98
98
  }
99
99
  const passwordValidators = [];
100
100
  if (!settingsData?.user) {
@@ -150,9 +150,7 @@ export const Settings = () => {
150
150
  label: "Password",
151
151
  type: "password",
152
152
  autoComplete: "new-password",
153
- value: ""
154
- // @ts-expect-error
155
- ,
153
+ value: "",
156
154
  inputRef: password
157
155
  }))), /*#__PURE__*/React.createElement(Grid.Column, {
158
156
  span: 12
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useRef","useState","CenteredView","useSnackbar","Mutation","Query","Form","SimpleForm","SimpleFormContent","SimpleFormFooter","SimpleFormHeader","validation","GET_SETTINGS_QUERY","SAVE_SETTINGS_MUTATION","dotPropImmutable","Alert","Button","Grid","Input","OverlayLoader","displayErrors","errors","createElement","Fragment","map","error","field","path","key","title","type","message","Settings","showSnackbar","password","setErrors","t","setTimeout","current","value","clearTimeout","query","data","response","loading","queryInProgress","mutation","update","result","settingsData","settingsError","mailer","settings","mutationInProgress","onSubmit","variables","cache","structuredClone","readQuery","updateData","updateError","writeQuery","set","Column","span","description","passwordValidators","user","push","create","Bind","form","name","validators","size","label","autoComplete","inputRef","text","onClick","ev","submit"],"sources":["Settings.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { CenteredView, useSnackbar } from \"@webiny/app-admin\";\nimport { Mutation, Query } from \"@apollo/react-components\";\nimport { Form } from \"@webiny/form\";\nimport {\n SimpleForm,\n SimpleFormContent,\n SimpleFormFooter,\n SimpleFormHeader\n} from \"@webiny/app-admin/components/SimpleForm\";\nimport { validation } from \"@webiny/validation\";\nimport type {\n SaveSettingsMutationResponse,\n SaveSettingsMutationVariables,\n SettingsQueryResponse\n} from \"./graphql\";\nimport { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION } from \"./graphql\";\nimport type { TransportSettings, ValidationError } from \"~/types\";\nimport type { Validator } from \"@webiny/validation/types\";\nimport dotPropImmutable from \"dot-prop-immutable\";\nimport { Alert, Button, Grid, Input, OverlayLoader } from \"@webiny/admin-ui\";\n\nconst displayErrors = (errors?: ValidationError[]) => {\n if (!errors) {\n return null;\n }\n return (\n <>\n {errors.map(error => {\n const field = error.path[0];\n if (!field) {\n return null;\n }\n return (\n <Alert key={`${field}`} title={\"Error\"} type=\"danger\">\n {error.message}\n {\"ssss\"}\n </Alert>\n );\n })}\n </>\n );\n};\n\nexport const Settings = () => {\n const { showSnackbar } = useSnackbar();\n\n const password = useRef<HTMLInputElement>();\n\n const [errors, setErrors] = useState<ValidationError[] | undefined>();\n\n useEffect(() => {\n const t = setTimeout(() => {\n if (!password.current) {\n return;\n }\n password.current.value = \"\";\n }, 300);\n\n return () => {\n clearTimeout(t);\n };\n }, []);\n\n return (\n <Query<SettingsQueryResponse> query={GET_SETTINGS_QUERY}>\n {({ data: response, loading: queryInProgress }) => (\n <Mutation<SaveSettingsMutationResponse, SaveSettingsMutationVariables>\n mutation={SAVE_SETTINGS_MUTATION}\n >\n {(update, result) => {\n const { data: settingsData, error: settingsError } =\n response?.mailer.settings || {};\n const { loading: mutationInProgress } = result;\n\n const onSubmit = async (data: TransportSettings): Promise<void> => {\n setErrors([]);\n await update({\n variables: {\n data\n },\n update: (cache, result) => {\n const data = structuredClone(\n cache.readQuery<SettingsQueryResponse>({\n query: GET_SETTINGS_QUERY\n })\n );\n\n const { data: updateData, error: updateError } =\n result.data?.mailer.settings || {};\n\n const errors = updateError?.data.errors;\n if (errors) {\n setErrors(errors);\n showSnackbar(\n \"Settings not updated! Please check your network and console logs for detailed information.\"\n );\n return;\n }\n\n cache.writeQuery({\n query: GET_SETTINGS_QUERY,\n data: dotPropImmutable.set(data, \"mailer.settings.data\", {\n ...settingsData,\n ...updateData\n })\n });\n showSnackbar(\"Settings updated successfully.\");\n }\n });\n };\n if (settingsError) {\n return (\n <SimpleForm>\n <SimpleFormHeader title=\"Mailer Settings\" />\n <SimpleFormContent>\n <Grid>\n <Grid.Column span={12}>\n <Alert title={settingsError.message} type=\"danger\">\n {settingsError.data?.description && (\n <p>{settingsError.data.description}</p>\n )}\n </Alert>\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>{\"\"}</SimpleFormFooter>\n </SimpleForm>\n );\n }\n\n const passwordValidators: Validator[] = [];\n if (!settingsData?.user) {\n passwordValidators.push(validation.create(\"required,minLength:5\"));\n }\n\n return (\n <CenteredView>\n <Form\n data={settingsData || {}}\n onSubmit={data => {\n /**\n * We are positive that data is TransportSettings.\n */\n onSubmit(data as unknown as TransportSettings);\n }}\n >\n {({ Bind, form }) => (\n <SimpleForm>\n {(queryInProgress || mutationInProgress) && (\n <OverlayLoader />\n )}\n <SimpleFormHeader title=\"Mailer Settings\" />\n <SimpleFormContent>\n {displayErrors(errors)}\n <Grid>\n <Grid.Column span={12}>\n <Bind\n name={\"host\"}\n validators={[\n validation.create(\n \"required,minLength:1\"\n )\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"Hostname\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"port\"}>\n <Input\n size={\"lg\"}\n type=\"number\"\n label=\"Port\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"user\"}\n validators={[\n validation.create(\n \"required,minLength:1\"\n )\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"User\"\n autoComplete=\"new-password\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"password\"}\n validators={passwordValidators}\n >\n <Input\n size={\"lg\"}\n label=\"Password\"\n type=\"password\"\n autoComplete=\"new-password\"\n value={\"\"}\n // @ts-expect-error\n inputRef={password}\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"from\"}\n validators={[\n validation.create(\n \"required,minLength:1,email\"\n )\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"Mail from\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"replyTo\"}\n validators={[\n validation.create(\"email\")\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"Mail reply-to\"\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n <Button\n text={\"Save\"}\n onClick={ev => {\n form.submit(ev);\n }}\n />\n </SimpleFormFooter>\n </SimpleForm>\n )}\n </Form>\n </CenteredView>\n );\n }}\n </Mutation>\n )}\n </Query>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","useRef","useState","CenteredView","useSnackbar","Mutation","Query","Form","SimpleForm","SimpleFormContent","SimpleFormFooter","SimpleFormHeader","validation","GET_SETTINGS_QUERY","SAVE_SETTINGS_MUTATION","dotPropImmutable","Alert","Button","Grid","Input","OverlayLoader","displayErrors","errors","createElement","Fragment","map","error","field","path","key","title","type","message","Settings","showSnackbar","password","setErrors","t","setTimeout","current","value","clearTimeout","query","data","response","loading","queryInProgress","mutation","update","result","settingsData","settingsError","mailer","settings","mutationInProgress","onSubmit","variables","cache","structuredClone","readQuery","updateData","updateError","writeQuery","set","Column","span","code","passwordValidators","user","push","create","Bind","form","name","validators","size","label","autoComplete","inputRef","text","onClick","ev","submit"],"sources":["Settings.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { CenteredView, useSnackbar } from \"@webiny/app-admin\";\nimport { Mutation, Query } from \"@apollo/react-components\";\nimport { Form } from \"@webiny/form\";\nimport {\n SimpleForm,\n SimpleFormContent,\n SimpleFormFooter,\n SimpleFormHeader\n} from \"@webiny/app-admin\";\nimport { validation } from \"@webiny/validation\";\nimport type {\n SaveSettingsMutationResponse,\n SaveSettingsMutationVariables,\n SettingsQueryResponse\n} from \"./graphql.js\";\nimport { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION } from \"./graphql.js\";\nimport type { TransportSettings, ValidationError } from \"~/types.js\";\nimport type { Validator } from \"@webiny/validation/types.js\";\nimport dotPropImmutable from \"dot-prop-immutable\";\nimport { Alert, Button, Grid, Input, OverlayLoader } from \"@webiny/admin-ui\";\n\nconst displayErrors = (errors?: ValidationError[]) => {\n if (!errors) {\n return null;\n }\n return (\n <>\n {errors.map(error => {\n const field = error.path[0];\n if (!field) {\n return null;\n }\n return (\n <Alert key={`${field}`} title={\"Error\"} type=\"danger\">\n {error.message}\n {\"ssss\"}\n </Alert>\n );\n })}\n </>\n );\n};\n\nexport const Settings = () => {\n const { showSnackbar } = useSnackbar();\n\n const password = useRef<HTMLInputElement>(null);\n\n const [errors, setErrors] = useState<ValidationError[] | undefined>();\n\n useEffect(() => {\n const t = setTimeout(() => {\n if (!password.current) {\n return;\n }\n password.current.value = \"\";\n }, 300);\n\n return () => {\n clearTimeout(t);\n };\n }, []);\n\n return (\n <Query<SettingsQueryResponse> query={GET_SETTINGS_QUERY}>\n {({ data: response, loading: queryInProgress }) => (\n <Mutation<SaveSettingsMutationResponse, SaveSettingsMutationVariables>\n mutation={SAVE_SETTINGS_MUTATION}\n >\n {(update, result) => {\n const { data: settingsData, error: settingsError } =\n response?.mailer.settings || {};\n const { loading: mutationInProgress } = result;\n\n const onSubmit = async (data: TransportSettings): Promise<void> => {\n setErrors([]);\n await update({\n variables: {\n data\n },\n update: (cache, result) => {\n const data = structuredClone(\n cache.readQuery<SettingsQueryResponse>({\n query: GET_SETTINGS_QUERY\n })\n );\n\n const { data: updateData, error: updateError } =\n result.data?.mailer.settings || {};\n\n const errors = updateError?.data.errors;\n if (errors) {\n setErrors(errors);\n showSnackbar(\n \"Settings not updated! Please check your network and console logs for detailed information.\"\n );\n return;\n }\n\n cache.writeQuery({\n query: GET_SETTINGS_QUERY,\n data: dotPropImmutable.set(data, \"mailer.settings.data\", {\n ...settingsData,\n ...updateData\n })\n });\n showSnackbar(\"Settings updated successfully.\");\n }\n });\n };\n if (settingsError) {\n return (\n <SimpleForm>\n <SimpleFormHeader title=\"Mailer Settings\" />\n <SimpleFormContent>\n <Grid>\n <Grid.Column span={12}>\n <Alert title={settingsError.message} type=\"danger\">\n {settingsError.code ===\n \"PASSWORD_SECRET_ERROR\" && (\n <p>\n To store the Mailer settings, you must\n have a password secret environment\n variable defined.\n </p>\n )}\n </Alert>\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>{\"\"}</SimpleFormFooter>\n </SimpleForm>\n );\n }\n\n const passwordValidators: Validator[] = [];\n if (!settingsData?.user) {\n passwordValidators.push(validation.create(\"required,minLength:5\"));\n }\n\n return (\n <CenteredView>\n <Form\n data={settingsData || {}}\n onSubmit={data => {\n /**\n * We are positive that data is TransportSettings.\n */\n onSubmit(data as unknown as TransportSettings);\n }}\n >\n {({ Bind, form }) => (\n <SimpleForm>\n {(queryInProgress || mutationInProgress) && (\n <OverlayLoader />\n )}\n <SimpleFormHeader title=\"Mailer Settings\" />\n <SimpleFormContent>\n {displayErrors(errors)}\n <Grid>\n <Grid.Column span={12}>\n <Bind\n name={\"host\"}\n validators={[\n validation.create(\n \"required,minLength:1\"\n )\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"Hostname\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"port\"}>\n <Input\n size={\"lg\"}\n type=\"number\"\n label=\"Port\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"user\"}\n validators={[\n validation.create(\n \"required,minLength:1\"\n )\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"User\"\n autoComplete=\"new-password\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"password\"}\n validators={passwordValidators}\n >\n <Input\n size={\"lg\"}\n label=\"Password\"\n type=\"password\"\n autoComplete=\"new-password\"\n value={\"\"}\n inputRef={password}\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"from\"}\n validators={[\n validation.create(\n \"required,minLength:1,email\"\n )\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"Mail from\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"replyTo\"}\n validators={[\n validation.create(\"email\")\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"Mail reply-to\"\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n <Button\n text={\"Save\"}\n onClick={ev => {\n form.submit(ev);\n }}\n />\n </SimpleFormFooter>\n </SimpleForm>\n )}\n </Form>\n </CenteredView>\n );\n }}\n </Mutation>\n )}\n </Query>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { ApiError, TransportSettings, ValidationErrors } from "../../types";
1
+ import type { ApiError, TransportSettings, ValidationErrors } from "../../types.js";
2
2
  export interface SettingsQueryResponse {
3
3
  mailer: {
4
4
  settings: {
@@ -1 +1 @@
1
- {"version":3,"names":["gql","SETTINGS_FIELDS","ERROR_FIELDS","GET_SETTINGS_QUERY","SAVE_SETTINGS_MUTATION"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { ApiError, TransportSettings, ValidationErrors } from \"~/types\";\n\nconst SETTINGS_FIELDS = `\n {\n host\n port\n user\n from\n replyTo\n }\n`;\n\nconst ERROR_FIELDS = `\n {\n message\n code\n data\n }\n`;\n\nexport interface SettingsQueryResponse {\n mailer: {\n settings: {\n data: TransportSettings | null;\n error: ApiError | null;\n };\n };\n}\nexport const GET_SETTINGS_QUERY = gql`\n query GetMailerSettings {\n mailer {\n settings: getSettings {\n data ${SETTINGS_FIELDS}\n error ${ERROR_FIELDS}\n }\n }\n }\n`;\n\nexport interface SaveSettingsMutationVariables {\n data: TransportSettings & {\n password?: string;\n };\n}\n\nexport interface SaveSettingsMutationResponse {\n mailer: {\n settings: {\n data: TransportSettings | null;\n error: ApiError<ValidationErrors> | null;\n };\n };\n}\nexport const SAVE_SETTINGS_MUTATION = gql`\n mutation SaveTransportSettings($data: MailerTransportSettingsInput!) {\n mailer {\n settings: saveSettings(data: $data) {\n data ${SETTINGS_FIELDS}\n error ${ERROR_FIELDS}\n }\n }\n }\n`;\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAG7B,MAAMC,eAAe,GAAG;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,YAAY,GAAG;AACrB;AACA;AACA;AACA;AACA;AACA,CAAC;AAUD,OAAO,MAAMC,kBAAkB,GAAGH,GAAG;AACrC;AACA;AACA;AACA,uBAAuBC,eAAe;AACtC,wBAAwBC,YAAY;AACpC;AACA;AACA;AACA,CAAC;AAgBD,OAAO,MAAME,sBAAsB,GAAGJ,GAAG;AACzC;AACA;AACA;AACA,uBAAuBC,eAAe;AACtC,wBAAwBC,YAAY;AACpC;AACA;AACA;AACA,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["gql","SETTINGS_FIELDS","ERROR_FIELDS","GET_SETTINGS_QUERY","SAVE_SETTINGS_MUTATION"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { ApiError, TransportSettings, ValidationErrors } from \"~/types.js\";\n\nconst SETTINGS_FIELDS = `\n {\n host\n port\n user\n from\n replyTo\n }\n`;\n\nconst ERROR_FIELDS = `\n {\n message\n code\n data\n }\n`;\n\nexport interface SettingsQueryResponse {\n mailer: {\n settings: {\n data: TransportSettings | null;\n error: ApiError | null;\n };\n };\n}\nexport const GET_SETTINGS_QUERY = gql`\n query GetMailerSettings {\n mailer {\n settings: getSettings {\n data ${SETTINGS_FIELDS}\n error ${ERROR_FIELDS}\n }\n }\n }\n`;\n\nexport interface SaveSettingsMutationVariables {\n data: TransportSettings & {\n password?: string;\n };\n}\n\nexport interface SaveSettingsMutationResponse {\n mailer: {\n settings: {\n data: TransportSettings | null;\n error: ApiError<ValidationErrors> | null;\n };\n };\n}\nexport const SAVE_SETTINGS_MUTATION = gql`\n mutation SaveTransportSettings($data: MailerTransportSettingsInput!) {\n mailer {\n settings: saveSettings(data: $data) {\n data ${SETTINGS_FIELDS}\n error ${ERROR_FIELDS}\n }\n }\n }\n`;\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAG7B,MAAMC,eAAe,GAAG;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,YAAY,GAAG;AACrB;AACA;AACA;AACA;AACA;AACA,CAAC;AAUD,OAAO,MAAMC,kBAAkB,GAAGH,GAAG;AACrC;AACA;AACA;AACA,uBAAuBC,eAAe;AACtC,wBAAwBC,YAAY;AACpC;AACA;AACA;AACA,CAAC;AAgBD,OAAO,MAAME,sBAAsB,GAAGJ,GAAG;AACzC;AACA;AACA;AACA,uBAAuBC,eAAe;AACtC,wBAAwBC,YAAY;AACpC;AACA;AACA;AACA,CAAC","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import { Settings } from "./Settings";
1
+ import { Settings } from "./Settings.js";
2
2
  export default Settings;
@@ -1,4 +1,4 @@
1
- import { Settings } from "./Settings";
1
+ import { Settings } from "./Settings.js";
2
2
  export default Settings;
3
3
 
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Settings"],"sources":["index.ts"],"sourcesContent":["import { Settings } from \"./Settings\";\n\nexport default Settings;\n"],"mappings":"AAAA,SAASA,QAAQ;AAEjB,eAAeA,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":["Settings"],"sources":["index.ts"],"sourcesContent":["import { Settings } from \"./Settings.js\";\n\nexport default Settings;\n"],"mappings":"AAAA,SAASA,QAAQ;AAEjB,eAAeA,QAAQ","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","lazy","Suspense","AdminConfig","Plugins","Layout","HasPermission","Helmet","usePermission","CircularProgress","Menu","Route","Settings","Loader","children","props","createElement","fallback","cloneElement","MailerSettings","canChangeSettings","changeSettings","name","exact","path","element","title","parent","Group","text","Link","to","Module"],"sources":["Module.tsx"],"sourcesContent":["import React, { lazy, Suspense } from \"react\";\nimport { AdminConfig, Plugins, Layout } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-security\";\nimport Helmet from \"react-helmet\";\nimport { usePermission } from \"~/hooks/usePermission\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\n\nconst { Menu, Route } = AdminConfig;\n\nconst Settings = lazy(\n () =>\n import(\n /* webpackChunkName: \"MailerModuleSettings\" */\n \"~/views/settings\"\n )\n);\n\ninterface LoaderProps {\n children: React.ReactElement;\n}\n\nconst Loader = ({ children, ...props }: LoaderProps) => (\n <Suspense fallback={<CircularProgress />}>{React.cloneElement(children, props)}</Suspense>\n);\n\nconst MailerSettings = () => {\n const { canChangeSettings } = usePermission();\n\n const changeSettings = canChangeSettings();\n\n if (!changeSettings) {\n return null;\n }\n\n return (\n <AdminConfig>\n <HasPermission name={\"mailer.settings\"}>\n <Route\n name={\"mailer.settings\"}\n exact\n path={\"/mailer/settings\"}\n element={\n <Layout>\n <Helmet title={\"Mailer - Settings\"} />\n <Loader>\n <Settings />\n </Loader>\n </Layout>\n }\n />\n <Menu\n name={\"mailer.settings\"}\n parent={\"settings\"}\n element={<Menu.Group text={\"Mailer\"} />}\n />\n <Menu\n name={\"mailer.settings.general\"}\n parent={\"settings\"}\n element={<Menu.Link text={\"Settings\"} to={\"/mailer/settings\"} />}\n />\n </HasPermission>\n </AdminConfig>\n );\n};\n\nexport const Module = () => {\n return (\n <Plugins>\n <MailerSettings />\n </Plugins>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,QAAQ,QAAQ,OAAO;AAC7C,SAASC,WAAW,EAAEC,OAAO,EAAEC,MAAM,QAAQ,mBAAmB;AAChE,SAASC,aAAa,QAAQ,sBAAsB;AACpD,OAAOC,MAAM,MAAM,cAAc;AACjC,SAASC,aAAa;AACtB,SAASC,gBAAgB,QAAQ,qBAAqB;AAEtD,MAAM;EAAEC,IAAI;EAAEC;AAAM,CAAC,GAAGR,WAAW;AAEnC,MAAMS,QAAQ,gBAAGX,IAAI,CACjB,MACI,MAAM,CACF,iEAEJ,CACR,CAAC;AAMD,MAAMY,MAAM,GAAGA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAmB,CAAC,kBAC/Cf,KAAA,CAAAgB,aAAA,CAACd,QAAQ;EAACe,QAAQ,eAAEjB,KAAA,CAAAgB,aAAA,CAACP,gBAAgB,MAAE;AAAE,gBAAET,KAAK,CAACkB,YAAY,CAACJ,QAAQ,EAAEC,KAAK,CAAY,CAC5F;AAED,MAAMI,cAAc,GAAGA,CAAA,KAAM;EACzB,MAAM;IAAEC;EAAkB,CAAC,GAAGZ,aAAa,CAAC,CAAC;EAE7C,MAAMa,cAAc,GAAGD,iBAAiB,CAAC,CAAC;EAE1C,IAAI,CAACC,cAAc,EAAE;IACjB,OAAO,IAAI;EACf;EAEA,oBACIrB,KAAA,CAAAgB,aAAA,CAACb,WAAW,qBACRH,KAAA,CAAAgB,aAAA,CAACV,aAAa;IAACgB,IAAI,EAAE;EAAkB,gBACnCtB,KAAA,CAAAgB,aAAA,CAACL,KAAK;IACFW,IAAI,EAAE,iBAAkB;IACxBC,KAAK;IACLC,IAAI,EAAE,kBAAmB;IACzBC,OAAO,eACHzB,KAAA,CAAAgB,aAAA,CAACX,MAAM,qBACHL,KAAA,CAAAgB,aAAA,CAACT,MAAM;MAACmB,KAAK,EAAE;IAAoB,CAAE,CAAC,eACtC1B,KAAA,CAAAgB,aAAA,CAACH,MAAM,qBACHb,KAAA,CAAAgB,aAAA,CAACJ,QAAQ,MAAE,CACP,CACJ;EACX,CACJ,CAAC,eACFZ,KAAA,CAAAgB,aAAA,CAACN,IAAI;IACDY,IAAI,EAAE,iBAAkB;IACxBK,MAAM,EAAE,UAAW;IACnBF,OAAO,eAAEzB,KAAA,CAAAgB,aAAA,CAACN,IAAI,CAACkB,KAAK;MAACC,IAAI,EAAE;IAAS,CAAE;EAAE,CAC3C,CAAC,eACF7B,KAAA,CAAAgB,aAAA,CAACN,IAAI;IACDY,IAAI,EAAE,yBAA0B;IAChCK,MAAM,EAAE,UAAW;IACnBF,OAAO,eAAEzB,KAAA,CAAAgB,aAAA,CAACN,IAAI,CAACoB,IAAI;MAACD,IAAI,EAAE,UAAW;MAACE,EAAE,EAAE;IAAmB,CAAE;EAAE,CACpE,CACU,CACN,CAAC;AAEtB,CAAC;AAED,OAAO,MAAMC,MAAM,GAAGA,CAAA,KAAM;EACxB,oBACIhC,KAAA,CAAAgB,aAAA,CAACZ,OAAO,qBACJJ,KAAA,CAAAgB,aAAA,CAACG,cAAc,MAAE,CACZ,CAAC;AAElB,CAAC","ignoreList":[]}
File without changes