{"version":3,"file":"index-DJRD829J.mjs","sources":["../../admin/screens/List/components/DeleteConfirmModal/index.tsx","../../admin/screens/List/components/TableRow/index.tsx","../../admin/screens/List/components/PaginationFooter/index.tsx","../../admin/screens/List/components/Filters/FilterInput/index.tsx","../../admin/screens/List/components/Filters/index.tsx","../../admin/screens/List/components/Table/index.tsx","../../admin/screens/List/components/GeneratePathsModal/index.tsx","../../admin/hooks/useQueryParams.ts","../../admin/screens/List/index.tsx","../../admin/screens/Overview/components/ContentTypesList/index.tsx","../../admin/constants/pro-addons.ts","../../admin/components/TrialModal/index.tsx","../../admin/screens/Overview/index.tsx","../../admin/screens/Patterns/ListPage/components/TableBody/index.tsx","../../admin/screens/Patterns/ListPage/components/PaginationFooter/index.tsx","../../admin/screens/Patterns/ListPage/components/Table/index.tsx","../../admin/screens/Patterns/ListPage/index.tsx","../../admin/screens/Patterns/EditPage/utils/schema.ts","../../admin/components/Select/index.tsx","../../admin/components/PatternField/index.tsx","../../admin/components/HiddenLocalizedField/index.tsx","../../admin/components/LanguageCheckboxes/index.tsx","../../admin/screens/Patterns/EditPage/index.tsx","../../admin/screens/Patterns/CreatePage/utils/schema.ts","../../admin/screens/Patterns/CreatePage/index.tsx","../../admin/screens/404/index.tsx","../../admin/components/LockedAddonMenuItem/index.tsx","../../admin/containers/App/index.tsx"],"sourcesContent":["import React from 'react';\nimport { useIntl } from 'react-intl';\n\nimport {\n  Dialog,\n  Flex,\n  Typography,\n  Button,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\n\ntype Props = {\n  onSubmit: () => void;\n  children: React.ReactElement<any, string>;\n};\n\nconst DeleteConfirmModal = (props: Props) => {\n  const {\n    onSubmit,\n    children,\n  } = props;\n\n  const { formatMessage } = useIntl();\n\n  return (\n    <Dialog.Root>\n      <Dialog.Trigger>\n        {children}\n      </Dialog.Trigger>\n      <Dialog.Content>\n        <Dialog.Header>\n          {formatMessage({\n            id: 'webtools.settings.page.list.delete_confirm_modal.title',\n            defaultMessage: 'Delete item',\n          })}\n        </Dialog.Header>\n        <Dialog.Body icon={<WarningCircle />}>\n          <Flex>\n            <Flex justifyContent=\"center\">\n              <Typography variant=\"omega\" id=\"confirm-description\" style={{ textAlign: 'center' }}>\n                {formatMessage({\n                  id: 'webtools.settings.page.list.delete_confirm_modal.body',\n                  defaultMessage: 'Are you sure you want to delete this item?',\n                })}\n              </Typography>\n            </Flex>\n          </Flex>\n        </Dialog.Body>\n        <Dialog.Footer>\n          <Dialog.Cancel>\n            <Button\n              variant=\"tertiary\"\n            >\n              {formatMessage({\n                id: 'webtools.settings.button.cancel',\n                defaultMessage: 'Cancel',\n              })}\n            </Button>\n          </Dialog.Cancel>\n          <Button\n            variant=\"secondary\"\n            onClick={() => {\n              onSubmit();\n            }}\n          >\n            {formatMessage({\n              id: 'webtools.settings.button.delete',\n              defaultMessage: 'Delete',\n            })}\n          </Button>\n        </Dialog.Footer>\n      </Dialog.Content>\n    </Dialog.Root>\n  );\n};\n\nexport default DeleteConfirmModal;\n","import React, { FC } from 'react';\nimport {\n  Typography,\n  Box,\n  Tr,\n  Td,\n  Flex,\n  IconButton,\n} from '@strapi/design-system';\nimport { useNotification, getFetchClient } from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { Trash, ExternalLink, Pencil } from '@strapi/icons';\nimport { useNavigate } from 'react-router-dom';\nimport DeleteConfirmModal from '../DeleteConfirmModal';\nimport { Config } from '../../../../../server/config';\nimport { UrlAliasEntity } from '../../../../types/url-aliases';\nimport { EnabledContentType } from '../../../../types/enabled-contenttypes';\n\ntype Props = {\n  row: UrlAliasEntity;\n  checked?: boolean;\n  contentTypes: EnabledContentType[];\n  onDelete?: () => void;\n  updateValue: () => any;\n  config: Config;\n};\n\nconst TableRow: FC<Props> = ({\n  row,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  checked,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  updateValue,\n  config,\n  contentTypes,\n  onDelete,\n}) => {\n  const { toggleNotification } = useNotification();\n  const { get, post } = getFetchClient();\n  const { formatMessage } = useIntl();\n  const navigate = useNavigate();\n\n  const handleClick = (path: string) => {\n    get<{ link: string }>(`/webtools/url-alias/editLink?path=${path}`)\n      .then((res) => {\n        navigate(res.data.link);\n      })\n      .catch(() => { });\n  };\n\n  const handleDelete = (id: string) => {\n    post(`/webtools/url-alias/delete/${id}`)\n      .then(() => {\n        if (onDelete) onDelete();\n        toggleNotification({ type: 'success', message: formatMessage({ id: 'webtools.settings.success.url_alias.delete' }) });\n      })\n      .catch(() => {\n        if (onDelete) onDelete();\n        toggleNotification({ type: 'danger', message: formatMessage({ id: 'notification.error' }) });\n      });\n  };\n\n  const getContentTypeName = (uid: string): string | undefined => {\n    const contentType = contentTypes.find((type) => type.uid === uid);\n    return contentType?.name;\n  };\n\n  return (\n    <Tr>\n      {/* <Td>\n        <BaseCheckbox\n          aria-label={`Select ${row.url_path}`}\n          value={checked}\n          onValueChange={updateValue}\n        />\n      </Td> */}\n      <Td>\n        <Box style={{ marginTop: 5, marginBottom: 5 }}>\n          <Typography>{row.url_path}</Typography>\n        </Box>\n      </Td>\n      <Td>\n        <Box style={{ marginTop: 5, marginBottom: 5 }}>\n          <Typography>{getContentTypeName(row.contenttype)}</Typography>\n        </Box>\n      </Td>\n      <Td>\n        <Box style={{ marginTop: 5, marginBottom: 5 }}>\n          <Typography>{row.locale}</Typography>\n        </Box>\n      </Td>\n      <Td>\n        <Flex justifyContent=\"end\" gap={2}>\n          {config.website_url && (\n            <IconButton\n              onClick={() => window.open(`${config.website_url}${row.url_path}`, '_blank')}\n              label={formatMessage(\n                { id: 'webtools.settings.page.list.table.actions.edit', defaultMessage: 'Go to the front-end page' },\n                { target: `${row.url_path}` },\n              )}\n            >\n              <ExternalLink />\n            </IconButton>\n          )}\n          <IconButton\n            onClick={() => handleClick(row.url_path)}\n            label={formatMessage(\n              { id: 'webtools.settings.page.list.table.actions.goTo', defaultMessage: 'Edit {target}' },\n              { target: `${row.url_path}` },\n            )}\n          >\n            <Pencil />\n          </IconButton>\n          <DeleteConfirmModal\n            onSubmit={() => handleDelete(row.documentId)}\n          >\n            <IconButton\n              label={formatMessage(\n                { id: 'webtools.settings.page.list.table.actions.delete', defaultMessage: 'Delete {target}' },\n                { target: `${row.url_path}` },\n              )}\n            >\n              <Trash />\n            </IconButton>\n          </DeleteConfirmModal>\n        </Flex>\n      </Td>\n    </Tr>\n  );\n};\n\nexport default TableRow;\n","import React from 'react';\nimport { Box } from '@strapi/design-system';\nimport { Pagination as StrapiPagination } from '@strapi/strapi/admin';\nimport type { Pagination } from '../..';\n\ntype Props = {\n  pagination: Pagination;\n};\n\nconst PaginationFooter = ({ pagination }: Props) => {\n  return (\n    <Box paddingTop={4}>\n      <StrapiPagination.Root {...pagination}>\n        <StrapiPagination.PageSize />\n        <StrapiPagination.Links />\n      </StrapiPagination.Root>\n    </Box>\n  );\n};\n\nexport default PaginationFooter;\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport React from 'react';\nimport { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { Filters, useField } from '@strapi/admin/strapi-admin';\n\nconst FilterInput = (props: Filters.ValueInputProps) => {\n  const { name, options } = props;\n\n  const field = useField(name);\n\n  const handleChange = (value?: string) => {\n    field.onChange(name, value);\n  };\n\n  return (\n    <SingleSelect key=\"type-filter\" onChange={handleChange} value={field.value}>\n      {options.map((contentType) => (\n        <SingleSelectOption key={contentType.value} value={String(contentType.value)}>\n          {contentType.label}\n        </SingleSelectOption>\n      ))}\n    </SingleSelect>\n  );\n};\n\nexport default FilterInput;\n","import React, {\n  useMemo,\n} from 'react';\nimport { useIntl } from 'react-intl';\n\nimport {\n  Flex,\n} from '@strapi/design-system';\n\nimport { Filters as StrapiFilters, SearchInput } from '@strapi/strapi/admin';\nimport FilterInput from './FilterInput';\nimport { EnabledContentTypes } from '../../../../types/enabled-contenttypes';\nimport { Locales } from '../../../../types/languages';\n\ntype Props = {\n  contentTypes: EnabledContentTypes,\n  locales: Locales,\n};\n\nconst Filters = ({ contentTypes, locales }: Props) => {\n  const { formatMessage } = useIntl();\n\n  const filters = useMemo(() => {\n    const newFilters: StrapiFilters.Filter[] = [];\n\n    if (contentTypes.length > 0) {\n      newFilters.push(\n        {\n          input: FilterInput,\n          label: 'Content-Type',\n          name: 'contenttype',\n          options: contentTypes.map((contenttype) => ({\n            label: contenttype.name,\n            value: contenttype.uid,\n          })),\n          type: 'string',\n        },\n        {\n          input: FilterInput,\n          label: 'Locale',\n          name: 'locale',\n          options: locales.map((locale) => ({\n            label: locale.name,\n            value: locale.uid,\n          })),\n          type: 'string',\n        },\n      );\n    }\n\n    return newFilters;\n  }, [contentTypes, locales]);\n\n\n  return (\n    <Flex gap=\"2\" marginBottom=\"4\">\n      <SearchInput\n        label=\"Search\"\n        placeholder={formatMessage({\n          id: 'global.search',\n          defaultMessage: 'Search',\n        })}\n      />\n      <StrapiFilters.Root options={filters}>\n        <StrapiFilters.Trigger />\n        <StrapiFilters.Popover />\n        <StrapiFilters.List />\n      </StrapiFilters.Root>\n    </Flex>\n  );\n};\n\nexport default Filters;\n","import React, {\n  FC,\n  useEffect,\n  useState,\n} from 'react';\nimport { useIntl } from 'react-intl';\n\nimport {\n  Table,\n  Tr,\n  Thead,\n  Th,\n  Typography,\n  Tbody,\n  Button,\n  Flex,\n  EmptyStateLayout,\n} from '@strapi/design-system';\n\nimport TableRow from '../TableRow';\nimport PaginationFooter from '../PaginationFooter';\nimport type { Pagination } from '../..';\nimport Filters from '../Filters';\nimport { Config } from '../../../../../server/config';\nimport { UrlAliasEntity } from '../../../../types/url-aliases';\nimport { Locales } from '../../../../types/languages';\n\ntype Props = {\n  paths: UrlAliasEntity[],\n  onDelete: () => any,\n  pagination: Pagination,\n  contentTypes: any[],\n  locales: Locales,\n  config: Config,\n};\n\nconst TableComponent: FC<Props> = (props) => {\n  const {\n    paths,\n    pagination,\n    onDelete,\n    config,\n    contentTypes,\n    locales,\n  } = props;\n\n  const { formatMessage } = useIntl();\n  const [checkedItems, setCheckedItems] = useState<boolean[]>([]);\n\n  // Initiate the checked items.\n  useEffect(() => {\n    const newCheckedItems = [];\n    for (let i = 0; i < pagination.pageSize; i++) {\n      newCheckedItems.push(false);\n    }\n    setCheckedItems(newCheckedItems);\n  }, [pagination.pageSize]);\n\n  const allChecked = checkedItems && checkedItems.every(Boolean);\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  const isIndeterminate = checkedItems.some(Boolean) && !allChecked;\n  const amountChecked = checkedItems.filter((item) => item).length;\n\n  return (\n    <div>\n      <Filters contentTypes={contentTypes} locales={locales} />\n      {amountChecked > 0 && (\n        <Flex marginBottom=\"6\" gap=\"3\">\n          <Typography variant=\"omega\" textColor=\"neutral600\">\n            {amountChecked} {formatMessage({\n              id: 'webtools.settings.page.list.table.delete.entries_selected',\n              defaultMessage: 'Entries selected',\n            })}\n          </Typography>\n          <Button variant=\"danger-light\">\n            {formatMessage({\n              id: 'webtools.settings.button.delete',\n              defaultMessage: 'Delete',\n            })}\n          </Button>\n        </Flex>\n      )}\n      {paths && paths.length > 0 ? (\n        <Table colCount={1} rowCount={pagination.pageSize}>\n          <Thead>\n            <Tr>\n              {/* <Th>\n                <BaseCheckbox\n                  aria-label={formatMessage({ id: 'config-sync.ConfigList.SelectAll' })}\n                  indeterminate={isIndeterminate}\n                  onValueChange={\n                    (value: boolean) => setCheckedItems(checkedItems.map(() => value))\n                  }\n                  value={allChecked}\n                />\n              </Th> */}\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({ id: 'webtools.settings.page.path.table.head.path', defaultMessage: 'Path' })}\n                </Typography>\n              </Th>\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({ id: 'webtools.settings.page.path.table.head.content-type', defaultMessage: 'Content-Type' })}\n                </Typography>\n              </Th>\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({ id: 'webtools.settings.page.path.table.head.locale', defaultMessage: 'Locale' })}\n                </Typography>\n              </Th>\n            </Tr>\n          </Thead>\n          <Tbody>\n            {paths.map((path, index) => (\n              <TableRow\n                key={path.url_path}\n                row={path}\n                checked={checkedItems[index]}\n                contentTypes={contentTypes}\n                onDelete={onDelete}\n                config={config}\n                updateValue={() => {\n                  checkedItems[index] = !checkedItems[index];\n                  setCheckedItems([...checkedItems]);\n                }}\n              />\n            ))}\n          </Tbody>\n        </Table>\n      ) : (\n        <EmptyStateLayout\n          content={formatMessage({\n            id: 'webtools.settings.page.list.table.empty',\n            defaultMessage: 'You don\\'t have any URL paths yet.',\n          })}\n          shadow=\"tableShadow\"\n          hasRadius\n        />\n      )}\n      <PaginationFooter pagination={pagination} />\n    </div>\n  );\n};\n\nexport default TableComponent;\n","import React from 'react';\nimport { useIntl } from 'react-intl';\n\nimport {\n  Modal,\n  Button,\n  Typography,\n  Checkbox,\n  Radio,\n  Flex,\n  Box,\n} from '@strapi/design-system';\n\nimport { EnabledContentType, EnabledContentTypes } from '../../../../types/enabled-contenttypes';\nimport { GenerationType } from '../../../../../server/types';\n\ntype Props = {\n  onSubmit: (types: EnabledContentType['uid'][], generationType?: GenerationType) => Promise<void>;\n  contentTypes: EnabledContentTypes;\n  children: React.ReactElement<any, string>;\n};\n\nconst GeneratePathsModal = ({\n  onSubmit,\n  contentTypes,\n  children,\n}: Props) => {\n  const [open, setOpen] = React.useState<boolean>(false);\n  const [submitting, setSubmitting] = React.useState<boolean>(false);\n  const { formatMessage } = useIntl();\n  const [selectedContentTypes, setSelectedContentTypes] = React.useState<EnabledContentType['uid'][]>([]);\n  const [selectedGenerationType, setSelectedGenerationType] = React.useState<GenerationType>();\n\n  return (\n    <Modal.Root open={open} onOpenChange={setOpen}>\n      <Modal.Trigger>\n        {children}\n      </Modal.Trigger>\n      <Modal.Content>\n        <Modal.Header>\n          <Typography textColor=\"neutral800\" variant=\"omega\" fontWeight=\"bold\">\n            {formatMessage({\n              id: 'webtools.settings.page.list.generate_paths_modal.title',\n              defaultMessage: 'Generate URL aliases',\n            })}\n          </Typography>\n        </Modal.Header>\n        <Modal.Body>\n          <Flex direction=\"column\" alignItems=\"start\" gap=\"7\">\n            <Flex direction=\"column\" alignItems=\"start\" gap=\"2\">\n              <Typography variant=\"delta\">\n                {formatMessage({\n                  id: 'webtools.settings.page.list.generate_paths_modal.types.title',\n                  defaultMessage: 'Content types',\n                })}\n              </Typography>\n              <Typography variant=\"omega\">\n                {formatMessage({\n                  id: 'webtools.settings.page.list.generate_paths_modal.types.body',\n                  defaultMessage: 'Select the content types you want to generate the URLs for.',\n                })}\n              </Typography>\n              <Flex direction=\"column\" alignItems=\"start\" gap=\"1\" marginTop=\"2\">\n                {contentTypes.map((contentType) => (\n                  <Checkbox\n                    key={contentType.uid}\n                    aria-label={`Select ${contentType.name}`}\n                    checked={selectedContentTypes.includes(contentType.uid)}\n                    onCheckedChange={() => {\n                      if (selectedContentTypes.includes(contentType.uid)) {\n                        const newContentTypes = selectedContentTypes\n                          .filter((uid) => uid !== contentType.uid);\n\n                        setSelectedContentTypes(newContentTypes);\n\n                        return;\n                      }\n\n                      setSelectedContentTypes([...selectedContentTypes, contentType.uid]);\n                    }}\n                  >\n                    {contentType.name}\n                  </Checkbox>\n                ))}\n              </Flex>\n            </Flex>\n            <Flex direction=\"column\" alignItems=\"start\" gap=\"2\">\n              <Typography variant=\"delta\">\n                {formatMessage({\n                  id: 'webtools.settings.page.list.generate_paths_modal.generation_type.title',\n                  defaultMessage: 'Generation type',\n                })}\n              </Typography>\n              <Typography variant=\"omega\">\n                {formatMessage({\n                  id: 'webtools.settings.page.list.generate_paths_modal.generation_type.body',\n                  defaultMessage: 'Select how you would like to generate the URLs.',\n                })}\n              </Typography>\n              <Box marginTop=\"2\">\n                <Radio.Group onValueChange={(value: GenerationType) => setSelectedGenerationType(value)} value={selectedGenerationType} name=\"meal\">\n                  <Flex direction=\"column\" alignItems=\"start\" gap=\"2\">\n                    <Radio.Item value=\"only_without_alias\">\n                      {formatMessage({\n                        id: 'webtools.settings.page.list.generate_paths_modal.generation_type.only_without_alias',\n                        defaultMessage: 'Generate only for pages without an URL alias',\n                      })}\n                    </Radio.Item>\n                    <Radio.Item value=\"only_generated\">\n                      {formatMessage({\n                        id: 'webtools.settings.page.list.generate_paths_modal.generation_type.only_generated',\n                        defaultMessage: 'Re-generate only URL alias that were auto-generated',\n                      })}\n                    </Radio.Item>\n                    <Radio.Item value=\"all\">\n                      {formatMessage({\n                        id: 'webtools.settings.page.list.generate_paths_modal.generation_type.all',\n                        defaultMessage: 'Re-generate all URL aliases',\n                      })}\n                    </Radio.Item>\n                  </Flex>\n                </Radio.Group>\n              </Box>\n            </Flex>\n          </Flex>\n        </Modal.Body>\n        <Modal.Footer>\n          <Modal.Close>\n            <Button variant=\"tertiary\">\n              {formatMessage({\n                id: 'webtools.settings.button.cancel',\n                defaultMessage: 'Cancel',\n              })}\n            </Button>\n          </Modal.Close>\n          <Button\n            // eslint-disable-next-line @typescript-eslint/no-misused-promises\n            onClick={async () => {\n              try {\n                setSubmitting(true);\n                await onSubmit(selectedContentTypes, selectedGenerationType);\n                setOpen(false);\n              } finally {\n                setSubmitting(false);\n              }\n            }}\n            loading={submitting}\n          >\n            {formatMessage({\n              id: 'webtools.settings.button.generate_paths',\n              defaultMessage: 'Bulk generate',\n            })}\n          </Button>\n        </Modal.Footer>\n      </Modal.Content>\n    </Modal.Root>\n  );\n};\n\nexport default GeneratePathsModal;\n","import { useEffect, useState } from 'react';\nimport qs from 'qs';\nimport { useLocation } from 'react-router-dom';\n\nconst useQueryParams = () => {\n  const location = useLocation();\n  const [params, setParams] = useState<string>();\n\n  useEffect(() => {\n    const searchParams = new URLSearchParams(location.search);\n    const page = searchParams.get('page');\n    const pageSize = searchParams.get('pageSize');\n    searchParams.delete('page');\n    searchParams.delete('pageSize');\n\n\n    if (!page && !pageSize) {\n      searchParams.append('pagination[page]', '1');\n      searchParams.append('pagination[pageSize]', '10');\n    }\n\n    if (page && pageSize) {\n      searchParams.append('pagination[page]', page);\n      searchParams.append('pagination[pageSize]', pageSize);\n    }\n\n    const paramsObj = qs.parse(searchParams.toString());\n    // @ts-expect-error\n    const filters = paramsObj?.filters?.$and as Array<{ [key: string]: any }>;\n    const localeFilterIndex = filters?.findIndex((filter) => filter.locale !== undefined);\n    const localeFilter = filters?.[localeFilterIndex];\n\n    if (localeFilter) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      paramsObj.locale = localeFilter.locale.$eq as string;\n      filters.splice(localeFilterIndex, 1);\n      // @ts-expect-error\n      paramsObj.filters.$and = filters;\n    }\n\n    setParams(qs.stringify(paramsObj));\n  }, [location]);\n\n  return params;\n};\n\nexport default useQueryParams;\n","import React from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n  useQuery,\n  useQueryClient,\n} from 'react-query';\n\nimport { Button } from '@strapi/design-system';\n\nimport {\n  Page,\n  useNotification,\n  getFetchClient,\n  Layouts,\n} from '@strapi/strapi/admin';\n\nimport pluginPermissions from '../../permissions';\nimport Table from './components/Table';\nimport GeneratePathsModal from './components/GeneratePathsModal';\nimport { EnabledContentType, EnabledContentTypes } from '../../types/enabled-contenttypes';\nimport { GenerationType } from '../../../server/types';\nimport { GenericResponse } from '../../types/content-api';\nimport { Config } from '../../../server/config';\nimport { UrlAliasEntity } from '../../types/url-aliases';\nimport useQueryParams from '../../hooks/useQueryParams';\nimport { Locales } from '../../types/languages';\n\nexport type Pagination = {\n  page: number;\n  pageSize: number;\n  pageCount: number;\n  total: number;\n};\n\nconst List = () => {\n  const { get } = getFetchClient();\n  const params = useQueryParams();\n\n  const items = useQuery(['url-alias', params], async () => get<GenericResponse<UrlAliasEntity[]>>(`/webtools/url-alias/findMany?${params}`));\n  const contentTypes = useQuery('content-types', async () => get<EnabledContentTypes>('/webtools/info/getContentTypes'));\n  const locales = useQuery('languages', async () => get<Locales>('/webtools/info/getLanguages'));\n  const config = useQuery('config', async () => get<Config>('/webtools/info/config'));\n  const queryClient = useQueryClient();\n\n  const { post } = getFetchClient();\n\n  const { formatMessage } = useIntl();\n  const { toggleNotification } = useNotification();\n\n  const handleGeneratePaths = async (types: EnabledContentType['uid'][], generationType: GenerationType) => {\n    await post('/webtools/url-alias/generate', { types, generationType })\n      .then((response: { data: { message: string } }) => {\n        toggleNotification({ type: 'success', message: formatMessage({ id: 'webtools.success.url-alias.generate', defaultMessage: response.data.message }) });\n      })\n      .catch(() => {\n        toggleNotification({ type: 'danger', message: formatMessage({ id: 'notification.error' }) });\n      });\n\n    await queryClient.invalidateQueries('url-alias');\n  };\n\n  if (items.isLoading || config.isLoading || contentTypes.isLoading || locales.isLoading) {\n    return (\n      <Page.Loading />\n    );\n  }\n\n  if (items.isError || config.isError || contentTypes.isError || locales.isError) {\n    return (\n      <Page.Error />\n    );\n  }\n\n  return (\n    <Page.Protect permissions={pluginPermissions['settings.list']}>\n      <Layouts.Header\n        title={formatMessage({ id: 'webtools.settings.page.list.title', defaultMessage: 'All URLs' })}\n        subtitle={formatMessage({ id: 'webtools.settings.page.list.description', defaultMessage: 'A list of all the known URL aliases.' })}\n        primaryAction={(\n          <GeneratePathsModal\n            // eslint-disable-next-line @typescript-eslint/no-misused-promises\n            onSubmit={handleGeneratePaths}\n            contentTypes={contentTypes.data.data}\n          >\n            <Button>\n              {formatMessage({\n                id: 'webtools.settings.button.generate_paths',\n                defaultMessage: 'Bulk generate',\n              })}\n            </Button>\n          </GeneratePathsModal>\n        )}\n      />\n      <Layouts.Content>\n        <Table\n          paths={items.data.data.data}\n          pagination={items.data.data.meta.pagination}\n          onDelete={() => queryClient.invalidateQueries('url-alias')}\n          config={config.data.data}\n          locales={locales.data.data}\n          contentTypes={contentTypes.data.data}\n        />\n      </Layouts.Content>\n    </Page.Protect>\n  );\n};\n\nexport default List;\n","import * as React from 'react';\nimport {\n  Button,\n  EmptyStateLayout,\n  Table,\n  Tbody,\n  Td,\n  Th,\n  Thead,\n  Tr,\n  Typography,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { Link } from 'react-router-dom';\n\nimport { EnabledContentType } from '../../../../types/enabled-contenttypes';\n\ntype Props = {\n  contentTypes: EnabledContentType[];\n};\n\nconst ContentTypesList = (props: Props) => {\n  const { contentTypes } = props;\n  const { formatMessage } = useIntl();\n\n  const colCount = 3;\n  const rowCount = (contentTypes?.length || 0) + 1;\n\n  return (\n    <div>\n      {contentTypes && contentTypes.length > 0 ? (\n        <Table colCount={colCount} rowCount={rowCount}>\n          <Thead>\n            <Tr>\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({\n                    id: 'webtools.settings.page.overview.contenttypes.table.head.name',\n                    defaultMessage: 'Name',\n                  })}\n                </Typography>\n              </Th>\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({\n                    id: 'webtools.settings.page.overview.contenttypes.table.head.uid',\n                    defaultMessage: 'UID',\n                  })}\n                </Typography>\n              </Th>\n            </Tr>\n          </Thead>\n          <Tbody>\n            {contentTypes.map((contenttype) => (\n              <Tr key={contenttype.uid}>\n                <Td width=\"50%\">\n                  <Typography>{contenttype.name}</Typography>\n                </Td>\n                <Td width=\"50%\">\n                  <Typography>{contenttype.uid}</Typography>\n                </Td>\n                <Td>\n                  <Check />\n                </Td>\n              </Tr>\n            ))}\n          </Tbody>\n        </Table>\n      ) : (\n        <EmptyStateLayout\n          content={formatMessage({\n            id: 'webtools.settings.page.overview.contenttypes.table.empty',\n            defaultMessage: 'You don\\'t have Webtools enabled for any of your content types.',\n          })}\n          action={(\n            <Button\n              variant=\"secondary\"\n              tag={Link}\n              to=\"https://docs.pluginpal.io/webtools/usage\"\n              startIcon={<ExternalLink />}\n              target=\"_blank\"\n            >\n              {formatMessage({\n                id: 'webtools.settings.button.read_docs',\n                defaultMessage: 'Learn how to enable Webtools',\n              })}\n            </Button>\n          )}\n          shadow=\"tableShadow\"\n          hasRadius\n        />\n      )}\n    </div>\n  );\n};\n\nexport default ContentTypesList;\n","import { ProAddon } from '../types/pro-addons';\n\nexport const PRO_ADDONS: ProAddon[] = [\n  {\n    id: 'redirects',\n    name: 'Redirects',\n    packageName: '@pluginpal/webtools-addon-redirects',\n    tagline: 'Never lose SEO value when URLs change',\n    description: 'Automatically manage redirects when URL aliases change. Prevent broken links and maintain SEO rankings.',\n    benefits: [\n      'Save 30+ hours/month on manual redirect management',\n      'Chain & loop detection prevents redirect errors',\n      'Preserve search rankings with automatic 301s',\n      'REST API for frontend integration',\n    ],\n    icon: 'ArrowRight',\n    docsUrl: 'https://docs.pluginpal.io/webtools/addons/redirects',\n    value: 'Maintains SEO rankings during site reorganizations',\n  },\n  {\n    id: 'links',\n    name: 'Links',\n    packageName: '@pluginpal/webtools-addon-links',\n    tagline: 'Smart internal linking for your content',\n    description: 'Custom field type for creating internal links that persist across URL changes. Links survive URL updates automatically.',\n    benefits: [\n      'Content teams manage links without developer help',\n      'Links survive URL changes (document ID based)',\n      'CKEditor & Magic Editor integration',\n      'Smart search finds content instantly',\n    ],\n    icon: 'Link',\n    docsUrl: 'https://docs.pluginpal.io/webtools/addons/links',\n    value: 'Empowers content teams, reduces broken internal links',\n  },\n  {\n    id: 'breadcrumbs',\n    name: 'Breadcrumbs',\n    packageName: '@pluginpal/webtools-addon-breadcrumbs',\n    tagline: 'Automated breadcrumb navigation',\n    description: 'Generate breadcrumb trails automatically based on URL structure. Zero manual maintenance required.',\n    benefits: [\n      'Automatic generation from URL structure',\n      'Multilingual breadcrumbs out-of-the-box',\n      'Works as API relation (populate in queries)',\n      'Customizable per content type',\n    ],\n    icon: 'ArrowsLeftRight',\n    docsUrl: 'https://docs.pluginpal.io/webtools/addons/breadcrumbs',\n    value: 'Improves UX and SEO without developer maintenance',\n  },\n];\n\nexport const TRIAL_URL = 'https://www.pluginpal.io/plugin/webtools';\nexport const DOCS_URL = 'https://docs.pluginpal.io/webtools/';\n","import React from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n  Modal,\n  Flex,\n  Typography,\n  Button,\n  Box,\n  Badge,\n  Grid,\n} from '@strapi/design-system';\nimport {\n  ArrowRight,\n  Link as LinkIcon,\n  ExternalLink,\n} from '@strapi/icons';\nimport { TrialModalProps } from '../../types/pro-addons';\nimport { TRIAL_URL } from '../../constants/pro-addons';\n\nconst iconMap = {\n  ArrowRight,\n  Link: LinkIcon,\n  ArrowsLeftRight: ArrowRight,\n};\n\nconst TrialModal: React.FC<TrialModalProps> = ({ addon, isOpen, onClose }) => {\n  const { formatMessage } = useIntl();\n  const IconComponent = iconMap[addon.icon as keyof typeof iconMap] || ArrowRight;\n\n  if (!isOpen) return null;\n\n  return (\n    <Modal.Root open={isOpen} onOpenChange={onClose}>\n      <Modal.Content style={{ maxWidth: '800px' }}>\n        <Modal.Header>\n          <Flex gap={3} alignItems=\"center\">\n            <Box padding={3} background=\"primary100\" hasRadius>\n              <IconComponent width=\"24px\" height=\"24px\" />\n            </Box>\n            <Flex direction=\"column\" gap={1} alignItems=\"flex-start\">\n              <Flex alignItems=\"center\" gap={2}>\n                <Typography variant=\"beta\">\n                  {formatMessage({\n                    id: 'webtools.trial_modal.title',\n                    defaultMessage: 'Unlock {name}',\n                  }, { name: addon.name })}\n                </Typography>\n                <Badge size=\"S\">\n                  {formatMessage({\n                    id: 'webtools.overview.addon.pro',\n                    defaultMessage: 'PRO',\n                  })}\n                </Badge>\n              </Flex>\n              <Typography variant=\"omega\" textColor=\"neutral600\">\n                {addon.tagline}\n              </Typography>\n            </Flex>\n          </Flex>\n        </Modal.Header>\n\n        <Modal.Body>\n          <Flex direction=\"column\" gap={6}>\n            {/* Two column layout: Key Benefits | Trial Details */}\n            <Grid.Root gap={8}>\n              {/* Left column: Key Benefits */}\n              <Grid.Item col={6} s={12}>\n                <Box>\n                  <Typography variant=\"sigma\" textColor=\"neutral600\" marginBottom={3} textTransform=\"uppercase\">\n                    {formatMessage({\n                      id: 'webtools.trial_modal.benefits_title',\n                      defaultMessage: 'Key Benefits',\n                    })}\n                  </Typography>\n                  <Flex direction=\"column\" gap={2} alignItems=\"flex-start\">\n                    {addon.benefits.map((benefit) => (\n                      <Flex key={benefit} gap={2} alignItems=\"flex-start\">\n                        <Box style={{ minWidth: '16px', textAlign: 'left' }}>\n                          <Typography variant=\"pi\" textColor=\"primary600\">\n                            •\n                          </Typography>\n                        </Box>\n                        <Typography\n                          variant=\"pi\"\n                          textColor=\"neutral700\"\n                          style={{\n                            flex: 1,\n                            lineHeight: '1.6',\n                            hyphens: 'none',\n                            wordBreak: 'normal',\n                          }}\n                        >\n                          {benefit}\n                        </Typography>\n                      </Flex>\n                    ))}\n                  </Flex>\n                </Box>\n              </Grid.Item>\n\n              {/* Right column: Trial Details */}\n              <Grid.Item col={6} s={12}>\n                <Box>\n                  <Typography variant=\"sigma\" textColor=\"neutral600\" marginBottom={3} textTransform=\"uppercase\">\n                    {formatMessage({\n                      id: 'webtools.trial_modal.trial_details_title',\n                      defaultMessage: 'Trial Details',\n                    })}\n                  </Typography>\n                  <Flex direction=\"column\" gap={2} alignItems=\"flex-start\">\n                    <Flex gap={2} alignItems=\"flex-start\">\n                      <Box style={{ minWidth: '16px', textAlign: 'left' }}>\n                        <Typography variant=\"pi\" textColor=\"success600\">\n                          ✓\n                        </Typography>\n                      </Box>\n                      <Typography variant=\"pi\" textColor=\"neutral700\">\n                        {formatMessage({\n                          id: 'webtools.trial_modal.trial_detail_1',\n                          defaultMessage: '7-day free trial',\n                        })}\n                      </Typography>\n                    </Flex>\n                    <Flex gap={2} alignItems=\"flex-start\">\n                      <Box style={{ minWidth: '16px', textAlign: 'left' }}>\n                        <Typography variant=\"pi\" textColor=\"success600\">\n                          ✓\n                        </Typography>\n                      </Box>\n                      <Typography variant=\"pi\" textColor=\"neutral700\">\n                        {formatMessage({\n                          id: 'webtools.trial_modal.trial_detail_2',\n                          defaultMessage: 'Includes Redirects + Links addons',\n                        })}\n                      </Typography>\n                    </Flex>\n                    <Flex gap={2} alignItems=\"flex-start\">\n                      <Box style={{ minWidth: '16px', textAlign: 'left' }}>\n                        <Typography variant=\"pi\" textColor=\"success600\">\n                          ✓\n                        </Typography>\n                      </Box>\n                      <Typography variant=\"pi\" textColor=\"neutral700\">\n                        {formatMessage({\n                          id: 'webtools.trial_modal.trial_detail_3',\n                          defaultMessage: 'No credit card required',\n                        })}\n                      </Typography>\n                    </Flex>\n                    <Flex gap={2} alignItems=\"flex-start\">\n                      <Box style={{ minWidth: '16px', textAlign: 'left' }}>\n                        <Typography variant=\"pi\" textColor=\"success600\">\n                          ✓\n                        </Typography>\n                      </Box>\n                      <Typography variant=\"pi\" textColor=\"neutral700\">\n                        {formatMessage({\n                          id: 'webtools.trial_modal.trial_detail_4',\n                          defaultMessage: 'Cancel anytime',\n                        })}\n                      </Typography>\n                    </Flex>\n                  </Flex>\n                </Box>\n              </Grid.Item>\n            </Grid.Root>\n\n            {/* Testimonial */}\n            <Box\n              background=\"neutral100\"\n              padding={5}\n              hasRadius\n              style={{\n                borderLeft: '3px solid var(--primary-600)',\n              }}\n            >\n              <Typography\n                variant=\"omega\"\n                textColor=\"neutral700\"\n                marginBottom={2}\n                style={{\n                  lineHeight: '1.6',\n                  hyphens: 'none',\n                  wordBreak: 'normal',\n                  fontStyle: 'italic',\n                }}\n              >\n                {formatMessage({\n                  id: 'webtools.trial_modal.testimonial',\n                  defaultMessage: '\"Saved us 20+ hours per project. Essential for our agency workflow.\"',\n                })}\n              </Typography>\n              <Typography variant=\"pi\" textColor=\"neutral600\" fontWeight=\"semiBold\">\n                {formatMessage({\n                  id: 'webtools.trial_modal.testimonial_author',\n                  defaultMessage: '— Marcus, Digital Agency Owner',\n                })}\n              </Typography>\n            </Box>\n          </Flex>\n        </Modal.Body>\n\n        <Modal.Footer>\n          <Flex justifyContent=\"space-between\" width=\"100%\" gap={3}>\n            <Button\n              variant=\"tertiary\"\n              tag=\"a\"\n              href={addon.docsUrl}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              endIcon={<ExternalLink />}\n            >\n              {formatMessage({\n                id: 'webtools.trial_modal.learn_more',\n                defaultMessage: 'Learn More',\n              })}\n            </Button>\n            <Button\n              variant=\"default\"\n              size=\"L\"\n              tag=\"a\"\n              href={TRIAL_URL}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              {formatMessage({\n                id: 'webtools.trial_modal.start_trial',\n                defaultMessage: 'Start Free Trial',\n              })}\n            </Button>\n          </Flex>\n        </Modal.Footer>\n      </Modal.Content>\n    </Modal.Root>\n  );\n};\n\nexport default TrialModal;\n","import React, { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport isEmpty from 'lodash/isEmpty';\n\nimport {\n  Typography,\n  Grid,\n  Flex,\n  Link,\n  Card,\n  CardBody,\n  CardTitle,\n  CardSubtitle,\n  CardContent,\n  Box,\n  Badge,\n  Button,\n} from '@strapi/design-system';\nimport {\n  ExternalLink, PuzzlePiece, Lock, Check,\n} from '@strapi/icons';\nimport { Page, getFetchClient, Layouts } from '@strapi/strapi/admin';\nimport { useQuery } from 'react-query';\n\nimport pluginPermissions from '../../permissions';\nimport { WebtoolsAddonInfo } from '../../types/addons';\nimport packageJson from '../../../package.json';\nimport { EnabledContentTypes } from '../../types/enabled-contenttypes';\nimport ContentTypesList from './components/ContentTypesList';\nimport { PRO_ADDONS, TRIAL_URL } from '../../constants/pro-addons';\nimport TrialModal from '../../components/TrialModal';\n\nconst List = () => {\n  const { get } = getFetchClient();\n  const addons = useQuery('addons', async () => get<WebtoolsAddonInfo[]>('/webtools/info/addons'));\n  const contentTypes = useQuery('content-types', async () => get<EnabledContentTypes>('/webtools/info/getContentTypes'));\n  const { formatMessage } = useIntl();\n  const [selectedAddon, setSelectedAddon] = useState<typeof PRO_ADDONS[0] | null>(null);\n\n  if (addons.isLoading || contentTypes.isLoading) {\n    return (\n      <Page.Loading />\n    );\n  }\n\n  if (addons.error || contentTypes.error) {\n    return (\n      <Page.Error />\n    );\n  }\n\n  const installedAddons = Object.values(addons.data.data || {});\n\n  // Strip npm scope: \"@pluginpal/webtools-addon-redirects\" → \"webtools-addon-redirects\"\n  const getPluginName = (packageName: string) => {\n    if (packageName.includes('/')) return packageName.split('/')[1];\n    return packageName;\n  };\n\n  const installedPluginNames = installedAddons.map((addon) => addon.info.name);\n\n  const isAddonInstalled = (packageName: string): boolean => {\n    return installedPluginNames.includes(getPluginName(packageName));\n  };\n\n  // Only show locked Pro addons that are NOT installed\n  const lockedProAddons = PRO_ADDONS.filter((proAddon) => !isAddonInstalled(proAddon.packageName));\n\n  // Check if user has Pro license (at least one Pro addon installed)\n  const hasProLicense = PRO_ADDONS.some((proAddon) => isAddonInstalled(proAddon.packageName));\n\n  // Combine installed and locked pro addons\n  const allAddonsToShow = [\n    ...installedAddons.map((addon) => ({\n      type: 'installed' as const,\n      info: addon.info,\n    })),\n    ...lockedProAddons.map((proAddon) => ({\n      type: 'locked' as const,\n      info: {\n        name: proAddon.packageName,\n        addonName: proAddon.name,\n        description: proAddon.description,\n      },\n      proAddon,\n    })),\n  ];\n\n  return (\n    <Page.Protect permissions={pluginPermissions['settings.overview']}>\n      <Layouts.Header\n        title={formatMessage({ id: 'webtools.settings.page.overview.title', defaultMessage: 'Overview' })}\n        subtitle={formatMessage({ id: 'webtools.settings.page.overview.description', defaultMessage: 'Webtools global information' })}\n      />\n      <Layouts.Content>\n        <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n          <Flex\n            direction=\"column\"\n            alignItems=\"stretch\"\n            gap={4}\n            hasRadius\n            background=\"neutral0\"\n            shadow=\"tableShadow\"\n            paddingTop={6}\n            paddingBottom={6}\n            paddingRight={7}\n            paddingLeft={7}\n          >\n            <Typography variant=\"delta\">\n              {formatMessage({\n                id: 'global.details',\n                defaultMessage: 'Details',\n              })}\n            </Typography>\n\n            <Grid.Root gap={5}>\n              <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"flex-start\">\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({\n                    id: 'webtools.settings.application.version',\n                    defaultMessage: 'Webtools version',\n                  })}\n                </Typography>\n                <Flex gap={3} direction=\"row\" alignItems=\"center\" marginTop={2}>\n                  <Typography>v{packageJson.version}</Typography>\n                  {!hasProLicense && (\n                    <Button\n                      variant=\"success\"\n                      size=\"S\"\n                      tag=\"a\"\n                      href={TRIAL_URL}\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                    >\n                      {formatMessage({\n                        id: 'webtools.overview.try_premium',\n                        defaultMessage: 'Try Premium Free',\n                      })}\n                    </Button>\n                  )}\n                </Flex>\n              </Grid.Item>\n              <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"flex-start\">\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({\n                    id: 'webtools.settings.links',\n                    defaultMessage: 'Links',\n                  })}\n                </Typography>\n                <Flex>\n                  <Link\n                    href=\"https://www.pluginpal.io/plugin/webtools\"\n                    isExternal\n                    endIcon={<ExternalLink />}\n                  >\n                    {formatMessage({\n                      id: 'webtools.settings.website',\n                      defaultMessage: 'Website',\n                    })}\n                  </Link>\n                </Flex>\n                <Flex>\n                  <Link\n                    href=\"https://github.com/pluginpal/strapi-webtools\"\n                    isExternal\n                    endIcon={<ExternalLink />}\n                  >\n                    {formatMessage({\n                      id: 'webtools.settings.github',\n                      defaultMessage: 'Github',\n                    })}\n                  </Link>\n                </Flex>\n              </Grid.Item>\n            </Grid.Root>\n          </Flex>\n        </Flex>\n        <Typography variant=\"delta\" marginTop={6} marginBottom={3} display=\"block\">\n          {formatMessage({\n            id: 'global.enabled_contenttypes',\n            defaultMessage: 'Enabled content types',\n          })}\n        </Typography>\n        <Box width=\"100%\">\n          <ContentTypesList contentTypes={contentTypes.data.data} />\n        </Box>\n        {!isEmpty(allAddonsToShow) && (\n          <Flex\n            direction=\"column\"\n            alignItems=\"stretch\"\n            hasRadius\n            background=\"neutral0\"\n            shadow=\"tableShadow\"\n            paddingTop={6}\n            paddingBottom={6}\n            paddingRight={7}\n            paddingLeft={7}\n            marginTop={6}\n          >\n            <Typography variant=\"delta\">\n              {formatMessage({\n                id: 'webtools.settings.addons.title',\n                defaultMessage: 'Addons',\n              })}\n            </Typography>\n            <Typography variant=\"pi\" textColor=\"neutral600\">\n              {formatMessage(\n                {\n                  id: 'webtools.settings.addons.description',\n                  defaultMessage: 'All the installed addons',\n                },\n              )}\n            </Typography>\n            <Box marginTop={4} style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: '16px' }}>\n              {allAddonsToShow.map((addon) => {\n                const isLocked = addon.type === 'locked';\n\n                return (\n                  <Card\n                    style={{\n                      minHeight: '200px',\n                      cursor: isLocked ? 'pointer' : 'default',\n                      opacity: isLocked ? 0.85 : 1,\n                      position: 'relative',\n                      display: 'flex',\n                      flexDirection: 'column',\n                    }}\n                    key={addon.info.name}\n                    onClick={\n                      isLocked\n                        ? () => setSelectedAddon(addon.proAddon)\n                        : undefined\n                    }\n                  >\n                    <CardBody\n                      style={{\n                        display: 'flex',\n                        flexDirection: 'column',\n                        height: '100%',\n                        padding: '20px',\n                      }}\n                    >\n                      {/* Badge positioned absolutely in top-right */}\n                      <Box\n                        style={{\n                          position: 'absolute',\n                          top: '16px',\n                          right: '16px',\n                          zIndex: 1,\n                        }}\n                      >\n                        {isLocked ? (\n                          <Badge size=\"S\">\n                            {formatMessage({\n                              id: 'webtools.overview.addon.pro',\n                              defaultMessage: 'PRO',\n                            })}\n                          </Badge>\n                        ) : (\n                          <Badge active size=\"S\">\n                            <Flex gap={1} alignItems=\"center\">\n                              <Check width=\"10px\" height=\"10px\" />\n                              {formatMessage({\n                                id: 'webtools.overview.addon.active',\n                                defaultMessage: 'Active',\n                              })}\n                            </Flex>\n                          </Badge>\n                        )}\n                      </Box>\n\n                      {/* Icon */}\n                      <Box\n                        padding={2}\n                        background={isLocked ? 'neutral200' : 'primary100'}\n                        hasRadius\n                        marginBottom={3}\n                      >\n                        {isLocked ? <Lock /> : <PuzzlePiece />}\n                      </Box>\n\n                      {/* Content with padding-right to prevent badge overlap */}\n                      <CardContent\n                        paddingLeft={0}\n                        paddingRight={0}\n                        paddingTop={0}\n                        paddingBottom={0}\n                        style={{\n                          flex: 1,\n                        }}\n                      >\n                        <CardTitle\n                          style={{\n                            paddingRight: '60px',\n                            marginBottom: '8px',\n                          }}\n                        >\n                          {addon.info.addonName}\n                        </CardTitle>\n                        <CardSubtitle\n                          style={{\n                            hyphens: 'none',\n                            wordBreak: 'normal',\n                            overflowWrap: 'break-word',\n                            lineHeight: '1.5',\n                          }}\n                        >\n                          {addon.info.description}\n                        </CardSubtitle>\n                      </CardContent>\n                    </CardBody>\n                  </Card>\n                );\n              })}\n            </Box>\n          </Flex>\n        )}\n      </Layouts.Content>\n\n      {selectedAddon && (\n        <TrialModal\n          addon={selectedAddon}\n          isOpen={!!selectedAddon}\n          onClose={() => setSelectedAddon(null)}\n        />\n      )}\n    </Page.Protect>\n  );\n};\n\nexport default List;\n","import React from 'react';\nimport {\n  IconButton, Typography, Flex, Tbody, Tr, Td,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { getFetchClient, useNotification } from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport { useQueryClient } from 'react-query';\n\nimport pluginId from '../../../../../helpers/pluginId';\nimport { PatternEntity } from '../../../../../types/url-patterns';\nimport { EnabledContentType } from '../../../../../types/enabled-contenttypes';\n\ninterface Props {\n  patterns: PatternEntity[]\n  contentTypes: EnabledContentType[]\n}\n\nconst TableBody: React.FC<Props> = ({ patterns, contentTypes }) => {\n  const { formatMessage } = useIntl();\n  const navigate = useNavigate();\n  const { toggleNotification } = useNotification();\n  const { get } = getFetchClient();\n  const queryClient = useQueryClient();\n\n  const handleClickDelete = (id: string) => {\n    get(`/webtools/url-pattern/delete/${id}`)\n      .then(async () => {\n        await queryClient.invalidateQueries('url-patterns');\n        toggleNotification({ type: 'success', message: formatMessage({ id: 'webtools.settings.success.delete' }) });\n      })\n      .catch(() => {\n        toggleNotification({ type: 'danger', message: formatMessage({ id: 'notification.error' }) });\n      });\n  };\n\n  const handleClickEdit = (id: string) => {\n    navigate(`/plugins/${pluginId}/patterns/${id}`);\n  };\n\n  const getContentTypeName = (uid: string): string | undefined => {\n    const contentType = contentTypes.find((type) => type.uid === uid);\n    return contentType?.name;\n  };\n\n  return (\n    <Tbody>\n      {patterns.map((pattern) => (\n        <Tr key={pattern.id}>\n          <Td>\n            <Typography>{pattern.pattern}</Typography>\n          </Td>\n          <Td>\n            <Typography>{getContentTypeName(pattern.contenttype)}</Typography>\n          </Td>\n          <Td>\n            <Typography>{pattern.languages.join(', ')}</Typography>\n          </Td>\n          <Td>\n            <Flex justifyContent=\"end\" gap={2}>\n              <IconButton\n                onClick={() => handleClickEdit(pattern.documentId)}\n                label={formatMessage(\n                  { id: 'webtools.settings.page.patterns.table.actions.edit', defaultMessage: 'Edit' },\n                )}\n              >\n                <Pencil />\n              </IconButton>\n              <IconButton\n                onClick={() => handleClickDelete(pattern.documentId)}\n                label={formatMessage(\n                  { id: 'webtools.settings.page.patterns.table.actions.delete', defaultMessage: 'Delete' },\n                )}\n              >\n                <Trash />\n              </IconButton>\n            </Flex>\n          </Td>\n        </Tr>\n      ))}\n    </Tbody>\n  );\n};\n\nexport default TableBody;\n","import React from 'react';\nimport { Box } from '@strapi/design-system';\nimport { Pagination as StrapiPagination } from '@strapi/strapi/admin';\nimport type { Pagination } from '../..';\n\ntype Props = {\n  pagination: Pagination;\n};\n\nconst PaginationFooter = ({ pagination }: Props) => {\n  return (\n    <Box paddingTop={4}>\n      <StrapiPagination.Root {...pagination}>\n        <StrapiPagination.PageSize />\n        <StrapiPagination.Links />\n      </StrapiPagination.Root>\n    </Box>\n  );\n};\n\nexport default PaginationFooter;\n","import React from 'react';\nimport { useIntl } from 'react-intl';\n\nimport {\n  Table, Tr, Thead, Th, VisuallyHidden, Typography, EmptyStateLayout,\n} from '@strapi/design-system';\n\nimport TableBody from '../TableBody';\nimport { PatternEntity } from '../../../../../types/url-patterns';\nimport { EnabledContentType } from '../../../../../types/enabled-contenttypes';\nimport PaginationFooter from '../PaginationFooter';\nimport type { Pagination } from '../..';\n\ninterface Props {\n  patterns: PatternEntity[]\n  contentTypes: EnabledContentType[]\n  pagination: Pagination\n}\n\nconst TableComponent: React.FC<Props> = ({ patterns, contentTypes, pagination }) => {\n  const { formatMessage } = useIntl();\n\n  const colCount = 3;\n  const rowCount = pagination.pageSize;\n\n  return (\n    <div>\n      {patterns && patterns.length > 0 ? (\n        <Table colCount={colCount} rowCount={rowCount}>\n          <Thead>\n            <Tr>\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({\n                    id: 'webtools.settings.page.patterns.table.head.pattern',\n                    defaultMessage: 'Pattern',\n                  })}\n                </Typography>\n              </Th>\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({\n                    id: 'webtools.settings.page.patterns.table.head.content-type',\n                    defaultMessage: 'Content Type',\n                  })}\n                </Typography>\n              </Th>\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({\n                    id: 'webtools.settings.page.patterns.table.head.languages',\n                    defaultMessage: 'Languages',\n                  })}\n                </Typography>\n              </Th>\n              <Th>\n                <VisuallyHidden>\n                  {formatMessage({\n                    id: 'webtools.settings.page.patterns.table.head.actions',\n                    defaultMessage: 'Actions',\n                  })}\n                </VisuallyHidden>\n              </Th>\n            </Tr>\n          </Thead>\n          <TableBody\n            patterns={patterns}\n            contentTypes={contentTypes}\n          />\n        </Table>\n      ) : (\n        <EmptyStateLayout\n          content={formatMessage({\n            id: 'webtools.settings.page.patterns.table.empty',\n            defaultMessage: 'You don\\'t have any patterns yet.',\n          })}\n          shadow=\"tableShadow\"\n          hasRadius\n        />\n      )}\n      <PaginationFooter pagination={pagination} />\n    </div>\n  );\n};\n\nexport default TableComponent;\n","import React from 'react';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport { useQuery } from 'react-query';\nimport {\n  Button,\n  Box,\n} from '@strapi/design-system';\n\nimport { Plus } from '@strapi/icons';\nimport { getFetchClient, Layouts, Page } from '@strapi/strapi/admin';\n\nimport pluginId from '../../../helpers/pluginId';\nimport Table from './components/Table';\nimport { PatternEntity } from '../../../types/url-patterns';\nimport { GenericResponse } from '../../../types/content-api';\nimport pluginPermissions from '../../../permissions';\nimport { EnabledContentTypes } from '../../../types/enabled-contenttypes';\nimport useQueryParams from '../../../hooks/useQueryParams';\n\nexport type Pagination = {\n  page: number;\n  pageSize: number;\n  pageCount: number;\n  total: number;\n};\n\nconst ListPatternPage = () => {\n  const { get } = getFetchClient();\n  const params = useQueryParams();\n\n  const items = useQuery(\n    ['url-patterns', params],\n    async () => get<GenericResponse<PatternEntity[]>>(`/webtools/url-pattern/findMany?${params}`),\n  );\n  const contentTypes = useQuery('content-types', async () => get<EnabledContentTypes>('/webtools/info/getContentTypes'));\n\n  const { formatMessage } = useIntl();\n  const navigate = useNavigate();\n\n  if (items.isLoading || contentTypes.isLoading) {\n    return (\n      <Page.Loading />\n    );\n  }\n\n  if (items.error || contentTypes.error) {\n    return (\n      <Page.Error />\n    );\n  }\n\n  return (\n    <Page.Protect permissions={pluginPermissions['settings.patterns']}>\n      <Box>\n        <Layouts.Header\n          title={formatMessage({ id: 'webtools.settings.page.patterns.title', defaultMessage: 'URL patterns' })}\n          subtitle={formatMessage({ id: 'webtools.settings.page.patterns.description', defaultMessage: 'A list of all the known URL alias patterns.' })}\n          primaryAction={(\n            <Button onClick={() => navigate(`/plugins/${pluginId}/patterns/new`)} startIcon={<Plus />}>\n              {formatMessage({\n                id: 'webtools.settings.button.add_pattern',\n                defaultMessage: 'Add new pattern',\n              })}\n            </Button>\n          )}\n        />\n        <Layouts.Content>\n          <Table\n            patterns={items.data.data.data}\n            pagination={items.data.data.meta.pagination}\n            contentTypes={contentTypes.data.data}\n          />\n        </Layouts.Content>\n      </Box>\n    </Page.Protect>\n  );\n};\n\nexport default ListPatternPage;\n","import * as yup from 'yup';\nimport { translatedErrors } from '@strapi/strapi/admin';\n\nconst schema = yup.object().shape({\n  pattern: yup.string().required(translatedErrors.required),\n  contenttype: yup.string().required(translatedErrors.required),\n  languages: yup.array().when('localized', {\n    is: true,\n    then: yup.array().min(1, 'Select at least one language'),\n    otherwise: yup.array().notRequired(),\n  }),\n});\n\nexport default schema;\n","import React, { FC } from 'react';\nimport { Field, SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { FormikErrors } from 'formik';\n\ntype ListItem = {\n  uid: string,\n  name: string,\n};\n\ntype Props = {\n  list?: ListItem[];\n  name: string;\n  label?: string;\n  placeholder?: string;\n  hint?: string;\n  value?: string;\n  error?: string | null;\n  setFieldValue: (field: string, value: any) => Promise<void | FormikErrors<any>>;\n};\n\nconst SelectComponent: FC<Props> = ({\n  list,\n  name,\n  label,\n  placeholder,\n  hint,\n  value,\n  error,\n  setFieldValue,\n}) => {\n  if (!list || list.length < 0) {\n    return null;\n  }\n\n  return (\n    <Field.Root\n      hint={hint}\n      error={error}\n      width=\"100%\"\n    >\n      <Field.Label>\n        {label}\n      </Field.Label>\n      <SingleSelect\n        name={name}\n        placeholder={placeholder}\n        value={value}\n        // eslint-disable-next-line @typescript-eslint/no-misused-promises\n        onChange={(v: any) => setFieldValue(name, v)}\n      >\n        {list.map((item) => (\n          <SingleSelectOption key={item.uid} value={item.uid}>\n            {item.name}\n          </SingleSelectOption>\n        ))}\n      </SingleSelect>\n      <Field.Hint />\n      <Field.Error />\n    </Field.Root>\n  );\n};\n\nexport default SelectComponent;\n","import React, {\n  FC,\n} from 'react';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { FormikErrors } from 'formik';\nimport { useQuery } from 'react-query';\n\nimport {\n  TextInput, Popover, Box, Loader,\n  Field,\n} from '@strapi/design-system';\nimport { getFetchClient } from '@strapi/strapi/admin';\nimport { PatternFormValues } from '../../types/url-patterns';\nimport { Theme } from '../../types/theme';\n\ntype Props = {\n  uid: string;\n  error?: string;\n  values: PatternFormValues;\n  setFieldValue: (field: string, value: any) => Promise<void | FormikErrors<PatternFormValues>>;\n};\n\nconst HoverBox = styled(Box)`\n  cursor: pointer;\n  font-size: 16px;\n  &:hover:not([aria-disabled=\"true\"]) {\n    background: ${({ theme }: { theme: Theme }) => theme.colors.primary100};\n  }\n`;\n\nconst PopoverBody = styled(Box)`\n  max-height: min(50vh, 24rem);\n  width: calc(100% + 10px);\n  overflow-y: auto;\n  overscroll-behavior: contain;\n`;\n\nconst PatternField: FC<Props> = ({\n  uid,\n  values,\n  error = null,\n  setFieldValue,\n}) => {\n  const { get } = getFetchClient();\n  const fields = useQuery('fields', async () => get<Record<string, string[]>>('/webtools/url-pattern/allowed-fields'));\n  const { formatMessage } = useIntl();\n\n  const patternHint = () => {\n    const base = formatMessage({\n      id: 'webtools.settings.form.pattern.description_1',\n      defaultMessage: 'Create a URL alias pattern',\n    });\n    let suffix = '';\n    if (fields.data.data?.[uid]) {\n      suffix = ` ${formatMessage({\n        id: 'webtools.settings.form.pattern.description_2',\n        defaultMessage: 'using',\n      })} `;\n      fields.data.data[uid].forEach((fieldName, i) => {\n        if (i === 0) {\n          suffix = `${suffix}[${fieldName}]`;\n        } else if (fields.data.data[uid].length !== i + 1) {\n          suffix = `${suffix}, [${fieldName}]`;\n        } else {\n          suffix = `${suffix} ${formatMessage({\n            id: 'webtools.settings.form.pattern.description_3',\n            defaultMessage: 'or',\n          })} [${fieldName}]`;\n        }\n      });\n    }\n\n    return base + suffix;\n  };\n\n\n  if (fields.isLoading) {\n    return <Loader>{formatMessage({ id: 'webtools.settings.loading', defaultMessage: 'Loading content...' })}</Loader>;\n  }\n\n  if (fields.isError || !fields.data) {\n    return <div>{formatMessage({ id: 'webtools.pattern.allowedFields.fetchError', defaultMessage: 'An error occurred while fetching allowed fields' })}</div>;\n  }\n\n  return (\n    <div>\n      <Popover.Root open={values.pattern.endsWith('[')}>\n        <Popover.Trigger>\n          <Field.Root error={error} hint={patternHint()}>\n            <Field.Label>\n              {formatMessage({\n                id: 'webtools.settings.form.pattern.label',\n                defaultMessage: 'Pattern',\n              })}\n            </Field.Label>\n            <TextInput\n              name=\"pattern\"\n              value={values.pattern}\n              placeholder=\"/en/pages/[id]\"\n              // eslint-disable-next-line @typescript-eslint/no-misused-promises\n              onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n                if (e.target.value.match(/^[A-Za-z0-9-_.~[\\]/]*$/)) {\n                  return setFieldValue('pattern', e.target.value);\n                }\n\n                return null;\n              }}\n            />\n            <Field.Hint />\n            <Field.Error />\n          </Field.Root>\n        </Popover.Trigger>\n        <Popover.Content>\n          <PopoverBody>\n            {fields.data.data[uid].map((fieldName) => (\n              <HoverBox\n                key={fieldName}\n                padding={2}\n                onClick={() => {\n                  const newPattern = `${values.pattern}${fieldName}]`;\n                  return setFieldValue('pattern', newPattern);\n                }}\n              >\n                {fieldName}\n              </HoverBox>\n            ))}\n          </PopoverBody>\n        </Popover.Content>\n      </Popover.Root>\n    </div>\n  );\n};\n\nexport default PatternField;\n","import * as React from 'react';\n\nimport { FormikErrors } from 'formik';\n\ntype Props = {\n  localized: boolean;\n  setFieldValue:\n  (field: string, value: any, shouldValidate?: boolean) =>\n  Promise<void | FormikErrors<any>>\n};\n\nconst HiddenLocalizedField = (props: Props) => {\n  const { localized, setFieldValue } = props;\n\n  React.useEffect(() => {\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    setFieldValue('localized', localized);\n  }, [localized, setFieldValue]);\n\n  return null;\n};\n\nexport default HiddenLocalizedField;\n","import * as React from 'react';\n\nimport {\n  Flex,\n  Checkbox,\n  Field,\n} from '@strapi/design-system';\nimport { getFetchClient } from '@strapi/strapi/admin';\nimport { useQuery } from 'react-query';\n\nimport { EnabledContentTypes } from '../../types/enabled-contenttypes';\n\ntype Props = {\n  selectedLanguages: string[];\n  onChange: (selectedLanguages: string[]) => any;\n  error?: any;\n};\n\nconst LanguageCheckboxes = ({\n  selectedLanguages,\n  onChange,\n  error,\n}: Props) => {\n  const { get } = getFetchClient();\n  const languages = useQuery('languages', async () => get<EnabledContentTypes>('/webtools/info/getLanguages'));\n\n  if (languages.isLoading) {\n    return null;\n  }\n\n  return (\n    <Field.Root name=\"password\" error={error as string}>\n      <Field.Label>Select the language</Field.Label>\n      <Flex direction=\"column\" alignItems=\"start\" gap=\"1\" marginTop=\"2\">\n        {languages.data.data.map((contentType) => (\n          <Checkbox\n            aria-label={`Select ${contentType.name}`}\n            checked={selectedLanguages.includes(contentType.uid)}\n            onCheckedChange={() => {\n              if (selectedLanguages.includes(contentType.uid)) {\n                const newContentTypes = selectedLanguages\n                  .filter((uid) => uid !== contentType.uid);\n\n                onChange(newContentTypes);\n\n                return;\n              }\n              onChange([...selectedLanguages, contentType.uid]);\n            }}\n          >\n            {contentType.name}\n          </Checkbox>\n        ))}\n        <Field.Error />\n      </Flex>\n    </Field.Root>\n  );\n};\n\nexport default LanguageCheckboxes;\n","import React from 'react';\nimport { useIntl } from 'react-intl';\nimport { Formik, Form, FormikProps } from 'formik';\nimport { useParams, useNavigate, Link } from 'react-router-dom';\nimport { useQuery } from 'react-query';\nimport {\n  Box,\n  Link as DsLink,\n  Button,\n  Flex,\n  Typography,\n  Grid,\n} from '@strapi/design-system';\nimport {\n  useNotification,\n  getFetchClient,\n  Layouts,\n  Page,\n} from '@strapi/strapi/admin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport { ErrorResponse } from '../../../types/error-response';\nimport schema from './utils/schema';\nimport pluginId from '../../../helpers/pluginId';\nimport Select from '../../../components/Select';\nimport PatternField from '../../../components/PatternField';\nimport { PatternEntity, PatternFormValues, ValidatePatternResponse } from '../../../types/url-patterns';\nimport { EnabledContentTypes } from '../../../types/enabled-contenttypes';\nimport HiddenLocalizedField from '../../../components/HiddenLocalizedField';\nimport LanguageCheckboxes from '../../../components/LanguageCheckboxes';\nimport { GenericResponse } from '../../../types/content-api';\nimport pluginPermissions from '../../../permissions';\n\nconst EditPatternPage = () => {\n  const navigate = useNavigate();\n  const { id } = useParams<{ id: string }>();\n  const { toggleNotification } = useNotification();\n  const { get, put, post } = getFetchClient();\n  const pattern = useQuery(['url-pattern', id], async () => get<GenericResponse<PatternEntity>>(`/webtools/url-pattern/findOne/${id}`));\n  const contentTypes = useQuery('content-types', async () => get<EnabledContentTypes>('/webtools/info/getContentTypes'));\n  const { formatMessage } = useIntl();\n\n  const handleEditSubmit = async (\n    values: PatternFormValues,\n    { setSubmitting }: FormikProps<PatternFormValues>,\n  ) => {\n    try {\n      // Proceed to update the current pattern\n      await put(`/webtools/url-pattern/update/${pattern.data.data.data.documentId}`, {\n        data: {\n          pattern: values.pattern,\n          languages: values.languages,\n          contenttype: values.contenttype,\n        },\n      });\n\n      navigate(`/plugins/${pluginId}/patterns`);\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({ id: 'webtools.settings.success.edit' }),\n      });\n      setSubmitting(false);\n    } catch (err) {\n      toggleNotification({\n        type: 'danger',\n        message: formatMessage({ id: 'notification.error' }),\n      });\n      setSubmitting(false);\n    }\n  };\n\n  const validatePattern = async (values: PatternFormValues) => {\n    const errors: Record<string, any> = {};\n\n    await post('/webtools/url-pattern/validate', {\n      pattern: values.pattern,\n      modelName: values.contenttype,\n    })\n      .then((res) => {\n        const response = res.data as unknown as ValidatePatternResponse;\n        if (response.valid === false) {\n          errors.pattern = response.message;\n        }\n      })\n      .catch((err: ErrorResponse) => {\n        console.error(err, 'Error in edit validate pattern');\n      });\n\n    return errors;\n  };\n\n  if (pattern.isLoading || contentTypes.isLoading) {\n    return (\n      <Page.Loading />\n    );\n  }\n\n  const getSelectedContentType = (uid: string) => {\n    const selectedContentType = contentTypes.data.data.filter(\n      (type) => type.uid === uid,\n    )[0];\n\n    return selectedContentType;\n  };\n\n  return (\n    <Page.Protect permissions={pluginPermissions['settings.patterns']}>\n      <Formik<PatternFormValues>\n        enableReinitialize\n        initialValues={{\n          pattern: pattern.data.data.data.pattern,\n          contenttype: pattern.data.data.data.contenttype,\n          languages: pattern.data.data.data.languages,\n          localized: false,\n        }}\n        onSubmit={handleEditSubmit}\n        validationSchema={schema}\n        validate={validatePattern}\n      >\n        {({\n          handleSubmit,\n          values,\n          errors,\n          touched,\n          isSubmitting,\n          setFieldValue,\n        }) => (\n          <Form noValidate onSubmit={handleSubmit}>\n            <Layouts.Header\n              title={formatMessage({\n                id: 'webtools.settings.page.patterns.edit.title',\n                defaultMessage: 'Edit pattern',\n              })}\n              subtitle={formatMessage({\n                id: 'webtools.settings.page.patterns.edit.description',\n                defaultMessage:\n                  'Edit this pattern for automatic URL alias generation.',\n              })}\n              navigationAction={(\n                <DsLink\n                  tag={Link}\n                  startIcon={<ArrowLeft />}\n                  to={`/plugins/${pluginId}/patterns`}\n                >\n                  {formatMessage({\n                    id: 'global.back',\n                    defaultMessage: 'Back',\n                  })}\n                </DsLink>\n              )}\n              primaryAction={(\n                <Button\n                  type=\"submit\"\n                  loading={isSubmitting}\n                  startIcon={<Check />}\n                >\n                  {formatMessage({\n                    id: 'global.save',\n                    defaultMessage: 'Save',\n                  })}\n                </Button>\n              )}\n            />\n            <Layouts.Content>\n              <Flex>\n                <Box\n                  background=\"neutral0\"\n                  hasRadius\n                  shadow=\"filterShadow\"\n                  paddingTop={6}\n                  paddingBottom={6}\n                  paddingLeft={7}\n                  paddingRight={7}\n                >\n                  <Typography variant=\"delta\">\n                    {formatMessage({\n                      id: 'webtools.settings.page.patterns.edit.subtitle',\n                      defaultMessage: 'Pattern details',\n                    })}\n                  </Typography>\n                  <Grid.Root gap={4} marginTop=\"4\">\n                    <Grid.Item col={6} gap=\"4\" alignItems=\"flex-start\" direction=\"column\">\n                      <Select\n                        name=\"contenttype\"\n                        list={contentTypes.data.data}\n                        value={values.contenttype || ''}\n                        setFieldValue={setFieldValue}\n                        label={formatMessage({\n                          id: 'webtools.settings.form.contenttype.label',\n                          defaultMessage: 'Content type',\n                        })}\n                        error={\n                          errors.contenttype && touched.contenttype\n                            ? formatMessage({\n                              id:\n                                typeof errors.contenttype === 'string'\n                                  ? errors.contenttype\n                                  : undefined,\n                              defaultMessage: 'Invalid value',\n                            })\n                            : null\n                        }\n                      />\n                      {values.contenttype !== '' && (\n                        <PatternField\n                          values={values}\n                          uid={values.contenttype}\n                          setFieldValue={setFieldValue}\n                          error={\n                              errors.pattern\n                              && touched.pattern\n                              && typeof errors.pattern === 'string'\n                                ? errors.pattern\n                                : null\n                            }\n                        />\n                      )}\n                      <HiddenLocalizedField\n                        localized={getSelectedContentType(values.contenttype)?.localized}\n                        setFieldValue={setFieldValue}\n                      />\n                      {values.localized && (\n                        <LanguageCheckboxes\n                          onChange={(newLanguages) => setFieldValue('languages', newLanguages)}\n                          selectedLanguages={values.languages}\n                          error={\n                            errors.languages && touched.languages\n                              ? errors.languages\n                              : null\n                          }\n                        />\n                      )}\n                    </Grid.Item>\n                  </Grid.Root>\n                </Box>\n              </Flex>\n            </Layouts.Content>\n          </Form>\n        )}\n      </Formik>\n    </Page.Protect>\n  );\n};\n\nexport default EditPatternPage;\n","import * as yup from 'yup';\nimport { translatedErrors } from '@strapi/strapi/admin';\n\nconst schema = () => yup.object().shape({\n  pattern: yup.string().required(translatedErrors.required),\n  contenttype: yup.string().required(translatedErrors.required),\n  languages: yup.array().when('localized', {\n    is: true,\n    then: yup.array().min(1, 'Select at least one language'),\n    otherwise: yup.array().notRequired(),\n  }),\n});\n\nexport default schema;\n","import React from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n  Formik,\n  Form,\n  FormikConfig,\n} from 'formik';\nimport { useNavigate, Link } from 'react-router-dom';\nimport { useQuery } from 'react-query';\n\nimport {\n  Box,\n  Link as DsLink,\n  Button,\n  Typography,\n  Grid,\n  EmptyStateLayout,\n} from '@strapi/design-system';\nimport {\n  useNotification,\n  getFetchClient,\n  Layouts,\n  Page,\n} from '@strapi/strapi/admin';\nimport { ArrowLeft, Check, ExternalLink } from '@strapi/icons';\nimport schema from './utils/schema';\nimport { ErrorResponse } from '../../../types/error-response';\nimport pluginId from '../../../helpers/pluginId';\nimport Select from '../../../components/Select';\nimport PatternField from '../../../components/PatternField';\nimport { PatternFormValues, ValidatePatternResponse } from '../../../types/url-patterns';\nimport { EnabledContentTypes } from '../../../types/enabled-contenttypes';\nimport LanguageCheckboxes from '../../../components/LanguageCheckboxes';\nimport HiddenLocalizedField from '../../../components/HiddenLocalizedField';\nimport pluginPermissions from '../../../permissions';\n\nconst CreatePatternPage = () => {\n  const navigate = useNavigate();\n  const { toggleNotification } = useNotification();\n  const { get, post } = getFetchClient();\n  const contentTypes = useQuery('content-types', async () => get<EnabledContentTypes>('/webtools/info/getContentTypes'));\n  const { formatMessage } = useIntl();\n\n  const handleCreateSubmit: FormikConfig<any>['onSubmit'] = async (\n    values: PatternFormValues,\n    { setSubmitting },\n  ) => {\n    try {\n      // Proceed to create the new pattern\n      await post('/webtools/url-pattern/create', {\n        data: {\n          pattern: values.pattern,\n          languages: values.languages,\n          contenttype: values.contenttype,\n        },\n      });\n\n      navigate(`/plugins/${pluginId}/patterns`);\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({ id: 'webtools.settings.success.create' }),\n      });\n      setSubmitting(false);\n    } catch (err) {\n      toggleNotification({\n        type: 'danger',\n        message: formatMessage({ id: 'notification.error' }),\n      });\n      setSubmitting(false);\n    }\n  };\n\n  const validatePattern = async (values: PatternFormValues) => {\n    const errors = {};\n\n    await post<ValidatePatternResponse>('/webtools/url-pattern/validate', {\n      pattern: values.pattern,\n      modelName: values.contenttype,\n    })\n      .then((res) => {\n        const response = res.data;\n        if (response.valid === false) {\n          // @ts-expect-error\n          errors.pattern = response.message;\n        }\n      })\n      .catch((err: ErrorResponse) => {\n        console.error(err, 'Error in create validate pattern');\n      });\n\n    return errors;\n  };\n\n  if (contentTypes.isLoading || !contentTypes.data) {\n    return <Page.Loading />;\n  }\n\n  const getSelectedContentType = (uid: string) => {\n    const selectedContentType = contentTypes.data.data.find((type) => type.uid === uid);\n    return selectedContentType;\n  };\n\n  return (\n    <Page.Protect permissions={pluginPermissions['settings.patterns']}>\n      <Formik<PatternFormValues>\n        enableReinitialize\n        initialValues={{\n          pattern: '', contenttype: '', languages: [], localized: false,\n        }}\n        onSubmit={handleCreateSubmit}\n        validationSchema={schema}\n        validate={validatePattern}\n        validateOnChange={false}\n      >\n        {({\n          handleSubmit,\n          values,\n          errors,\n          touched,\n          isSubmitting,\n          setFieldValue,\n        }) => (\n          <Form noValidate onSubmit={handleSubmit}>\n            <Layouts.Header\n              title={formatMessage({\n                id: 'webtools.settings.page.patterns.create.title',\n                defaultMessage: 'Add new pattern',\n              })}\n              subtitle={formatMessage({\n                id: 'webtools.settings.page.patterns.create.description',\n                defaultMessage: 'Add a pattern for automatic URL alias generation.',\n              })}\n              navigationAction={(\n                <DsLink startIcon={<ArrowLeft />} tag={Link} to={`/plugins/${pluginId}/patterns`}>\n                  {formatMessage({\n                    id: 'global.back',\n                    defaultMessage: 'Back',\n                  })}\n                </DsLink>\n              )}\n              primaryAction={(\n                <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />}>\n                  {formatMessage({\n                    id: 'global.save',\n                    defaultMessage: 'Save',\n                  })}\n                </Button>\n              )}\n            />\n            <Layouts.Content>\n              {contentTypes.data.data.length > 0 ? (\n                <Box\n                  background=\"neutral0\"\n                  hasRadius\n                  shadow=\"filterShadow\"\n                  paddingTop={6}\n                  paddingBottom={6}\n                  paddingLeft={7}\n                  paddingRight={7}\n                >\n                  <Typography variant=\"delta\">\n                    {formatMessage({\n                      id: 'webtools.settings.page.patterns.create.subtitle',\n                      defaultMessage: 'Pattern details',\n                    })}\n                  </Typography>\n                  <Grid.Root gap={4} marginTop={4}>\n                    <Grid.Item col={6} direction=\"column\" alignItems=\"flex-start\" gap=\"4\">\n                      <Select\n                        name=\"contenttype\"\n                        list={contentTypes.data.data}\n                        value={values.contenttype || ''}\n                        setFieldValue={setFieldValue}\n                        label={formatMessage({\n                          id: 'webtools.settings.form.contenttype.label',\n                          defaultMessage: 'Content type',\n                        })}\n                        error={\n                          errors.contenttype && touched.contenttype\n                            ? formatMessage({ id: String(errors.contenttype), defaultMessage: 'Invalid value' })\n                            : null\n                        }\n                      />\n                      {(values.contenttype !== '') && (\n                        <PatternField\n                          values={values}\n                          uid={values.contenttype}\n                          setFieldValue={setFieldValue}\n                          error={\n                            errors.pattern && touched.pattern\n                              ? errors.pattern\n                              : null\n                          }\n                        />\n                      )}\n                      <HiddenLocalizedField\n                        localized={getSelectedContentType(values.contenttype)?.localized}\n                        setFieldValue={setFieldValue}\n                      />\n                      {values.localized && (\n                        <LanguageCheckboxes\n                          onChange={(newLanguages) => setFieldValue('languages', newLanguages)}\n                          selectedLanguages={values.languages}\n                          error={\n                            errors.languages && touched.languages\n                              ? errors.languages\n                              : null\n                          }\n                        />\n                      )}\n                    </Grid.Item>\n                  </Grid.Root>\n                </Box>\n              ) : (\n                <EmptyStateLayout\n                  content={formatMessage({\n                    id: 'webtools.create.page.contenttypes.empty',\n                    defaultMessage: 'Before you can create a pattern, you need to enable Webtools for at least one content type.',\n                  })}\n                  action={(\n                    <Button\n                      variant=\"secondary\"\n                      tag={Link}\n                      to=\"https://docs.pluginpal.io/webtools/usage\"\n                      startIcon={<ExternalLink />}\n                      target=\"_blank\"\n                    >\n                      {formatMessage({\n                        id: 'webtools.create.button.read_docs',\n                        defaultMessage: 'Learn how to enable Webtools',\n                      })}\n                    </Button>\n                  )}\n                  shadow=\"tableShadow\"\n                  hasRadius\n                />\n              )}\n            </Layouts.Content>\n          </Form>\n        )}\n      </Formik>\n    </Page.Protect>\n  );\n};\n\nexport default CreatePatternPage;\n","import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Layouts } from '@strapi/strapi/admin';\n\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { ArrowRight } from '@strapi/icons';\nimport { Link } from 'react-router-dom';\nimport { useIntl } from 'react-intl';\n\nconst PageNotFound = () => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <>\n      <Layouts.Header\n        title={formatMessage({ id: 'webtools.settings.page.404.title', defaultMessage: 'Page not found' })}\n      />\n      <Layouts.Content>\n        <EmptyStateLayout\n          content=\"Oops! We can't seem to find the page you're looking for...\"\n          icon={<EmptyDocuments width=\"16rem\" />}\n          action={<LinkButton variant=\"secondary\" tag={Link} to=\"/plugins/webtools\" endIcon={<ArrowRight />}>Back to homepage</LinkButton>}\n          shadow=\"tableShadow\"\n          hasRadius\n        />\n      </Layouts.Content>\n    </>\n  );\n};\n\nexport default PageNotFound;\n","import React, { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n  SubNavLink,\n  Tooltip,\n} from '@strapi/design-system';\nimport { Lock } from '@strapi/icons';\nimport { LockedAddonMenuItemProps } from '../../types/pro-addons';\nimport TrialModal from '../TrialModal';\n\nconst LockedAddonMenuItem: React.FC<LockedAddonMenuItemProps> = ({ addon }) => {\n  const { formatMessage } = useIntl();\n  const [isModalOpen, setIsModalOpen] = useState(false);\n\n  const handleClick = (e: React.MouseEvent) => {\n    e.preventDefault();\n    setIsModalOpen(true);\n  };\n\n  return (\n    <>\n      <Tooltip\n        description={formatMessage({\n          id: 'webtools.sidebar.locked_addon.tooltip',\n          defaultMessage: 'Start free trial to unlock',\n        })}\n      >\n        <SubNavLink\n          onClick={handleClick}\n          style={{\n            cursor: 'pointer',\n            opacity: 0.5,\n            pointerEvents: 'auto',\n          }}\n        >\n          <span style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n            <Lock width=\"12px\" height=\"12px\" />\n            {addon.name}\n          </span>\n        </SubNavLink>\n      </Tooltip>\n\n      <TrialModal\n        addon={addon}\n        isOpen={isModalOpen}\n        onClose={() => setIsModalOpen(false)}\n      />\n    </>\n  );\n};\n\nexport default LockedAddonMenuItem;\n","import React from 'react';\nimport {\n  Routes,\n  Route,\n  useLocation,\n  Link,\n} from 'react-router-dom';\n\nimport { useIntl } from 'react-intl';\nimport {\n  SubNav,\n  SubNavHeader,\n  SubNavSections,\n  SubNavSection,\n  SubNavLink,\n} from '@strapi/design-system';\nimport {\n  useStrapiApp,\n  Layouts,\n  useRBAC,\n  getFetchClient,\n} from '@strapi/strapi/admin';\nimport { useQuery } from 'react-query';\n\nimport pluginPermissions from '../../permissions';\nimport pluginId from '../../helpers/pluginId';\nimport List from '../../screens/List';\nimport Overview from '../../screens/Overview';\nimport PatternsListPage from '../../screens/Patterns/ListPage';\nimport PatternsEditPage from '../../screens/Patterns/EditPage';\nimport PatternsCreatePage from '../../screens/Patterns/CreatePage';\nimport PageNotFound from '../../screens/404';\nimport { InjectedRoute } from '../../types/injection-zones';\nimport { WebtoolsAddonInfo } from '../../types/addons';\nimport { PRO_ADDONS } from '../../constants/pro-addons';\nimport LockedAddonMenuItem from '../../components/LockedAddonMenuItem';\n\nconst App = () => {\n  const getPlugin = useStrapiApp('MyComponent', (state) => state.getPlugin);\n  const {\n    allowedActions: { canList, canPatterns, canOverview },\n  } = useRBAC(pluginPermissions);\n  const { formatMessage } = useIntl();\n\n  const plugin = getPlugin(pluginId);\n\n  const routerComponents = plugin?.getInjectedComponents('webtoolsRouter', 'route') as unknown as InjectedRoute[];\n\n  const location = useLocation();\n  const currentPath = location.pathname;\n\n  const { get } = getFetchClient();\n  const addonsQuery = useQuery('addons', async () => get<WebtoolsAddonInfo[]>('/webtools/info/addons'));\n\n  const installedPluginNames = Object.values(addonsQuery.data?.data || {})\n    .map((addon) => addon.info.name);\n\n  // Strip npm scope: \"@pluginpal/webtools-addon-redirects\" → \"webtools-addon-redirects\"\n  const getPluginName = (packageName: string) => {\n    if (packageName.includes('/')) return packageName.split('/')[1];\n    return packageName;\n  };\n\n  // Find locked addons (Pro addons that are NOT installed)\n  const lockedAddons = PRO_ADDONS.filter(\n    (addon) => !installedPluginNames.includes(getPluginName(addon.packageName)),\n  );\n\n  return (\n    <Layouts.Root\n      sideNav={(\n        <SubNav>\n          <SubNavHeader value=\"\" label=\"Webtools\" />\n          <SubNavSections>\n            <SubNavSection label=\"Core\">\n              {canOverview && (\n                <SubNavLink tag={Link} to=\"/plugins/webtools\" key=\"overview\" className={currentPath === '/plugins/webtools' ? 'active' : ''}>\n                  {formatMessage({ id: 'webtools.settings.page.overview.title', defaultMessage: 'Overview' })}\n                </SubNavLink>\n              )}\n              {canList && (\n                <SubNavLink tag={Link} to=\"/plugins/webtools/urls\" key=\"list\" className={currentPath.startsWith('/plugins/webtools/urls') ? 'active' : ''}>\n                  {formatMessage({ id: 'webtools.settings.page.list.title', defaultMessage: 'All URLs' })}\n                </SubNavLink>\n              )}\n              {canPatterns && (\n                <SubNavLink tag={Link} to=\"/plugins/webtools/patterns\" key=\"patterns\" className={currentPath.startsWith('/plugins/webtools/patterns') ? 'active' : ''}>\n                  {formatMessage({ id: 'webtools.settings.page.patterns.title', defaultMessage: 'URL patterns' })}\n                </SubNavLink>\n              )}\n            </SubNavSection>\n            {(routerComponents.length > 0 || lockedAddons.length > 0) && (\n              <SubNavSection label=\"Addons\">\n                {/* Installed addons - existing functionality */}\n                {routerComponents.map(({ path, label }) => label && (\n                  <SubNavLink tag={Link} to={`/plugins/webtools${path}`} key={path} className={currentPath.startsWith(`/plugins/webtools${path}`) ? 'active' : ''}>\n                    {label}\n                  </SubNavLink>\n                ))}\n\n                {/* Locked Pro addons - new functionality */}\n                {lockedAddons.map((addon) => (\n                  <LockedAddonMenuItem key={addon.id} addon={addon} />\n                ))}\n              </SubNavSection>\n            )}\n          </SubNavSections>\n        </SubNav>\n      )}\n    >\n      <Routes>\n        <Route path=\"/\" element={<Overview />} />\n        <Route path=\"/urls\" element={<List />} />\n        <Route path=\"/patterns\" element={<PatternsListPage />} />\n        <Route path=\"/patterns/new\" element={<PatternsCreatePage />} />\n        <Route path=\"/patterns/:id\" element={<PatternsEditPage />} />\n        {routerComponents.map(({ path, Component }) => (\n          <Route key={path} path={path} element={<Component />} />\n        ))}\n\n        <Route path=\"*\" element={<PageNotFound />} />\n      </Routes>\n    </Layouts.Root>\n  );\n};\n\nexport default App;\n"],"names":["PaginationFooter","StrapiPagination","StrapiFilters","TableComponent","React","List","Table","LinkIcon","Link","schema","DsLink","Select","Overview","PatternsListPage","PatternsCreatePage","PatternsEditPage"],"mappings":"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"}