@strapi/content-type-builder 5.28.0 → 5.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AIChat/Chat.js +1 -0
- package/dist/admin/components/AIChat/Chat.js.map +1 -1
- package/dist/admin/components/AIChat/Chat.mjs +1 -0
- package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.js +2 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs +2 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
- package/dist/admin/components/AttributeRow.js +7 -1
- package/dist/admin/components/AttributeRow.js.map +1 -1
- package/dist/admin/components/AttributeRow.mjs +7 -1
- package/dist/admin/components/AttributeRow.mjs.map +1 -1
- package/dist/admin/components/CheckboxWithNumberField.js +2 -1
- package/dist/admin/components/CheckboxWithNumberField.js.map +1 -1
- package/dist/admin/components/CheckboxWithNumberField.mjs +2 -1
- package/dist/admin/components/CheckboxWithNumberField.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +3 -3
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs +3 -3
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +1 -1
- package/dist/admin/components/List.js +3 -1
- package/dist/admin/components/List.js.map +1 -1
- package/dist/admin/components/List.mjs +5 -3
- package/dist/admin/components/List.mjs.map +1 -1
- package/dist/admin/components/PluralName.js +2 -1
- package/dist/admin/components/PluralName.js.map +1 -1
- package/dist/admin/components/PluralName.mjs +2 -1
- package/dist/admin/components/PluralName.mjs.map +1 -1
- package/dist/admin/components/SingularName.js +2 -1
- package/dist/admin/components/SingularName.js.map +1 -1
- package/dist/admin/components/SingularName.mjs +2 -1
- package/dist/admin/components/SingularName.mjs.map +1 -1
- package/dist/server/register.js +30 -89
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +30 -89
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/src/index.d.ts +3 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts +4 -9
- package/dist/server/src/register.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContentTypeBuilderMenu.js","sources":["../../../../admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { useCollator, useFilter } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { pluginId } from '../../pluginId';\nimport { getTrad } from '../../utils/getTrad';\nimport { useDataManager } from '../DataManager/useDataManager';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport type { Status } from '../../types';\n\ntype Link = {\n name: string;\n to: string;\n status: Status;\n title: string;\n};\n\ntype SubSection = {\n name: string;\n title: string;\n links: Link[];\n};\n\ntype MenuSection = {\n name: string;\n title: {\n id: string;\n defaultMessage: string;\n };\n customLink?: {\n id: string;\n defaultMessage: string;\n onClick: () => void;\n };\n links: Array<SubSection | Link>;\n linksCount?: number;\n};\n\ntype Menu = MenuSection[];\n\nexport const useContentTypeBuilderMenu = () => {\n const { componentsGroupedByCategory, isInDevelopmentMode, sortedContentTypesList } =\n useDataManager();\n const { trackUsage } = useTracking();\n const [searchValue, setSearchValue] = useState('');\n const { onOpenModalCreateSchema } = useFormModalNavigation();\n const { locale } = useIntl();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const handleClickOpenModalCreateCollectionType = () => {\n trackUsage(`willCreateContentType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'collectionType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const handleClickOpenModalCreateSingleType = () => {\n trackUsage(`willCreateSingleType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'singleType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const handleClickOpenModalCreateComponent = () => {\n trackUsage('willCreateComponent');\n\n const nextState = {\n modalType: 'component',\n kind: null,\n actionType: 'create',\n forTarget: 'component',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const componentsData = Object.entries(componentsGroupedByCategory)\n .map(([category, components]) => ({\n name: category,\n title: upperFirst(category),\n links: components\n .map((component) => ({\n name: component.uid,\n to: `/plugins/${pluginId}/component-categories/${category}/${component.uid}`,\n title: component.info.displayName,\n status: component.status,\n }))\n .sort((a, b) => formatter.compare(a.title, b.title)),\n }))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n const displayedContentTypes = sortedContentTypesList\n .filter((obj) => obj.visible)\n .map((info) => ({\n kind: info.kind,\n name: info.name,\n to: info.to,\n title: info.title,\n status: info.status,\n }));\n\n const data: Menu = [\n {\n name: 'models',\n title: {\n id: `${getTrad('menu.section.models.name')}`,\n defaultMessage: 'Collection Types',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.model.create')}`,\n defaultMessage: 'Create new collection type',\n onClick: handleClickOpenModalCreateCollectionType,\n }\n : undefined,\n links: displayedContentTypes.filter((contentType) => contentType.kind === 'collectionType'),\n },\n {\n name: 'singleTypes',\n title: {\n id: `${getTrad('menu.section.single-types.name')}`,\n defaultMessage: 'Single Types',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.single-types.create')}`,\n defaultMessage: 'Create new single type',\n onClick: handleClickOpenModalCreateSingleType,\n }\n : undefined,\n links: displayedContentTypes.filter((singleType) => singleType.kind === 'singleType'),\n },\n {\n name: 'components',\n title: {\n id: `${getTrad('menu.section.components.name')}`,\n defaultMessage: 'Components',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.component.create')}`,\n defaultMessage: 'Create a new component',\n onClick: handleClickOpenModalCreateComponent,\n }\n : undefined,\n links: componentsData,\n },\n ].map((section) => {\n const hasChild = section.links.some((l) => 'links' in l && Array.isArray(l.links));\n\n if (hasChild) {\n let filteredLinksCount = 0;\n\n return {\n ...section,\n links: section.links.reduce((acc, link) => {\n const filteredLinks =\n 'links' in link ? link.links.filter((link) => startsWith(link.title, searchValue)) : [];\n\n if (filteredLinks.length === 0) {\n return acc;\n }\n\n filteredLinksCount += filteredLinks.length;\n\n acc.push({\n ...link,\n links: filteredLinks.sort((a, b) => formatter.compare(a.title, b.title)),\n });\n\n return acc;\n }, [] as SubSection[]),\n linksCount: filteredLinksCount,\n };\n }\n\n const filteredLinks = section.links\n .filter((link) => startsWith(link.title, searchValue))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n return {\n ...section,\n links: filteredLinks,\n linksCount: filteredLinks.length,\n };\n });\n\n return {\n menu: data,\n search: {\n value: searchValue,\n onChange: setSearchValue,\n clear: () => setSearchValue(''),\n },\n };\n};\n"],"names":["useContentTypeBuilderMenu","componentsGroupedByCategory","isInDevelopmentMode","sortedContentTypesList","useDataManager","trackUsage","useTracking","searchValue","setSearchValue","useState","onOpenModalCreateSchema","useFormModalNavigation","locale","useIntl","startsWith","useFilter","sensitivity","formatter","useCollator","handleClickOpenModalCreateCollectionType","nextState","modalType","kind","actionType","forTarget","handleClickOpenModalCreateSingleType","handleClickOpenModalCreateComponent","componentsData","Object","entries","map","category","components","name","title","upperFirst","links","component","uid","to","pluginId","info","displayName","status","sort","a","b","compare","displayedContentTypes","filter","obj","visible","data","id","getTrad","defaultMessage","customLink","onClick","undefined","contentType","singleType","section","hasChild","some","l","Array","isArray","filteredLinksCount","reduce","acc","link","filteredLinks","length","push","linksCount","menu","search","value","onChange","clear"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useContentTypeBuilderMenu.js","sources":["../../../../admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { useCollator, useFilter } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { pluginId } from '../../pluginId';\nimport { getTrad } from '../../utils/getTrad';\nimport { useDataManager } from '../DataManager/useDataManager';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport type { Status } from '../../types';\n\ntype Link = {\n name: string;\n to: string;\n status: Status;\n title: string;\n};\n\ntype SubSection = {\n name: string;\n title: string;\n links: Link[];\n};\n\ntype MenuSection = {\n name: string;\n title: {\n id: string;\n defaultMessage: string;\n };\n customLink?: {\n id: string;\n defaultMessage: string;\n onClick: () => void;\n };\n links: Array<SubSection | Link>;\n linksCount?: number;\n};\n\ntype Menu = MenuSection[];\n\nexport const useContentTypeBuilderMenu = () => {\n const { componentsGroupedByCategory, isInDevelopmentMode, sortedContentTypesList } =\n useDataManager();\n const { trackUsage } = useTracking();\n const [searchValue, setSearchValue] = useState('');\n const { onOpenModalCreateSchema } = useFormModalNavigation();\n const { locale } = useIntl();\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const handleClickOpenModalCreateCollectionType = () => {\n trackUsage(`willCreateContentType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'collectionType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const handleClickOpenModalCreateSingleType = () => {\n trackUsage(`willCreateSingleType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'singleType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const handleClickOpenModalCreateComponent = () => {\n trackUsage('willCreateComponent');\n\n const nextState = {\n modalType: 'component',\n kind: null,\n actionType: 'create',\n forTarget: 'component',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const componentsData = Object.entries(componentsGroupedByCategory)\n .map(([category, components]) => ({\n name: category,\n title: upperFirst(category),\n links: components\n .map((component) => ({\n name: component.uid,\n to: `/plugins/${pluginId}/component-categories/${category}/${component.uid}`,\n title: component.info.displayName,\n status: component.status,\n }))\n .sort((a, b) => formatter.compare(a.title, b.title)),\n }))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n const displayedContentTypes = sortedContentTypesList\n .filter((obj) => obj.visible)\n .map((info) => ({\n kind: info.kind,\n name: info.name,\n to: info.to,\n title: info.title,\n status: info.status,\n }));\n\n const data: Menu = [\n {\n name: 'models',\n title: {\n id: `${getTrad('menu.section.models.name')}`,\n defaultMessage: 'Collection Types',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.model.create')}`,\n defaultMessage: 'Create new collection type',\n onClick: handleClickOpenModalCreateCollectionType,\n }\n : undefined,\n links: displayedContentTypes.filter((contentType) => contentType.kind === 'collectionType'),\n },\n {\n name: 'singleTypes',\n title: {\n id: `${getTrad('menu.section.single-types.name')}`,\n defaultMessage: 'Single Types',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.single-types.create')}`,\n defaultMessage: 'Create new single type',\n onClick: handleClickOpenModalCreateSingleType,\n }\n : undefined,\n links: displayedContentTypes.filter((singleType) => singleType.kind === 'singleType'),\n },\n {\n name: 'components',\n title: {\n id: `${getTrad('menu.section.components.name')}`,\n defaultMessage: 'Components',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.component.create')}`,\n defaultMessage: 'Create a new component',\n onClick: handleClickOpenModalCreateComponent,\n }\n : undefined,\n links: componentsData,\n },\n ].map((section) => {\n const hasChild = section.links.some((l) => 'links' in l && Array.isArray(l.links));\n\n if (hasChild) {\n let filteredLinksCount = 0;\n\n return {\n ...section,\n links: section.links.reduce((acc, link) => {\n const filteredLinks =\n 'links' in link ? link.links.filter((link) => contains(link.title, searchValue)) : [];\n\n if (filteredLinks.length === 0) {\n return acc;\n }\n\n filteredLinksCount += filteredLinks.length;\n\n acc.push({\n ...link,\n links: filteredLinks.sort((a, b) => formatter.compare(a.title, b.title)),\n });\n\n return acc;\n }, [] as SubSection[]),\n linksCount: filteredLinksCount,\n };\n }\n\n const filteredLinks = section.links\n .filter((link) => contains(link.title, searchValue))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n return {\n ...section,\n links: filteredLinks,\n linksCount: filteredLinks.length,\n };\n });\n\n return {\n menu: data,\n search: {\n value: searchValue,\n onChange: setSearchValue,\n clear: () => setSearchValue(''),\n },\n };\n};\n"],"names":["useContentTypeBuilderMenu","componentsGroupedByCategory","isInDevelopmentMode","sortedContentTypesList","useDataManager","trackUsage","useTracking","searchValue","setSearchValue","useState","onOpenModalCreateSchema","useFormModalNavigation","locale","useIntl","contains","useFilter","sensitivity","formatter","useCollator","handleClickOpenModalCreateCollectionType","nextState","modalType","kind","actionType","forTarget","handleClickOpenModalCreateSingleType","handleClickOpenModalCreateComponent","componentsData","Object","entries","map","category","components","name","title","upperFirst","links","component","uid","to","pluginId","info","displayName","status","sort","a","b","compare","displayedContentTypes","filter","obj","visible","data","id","getTrad","defaultMessage","customLink","onClick","undefined","contentType","singleType","section","hasChild","some","l","Array","isArray","filteredLinksCount","reduce","acc","link","filteredLinks","length","push","linksCount","menu","search","value","onChange","clear"],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ const useContentTypeBuilderMenu = ()=>{
|
|
|
14
14
|
const [searchValue, setSearchValue] = useState('');
|
|
15
15
|
const { onOpenModalCreateSchema } = useFormModalNavigation();
|
|
16
16
|
const { locale } = useIntl();
|
|
17
|
-
const {
|
|
17
|
+
const { contains } = useFilter(locale, {
|
|
18
18
|
sensitivity: 'base'
|
|
19
19
|
});
|
|
20
20
|
const formatter = useCollator(locale, {
|
|
@@ -114,7 +114,7 @@ const useContentTypeBuilderMenu = ()=>{
|
|
|
114
114
|
return {
|
|
115
115
|
...section,
|
|
116
116
|
links: section.links.reduce((acc, link)=>{
|
|
117
|
-
const filteredLinks = 'links' in link ? link.links.filter((link)=>
|
|
117
|
+
const filteredLinks = 'links' in link ? link.links.filter((link)=>contains(link.title, searchValue)) : [];
|
|
118
118
|
if (filteredLinks.length === 0) {
|
|
119
119
|
return acc;
|
|
120
120
|
}
|
|
@@ -128,7 +128,7 @@ const useContentTypeBuilderMenu = ()=>{
|
|
|
128
128
|
linksCount: filteredLinksCount
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
|
-
const filteredLinks = section.links.filter((link)=>
|
|
131
|
+
const filteredLinks = section.links.filter((link)=>contains(link.title, searchValue)).sort((a, b)=>formatter.compare(a.title, b.title));
|
|
132
132
|
return {
|
|
133
133
|
...section,
|
|
134
134
|
links: filteredLinks,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContentTypeBuilderMenu.mjs","sources":["../../../../admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { useCollator, useFilter } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { pluginId } from '../../pluginId';\nimport { getTrad } from '../../utils/getTrad';\nimport { useDataManager } from '../DataManager/useDataManager';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport type { Status } from '../../types';\n\ntype Link = {\n name: string;\n to: string;\n status: Status;\n title: string;\n};\n\ntype SubSection = {\n name: string;\n title: string;\n links: Link[];\n};\n\ntype MenuSection = {\n name: string;\n title: {\n id: string;\n defaultMessage: string;\n };\n customLink?: {\n id: string;\n defaultMessage: string;\n onClick: () => void;\n };\n links: Array<SubSection | Link>;\n linksCount?: number;\n};\n\ntype Menu = MenuSection[];\n\nexport const useContentTypeBuilderMenu = () => {\n const { componentsGroupedByCategory, isInDevelopmentMode, sortedContentTypesList } =\n useDataManager();\n const { trackUsage } = useTracking();\n const [searchValue, setSearchValue] = useState('');\n const { onOpenModalCreateSchema } = useFormModalNavigation();\n const { locale } = useIntl();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const handleClickOpenModalCreateCollectionType = () => {\n trackUsage(`willCreateContentType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'collectionType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const handleClickOpenModalCreateSingleType = () => {\n trackUsage(`willCreateSingleType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'singleType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const handleClickOpenModalCreateComponent = () => {\n trackUsage('willCreateComponent');\n\n const nextState = {\n modalType: 'component',\n kind: null,\n actionType: 'create',\n forTarget: 'component',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const componentsData = Object.entries(componentsGroupedByCategory)\n .map(([category, components]) => ({\n name: category,\n title: upperFirst(category),\n links: components\n .map((component) => ({\n name: component.uid,\n to: `/plugins/${pluginId}/component-categories/${category}/${component.uid}`,\n title: component.info.displayName,\n status: component.status,\n }))\n .sort((a, b) => formatter.compare(a.title, b.title)),\n }))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n const displayedContentTypes = sortedContentTypesList\n .filter((obj) => obj.visible)\n .map((info) => ({\n kind: info.kind,\n name: info.name,\n to: info.to,\n title: info.title,\n status: info.status,\n }));\n\n const data: Menu = [\n {\n name: 'models',\n title: {\n id: `${getTrad('menu.section.models.name')}`,\n defaultMessage: 'Collection Types',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.model.create')}`,\n defaultMessage: 'Create new collection type',\n onClick: handleClickOpenModalCreateCollectionType,\n }\n : undefined,\n links: displayedContentTypes.filter((contentType) => contentType.kind === 'collectionType'),\n },\n {\n name: 'singleTypes',\n title: {\n id: `${getTrad('menu.section.single-types.name')}`,\n defaultMessage: 'Single Types',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.single-types.create')}`,\n defaultMessage: 'Create new single type',\n onClick: handleClickOpenModalCreateSingleType,\n }\n : undefined,\n links: displayedContentTypes.filter((singleType) => singleType.kind === 'singleType'),\n },\n {\n name: 'components',\n title: {\n id: `${getTrad('menu.section.components.name')}`,\n defaultMessage: 'Components',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.component.create')}`,\n defaultMessage: 'Create a new component',\n onClick: handleClickOpenModalCreateComponent,\n }\n : undefined,\n links: componentsData,\n },\n ].map((section) => {\n const hasChild = section.links.some((l) => 'links' in l && Array.isArray(l.links));\n\n if (hasChild) {\n let filteredLinksCount = 0;\n\n return {\n ...section,\n links: section.links.reduce((acc, link) => {\n const filteredLinks =\n 'links' in link ? link.links.filter((link) => startsWith(link.title, searchValue)) : [];\n\n if (filteredLinks.length === 0) {\n return acc;\n }\n\n filteredLinksCount += filteredLinks.length;\n\n acc.push({\n ...link,\n links: filteredLinks.sort((a, b) => formatter.compare(a.title, b.title)),\n });\n\n return acc;\n }, [] as SubSection[]),\n linksCount: filteredLinksCount,\n };\n }\n\n const filteredLinks = section.links\n .filter((link) => startsWith(link.title, searchValue))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n return {\n ...section,\n links: filteredLinks,\n linksCount: filteredLinks.length,\n };\n });\n\n return {\n menu: data,\n search: {\n value: searchValue,\n onChange: setSearchValue,\n clear: () => setSearchValue(''),\n },\n };\n};\n"],"names":["useContentTypeBuilderMenu","componentsGroupedByCategory","isInDevelopmentMode","sortedContentTypesList","useDataManager","trackUsage","useTracking","searchValue","setSearchValue","useState","onOpenModalCreateSchema","useFormModalNavigation","locale","useIntl","startsWith","useFilter","sensitivity","formatter","useCollator","handleClickOpenModalCreateCollectionType","nextState","modalType","kind","actionType","forTarget","handleClickOpenModalCreateSingleType","handleClickOpenModalCreateComponent","componentsData","Object","entries","map","category","components","name","title","upperFirst","links","component","uid","to","pluginId","info","displayName","status","sort","a","b","compare","displayedContentTypes","filter","obj","visible","data","id","getTrad","defaultMessage","customLink","onClick","undefined","contentType","singleType","section","hasChild","some","l","Array","isArray","filteredLinksCount","reduce","acc","link","filteredLinks","length","push","linksCount","menu","search","value","onChange","clear"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useContentTypeBuilderMenu.mjs","sources":["../../../../admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { useCollator, useFilter } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { pluginId } from '../../pluginId';\nimport { getTrad } from '../../utils/getTrad';\nimport { useDataManager } from '../DataManager/useDataManager';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport type { Status } from '../../types';\n\ntype Link = {\n name: string;\n to: string;\n status: Status;\n title: string;\n};\n\ntype SubSection = {\n name: string;\n title: string;\n links: Link[];\n};\n\ntype MenuSection = {\n name: string;\n title: {\n id: string;\n defaultMessage: string;\n };\n customLink?: {\n id: string;\n defaultMessage: string;\n onClick: () => void;\n };\n links: Array<SubSection | Link>;\n linksCount?: number;\n};\n\ntype Menu = MenuSection[];\n\nexport const useContentTypeBuilderMenu = () => {\n const { componentsGroupedByCategory, isInDevelopmentMode, sortedContentTypesList } =\n useDataManager();\n const { trackUsage } = useTracking();\n const [searchValue, setSearchValue] = useState('');\n const { onOpenModalCreateSchema } = useFormModalNavigation();\n const { locale } = useIntl();\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const handleClickOpenModalCreateCollectionType = () => {\n trackUsage(`willCreateContentType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'collectionType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const handleClickOpenModalCreateSingleType = () => {\n trackUsage(`willCreateSingleType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'singleType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const handleClickOpenModalCreateComponent = () => {\n trackUsage('willCreateComponent');\n\n const nextState = {\n modalType: 'component',\n kind: null,\n actionType: 'create',\n forTarget: 'component',\n };\n\n onOpenModalCreateSchema(nextState);\n };\n\n const componentsData = Object.entries(componentsGroupedByCategory)\n .map(([category, components]) => ({\n name: category,\n title: upperFirst(category),\n links: components\n .map((component) => ({\n name: component.uid,\n to: `/plugins/${pluginId}/component-categories/${category}/${component.uid}`,\n title: component.info.displayName,\n status: component.status,\n }))\n .sort((a, b) => formatter.compare(a.title, b.title)),\n }))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n const displayedContentTypes = sortedContentTypesList\n .filter((obj) => obj.visible)\n .map((info) => ({\n kind: info.kind,\n name: info.name,\n to: info.to,\n title: info.title,\n status: info.status,\n }));\n\n const data: Menu = [\n {\n name: 'models',\n title: {\n id: `${getTrad('menu.section.models.name')}`,\n defaultMessage: 'Collection Types',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.model.create')}`,\n defaultMessage: 'Create new collection type',\n onClick: handleClickOpenModalCreateCollectionType,\n }\n : undefined,\n links: displayedContentTypes.filter((contentType) => contentType.kind === 'collectionType'),\n },\n {\n name: 'singleTypes',\n title: {\n id: `${getTrad('menu.section.single-types.name')}`,\n defaultMessage: 'Single Types',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.single-types.create')}`,\n defaultMessage: 'Create new single type',\n onClick: handleClickOpenModalCreateSingleType,\n }\n : undefined,\n links: displayedContentTypes.filter((singleType) => singleType.kind === 'singleType'),\n },\n {\n name: 'components',\n title: {\n id: `${getTrad('menu.section.components.name')}`,\n defaultMessage: 'Components',\n },\n customLink: isInDevelopmentMode\n ? {\n id: `${getTrad('button.component.create')}`,\n defaultMessage: 'Create a new component',\n onClick: handleClickOpenModalCreateComponent,\n }\n : undefined,\n links: componentsData,\n },\n ].map((section) => {\n const hasChild = section.links.some((l) => 'links' in l && Array.isArray(l.links));\n\n if (hasChild) {\n let filteredLinksCount = 0;\n\n return {\n ...section,\n links: section.links.reduce((acc, link) => {\n const filteredLinks =\n 'links' in link ? link.links.filter((link) => contains(link.title, searchValue)) : [];\n\n if (filteredLinks.length === 0) {\n return acc;\n }\n\n filteredLinksCount += filteredLinks.length;\n\n acc.push({\n ...link,\n links: filteredLinks.sort((a, b) => formatter.compare(a.title, b.title)),\n });\n\n return acc;\n }, [] as SubSection[]),\n linksCount: filteredLinksCount,\n };\n }\n\n const filteredLinks = section.links\n .filter((link) => contains(link.title, searchValue))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n return {\n ...section,\n links: filteredLinks,\n linksCount: filteredLinks.length,\n };\n });\n\n return {\n menu: data,\n search: {\n value: searchValue,\n onChange: setSearchValue,\n clear: () => setSearchValue(''),\n },\n };\n};\n"],"names":["useContentTypeBuilderMenu","componentsGroupedByCategory","isInDevelopmentMode","sortedContentTypesList","useDataManager","trackUsage","useTracking","searchValue","setSearchValue","useState","onOpenModalCreateSchema","useFormModalNavigation","locale","useIntl","contains","useFilter","sensitivity","formatter","useCollator","handleClickOpenModalCreateCollectionType","nextState","modalType","kind","actionType","forTarget","handleClickOpenModalCreateSingleType","handleClickOpenModalCreateComponent","componentsData","Object","entries","map","category","components","name","title","upperFirst","links","component","uid","to","pluginId","info","displayName","status","sort","a","b","compare","displayedContentTypes","filter","obj","visible","data","id","getTrad","defaultMessage","customLink","onClick","undefined","contentType","singleType","section","hasChild","some","l","Array","isArray","filteredLinksCount","reduce","acc","link","filteredLinks","length","push","linksCount","menu","search","value","onChange","clear"],"mappings":"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"}
|
|
@@ -66,7 +66,9 @@ const List = ({ addComponentToDZ, firstLoopComponentUid, isFromDynamicZone = fal
|
|
|
66
66
|
});
|
|
67
67
|
const [activeId, setActiveId] = React.useState(null);
|
|
68
68
|
const isDeleted = type?.status === 'REMOVED';
|
|
69
|
-
const sensors = core.useSensors(core.useSensor(core.PointerSensor)
|
|
69
|
+
const sensors = core.useSensors(core.useSensor(core.PointerSensor), core.useSensor(core.KeyboardSensor, {
|
|
70
|
+
coordinateGetter: sortable.sortableKeyboardCoordinates
|
|
71
|
+
}));
|
|
70
72
|
function handlerDragStart({ active }) {
|
|
71
73
|
if (!active) {
|
|
72
74
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.js","sources":["../../../admin/src/components/List.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport {\n DndContext,\n closestCenter,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n DragOverlay,\n UniqueIdentifier,\n} from '@dnd-kit/core';\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport { SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { tours, useTracking } from '@strapi/admin/strapi-admin';\nimport { Box, Button, EmptyStateLayout } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { createPortal } from 'react-dom';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../utils/getTrad';\n\nimport { AttributeRow, type AttributeRowProps } from './AttributeRow';\nimport { useDataManager } from './DataManager/useDataManager';\nimport { NestedTFooter, TFooter } from './Footers';\nimport { useFormModalNavigation } from './FormModalNavigation/useFormModalNavigation';\n\nimport type { Component, ContentType } from '../types';\nimport type { UID } from '@strapi/types';\n\nexport const ListGrid = styled(Box)`\n white-space: nowrap;\n list-style: none;\n list-style-type: none;\n`;\n\ntype ListProps = {\n addComponentToDZ?: () => void;\n firstLoopComponentUid?: UID.Component | null;\n isFromDynamicZone?: boolean;\n isMain?: boolean;\n secondLoopComponentUid?: UID.Component | null;\n isSub?: boolean;\n type: ContentType | Component;\n};\n\nconst SortableRow = (props: AttributeRowProps) => {\n const { isInDevelopmentMode } = useDataManager();\n\n const {\n isDragging,\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n setActivatorNodeRef,\n } = useSortable({\n disabled:\n !isInDevelopmentMode || props.item.status === 'REMOVED' || props.type.status === 'REMOVED',\n id: props.item.id,\n data: { index: props.item.index },\n });\n\n const style = {\n transform: CSS.Transform.toString({\n x: transform?.x ?? 0,\n y: transform?.y ?? 0,\n scaleX: 1,\n scaleY: 1,\n }),\n transition,\n };\n\n return (\n <AttributeRow\n ref={setNodeRef}\n handleRef={setActivatorNodeRef}\n isDragging={isDragging}\n attributes={attributes}\n listeners={listeners}\n style={style}\n {...props}\n />\n );\n};\n\nexport const List = ({\n addComponentToDZ,\n firstLoopComponentUid,\n isFromDynamicZone = false,\n isMain = false,\n isSub = false,\n secondLoopComponentUid,\n type,\n}: ListProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { isInDevelopmentMode, moveAttribute } = useDataManager();\n const { onOpenModalAddField } = useFormModalNavigation();\n\n const items = type?.attributes.map((item, index) => {\n return {\n id: `${type.uid}_${item.name}`,\n index,\n ...item,\n };\n });\n\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n const isDeleted = type?.status === 'REMOVED';\n\n const sensors = useSensors(useSensor(PointerSensor));\n\n function handlerDragStart({ active }: DragStartEvent) {\n if (!active) {\n return;\n }\n\n setActiveId(active.id);\n }\n\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n\n setActiveId(null);\n\n if (over) {\n if (active.id !== over.id) {\n moveAttribute({\n forTarget: type.modelType,\n targetUid: type.uid,\n from: active.data.current!.index,\n to: over.data.current!.index,\n });\n }\n }\n }\n\n const activeItem = items.find((item) => item.id === activeId);\n\n const onClickAddField = () => {\n if (isDeleted) {\n return;\n }\n\n trackUsage('hasClickedCTBAddFieldBanner');\n\n onOpenModalAddField({ forTarget: type?.modelType, targetUid: type.uid });\n };\n\n if (type?.attributes.length === 0 && isMain) {\n return (\n <EmptyStateLayout\n action={\n <tours.contentTypeBuilder.AddFields>\n <Button onClick={onClickAddField} size=\"L\" startIcon={<Plus />} variant=\"secondary\">\n {formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n })}\n </Button>\n </tours.contentTypeBuilder.AddFields>\n }\n content={formatMessage(\n type.modelType === 'contentType'\n ? {\n id: getTrad('table.content.no-fields.collection-type'),\n defaultMessage: 'Add your first field to this Collection-Type',\n }\n : {\n id: getTrad('table.content.no-fields.component'),\n defaultMessage: 'Add your first field to this component',\n }\n )}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n );\n }\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n onDragStart={handlerDragStart}\n onDragCancel={() => setActiveId(null)}\n modifiers={[restrictToVerticalAxis]}\n >\n <ListGrid tag=\"ul\">\n {createPortal(\n <DragOverlay zIndex={10}>\n {activeItem && (\n <AttributeRow\n isOverlay\n item={activeItem}\n firstLoopComponentUid={firstLoopComponentUid}\n isFromDynamicZone={isFromDynamicZone}\n secondLoopComponentUid={secondLoopComponentUid}\n type={type}\n addComponentToDZ={addComponentToDZ}\n />\n )}\n </DragOverlay>,\n document.body\n )}\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n {items.map((item) => {\n return (\n <SortableRow\n key={item.id}\n item={item}\n firstLoopComponentUid={firstLoopComponentUid}\n isFromDynamicZone={isFromDynamicZone}\n secondLoopComponentUid={secondLoopComponentUid}\n type={type}\n addComponentToDZ={addComponentToDZ}\n />\n );\n })}\n </SortableContext>\n </ListGrid>\n\n {isMain && isInDevelopmentMode && (\n <TFooter\n cursor={isDeleted ? 'normal' : 'pointer'}\n icon={<Plus />}\n onClick={onClickAddField}\n color={isDeleted ? 'neutral' : 'primary'}\n >\n {formatMessage({\n id: getTrad(\n `form.button.add.field.to.${type.modelType === 'component' ? 'component' : type.kind}`\n ),\n defaultMessage: 'Add another field',\n })}\n </TFooter>\n )}\n {isSub && isInDevelopmentMode && (\n <NestedTFooter\n cursor={isDeleted ? 'normal' : 'pointer'}\n icon={<Plus />}\n onClick={onClickAddField}\n color={isFromDynamicZone && !isDeleted ? 'primary' : 'neutral'}\n >\n {formatMessage({\n id: getTrad(`form.button.add.field.to.component`),\n defaultMessage: 'Add another field',\n })}\n </NestedTFooter>\n )}\n </DndContext>\n );\n};\n"],"names":["ListGrid","styled","Box","SortableRow","props","isInDevelopmentMode","useDataManager","isDragging","attributes","listeners","setNodeRef","transform","transition","setActivatorNodeRef","useSortable","disabled","item","status","type","id","data","index","style","CSS","Transform","toString","x","y","scaleX","scaleY","_jsx","AttributeRow","ref","handleRef","List","addComponentToDZ","firstLoopComponentUid","isFromDynamicZone","isMain","isSub","secondLoopComponentUid","formatMessage","useIntl","trackUsage","useTracking","moveAttribute","onOpenModalAddField","useFormModalNavigation","items","map","uid","name","activeId","setActiveId","useState","isDeleted","sensors","useSensors","useSensor","PointerSensor","handlerDragStart","active","handleDragEnd","event","over","forTarget","modelType","targetUid","from","current","to","activeItem","find","onClickAddField","length","EmptyStateLayout","action","tours","contentTypeBuilder","AddFields","Button","onClick","size","startIcon","Plus","variant","getTrad","defaultMessage","content","hasRadius","icon","EmptyDocuments","width","_jsxs","DndContext","collisionDetection","closestCenter","onDragEnd","onDragStart","onDragCancel","modifiers","restrictToVerticalAxis","tag","createPortal","DragOverlay","zIndex","isOverlay","document","body","SortableContext","strategy","verticalListSortingStrategy","TFooter","cursor","color","kind","NestedTFooter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"List.js","sources":["../../../admin/src/components/List.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n DragOverlay,\n UniqueIdentifier,\n} from '@dnd-kit/core';\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport {\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n sortableKeyboardCoordinates,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { tours, useTracking } from '@strapi/admin/strapi-admin';\nimport { Box, Button, EmptyStateLayout } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { createPortal } from 'react-dom';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../utils/getTrad';\n\nimport { AttributeRow, type AttributeRowProps } from './AttributeRow';\nimport { useDataManager } from './DataManager/useDataManager';\nimport { NestedTFooter, TFooter } from './Footers';\nimport { useFormModalNavigation } from './FormModalNavigation/useFormModalNavigation';\n\nimport type { Component, ContentType } from '../types';\nimport type { UID } from '@strapi/types';\n\nexport const ListGrid = styled(Box)`\n white-space: nowrap;\n list-style: none;\n list-style-type: none;\n`;\n\ntype ListProps = {\n addComponentToDZ?: () => void;\n firstLoopComponentUid?: UID.Component | null;\n isFromDynamicZone?: boolean;\n isMain?: boolean;\n secondLoopComponentUid?: UID.Component | null;\n isSub?: boolean;\n type: ContentType | Component;\n};\n\nconst SortableRow = (props: AttributeRowProps) => {\n const { isInDevelopmentMode } = useDataManager();\n\n const {\n isDragging,\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n setActivatorNodeRef,\n } = useSortable({\n disabled:\n !isInDevelopmentMode || props.item.status === 'REMOVED' || props.type.status === 'REMOVED',\n id: props.item.id,\n data: { index: props.item.index },\n });\n\n const style = {\n transform: CSS.Transform.toString({\n x: transform?.x ?? 0,\n y: transform?.y ?? 0,\n scaleX: 1,\n scaleY: 1,\n }),\n transition,\n };\n\n return (\n <AttributeRow\n ref={setNodeRef}\n handleRef={setActivatorNodeRef}\n isDragging={isDragging}\n attributes={attributes}\n listeners={listeners}\n style={style}\n {...props}\n />\n );\n};\n\nexport const List = ({\n addComponentToDZ,\n firstLoopComponentUid,\n isFromDynamicZone = false,\n isMain = false,\n isSub = false,\n secondLoopComponentUid,\n type,\n}: ListProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { isInDevelopmentMode, moveAttribute } = useDataManager();\n const { onOpenModalAddField } = useFormModalNavigation();\n\n const items = type?.attributes.map((item, index) => {\n return {\n id: `${type.uid}_${item.name}`,\n index,\n ...item,\n };\n });\n\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n const isDeleted = type?.status === 'REMOVED';\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n function handlerDragStart({ active }: DragStartEvent) {\n if (!active) {\n return;\n }\n\n setActiveId(active.id);\n }\n\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n\n setActiveId(null);\n\n if (over) {\n if (active.id !== over.id) {\n moveAttribute({\n forTarget: type.modelType,\n targetUid: type.uid,\n from: active.data.current!.index,\n to: over.data.current!.index,\n });\n }\n }\n }\n\n const activeItem = items.find((item) => item.id === activeId);\n\n const onClickAddField = () => {\n if (isDeleted) {\n return;\n }\n\n trackUsage('hasClickedCTBAddFieldBanner');\n\n onOpenModalAddField({ forTarget: type?.modelType, targetUid: type.uid });\n };\n\n if (type?.attributes.length === 0 && isMain) {\n return (\n <EmptyStateLayout\n action={\n <tours.contentTypeBuilder.AddFields>\n <Button onClick={onClickAddField} size=\"L\" startIcon={<Plus />} variant=\"secondary\">\n {formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n })}\n </Button>\n </tours.contentTypeBuilder.AddFields>\n }\n content={formatMessage(\n type.modelType === 'contentType'\n ? {\n id: getTrad('table.content.no-fields.collection-type'),\n defaultMessage: 'Add your first field to this Collection-Type',\n }\n : {\n id: getTrad('table.content.no-fields.component'),\n defaultMessage: 'Add your first field to this component',\n }\n )}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n );\n }\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n onDragStart={handlerDragStart}\n onDragCancel={() => setActiveId(null)}\n modifiers={[restrictToVerticalAxis]}\n >\n <ListGrid tag=\"ul\">\n {createPortal(\n <DragOverlay zIndex={10}>\n {activeItem && (\n <AttributeRow\n isOverlay\n item={activeItem}\n firstLoopComponentUid={firstLoopComponentUid}\n isFromDynamicZone={isFromDynamicZone}\n secondLoopComponentUid={secondLoopComponentUid}\n type={type}\n addComponentToDZ={addComponentToDZ}\n />\n )}\n </DragOverlay>,\n document.body\n )}\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n {items.map((item) => {\n return (\n <SortableRow\n key={item.id}\n item={item}\n firstLoopComponentUid={firstLoopComponentUid}\n isFromDynamicZone={isFromDynamicZone}\n secondLoopComponentUid={secondLoopComponentUid}\n type={type}\n addComponentToDZ={addComponentToDZ}\n />\n );\n })}\n </SortableContext>\n </ListGrid>\n\n {isMain && isInDevelopmentMode && (\n <TFooter\n cursor={isDeleted ? 'normal' : 'pointer'}\n icon={<Plus />}\n onClick={onClickAddField}\n color={isDeleted ? 'neutral' : 'primary'}\n >\n {formatMessage({\n id: getTrad(\n `form.button.add.field.to.${type.modelType === 'component' ? 'component' : type.kind}`\n ),\n defaultMessage: 'Add another field',\n })}\n </TFooter>\n )}\n {isSub && isInDevelopmentMode && (\n <NestedTFooter\n cursor={isDeleted ? 'normal' : 'pointer'}\n icon={<Plus />}\n onClick={onClickAddField}\n color={isFromDynamicZone && !isDeleted ? 'primary' : 'neutral'}\n >\n {formatMessage({\n id: getTrad(`form.button.add.field.to.component`),\n defaultMessage: 'Add another field',\n })}\n </NestedTFooter>\n )}\n </DndContext>\n );\n};\n"],"names":["ListGrid","styled","Box","SortableRow","props","isInDevelopmentMode","useDataManager","isDragging","attributes","listeners","setNodeRef","transform","transition","setActivatorNodeRef","useSortable","disabled","item","status","type","id","data","index","style","CSS","Transform","toString","x","y","scaleX","scaleY","_jsx","AttributeRow","ref","handleRef","List","addComponentToDZ","firstLoopComponentUid","isFromDynamicZone","isMain","isSub","secondLoopComponentUid","formatMessage","useIntl","trackUsage","useTracking","moveAttribute","onOpenModalAddField","useFormModalNavigation","items","map","uid","name","activeId","setActiveId","useState","isDeleted","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","coordinateGetter","sortableKeyboardCoordinates","handlerDragStart","active","handleDragEnd","event","over","forTarget","modelType","targetUid","from","current","to","activeItem","find","onClickAddField","length","EmptyStateLayout","action","tours","contentTypeBuilder","AddFields","Button","onClick","size","startIcon","Plus","variant","getTrad","defaultMessage","content","hasRadius","icon","EmptyDocuments","width","_jsxs","DndContext","collisionDetection","closestCenter","onDragEnd","onDragStart","onDragCancel","modifiers","restrictToVerticalAxis","tag","createPortal","DragOverlay","zIndex","isOverlay","document","body","SortableContext","strategy","verticalListSortingStrategy","TFooter","cursor","color","kind","NestedTFooter"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
-
import { useSensors, useSensor, PointerSensor, DndContext, closestCenter, DragOverlay } from '@dnd-kit/core';
|
|
3
|
+
import { useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, closestCenter, DragOverlay } from '@dnd-kit/core';
|
|
4
4
|
import { restrictToVerticalAxis } from '@dnd-kit/modifiers';
|
|
5
|
-
import { SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable';
|
|
5
|
+
import { sortableKeyboardCoordinates, SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable';
|
|
6
6
|
import { CSS } from '@dnd-kit/utilities';
|
|
7
7
|
import { useTracking, tours } from '@strapi/admin/strapi-admin';
|
|
8
8
|
import { Box, EmptyStateLayout, Button } from '@strapi/design-system';
|
|
@@ -64,7 +64,9 @@ const List = ({ addComponentToDZ, firstLoopComponentUid, isFromDynamicZone = fal
|
|
|
64
64
|
});
|
|
65
65
|
const [activeId, setActiveId] = useState(null);
|
|
66
66
|
const isDeleted = type?.status === 'REMOVED';
|
|
67
|
-
const sensors = useSensors(useSensor(PointerSensor)
|
|
67
|
+
const sensors = useSensors(useSensor(PointerSensor), useSensor(KeyboardSensor, {
|
|
68
|
+
coordinateGetter: sortableKeyboardCoordinates
|
|
69
|
+
}));
|
|
68
70
|
function handlerDragStart({ active }) {
|
|
69
71
|
if (!active) {
|
|
70
72
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.mjs","sources":["../../../admin/src/components/List.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport {\n DndContext,\n closestCenter,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n DragOverlay,\n UniqueIdentifier,\n} from '@dnd-kit/core';\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport { SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { tours, useTracking } from '@strapi/admin/strapi-admin';\nimport { Box, Button, EmptyStateLayout } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { createPortal } from 'react-dom';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../utils/getTrad';\n\nimport { AttributeRow, type AttributeRowProps } from './AttributeRow';\nimport { useDataManager } from './DataManager/useDataManager';\nimport { NestedTFooter, TFooter } from './Footers';\nimport { useFormModalNavigation } from './FormModalNavigation/useFormModalNavigation';\n\nimport type { Component, ContentType } from '../types';\nimport type { UID } from '@strapi/types';\n\nexport const ListGrid = styled(Box)`\n white-space: nowrap;\n list-style: none;\n list-style-type: none;\n`;\n\ntype ListProps = {\n addComponentToDZ?: () => void;\n firstLoopComponentUid?: UID.Component | null;\n isFromDynamicZone?: boolean;\n isMain?: boolean;\n secondLoopComponentUid?: UID.Component | null;\n isSub?: boolean;\n type: ContentType | Component;\n};\n\nconst SortableRow = (props: AttributeRowProps) => {\n const { isInDevelopmentMode } = useDataManager();\n\n const {\n isDragging,\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n setActivatorNodeRef,\n } = useSortable({\n disabled:\n !isInDevelopmentMode || props.item.status === 'REMOVED' || props.type.status === 'REMOVED',\n id: props.item.id,\n data: { index: props.item.index },\n });\n\n const style = {\n transform: CSS.Transform.toString({\n x: transform?.x ?? 0,\n y: transform?.y ?? 0,\n scaleX: 1,\n scaleY: 1,\n }),\n transition,\n };\n\n return (\n <AttributeRow\n ref={setNodeRef}\n handleRef={setActivatorNodeRef}\n isDragging={isDragging}\n attributes={attributes}\n listeners={listeners}\n style={style}\n {...props}\n />\n );\n};\n\nexport const List = ({\n addComponentToDZ,\n firstLoopComponentUid,\n isFromDynamicZone = false,\n isMain = false,\n isSub = false,\n secondLoopComponentUid,\n type,\n}: ListProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { isInDevelopmentMode, moveAttribute } = useDataManager();\n const { onOpenModalAddField } = useFormModalNavigation();\n\n const items = type?.attributes.map((item, index) => {\n return {\n id: `${type.uid}_${item.name}`,\n index,\n ...item,\n };\n });\n\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n const isDeleted = type?.status === 'REMOVED';\n\n const sensors = useSensors(useSensor(PointerSensor));\n\n function handlerDragStart({ active }: DragStartEvent) {\n if (!active) {\n return;\n }\n\n setActiveId(active.id);\n }\n\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n\n setActiveId(null);\n\n if (over) {\n if (active.id !== over.id) {\n moveAttribute({\n forTarget: type.modelType,\n targetUid: type.uid,\n from: active.data.current!.index,\n to: over.data.current!.index,\n });\n }\n }\n }\n\n const activeItem = items.find((item) => item.id === activeId);\n\n const onClickAddField = () => {\n if (isDeleted) {\n return;\n }\n\n trackUsage('hasClickedCTBAddFieldBanner');\n\n onOpenModalAddField({ forTarget: type?.modelType, targetUid: type.uid });\n };\n\n if (type?.attributes.length === 0 && isMain) {\n return (\n <EmptyStateLayout\n action={\n <tours.contentTypeBuilder.AddFields>\n <Button onClick={onClickAddField} size=\"L\" startIcon={<Plus />} variant=\"secondary\">\n {formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n })}\n </Button>\n </tours.contentTypeBuilder.AddFields>\n }\n content={formatMessage(\n type.modelType === 'contentType'\n ? {\n id: getTrad('table.content.no-fields.collection-type'),\n defaultMessage: 'Add your first field to this Collection-Type',\n }\n : {\n id: getTrad('table.content.no-fields.component'),\n defaultMessage: 'Add your first field to this component',\n }\n )}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n );\n }\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n onDragStart={handlerDragStart}\n onDragCancel={() => setActiveId(null)}\n modifiers={[restrictToVerticalAxis]}\n >\n <ListGrid tag=\"ul\">\n {createPortal(\n <DragOverlay zIndex={10}>\n {activeItem && (\n <AttributeRow\n isOverlay\n item={activeItem}\n firstLoopComponentUid={firstLoopComponentUid}\n isFromDynamicZone={isFromDynamicZone}\n secondLoopComponentUid={secondLoopComponentUid}\n type={type}\n addComponentToDZ={addComponentToDZ}\n />\n )}\n </DragOverlay>,\n document.body\n )}\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n {items.map((item) => {\n return (\n <SortableRow\n key={item.id}\n item={item}\n firstLoopComponentUid={firstLoopComponentUid}\n isFromDynamicZone={isFromDynamicZone}\n secondLoopComponentUid={secondLoopComponentUid}\n type={type}\n addComponentToDZ={addComponentToDZ}\n />\n );\n })}\n </SortableContext>\n </ListGrid>\n\n {isMain && isInDevelopmentMode && (\n <TFooter\n cursor={isDeleted ? 'normal' : 'pointer'}\n icon={<Plus />}\n onClick={onClickAddField}\n color={isDeleted ? 'neutral' : 'primary'}\n >\n {formatMessage({\n id: getTrad(\n `form.button.add.field.to.${type.modelType === 'component' ? 'component' : type.kind}`\n ),\n defaultMessage: 'Add another field',\n })}\n </TFooter>\n )}\n {isSub && isInDevelopmentMode && (\n <NestedTFooter\n cursor={isDeleted ? 'normal' : 'pointer'}\n icon={<Plus />}\n onClick={onClickAddField}\n color={isFromDynamicZone && !isDeleted ? 'primary' : 'neutral'}\n >\n {formatMessage({\n id: getTrad(`form.button.add.field.to.component`),\n defaultMessage: 'Add another field',\n })}\n </NestedTFooter>\n )}\n </DndContext>\n );\n};\n"],"names":["ListGrid","styled","Box","SortableRow","props","isInDevelopmentMode","useDataManager","isDragging","attributes","listeners","setNodeRef","transform","transition","setActivatorNodeRef","useSortable","disabled","item","status","type","id","data","index","style","CSS","Transform","toString","x","y","scaleX","scaleY","_jsx","AttributeRow","ref","handleRef","List","addComponentToDZ","firstLoopComponentUid","isFromDynamicZone","isMain","isSub","secondLoopComponentUid","formatMessage","useIntl","trackUsage","useTracking","moveAttribute","onOpenModalAddField","useFormModalNavigation","items","map","uid","name","activeId","setActiveId","useState","isDeleted","sensors","useSensors","useSensor","PointerSensor","handlerDragStart","active","handleDragEnd","event","over","forTarget","modelType","targetUid","from","current","to","activeItem","find","onClickAddField","length","EmptyStateLayout","action","tours","contentTypeBuilder","AddFields","Button","onClick","size","startIcon","Plus","variant","getTrad","defaultMessage","content","hasRadius","icon","EmptyDocuments","width","_jsxs","DndContext","collisionDetection","closestCenter","onDragEnd","onDragStart","onDragCancel","modifiers","restrictToVerticalAxis","tag","createPortal","DragOverlay","zIndex","isOverlay","document","body","SortableContext","strategy","verticalListSortingStrategy","TFooter","cursor","color","kind","NestedTFooter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"List.mjs","sources":["../../../admin/src/components/List.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n DragOverlay,\n UniqueIdentifier,\n} from '@dnd-kit/core';\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport {\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n sortableKeyboardCoordinates,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { tours, useTracking } from '@strapi/admin/strapi-admin';\nimport { Box, Button, EmptyStateLayout } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { createPortal } from 'react-dom';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../utils/getTrad';\n\nimport { AttributeRow, type AttributeRowProps } from './AttributeRow';\nimport { useDataManager } from './DataManager/useDataManager';\nimport { NestedTFooter, TFooter } from './Footers';\nimport { useFormModalNavigation } from './FormModalNavigation/useFormModalNavigation';\n\nimport type { Component, ContentType } from '../types';\nimport type { UID } from '@strapi/types';\n\nexport const ListGrid = styled(Box)`\n white-space: nowrap;\n list-style: none;\n list-style-type: none;\n`;\n\ntype ListProps = {\n addComponentToDZ?: () => void;\n firstLoopComponentUid?: UID.Component | null;\n isFromDynamicZone?: boolean;\n isMain?: boolean;\n secondLoopComponentUid?: UID.Component | null;\n isSub?: boolean;\n type: ContentType | Component;\n};\n\nconst SortableRow = (props: AttributeRowProps) => {\n const { isInDevelopmentMode } = useDataManager();\n\n const {\n isDragging,\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n setActivatorNodeRef,\n } = useSortable({\n disabled:\n !isInDevelopmentMode || props.item.status === 'REMOVED' || props.type.status === 'REMOVED',\n id: props.item.id,\n data: { index: props.item.index },\n });\n\n const style = {\n transform: CSS.Transform.toString({\n x: transform?.x ?? 0,\n y: transform?.y ?? 0,\n scaleX: 1,\n scaleY: 1,\n }),\n transition,\n };\n\n return (\n <AttributeRow\n ref={setNodeRef}\n handleRef={setActivatorNodeRef}\n isDragging={isDragging}\n attributes={attributes}\n listeners={listeners}\n style={style}\n {...props}\n />\n );\n};\n\nexport const List = ({\n addComponentToDZ,\n firstLoopComponentUid,\n isFromDynamicZone = false,\n isMain = false,\n isSub = false,\n secondLoopComponentUid,\n type,\n}: ListProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { isInDevelopmentMode, moveAttribute } = useDataManager();\n const { onOpenModalAddField } = useFormModalNavigation();\n\n const items = type?.attributes.map((item, index) => {\n return {\n id: `${type.uid}_${item.name}`,\n index,\n ...item,\n };\n });\n\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n const isDeleted = type?.status === 'REMOVED';\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n function handlerDragStart({ active }: DragStartEvent) {\n if (!active) {\n return;\n }\n\n setActiveId(active.id);\n }\n\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n\n setActiveId(null);\n\n if (over) {\n if (active.id !== over.id) {\n moveAttribute({\n forTarget: type.modelType,\n targetUid: type.uid,\n from: active.data.current!.index,\n to: over.data.current!.index,\n });\n }\n }\n }\n\n const activeItem = items.find((item) => item.id === activeId);\n\n const onClickAddField = () => {\n if (isDeleted) {\n return;\n }\n\n trackUsage('hasClickedCTBAddFieldBanner');\n\n onOpenModalAddField({ forTarget: type?.modelType, targetUid: type.uid });\n };\n\n if (type?.attributes.length === 0 && isMain) {\n return (\n <EmptyStateLayout\n action={\n <tours.contentTypeBuilder.AddFields>\n <Button onClick={onClickAddField} size=\"L\" startIcon={<Plus />} variant=\"secondary\">\n {formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n })}\n </Button>\n </tours.contentTypeBuilder.AddFields>\n }\n content={formatMessage(\n type.modelType === 'contentType'\n ? {\n id: getTrad('table.content.no-fields.collection-type'),\n defaultMessage: 'Add your first field to this Collection-Type',\n }\n : {\n id: getTrad('table.content.no-fields.component'),\n defaultMessage: 'Add your first field to this component',\n }\n )}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n );\n }\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n onDragStart={handlerDragStart}\n onDragCancel={() => setActiveId(null)}\n modifiers={[restrictToVerticalAxis]}\n >\n <ListGrid tag=\"ul\">\n {createPortal(\n <DragOverlay zIndex={10}>\n {activeItem && (\n <AttributeRow\n isOverlay\n item={activeItem}\n firstLoopComponentUid={firstLoopComponentUid}\n isFromDynamicZone={isFromDynamicZone}\n secondLoopComponentUid={secondLoopComponentUid}\n type={type}\n addComponentToDZ={addComponentToDZ}\n />\n )}\n </DragOverlay>,\n document.body\n )}\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n {items.map((item) => {\n return (\n <SortableRow\n key={item.id}\n item={item}\n firstLoopComponentUid={firstLoopComponentUid}\n isFromDynamicZone={isFromDynamicZone}\n secondLoopComponentUid={secondLoopComponentUid}\n type={type}\n addComponentToDZ={addComponentToDZ}\n />\n );\n })}\n </SortableContext>\n </ListGrid>\n\n {isMain && isInDevelopmentMode && (\n <TFooter\n cursor={isDeleted ? 'normal' : 'pointer'}\n icon={<Plus />}\n onClick={onClickAddField}\n color={isDeleted ? 'neutral' : 'primary'}\n >\n {formatMessage({\n id: getTrad(\n `form.button.add.field.to.${type.modelType === 'component' ? 'component' : type.kind}`\n ),\n defaultMessage: 'Add another field',\n })}\n </TFooter>\n )}\n {isSub && isInDevelopmentMode && (\n <NestedTFooter\n cursor={isDeleted ? 'normal' : 'pointer'}\n icon={<Plus />}\n onClick={onClickAddField}\n color={isFromDynamicZone && !isDeleted ? 'primary' : 'neutral'}\n >\n {formatMessage({\n id: getTrad(`form.button.add.field.to.component`),\n defaultMessage: 'Add another field',\n })}\n </NestedTFooter>\n )}\n </DndContext>\n );\n};\n"],"names":["ListGrid","styled","Box","SortableRow","props","isInDevelopmentMode","useDataManager","isDragging","attributes","listeners","setNodeRef","transform","transition","setActivatorNodeRef","useSortable","disabled","item","status","type","id","data","index","style","CSS","Transform","toString","x","y","scaleX","scaleY","_jsx","AttributeRow","ref","handleRef","List","addComponentToDZ","firstLoopComponentUid","isFromDynamicZone","isMain","isSub","secondLoopComponentUid","formatMessage","useIntl","trackUsage","useTracking","moveAttribute","onOpenModalAddField","useFormModalNavigation","items","map","uid","name","activeId","setActiveId","useState","isDeleted","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","coordinateGetter","sortableKeyboardCoordinates","handlerDragStart","active","handleDragEnd","event","over","forTarget","modelType","targetUid","from","current","to","activeItem","find","onClickAddField","length","EmptyStateLayout","action","tours","contentTypeBuilder","AddFields","Button","onClick","size","startIcon","Plus","variant","getTrad","defaultMessage","content","hasRadius","icon","EmptyDocuments","width","_jsxs","DndContext","collisionDetection","closestCenter","onDragEnd","onDragStart","onDragCancel","modifiers","restrictToVerticalAxis","tag","createPortal","DragOverlay","zIndex","isOverlay","document","body","SortableContext","strategy","verticalListSortingStrategy","TFooter","cursor","color","kind","NestedTFooter"],"mappings":"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"}
|
|
@@ -66,7 +66,8 @@ const PluralName = ({ description, error, intlLabel, modifiedData, name, onChang
|
|
|
66
66
|
}),
|
|
67
67
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
|
|
68
68
|
onChange: onChange,
|
|
69
|
-
value: value || ''
|
|
69
|
+
value: value || '',
|
|
70
|
+
type: "text"
|
|
70
71
|
}),
|
|
71
72
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
72
73
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluralName.js","sources":["../../../admin/src/components/PluralName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface PluralNameProps {\n description?: Description;\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const PluralName = ({\n description,\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value,\n}: PluralNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n const previousDisplayName = useRef(displayName);\n const previousValue = useRef(value);\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const baseValue = nameToSlug(displayName);\n let newValue = baseValue;\n\n try {\n newValue = pluralize(baseValue, 2);\n } catch (err) {\n // If pluralize fails, use the base value\n }\n\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n </Field.Root>\n );\n};\n"],"names":["PluralName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","displayName","previousDisplayName","previousValue","useEffect","current","baseValue","nameToSlug","newValue","pluralize","err","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","Error"],"mappings":";;;;;;;;;MA0BaA,UAAa,GAAA,CAAC,EACzBC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAK,EACW,GAAA;IAChB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,YAAOL,CAAAA,QAAAA,CAAAA;IAC3B,MAAMM,WAAAA,GAAcR,cAAcQ,WAAe,IAAA,EAAA;AACjD,IAAA,MAAMC,sBAAsBF,YAAOC,CAAAA,WAAAA,CAAAA;AACnC,IAAA,MAAME,gBAAgBH,YAAOJ,CAAAA,KAAAA,CAAAA;IAE7BQ,eAAU,CAAA,IAAA;AACR,QAAA,IAAIH,WAAeA,IAAAA,WAAAA,KAAgBC,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,YAAYC,qBAAWN,CAAAA,WAAAA,CAAAA;AAC7B,YAAA,IAAIO,QAAWF,GAAAA,SAAAA;YAEf,IAAI;AACFE,gBAAAA,QAAAA,GAAWC,UAAUH,SAAW,EAAA,CAAA,CAAA;AAClC,aAAA,CAAE,OAAOI,GAAK,EAAA;;AAEd;AAEAX,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAOY,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcE,OAAO,GAAGG,QAAAA;AACxBN,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGJ,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBF,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDO,YAAAA,aAAAA,CAAcE,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACJ,QAAAA,WAAAA;AAAaP,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMgB,YAAAA,GAAerB,QAAQM,aAAc,CAAA;QAAEgB,EAAItB,EAAAA,KAAAA;QAAOuB,cAAgBvB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMwB,IAAAA,GAAOzB,cACTO,aACE,CAAA;AAAEgB,QAAAA,EAAAA,EAAIvB,YAAYuB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBxB,YAAYwB;KAClD,EAAA;AAAE,QAAA,GAAGxB,YAAY0B;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQpB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACE0B,eAAA,CAACC,mBAAMC,IAAI,EAAA;QAAC7B,KAAOqB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMrB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAA2B,cAAA,CAACF,mBAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,cAACE,CAAAA,sBAAAA,EAAAA;gBAAU5B,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA;;
|
|
1
|
+
{"version":3,"file":"PluralName.js","sources":["../../../admin/src/components/PluralName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface PluralNameProps {\n description?: Description;\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const PluralName = ({\n description,\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value,\n}: PluralNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n const previousDisplayName = useRef(displayName);\n const previousValue = useRef(value);\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const baseValue = nameToSlug(displayName);\n let newValue = baseValue;\n\n try {\n newValue = pluralize(baseValue, 2);\n } catch (err) {\n // If pluralize fails, use the base value\n }\n\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} type=\"text\" />\n <Field.Error />\n </Field.Root>\n );\n};\n"],"names":["PluralName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","displayName","previousDisplayName","previousValue","useEffect","current","baseValue","nameToSlug","newValue","pluralize","err","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","type","Error"],"mappings":";;;;;;;;;MA0BaA,UAAa,GAAA,CAAC,EACzBC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAK,EACW,GAAA;IAChB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,YAAOL,CAAAA,QAAAA,CAAAA;IAC3B,MAAMM,WAAAA,GAAcR,cAAcQ,WAAe,IAAA,EAAA;AACjD,IAAA,MAAMC,sBAAsBF,YAAOC,CAAAA,WAAAA,CAAAA;AACnC,IAAA,MAAME,gBAAgBH,YAAOJ,CAAAA,KAAAA,CAAAA;IAE7BQ,eAAU,CAAA,IAAA;AACR,QAAA,IAAIH,WAAeA,IAAAA,WAAAA,KAAgBC,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,YAAYC,qBAAWN,CAAAA,WAAAA,CAAAA;AAC7B,YAAA,IAAIO,QAAWF,GAAAA,SAAAA;YAEf,IAAI;AACFE,gBAAAA,QAAAA,GAAWC,UAAUH,SAAW,EAAA,CAAA,CAAA;AAClC,aAAA,CAAE,OAAOI,GAAK,EAAA;;AAEd;AAEAX,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAOY,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcE,OAAO,GAAGG,QAAAA;AACxBN,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGJ,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBF,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDO,YAAAA,aAAAA,CAAcE,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACJ,QAAAA,WAAAA;AAAaP,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMgB,YAAAA,GAAerB,QAAQM,aAAc,CAAA;QAAEgB,EAAItB,EAAAA,KAAAA;QAAOuB,cAAgBvB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMwB,IAAAA,GAAOzB,cACTO,aACE,CAAA;AAAEgB,QAAAA,EAAAA,EAAIvB,YAAYuB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBxB,YAAYwB;KAClD,EAAA;AAAE,QAAA,GAAGxB,YAAY0B;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQpB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACE0B,eAAA,CAACC,mBAAMC,IAAI,EAAA;QAAC7B,KAAOqB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMrB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAA2B,cAAA,CAACF,mBAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,cAACE,CAAAA,sBAAAA,EAAAA;gBAAU5B,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA,EAAA;gBAAI4B,IAAK,EAAA;;AACxD,0BAAAH,cAAA,CAACF,mBAAMM,KAAK,EAAA,EAAA;;;AAGlB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluralName.mjs","sources":["../../../admin/src/components/PluralName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface PluralNameProps {\n description?: Description;\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const PluralName = ({\n description,\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value,\n}: PluralNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n const previousDisplayName = useRef(displayName);\n const previousValue = useRef(value);\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const baseValue = nameToSlug(displayName);\n let newValue = baseValue;\n\n try {\n newValue = pluralize(baseValue, 2);\n } catch (err) {\n // If pluralize fails, use the base value\n }\n\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n </Field.Root>\n );\n};\n"],"names":["PluralName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","displayName","previousDisplayName","previousValue","useEffect","current","baseValue","nameToSlug","newValue","pluralize","err","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","Error"],"mappings":";;;;;;;MA0BaA,UAAa,GAAA,CAAC,EACzBC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAK,EACW,GAAA;IAChB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,MAAOL,CAAAA,QAAAA,CAAAA;IAC3B,MAAMM,WAAAA,GAAcR,cAAcQ,WAAe,IAAA,EAAA;AACjD,IAAA,MAAMC,sBAAsBF,MAAOC,CAAAA,WAAAA,CAAAA;AACnC,IAAA,MAAME,gBAAgBH,MAAOJ,CAAAA,KAAAA,CAAAA;IAE7BQ,SAAU,CAAA,IAAA;AACR,QAAA,IAAIH,WAAeA,IAAAA,WAAAA,KAAgBC,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,YAAYC,UAAWN,CAAAA,WAAAA,CAAAA;AAC7B,YAAA,IAAIO,QAAWF,GAAAA,SAAAA;YAEf,IAAI;AACFE,gBAAAA,QAAAA,GAAWC,UAAUH,SAAW,EAAA,CAAA,CAAA;AAClC,aAAA,CAAE,OAAOI,GAAK,EAAA;;AAEd;AAEAX,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAOY,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcE,OAAO,GAAGG,QAAAA;AACxBN,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGJ,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBF,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDO,YAAAA,aAAAA,CAAcE,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACJ,QAAAA,WAAAA;AAAaP,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMgB,YAAAA,GAAerB,QAAQM,aAAc,CAAA;QAAEgB,EAAItB,EAAAA,KAAAA;QAAOuB,cAAgBvB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMwB,IAAAA,GAAOzB,cACTO,aACE,CAAA;AAAEgB,QAAAA,EAAAA,EAAIvB,YAAYuB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBxB,YAAYwB;KAClD,EAAA;AAAE,QAAA,GAAGxB,YAAY0B;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQpB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACE0B,IAAA,CAACC,MAAMC,IAAI,EAAA;QAAC7B,KAAOqB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMrB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAA2B,GAAA,CAACF,MAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,GAACE,CAAAA,SAAAA,EAAAA;gBAAU5B,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA;;
|
|
1
|
+
{"version":3,"file":"PluralName.mjs","sources":["../../../admin/src/components/PluralName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface PluralNameProps {\n description?: Description;\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const PluralName = ({\n description,\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value,\n}: PluralNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n const previousDisplayName = useRef(displayName);\n const previousValue = useRef(value);\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const baseValue = nameToSlug(displayName);\n let newValue = baseValue;\n\n try {\n newValue = pluralize(baseValue, 2);\n } catch (err) {\n // If pluralize fails, use the base value\n }\n\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} type=\"text\" />\n <Field.Error />\n </Field.Root>\n );\n};\n"],"names":["PluralName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","displayName","previousDisplayName","previousValue","useEffect","current","baseValue","nameToSlug","newValue","pluralize","err","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","type","Error"],"mappings":";;;;;;;MA0BaA,UAAa,GAAA,CAAC,EACzBC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAK,EACW,GAAA;IAChB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,MAAOL,CAAAA,QAAAA,CAAAA;IAC3B,MAAMM,WAAAA,GAAcR,cAAcQ,WAAe,IAAA,EAAA;AACjD,IAAA,MAAMC,sBAAsBF,MAAOC,CAAAA,WAAAA,CAAAA;AACnC,IAAA,MAAME,gBAAgBH,MAAOJ,CAAAA,KAAAA,CAAAA;IAE7BQ,SAAU,CAAA,IAAA;AACR,QAAA,IAAIH,WAAeA,IAAAA,WAAAA,KAAgBC,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,YAAYC,UAAWN,CAAAA,WAAAA,CAAAA;AAC7B,YAAA,IAAIO,QAAWF,GAAAA,SAAAA;YAEf,IAAI;AACFE,gBAAAA,QAAAA,GAAWC,UAAUH,SAAW,EAAA,CAAA,CAAA;AAClC,aAAA,CAAE,OAAOI,GAAK,EAAA;;AAEd;AAEAX,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAOY,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcE,OAAO,GAAGG,QAAAA;AACxBN,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGJ,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBF,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEM,MAAQ,EAAA;AAAEjB,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDO,YAAAA,aAAAA,CAAcE,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACJ,QAAAA,WAAAA;AAAaP,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMgB,YAAAA,GAAerB,QAAQM,aAAc,CAAA;QAAEgB,EAAItB,EAAAA,KAAAA;QAAOuB,cAAgBvB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMwB,IAAAA,GAAOzB,cACTO,aACE,CAAA;AAAEgB,QAAAA,EAAAA,EAAIvB,YAAYuB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBxB,YAAYwB;KAClD,EAAA;AAAE,QAAA,GAAGxB,YAAY0B;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQpB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACE0B,IAAA,CAACC,MAAMC,IAAI,EAAA;QAAC7B,KAAOqB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMrB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAA2B,GAAA,CAACF,MAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,GAACE,CAAAA,SAAAA,EAAAA;gBAAU5B,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA,EAAA;gBAAI4B,IAAK,EAAA;;AACxD,0BAAAH,GAAA,CAACF,MAAMM,KAAK,EAAA,EAAA;;;AAGlB;;;;"}
|
|
@@ -59,7 +59,8 @@ const SingularName = ({ description = null, error = null, intlLabel, modifiedDat
|
|
|
59
59
|
}),
|
|
60
60
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
|
|
61
61
|
onChange: onChange,
|
|
62
|
-
value: value || ''
|
|
62
|
+
value: value || '',
|
|
63
|
+
type: "text"
|
|
63
64
|
}),
|
|
64
65
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Error, {}),
|
|
65
66
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingularName.js","sources":["../../../admin/src/components/SingularName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface SingularNameProps {\n description?: IntlLabel | null;\n error?: string | null;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string | null;\n}\n\nexport const SingularName = ({\n description = null,\n error = null,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: SingularNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const previousValue = useRef(value);\n const previousDisplayName = useRef(modifiedData?.displayName || '');\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const newValue = nameToSlug(displayName);\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n"],"names":["SingularName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","previousValue","previousDisplayName","displayName","useEffect","current","newValue","nameToSlug","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","Error","Hint"],"mappings":";;;;;;;;AAmBO,MAAMA,eAAe,CAAC,EAC3BC,cAAc,IAAI,EAClBC,QAAQ,IAAI,EACZC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAAA,GAAQ,IAAI,EACM,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,YAAOL,CAAAA,QAAAA,CAAAA;AAC3B,IAAA,MAAMM,gBAAgBD,YAAOJ,CAAAA,KAAAA,CAAAA;IAC7B,MAAMM,mBAAAA,GAAsBF,YAAOP,CAAAA,YAAAA,EAAcU,WAAe,IAAA,EAAA,CAAA;IAChE,MAAMA,WAAAA,GAAcV,cAAcU,WAAe,IAAA,EAAA;IAEjDC,eAAU,CAAA,IAAA;AACR,QAAA,IAAID,WAAeA,IAAAA,WAAAA,KAAgBD,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,WAAWC,qBAAWJ,CAAAA,WAAAA,CAAAA;AAC5BJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAOU,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcI,OAAO,GAAGC,QAAAA;AACxBJ,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGF,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDK,YAAAA,aAAAA,CAAcI,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACF,QAAAA,WAAAA;AAAaT,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMa,YAAAA,GAAelB,QAAQM,aAAc,CAAA;QAAEa,EAAInB,EAAAA,KAAAA;QAAOoB,cAAgBpB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMqB,IAAAA,GAAOtB,cACTO,aACE,CAAA;AAAEa,QAAAA,EAAAA,EAAIpB,YAAYoB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBrB,YAAYqB;KAClD,EAAA;AAAE,QAAA,GAAGrB,YAAYuB;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQjB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACEuB,eAAA,CAACC,mBAAMC,IAAI,EAAA;QAAC1B,KAAOkB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMlB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAAwB,cAAA,CAACF,mBAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,cAACE,CAAAA,sBAAAA,EAAAA;gBAAUzB,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA;;
|
|
1
|
+
{"version":3,"file":"SingularName.js","sources":["../../../admin/src/components/SingularName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface SingularNameProps {\n description?: IntlLabel | null;\n error?: string | null;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string | null;\n}\n\nexport const SingularName = ({\n description = null,\n error = null,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: SingularNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const previousValue = useRef(value);\n const previousDisplayName = useRef(modifiedData?.displayName || '');\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const newValue = nameToSlug(displayName);\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} type=\"text\" />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n"],"names":["SingularName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","previousValue","previousDisplayName","displayName","useEffect","current","newValue","nameToSlug","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","type","Error","Hint"],"mappings":";;;;;;;;AAmBO,MAAMA,eAAe,CAAC,EAC3BC,cAAc,IAAI,EAClBC,QAAQ,IAAI,EACZC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAAA,GAAQ,IAAI,EACM,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,YAAOL,CAAAA,QAAAA,CAAAA;AAC3B,IAAA,MAAMM,gBAAgBD,YAAOJ,CAAAA,KAAAA,CAAAA;IAC7B,MAAMM,mBAAAA,GAAsBF,YAAOP,CAAAA,YAAAA,EAAcU,WAAe,IAAA,EAAA,CAAA;IAChE,MAAMA,WAAAA,GAAcV,cAAcU,WAAe,IAAA,EAAA;IAEjDC,eAAU,CAAA,IAAA;AACR,QAAA,IAAID,WAAeA,IAAAA,WAAAA,KAAgBD,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,WAAWC,qBAAWJ,CAAAA,WAAAA,CAAAA;AAC5BJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAOU,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcI,OAAO,GAAGC,QAAAA;AACxBJ,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGF,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDK,YAAAA,aAAAA,CAAcI,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACF,QAAAA,WAAAA;AAAaT,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMa,YAAAA,GAAelB,QAAQM,aAAc,CAAA;QAAEa,EAAInB,EAAAA,KAAAA;QAAOoB,cAAgBpB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMqB,IAAAA,GAAOtB,cACTO,aACE,CAAA;AAAEa,QAAAA,EAAAA,EAAIpB,YAAYoB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBrB,YAAYqB;KAClD,EAAA;AAAE,QAAA,GAAGrB,YAAYuB;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQjB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACEuB,eAAA,CAACC,mBAAMC,IAAI,EAAA;QAAC1B,KAAOkB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMlB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAAwB,cAAA,CAACF,mBAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,cAACE,CAAAA,sBAAAA,EAAAA;gBAAUzB,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA,EAAA;gBAAIyB,IAAK,EAAA;;AACxD,0BAAAH,cAAA,CAACF,mBAAMM,KAAK,EAAA,EAAA,CAAA;AACZ,0BAAAJ,cAAA,CAACF,mBAAMO,IAAI,EAAA,EAAA;;;AAGjB;;;;"}
|
|
@@ -57,7 +57,8 @@ const SingularName = ({ description = null, error = null, intlLabel, modifiedDat
|
|
|
57
57
|
}),
|
|
58
58
|
/*#__PURE__*/ jsx(TextInput, {
|
|
59
59
|
onChange: onChange,
|
|
60
|
-
value: value || ''
|
|
60
|
+
value: value || '',
|
|
61
|
+
type: "text"
|
|
61
62
|
}),
|
|
62
63
|
/*#__PURE__*/ jsx(Field.Error, {}),
|
|
63
64
|
/*#__PURE__*/ jsx(Field.Hint, {})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingularName.mjs","sources":["../../../admin/src/components/SingularName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface SingularNameProps {\n description?: IntlLabel | null;\n error?: string | null;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string | null;\n}\n\nexport const SingularName = ({\n description = null,\n error = null,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: SingularNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const previousValue = useRef(value);\n const previousDisplayName = useRef(modifiedData?.displayName || '');\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const newValue = nameToSlug(displayName);\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n"],"names":["SingularName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","previousValue","previousDisplayName","displayName","useEffect","current","newValue","nameToSlug","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","Error","Hint"],"mappings":";;;;;;AAmBO,MAAMA,eAAe,CAAC,EAC3BC,cAAc,IAAI,EAClBC,QAAQ,IAAI,EACZC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAAA,GAAQ,IAAI,EACM,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,MAAOL,CAAAA,QAAAA,CAAAA;AAC3B,IAAA,MAAMM,gBAAgBD,MAAOJ,CAAAA,KAAAA,CAAAA;IAC7B,MAAMM,mBAAAA,GAAsBF,MAAOP,CAAAA,YAAAA,EAAcU,WAAe,IAAA,EAAA,CAAA;IAChE,MAAMA,WAAAA,GAAcV,cAAcU,WAAe,IAAA,EAAA;IAEjDC,SAAU,CAAA,IAAA;AACR,QAAA,IAAID,WAAeA,IAAAA,WAAAA,KAAgBD,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,WAAWC,UAAWJ,CAAAA,WAAAA,CAAAA;AAC5BJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAOU,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcI,OAAO,GAAGC,QAAAA;AACxBJ,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGF,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDK,YAAAA,aAAAA,CAAcI,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACF,QAAAA,WAAAA;AAAaT,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMa,YAAAA,GAAelB,QAAQM,aAAc,CAAA;QAAEa,EAAInB,EAAAA,KAAAA;QAAOoB,cAAgBpB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMqB,IAAAA,GAAOtB,cACTO,aACE,CAAA;AAAEa,QAAAA,EAAAA,EAAIpB,YAAYoB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBrB,YAAYqB;KAClD,EAAA;AAAE,QAAA,GAAGrB,YAAYuB;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQjB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACEuB,IAAA,CAACC,MAAMC,IAAI,EAAA;QAAC1B,KAAOkB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMlB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAAwB,GAAA,CAACF,MAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,GAACE,CAAAA,SAAAA,EAAAA;gBAAUzB,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA;;
|
|
1
|
+
{"version":3,"file":"SingularName.mjs","sources":["../../../admin/src/components/SingularName.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface SingularNameProps {\n description?: IntlLabel | null;\n error?: string | null;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string | null;\n}\n\nexport const SingularName = ({\n description = null,\n error = null,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: SingularNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const previousValue = useRef(value);\n const previousDisplayName = useRef(modifiedData?.displayName || '');\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName && displayName !== previousDisplayName.current) {\n const newValue = nameToSlug(displayName);\n onChangeRef.current({ target: { name, value: newValue } });\n previousValue.current = newValue;\n previousDisplayName.current = displayName;\n } else if (!displayName) {\n onChangeRef.current({ target: { name, value: '' } });\n previousValue.current = '';\n previousDisplayName.current = '';\n }\n }, [displayName, name, value]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} type=\"text\" />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n"],"names":["SingularName","description","error","intlLabel","modifiedData","name","onChange","value","formatMessage","useIntl","onChangeRef","useRef","previousValue","previousDisplayName","displayName","useEffect","current","newValue","nameToSlug","target","errorMessage","id","defaultMessage","hint","values","label","_jsxs","Field","Root","_jsx","Label","TextInput","type","Error","Hint"],"mappings":";;;;;;AAmBO,MAAMA,eAAe,CAAC,EAC3BC,cAAc,IAAI,EAClBC,QAAQ,IAAI,EACZC,SAAS,EACTC,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,KAAAA,GAAQ,IAAI,EACM,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,MAAOL,CAAAA,QAAAA,CAAAA;AAC3B,IAAA,MAAMM,gBAAgBD,MAAOJ,CAAAA,KAAAA,CAAAA;IAC7B,MAAMM,mBAAAA,GAAsBF,MAAOP,CAAAA,YAAAA,EAAcU,WAAe,IAAA,EAAA,CAAA;IAChE,MAAMA,WAAAA,GAAcV,cAAcU,WAAe,IAAA,EAAA;IAEjDC,SAAU,CAAA,IAAA;AACR,QAAA,IAAID,WAAeA,IAAAA,WAAAA,KAAgBD,mBAAoBG,CAAAA,OAAO,EAAE;AAC9D,YAAA,MAAMC,WAAWC,UAAWJ,CAAAA,WAAAA,CAAAA;AAC5BJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAOU,EAAAA;AAAS;AAAE,aAAA,CAAA;AACxDL,YAAAA,aAAAA,CAAcI,OAAO,GAAGC,QAAAA;AACxBJ,YAAAA,mBAAAA,CAAoBG,OAAO,GAAGF,WAAAA;SACzB,MAAA,IAAI,CAACA,WAAa,EAAA;AACvBJ,YAAAA,WAAAA,CAAYM,OAAO,CAAC;gBAAEG,MAAQ,EAAA;AAAEd,oBAAAA,IAAAA;oBAAME,KAAO,EAAA;AAAG;AAAE,aAAA,CAAA;AAClDK,YAAAA,aAAAA,CAAcI,OAAO,GAAG,EAAA;AACxBH,YAAAA,mBAAAA,CAAoBG,OAAO,GAAG,EAAA;AAChC;KACC,EAAA;AAACF,QAAAA,WAAAA;AAAaT,QAAAA,IAAAA;AAAME,QAAAA;AAAM,KAAA,CAAA;IAE7B,MAAMa,YAAAA,GAAelB,QAAQM,aAAc,CAAA;QAAEa,EAAInB,EAAAA,KAAAA;QAAOoB,cAAgBpB,EAAAA;KAAW,CAAA,GAAA,EAAA;IACnF,MAAMqB,IAAAA,GAAOtB,cACTO,aACE,CAAA;AAAEa,QAAAA,EAAAA,EAAIpB,YAAYoB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBrB,YAAYqB;KAClD,EAAA;AAAE,QAAA,GAAGrB,YAAYuB;KAEnB,CAAA,GAAA,EAAA;AACJ,IAAA,MAAMC,QAAQjB,aAAcL,CAAAA,SAAAA,CAAAA;IAE5B,qBACEuB,IAAA,CAACC,MAAMC,IAAI,EAAA;QAAC1B,KAAOkB,EAAAA,YAAAA;QAAcG,IAAMA,EAAAA,IAAAA;QAAMlB,IAAMA,EAAAA,IAAAA;;AACjD,0BAAAwB,GAAA,CAACF,MAAMG,KAAK,EAAA;AAAEL,gBAAAA,QAAAA,EAAAA;;0BACdI,GAACE,CAAAA,SAAAA,EAAAA;gBAAUzB,QAAUA,EAAAA,QAAAA;AAAUC,gBAAAA,KAAAA,EAAOA,KAAS,IAAA,EAAA;gBAAIyB,IAAK,EAAA;;AACxD,0BAAAH,GAAA,CAACF,MAAMM,KAAK,EAAA,EAAA,CAAA;AACZ,0BAAAJ,GAAA,CAACF,MAAMO,IAAI,EAAA,EAAA;;;AAGjB;;;;"}
|