@strapi/plugin-users-permissions 5.0.0-beta.1 → 5.0.0-beta.3

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 (73) hide show
  1. package/admin/src/pages/AdvancedSettings/index.jsx +4 -4
  2. package/admin/src/pages/EmailTemplates/index.jsx +3 -4
  3. package/admin/src/pages/Providers/index.jsx +3 -4
  4. package/admin/src/pages/Roles/pages/CreatePage.jsx +3 -4
  5. package/admin/src/pages/Roles/pages/EditPage.jsx +3 -4
  6. package/admin/src/pages/Roles/pages/ListPage/index.jsx +3 -4
  7. package/dist/_chunks/{index-_UNneVIg.js → index-21XWiNaI.js} +21 -37
  8. package/dist/_chunks/index-21XWiNaI.js.map +1 -0
  9. package/dist/_chunks/{index-gw-9XoIT.js → index-5Su9tV8W.js} +16 -22
  10. package/dist/_chunks/index-5Su9tV8W.js.map +1 -0
  11. package/dist/_chunks/{index-DtWla9tx.mjs → index-EfXIfij8.mjs} +9 -15
  12. package/dist/_chunks/index-EfXIfij8.mjs.map +1 -0
  13. package/dist/_chunks/{index-46oU0LRy.js → index-Ev6k_nHX.js} +11 -17
  14. package/dist/_chunks/index-Ev6k_nHX.js.map +1 -0
  15. package/dist/_chunks/{index-UxzhJuP2.js → index-I7wqiaSz.js} +13 -19
  16. package/dist/_chunks/index-I7wqiaSz.js.map +1 -0
  17. package/dist/_chunks/{index-G9pZniMC.mjs → index-J5bVMwKb.mjs} +10 -16
  18. package/dist/_chunks/index-J5bVMwKb.mjs.map +1 -0
  19. package/dist/_chunks/{index-JO4fO3Yj.js → index-RdT-49jb.js} +12 -12
  20. package/dist/_chunks/{index-JO4fO3Yj.js.map → index-RdT-49jb.js.map} +1 -1
  21. package/dist/_chunks/{index-PTS42_em.mjs → index-Yd7pX7dw.mjs} +12 -12
  22. package/dist/_chunks/{index-PTS42_em.mjs.map → index-Yd7pX7dw.mjs.map} +1 -1
  23. package/dist/_chunks/{index-Vg50EMBp.mjs → index-fIJnE26b.mjs} +14 -30
  24. package/dist/_chunks/index-fIJnE26b.mjs.map +1 -0
  25. package/dist/_chunks/index-oBxjGftZ-Zv9D3a55.js +10335 -0
  26. package/dist/_chunks/index-oBxjGftZ-Zv9D3a55.js.map +1 -0
  27. package/dist/_chunks/index-oBxjGftZ-sZD2cl-K.mjs +10311 -0
  28. package/dist/_chunks/index-oBxjGftZ-sZD2cl-K.mjs.map +1 -0
  29. package/dist/_chunks/{index-oUZpvYqS.mjs → index-oDAXPgSA.mjs} +10 -16
  30. package/dist/_chunks/index-oDAXPgSA.mjs.map +1 -0
  31. package/dist/admin/index.js +1 -1
  32. package/dist/admin/index.mjs +1 -1
  33. package/package.json +8 -8
  34. package/server/bootstrap/index.js +3 -3
  35. package/server/controllers/content-manager-user.js +4 -2
  36. package/server/services/users-permissions.js +3 -3
  37. package/dist/_chunks/EditViewPage-BJdNfzBZ-XIkFGBc4.mjs +0 -84380
  38. package/dist/_chunks/EditViewPage-BJdNfzBZ-XIkFGBc4.mjs.map +0 -1
  39. package/dist/_chunks/EditViewPage-BJdNfzBZ-eKwHxgPQ.js +0 -84408
  40. package/dist/_chunks/EditViewPage-BJdNfzBZ-eKwHxgPQ.js.map +0 -1
  41. package/dist/_chunks/Helmet-En-SEnNC.mjs +0 -1008
  42. package/dist/_chunks/Helmet-En-SEnNC.mjs.map +0 -1
  43. package/dist/_chunks/Helmet-d9JljxUo.js +0 -1010
  44. package/dist/_chunks/Helmet-d9JljxUo.js.map +0 -1
  45. package/dist/_chunks/ListViewPage-FE12IpwT-Wq63ge4-.js +0 -1595
  46. package/dist/_chunks/ListViewPage-FE12IpwT-Wq63ge4-.js.map +0 -1
  47. package/dist/_chunks/ListViewPage-FE12IpwT-qmEuoG2g.mjs +0 -1571
  48. package/dist/_chunks/ListViewPage-FE12IpwT-qmEuoG2g.mjs.map +0 -1
  49. package/dist/_chunks/ReviewWorkflowsColumn-NUu47oVz-8gQO_Y5x.mjs +0 -33
  50. package/dist/_chunks/ReviewWorkflowsColumn-NUu47oVz-8gQO_Y5x.mjs.map +0 -1
  51. package/dist/_chunks/ReviewWorkflowsColumn-NUu47oVz-ARD7iQQF.js +0 -33
  52. package/dist/_chunks/ReviewWorkflowsColumn-NUu47oVz-ARD7iQQF.js.map +0 -1
  53. package/dist/_chunks/constants-D6NLEhwu-4IL8biHd.js +0 -209
  54. package/dist/_chunks/constants-D6NLEhwu-4IL8biHd.js.map +0 -1
  55. package/dist/_chunks/constants-D6NLEhwu-gRKBHArd.mjs +0 -190
  56. package/dist/_chunks/constants-D6NLEhwu-gRKBHArd.mjs.map +0 -1
  57. package/dist/_chunks/index-1NFAbkxM-Km1zKLTh.mjs +0 -16568
  58. package/dist/_chunks/index-1NFAbkxM-Km1zKLTh.mjs.map +0 -1
  59. package/dist/_chunks/index-1NFAbkxM-c8HdvwSA.js +0 -16593
  60. package/dist/_chunks/index-1NFAbkxM-c8HdvwSA.js.map +0 -1
  61. package/dist/_chunks/index-46oU0LRy.js.map +0 -1
  62. package/dist/_chunks/index-DtWla9tx.mjs.map +0 -1
  63. package/dist/_chunks/index-G9pZniMC.mjs.map +0 -1
  64. package/dist/_chunks/index-UxzhJuP2.js.map +0 -1
  65. package/dist/_chunks/index-Vg50EMBp.mjs.map +0 -1
  66. package/dist/_chunks/index-_UNneVIg.js.map +0 -1
  67. package/dist/_chunks/index-gw-9XoIT.js.map +0 -1
  68. package/dist/_chunks/index-oUZpvYqS.mjs.map +0 -1
  69. package/dist/_chunks/useSyncRbac-LNOzRXJ5-5S0qhFuZ.js +0 -63
  70. package/dist/_chunks/useSyncRbac-LNOzRXJ5-5S0qhFuZ.js.map +0 -1
  71. package/dist/_chunks/useSyncRbac-LNOzRXJ5-PZzFwA1X.mjs +0 -45
  72. package/dist/_chunks/useSyncRbac-LNOzRXJ5-PZzFwA1X.mjs.map +0 -1
  73. package/dist/style.css +0 -84
@@ -21,7 +21,7 @@ import {
21
21
  useFetchClient,
22
22
  useRBAC,
23
23
  } from '@strapi/strapi/admin';
24
- import { Helmet } from 'react-helmet';
24
+
25
25
  import { useIntl } from 'react-intl';
26
26
  import { useMutation, useQuery, useQueryClient } from 'react-query';
27
27
 
@@ -118,8 +118,8 @@ const AdvancedSettingsPage = () => {
118
118
 
119
119
  return (
120
120
  <Page.Main aria-busy={isSubmittingForm}>
121
- <Helmet
122
- title={formatMessage(
121
+ <Page.Title>
122
+ {formatMessage(
123
123
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
124
124
  {
125
125
  name: formatMessage({
@@ -128,7 +128,7 @@ const AdvancedSettingsPage = () => {
128
128
  }),
129
129
  }
130
130
  )}
131
- />
131
+ </Page.Title>
132
132
  <Form onSubmit={handleSubmit} initialValues={data.settings} validationSchema={schema}>
133
133
  {({ values, isSubmitting, modified }) => {
134
134
  return (
@@ -9,7 +9,6 @@ import {
9
9
  useFetchClient,
10
10
  useRBAC,
11
11
  } from '@strapi/strapi/admin';
12
- import { Helmet } from 'react-helmet';
13
12
  import { useIntl } from 'react-intl';
14
13
  import { useMutation, useQuery, useQueryClient } from 'react-query';
15
14
 
@@ -115,8 +114,8 @@ const EmailTemplatesPage = () => {
115
114
 
116
115
  return (
117
116
  <Page.Main aria-busy={submitMutation.isLoading}>
118
- <Helmet
119
- title={formatMessage(
117
+ <Page.Title>
118
+ {formatMessage(
120
119
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
121
120
  {
122
121
  name: formatMessage({
@@ -125,7 +124,7 @@ const EmailTemplatesPage = () => {
125
124
  }),
126
125
  }
127
126
  )}
128
- />
127
+ </Page.Title>
129
128
  <HeaderLayout
130
129
  title={formatMessage({
131
130
  id: getTrad('HeaderNav.link.emailTemplates'),
@@ -25,7 +25,6 @@ import {
25
25
  useRBAC,
26
26
  } from '@strapi/strapi/admin';
27
27
  import upperFirst from 'lodash/upperFirst';
28
- import { Helmet } from 'react-helmet';
29
28
  import { useIntl } from 'react-intl';
30
29
  import { useMutation, useQuery, useQueryClient } from 'react-query';
31
30
 
@@ -149,8 +148,8 @@ export const ProvidersPage = () => {
149
148
 
150
149
  return (
151
150
  <Layout>
152
- <Helmet
153
- title={formatMessage(
151
+ <Page.Title>
152
+ {formatMessage(
154
153
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
155
154
  {
156
155
  name: formatMessage({
@@ -159,7 +158,7 @@ export const ProvidersPage = () => {
159
158
  }),
160
159
  }
161
160
  )}
162
- />
161
+ </Page.Title>
163
162
  <Page.Main>
164
163
  <HeaderLayout
165
164
  title={formatMessage({
@@ -15,7 +15,6 @@ import {
15
15
  import { Check } from '@strapi/icons';
16
16
  import { Page, useTracking, useNotification, useFetchClient } from '@strapi/strapi/admin';
17
17
  import { Formik, Form } from 'formik';
18
- import { Helmet } from 'react-helmet';
19
18
  import { useIntl } from 'react-intl';
20
19
  import { useMutation } from 'react-query';
21
20
  import { useNavigate } from 'react-router-dom';
@@ -72,12 +71,12 @@ export const CreatePage = () => {
72
71
 
73
72
  return (
74
73
  <Main>
75
- <Helmet
76
- title={formatMessage(
74
+ <Page.Title>
75
+ {formatMessage(
77
76
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
78
77
  { name: 'Roles' }
79
78
  )}
80
- />
79
+ </Page.Title>
81
80
  <Formik
82
81
  enableReinitialize
83
82
  initialValues={{ name: '', description: '' }}
@@ -21,7 +21,6 @@ import {
21
21
  useFetchClient,
22
22
  } from '@strapi/strapi/admin';
23
23
  import { Formik, Form } from 'formik';
24
- import { Helmet } from 'react-helmet';
25
24
  import { useIntl } from 'react-intl';
26
25
  import { useQuery, useMutation } from 'react-query';
27
26
  import { useMatch } from 'react-router-dom';
@@ -89,12 +88,12 @@ export const EditPage = () => {
89
88
 
90
89
  return (
91
90
  <Main>
92
- <Helmet
93
- title={formatMessage(
91
+ <Page.Title>
92
+ {formatMessage(
94
93
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
95
94
  { name: 'Roles' }
96
95
  )}
97
- />
96
+ </Page.Title>
98
97
  <Formik
99
98
  enableReinitialize
100
99
  initialValues={{ name: role.name, description: role.description }}
@@ -29,7 +29,6 @@ import {
29
29
  useFetchClient,
30
30
  useRBAC,
31
31
  } from '@strapi/strapi/admin';
32
- import { Helmet } from 'react-helmet';
33
32
  import { useIntl } from 'react-intl';
34
33
  import { useMutation, useQuery } from 'react-query';
35
34
  import { NavLink } from 'react-router-dom';
@@ -158,12 +157,12 @@ export const RolesListPage = () => {
158
157
 
159
158
  return (
160
159
  <Layout>
161
- <Helmet
162
- title={formatMessage(
160
+ <Page.Title>
161
+ {formatMessage(
163
162
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
164
163
  { name: pageTitle }
165
164
  )}
166
- />
165
+ </Page.Title>
167
166
  <Page.Main>
168
167
  <HeaderLayout
169
168
  title={formatMessage({
@@ -4,11 +4,10 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
5
  const admin = require("@strapi/strapi/admin");
6
6
  const reactRouterDom = require("react-router-dom");
7
- const index = require("./index-JO4fO3Yj.js");
7
+ const index = require("./index-RdT-49jb.js");
8
8
  const designSystem = require("@strapi/design-system");
9
- const Icons = require("@strapi/icons");
9
+ const icons = require("@strapi/icons");
10
10
  const formik = require("formik");
11
- const Helmet = require("./Helmet-d9JljxUo.js");
12
11
  const reactIntl = require("react-intl");
13
12
  const reactQuery = require("react-query");
14
13
  const PropTypes = require("prop-types");
@@ -188,7 +187,7 @@ const SubCategory = ({ subCategory }) => {
188
187
  route: action.name
189
188
  }
190
189
  ) }),
191
- /* @__PURE__ */ jsxRuntime.jsx(Icons.Cog, {})
190
+ /* @__PURE__ */ jsxRuntime.jsx(icons.Cog, {})
192
191
  ]
193
192
  }
194
193
  )
@@ -645,15 +644,10 @@ const CreatePage = () => {
645
644
  await mutation.mutate({ ...data, ...permissions2, users: [] });
646
645
  };
647
646
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { children: [
648
- /* @__PURE__ */ jsxRuntime.jsx(
649
- Helmet.HelmetExport,
650
- {
651
- title: formatMessage(
652
- { id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
653
- { name: "Roles" }
654
- )
655
- }
656
- ),
647
+ /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
648
+ { id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
649
+ { name: "Roles" }
650
+ ) }),
657
651
  /* @__PURE__ */ jsxRuntime.jsx(
658
652
  formik.Formik,
659
653
  {
@@ -665,7 +659,7 @@ const CreatePage = () => {
665
659
  /* @__PURE__ */ jsxRuntime.jsx(
666
660
  designSystem.HeaderLayout,
667
661
  {
668
- primaryAction: !isLoadingPlugins && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", loading: mutation.isLoading, startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Check, {}), children: formatMessage({
662
+ primaryAction: !isLoadingPlugins && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", loading: mutation.isLoading, startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Check, {}), children: formatMessage({
669
663
  id: "global.save",
670
664
  defaultMessage: "Save"
671
665
  }) }),
@@ -796,15 +790,10 @@ const EditPage = () => {
796
790
  return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Loading, {});
797
791
  }
798
792
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { children: [
799
- /* @__PURE__ */ jsxRuntime.jsx(
800
- Helmet.HelmetExport,
801
- {
802
- title: formatMessage(
803
- { id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
804
- { name: "Roles" }
805
- )
806
- }
807
- ),
793
+ /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
794
+ { id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
795
+ { name: "Roles" }
796
+ ) }),
808
797
  /* @__PURE__ */ jsxRuntime.jsx(
809
798
  formik.Formik,
810
799
  {
@@ -822,7 +811,7 @@ const EditPage = () => {
822
811
  disabled: role.code === "strapi-super-admin",
823
812
  type: "submit",
824
813
  loading: mutation.isLoading,
825
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Check, {}),
814
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Check, {}),
826
815
  children: formatMessage({
827
816
  id: "global.save",
828
817
  defaultMessage: "Save"
@@ -958,7 +947,7 @@ const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelet
958
947
  { id: "app.component.table.edit", defaultMessage: "Edit {target}" },
959
948
  { target: `${role.name}` }
960
949
  ),
961
- children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Pencil, {})
950
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
962
951
  }
963
952
  ) : null,
964
953
  checkCanDeleteRole(role) && /* @__PURE__ */ jsxRuntime.jsx(
@@ -966,7 +955,7 @@ const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelet
966
955
  {
967
956
  onClick: () => handleClickDelete(role.id.toString()),
968
957
  noBorder: true,
969
- icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {}),
958
+ icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {}),
970
959
  label: formatMessage(
971
960
  { id: "global.delete-target", defaultMessage: "Delete {target}" },
972
961
  { target: `${role.name}` }
@@ -1082,15 +1071,10 @@ const RolesListPage = () => {
1082
1071
  return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Loading, {});
1083
1072
  }
1084
1073
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Layout, { children: [
1085
- /* @__PURE__ */ jsxRuntime.jsx(
1086
- Helmet.HelmetExport,
1087
- {
1088
- title: formatMessage(
1089
- { id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
1090
- { name: pageTitle }
1091
- )
1092
- }
1093
- ),
1074
+ /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
1075
+ { id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
1076
+ { name: pageTitle }
1077
+ ) }),
1094
1078
  /* @__PURE__ */ jsxRuntime.jsxs(admin.Page.Main, { children: [
1095
1079
  /* @__PURE__ */ jsxRuntime.jsx(
1096
1080
  designSystem.HeaderLayout,
@@ -1109,7 +1093,7 @@ const RolesListPage = () => {
1109
1093
  to: "new",
1110
1094
  as: reactRouterDom.NavLink,
1111
1095
  onClick: () => trackUsage("willCreateRole"),
1112
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Plus, {}),
1096
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
1113
1097
  size: "S",
1114
1098
  children: formatMessage({
1115
1099
  id: index.getTrad("List.button.roles"),
@@ -1187,4 +1171,4 @@ const Roles = () => {
1187
1171
  ] }) });
1188
1172
  };
1189
1173
  exports.default = Roles;
1190
- //# sourceMappingURL=index-_UNneVIg.js.map
1174
+ //# sourceMappingURL=index-21XWiNaI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-21XWiNaI.js","sources":["../../admin/src/contexts/UsersPermissionsContext/index.jsx","../../admin/src/utils/formatPluginName.js","../../admin/src/components/Permissions/init.js","../../admin/src/components/Permissions/PermissionRow/CheckboxWrapper.jsx","../../admin/src/components/Permissions/PermissionRow/SubCategory.jsx","../../admin/src/components/Permissions/PermissionRow/index.jsx","../../admin/src/components/Permissions/reducer.js","../../admin/src/components/Permissions/index.jsx","../../admin/src/components/BoundRoute/getMethodColor.js","../../admin/src/components/BoundRoute/index.jsx","../../admin/src/components/Policies/index.jsx","../../admin/src/components/UsersPermissions/init.js","../../admin/src/components/UsersPermissions/reducer.js","../../admin/src/components/UsersPermissions/index.jsx","../../admin/src/pages/Roles/constants.js","../../admin/src/utils/cleanPermissions.js","../../admin/src/pages/Roles/hooks/usePlugins.js","../../admin/src/pages/Roles/pages/CreatePage.jsx","../../admin/src/pages/Roles/pages/EditPage.jsx","../../admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx","../../admin/src/pages/Roles/pages/ListPage/index.jsx","../../admin/src/pages/Roles/index.jsx"],"sourcesContent":["import React, { createContext, useContext } from 'react';\n\nimport PropTypes from 'prop-types';\n\nconst UsersPermissions = createContext({});\n\nconst UsersPermissionsProvider = ({ children, value }) => {\n return <UsersPermissions.Provider value={value}>{children}</UsersPermissions.Provider>;\n};\n\nconst useUsersPermissions = () => useContext(UsersPermissions);\n\nUsersPermissionsProvider.propTypes = {\n children: PropTypes.node.isRequired,\n value: PropTypes.object.isRequired,\n};\n\nexport { UsersPermissions, UsersPermissionsProvider, useUsersPermissions };\n","import upperFirst from 'lodash/upperFirst';\n\nfunction formatPluginName(pluginSlug) {\n switch (pluginSlug) {\n case 'application':\n return 'Application';\n case 'plugin::content-manager':\n return 'Content manager';\n case 'plugin::content-type-builder':\n return 'Content types builder';\n case 'plugin::documentation':\n return 'Documentation';\n case 'plugin::email':\n return 'Email';\n case 'plugin::i18n':\n return 'i18n';\n case 'plugin::upload':\n return 'Upload';\n case 'plugin::users-permissions':\n return 'Users-permissions';\n default:\n return upperFirst(pluginSlug.replace('api::', '').replace('plugin::', ''));\n }\n}\n\nexport default formatPluginName;\n","const init = (initialState, permissions) => {\n const collapses = Object.keys(permissions)\n .sort()\n .map((name) => ({ name, isOpen: false }));\n\n return { ...initialState, collapses };\n};\n\nexport default init;\n","import { Box } from '@strapi/design-system';\nimport styled, { css } from 'styled-components';\n\nconst activeCheckboxWrapperStyles = css`\n background: ${(props) => props.theme.colors.primary100};\n svg {\n opacity: 1;\n }\n`;\n\nconst CheckboxWrapper = styled(Box)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n svg {\n opacity: 0;\n path {\n fill: ${(props) => props.theme.colors.primary600};\n }\n }\n\n /* Show active style both on hover and when the action is selected */\n ${(props) => props.isActive && activeCheckboxWrapperStyles}\n &:hover {\n ${activeCheckboxWrapperStyles}\n }\n`;\n\nexport default CheckboxWrapper;\n","import React, { useCallback, useMemo } from 'react';\n\nimport {\n Box,\n Checkbox,\n Flex,\n Typography,\n Grid,\n GridItem,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Cog as CogIcon } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useUsersPermissions } from '../../../contexts/UsersPermissionsContext';\n\nimport CheckboxWrapper from './CheckboxWrapper';\n\nconst Border = styled.div`\n flex: 1;\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst SubCategory = ({ subCategory }) => {\n const { formatMessage } = useIntl();\n const { onChange, onChangeSelectAll, onSelectedAction, selectedAction, modifiedData } =\n useUsersPermissions();\n\n const currentScopedModifiedData = useMemo(() => {\n return get(modifiedData, subCategory.name, {});\n }, [modifiedData, subCategory]);\n\n const hasAllActionsSelected = useMemo(() => {\n return Object.values(currentScopedModifiedData).every((action) => action.enabled === true);\n }, [currentScopedModifiedData]);\n\n const hasSomeActionsSelected = useMemo(() => {\n return (\n Object.values(currentScopedModifiedData).some((action) => action.enabled === true) &&\n !hasAllActionsSelected\n );\n }, [currentScopedModifiedData, hasAllActionsSelected]);\n\n const handleChangeSelectAll = useCallback(\n ({ target: { name } }) => {\n onChangeSelectAll({ target: { name, value: !hasAllActionsSelected } });\n },\n [hasAllActionsSelected, onChangeSelectAll]\n );\n\n const isActionSelected = useCallback(\n (actionName) => {\n return selectedAction === actionName;\n },\n [selectedAction]\n );\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategory.label}\n </Typography>\n </Box>\n <Border />\n <Box paddingLeft={4}>\n <Checkbox\n name={subCategory.name}\n value={hasAllActionsSelected}\n onValueChange={(value) =>\n handleChangeSelectAll({ target: { name: subCategory.name, value } })\n }\n indeterminate={hasSomeActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid gap={2} style={{ flex: 1 }}>\n {subCategory.actions.map((action) => {\n const name = `${action.name}.enabled`;\n\n return (\n <GridItem col={6} key={action.name}>\n <CheckboxWrapper isActive={isActionSelected(action.name)} padding={2} hasRadius>\n <Checkbox\n value={get(modifiedData, name, false)}\n name={name}\n onValueChange={(value) => onChange({ target: { name, value } })}\n >\n {action.label}\n </Checkbox>\n <button\n type=\"button\"\n onClick={() => onSelectedAction(action.name)}\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <VisuallyHidden as=\"span\">\n {formatMessage(\n {\n id: 'app.utils.show-bound-route',\n defaultMessage: 'Show bound route for {route}',\n },\n {\n route: action.name,\n }\n )}\n </VisuallyHidden>\n <CogIcon />\n </button>\n </CheckboxWrapper>\n </GridItem>\n );\n })}\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nSubCategory.propTypes = {\n subCategory: PropTypes.object.isRequired,\n};\n\nexport default SubCategory;\n","import React, { useMemo } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport sortBy from 'lodash/sortBy';\nimport PropTypes from 'prop-types';\n\nimport SubCategory from './SubCategory';\n\nconst PermissionRow = ({ name, permissions }) => {\n const subCategories = useMemo(() => {\n return sortBy(\n Object.values(permissions.controllers).reduce((acc, curr, index) => {\n const currentName = `${name}.controllers.${Object.keys(permissions.controllers)[index]}`;\n const actions = sortBy(\n Object.keys(curr).reduce((acc, current) => {\n return [\n ...acc,\n {\n ...curr[current],\n label: current,\n name: `${currentName}.${current}`,\n },\n ];\n }, []),\n 'label'\n );\n\n return [\n ...acc,\n {\n actions,\n label: Object.keys(permissions.controllers)[index],\n name: currentName,\n },\n ];\n }, []),\n 'label'\n );\n }, [name, permissions]);\n\n return (\n <Box padding={6}>\n {subCategories.map((subCategory) => (\n <SubCategory key={subCategory.name} subCategory={subCategory} />\n ))}\n </Box>\n );\n};\n\nPermissionRow.propTypes = {\n name: PropTypes.string.isRequired,\n permissions: PropTypes.object.isRequired,\n};\n\nexport default PermissionRow;\n","import { produce } from 'immer';\n\nconst initialState = {\n collapses: [],\n};\n\nconst reducer = (state, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case 'TOGGLE_COLLAPSE': {\n draftState.collapses = state.collapses.map((collapse, index) => {\n if (index === action.index) {\n return { ...collapse, isOpen: !collapse.isOpen };\n }\n\n return { ...collapse, isOpen: false };\n });\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { initialState, reducer };\n","import React, { useReducer } from 'react';\n\nimport { Accordion, AccordionContent, AccordionToggle, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useUsersPermissions } from '../../contexts/UsersPermissionsContext';\nimport formatPluginName from '../../utils/formatPluginName';\n\nimport init from './init';\nimport PermissionRow from './PermissionRow';\nimport { initialState, reducer } from './reducer';\n\nconst Permissions = () => {\n const { modifiedData } = useUsersPermissions();\n const { formatMessage } = useIntl();\n const [{ collapses }, dispatch] = useReducer(reducer, initialState, (state) =>\n init(state, modifiedData)\n );\n\n const handleToggle = (index) =>\n dispatch({\n type: 'TOGGLE_COLLAPSE',\n index,\n });\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n {collapses.map((collapse, index) => (\n <Accordion\n expanded={collapse.isOpen}\n onToggle={() => handleToggle(index)}\n key={collapse.name}\n variant={index % 2 === 0 ? 'secondary' : undefined}\n >\n <AccordionToggle\n title={formatPluginName(collapse.name)}\n description={formatMessage(\n {\n id: 'users-permissions.Plugin.permissions.plugins.description',\n defaultMessage: 'Define all allowed actions for the {name} plugin.',\n },\n { name: collapse.name }\n )}\n variant={index % 2 ? 'primary' : 'secondary'}\n />\n <AccordionContent>\n <PermissionRow permissions={modifiedData[collapse.name]} name={collapse.name} />\n </AccordionContent>\n </Accordion>\n ))}\n </Flex>\n );\n};\n\nexport default Permissions;\n","const getMethodColor = (verb) => {\n switch (verb) {\n case 'POST': {\n return {\n text: 'success600',\n border: 'success200',\n background: 'success100',\n };\n }\n case 'GET': {\n return {\n text: 'secondary600',\n border: 'secondary200',\n background: 'secondary100',\n };\n }\n case 'PUT': {\n return {\n text: 'warning600',\n border: 'warning200',\n background: 'warning100',\n };\n }\n case 'DELETE': {\n return {\n text: 'danger600',\n border: 'danger200',\n background: 'danger100',\n };\n }\n default: {\n return {\n text: 'neutral600',\n border: 'neutral200',\n background: 'neutral100',\n };\n }\n }\n};\n\nexport default getMethodColor;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport map from 'lodash/map';\nimport tail from 'lodash/tail';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport getMethodColor from './getMethodColor';\n\nconst MethodBox = styled(Box)`\n margin: -1px;\n border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};\n`;\n\nfunction BoundRoute({ route }) {\n const { formatMessage } = useIntl();\n\n const { method, handler: title, path } = route;\n const formattedRoute = path ? tail(path.split('/')) : [];\n const [controller = '', action = ''] = title ? title.split('.') : [];\n const colors = getMethodColor(route.method);\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'users-permissions.BoundRoute.title',\n defaultMessage: 'Bound route to',\n })}\n &nbsp;\n <span>{controller}</span>\n <Typography variant=\"delta\" textColor=\"primary600\">\n .{action}\n </Typography>\n </Typography>\n <Flex hasRadius background=\"neutral0\" borderColor=\"neutral200\" gap={0}>\n <MethodBox background={colors.background} borderColor={colors.border} padding={2}>\n <Typography fontWeight=\"bold\" textColor={colors.text}>\n {method}\n </Typography>\n </MethodBox>\n <Box paddingLeft={2} paddingRight={2}>\n {map(formattedRoute, (value) => (\n <Typography key={value} textColor={value.includes(':') ? 'neutral600' : 'neutral900'}>\n /{value}\n </Typography>\n ))}\n </Box>\n </Flex>\n </Flex>\n );\n}\n\nBoundRoute.defaultProps = {\n route: {\n handler: 'Nocontroller.error',\n method: 'GET',\n path: '/there-is-no-path',\n },\n};\n\nBoundRoute.propTypes = {\n route: PropTypes.shape({\n handler: PropTypes.string,\n method: PropTypes.string,\n path: PropTypes.string,\n }),\n};\n\nexport default BoundRoute;\n","import React from 'react';\n\nimport { Flex, GridItem, Typography } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport without from 'lodash/without';\nimport { useIntl } from 'react-intl';\n\nimport { useUsersPermissions } from '../../contexts/UsersPermissionsContext';\nimport BoundRoute from '../BoundRoute';\n\nconst Policies = () => {\n const { formatMessage } = useIntl();\n const { selectedAction, routes } = useUsersPermissions();\n\n const path = without(selectedAction.split('.'), 'controllers');\n const controllerRoutes = get(routes, path[0]);\n const pathResolved = path.slice(1).join('.');\n\n const displayedRoutes = isEmpty(controllerRoutes)\n ? []\n : controllerRoutes.filter((o) => o.handler.endsWith(pathResolved));\n\n return (\n <GridItem\n col={5}\n background=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n style={{ minHeight: '100%' }}\n >\n {selectedAction ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {displayedRoutes.map((route, key) => (\n // eslint-disable-next-line react/no-array-index-key\n <BoundRoute key={key} route={route} />\n ))}\n </Flex>\n ) : (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'users-permissions.Policies.header.title',\n defaultMessage: 'Advanced settings',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'users-permissions.Policies.header.hint',\n defaultMessage:\n \"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route\",\n })}\n </Typography>\n </Flex>\n )}\n </GridItem>\n );\n};\n\nexport default Policies;\n","const init = (state, permissions, routes) => {\n return {\n ...state,\n initialData: permissions,\n modifiedData: permissions,\n routes,\n };\n};\n\nexport default init;\n","/* eslint-disable consistent-return */\nimport { produce } from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport take from 'lodash/take';\n\nexport const initialState = {\n initialData: {},\n modifiedData: {},\n routes: {},\n selectedAction: '',\n policies: [],\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE': {\n const keysLength = action.keys.length;\n const isChangingCheckbox = action.keys[keysLength - 1] === 'enabled';\n\n if (action.value && isChangingCheckbox) {\n const selectedAction = take(action.keys, keysLength - 1).join('.');\n draftState.selectedAction = selectedAction;\n }\n\n set(draftState, ['modifiedData', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_SELECT_ALL': {\n const pathToValue = ['modifiedData', ...action.keys];\n const oldValues = get(state, pathToValue, {});\n const updatedValues = Object.keys(oldValues).reduce((acc, current) => {\n acc[current] = { ...oldValues[current], enabled: action.value };\n\n return acc;\n }, {});\n\n set(draftState, pathToValue, updatedValues);\n\n break;\n }\n case 'ON_RESET': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'ON_SUBMIT_SUCCEEDED': {\n draftState.initialData = state.modifiedData;\n break;\n }\n\n case 'SELECT_ACTION': {\n const { actionToSelect } = action;\n draftState.selectedAction = actionToSelect === state.selectedAction ? '' : actionToSelect;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { forwardRef, memo, useImperativeHandle, useReducer } from 'react';\n\nimport { Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { UsersPermissionsProvider } from '../../contexts/UsersPermissionsContext';\nimport getTrad from '../../utils/getTrad';\nimport Permissions from '../Permissions';\nimport Policies from '../Policies';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nconst UsersPermissions = forwardRef(({ permissions, routes }, ref) => {\n const { formatMessage } = useIntl();\n const [state, dispatch] = useReducer(reducer, initialState, (state) =>\n init(state, permissions, routes)\n );\n\n useImperativeHandle(ref, () => ({\n getPermissions() {\n return {\n permissions: state.modifiedData,\n };\n },\n resetForm() {\n dispatch({ type: 'ON_RESET' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'ON_SUBMIT_SUCCEEDED' });\n },\n }));\n\n const handleChange = ({ target: { name, value } }) =>\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value: value === 'empty__string_value' ? '' : value,\n });\n\n const handleChangeSelectAll = ({ target: { name, value } }) =>\n dispatch({\n type: 'ON_CHANGE_SELECT_ALL',\n keys: name.split('.'),\n value,\n });\n\n const handleSelectedAction = (actionToSelect) =>\n dispatch({\n type: 'SELECT_ACTION',\n actionToSelect,\n });\n\n const providerValue = {\n ...state,\n onChange: handleChange,\n onChangeSelectAll: handleChangeSelectAll,\n onSelectedAction: handleSelectedAction,\n };\n\n return (\n <UsersPermissionsProvider value={providerValue}>\n <Grid gap={0} shadow=\"filterShadow\" hasRadius background=\"neutral0\">\n <GridItem col={7} paddingTop={6} paddingBottom={6} paddingLeft={7} paddingRight={7}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('Plugins.header.title'),\n defaultMessage: 'Permissions',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('Plugins.header.description'),\n defaultMessage: 'Only actions bound by a route are listed below.',\n })}\n </Typography>\n </Flex>\n <Permissions />\n </Flex>\n </GridItem>\n <Policies />\n </Grid>\n </UsersPermissionsProvider>\n );\n});\n\nUsersPermissions.propTypes = {\n permissions: PropTypes.object.isRequired,\n routes: PropTypes.object.isRequired,\n};\n\nexport default memo(UsersPermissions);\n","import { translatedErrors } from '@strapi/strapi/admin';\nimport * as yup from 'yup';\n\nexport const createRoleSchema = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n","import isEmpty from 'lodash/isEmpty';\n\nconst cleanPermissions = (permissions) =>\n Object.keys(permissions).reduce((acc, current) => {\n const currentPermission = permissions[current].controllers;\n const cleanedControllers = Object.keys(currentPermission).reduce((acc2, curr) => {\n if (isEmpty(currentPermission[curr])) {\n return acc2;\n }\n\n acc2[curr] = currentPermission[curr];\n\n return acc2;\n }, {});\n\n if (isEmpty(cleanedControllers)) {\n return acc;\n }\n\n acc[current] = { controllers: cleanedControllers };\n\n return acc;\n }, {});\n\nexport default cleanPermissions;\n","import { useEffect } from 'react';\n\nimport { useAPIErrorHandler, useNotification, useFetchClient } from '@strapi/strapi/admin';\nimport { useQueries } from 'react-query';\n\nimport { cleanPermissions, getTrad } from '../../../utils';\n\nexport const usePlugins = () => {\n const { toggleNotification } = useNotification();\n const { get } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n\n const [\n {\n data: permissions,\n isLoading: isLoadingPermissions,\n error: permissionsError,\n refetch: refetchPermissions,\n },\n { data: routes, isLoading: isLoadingRoutes, error: routesError, refetch: refetchRoutes },\n ] = useQueries([\n {\n queryKey: ['users-permissions', 'permissions'],\n async queryFn() {\n const {\n data: { permissions },\n } = await get(`/users-permissions/permissions`);\n\n return permissions;\n },\n },\n {\n queryKey: ['users-permissions', 'routes'],\n async queryFn() {\n const {\n data: { routes },\n } = await get(`/users-permissions/routes`);\n\n return routes;\n },\n },\n ]);\n\n const refetchQueries = async () => {\n await Promise.all([refetchPermissions(), refetchRoutes()]);\n };\n\n useEffect(() => {\n if (permissionsError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(permissionsError),\n });\n }\n }, [toggleNotification, permissionsError, formatAPIError]);\n\n useEffect(() => {\n if (routesError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(routesError),\n });\n }\n }, [toggleNotification, routesError, formatAPIError]);\n\n const isLoading = isLoadingPermissions || isLoadingRoutes;\n\n return {\n // TODO: these return values need to be memoized, otherwise\n // they will create infinite rendering loops when used as\n // effect dependencies\n permissions: permissions ? cleanPermissions(permissions) : {},\n routes: routes ?? {},\n\n getData: refetchQueries,\n isLoading,\n };\n};\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Page, useTracking, useNotification, useFetchClient } from '@strapi/strapi/admin';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useNavigate } from 'react-router-dom';\n\nimport UsersPermissions from '../../../components/UsersPermissions';\nimport { PERMISSIONS } from '../../../constants';\nimport getTrad from '../../../utils/getTrad';\nimport { createRoleSchema } from '../constants';\nimport { usePlugins } from '../hooks/usePlugins';\n\nexport const CreatePage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const { isLoading: isLoadingPlugins, permissions, routes } = usePlugins();\n const { trackUsage } = useTracking();\n const permissionsRef = React.useRef();\n const { post } = useFetchClient();\n const mutation = useMutation((body) => post(`/users-permissions/roles`, body), {\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n },\n\n onSuccess() {\n trackUsage('didCreateRole');\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('Settings.roles.created'),\n defaultMessage: 'Role created',\n }),\n });\n\n // Forcing redirecting since we don't have the id in the response\n navigate(-1);\n },\n });\n\n const handleCreateRoleSubmit = async (data) => {\n // TODO: refactor. Child -> parent component communication is evil;\n // We should either move the provider one level up or move the state\n // straight into redux.\n const permissions = permissionsRef.current.getPermissions();\n\n await mutation.mutate({ ...data, ...permissions, users: [] });\n };\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'Roles' }\n )}\n </Page.Title>\n <Formik\n enableReinitialize\n initialValues={{ name: '', description: '' }}\n onSubmit={handleCreateRoleSubmit}\n validationSchema={createRoleSchema}\n >\n {({ handleSubmit, values, handleChange, errors }) => (\n <Form noValidate onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n !isLoadingPlugins && (\n <Button type=\"submit\" loading={mutation.isLoading} startIcon={<Check />}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n )\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n />\n <ContentLayout>\n <Flex\n background=\"neutral0\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={7}\n hasRadius\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n shadow=\"filterShadow\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\">\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('EditPage.form.roles'),\n defaultMessage: 'Role details',\n })}\n </Typography>\n\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n value={values.name || ''}\n onChange={handleChange}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n error={\n errors?.name\n ? formatMessage({ id: errors.name, defaultMessage: 'Name is required' })\n : false\n }\n required\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n id=\"description\"\n value={values.description || ''}\n onChange={handleChange}\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n error={\n errors?.description\n ? formatMessage({\n id: errors.description,\n defaultMessage: 'Description is required',\n })\n : false\n }\n required\n />\n </GridItem>\n </Grid>\n </Flex>\n\n {!isLoadingPlugins && (\n <UsersPermissions\n ref={permissionsRef}\n permissions={permissions}\n routes={routes}\n />\n )}\n </Flex>\n </ContentLayout>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport const ProtectedRolesCreatePage = () => (\n <Page.Protect permissions={PERMISSIONS.createRole}>\n <CreatePage />\n </Page.Protect>\n);\n","import * as React from 'react';\n\nimport {\n ContentLayout,\n HeaderLayout,\n Main,\n Button,\n Flex,\n TextInput,\n Textarea,\n Typography,\n GridItem,\n Grid,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport {\n Page,\n BackButton,\n useAPIErrorHandler,\n useNotification,\n useFetchClient,\n} from '@strapi/strapi/admin';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useQuery, useMutation } from 'react-query';\nimport { useMatch } from 'react-router-dom';\n\nimport UsersPermissions from '../../../components/UsersPermissions';\nimport { PERMISSIONS } from '../../../constants';\nimport getTrad from '../../../utils/getTrad';\nimport { createRoleSchema } from '../constants';\nimport { usePlugins } from '../hooks/usePlugins';\n\nexport const EditPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const {\n params: { id },\n } = useMatch(`/settings/users-permissions/roles/:id`);\n const { get } = useFetchClient();\n const { isLoading: isLoadingPlugins, routes } = usePlugins();\n const {\n data: role,\n isLoading: isLoadingRole,\n refetch: refetchRole,\n } = useQuery(['users-permissions', 'role', id], async () => {\n // TODO: why doesn't this endpoint follow the admin API conventions?\n const {\n data: { role },\n } = await get(`/users-permissions/roles/${id}`);\n\n return role;\n });\n\n const permissionsRef = React.useRef();\n const { put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n const mutation = useMutation((body) => put(`/users-permissions/roles/${id}`, body), {\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n\n async onSuccess() {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('Settings.roles.created'),\n defaultMessage: 'Role edited',\n }),\n });\n\n await refetchRole();\n },\n });\n\n const handleEditRoleSubmit = async (data) => {\n const permissions = permissionsRef.current.getPermissions();\n\n await mutation.mutate({ ...data, ...permissions, users: [] });\n };\n\n if (isLoadingRole) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'Roles' }\n )}\n </Page.Title>\n <Formik\n enableReinitialize\n initialValues={{ name: role.name, description: role.description }}\n onSubmit={handleEditRoleSubmit}\n validationSchema={createRoleSchema}\n >\n {({ handleSubmit, values, handleChange, errors }) => (\n <Form noValidate onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n !isLoadingPlugins ? (\n <Button\n disabled={role.code === 'strapi-super-admin'}\n type=\"submit\"\n loading={mutation.isLoading}\n startIcon={<Check />}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n ) : null\n }\n title={role.name}\n subtitle={role.description}\n navigationAction={<BackButton />}\n />\n <ContentLayout>\n <Flex\n background=\"neutral0\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={7}\n hasRadius\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n shadow=\"filterShadow\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('EditPage.form.roles'),\n defaultMessage: 'Role details',\n })}\n </Typography>\n\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n value={values.name || ''}\n onChange={handleChange}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n error={\n errors?.name\n ? formatMessage({ id: errors.name, defaultMessage: 'Name is required' })\n : false\n }\n required\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n id=\"description\"\n value={values.description || ''}\n onChange={handleChange}\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n error={\n errors?.description\n ? formatMessage({\n id: errors.description,\n defaultMessage: 'Description is required',\n })\n : false\n }\n required\n />\n </GridItem>\n </Grid>\n </Flex>\n\n {!isLoadingPlugins && (\n <UsersPermissions\n ref={permissionsRef}\n permissions={role.permissions}\n routes={routes}\n />\n )}\n </Flex>\n </ContentLayout>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport const ProtectedRolesEditPage = () => (\n <Page.Protect permissions={PERMISSIONS.updateRole}>\n <EditPage />\n </Page.Protect>\n);\n","import React from 'react';\n\nimport { Flex, IconButton, Link, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport styled from 'styled-components';\n\nconst EditLink = styled(Link)`\n align-items: center;\n height: ${32 / 16}rem;\n display: flex;\n justify-content: center;\n padding: ${({ theme }) => `${theme.spaces[2]}}`};\n width: ${32 / 16}rem;\n\n svg {\n height: ${12 / 16}rem;\n width: ${12 / 16}rem;\n\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n\n &:hover,\n &:focus {\n svg {\n path {\n fill: ${({ theme }) => theme.colors.neutral800};\n }\n }\n }\n`;\n\nconst TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelete }) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const [showConfirmDelete, setShowConfirmDelete] = onDelete;\n\n const checkCanDeleteRole = (role) =>\n canDelete && !['public', 'authenticated'].includes(role.type);\n\n const handleClickDelete = (id) => {\n setRoleToDelete(id);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n return (\n <Tbody>\n {sortedRoles?.map((role) => (\n <Tr key={role.name} onClick={() => navigate(role.id.toString())}>\n <Td width=\"20%\">\n <Typography>{role.name}</Typography>\n </Td>\n <Td width=\"50%\">\n <Typography>{role.description}</Typography>\n </Td>\n <Td width=\"30%\">\n <Typography>\n {formatMessage(\n {\n id: 'Roles.RoleRow.user-count',\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: role.nb_users }\n )}\n </Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"end\" onClick={(e) => e.stopPropagation()}>\n {canUpdate ? (\n <EditLink\n to={role.id.toString()}\n aria-label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: `${role.name}` }\n )}\n >\n <Pencil />\n </EditLink>\n ) : null}\n\n {checkCanDeleteRole(role) && (\n <IconButton\n onClick={() => handleClickDelete(role.id.toString())}\n noBorder\n icon={<Trash />}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: `${role.name}` }\n )}\n />\n )}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n );\n};\n\nexport default TableBody;\n\nTableBody.defaultProps = {\n canDelete: false,\n canUpdate: false,\n};\n\nTableBody.propTypes = {\n onDelete: PropTypes.array.isRequired,\n permissions: PropTypes.object.isRequired,\n setRoleToDelete: PropTypes.func.isRequired,\n sortedRoles: PropTypes.array.isRequired,\n canDelete: PropTypes.bool,\n canUpdate: PropTypes.bool,\n};\n","import React, { useState } from 'react';\n\nimport {\n ActionLayout,\n ContentLayout,\n HeaderLayout,\n Layout,\n Table,\n Th,\n Thead,\n Tr,\n Typography,\n useNotifyAT,\n VisuallyHidden,\n EmptyStateLayout,\n useCollator,\n useFilter,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { Plus } from '@strapi/icons';\nimport {\n ConfirmDialog,\n useTracking,\n Page,\n SearchInput,\n BackButton,\n useNotification,\n useQueryParams,\n useFetchClient,\n useRBAC,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { NavLink } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nimport TableBody from './components/TableBody';\n\nexport const RolesListPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const [{ query }] = useQueryParams();\n const _q = query?._q || '';\n const [showConfirmDelete, setShowConfirmDelete] = useState(false);\n const [roleToDelete, setRoleToDelete] = useState();\n const { del, get } = useFetchClient();\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canRead, canDelete, canCreate, canUpdate },\n } = useRBAC({\n create: PERMISSIONS.createRole,\n read: PERMISSIONS.readRoles,\n update: PERMISSIONS.updateRole,\n delete: PERMISSIONS.deleteRole,\n });\n\n const {\n isLoading: isLoadingForData,\n data: { roles },\n isFetching,\n refetch,\n } = useQuery('get-roles', () => fetchData(toggleNotification, formatMessage, notifyStatus), {\n initialData: {},\n enabled: canRead,\n });\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n /**\n * @type {Intl.Collator}\n */\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;\n\n const handleShowConfirmDelete = () => {\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const deleteData = async (id, formatMessage, toggleNotification) => {\n try {\n await del(`/users-permissions/roles/${id}`);\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const fetchData = async (toggleNotification, formatMessage, notifyStatus) => {\n try {\n const { data } = await get('/users-permissions/roles');\n notifyStatus('The roles have loaded successfully');\n\n return data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n throw new Error(err);\n }\n };\n\n const emptyLayout = {\n roles: {\n id: getTrad('Roles.empty'),\n defaultMessage: \"You don't have any roles yet.\",\n },\n search: {\n id: getTrad('Roles.empty.search'),\n defaultMessage: 'No roles match the search.',\n },\n };\n\n const pageTitle = formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n });\n\n const deleteMutation = useMutation((id) => deleteData(id, formatMessage, toggleNotification), {\n async onSuccess() {\n await refetch();\n },\n });\n\n const handleConfirmDelete = async () => {\n await deleteMutation.mutateAsync(roleToDelete);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const sortedRoles = (roles || [])\n .filter((role) => contains(role.name, _q) || contains(role.description, _q))\n .sort(\n (a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)\n );\n\n const emptyContent = _q && !sortedRoles.length ? 'search' : 'roles';\n\n const colCount = 4;\n const rowCount = (roles?.length || 0) + 1;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layout>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: pageTitle }\n )}\n </Page.Title>\n <Page.Main>\n <HeaderLayout\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n primaryAction={\n canCreate ? (\n <LinkButton\n to=\"new\"\n as={NavLink}\n onClick={() => trackUsage('willCreateRole')}\n startIcon={<Plus />}\n size=\"S\"\n >\n {formatMessage({\n id: getTrad('List.button.roles'),\n defaultMessage: 'Add new role',\n })}\n </LinkButton>\n ) : null\n }\n navigationAction={<BackButton />}\n />\n\n <ActionLayout\n startActions={\n <SearchInput\n label={formatMessage({\n id: 'app.component.search.label',\n defaultMessage: 'Search',\n })}\n />\n }\n />\n\n <ContentLayout>\n {!canRead && <Page.NoPermissions />}\n {canRead && sortedRoles && sortedRoles?.length ? (\n <Table colCount={colCount} rowCount={rowCount}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <TableBody\n sortedRoles={sortedRoles}\n canDelete={canDelete}\n canUpdate={canUpdate}\n permissions={PERMISSIONS}\n setRoleToDelete={setRoleToDelete}\n onDelete={[showConfirmDelete, setShowConfirmDelete]}\n />\n </Table>\n ) : (\n <EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />\n )}\n </ContentLayout>\n <ConfirmDialog\n onConfirm={handleConfirmDelete}\n onClose={handleShowConfirmDelete}\n isOpen={showConfirmDelete}\n />\n </Page.Main>\n </Layout>\n );\n};\n\nexport const ProtectedRolesListPage = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.accessRoles}>\n <RolesListPage />\n </Page.Protect>\n );\n};\n","import React from 'react';\n\nimport { Page } from '@strapi/strapi/admin';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants';\n\nimport { ProtectedRolesCreatePage } from './pages/CreatePage';\nimport { ProtectedRolesEditPage } from './pages/EditPage';\nimport { ProtectedRolesListPage } from './pages/ListPage';\n\nconst Roles = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.accessRoles}>\n <Routes>\n <Route index element={<ProtectedRolesListPage />} />\n <Route path=\"new\" element={<ProtectedRolesCreatePage />} />\n <Route path=\":id\" element={<ProtectedRolesEditPage />} />\n </Routes>\n </Page.Protect>\n );\n};\n\nexport default Roles;\n"],"names":["UsersPermissions","createContext","jsx","useContext","PropTypes","upperFirst","init","initialState","css","styled","Box","useIntl","useMemo","get","useCallback","jsxs","Flex","Typography","Checkbox","Grid","GridItem","VisuallyHidden","CogIcon","sortBy","index","acc","reducer","produce","useReducer","Accordion","AccordionToggle","AccordionContent","tail","without","isEmpty","take","set","forwardRef","state","useImperativeHandle","getTrad","memo","yup","translatedErrors","useNotification","useFetchClient","useAPIErrorHandler","useQueries","permissions","routes","useEffect","useNavigate","useTracking","React","useMutation","Main","Page","Formik","Form","HeaderLayout","Button","Check","ContentLayout","TextInput","Textarea","PERMISSIONS","useMatch","useQuery","role","BackButton","Link","Tbody","Tr","Td","Pencil","IconButton","Trash","useNotifyAT","useQueryParams","useState","useRBAC","useFilter","useCollator","formatMessage","toggleNotification","notifyStatus","Layout","LinkButton","NavLink","Plus","ActionLayout","SearchInput","Table","Thead","Th","EmptyStateLayout","ConfirmDialog","Routes","Route"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAMA,qBAAmBC,MAAAA,cAAc,CAAA,CAAE;AAEzC,MAAM,2BAA2B,CAAC,EAAE,UAAU,YAAY;AACxD,SAAQC,2BAAAA,IAAAF,mBAAiB,UAAjB,EAA0B,OAAe,SAAS,CAAA;AAC5D;AAEA,MAAM,sBAAsB,MAAMG,iBAAWH,kBAAgB;AAE7D,yBAAyB,YAAY;AAAA,EACnC,UAAUI,mBAAAA,QAAU,KAAK;AAAA,EACzB,OAAOA,mBAAAA,QAAU,OAAO;AAC1B;ACbA,SAAS,iBAAiB,YAAY;AACpC,UAAQ,YAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAOC,oBAAU,QAAC,WAAW,QAAQ,SAAS,EAAE,EAAE,QAAQ,YAAY,EAAE,CAAC;AAAA,EAC5E;AACH;ACvBA,MAAMC,SAAO,CAACC,eAAc,gBAAgB;AAC1C,QAAM,YAAY,OAAO,KAAK,WAAW,EACtC,KAAM,EACN,IAAI,CAAC,UAAU,EAAE,MAAM,QAAQ,MAAO,EAAC;AAE1C,SAAO,EAAE,GAAGA,eAAc;AAC5B;ACHA,MAAM,8BAA8BC,OAAAA;AAAAA,gBACpB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAMxD,MAAM,kBAAkBC,gBAAAA,QAAOC,aAAAA,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQpB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlD,CAAC,UAAU,MAAM,YAAY,2BAA2B;AAAA;AAAA,MAEtD,2BAA2B;AAAA;AAAA;ACJjC,MAAM,SAASD,gBAAO,QAAA;AAAA;AAAA;AAAA,0BAGI,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAGhE,MAAM,cAAc,CAAC,EAAE,kBAAkB;AACjC,QAAA,EAAE,kBAAkBE,UAAAA;AAC1B,QAAM,EAAE,UAAU,mBAAmB,kBAAkB,gBAAgB,aAAA,IACrE;AAEI,QAAA,4BAA4BC,MAAAA,QAAQ,MAAM;AAC9C,WAAOC,aAAI,QAAA,cAAc,YAAY,MAAM,CAAE,CAAA;AAAA,EAAA,GAC5C,CAAC,cAAc,WAAW,CAAC;AAExB,QAAA,wBAAwBD,MAAAA,QAAQ,MAAM;AACnC,WAAA,OAAO,OAAO,yBAAyB,EAAE,MAAM,CAAC,WAAW,OAAO,YAAY,IAAI;AAAA,EAAA,GACxF,CAAC,yBAAyB,CAAC;AAExB,QAAA,yBAAyBA,MAAAA,QAAQ,MAAM;AAEzC,WAAA,OAAO,OAAO,yBAAyB,EAAE,KAAK,CAAC,WAAW,OAAO,YAAY,IAAI,KACjF,CAAC;AAAA,EAAA,GAEF,CAAC,2BAA2B,qBAAqB,CAAC;AAErD,QAAM,wBAAwBE,MAAA;AAAA,IAC5B,CAAC,EAAE,QAAQ,EAAE,KAAA,QAAa;AACN,wBAAA,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,yBAAyB;AAAA,IACvE;AAAA,IACA,CAAC,uBAAuB,iBAAiB;AAAA,EAAA;AAG3C,QAAM,mBAAmBA,MAAA;AAAA,IACvB,CAAC,eAAe;AACd,aAAO,mBAAmB;AAAA,IAC5B;AAAA,IACA,CAAC,cAAc;AAAA,EAAA;AAGjB,yCACGJ,kBACC,EAAA,UAAA;AAAA,IAAAK,2BAAA,KAACC,aAAK,MAAA,EAAA,gBAAe,iBAAgB,YAAW,UAC9C,UAAA;AAAA,MAACd,2BAAA,IAAAQ,aAAA,KAAA,EAAI,cAAc,GACjB,UAACR,2BAAA,IAAAe,yBAAA,EAAW,SAAQ,SAAQ,WAAU,cACnC,UAAY,YAAA,MACf,CAAA,GACF;AAAA,qCACC,QAAO,EAAA;AAAA,MACRf,2BAAAA,IAACQ,aAAAA,KAAI,EAAA,aAAa,GAChB,UAAAR,2BAAA;AAAA,QAACgB,aAAA;AAAA,QAAA;AAAA,UACC,MAAM,YAAY;AAAA,UAClB,OAAO;AAAA,UACP,eAAe,CAAC,UACd,sBAAsB,EAAE,QAAQ,EAAE,MAAM,YAAY,MAAM,MAAM,GAAG;AAAA,UAErE,eAAe;AAAA,UAEd,wBAAc,EAAE,IAAI,wBAAwB,gBAAgB,cAAc;AAAA,QAAA;AAAA,MAAA,GAE/E;AAAA,IAAA,GACF;AAAA,mCACCF,aAAAA,MAAK,EAAA,YAAY,GAAG,eAAe,GAClC,yCAACG,aAAAA,MAAK,EAAA,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,GAC5B,sBAAY,QAAQ,IAAI,CAAC,WAAW;AAC7B,YAAA,OAAO,GAAG,OAAO,IAAI;AAE3B,aACGjB,2BAAAA,IAAAkB,aAAAA,UAAA,EAAS,KAAK,GACb,0CAAC,iBAAgB,EAAA,UAAU,iBAAiB,OAAO,IAAI,GAAG,SAAS,GAAG,WAAS,MAC7E,UAAA;AAAA,QAAAlB,2BAAA;AAAA,UAACgB,aAAA;AAAA,UAAA;AAAA,YACC,OAAOL,aAAA,QAAI,cAAc,MAAM,KAAK;AAAA,YACpC;AAAA,YACA,eAAe,CAAC,UAAU,SAAS,EAAE,QAAQ,EAAE,MAAM,MAAM,GAAG;AAAA,YAE7D,UAAO,OAAA;AAAA,UAAA;AAAA,QACV;AAAA,QACAE,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAM,iBAAiB,OAAO,IAAI;AAAA,YAC3C,OAAO,EAAE,SAAS,eAAe,YAAY,SAAS;AAAA,YAEtD,UAAA;AAAA,cAACb,2BAAAA,IAAAmB,aAAAA,gBAAA,EAAe,IAAG,QAChB,UAAA;AAAA,gBACC;AAAA,kBACE,IAAI;AAAA,kBACJ,gBAAgB;AAAA,gBAClB;AAAA,gBACA;AAAA,kBACE,OAAO,OAAO;AAAA,gBAChB;AAAA,cAAA,GAEJ;AAAA,6CACCC,MAAQ,KAAA,EAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACX;AAAA,MACF,EAAA,CAAA,EAAA,GA3BqB,OAAO,IA4B9B;AAAA,IAAA,CAEH,GACH,EACF,CAAA;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,YAAY,YAAY;AAAA,EACtB,aAAalB,mBAAAA,QAAU,OAAO;AAChC;ACxHA,MAAM,gBAAgB,CAAC,EAAE,MAAM,kBAAkB;AACzC,QAAA,gBAAgBQ,MAAAA,QAAQ,MAAM;AAC3B,WAAAW,gBAAA;AAAA,MACL,OAAO,OAAO,YAAY,WAAW,EAAE,OAAO,CAAC,KAAK,MAAMC,WAAU;AAC5D,cAAA,cAAc,GAAG,IAAI,gBAAgB,OAAO,KAAK,YAAY,WAAW,EAAEA,MAAK,CAAC;AACtF,cAAM,UAAUD,gBAAA;AAAA,UACd,OAAO,KAAK,IAAI,EAAE,OAAO,CAACE,MAAK,YAAY;AAClC,mBAAA;AAAA,cACL,GAAGA;AAAAA,cACH;AAAA,gBACE,GAAG,KAAK,OAAO;AAAA,gBACf,OAAO;AAAA,gBACP,MAAM,GAAG,WAAW,IAAI,OAAO;AAAA,cACjC;AAAA,YAAA;AAAA,UAEJ,GAAG,EAAE;AAAA,UACL;AAAA,QAAA;AAGK,eAAA;AAAA,UACL,GAAG;AAAA,UACH;AAAA,YACE;AAAA,YACA,OAAO,OAAO,KAAK,YAAY,WAAW,EAAED,MAAK;AAAA,YACjD,MAAM;AAAA,UACR;AAAA,QAAA;AAAA,MAEJ,GAAG,EAAE;AAAA,MACL;AAAA,IAAA;AAAA,EACF,GACC,CAAC,MAAM,WAAW,CAAC;AAEtB,SACGtB,2BAAAA,IAAAQ,aAAAA,KAAA,EAAI,SAAS,GACX,wBAAc,IAAI,CAAC,gBAClBR,2BAAA,IAAC,aAAmC,EAAA,YAAA,GAAlB,YAAY,IAAgC,CAC/D,EACH,CAAA;AAEJ;AAEA,cAAc,YAAY;AAAA,EACxB,MAAME,mBAAAA,QAAU,OAAO;AAAA,EACvB,aAAaA,mBAAAA,QAAU,OAAO;AAChC;AClDA,MAAMG,iBAAe;AAAA,EACnB,WAAW,CAAE;AACf;AAEA,MAAMmB,YAAU,CAAC,OAAO;AAAA;AAAA,EAEtBC,yBAAQ,OAAO,CAAC,eAAe;AAC7B,YAAQ,OAAO,MAAI;AAAA,MACjB,KAAK,mBAAmB;AACtB,mBAAW,YAAY,MAAM,UAAU,IAAI,CAAC,UAAUH,WAAU;AAC9D,cAAIA,WAAU,OAAO,OAAO;AAC1B,mBAAO,EAAE,GAAG,UAAU,QAAQ,CAAC,SAAS,OAAM;AAAA,UAC/C;AAED,iBAAO,EAAE,GAAG,UAAU,QAAQ,MAAK;AAAA,QAC7C,CAAS;AAED;AAAA,MACD;AAAA,MACD;AACE,eAAO;AAAA,IACV;AAAA,EACL,CAAG;AAAA;ACZH,MAAM,cAAc,MAAM;AAClB,QAAA,EAAE,iBAAiB;AACnB,QAAA,EAAE,kBAAkBb,UAAAA;AAC1B,QAAM,CAAC,EAAE,aAAa,QAAQ,IAAIiB,MAAA;AAAA,IAAWF;AAAAA,IAASnB;AAAAA,IAAc,CAAC,UACnED,OAAK,OAAO,YAAY;AAAA,EAAA;AAGpB,QAAA,eAAe,CAACkB,WACpB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAAA;AAAA,EAAA,CACD;AAEH,SACGtB,2BAAAA,IAAAc,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAU,UAAA,IAAI,CAAC,UAAUQ,WACxBT,2BAAA;AAAA,IAACc,aAAA;AAAA,IAAA;AAAA,MACC,UAAU,SAAS;AAAA,MACnB,UAAU,MAAM,aAAaL,MAAK;AAAA,MAElC,SAASA,SAAQ,MAAM,IAAI,cAAc;AAAA,MAEzC,UAAA;AAAA,QAAAtB,2BAAA;AAAA,UAAC4B,aAAA;AAAA,UAAA;AAAA,YACC,OAAO,iBAAiB,SAAS,IAAI;AAAA,YACrC,aAAa;AAAA,cACX;AAAA,gBACE,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAClB;AAAA,cACA,EAAE,MAAM,SAAS,KAAK;AAAA,YACxB;AAAA,YACA,SAASN,SAAQ,IAAI,YAAY;AAAA,UAAA;AAAA,QACnC;AAAA,QACCtB,2BAAA,IAAA6B,aAAA,kBAAA,EACC,UAAC7B,2BAAAA,IAAA,eAAA,EAAc,aAAa,aAAa,SAAS,IAAI,GAAG,MAAM,SAAS,KAAM,CAAA,GAChF;AAAA,MAAA;AAAA,IAAA;AAAA,IAhBK,SAAS;AAAA,EAkBjB,CAAA,EACH,CAAA;AAEJ;ACpDA,MAAM,iBAAiB,CAAC,SAAS;AAC/B,UAAQ,MAAI;AAAA,IACV,KAAK,QAAQ;AACX,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MACpB;AAAA,IACK;AAAA,IACD,KAAK,OAAO;AACV,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MACpB;AAAA,IACK;AAAA,IACD,KAAK,OAAO;AACV,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MACpB;AAAA,IACK;AAAA,IACD,KAAK,UAAU;AACb,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MACpB;AAAA,IACK;AAAA,IACD,SAAS;AACP,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MACpB;AAAA,IACK;AAAA,EACF;AACH;AC3BA,MAAM,YAAYO,gBAAAA,QAAOC,aAAAA,GAAG;AAAA;AAAA,mBAET,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA;AAGvF,SAAS,WAAW,EAAE,SAAS;AACvB,QAAA,EAAE,kBAAkBC,UAAAA;AAE1B,QAAM,EAAE,QAAQ,SAAS,OAAO,SAAS;AACnC,QAAA,iBAAiB,OAAOqB,sBAAK,KAAK,MAAM,GAAG,CAAC,IAAI;AAChD,QAAA,CAAC,aAAa,IAAI,SAAS,EAAE,IAAI,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAA;AAC5D,QAAA,SAAS,eAAe,MAAM,MAAM;AAE1C,yCACGhB,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,IAAAD,2BAAA,KAACE,aAAW,YAAA,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAA;AAAA,MAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,MAAE;AAAA,MAEHf,2BAAAA,IAAC,UAAM,UAAW,WAAA,CAAA;AAAA,MACjBa,2BAAA,KAAAE,aAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cAAa,UAAA;AAAA,QAAA;AAAA,QAC/C;AAAA,MAAA,GACJ;AAAA,IAAA,GACF;AAAA,IACAF,2BAAAA,KAACC,qBAAK,WAAS,MAAC,YAAW,YAAW,aAAY,cAAa,KAAK,GAClE,UAAA;AAAA,MAAAd,2BAAAA,IAAC,aAAU,YAAY,OAAO,YAAY,aAAa,OAAO,QAAQ,SAAS,GAC7E,UAAAA,2BAAA,IAACe,2BAAW,YAAW,QAAO,WAAW,OAAO,MAC7C,iBACH,CAAA,GACF;AAAA,qCACCP,aAAAA,KAAI,EAAA,aAAa,GAAG,cAAc,GAChC,+BAAI,gBAAgB,CAAC,UACpBK,gCAACE,aAAAA,cAAuB,WAAW,MAAM,SAAS,GAAG,IAAI,eAAe,cAAc,UAAA;AAAA,QAAA;AAAA,QAClF;AAAA,MAAA,KADa,KAEjB,CACD,GACH;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,WAAW,eAAe;AAAA,EACxB,OAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AACF;AAEA,WAAW,YAAY;AAAA,EACrB,OAAOb,2BAAU,MAAM;AAAA,IACrB,SAASA,mBAAU,QAAA;AAAA,IACnB,QAAQA,mBAAU,QAAA;AAAA,IAClB,MAAMA,mBAAU,QAAA;AAAA,EAAA,CACjB;AACH;AC1DA,MAAM,WAAW,MAAM;AACf,QAAA,EAAE,kBAAkBO,UAAAA;AAC1B,QAAM,EAAE,gBAAgB,OAAO,IAAI,oBAAoB;AAEvD,QAAM,OAAOsB,iBAAAA,QAAQ,eAAe,MAAM,GAAG,GAAG,aAAa;AAC7D,QAAM,mBAAmBpB,aAAAA,QAAI,QAAQ,KAAK,CAAC,CAAC;AAC5C,QAAM,eAAe,KAAK,MAAM,CAAC,EAAE,KAAK,GAAG;AAE3C,QAAM,kBAAkBqB,iBAAA,QAAQ,gBAAgB,IAC5C,CAAA,IACA,iBAAiB,OAAO,CAAC,MAAM,EAAE,QAAQ,SAAS,YAAY,CAAC;AAGjE,SAAAhC,2BAAA;AAAA,IAACkB,aAAA;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,YAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,OAAO,EAAE,WAAW,OAAO;AAAA,MAE1B,UACC,iBAAAlB,2BAAA,IAACc,aAAK,MAAA,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAA,gBAAgB,IAAI,CAAC,OAAO;AAAA;AAAA,QAE3Bd,2BAAAA,IAAC,YAAqB,EAAA,MAAA,GAAL,GAAmB;AAAA,OACrC,GACH,IAECa,gCAAAC,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAAd,+BAACe,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,uCACCA,aAAAA,YAAW,EAAA,IAAG,KAAI,WAAU,cAC1B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBACE;AAAA,QACH,CAAA,GACH;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAIR;AC3DA,MAAM,OAAO,CAAC,OAAO,aAAa,WAAW;AAC3C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa;AAAA,IACb,cAAc;AAAA,IACd;AAAA,EACJ;AACA;ACDO,MAAM,eAAe;AAAA,EAC1B,aAAa,CAAE;AAAA,EACf,cAAc,CAAE;AAAA,EAChB,QAAQ,CAAE;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU,CAAE;AACd;AAEA,MAAM,UAAU,CAAC,OAAO,WACtBU,yBAAQ,OAAO,CAAC,eAAe;AAC7B,UAAQ,OAAO,MAAI;AAAA,IACjB,KAAK,aAAa;AAChB,YAAM,aAAa,OAAO,KAAK;AAC/B,YAAM,qBAAqB,OAAO,KAAK,aAAa,CAAC,MAAM;AAE3D,UAAI,OAAO,SAAS,oBAAoB;AACtC,cAAM,iBAAiBQ,sBAAK,OAAO,MAAM,aAAa,CAAC,EAAE,KAAK,GAAG;AACjE,mBAAW,iBAAiB;AAAA,MAC7B;AAEDC,2BAAI,YAAY,CAAC,gBAAgB,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;AAC9D;AAAA,IACD;AAAA,IACD,KAAK,wBAAwB;AAC3B,YAAM,cAAc,CAAC,gBAAgB,GAAG,OAAO,IAAI;AACnD,YAAM,YAAYvB,aAAG,QAAC,OAAO,aAAa,CAAE,CAAA;AAC5C,YAAM,gBAAgB,OAAO,KAAK,SAAS,EAAE,OAAO,CAAC,KAAK,YAAY;AACpE,YAAI,OAAO,IAAI,EAAE,GAAG,UAAU,OAAO,GAAG,SAAS,OAAO;AAExD,eAAO;AAAA,MACR,GAAE,CAAE,CAAA;AAELuB,mBAAAA,QAAI,YAAY,aAAa,aAAa;AAE1C;AAAA,IACD;AAAA,IACD,KAAK,YAAY;AACf,iBAAW,eAAe,MAAM;AAChC;AAAA,IACD;AAAA,IACD,KAAK,uBAAuB;AAC1B,iBAAW,cAAc,MAAM;AAC/B;AAAA,IACD;AAAA,IAED,KAAK,iBAAiB;AACpB,YAAM,EAAE,eAAgB,IAAG;AAC3B,iBAAW,iBAAiB,mBAAmB,MAAM,iBAAiB,KAAK;AAC3E;AAAA,IACD;AAAA,IACD;AACE,aAAO;AAAA,EACV;AACL,CAAG;AC7CH,MAAM,mBAAmBC,MAAW,WAAA,CAAC,EAAE,aAAa,OAAA,GAAU,QAAQ;AAC9D,QAAA,EAAE,kBAAkB1B,UAAAA;AACpB,QAAA,CAAC,OAAO,QAAQ,IAAIiB,MAAA;AAAA,IAAW;AAAA,IAAS;AAAA,IAAc,CAACU,WAC3D,KAAKA,QAAO,aAAa,MAAM;AAAA,EAAA;AAGjCC,QAAA,oBAAoB,KAAK,OAAO;AAAA,IAC9B,iBAAiB;AACR,aAAA;AAAA,QACL,aAAa,MAAM;AAAA,MAAA;AAAA,IAEvB;AAAA,IACA,YAAY;AACD,eAAA,EAAE,MAAM,WAAA,CAAY;AAAA,IAC/B;AAAA,IACA,qBAAqB;AACV,eAAA,EAAE,MAAM,sBAAA,CAAuB;AAAA,IAC1C;AAAA,EACA,EAAA;AAEI,QAAA,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,MAAA,EAAQ,MAC9C,SAAS;AAAA,IACP,MAAM;AAAA,IACN,MAAM,KAAK,MAAM,GAAG;AAAA,IACpB,OAAO,UAAU,wBAAwB,KAAK;AAAA,EAAA,CAC/C;AAEG,QAAA,wBAAwB,CAAC,EAAE,QAAQ,EAAE,MAAM,MAAA,EAAQ,MACvD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,MAAM,KAAK,MAAM,GAAG;AAAA,IACpB;AAAA,EAAA,CACD;AAEG,QAAA,uBAAuB,CAAC,mBAC5B,SAAS;AAAA,IACP,MAAM;AAAA,IACN;AAAA,EAAA,CACD;AAEH,QAAM,gBAAgB;AAAA,IACpB,GAAG;AAAA,IACH,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,EAAA;AAGpB,SACGrC,2BAAAA,IAAA,0BAAA,EAAyB,OAAO,eAC/B,UAACa,2BAAA,KAAAI,mBAAA,EAAK,KAAK,GAAG,QAAO,gBAAe,WAAS,MAAC,YAAW,YACvD,UAAA;AAAA,IAAAjB,2BAAAA,IAACkB,yBAAS,KAAK,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,cAAc,GAC/E,0CAACJ,aAAK,MAAA,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,MAAAD,gCAACC,aAAAA,QAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAAd,+BAACe,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAIuB,cAAQ,sBAAsB;AAAA,UAClC,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,uCACCvB,aAAAA,YAAW,EAAA,IAAG,KAAI,WAAU,cAC1B,UAAc,cAAA;AAAA,UACb,IAAIuB,cAAQ,4BAA4B;AAAA,UACxC,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA,GACF;AAAA,qCACC,aAAY,EAAA;AAAA,IAAA,EAAA,CACf,EACF,CAAA;AAAA,mCACC,UAAS,EAAA;AAAA,EAAA,EACZ,CAAA,EACF,CAAA;AAEJ,CAAC;AAED,iBAAiB,YAAY;AAAA,EAC3B,aAAapC,mBAAAA,QAAU,OAAO;AAAA,EAC9B,QAAQA,mBAAAA,QAAU,OAAO;AAC3B;AAEA,MAAeqC,qBAAAA,MAAAA,KAAK,gBAAgB;AC3F7B,MAAM,mBAAmBC,eAAI,OAAQ,EAAC,MAAM;AAAA,EACjD,MAAMA,eAAI,OAAQ,EAAC,SAASC,MAAgB,iBAAC,SAAS,EAAE;AAAA,EACxD,aAAaD,eAAI,OAAQ,EAAC,SAASC,MAAgB,iBAAC,SAAS,EAAE;AACjE,CAAC;ACJD,MAAM,mBAAmB,CAAC,gBACxB,OAAO,KAAK,WAAW,EAAE,OAAO,CAAC,KAAK,YAAY;AAChD,QAAM,oBAAoB,YAAY,OAAO,EAAE;AAC/C,QAAM,qBAAqB,OAAO,KAAK,iBAAiB,EAAE,OAAO,CAAC,MAAM,SAAS;AAC/E,QAAIT,yBAAQ,kBAAkB,IAAI,CAAC,GAAG;AACpC,aAAO;AAAA,IACR;AAED,SAAK,IAAI,IAAI,kBAAkB,IAAI;AAEnC,WAAO;AAAA,EACR,GAAE,CAAE,CAAA;AAEL,MAAIA,iBAAAA,QAAQ,kBAAkB,GAAG;AAC/B,WAAO;AAAA,EACR;AAED,MAAI,OAAO,IAAI,EAAE,aAAa,mBAAkB;AAEhD,SAAO;AACR,GAAE,EAAE;ACfA,MAAM,aAAa,MAAM;AAC9B,QAAM,EAAE,uBAAuBU,MAAAA;AAC/B,QAAM,EAAE,KAAA/B,SAAQgC,MAAAA;AAChB,QAAM,EAAE,eAAc,IAAKC,MAAkB,mBAACN,MAAO,OAAA;AAErD,QAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAAS;AAAA,IACV;AAAA,IACD,EAAE,MAAM,QAAQ,WAAW,iBAAiB,OAAO,aAAa,SAAS,cAAe;AAAA,EACzF,IAAGO,sBAAW;AAAA,IACb;AAAA,MACE,UAAU,CAAC,qBAAqB,aAAa;AAAA,MAC7C,MAAM,UAAU;AACd,cAAM;AAAA,UACJ,MAAM,EAAE,aAAAC,aAAa;AAAA,QACtB,IAAG,MAAMnC,KAAI,gCAAgC;AAE9C,eAAOmC;AAAA,MACR;AAAA,IACF;AAAA,IACD;AAAA,MACE,UAAU,CAAC,qBAAqB,QAAQ;AAAA,MACxC,MAAM,UAAU;AACd,cAAM;AAAA,UACJ,MAAM,EAAE,QAAAC,QAAQ;AAAA,QACjB,IAAG,MAAMpC,KAAI,2BAA2B;AAEzC,eAAOoC;AAAA,MACR;AAAA,IACF;AAAA,EACL,CAAG;AAED,QAAM,iBAAiB,YAAY;AACjC,UAAM,QAAQ,IAAI,CAAC,mBAAkB,GAAI,cAAe,CAAA,CAAC;AAAA,EAC7D;AAEEC,QAAAA,UAAU,MAAM;AACd,QAAI,kBAAkB;AACpB,yBAAmB;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,gBAAgB;AAAA,MAChD,CAAO;AAAA,IACF;AAAA,EACF,GAAE,CAAC,oBAAoB,kBAAkB,cAAc,CAAC;AAEzDA,QAAAA,UAAU,MAAM;AACd,QAAI,aAAa;AACf,yBAAmB;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,WAAW;AAAA,MAC3C,CAAO;AAAA,IACF;AAAA,EACF,GAAE,CAAC,oBAAoB,aAAa,cAAc,CAAC;AAEpD,QAAM,YAAY,wBAAwB;AAE1C,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL,aAAa,cAAc,iBAAiB,WAAW,IAAI,CAAE;AAAA,IAC7D,QAAQ,UAAU,CAAE;AAAA,IAEpB,SAAS;AAAA,IACT;AAAA,EACJ;AACA;AClDO,MAAM,aAAa,MAAM;AACxB,QAAA,EAAE,kBAAkBvC,UAAAA;AACpB,QAAA,EAAE,uBAAuBiC,MAAAA;AAC/B,QAAM,WAAWO,eAAAA;AACjB,QAAM,EAAE,WAAW,kBAAkB,aAAa,OAAA,IAAW;AACvD,QAAA,EAAE,eAAeC,MAAAA;AACjB,QAAA,iBAAiBC,iBAAM;AACvB,QAAA,EAAE,SAASR,MAAAA;AACjB,QAAM,WAAWS,WAAY,YAAA,CAAC,SAAS,KAAK,4BAA4B,IAAI,GAAG;AAAA,IAC7E,UAAU;AACW,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACF;AAAA,IACH;AAAA,IAEA,YAAY;AACV,iBAAW,eAAe;AAEP,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAId,cAAQ,wBAAwB;AAAA,UACpC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACF;AAGD,eAAS,EAAE;AAAA,IACb;AAAA,EAAA,CACD;AAEK,QAAA,yBAAyB,OAAO,SAAS;AAIvCQ,UAAAA,eAAc,eAAe,QAAQ,eAAe;AAEpD,UAAA,SAAS,OAAO,EAAE,GAAG,MAAM,GAAGA,cAAa,OAAO,CAAC,EAAA,CAAG;AAAA,EAAA;AAG9D,yCACGO,mBACC,EAAA,UAAA;AAAA,IAACrD,2BAAAA,IAAAsD,MAAA,KAAK,OAAL,EACE,UAAA;AAAA,MACC,EAAE,IAAI,sBAAsB,gBAAgB,oBAAoB;AAAA,MAChE,EAAE,MAAM,QAAQ;AAAA,IAAA,GAEpB;AAAA,IACAtD,2BAAA;AAAA,MAACuD,OAAA;AAAA,MAAA;AAAA,QACC,oBAAkB;AAAA,QAClB,eAAe,EAAE,MAAM,IAAI,aAAa,GAAG;AAAA,QAC3C,UAAU;AAAA,QACV,kBAAkB;AAAA,QAEjB,UAAC,CAAA,EAAE,cAAc,QAAQ,cAAc,OACtC,MAAA1C,2BAAA,KAAC2C,OAAK,MAAA,EAAA,YAAU,MAAC,UAAU,cACzB,UAAA;AAAA,UAAAxD,2BAAA;AAAA,YAACyD,aAAA;AAAA,YAAA;AAAA,cACC,eACE,CAAC,oBACCzD,2BAAA,IAAC0D,uBAAO,MAAK,UAAS,SAAS,SAAS,WAAW,WAAY1D,+BAAA2D,MAAAA,OAAA,CAAA,CAAM,GAClE,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,cAGJ,OAAO,cAAc;AAAA,gBACnB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,UAAU,cAAc;AAAA,gBACtB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,YAAA;AAAA,UACH;AAAA,yCACCC,aAAAA,eACC,EAAA,UAAA/C,2BAAA;AAAA,YAACC,aAAA;AAAA,YAAA;AAAA,cACC,YAAW;AAAA,cACX,WAAU;AAAA,cACV,YAAW;AAAA,cACX,KAAK;AAAA,cACL,WAAS;AAAA,cACT,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,aAAa;AAAA,cACb,cAAc;AAAA,cACd,QAAO;AAAA,cAEP,UAAA;AAAA,gBAAAD,2BAAA,KAACC,aAAK,MAAA,EAAA,WAAU,UAAS,YAAW,WAClC,UAAA;AAAA,kBAAAd,+BAACe,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,oBACb,IAAIuB,cAAQ,qBAAqB;AAAA,oBACjC,gBAAgB;AAAA,kBACjB,CAAA,GACH;AAAA,kBAEAzB,2BAAAA,KAACI,aAAAA,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,oBAACjB,2BAAAA,IAAAkB,aAAAA,UAAA,EAAS,KAAK,GACb,UAAAlB,2BAAA;AAAA,sBAAC6D,aAAA;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,OAAO,OAAO,QAAQ;AAAA,wBACtB,UAAU;AAAA,wBACV,OAAO,cAAc;AAAA,0BACnB,IAAI;AAAA,0BACJ,gBAAgB;AAAA,wBAAA,CACjB;AAAA,wBACD,OACE,QAAQ,OACJ,cAAc,EAAE,IAAI,OAAO,MAAM,gBAAgB,mBAAmB,CAAC,IACrE;AAAA,wBAEN,UAAQ;AAAA,sBAAA;AAAA,oBAAA,GAEZ;AAAA,oBACA7D,2BAAAA,IAACkB,aAAAA,UAAS,EAAA,KAAK,GACb,UAAAlB,2BAAA;AAAA,sBAAC8D,aAAA;AAAA,sBAAA;AAAA,wBACC,IAAG;AAAA,wBACH,OAAO,OAAO,eAAe;AAAA,wBAC7B,UAAU;AAAA,wBACV,OAAO,cAAc;AAAA,0BACnB,IAAI;AAAA,0BACJ,gBAAgB;AAAA,wBAAA,CACjB;AAAA,wBACD,OACE,QAAQ,cACJ,cAAc;AAAA,0BACZ,IAAI,OAAO;AAAA,0BACX,gBAAgB;AAAA,wBACjB,CAAA,IACD;AAAA,wBAEN,UAAQ;AAAA,sBAAA;AAAA,oBAAA,GAEZ;AAAA,kBAAA,GACF;AAAA,gBAAA,GACF;AAAA,gBAEC,CAAC,oBACA9D,2BAAA;AAAA,kBAACF;AAAAA,kBAAA;AAAA,oBACC,KAAK;AAAA,oBACL;AAAA,oBACA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,GAGN;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;AAEa,MAAA,2BAA2B,MACtCE,2BAAA,IAACsD,WAAK,SAAL,EAAa,aAAaS,kBAAY,YACrC,UAAC/D,2BAAAA,IAAA,YAAA,CAAA,CAAW,EACd,CAAA;AC3JK,MAAM,WAAW,MAAM;AACtB,QAAA,EAAE,kBAAkBS,UAAAA;AACpB,QAAA,EAAE,uBAAuBiC,MAAAA;AACzB,QAAA;AAAA,IACJ,QAAQ,EAAE,GAAG;AAAA,EAAA,IACXsB,wBAAS,uCAAuC;AAC9C,QAAA,EAAE,KAAArD,SAAQgC,MAAAA;AAChB,QAAM,EAAE,WAAW,kBAAkB,WAAW,WAAW;AACrD,QAAA;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,MACPsB,WAAS,SAAA,CAAC,qBAAqB,QAAQ,EAAE,GAAG,YAAY;AAEpD,UAAA;AAAA,MACJ,MAAM,EAAE,MAAAC,MAAK;AAAA,IACX,IAAA,MAAMvD,KAAI,4BAA4B,EAAE,EAAE;AAEvCuD,WAAAA;AAAAA,EAAA,CACR;AAEK,QAAA,iBAAiBf,iBAAM;AACvB,QAAA,EAAE,QAAQR,MAAAA;AACV,QAAA,EAAE,mBAAmBC,MAAAA;AACrB,QAAA,WAAWQ,uBAAY,CAAC,SAAS,IAAI,4BAA4B,EAAE,IAAI,IAAI,GAAG;AAAA,IAClF,QAAQ,OAAO;AACM,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,KAAK;AAAA,MAAA,CAC9B;AAAA,IACH;AAAA,IAEA,MAAM,YAAY;AACG,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAId,cAAQ,wBAAwB;AAAA,UACpC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACF;AAED,YAAM,YAAY;AAAA,IACpB;AAAA,EAAA,CACD;AAEK,QAAA,uBAAuB,OAAO,SAAS;AACrC,UAAA,cAAc,eAAe,QAAQ,eAAe;AAEpD,UAAA,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,aAAa,OAAO,CAAC,EAAA,CAAG;AAAA,EAAA;AAG9D,MAAI,eAAe;AACV,WAAAtC,+BAACsD,MAAAA,KAAK,SAAL,CAAa,CAAA;AAAA,EACvB;AAEA,yCACGD,mBACC,EAAA,UAAA;AAAA,IAACrD,2BAAAA,IAAAsD,MAAA,KAAK,OAAL,EACE,UAAA;AAAA,MACC,EAAE,IAAI,sBAAsB,gBAAgB,oBAAoB;AAAA,MAChE,EAAE,MAAM,QAAQ;AAAA,IAAA,GAEpB;AAAA,IACAtD,2BAAA;AAAA,MAACuD,OAAA;AAAA,MAAA;AAAA,QACC,oBAAkB;AAAA,QAClB,eAAe,EAAE,MAAM,KAAK,MAAM,aAAa,KAAK,YAAY;AAAA,QAChE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAEjB,UAAC,CAAA,EAAE,cAAc,QAAQ,cAAc,OACtC,MAAA1C,2BAAA,KAAC2C,OAAK,MAAA,EAAA,YAAU,MAAC,UAAU,cACzB,UAAA;AAAA,UAAAxD,2BAAA;AAAA,YAACyD,aAAA;AAAA,YAAA;AAAA,cACC,eACE,CAAC,mBACCzD,2BAAA;AAAA,gBAAC0D,aAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,KAAK,SAAS;AAAA,kBACxB,MAAK;AAAA,kBACL,SAAS,SAAS;AAAA,kBAClB,0CAAYC,MAAM,OAAA,EAAA;AAAA,kBAEjB,UAAc,cAAA;AAAA,oBACb,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBAAA,CACjB;AAAA,gBAAA;AAAA,cAAA,IAED;AAAA,cAEN,OAAO,KAAK;AAAA,cACZ,UAAU,KAAK;AAAA,cACf,iDAAmBQ,MAAW,YAAA,EAAA;AAAA,YAAA;AAAA,UAChC;AAAA,yCACCP,aAAAA,eACC,EAAA,UAAA/C,2BAAA;AAAA,YAACC,aAAA;AAAA,YAAA;AAAA,cACC,YAAW;AAAA,cACX,WAAU;AAAA,cACV,YAAW;AAAA,cACX,KAAK;AAAA,cACL,WAAS;AAAA,cACT,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,aAAa;AAAA,cACb,cAAc;AAAA,cACd,QAAO;AAAA,cAEP,UAAA;AAAA,gBAAAD,gCAACC,aAAAA,QAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,kBAAAd,+BAACe,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,oBACb,IAAIuB,cAAQ,qBAAqB;AAAA,oBACjC,gBAAgB;AAAA,kBACjB,CAAA,GACH;AAAA,kBAEAzB,2BAAAA,KAACI,aAAAA,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,oBAACjB,2BAAAA,IAAAkB,aAAAA,UAAA,EAAS,KAAK,GACb,UAAAlB,2BAAA;AAAA,sBAAC6D,aAAA;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,OAAO,OAAO,QAAQ;AAAA,wBACtB,UAAU;AAAA,wBACV,OAAO,cAAc;AAAA,0BACnB,IAAI;AAAA,0BACJ,gBAAgB;AAAA,wBAAA,CACjB;AAAA,wBACD,OACE,QAAQ,OACJ,cAAc,EAAE,IAAI,OAAO,MAAM,gBAAgB,mBAAmB,CAAC,IACrE;AAAA,wBAEN,UAAQ;AAAA,sBAAA;AAAA,oBAAA,GAEZ;AAAA,oBACA7D,2BAAAA,IAACkB,aAAAA,UAAS,EAAA,KAAK,GACb,UAAAlB,2BAAA;AAAA,sBAAC8D,aAAA;AAAA,sBAAA;AAAA,wBACC,IAAG;AAAA,wBACH,OAAO,OAAO,eAAe;AAAA,wBAC7B,UAAU;AAAA,wBACV,OAAO,cAAc;AAAA,0BACnB,IAAI;AAAA,0BACJ,gBAAgB;AAAA,wBAAA,CACjB;AAAA,wBACD,OACE,QAAQ,cACJ,cAAc;AAAA,0BACZ,IAAI,OAAO;AAAA,0BACX,gBAAgB;AAAA,wBACjB,CAAA,IACD;AAAA,wBAEN,UAAQ;AAAA,sBAAA;AAAA,oBAAA,GAEZ;AAAA,kBAAA,GACF;AAAA,gBAAA,GACF;AAAA,gBAEC,CAAC,oBACA9D,2BAAA;AAAA,kBAACF;AAAAA,kBAAA;AAAA,oBACC,KAAK;AAAA,oBACL,aAAa,KAAK;AAAA,oBAClB;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,GAGN;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;AAEa,MAAA,yBAAyB,MACpCE,2BAAA,IAACsD,WAAK,SAAL,EAAa,aAAaS,kBAAY,YACrC,UAAC/D,2BAAAA,IAAA,UAAA,CAAA,CAAS,EACZ,CAAA;ACpMF,MAAM,WAAWO,gBAAAA,QAAO6D,aAAAA,IAAI;AAAA;AAAA,YAEhB,KAAK,EAAE;AAAA;AAAA;AAAA,aAGN,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,GAAG;AAAA,WACtC,KAAK,EAAE;AAAA;AAAA;AAAA,cAGJ,KAAK,EAAE;AAAA,aACR,KAAK,EAAE;AAAA;AAAA;AAAA,cAGN,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAQpC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAMtD,MAAM,YAAY,CAAC,EAAE,aAAa,WAAW,WAAW,iBAAiB,eAAe;AAChF,QAAA,EAAE,kBAAkB3D,UAAAA;AAC1B,QAAM,WAAWwC,eAAAA;AACX,QAAA,CAAC,mBAAmB,oBAAoB,IAAI;AAE5C,QAAA,qBAAqB,CAAC,SAC1B,aAAa,CAAC,CAAC,UAAU,eAAe,EAAE,SAAS,KAAK,IAAI;AAExD,QAAA,oBAAoB,CAAC,OAAO;AAChC,oBAAgB,EAAE;AAClB,yBAAqB,CAAC,iBAAiB;AAAA,EAAA;AAGzC,SACGjD,2BAAAA,IAAAqE,aAAAA,OAAA,EACE,UAAa,aAAA,IAAI,CAAC,SACjBxD,2BAAA,KAACyD,aAAmB,IAAA,EAAA,SAAS,MAAM,SAAS,KAAK,GAAG,SAAA,CAAU,GAC5D,UAAA;AAAA,IAAAtE,2BAAAA,IAACuE,aAAAA,MAAG,OAAM,OACR,yCAACxD,aAAY,YAAA,EAAA,UAAA,KAAK,MAAK,EACzB,CAAA;AAAA,IACAf,2BAAAA,IAACuE,aAAAA,MAAG,OAAM,OACR,yCAACxD,aAAY,YAAA,EAAA,UAAA,KAAK,aAAY,EAChC,CAAA;AAAA,IACCf,+BAAAuE,aAAAA,IAAA,EAAG,OAAM,OACR,yCAACxD,aAAAA,YACE,EAAA,UAAA;AAAA,MACC;AAAA,QACE,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,EAAE,QAAQ,KAAK,SAAS;AAAA,OAE5B,EACF,CAAA;AAAA,IACAf,2BAAAA,IAACuE,aAAAA,IACC,EAAA,UAAA1D,2BAAA,KAACC,aAAK,MAAA,EAAA,gBAAe,OAAM,SAAS,CAAC,MAAM,EAAE,gBAAA,GAC1C,UAAA;AAAA,MACC,YAAAd,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI,KAAK,GAAG,SAAS;AAAA,UACrB,cAAY;AAAA,YACV,EAAE,IAAI,4BAA4B,gBAAgB,gBAAgB;AAAA,YAClE,EAAE,QAAQ,GAAG,KAAK,IAAI,GAAG;AAAA,UAC3B;AAAA,UAEA,yCAACwE,MAAO,QAAA,EAAA;AAAA,QAAA;AAAA,MAAA,IAER;AAAA,MAEH,mBAAmB,IAAI,KACtBxE,2BAAA;AAAA,QAACyE,aAAA;AAAA,QAAA;AAAA,UACC,SAAS,MAAM,kBAAkB,KAAK,GAAG,UAAU;AAAA,UACnD,UAAQ;AAAA,UACR,qCAAOC,MAAM,OAAA,EAAA;AAAA,UACb,OAAO;AAAA,YACL,EAAE,IAAI,wBAAwB,gBAAgB,kBAAkB;AAAA,YAChE,EAAE,QAAQ,GAAG,KAAK,IAAI,GAAG;AAAA,UAC3B;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,EAAA,CAEJ,EACF,CAAA;AAAA,EA5CO,EAAA,GAAA,KAAK,IA6Cd,CACD,EACH,CAAA;AAEJ;AAIA,UAAU,eAAe;AAAA,EACvB,WAAW;AAAA,EACX,WAAW;AACb;AAEA,UAAU,YAAY;AAAA,EACpB,UAAUxE,mBAAAA,QAAU,MAAM;AAAA,EAC1B,aAAaA,mBAAAA,QAAU,OAAO;AAAA,EAC9B,iBAAiBA,mBAAAA,QAAU,KAAK;AAAA,EAChC,aAAaA,mBAAAA,QAAU,MAAM;AAAA,EAC7B,WAAWA,mBAAU,QAAA;AAAA,EACrB,WAAWA,mBAAU,QAAA;AACvB;AC7EO,MAAM,gBAAgB,MAAM;AAC3B,QAAA,EAAE,eAAegD,MAAAA;AACvB,QAAM,EAAE,eAAe,OAAO,IAAIzC,UAAQ,QAAA;AACpC,QAAA,EAAE,uBAAuBiC,MAAAA;AACzB,QAAA,EAAE,iBAAiBiC,aAAAA;AACzB,QAAM,CAAC,EAAE,OAAO,IAAIC,MAAe,eAAA;AAC7B,QAAA,KAAK,OAAO,MAAM;AACxB,QAAM,CAAC,mBAAmB,oBAAoB,IAAIC,eAAS,KAAK;AAChE,QAAM,CAAC,cAAc,eAAe,IAAIA,MAAS,SAAA;AACjD,QAAM,EAAE,KAAK,KAAAlE,KAAI,IAAIgC,MAAe,eAAA;AAE9B,QAAA;AAAA,IACJ,WAAW;AAAA,IACX,gBAAgB,EAAE,SAAS,WAAW,WAAW,UAAU;AAAA,MACzDmC,cAAQ;AAAA,IACV,QAAQf,MAAY,YAAA;AAAA,IACpB,MAAMA,MAAY,YAAA;AAAA,IAClB,QAAQA,MAAY,YAAA;AAAA,IACpB,QAAQA,MAAY,YAAA;AAAA,EAAA,CACrB;AAEK,QAAA;AAAA,IACJ,WAAW;AAAA,IACX,MAAM,EAAE,MAAM;AAAA,IACd;AAAA,IACA;AAAA,EAAA,IACEE,WAAAA,SAAS,aAAa,MAAM,UAAU,oBAAoB,eAAe,YAAY,GAAG;AAAA,IAC1F,aAAa,CAAC;AAAA,IACd,SAAS;AAAA,EAAA,CACV;AAED,QAAM,EAAE,SAAA,IAAac,aAAA,UAAU,QAAQ;AAAA,IACrC,aAAa;AAAA,EAAA,CACd;AAKK,QAAA,YAAYC,yBAAY,QAAQ;AAAA,IACpC,aAAa;AAAA,EAAA,CACd;AAEK,QAAA,YAAY,oBAAoB,cAAc;AAEpD,QAAM,0BAA0B,MAAM;AACpC,yBAAqB,CAAC,iBAAiB;AAAA,EAAA;AAGzC,QAAM,aAAa,OAAO,IAAIC,gBAAeC,wBAAuB;AAC9D,QAAA;AACI,YAAA,IAAI,4BAA4B,EAAE,EAAE;AAAA,aACnC,OAAO;AACdA,0BAAmB;AAAA,QACjB,MAAM;AAAA,QACN,SAASD,eAAc,EAAE,IAAI,sBAAsB,gBAAgB,oBAAoB;AAAA,MAAA,CACxF;AAAA,IACH;AAAA,EAAA;AAGF,QAAM,YAAY,OAAOC,qBAAoBD,gBAAeE,kBAAiB;AACvE,QAAA;AACF,YAAM,EAAE,KAAS,IAAA,MAAMxE,KAAI,0BAA0B;AACrDwE,oBAAa,oCAAoC;AAE1C,aAAA;AAAA,aACA,KAAK;AACZD,0BAAmB;AAAA,QACjB,MAAM;AAAA,QACN,SAASD,eAAc,EAAE,IAAI,sBAAsB,gBAAgB,qBAAqB;AAAA,MAAA,CACzF;AAEK,YAAA,IAAI,MAAM,GAAG;AAAA,IACrB;AAAA,EAAA;AAGF,QAAM,cAAc;AAAA,IAClB,OAAO;AAAA,MACL,IAAI3C,cAAQ,aAAa;AAAA,MACzB,gBAAgB;AAAA,IAClB;AAAA,IACA,QAAQ;AAAA,MACN,IAAIA,cAAQ,oBAAoB;AAAA,MAChC,gBAAgB;AAAA,IAClB;AAAA,EAAA;AAGF,QAAM,YAAY,cAAc;AAAA,IAC9B,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAAA,CACjB;AAEK,QAAA,iBAAiBc,uBAAY,CAAC,OAAO,WAAW,IAAI,eAAe,kBAAkB,GAAG;AAAA,IAC5F,MAAM,YAAY;AAChB,YAAM,QAAQ;AAAA,IAChB;AAAA,EAAA,CACD;AAED,QAAM,sBAAsB,YAAY;AAChC,UAAA,eAAe,YAAY,YAAY;AAC7C,yBAAqB,CAAC,iBAAiB;AAAA,EAAA;AAGzC,QAAM,eAAe,SAAS,CAAA,GAC3B,OAAO,CAAC,SAAS,SAAS,KAAK,MAAM,EAAE,KAAK,SAAS,KAAK,aAAa,EAAE,CAAC,EAC1E;AAAA,IACC,CAAC,GAAG,MAAM,UAAU,QAAQ,EAAE,MAAM,EAAE,IAAI,KAAK,UAAU,QAAQ,EAAE,aAAa,EAAE,WAAW;AAAA,EAAA;AAGjG,QAAM,eAAe,MAAM,CAAC,YAAY,SAAS,WAAW;AAE5D,QAAM,WAAW;AACX,QAAA,YAAY,OAAO,UAAU,KAAK;AAExC,MAAI,WAAW;AACN,WAAApD,+BAACsD,MAAAA,KAAK,SAAL,CAAa,CAAA;AAAA,EACvB;AAEA,yCACG8B,qBACC,EAAA,UAAA;AAAA,IAACpF,2BAAAA,IAAAsD,MAAA,KAAK,OAAL,EACE,UAAA;AAAA,MACC,EAAE,IAAI,sBAAsB,gBAAgB,oBAAoB;AAAA,MAChE,EAAE,MAAM,UAAU;AAAA,IAAA,GAEtB;AAAA,IACAzC,2BAAAA,KAACyC,MAAK,KAAA,MAAL,EACC,UAAA;AAAA,MAAAtD,2BAAA;AAAA,QAACyD,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,cAAc;AAAA,YACtB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,eACE,YACEzD,2BAAA;AAAA,YAACqF,GAAA;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,IAAIC,eAAA;AAAA,cACJ,SAAS,MAAM,WAAW,gBAAgB;AAAA,cAC1C,0CAAYC,MAAK,MAAA,EAAA;AAAA,cACjB,MAAK;AAAA,cAEJ,UAAc,cAAA;AAAA,gBACb,IAAIjD,cAAQ,mBAAmB;AAAA,gBAC/B,gBAAgB;AAAA,cAAA,CACjB;AAAA,YAAA;AAAA,UAAA,IAED;AAAA,UAEN,iDAAmB6B,MAAW,YAAA,EAAA;AAAA,QAAA;AAAA,MAChC;AAAA,MAEAnE,2BAAA;AAAA,QAACwF,aAAA;AAAA,QAAA;AAAA,UACC,cACExF,2BAAA;AAAA,YAACyF,MAAA;AAAA,YAAA;AAAA,cACC,OAAO,cAAc;AAAA,gBACnB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MAEJ;AAAA,sCAEC7B,aAAAA,eACE,EAAA,UAAA;AAAA,QAAA,CAAC,WAAW5D,2BAAA,IAACsD,WAAK,eAAL,CAAA,CAAmB;AAAA,QAChC,WAAW,eAAe,aAAa,SACrCzC,2BAAAA,KAAA6E,aAAAA,OAAA,EAAM,UAAoB,UACzB,UAAA;AAAA,UAAC1F,2BAAA,IAAA2F,aAAA,OAAA,EACC,0CAACrB,aAAAA,IACC,EAAA,UAAA;AAAA,YAAAtE,+BAAC4F,aAAAA,IACC,EAAA,UAAA5F,2BAAAA,IAACe,aAAAA,YAAW,EAAA,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA,EAAE,IAAI,eAAe,gBAAgB,OAAO,CAAC,EAC9D,CAAA,GACF;AAAA,YACAf,2BAAAA,IAAC4F,mBACC,UAAC5F,2BAAA,IAAAe,aAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB,GACH,EACF,CAAA;AAAA,YACAf,2BAAAA,IAAC4F,mBACC,UAAC5F,2BAAA,IAAAe,aAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB,GACH,EACF,CAAA;AAAA,YACCf,2BAAA,IAAA4F,aAAA,IAAA,EACC,UAAC5F,2BAAA,IAAAmB,6BAAA,EACE,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB,GACH,EACF,CAAA;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,UACAnB,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA,aAAa+D,MAAA;AAAA,cACb;AAAA,cACA,UAAU,CAAC,mBAAmB,oBAAoB;AAAA,YAAA;AAAA,UACpD;AAAA,QAAA,GACF,mCAEC8B,aAAAA,kBAAiB,EAAA,SAAS,cAAc,YAAY,YAAY,CAAC,GAAG;AAAA,MAAA,GAEzE;AAAA,MACA7F,2BAAA;AAAA,QAAC8F,MAAA;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ;AAAA,QAAA;AAAA,MACV;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AAEO,MAAM,yBAAyB,MAAM;AAExC,SAAA9F,2BAAA,IAACsD,WAAK,SAAL,EAAa,aAAaS,MAAY,YAAA,aACrC,UAAC/D,2BAAAA,IAAA,eAAA,CAAc,CAAA,EACjB,CAAA;AAEJ;ACpQA,MAAM,QAAQ,MAAM;AAEhB,SAAAA,+BAACsD,MAAAA,KAAK,SAAL,EAAa,aAAaS,MAAAA,YAAY,aACrC,0CAACgC,eACC,QAAA,EAAA,UAAA;AAAA,IAAA/F,+BAACgG,eAAAA,SAAM,OAAK,MAAC,SAAShG,+BAAC,yBAAuB,CAAA,GAAI;AAAA,mCACjDgG,eAAAA,OAAM,EAAA,MAAK,OAAM,SAAShG,+BAAC,2BAAyB,CAAA,GAAI;AAAA,mCACxDgG,eAAAA,OAAM,EAAA,MAAK,OAAM,SAAShG,+BAAC,yBAAuB,CAAA,GAAI;AAAA,EAAA,EACzD,CAAA,EACF,CAAA;AAEJ;;"}
@@ -2,18 +2,17 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
- const index1NFAbkxM = require("./index-1NFAbkxM-c8HdvwSA.js");
5
+ const indexOBxjGftZ = require("./index-oBxjGftZ-Zv9D3a55.js");
6
6
  const designSystem = require("@strapi/design-system");
7
7
  const admin = require("@strapi/strapi/admin");
8
- const Helmet = require("./Helmet-d9JljxUo.js");
9
8
  const reactIntl = require("react-intl");
10
9
  const reactQuery = require("react-query");
11
- const index = require("./index-JO4fO3Yj.js");
10
+ const index = require("./index-RdT-49jb.js");
12
11
  require("lodash/isEmpty");
13
12
  const v2 = require("@strapi/design-system/v2");
14
13
  const PropTypes = require("prop-types");
15
14
  const yup = require("yup");
16
- const Icons = require("@strapi/icons");
15
+ const icons = require("@strapi/icons");
17
16
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
18
17
  function _interopNamespace(e) {
19
18
  if (e && e.__esModule)
@@ -188,7 +187,7 @@ const EmailTable = ({ canUpdate, onEditClick }) => {
188
187
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tbody, { children: [
189
188
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { onClick: () => onEditClick("reset_password"), children: [
190
189
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { children: /* @__PURE__ */ jsxRuntime.jsx(
191
- Icons.Refresh,
190
+ icons.Refresh,
192
191
  {
193
192
  "aria-label": formatMessage({
194
193
  id: "global.reset-password",
@@ -209,13 +208,13 @@ const EmailTable = ({ canUpdate, onEditClick }) => {
209
208
  defaultMessage: "Edit a template"
210
209
  }),
211
210
  noBorder: true,
212
- icon: canUpdate && /* @__PURE__ */ jsxRuntime.jsx(Icons.Pencil, {})
211
+ icon: canUpdate && /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
213
212
  }
214
213
  ) })
215
214
  ] }),
216
215
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { onClick: () => onEditClick("email_confirmation"), children: [
217
216
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { children: /* @__PURE__ */ jsxRuntime.jsx(
218
- Icons.Check,
217
+ icons.Check,
219
218
  {
220
219
  "aria-label": formatMessage({
221
220
  id: index.getTrad("Email.template.email_confirmation"),
@@ -236,7 +235,7 @@ const EmailTable = ({ canUpdate, onEditClick }) => {
236
235
  defaultMessage: "Edit a template"
237
236
  }),
238
237
  noBorder: true,
239
- icon: canUpdate && /* @__PURE__ */ jsxRuntime.jsx(Icons.Pencil, {})
238
+ icon: canUpdate && /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
240
239
  }
241
240
  ) })
242
241
  ] })
@@ -250,7 +249,7 @@ EmailTable.propTypes = {
250
249
  const ProtectedEmailTemplatesPage = () => /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.PERMISSIONS.readEmailTemplates, children: /* @__PURE__ */ jsxRuntime.jsx(EmailTemplatesPage, {}) });
251
250
  const EmailTemplatesPage = () => {
252
251
  const { formatMessage } = reactIntl.useIntl();
253
- const { trackUsage } = index1NFAbkxM.useTracking();
252
+ const { trackUsage } = indexOBxjGftZ.useTracking();
254
253
  const { notifyStatus } = designSystem.useNotifyAT();
255
254
  const { toggleNotification } = admin.useNotification();
256
255
  const queryClient = reactQuery.useQueryClient();
@@ -323,20 +322,15 @@ const EmailTemplatesPage = () => {
323
322
  return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Loading, {});
324
323
  }
325
324
  return /* @__PURE__ */ jsxRuntime.jsxs(admin.Page.Main, { "aria-busy": submitMutation.isLoading, children: [
326
- /* @__PURE__ */ jsxRuntime.jsx(
327
- Helmet.HelmetExport,
325
+ /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
326
+ { id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
328
327
  {
329
- title: formatMessage(
330
- { id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
331
- {
332
- name: formatMessage({
333
- id: index.getTrad("HeaderNav.link.emailTemplates"),
334
- defaultMessage: "Email templates"
335
- })
336
- }
337
- )
328
+ name: formatMessage({
329
+ id: index.getTrad("HeaderNav.link.emailTemplates"),
330
+ defaultMessage: "Email templates"
331
+ })
338
332
  }
339
- ),
333
+ ) }),
340
334
  /* @__PURE__ */ jsxRuntime.jsx(
341
335
  designSystem.HeaderLayout,
342
336
  {
@@ -361,4 +355,4 @@ const EmailTemplatesPage = () => {
361
355
  };
362
356
  exports.EmailTemplatesPage = EmailTemplatesPage;
363
357
  exports.ProtectedEmailTemplatesPage = ProtectedEmailTemplatesPage;
364
- //# sourceMappingURL=index-gw-9XoIT.js.map
358
+ //# sourceMappingURL=index-5Su9tV8W.js.map