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

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 (57) hide show
  1. package/LICENSE +18 -3
  2. package/admin/src/components/FormModal/index.jsx +50 -66
  3. package/admin/src/components/Permissions/PermissionRow/CheckboxWrapper.jsx +3 -2
  4. package/admin/src/components/Permissions/PermissionRow/SubCategory.jsx +11 -20
  5. package/admin/src/components/Permissions/index.jsx +1 -0
  6. package/admin/src/components/Policies/index.jsx +3 -3
  7. package/admin/src/components/UsersPermissions/index.jsx +5 -5
  8. package/admin/src/pages/AdvancedSettings/index.jsx +5 -5
  9. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +113 -112
  10. package/admin/src/pages/EmailTemplates/components/EmailTable.jsx +17 -12
  11. package/admin/src/pages/EmailTemplates/index.jsx +6 -7
  12. package/admin/src/pages/Providers/index.jsx +1 -1
  13. package/admin/src/pages/Roles/pages/CreatePage.jsx +6 -7
  14. package/admin/src/pages/Roles/pages/EditPage.jsx +6 -7
  15. package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +6 -5
  16. package/admin/src/pages/Roles/pages/ListPage/index.jsx +5 -6
  17. package/dist/_chunks/{index-DU64Xec_.js → index-B-NW87wS.js} +4 -4
  18. package/dist/_chunks/index-B-NW87wS.js.map +1 -0
  19. package/dist/_chunks/{index-8gj-Xbnv.mjs → index-BM3Y3D1I.mjs} +29 -34
  20. package/dist/_chunks/index-BM3Y3D1I.mjs.map +1 -0
  21. package/dist/_chunks/{index-BBs5I2vg.mjs → index-CKip12uF.mjs} +10 -10
  22. package/dist/_chunks/{index-BBs5I2vg.mjs.map → index-CKip12uF.mjs.map} +1 -1
  23. package/dist/_chunks/{index-CTQmcKdx.js → index-CepSm1g8.js} +20 -26
  24. package/dist/_chunks/index-CepSm1g8.js.map +1 -0
  25. package/dist/_chunks/{index-CDbrfh8w.mjs → index-Cz7MvAfK.mjs} +95 -97
  26. package/dist/_chunks/index-Cz7MvAfK.mjs.map +1 -0
  27. package/dist/_chunks/{index-sXlt_q08.mjs → index-D96sR0jc.mjs} +5 -5
  28. package/dist/_chunks/index-D96sR0jc.mjs.map +1 -0
  29. package/dist/_chunks/{index-Dv_hLBLL.js → index-DWXD_v0p.js} +94 -96
  30. package/dist/_chunks/index-DWXD_v0p.js.map +1 -0
  31. package/dist/_chunks/{index-Cm0m3fu1.mjs → index-DzkSvFbj.mjs} +17 -23
  32. package/dist/_chunks/index-DzkSvFbj.mjs.map +1 -0
  33. package/dist/_chunks/{index-DbtKSwQT.js → index-bWmIxmrB.js} +10 -10
  34. package/dist/_chunks/{index-DbtKSwQT.js.map → index-bWmIxmrB.js.map} +1 -1
  35. package/dist/_chunks/{index-EQL2s09p-DzUzGVgd.mjs → index-f6STHGSC-BHUgmsKx.mjs} +1231 -320
  36. package/dist/_chunks/index-f6STHGSC-BHUgmsKx.mjs.map +1 -0
  37. package/dist/_chunks/{index-EQL2s09p-621Sl9hj.js → index-f6STHGSC-qR3QHvSP.js} +1228 -317
  38. package/dist/_chunks/index-f6STHGSC-qR3QHvSP.js.map +1 -0
  39. package/dist/_chunks/{index-eXarQ1KK.js → index-koxBwffB.js} +28 -33
  40. package/dist/_chunks/index-koxBwffB.js.map +1 -0
  41. package/dist/admin/index.js +1 -1
  42. package/dist/admin/index.mjs +1 -1
  43. package/package.json +6 -6
  44. package/server/bootstrap/index.js +13 -9
  45. package/server/services/providers-registry.js +465 -275
  46. package/server/utils/index.d.ts +2 -1
  47. package/dist/_chunks/index-8gj-Xbnv.mjs.map +0 -1
  48. package/dist/_chunks/index-CDbrfh8w.mjs.map +0 -1
  49. package/dist/_chunks/index-CTQmcKdx.js.map +0 -1
  50. package/dist/_chunks/index-Cm0m3fu1.mjs.map +0 -1
  51. package/dist/_chunks/index-DU64Xec_.js.map +0 -1
  52. package/dist/_chunks/index-Dv_hLBLL.js.map +0 -1
  53. package/dist/_chunks/index-EQL2s09p-621Sl9hj.js.map +0 -1
  54. package/dist/_chunks/index-EQL2s09p-DzUzGVgd.mjs.map +0 -1
  55. package/dist/_chunks/index-eXarQ1KK.js.map +0 -1
  56. package/dist/_chunks/index-sXlt_q08.mjs.map +0 -1
  57. package/server/bootstrap/grant-config.js +0 -140
@@ -10,6 +10,7 @@ import {
10
10
  Tr,
11
11
  Typography,
12
12
  VisuallyHidden,
13
+ Box,
13
14
  } from '@strapi/design-system';
14
15
  import { Check, Pencil, ArrowClockwise as Refresh } from '@strapi/icons';
15
16
  import PropTypes from 'prop-types';
@@ -53,12 +54,14 @@ const EmailTable = ({ canUpdate, onEditClick }) => {
53
54
  <Tbody>
54
55
  <Tr onClick={() => onEditClick('reset_password')}>
55
56
  <Td>
56
- <Refresh
57
- aria-label={formatMessage({
58
- id: 'global.reset-password',
59
- defaultMessage: 'Reset password',
60
- })}
61
- />
57
+ <Box width="3.2rem" height="3.2rem" padding="0.8rem">
58
+ <Refresh
59
+ aria-label={formatMessage({
60
+ id: 'global.reset-password',
61
+ defaultMessage: 'Reset password',
62
+ })}
63
+ />
64
+ </Box>
62
65
  </Td>
63
66
  <Td>
64
67
  <Typography>
@@ -84,12 +87,14 @@ const EmailTable = ({ canUpdate, onEditClick }) => {
84
87
  </Tr>
85
88
  <Tr onClick={() => onEditClick('email_confirmation')}>
86
89
  <Td>
87
- <Check
88
- aria-label={formatMessage({
89
- id: getTrad('Email.template.email_confirmation'),
90
- defaultMessage: 'Email address confirmation',
91
- })}
92
- />
90
+ <Box width="3.2rem" height="3.2rem" padding="0.8rem">
91
+ <Check
92
+ aria-label={formatMessage({
93
+ id: getTrad('Email.template.email_confirmation'),
94
+ defaultMessage: 'Email address confirmation',
95
+ })}
96
+ />
97
+ </Box>
93
98
  </Td>
94
99
  <Td>
95
100
  <Typography>
@@ -134,13 +134,12 @@ const EmailTemplatesPage = () => {
134
134
  />
135
135
  <Layouts.Content>
136
136
  <EmailTable onEditClick={handleEditClick} canUpdate={canUpdate} />
137
- {isModalOpen && (
138
- <EmailForm
139
- template={data[templateToEdit]}
140
- onToggle={handleToggle}
141
- onSubmit={handleSubmit}
142
- />
143
- )}
137
+ <EmailForm
138
+ template={data[templateToEdit]}
139
+ onToggle={handleToggle}
140
+ open={isModalOpen}
141
+ onSubmit={handleSubmit}
142
+ />
144
143
  </Layouts.Content>
145
144
  </Page.Main>
146
145
  );
@@ -63,7 +63,7 @@ export const ProvidersPage = () => {
63
63
 
64
64
  const submitMutation = useMutation((body) => put('/users-permissions/providers', body), {
65
65
  async onSuccess() {
66
- await queryClient.invalidateQueries(['users-permissions', 'providers']);
66
+ await queryClient.invalidateQueries(['users-permissions', 'get-providers']);
67
67
 
68
68
  toggleNotification({
69
69
  type: 'success',
@@ -4,7 +4,6 @@ import {
4
4
  Button,
5
5
  Flex,
6
6
  Grid,
7
- GridItem,
8
7
  Main,
9
8
  Textarea,
10
9
  TextInput,
@@ -125,8 +124,8 @@ export const CreatePage = () => {
125
124
  })}
126
125
  </Typography>
127
126
 
128
- <Grid gap={4}>
129
- <GridItem col={6}>
127
+ <Grid.Root gap={4}>
128
+ <Grid.Item col={6}>
130
129
  <Field.Root
131
130
  name="name"
132
131
  error={
@@ -145,8 +144,8 @@ export const CreatePage = () => {
145
144
  <TextInput value={values.name || ''} onChange={handleChange} />
146
145
  <Field.Error />
147
146
  </Field.Root>
148
- </GridItem>
149
- <GridItem col={6}>
147
+ </Grid.Item>
148
+ <Grid.Item col={6}>
150
149
  <Field.Root
151
150
  name="description"
152
151
  error={
@@ -168,8 +167,8 @@ export const CreatePage = () => {
168
167
  <Textarea value={values.description || ''} onChange={handleChange} />
169
168
  <Field.Error />
170
169
  </Field.Root>
171
- </GridItem>
172
- </Grid>
170
+ </Grid.Item>
171
+ </Grid.Root>
173
172
  </Flex>
174
173
 
175
174
  {!isLoadingPlugins && (
@@ -7,7 +7,6 @@ import {
7
7
  TextInput,
8
8
  Textarea,
9
9
  Typography,
10
- GridItem,
11
10
  Grid,
12
11
  Field,
13
12
  } from '@strapi/design-system';
@@ -143,8 +142,8 @@ export const EditPage = () => {
143
142
  })}
144
143
  </Typography>
145
144
 
146
- <Grid gap={4}>
147
- <GridItem col={6}>
145
+ <Grid.Root gap={4}>
146
+ <Grid.Item col={6}>
148
147
  <Field.Root
149
148
  name="name"
150
149
  error={
@@ -166,8 +165,8 @@ export const EditPage = () => {
166
165
  <TextInput value={values.name || ''} onChange={handleChange} />
167
166
  <Field.Error />
168
167
  </Field.Root>
169
- </GridItem>
170
- <GridItem col={6}>
168
+ </Grid.Item>
169
+ <Grid.Item col={6}>
171
170
  <Field.Root
172
171
  name="description"
173
172
  error={
@@ -189,8 +188,8 @@ export const EditPage = () => {
189
188
  <Textarea value={values.description || ''} onChange={handleChange} />
190
189
  <Field.Error />
191
190
  </Field.Root>
192
- </GridItem>
193
- </Grid>
191
+ </Grid.Item>
192
+ </Grid.Root>
194
193
  </Flex>
195
194
 
196
195
  {!isLoadingPlugins && (
@@ -4,20 +4,20 @@ import { Flex, IconButton, Link, Tbody, Td, Tr, Typography } from '@strapi/desig
4
4
  import { Pencil, Trash } from '@strapi/icons';
5
5
  import PropTypes from 'prop-types';
6
6
  import { useIntl } from 'react-intl';
7
- import { useNavigate } from 'react-router-dom';
7
+ import { useNavigate, NavLink } from 'react-router-dom';
8
8
  import { styled } from 'styled-components';
9
9
 
10
10
  const EditLink = styled(Link)`
11
11
  align-items: center;
12
12
  height: 3.2rem;
13
+ width: 3.2rem;
13
14
  display: flex;
14
15
  justify-content: center;
15
- padding: ${({ theme }) => `${theme.spaces[2]}}`};
16
- width: 3.2rem;
16
+ padding: ${({ theme }) => `${theme.spaces[2]}`};
17
17
 
18
18
  svg {
19
- height: 1.2rem;
20
- width: 1.2rem;
19
+ height: 1.6rem;
20
+ width: 1.6rem;
21
21
 
22
22
  path {
23
23
  fill: ${({ theme }) => theme.colors.neutral500};
@@ -72,6 +72,7 @@ const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelet
72
72
  <Flex justifyContent="end" onClick={(e) => e.stopPropagation()}>
73
73
  {canUpdate ? (
74
74
  <EditLink
75
+ tag={NavLink}
75
76
  to={role.id.toString()}
76
77
  aria-label={formatMessage(
77
78
  { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },
@@ -11,8 +11,9 @@ import {
11
11
  EmptyStateLayout,
12
12
  useCollator,
13
13
  useFilter,
14
+ LinkButton,
15
+ Dialog,
14
16
  } from '@strapi/design-system';
15
- import { LinkButton } from '@strapi/design-system';
16
17
  import { Plus } from '@strapi/icons';
17
18
  import {
18
19
  ConfirmDialog,
@@ -250,11 +251,9 @@ export const RolesListPage = () => {
250
251
  <EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />
251
252
  )}
252
253
  </Layouts.Content>
253
- <ConfirmDialog
254
- onConfirm={handleConfirmDelete}
255
- onClose={handleShowConfirmDelete}
256
- isOpen={showConfirmDelete}
257
- />
254
+ <Dialog.Root open={showConfirmDelete} onOpenChange={handleShowConfirmDelete}>
255
+ <ConfirmDialog onConfirm={handleConfirmDelete} />
256
+ </Dialog.Root>
258
257
  </Page.Main>
259
258
  </Layouts.Root>
260
259
  );
@@ -7,7 +7,7 @@ const icons = require("@strapi/icons");
7
7
  const admin = require("@strapi/strapi/admin");
8
8
  const reactIntl = require("react-intl");
9
9
  const reactQuery = require("react-query");
10
- const index = require("./index-DbtKSwQT.js");
10
+ const index = require("./index-bWmIxmrB.js");
11
11
  require("lodash/isEmpty");
12
12
  const yup = require("yup");
13
13
  function _interopNamespace(e) {
@@ -231,7 +231,7 @@ const AdvancedSettingsPage = () => {
231
231
  id: "global.settings",
232
232
  defaultMessage: "Settings"
233
233
  }) }),
234
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 6, children: [
234
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 6, children: [
235
235
  {
236
236
  label: {
237
237
  id: index.getTrad("EditForm.inputSelect.label.role"),
@@ -250,7 +250,7 @@ const AdvancedSettingsPage = () => {
250
250
  type: "enumeration"
251
251
  },
252
252
  ...layout
253
- ].map(({ size, ...field }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.GridItem, { col: size, children: /* @__PURE__ */ jsxRuntime.jsx(
253
+ ].map(({ size, ...field }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: size, children: /* @__PURE__ */ jsxRuntime.jsx(
254
254
  admin.InputRenderer,
255
255
  {
256
256
  ...field,
@@ -269,4 +269,4 @@ const AdvancedSettingsPage = () => {
269
269
  };
270
270
  exports.AdvancedSettingsPage = AdvancedSettingsPage;
271
271
  exports.ProtectedAdvancedSettingsPage = ProtectedAdvancedSettingsPage;
272
- //# sourceMappingURL=index-DU64Xec_.js.map
272
+ //# sourceMappingURL=index-B-NW87wS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B-NW87wS.js","sources":["../../admin/src/pages/AdvancedSettings/utils/layout.js","../../admin/src/pages/AdvancedSettings/utils/schema.js","../../admin/src/pages/AdvancedSettings/index.jsx"],"sourcesContent":["import { getTrad } from '../../../utils';\n\nconst layout = [\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email'),\n defaultMessage: 'One account per email address',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email'),\n defaultMessage:\n 'Disallow the user to create multiple accounts using the same email address with different authentication providers.',\n },\n name: 'unique_email',\n type: 'boolean',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.sign-up'),\n defaultMessage: 'Enable sign-ups',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.sign-up'),\n defaultMessage:\n 'When disabled (OFF), the registration process is forbidden. No one can subscribe anymore no matter the used provider.',\n },\n name: 'allow_register',\n type: 'boolean',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email-reset-password'),\n defaultMessage: 'Reset password page',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email-reset-password'),\n defaultMessage: \"URL of your application's reset password page.\",\n },\n placeholder: {\n id: getTrad('EditForm.inputToggle.placeholder.email-reset-password'),\n defaultMessage: 'ex: https://youtfrontend.com/reset-password',\n },\n name: 'email_reset_password',\n type: 'string',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email-confirmation'),\n defaultMessage: 'Enable email confirmation',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email-confirmation'),\n defaultMessage: 'When enabled (ON), new registered users receive a confirmation email.',\n },\n name: 'email_confirmation',\n type: 'boolean',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email-confirmation-redirection'),\n defaultMessage: 'Redirection url',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email-confirmation-redirection'),\n defaultMessage: 'After you confirmed your email, choose where you will be redirected.',\n },\n placeholder: {\n id: getTrad('EditForm.inputToggle.placeholder.email-confirmation-redirection'),\n defaultMessage: 'ex: https://youtfrontend.com/email-confirmation',\n },\n name: 'email_confirmation_redirection',\n type: 'string',\n size: 12,\n },\n];\n\nexport default layout;\n","import { translatedErrors } from '@strapi/strapi/admin';\nimport * as yup from 'yup';\n\n// eslint-disable-next-line prefer-regex-literals\nconst URL_REGEX = new RegExp('(^$)|((.+:\\\\/\\\\/.*)(d*)\\\\/?(.*))');\n\nconst schema = yup.object().shape({\n email_confirmation_redirection: yup.mixed().when('email_confirmation', {\n is: true,\n then: yup.string().matches(URL_REGEX).required(),\n otherwise: yup.string().nullable(),\n }),\n email_reset_password: yup\n .string(translatedErrors.string)\n .matches(URL_REGEX, {\n id: translatedErrors.regex.id,\n defaultMessage: 'This is not a valid URL',\n })\n .nullable(),\n});\n\nexport default schema;\n","import React from 'react';\n\nimport { Box, Button, Flex, Grid, Typography, useNotifyAT } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport {\n useAPIErrorHandler,\n Page,\n Form,\n InputRenderer,\n useNotification,\n useFetchClient,\n useRBAC,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport layout from './utils/layout';\nimport schema from './utils/schema';\n\nconst ProtectedAdvancedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.readAdvancedSettings}>\n <AdvancedSettingsPage />\n </Page.Protect>\n);\n\nconst AdvancedSettingsPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const queryClient = useQueryClient();\n const { get, put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canUpdate },\n } = useRBAC({ update: PERMISSIONS.updateAdvancedSettings });\n\n const { isLoading: isLoadingData, data } = useQuery(\n ['users-permissions', 'advanced'],\n async () => {\n const { data } = await get('/users-permissions/advanced');\n\n return data;\n },\n {\n onSuccess() {\n notifyStatus(\n formatMessage({\n id: getTrad('Form.advancedSettings.data.loaded'),\n defaultMessage: 'Advanced settings data has been loaded',\n })\n );\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTrad('notification.error'),\n defaultMessage: 'An error occured',\n }),\n });\n },\n }\n );\n\n const isLoading = isLoadingForPermissions || isLoadingData;\n\n const submitMutation = useMutation((body) => put('/users-permissions/advanced', body), {\n async onSuccess() {\n await queryClient.invalidateQueries(['users-permissions', 'advanced']);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('notification.success.saved'),\n defaultMessage: 'Saved',\n }),\n });\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n refetchActive: true,\n });\n\n const { isLoading: isSubmittingForm } = submitMutation;\n\n const handleSubmit = async (body) => {\n submitMutation.mutate({\n ...body,\n email_confirmation_redirection: body.email_confirmation\n ? body.email_confirmation_redirection\n : '',\n });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main aria-busy={isSubmittingForm}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: getTrad('HeaderNav.link.advancedSettings'),\n defaultMessage: 'Advanced Settings',\n }),\n }\n )}\n </Page.Title>\n <Form onSubmit={handleSubmit} initialValues={data.settings} validationSchema={schema}>\n {({ values, isSubmitting, modified }) => {\n return (\n <>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('HeaderNav.link.advancedSettings'),\n defaultMessage: 'Advanced Settings',\n })}\n primaryAction={\n <Button\n loading={isSubmitting}\n type=\"submit\"\n disabled={!modified || !canUpdate}\n startIcon={<Check />}\n size=\"S\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Layouts.Content>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root gap={6}>\n {[\n {\n label: {\n id: getTrad('EditForm.inputSelect.label.role'),\n defaultMessage: 'Default role for authenticated users',\n },\n hint: {\n id: getTrad('EditForm.inputSelect.description.role'),\n defaultMessage:\n 'It will attach the new authenticated user to the selected role.',\n },\n options: data.roles.map((role) => ({\n label: role.name,\n value: role.type,\n })),\n name: 'default_role',\n size: 6,\n type: 'enumeration',\n },\n ...layout,\n ].map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size}>\n <InputRenderer\n {...field}\n disabled={\n field.name === 'email_confirmation_redirection' &&\n values.email_confirmation === false\n }\n label={formatMessage(field.label)}\n hint={field.hint ? formatMessage(field.hint) : undefined}\n placeholder={\n field.placeholder ? formatMessage(field.placeholder) : undefined\n }\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n </Box>\n </Layouts.Content>\n </>\n );\n }}\n </Form>\n </Page.Main>\n );\n};\n\nexport { ProtectedAdvancedSettingsPage, AdvancedSettingsPage };\n"],"names":["getTrad","yup","translatedErrors","jsx","Page","PERMISSIONS","useIntl","useNotification","useNotifyAT","useQueryClient","useFetchClient","useAPIErrorHandler","useRBAC","useQuery","data","useMutation","jsxs","Form","Fragment","Layouts","Button","Check","Box","Flex","Typography","Grid","InputRenderer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,SAAS;AAAA,EACb;AAAA,IACE,OAAO;AAAA,MACL,IAAIA,MAAO,QAAC,kCAAkC;AAAA,MAC9C,gBAAgB;AAAA,IACjB;AAAA,IACD,MAAM;AAAA,MACJ,IAAIA,MAAO,QAAC,wCAAwC;AAAA,MACpD,gBACE;AAAA,IACH;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACD;AAAA,IACE,OAAO;AAAA,MACL,IAAIA,MAAO,QAAC,oCAAoC;AAAA,MAChD,gBAAgB;AAAA,IACjB;AAAA,IACD,MAAM;AAAA,MACJ,IAAIA,MAAO,QAAC,0CAA0C;AAAA,MACtD,gBACE;AAAA,IACH;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACD;AAAA,IACE,OAAO;AAAA,MACL,IAAIA,MAAO,QAAC,iDAAiD;AAAA,MAC7D,gBAAgB;AAAA,IACjB;AAAA,IACD,MAAM;AAAA,MACJ,IAAIA,MAAO,QAAC,uDAAuD;AAAA,MACnE,gBAAgB;AAAA,IACjB;AAAA,IACD,aAAa;AAAA,MACX,IAAIA,MAAO,QAAC,uDAAuD;AAAA,MACnE,gBAAgB;AAAA,IACjB;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACD;AAAA,IACE,OAAO;AAAA,MACL,IAAIA,MAAO,QAAC,+CAA+C;AAAA,MAC3D,gBAAgB;AAAA,IACjB;AAAA,IACD,MAAM;AAAA,MACJ,IAAIA,MAAO,QAAC,qDAAqD;AAAA,MACjE,gBAAgB;AAAA,IACjB;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACD;AAAA,IACE,OAAO;AAAA,MACL,IAAIA,MAAO,QAAC,2DAA2D;AAAA,MACvE,gBAAgB;AAAA,IACjB;AAAA,IACD,MAAM;AAAA,MACJ,IAAIA,MAAO,QAAC,iEAAiE;AAAA,MAC7E,gBAAgB;AAAA,IACjB;AAAA,IACD,aAAa;AAAA,MACX,IAAIA,MAAO,QAAC,iEAAiE;AAAA,MAC7E,gBAAgB;AAAA,IACjB;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACP;AACH;AC1EA,MAAM,YAAY,IAAI,OAAO,kCAAkC;AAE/D,MAAM,SAASC,eAAI,OAAQ,EAAC,MAAM;AAAA,EAChC,gCAAgCA,eAAI,QAAQ,KAAK,sBAAsB;AAAA,IACrE,IAAI;AAAA,IACJ,MAAMA,eAAI,OAAM,EAAG,QAAQ,SAAS,EAAE,SAAU;AAAA,IAChD,WAAWA,eAAI,OAAQ,EAAC,SAAU;AAAA,EACtC,CAAG;AAAA,EACD,sBAAsBA,eACnB,OAAOC,MAAgB,iBAAC,MAAM,EAC9B,QAAQ,WAAW;AAAA,IAClB,IAAIA,MAAAA,iBAAiB,MAAM;AAAA,IAC3B,gBAAgB;AAAA,EACtB,CAAK,EACA,SAAU;AACf,CAAC;ACIK,MAAA,gCAAgC,MACpCC,2BAAA,IAACC,WAAK,SAAL,EAAa,aAAaC,kBAAY,sBACrC,UAACF,2BAAAA,IAAA,sBAAA,CAAA,CAAqB,EACxB,CAAA;AAGF,MAAM,uBAAuB,MAAM;AAC3B,QAAA,EAAE,kBAAkBG,UAAAA;AACpB,QAAA,EAAE,uBAAuBC,MAAAA;AACzB,QAAA,EAAE,iBAAiBC,aAAAA;AACzB,QAAM,cAAcC,WAAAA;AACpB,QAAM,EAAE,KAAK,IAAI,IAAIC,MAAe,eAAA;AAC9B,QAAA,EAAE,mBAAmBC,MAAAA;AAErB,QAAA;AAAA,IACJ,WAAW;AAAA,IACX,gBAAgB,EAAE,UAAU;AAAA,MAC1BC,MAAQ,QAAA,EAAE,QAAQP,MAAAA,YAAY,uBAAwB,CAAA;AAE1D,QAAM,EAAE,WAAW,eAAe,KAAS,IAAAQ,WAAA;AAAA,IACzC,CAAC,qBAAqB,UAAU;AAAA,IAChC,YAAY;AACV,YAAM,EAAE,MAAAC,MAAAA,IAAS,MAAM,IAAI,6BAA6B;AAEjDA,aAAAA;AAAAA,IACT;AAAA,IACA;AAAA,MACE,YAAY;AACV;AAAA,UACE,cAAc;AAAA,YACZ,IAAId,cAAQ,mCAAmC;AAAA,YAC/C,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,MAEL;AAAA,MACA,UAAU;AACW,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,cAAc;AAAA,YACrB,IAAIA,cAAQ,oBAAoB;AAAA,YAChC,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAGF,QAAM,YAAY,2BAA2B;AAE7C,QAAM,iBAAiBe,WAAAA,YAAY,CAAC,SAAS,IAAI,+BAA+B,IAAI,GAAG;AAAA,IACrF,MAAM,YAAY;AAChB,YAAM,YAAY,kBAAkB,CAAC,qBAAqB,UAAU,CAAC;AAElD,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAIf,cAAQ,4BAA4B;AAAA,UACxC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACF;AAAA,IACH;AAAA,IACA,QAAQ,OAAO;AACM,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,KAAK;AAAA,MAAA,CAC9B;AAAA,IACH;AAAA,IACA,eAAe;AAAA,EAAA,CAChB;AAEK,QAAA,EAAE,WAAW,iBAAqB,IAAA;AAElC,QAAA,eAAe,OAAO,SAAS;AACnC,mBAAe,OAAO;AAAA,MACpB,GAAG;AAAA,MACH,gCAAgC,KAAK,qBACjC,KAAK,iCACL;AAAA,IAAA,CACL;AAAA,EAAA;AAGH,MAAI,WAAW;AACN,WAAAG,+BAACC,MAAAA,KAAK,SAAL,CAAa,CAAA;AAAA,EACvB;AAEA,SACGY,2BAAAA,KAAAZ,MAAAA,KAAK,MAAL,EAAU,aAAW,kBACpB,UAAA;AAAA,IAACD,2BAAAA,IAAAC,MAAA,KAAK,OAAL,EACE,UAAA;AAAA,MACC,EAAE,IAAI,sBAAsB,gBAAgB,oBAAoB;AAAA,MAChE;AAAA,QACE,MAAM,cAAc;AAAA,UAClB,IAAIJ,cAAQ,iCAAiC;AAAA,UAC7C,gBAAgB;AAAA,QAAA,CACjB;AAAA,MACH;AAAA,IAAA,GAEJ;AAAA,IACCG,2BAAA,IAAAc,MAAA,MAAA,EAAK,UAAU,cAAc,eAAe,KAAK,UAAU,kBAAkB,QAC3E,UAAC,CAAA,EAAE,QAAQ,cAAc,eAAe;AACvC,aAEID,2BAAA,KAAAE,qBAAA,EAAA,UAAA;AAAA,QAAAf,2BAAA;AAAA,UAACgB,MAAAA,QAAQ;AAAA,UAAR;AAAA,YACC,OAAO,cAAc;AAAA,cACnB,IAAInB,cAAQ,iCAAiC;AAAA,cAC7C,gBAAgB;AAAA,YAAA,CACjB;AAAA,YACD,eACEG,2BAAA;AAAA,cAACiB,aAAA;AAAA,cAAA;AAAA,gBACC,SAAS;AAAA,gBACT,MAAK;AAAA,gBACL,UAAU,CAAC,YAAY,CAAC;AAAA,gBACxB,0CAAYC,MAAM,OAAA,EAAA;AAAA,gBAClB,MAAK;AAAA,gBAEJ,wBAAc,EAAE,IAAI,eAAe,gBAAgB,QAAQ;AAAA,cAAA;AAAA,YAC9D;AAAA,UAAA;AAAA,QAEJ;AAAA,QACAlB,2BAAAA,IAACgB,MAAQ,QAAA,SAAR,EACC,UAAAhB,2BAAA;AAAA,UAACmB,aAAA;AAAA,UAAA;AAAA,YACC,YAAW;AAAA,YACX,WAAS;AAAA,YACT,QAAO;AAAA,YACP,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,aAAa;AAAA,YACb,cAAc;AAAA,YAEd,0CAACC,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,cAAApB,+BAACqB,aAAAA,YAAW,EAAA,SAAQ,SAAQ,KAAI,MAC7B,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,cACCrB,2BAAA,IAAAsB,aAAA,KAAK,MAAL,EAAU,KAAK,GACb,UAAA;AAAA,gBACC;AAAA,kBACE,OAAO;AAAA,oBACL,IAAIzB,cAAQ,iCAAiC;AAAA,oBAC7C,gBAAgB;AAAA,kBAClB;AAAA,kBACA,MAAM;AAAA,oBACJ,IAAIA,cAAQ,uCAAuC;AAAA,oBACnD,gBACE;AAAA,kBACJ;AAAA,kBACA,SAAS,KAAK,MAAM,IAAI,CAAC,UAAU;AAAA,oBACjC,OAAO,KAAK;AAAA,oBACZ,OAAO,KAAK;AAAA,kBAAA,EACZ;AAAA,kBACF,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,MAAM;AAAA,gBACR;AAAA,gBACA,GAAG;AAAA,cACH,EAAA,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,MACrBG,2BAAAA,IAAAsB,aAAA,KAAK,MAAL,EAA2B,KAAK,MAC/B,UAAAtB,2BAAA;AAAA,gBAACuB,MAAA;AAAA,gBAAA;AAAA,kBACE,GAAG;AAAA,kBACJ,UACE,MAAM,SAAS,oCACf,OAAO,uBAAuB;AAAA,kBAEhC,OAAO,cAAc,MAAM,KAAK;AAAA,kBAChC,MAAM,MAAM,OAAO,cAAc,MAAM,IAAI,IAAI;AAAA,kBAC/C,aACE,MAAM,cAAc,cAAc,MAAM,WAAW,IAAI;AAAA,gBAAA;AAAA,cAV7C,EAAA,GAAA,MAAM,IAatB,CACD,GACH;AAAA,YAAA,GACF;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,MACF,EAAA,CAAA;AAAA,IAAA,GAGN;AAAA,EACF,EAAA,CAAA;AAEJ;;;"}
@@ -3,8 +3,8 @@ import * as React from "react";
3
3
  import { createContext, useContext, useMemo, useCallback, useReducer, forwardRef, useImperativeHandle, memo, useEffect, useState } from "react";
4
4
  import { translatedErrors, useNotification, useFetchClient, useAPIErrorHandler, Page, useTracking, Layouts, BackButton, useQueryParams, useRBAC, SearchInput, ConfirmDialog } from "@strapi/strapi/admin";
5
5
  import { useNavigate, useMatch, NavLink, Routes, Route } from "react-router-dom";
6
- import { g as getTrad, P as PERMISSIONS } from "./index-BBs5I2vg.mjs";
7
- import { Box, Flex, Typography, Checkbox, Grid, GridItem, VisuallyHidden, Accordion, Main, Button, Field, TextInput, Textarea, Link, Tbody, Tr, Td, IconButton, useNotifyAT, useFilter, useCollator, LinkButton, Table, Thead, Th, EmptyStateLayout } from "@strapi/design-system";
6
+ import { g as getTrad, P as PERMISSIONS } from "./index-CKip12uF.mjs";
7
+ import { Box, Flex, Typography, Checkbox, Grid, VisuallyHidden, Accordion, Main, Button, Field, TextInput, Textarea, Link, Tbody, Tr, Td, IconButton, useNotifyAT, useFilter, useCollator, LinkButton, Table, Thead, Th, EmptyStateLayout, Dialog } from "@strapi/design-system";
8
8
  import { Cog, Check, Pencil, Trash, Plus } from "@strapi/icons";
9
9
  import { Formik, Form } from "formik";
10
10
  import { useIntl } from "react-intl";
@@ -59,7 +59,8 @@ const init$1 = (initialState2, permissions) => {
59
59
  };
60
60
  const activeCheckboxWrapperStyles = css`
61
61
  background: ${(props) => props.theme.colors.primary100};
62
- svg {
62
+
63
+ #cog {
63
64
  opacity: 1;
64
65
  }
65
66
  `;
@@ -68,7 +69,7 @@ const CheckboxWrapper = styled(Box)`
68
69
  justify-content: space-between;
69
70
  align-items: center;
70
71
 
71
- svg {
72
+ #cog {
72
73
  opacity: 0;
73
74
  path {
74
75
  fill: ${(props) => props.theme.colors.primary600};
@@ -118,22 +119,21 @@ const SubCategory = ({ subCategory }) => {
118
119
  Checkbox,
119
120
  {
120
121
  name: subCategory.name,
121
- value: hasAllActionsSelected,
122
- onValueChange: (value) => handleChangeSelectAll({ target: { name: subCategory.name, value } }),
123
- indeterminate: hasSomeActionsSelected,
122
+ checked: hasSomeActionsSelected ? "indeterminate" : hasAllActionsSelected,
123
+ onCheckedChange: (value) => handleChangeSelectAll({ target: { name: subCategory.name, value } }),
124
124
  children: formatMessage({ id: "app.utils.select-all", defaultMessage: "Select all" })
125
125
  }
126
126
  ) })
127
127
  ] }),
128
- /* @__PURE__ */ jsx(Flex, { paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsx(Grid, { gap: 2, style: { flex: 1 }, children: subCategory.actions.map((action) => {
128
+ /* @__PURE__ */ jsx(Flex, { paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsx(Grid.Root, { gap: 2, style: { flex: 1 }, children: subCategory.actions.map((action) => {
129
129
  const name = `${action.name}.enabled`;
130
- return /* @__PURE__ */ jsx(GridItem, { col: 6, children: /* @__PURE__ */ jsxs(CheckboxWrapper, { isActive: isActionSelected(action.name), padding: 2, hasRadius: true, children: [
130
+ return /* @__PURE__ */ jsx(Grid.Item, { col: 6, children: /* @__PURE__ */ jsxs(CheckboxWrapper, { isActive: isActionSelected(action.name), padding: 2, hasRadius: true, children: [
131
131
  /* @__PURE__ */ jsx(
132
132
  Checkbox,
133
133
  {
134
- value: get(modifiedData, name, false),
134
+ checked: get(modifiedData, name, false),
135
135
  name,
136
- onValueChange: (value) => onChange({ target: { name, value } }),
136
+ onCheckedChange: (value) => onChange({ target: { name, value } }),
137
137
  children: action.label
138
138
  }
139
139
  ),
@@ -153,7 +153,7 @@ const SubCategory = ({ subCategory }) => {
153
153
  route: action.name
154
154
  }
155
155
  ) }),
156
- /* @__PURE__ */ jsx(Cog, {})
156
+ /* @__PURE__ */ jsx(Cog, { id: "cog" })
157
157
  ]
158
158
  }
159
159
  )
@@ -229,6 +229,7 @@ const Permissions = () => {
229
229
  /* @__PURE__ */ jsx(Accordion.Header, { variant: index % 2 === 0 ? "secondary" : void 0, children: /* @__PURE__ */ jsx(
230
230
  Accordion.Trigger,
231
231
  {
232
+ caretPosition: "right",
232
233
  description: formatMessage(
233
234
  {
234
235
  id: "users-permissions.Plugin.permissions.plugins.description",
@@ -335,7 +336,7 @@ const Policies = () => {
335
336
  const pathResolved = path.slice(1).join(".");
336
337
  const displayedRoutes = isEmpty(controllerRoutes) ? [] : controllerRoutes.filter((o) => o.handler.endsWith(pathResolved));
337
338
  return /* @__PURE__ */ jsx(
338
- GridItem,
339
+ Grid.Item,
339
340
  {
340
341
  col: 5,
341
342
  background: "neutral150",
@@ -454,8 +455,8 @@ const UsersPermissions = forwardRef(({ permissions, routes }, ref) => {
454
455
  onChangeSelectAll: handleChangeSelectAll,
455
456
  onSelectedAction: handleSelectedAction
456
457
  };
457
- return /* @__PURE__ */ jsx(UsersPermissionsProvider, { value: providerValue, children: /* @__PURE__ */ jsxs(Grid, { gap: 0, shadow: "filterShadow", hasRadius: true, background: "neutral0", children: [
458
- /* @__PURE__ */ jsx(GridItem, { col: 7, paddingTop: 6, paddingBottom: 6, paddingLeft: 7, paddingRight: 7, children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
458
+ return /* @__PURE__ */ jsx(UsersPermissionsProvider, { value: providerValue, children: /* @__PURE__ */ jsxs(Grid.Root, { gap: 0, shadow: "filterShadow", hasRadius: true, background: "neutral0", children: [
459
+ /* @__PURE__ */ jsx(Grid.Item, { col: 7, paddingTop: 6, paddingBottom: 6, paddingLeft: 7, paddingRight: 7, children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
459
460
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
460
461
  /* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h2", children: formatMessage({
461
462
  id: getTrad("Plugins.header.title"),
@@ -640,8 +641,8 @@ const CreatePage = () => {
640
641
  id: getTrad("EditPage.form.roles"),
641
642
  defaultMessage: "Role details"
642
643
  }) }),
643
- /* @__PURE__ */ jsxs(Grid, { gap: 4, children: [
644
- /* @__PURE__ */ jsx(GridItem, { col: 6, children: /* @__PURE__ */ jsxs(
644
+ /* @__PURE__ */ jsxs(Grid.Root, { gap: 4, children: [
645
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, children: /* @__PURE__ */ jsxs(
645
646
  Field.Root,
646
647
  {
647
648
  name: "name",
@@ -657,7 +658,7 @@ const CreatePage = () => {
657
658
  ]
658
659
  }
659
660
  ) }),
660
- /* @__PURE__ */ jsx(GridItem, { col: 6, children: /* @__PURE__ */ jsxs(
661
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, children: /* @__PURE__ */ jsxs(
661
662
  Field.Root,
662
663
  {
663
664
  name: "description",
@@ -794,8 +795,8 @@ const EditPage = () => {
794
795
  id: getTrad("EditPage.form.roles"),
795
796
  defaultMessage: "Role details"
796
797
  }) }),
797
- /* @__PURE__ */ jsxs(Grid, { gap: 4, children: [
798
- /* @__PURE__ */ jsx(GridItem, { col: 6, children: /* @__PURE__ */ jsxs(
798
+ /* @__PURE__ */ jsxs(Grid.Root, { gap: 4, children: [
799
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, children: /* @__PURE__ */ jsxs(
799
800
  Field.Root,
800
801
  {
801
802
  name: "name",
@@ -814,7 +815,7 @@ const EditPage = () => {
814
815
  ]
815
816
  }
816
817
  ) }),
817
- /* @__PURE__ */ jsx(GridItem, { col: 6, children: /* @__PURE__ */ jsxs(
818
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, children: /* @__PURE__ */ jsxs(
818
819
  Field.Root,
819
820
  {
820
821
  name: "description",
@@ -855,14 +856,14 @@ const ProtectedRolesEditPage = () => /* @__PURE__ */ jsx(Page.Protect, { permiss
855
856
  const EditLink = styled(Link)`
856
857
  align-items: center;
857
858
  height: 3.2rem;
859
+ width: 3.2rem;
858
860
  display: flex;
859
861
  justify-content: center;
860
- padding: ${({ theme }) => `${theme.spaces[2]}}`};
861
- width: 3.2rem;
862
+ padding: ${({ theme }) => `${theme.spaces[2]}`};
862
863
 
863
864
  svg {
864
- height: 1.2rem;
865
- width: 1.2rem;
865
+ height: 1.6rem;
866
+ width: 1.6rem;
866
867
 
867
868
  path {
868
869
  fill: ${({ theme }) => theme.colors.neutral500};
@@ -901,6 +902,7 @@ const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelet
901
902
  canUpdate ? /* @__PURE__ */ jsx(
902
903
  EditLink,
903
904
  {
905
+ tag: NavLink,
904
906
  to: role.id.toString(),
905
907
  "aria-label": formatMessage(
906
908
  { id: "app.component.table.edit", defaultMessage: "Edit {target}" },
@@ -1107,14 +1109,7 @@ const RolesListPage = () => {
1107
1109
  )
1108
1110
  ] }) : /* @__PURE__ */ jsx(EmptyStateLayout, { content: formatMessage(emptyLayout[emptyContent]) })
1109
1111
  ] }),
1110
- /* @__PURE__ */ jsx(
1111
- ConfirmDialog,
1112
- {
1113
- onConfirm: handleConfirmDelete,
1114
- onClose: handleShowConfirmDelete,
1115
- isOpen: showConfirmDelete
1116
- }
1117
- )
1112
+ /* @__PURE__ */ jsx(Dialog.Root, { open: showConfirmDelete, onOpenChange: handleShowConfirmDelete, children: /* @__PURE__ */ jsx(ConfirmDialog, { onConfirm: handleConfirmDelete }) })
1118
1113
  ] })
1119
1114
  ] });
1120
1115
  };
@@ -1131,4 +1126,4 @@ const Roles = () => {
1131
1126
  export {
1132
1127
  Roles as default
1133
1128
  };
1134
- //# sourceMappingURL=index-8gj-Xbnv.mjs.map
1129
+ //# sourceMappingURL=index-BM3Y3D1I.mjs.map