import { AttributeIcon, COMPONENT_ICONS, getTrad, useDataManager, useFormModalNavigation } from "./chunk-6EDW4YHC.js"; import "./chunk-SQLDXQZE.js"; import "./chunk-QF6GPHA4.js"; import "./chunk-JRLAXHTE.js"; import "./chunk-E4IFZ6ZT.js"; import "./chunk-QLEKUQKW.js"; import "./chunk-4J3VOWQV.js"; import "./chunk-PFI4R5WA.js"; import "./chunk-B3BGMYGX.js"; import "./chunk-W6ICJ5TB.js"; import "./chunk-IHYIPMY2.js"; import "./chunk-UWHSN2C7.js"; import "./chunk-ERK7O2GM.js"; import "./chunk-FCIM6RNO.js"; import "./chunk-J33IXKN4.js"; import "./chunk-NP53ZCXD.js"; import "./chunk-MBK4V2X7.js"; import "./chunk-5ESYXDTN.js"; import "./chunk-K65KIEAL.js"; import "./chunk-B7ZLODDO.js"; import "./chunk-PW7XKCYO.js"; import "./chunk-RMBEU7DO.js"; import "./chunk-RI2W2UZ6.js"; import { BackButton } from "./chunk-IY256CNP.js"; import "./chunk-IFOFBKTA.js"; import { require_has, require_upperFirst } from "./chunk-XLSIZGJF.js"; import "./chunk-EGNP2T5O.js"; import { useTracking } from "./chunk-GSN7U3BK.js"; import "./chunk-T3B5F2LV.js"; import "./chunk-YXDCVYVT.js"; import "./chunk-QIJGNK42.js"; import "./chunk-7PUJSL55.js"; import "./chunk-C2ZJTFO7.js"; import "./chunk-C75BZXCZ.js"; import "./chunk-APGTER6B.js"; import "./chunk-ZM6TT53G.js"; import "./chunk-6AXVGFVQ.js"; import "./chunk-BFLP6DBI.js"; import { useRBAC } from "./chunk-CMLQV3Z2.js"; import "./chunk-IGCTEXRF.js"; import { Layouts } from "./chunk-TIVRAWTC.js"; import "./chunk-PQINNV4N.js"; import { require_isEqual } from "./chunk-VYSYYPOB.js"; import { ForwardRef$J } from "./chunk-5CAWUBTQ.js"; import "./chunk-W2TBR6J3.js"; import "./chunk-QEGMJR7H.js"; import { require_get } from "./chunk-LCL5TIBZ.js"; import "./chunk-WOQNBAGN.js"; import "./chunk-BHLYCXQ7.js"; import "./chunk-76QM3EFM.js"; import "./chunk-CE4VABH2.js"; import "./chunk-5VODLFKF.js"; import "./chunk-N55RVBRV.js"; import { Box, Button, EmptyStateLayout, Flex, IconButton, TFooter, Table, Tbody, Td, Th, Thead, Tr, Typography, useIntl } from "./chunk-7XB6XSWQ.js"; import "./chunk-5ZC4PE57.js"; import { useMatch, useNavigate, usePrompt } from "./chunk-TUXTO2Z5.js"; import "./chunk-FOD4ENRR.js"; import { ForwardRef$1h, ForwardRef$1v, ForwardRef$2h, ForwardRef$2n, ForwardRef$45, ForwardRef$4F, ForwardRef$j } from "./chunk-WRD5KPDH.js"; import { require_jsx_runtime } from "./chunk-NIAJZ5MX.js"; import { dt } from "./chunk-ACIMPXWY.js"; import { require_react } from "./chunk-MADUDGYZ.js"; import { __toESM } from "./chunk-PLDDJCW6.js"; // node_modules/@strapi/content-type-builder/dist/admin/pages/ListView/ListView.mjs var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); var import_get4 = __toESM(require_get(), 1); var import_has = __toESM(require_has(), 1); var import_isEqual = __toESM(require_isEqual(), 1); var import_upperFirst2 = __toESM(require_upperFirst(), 1); // node_modules/@strapi/content-type-builder/dist/admin/components/List.mjs var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); var import_react2 = __toESM(require_react(), 1); // node_modules/@strapi/content-type-builder/dist/admin/components/BoxWrapper.mjs var BoxWrapper = dt(Box)` table { width: 100%; white-space: nowrap; } thead { border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150}; tr { border-top: 0; } } tr { border-top: 1px solid ${({ theme }) => theme.colors.neutral150}; & td, & th { padding: ${({ theme }) => theme.spaces[4]}; } & td:first-of-type, & th:first-of-type { padding: 0 ${({ theme }) => theme.spaces[1]}; } } th, td { vertical-align: middle; text-align: left; color: ${({ theme }) => theme.colors.neutral600}; outline-offset: -4px; } `; // node_modules/@strapi/content-type-builder/dist/admin/components/ComponentList.mjs var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); var import_get = __toESM(require_get(), 1); // node_modules/@strapi/content-type-builder/dist/admin/components/Tr.mjs var Tr2 = dt.tr` &.component-row, &.dynamiczone-row { position: relative; border-top: none !important; table tr:first-child { border-top: none; } > td:first-of-type { padding: 0 0 0 2rem; position: relative; &::before { content: ''; width: 0.4rem; height: calc(100% - 40px); position: absolute; top: -7px; left: 2.6rem; border-radius: 4px; ${({ $isFromDynamicZone, $isChildOfDynamicZone, theme }) => { if ($isChildOfDynamicZone) { return `background-color: ${theme.colors.primary200};`; } if ($isFromDynamicZone) { return `background-color: ${theme.colors.primary200};`; } return `background: ${theme.colors.neutral150};`; }} } } } &.dynamiczone-row > td:first-of-type { padding: 0; } `; // node_modules/@strapi/content-type-builder/dist/admin/components/ComponentList.mjs var ComponentList = ({ customRowComponent, component, isFromDynamicZone = false, isNestedInDZComponent = false, firstLoopComponentUid }) => { const { modifiedData } = useDataManager(); const { schema: { attributes } } = (0, import_get.default)(modifiedData, [ "components", component ], { schema: { attributes: [] } }); return (0, import_jsx_runtime.jsx)(Tr2, { $isChildOfDynamicZone: isFromDynamicZone, className: "component-row", children: (0, import_jsx_runtime.jsx)("td", { colSpan: 12, children: (0, import_jsx_runtime.jsx)(List, { customRowComponent, items: attributes, targetUid: component, firstLoopComponentUid: firstLoopComponentUid || component, editTarget: "components", isFromDynamicZone, isNestedInDZComponent, isSub: true, secondLoopComponentUid: firstLoopComponentUid ? component : null }) }) }); }; // node_modules/@strapi/content-type-builder/dist/admin/components/DynamicZoneList.mjs var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); var import_react = __toESM(require_react(), 1); // node_modules/@strapi/content-type-builder/dist/admin/components/ComponentCard/ComponentCard.mjs var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); var import_get2 = __toESM(require_get(), 1); // node_modules/@strapi/content-type-builder/dist/admin/components/ComponentCard/ComponentIcon/ComponentIcon.mjs var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); var ComponentIcon = ({ isActive = false, icon = "dashboard" }) => { const Icon = COMPONENT_ICONS[icon] || COMPONENT_ICONS.dashboard; return (0, import_jsx_runtime2.jsx)(Flex, { alignItems: "center", background: isActive ? "primary200" : "neutral200", justifyContent: "center", height: 8, width: 8, borderRadius: "50%", children: (0, import_jsx_runtime2.jsx)(Icon, { height: "2rem", width: "2rem" }) }); }; // node_modules/@strapi/content-type-builder/dist/admin/components/ComponentCard/ComponentCard.mjs var CloseButton = dt(Box)` position: absolute; display: none; top: 5px; right: 0.8rem; svg { width: 1rem; height: 1rem; path { fill: ${({ theme }) => theme.colors.primary600}; } } `; var ComponentBox = dt(Flex)` width: 14rem; height: 8rem; position: relative; border: 1px solid ${({ theme }) => theme.colors.neutral200}; background: ${({ theme }) => theme.colors.neutral100}; border-radius: ${({ theme }) => theme.borderRadius}; max-width: 100%; &.active, &:focus, &:hover { border: 1px solid ${({ theme }) => theme.colors.primary200}; background: ${({ theme }) => theme.colors.primary100}; color: ${({ theme }) => theme.colors.primary600}; ${CloseButton} { display: block; } /* > ComponentIcon */ > div:first-child { background: ${({ theme }) => theme.colors.primary200}; color: ${({ theme }) => theme.colors.primary600}; svg { path { fill: ${({ theme }) => theme.colors.primary600}; } } } } `; var ComponentCard = ({ component, dzName, index, isActive = false, isInDevelopmentMode = false, onClick }) => { const { modifiedData, removeComponentFromDynamicZone } = useDataManager(); const { schema: { icon, displayName } } = (0, import_get2.default)(modifiedData, [ "components", component ], { schema: {} }); const onClose = (e) => { e.stopPropagation(); removeComponentFromDynamicZone(dzName, index); }; return (0, import_jsx_runtime3.jsxs)(ComponentBox, { alignItems: "center", direction: "column", className: isActive ? "active" : "", borderRadius: "borderRadius", justifyContent: "center", paddingLeft: 4, paddingRight: 4, shrink: 0, onClick, role: "tab", tabIndex: isActive ? 0 : -1, cursor: "pointer", "aria-selected": isActive, "aria-controls": `dz-${dzName}-panel-${index}`, id: `dz-${dzName}-tab-${index}`, children: [ (0, import_jsx_runtime3.jsx)(ComponentIcon, { icon, isActive }), (0, import_jsx_runtime3.jsx)(Box, { marginTop: 1, maxWidth: "100%", children: (0, import_jsx_runtime3.jsx)(Typography, { variant: "pi", fontWeight: "bold", ellipsis: true, children: displayName }) }), isInDevelopmentMode && (0, import_jsx_runtime3.jsx)(CloseButton, { tag: "button", onClick: onClose, children: (0, import_jsx_runtime3.jsx)(ForwardRef$45, {}) }) ] }); }; // node_modules/@strapi/content-type-builder/dist/admin/components/DynamicZoneList.mjs var StyledAddIcon = dt(ForwardRef$1h)` width: 3.2rem; height: 3.2rem; padding: 0.9rem; border-radius: 6.4rem; background: ${({ theme }) => theme.colors.primary100}; path { fill: ${({ theme }) => theme.colors.primary600}; } `; var FixedBox = dt(Box)` height: 9rem; position: absolute; width: 100%; top: 0; left: 0; `; var ScrollableStack = dt(Flex)` width: 100%; overflow-x: auto; `; var ComponentContentBox = dt(Box)` padding-top: 9rem; `; var ComponentStack = dt(Flex)` flex-shrink: 0; width: 14rem; height: 8rem; justify-content: center; align-items: center; `; var DynamicZoneList = ({ customRowComponent, components = [], addComponent, name, targetUid }) => { const { isInDevelopmentMode } = useDataManager(); const [activeTab, setActiveTab] = (0, import_react.useState)(0); const { formatMessage } = useIntl(); const toggle = (tab) => { if (activeTab !== tab) { setActiveTab(tab); } }; const handleClickAdd = () => { addComponent(name); }; return (0, import_jsx_runtime4.jsx)(Tr2, { className: "dynamiczone-row", $isFromDynamicZone: true, children: (0, import_jsx_runtime4.jsxs)("td", { colSpan: 12, children: [ (0, import_jsx_runtime4.jsx)(FixedBox, { paddingLeft: 8, children: (0, import_jsx_runtime4.jsxs)(ScrollableStack, { gap: 2, children: [ isInDevelopmentMode && (0, import_jsx_runtime4.jsx)("button", { type: "button", onClick: handleClickAdd, children: (0, import_jsx_runtime4.jsxs)(ComponentStack, { direction: "column", alignItems: "stretch", gap: 1, children: [ (0, import_jsx_runtime4.jsx)(StyledAddIcon, {}), (0, import_jsx_runtime4.jsx)(Typography, { variant: "pi", fontWeight: "bold", textColor: "primary600", children: formatMessage({ id: getTrad("button.component.add"), defaultMessage: "Add a component" }) }) ] }) }), (0, import_jsx_runtime4.jsx)(Flex, { role: "tablist", gap: 2, children: components.map((component, index) => { return (0, import_jsx_runtime4.jsx)(ComponentCard, { dzName: name || "", index, component, isActive: activeTab === index, isInDevelopmentMode, onClick: () => toggle(index) }, component); }) }) ] }) }), (0, import_jsx_runtime4.jsx)(ComponentContentBox, { children: components.map((component, index) => { const props = { customRowComponent, component }; return (0, import_jsx_runtime4.jsx)(Box, { id: `dz-${name}-panel-${index}`, role: "tabpanel", "aria-labelledby": `dz-${name}-tab-${index}`, style: { display: activeTab === index ? "block" : "none" }, children: (0, import_jsx_runtime4.jsx)("table", { children: (0, import_jsx_runtime4.jsx)("tbody", { children: (0, import_react.createElement)(ComponentList, { ...props, isFromDynamicZone: true, component: targetUid, key: component }) }) }) }, component); }) }) ] }) }); }; // node_modules/@strapi/content-type-builder/dist/admin/components/NestedFooter.mjs var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); var IconBox = dt(Box)` height: 2.4rem; width: 2.4rem; border-radius: 50%; display: flex; justify-content: center; align-items: center; svg { height: 1rem; width: 1rem; } svg path { fill: ${({ theme, color }) => theme.colors[`${color}600`]}; } `; var ButtonBox = dt(Box)` border-radius: 0 0 ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius}; display: block; width: 100%; border: none; position: relative; left: -0.4rem; `; var NestedTFooter = ({ children, icon, color, ...props }) => { return (0, import_jsx_runtime5.jsx)(ButtonBox, { paddingBottom: 4, paddingTop: 4, tag: "button", type: "button", ...props, children: (0, import_jsx_runtime5.jsxs)(Flex, { children: [ (0, import_jsx_runtime5.jsx)(IconBox, { color, "aria-hidden": true, background: `${color}200`, children: icon }), (0, import_jsx_runtime5.jsx)(Box, { paddingLeft: 3, children: (0, import_jsx_runtime5.jsx)(Typography, { variant: "pi", fontWeight: "bold", textColor: `${color}600`, children }) }) ] }) }); }; // node_modules/@strapi/content-type-builder/dist/admin/components/List.mjs var List = ({ addComponentToDZ, customRowComponent, editTarget, firstLoopComponentUid, isFromDynamicZone = false, isMain = false, isNestedInDZComponent = false, isSub = false, items = [], secondLoopComponentUid, targetUid }) => { const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); const { isInDevelopmentMode, modifiedData, isInContentTypeView } = useDataManager(); const { onOpenModalAddField } = useFormModalNavigation(); const onClickAddField = () => { trackUsage("hasClickedCTBAddFieldBanner"); onOpenModalAddField({ forTarget: editTarget, targetUid }); }; if (!targetUid) { return (0, import_jsx_runtime6.jsxs)(Table, { colCount: 2, rowCount: 2, children: [ (0, import_jsx_runtime6.jsx)(Thead, { children: (0, import_jsx_runtime6.jsxs)(Tr, { children: [ (0, import_jsx_runtime6.jsx)(Th, { children: (0, import_jsx_runtime6.jsx)(Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({ id: "global.name", defaultMessage: "Name" }) }) }), (0, import_jsx_runtime6.jsx)(Th, { children: (0, import_jsx_runtime6.jsx)(Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({ id: "global.type", defaultMessage: "Type" }) }) }) ] }) }), (0, import_jsx_runtime6.jsx)(Tbody, { children: (0, import_jsx_runtime6.jsx)(Tr, { children: (0, import_jsx_runtime6.jsx)(Td, { colSpan: 2, children: (0, import_jsx_runtime6.jsx)(EmptyStateLayout, { content: formatMessage({ id: getTrad("table.content.create-first-content-type"), defaultMessage: "Create your first Collection-Type" }), hasRadius: true, icon: (0, import_jsx_runtime6.jsx)(ForwardRef$J, { width: "16rem" }) }) }) }) }) ] }); } if (items.length === 0 && isMain) { return (0, import_jsx_runtime6.jsxs)(Table, { colCount: 2, rowCount: 2, children: [ (0, import_jsx_runtime6.jsx)(Thead, { children: (0, import_jsx_runtime6.jsxs)(Tr, { children: [ (0, import_jsx_runtime6.jsx)(Th, { children: (0, import_jsx_runtime6.jsx)(Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({ id: "global.name", defaultMessage: "Name" }) }) }), (0, import_jsx_runtime6.jsx)(Th, { children: (0, import_jsx_runtime6.jsx)(Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({ id: "global.type", defaultMessage: "Type" }) }) }) ] }) }), (0, import_jsx_runtime6.jsx)(Tbody, { children: (0, import_jsx_runtime6.jsx)(Tr, { children: (0, import_jsx_runtime6.jsx)(Td, { colSpan: 2, children: (0, import_jsx_runtime6.jsx)(EmptyStateLayout, { action: (0, import_jsx_runtime6.jsx)(Button, { onClick: onClickAddField, size: "L", startIcon: (0, import_jsx_runtime6.jsx)(ForwardRef$1h, {}), variant: "secondary", children: formatMessage({ id: getTrad("table.button.no-fields"), defaultMessage: "Add new field" }) }), content: formatMessage(isInContentTypeView ? { id: getTrad("table.content.no-fields.collection-type"), defaultMessage: "Add your first field to this Collection-Type" } : { id: getTrad("table.content.no-fields.component"), defaultMessage: "Add your first field to this component" }), hasRadius: true, icon: (0, import_jsx_runtime6.jsx)(ForwardRef$J, { width: "16rem" }) }) }) }) }) ] }); } return (0, import_jsx_runtime6.jsxs)(BoxWrapper, { children: [ (0, import_jsx_runtime6.jsx)(Box, { paddingLeft: 6, paddingRight: isMain ? 6 : 0, ...isMain && { style: { overflowX: "auto" } }, children: (0, import_jsx_runtime6.jsxs)("table", { children: [ isMain && (0, import_jsx_runtime6.jsx)("thead", { children: (0, import_jsx_runtime6.jsxs)("tr", { children: [ (0, import_jsx_runtime6.jsx)("th", { children: (0, import_jsx_runtime6.jsx)(Typography, { variant: "sigma", textColor: "neutral800", children: formatMessage({ id: "global.name", defaultMessage: "Name" }) }) }), (0, import_jsx_runtime6.jsx)("th", { colSpan: 2, children: (0, import_jsx_runtime6.jsx)(Typography, { variant: "sigma", textColor: "neutral800", children: formatMessage({ id: "global.type", defaultMessage: "Type" }) }) }) ] }) }), (0, import_jsx_runtime6.jsx)("tbody", { children: items.map((item) => { const { type } = item; const CustomRow = customRowComponent; return (0, import_jsx_runtime6.jsxs)(import_react2.Fragment, { children: [ (0, import_jsx_runtime6.jsx)(CustomRow, { ...item, isNestedInDZComponent, targetUid, editTarget, firstLoopComponentUid, isFromDynamicZone, secondLoopComponentUid }), type === "component" && (0, import_jsx_runtime6.jsx)(ComponentList, { ...item, customRowComponent, targetUid, isNestedInDZComponent: isFromDynamicZone, editTarget, firstLoopComponentUid }), type === "dynamiczone" && (0, import_jsx_runtime6.jsx)(DynamicZoneList, { ...item, customRowComponent, addComponent: addComponentToDZ, targetUid }) ] }, item.name); }) }) ] }) }), isMain && isInDevelopmentMode && (0, import_jsx_runtime6.jsx)(TFooter, { cursor: "pointer", icon: (0, import_jsx_runtime6.jsx)(ForwardRef$1h, {}), onClick: onClickAddField, children: formatMessage({ id: getTrad(`form.button.add.field.to.${modifiedData.contentType ? modifiedData.contentType.schema.kind : editTarget || "collectionType"}`), defaultMessage: "Add another field" }) }), isSub && isInDevelopmentMode && !isFromDynamicZone && (0, import_jsx_runtime6.jsx)(NestedTFooter, { icon: (0, import_jsx_runtime6.jsx)(ForwardRef$1h, {}), onClick: onClickAddField, color: isFromDynamicZone ? "primary" : "neutral", children: formatMessage({ id: getTrad(`form.button.add.field.to.component`), defaultMessage: "Add another field" }) }) ] }); }; // node_modules/@strapi/content-type-builder/dist/admin/components/ListRow.mjs var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); var import_react3 = __toESM(require_react(), 1); var import_get3 = __toESM(require_get(), 1); // node_modules/@strapi/content-type-builder/dist/admin/icons/Curve.mjs var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); var StyledBox = dt(Box)` position: absolute; left: -1.8rem; top: 0px; &:before { content: ''; width: 0.4rem; height: 1.2rem; background: ${({ theme, color }) => theme.colors[color]}; display: block; } `; var Svg = dt.svg` position: relative; flex-shrink: 0; transform: translate(-0.5px, -1px); * { fill: ${({ theme, color }) => theme.colors[color]}; } `; var Curve = (props) => (0, import_jsx_runtime7.jsx)(StyledBox, { children: (0, import_jsx_runtime7.jsx)(Svg, { width: "20", height: "23", viewBox: "0 0 20 23", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: (0, import_jsx_runtime7.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M7.02477 14.7513C8.65865 17.0594 11.6046 18.6059 17.5596 18.8856C18.6836 18.9384 19.5976 19.8435 19.5976 20.9688V20.9688C19.5976 22.0941 18.6841 23.0125 17.5599 22.9643C10.9409 22.6805 6.454 20.9387 3.75496 17.1258C0.937988 13.1464 0.486328 7.39309 0.486328 0.593262H4.50974C4.50974 7.54693 5.06394 11.9813 7.02477 14.7513Z" }) }) }); // node_modules/@strapi/content-type-builder/dist/admin/components/DisplayedType.mjs var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); var DisplayedType = ({ type, customField = null, repeatable = false }) => { const { formatMessage } = useIntl(); let readableType = type; if ([ "integer", "biginteger", "float", "decimal" ].includes(type)) { readableType = "number"; } else if ([ "string" ].includes(type)) { readableType = "text"; } if (customField) { return (0, import_jsx_runtime8.jsx)(Typography, { children: formatMessage({ id: getTrad("attribute.customField"), defaultMessage: "Custom field" }) }); } return (0, import_jsx_runtime8.jsxs)(Typography, { textColor: "neutral800", children: [ formatMessage({ id: getTrad(`attribute.${readableType}`), defaultMessage: type }), " ", repeatable && formatMessage({ id: getTrad("component.repeatable"), defaultMessage: "(repeatable)" }) ] }); }; // node_modules/@strapi/content-type-builder/dist/admin/components/UpperFirst.mjs var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); var import_upperFirst = __toESM(require_upperFirst(), 1); var UpperFirst = ({ content }) => (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children: (0, import_upperFirst.default)(content) }); // node_modules/@strapi/content-type-builder/dist/admin/components/ListRow.mjs var BoxWrapper2 = dt(Box)` position: relative; `; var ListRow = (0, import_react3.memo)(({ configurable = true, customField = null, editTarget, firstLoopComponentUid = null, isFromDynamicZone = false, name, onClick, relation = "", repeatable = false, secondLoopComponentUid = null, target = null, targetUid = null, type }) => { const { contentTypes, isInDevelopmentMode, removeAttribute } = useDataManager(); const { formatMessage } = useIntl(); const isMorph = type === "relation" && relation.includes("morph"); const ico = [ "integer", "biginteger", "float", "decimal" ].includes(type) ? "number" : type; const contentType = (0, import_get3.default)(contentTypes, [ target ], {}); const contentTypeFriendlyName = (0, import_get3.default)(contentType, [ "schema", "displayName" ], ""); const isPluginContentType = (0, import_get3.default)(contentType, "plugin"); const src = target ? "relation" : ico; const handleClick = () => { if (isMorph) { return; } if (configurable !== false) { const attrType = type; onClick( // Tells where the attribute is located in the main modifiedData object : contentType, component or components editTarget, // main data type uid secondLoopComponentUid || firstLoopComponentUid || targetUid, // Name of the attribute name, // Type of the attribute attrType, customField ); } }; let loopNumber; if (secondLoopComponentUid && firstLoopComponentUid) { loopNumber = 2; } else if (firstLoopComponentUid) { loopNumber = 1; } else { loopNumber = 0; } return (0, import_jsx_runtime10.jsxs)(BoxWrapper2, { tag: "tr", onClick: isInDevelopmentMode && configurable && !isMorph ? handleClick : void 0, children: [ (0, import_jsx_runtime10.jsxs)("td", { style: { position: "relative" }, children: [ loopNumber !== 0 && (0, import_jsx_runtime10.jsx)(Curve, { color: isFromDynamicZone ? "primary200" : "neutral150" }), (0, import_jsx_runtime10.jsxs)(Flex, { paddingLeft: 2, gap: 4, children: [ (0, import_jsx_runtime10.jsx)(AttributeIcon, { type: src, customField }), (0, import_jsx_runtime10.jsx)(Typography, { textColor: "neutral800", fontWeight: "bold", children: name }) ] }) ] }), (0, import_jsx_runtime10.jsx)("td", { children: target ? (0, import_jsx_runtime10.jsxs)(Typography, { textColor: "neutral800", children: [ formatMessage({ id: getTrad(`modelPage.attribute.${isMorph ? "relation-polymorphic" : "relationWith"}`), defaultMessage: "Relation with" }), " ", (0, import_jsx_runtime10.jsxs)("span", { style: { fontStyle: "italic" }, children: [ (0, import_jsx_runtime10.jsx)(UpperFirst, { content: contentTypeFriendlyName }), " ", isPluginContentType && `(${formatMessage({ id: getTrad(`from`), defaultMessage: "from" })}: ${isPluginContentType})` ] }) ] }) : (0, import_jsx_runtime10.jsx)(DisplayedType, { type, customField, repeatable }) }), (0, import_jsx_runtime10.jsx)("td", { children: isInDevelopmentMode ? (0, import_jsx_runtime10.jsx)(Flex, { justifyContent: "flex-end", onClick: (e) => e.stopPropagation(), children: configurable ? (0, import_jsx_runtime10.jsxs)(Flex, { gap: 1, children: [ !isMorph && (0, import_jsx_runtime10.jsx)(IconButton, { onClick: handleClick, label: `${formatMessage({ id: "app.utils.edit", defaultMessage: "Edit" })} ${name}`, variant: "ghost", children: (0, import_jsx_runtime10.jsx)(ForwardRef$1v, {}) }), (0, import_jsx_runtime10.jsx)(IconButton, { onClick: (e) => { e.stopPropagation(); removeAttribute(editTarget, name, secondLoopComponentUid || firstLoopComponentUid || ""); }, label: `${formatMessage({ id: "global.delete", defaultMessage: "Delete" })} ${name}`, variant: "ghost", children: (0, import_jsx_runtime10.jsx)(ForwardRef$j, {}) }) ] }) : (0, import_jsx_runtime10.jsx)(ForwardRef$2h, {}) }) : ( /* In production mode the edit icons aren't visible, therefore we need to reserve the same space, otherwise the height of the row might collapse, leading to bad positioned curve icons */ (0, import_jsx_runtime10.jsx)(Box, { height: "3.2rem" }) ) }) ] }); }); // node_modules/@strapi/content-type-builder/dist/admin/utils/getAttributeDisplayedType.mjs var getAttributeDisplayedType = (type) => { let displayedType; switch (type) { case "date": case "datetime": case "time": case "timestamp": displayedType = "date"; break; case "integer": case "biginteger": case "decimal": case "float": displayedType = "number"; break; case "string": case "text": displayedType = "text"; break; case "": displayedType = "relation"; break; default: displayedType = type; } return displayedType; }; // node_modules/@strapi/content-type-builder/dist/admin/pages/ListView/LinkToCMSettingsView.mjs var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); var import_react4 = __toESM(require_react(), 1); var cmPermissions = { collectionTypesConfigurations: [ { action: "plugin::content-manager.collection-types.configure-view", subject: null } ], componentsConfigurations: [ { action: "plugin::content-manager.components.configure-layout", subject: null } ], singleTypesConfigurations: [ { action: "plugin::content-manager.single-types.configure-view", subject: null } ] }; var getPermission = ({ isInContentTypeView, contentTypeKind }) => { if (isInContentTypeView) { if (contentTypeKind === "singleType") { return cmPermissions.singleTypesConfigurations; } return cmPermissions.collectionTypesConfigurations; } return cmPermissions.componentsConfigurations; }; var LinkToCMSettingsView = (0, import_react4.memo)(({ disabled, isInContentTypeView = true, contentTypeKind = "collectionType", targetUid = "" }) => { const { formatMessage } = useIntl(); const navigate = useNavigate(); const permissionsToApply = getPermission({ isInContentTypeView, contentTypeKind }); const label = formatMessage({ id: "content-type-builder.form.button.configure-view", defaultMessage: "Configure the view" }); const handleClick = () => { if (disabled) { return false; } if (isInContentTypeView) { navigate(`/content-manager/collection-types/${targetUid}/configurations/edit`); } else { navigate(`/content-manager/components/${targetUid}/configurations/edit`); } return false; }; const { isLoading, allowedActions } = useRBAC({ viewConfig: permissionsToApply }); if (isLoading) { return null; } if (!allowedActions.canConfigureView && !allowedActions.canConfigureLayout) { return null; } return (0, import_jsx_runtime11.jsx)(Button, { startIcon: (0, import_jsx_runtime11.jsx)(ForwardRef$2n, {}), variant: "tertiary", onClick: handleClick, disabled, children: label }); }); // node_modules/@strapi/content-type-builder/dist/admin/pages/ListView/ListView.mjs var LayoutsHeaderCustom = dt(Layouts.Header)` overflow-wrap: anywhere; `; var ListView = () => { const { initialData, modifiedData, isInDevelopmentMode, isInContentTypeView, submitData } = useDataManager(); const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); const match = useMatch("/plugins/content-type-builder/:kind/:currentUID"); const { onOpenModalAddComponentsToDZ, onOpenModalAddField, onOpenModalEditField, onOpenModalEditSchema, onOpenModalEditCustomField } = useFormModalNavigation(); const firstMainDataPath = isInContentTypeView ? "contentType" : "component"; const mainDataTypeAttributesPath = [ firstMainDataPath, "schema", "attributes" ]; const targetUid = (0, import_get4.default)(modifiedData, [ firstMainDataPath, "uid" ]); const isTemporary = (0, import_get4.default)(modifiedData, [ firstMainDataPath, "isTemporary" ], false); const contentTypeKind = (0, import_get4.default)(modifiedData, [ firstMainDataPath, "schema", "kind" ], null); const attributes = (0, import_get4.default)(modifiedData, mainDataTypeAttributesPath, []); const isFromPlugin = (0, import_has.default)(initialData, [ firstMainDataPath, "plugin" ]); const hasModelBeenModified = !(0, import_isEqual.default)(modifiedData, initialData); const forTarget = isInContentTypeView ? "contentType" : "component"; const handleClickAddComponentToDZ = (dynamicZoneTarget) => { onOpenModalAddComponentsToDZ({ dynamicZoneTarget, targetUid }); }; const handleClickEditField = async (forTarget2, targetUid2, attributeName, type, customField) => { const attributeType = getAttributeDisplayedType(type); const step = type === "component" ? "2" : null; if (customField) { onOpenModalEditCustomField({ forTarget: forTarget2, targetUid: targetUid2, attributeName, attributeType, customFieldUid: customField }); } else { onOpenModalEditField({ forTarget: forTarget2, targetUid: targetUid2, attributeName, attributeType, step }); } }; let label = (0, import_get4.default)(modifiedData, [ firstMainDataPath, "schema", "displayName" ], ""); const kind = (0, import_get4.default)(modifiedData, [ firstMainDataPath, "schema", "kind" ], ""); const isCreatingFirstContentType = (match == null ? void 0 : match.params.currentUID) === "create-content-type"; if (!label && isCreatingFirstContentType) { label = formatMessage({ id: getTrad("button.model.create"), defaultMessage: "Create new collection type" }); } const onEdit = () => { const contentType = kind || firstMainDataPath; if (contentType === "collectionType") { trackUsage("willEditNameOfContentType"); } if (contentType === "singleType") { trackUsage("willEditNameOfSingleType"); } onOpenModalEditSchema({ modalType: firstMainDataPath, forTarget: firstMainDataPath, targetUid, kind: contentType }); }; usePrompt({ when: hasModelBeenModified, message: formatMessage({ id: getTrad("prompt.unsaved"), defaultMessage: "Are you sure?" }) }); const primaryAction = isInDevelopmentMode && (0, import_jsx_runtime12.jsxs)(Flex, { gap: 2, marginLeft: 2, children: [ !isCreatingFirstContentType && (0, import_jsx_runtime12.jsx)(Button, { startIcon: (0, import_jsx_runtime12.jsx)(ForwardRef$1h, {}), variant: "secondary", minWidth: "max-content", onClick: () => { onOpenModalAddField({ forTarget, targetUid }); }, children: formatMessage({ id: getTrad("button.attributes.add.another"), defaultMessage: "Add another field" }) }), (0, import_jsx_runtime12.jsx)(Button, { startIcon: (0, import_jsx_runtime12.jsx)(ForwardRef$4F, {}), onClick: async () => await submitData(), type: "submit", disabled: (0, import_isEqual.default)(modifiedData, initialData), children: formatMessage({ id: "global.save", defaultMessage: "Save" }) }) ] }); const secondaryAction = isInDevelopmentMode && !isFromPlugin && !isCreatingFirstContentType && (0, import_jsx_runtime12.jsx)(Button, { startIcon: (0, import_jsx_runtime12.jsx)(ForwardRef$1v, {}), variant: "tertiary", onClick: onEdit, children: formatMessage({ id: "app.utils.edit", defaultMessage: "Edit" }) }); return (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [ (0, import_jsx_runtime12.jsx)(LayoutsHeaderCustom, { id: "title", primaryAction, secondaryAction, title: (0, import_upperFirst2.default)(label), subtitle: formatMessage({ id: getTrad("listView.headerLayout.description"), defaultMessage: "Build the data architecture of your content" }), navigationAction: (0, import_jsx_runtime12.jsx)(BackButton, {}) }), (0, import_jsx_runtime12.jsx)(Layouts.Content, { children: (0, import_jsx_runtime12.jsxs)(Flex, { direction: "column", alignItems: "stretch", gap: 4, children: [ (0, import_jsx_runtime12.jsx)(Flex, { justifyContent: "flex-end", children: (0, import_jsx_runtime12.jsx)(Flex, { gap: 2, children: (0, import_jsx_runtime12.jsx)(LinkToCMSettingsView, { targetUid, isInContentTypeView, contentTypeKind, disabled: isCreatingFirstContentType || isTemporary }, "link-to-cm-settings-view") }) }), (0, import_jsx_runtime12.jsx)(Box, { background: "neutral0", shadow: "filterShadow", hasRadius: true, children: (0, import_jsx_runtime12.jsx)(List, { items: attributes, customRowComponent: (props) => (0, import_jsx_runtime12.jsx)(ListRow, { ...props, onClick: handleClickEditField }), addComponentToDZ: handleClickAddComponentToDZ, targetUid, editTarget: forTarget, isMain: true }) }) ] }) }) ] }); }; export { ListView as default }; //# sourceMappingURL=ListView-M4MMRMSH.js.map