@mattisvensson/strapi-plugin-webatlas 0.10.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +2 -1
  2. package/dist/admin/FullLoader-Cmsf8xS6.js +1 -0
  3. package/dist/admin/FullLoader-Cmsf8xS6.js.map +1 -0
  4. package/dist/admin/FullLoader-CrPED_dY.mjs +1 -0
  5. package/dist/admin/FullLoader-CrPED_dY.mjs.map +1 -0
  6. package/dist/admin/{SettingTitle-DbsxB1V9.mjs → SettingTitle-B1IaU3qs.mjs} +2 -1
  7. package/dist/admin/SettingTitle-B1IaU3qs.mjs.map +1 -0
  8. package/dist/admin/{SettingTitle-uw1S5OmC.js → SettingTitle-BjE_2u6R.js} +2 -1
  9. package/dist/admin/SettingTitle-BjE_2u6R.js.map +1 -0
  10. package/dist/admin/de-B5pRvs13.mjs +1 -0
  11. package/dist/admin/de-B5pRvs13.mjs.map +1 -0
  12. package/dist/admin/de-CqU1FU8C.js +1 -0
  13. package/dist/admin/de-CqU1FU8C.js.map +1 -0
  14. package/dist/admin/en-BE-zzIv8.mjs +1 -0
  15. package/dist/admin/en-BE-zzIv8.mjs.map +1 -0
  16. package/dist/admin/en-C7I90FwV.js +1 -0
  17. package/dist/admin/en-C7I90FwV.js.map +1 -0
  18. package/dist/admin/{index-BXt-QjKo.js → index-AVI3QJ0R.js} +2 -1
  19. package/dist/admin/index-AVI3QJ0R.js.map +1 -0
  20. package/dist/admin/{index-CGsC8P9P.js → index-B90eSO4a.js} +3 -2
  21. package/dist/admin/index-B90eSO4a.js.map +1 -0
  22. package/dist/admin/{index-tPrfjOIn.mjs → index-BIEUXWe7.mjs} +2 -1
  23. package/dist/admin/index-BIEUXWe7.mjs.map +1 -0
  24. package/dist/admin/{index-CUaBX_v-.mjs → index-BbnlyBrZ.mjs} +3 -2
  25. package/dist/admin/index-BbnlyBrZ.mjs.map +1 -0
  26. package/dist/admin/{index-BKWY9Ta-.mjs → index-Cf9j0bn2.mjs} +2 -1
  27. package/dist/admin/index-Cf9j0bn2.mjs.map +1 -0
  28. package/dist/admin/{index-BYlmJycd.js → index-D8bG0YFB.js} +3 -2
  29. package/dist/admin/index-D8bG0YFB.js.map +1 -0
  30. package/dist/admin/{index-CIr8o1RP.mjs → index-DCYCtKrj.mjs} +118 -106
  31. package/dist/admin/index-DCYCtKrj.mjs.map +1 -0
  32. package/dist/admin/{index-DkqiqVx2.js → index-JLpXBQVL.js} +2 -1
  33. package/dist/admin/index-JLpXBQVL.js.map +1 -0
  34. package/dist/admin/{index-B07KlG03.mjs → index-Y_PYIiRA.mjs} +3 -2
  35. package/dist/admin/index-Y_PYIiRA.mjs.map +1 -0
  36. package/dist/admin/{index-DC5WwNdi.js → index-Yq-QR8t0.js} +118 -106
  37. package/dist/admin/index-Yq-QR8t0.js.map +1 -0
  38. package/dist/admin/index.js +2 -1
  39. package/dist/admin/index.js.map +1 -0
  40. package/dist/admin/index.mjs +2 -1
  41. package/dist/admin/index.mjs.map +1 -0
  42. package/dist/server/index.js +384 -259
  43. package/dist/server/index.js.map +1 -0
  44. package/dist/server/index.mjs +384 -259
  45. package/dist/server/index.mjs.map +1 -0
  46. package/package.json +1 -1
  47. package/dist/admin/src/index.d.ts +0 -12
  48. package/dist/server/src/index.d.ts +0 -301
@@ -2,11 +2,11 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useReducer, useState, useRef, useEffect } from "react";
3
3
  import { Field } from "@strapi/design-system";
4
4
  import { useNotification, Page } from "@strapi/strapi/admin";
5
- import { c as usePluginConfig, g as getTranslation, p as pluginPermissions } from "./index-CIr8o1RP.mjs";
5
+ import { c as usePluginConfig, g as getTranslation, p as pluginPermissions } from "./index-DCYCtKrj.mjs";
6
6
  import { useIntl } from "react-intl";
7
7
  import "@strapi/icons/symbols";
8
8
  import { F as FullLoader } from "./FullLoader-CrPED_dY.mjs";
9
- import { P as PageWrapper, C as ContentBox, S as SettingTitle } from "./SettingTitle-DbsxB1V9.mjs";
9
+ import { P as PageWrapper, C as ContentBox, S as SettingTitle } from "./SettingTitle-B1IaU3qs.mjs";
10
10
  function reducer(newConfig, action) {
11
11
  switch (action.type) {
12
12
  case "SET_MAX_DEPTH":
@@ -126,3 +126,4 @@ const Settings = () => {
126
126
  export {
127
127
  Settings as default
128
128
  };
129
+ //# sourceMappingURL=index-BbnlyBrZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BbnlyBrZ.mjs","sources":["../../admin/src/pages/Settings/Navigation/index.tsx"],"sourcesContent":["/*\n *\n * Settings\n * This file contains the navigation settings page for the Webatlas plugin.\n * It allows users to set the max depth of the navigation tree.\n *\n*/\n\nimport { useEffect, useState, useReducer, useRef } from 'react';\nimport { Field } from '@strapi/design-system';\nimport { useNotification, Page } from '@strapi/strapi/admin'\nimport usePluginConfig from '../../../hooks/usePluginConfig';\nimport type { PluginConfig } from '../../../../../types';\nimport { getTranslation } from '../../../utils';\nimport { useIntl } from 'react-intl';\nimport { FullLoader } from '../../../components/UI';\nimport { PageWrapper, ContentBox, SettingTitle } from '../';\nimport pluginPermissions from '../../../permissions';\n\ntype Action =\n | { type: 'SET_MAX_DEPTH'; payload: number }\n | { type: 'SET_CONFIG'; payload: PluginConfig }\n\nfunction reducer(newConfig: PluginConfig | null, action: Action): PluginConfig | null {\n switch (action.type) {\n case 'SET_MAX_DEPTH':\n if (!newConfig) return null;\n return {\n ...newConfig,\n navigation: { ...newConfig.navigation, maxDepth: action.payload },\n selectedContentTypes: newConfig.selectedContentTypes || []\n };\n case 'SET_CONFIG':\n return action.payload;\n default:\n throw new Error();\n }\n}\n\nconst Settings = () => {\n const { config: fetchedConfig, setConfig, loading, fetchError } = usePluginConfig();\n const [config, dispatch] = useReducer(reducer, fetchedConfig);\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const [isSaving, setIsSaving] = useState(false);\n const initialConfig = useRef<PluginConfig | null>(fetchedConfig);\n\n useEffect(() => {\n initialConfig.current = fetchedConfig;\n\n if (fetchedConfig)\n dispatch({ type: 'SET_CONFIG', payload: fetchedConfig });\n }, [fetchedConfig]);\n\n useEffect(() => {\n if (fetchError) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.error'),\n defaultMessage: 'An error occurred',\n }) + ': ' + fetchError,\n });\n }\n }, [fetchError, toggleNotification, formatMessage]);\n\n async function save() {\n if (!config) return\n\n setIsSaving(true);\n try {\n await setConfig({ navigation: config.navigation })\n initialConfig.current = config;\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('notification.settings.saved'),\n defaultMessage: 'Settings saved successfully',\n }),\n });\n setIsSaving(false);\n } catch (err) {\n setIsSaving(false);\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.error'),\n defaultMessage: 'An error occurred',\n }) + ': ' + err,\n });\n strapi.log.error(err);\n }\n }\n\n if (loading) {\n return <PageWrapper\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('loading'),\n defaultMessage: 'Loading...',\n })}\n disabledCondition={true}\n >\n <FullLoader height={200} />\n </PageWrapper>\n }\n\n return (\n <Page.Protect permissions={pluginPermissions['settings.navigation']}>\n <PageWrapper\n save={save}\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('settings.page.navigation.subtitle'),\n defaultMessage: 'Configure navigation settings',\n })}\n disabledCondition={JSON.stringify(config) === JSON.stringify(initialConfig.current)}\n >\n <ContentBox title={formatMessage({\n id: getTranslation('settings.page.navigation.navigation'),\n defaultMessage: 'Navigation',\n })}>\n <Field.Root name=\"maxNavDepth\">\n <Field.Label>\n <SettingTitle>\n {formatMessage({\n id: getTranslation('settings.page.navigation.maxNavDepth.label'),\n defaultMessage: 'Max depth of navigation tree',\n })}\n </SettingTitle>\n </Field.Label>\n <Field.Input\n id=\"maxNavDepth\"\n type=\"number\"\n min={0}\n step={1}\n value={config?.navigation?.maxDepth !== undefined ? config.navigation.maxDepth + 1 : ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => dispatch({ type: 'SET_MAX_DEPTH', payload: Number(e.target.value) - 1 })}\n onBlur={(e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.value === '') return\n dispatch({ type: 'SET_MAX_DEPTH', payload: Number(e.target.value) - 1 })}\n }\n />\n <Field.Hint/>\n </Field.Root>\n </ContentBox>\n </PageWrapper>\n </Page.Protect>\n );\n};\n\nexport default Settings;\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { useState, useEffect, useMemo } from "react";
3
- import { g as getTranslation, u as useApi, d as debounce, p as pluginPermissions } from "./index-CIr8o1RP.mjs";
3
+ import { g as getTranslation, u as useApi, d as debounce, p as pluginPermissions } from "./index-DCYCtKrj.mjs";
4
4
  import { Page, Layouts, useNotification } from "@strapi/strapi/admin";
5
5
  import { Grid, Box, Field, Thead, Tr, Th, Typography, VisuallyHidden, Td, Flex, LinkButton, Table, Tbody, EmptyStateLayout } from "@strapi/design-system";
6
6
  import "@strapi/icons/symbols";
@@ -269,3 +269,4 @@ const Paths = () => {
269
269
  export {
270
270
  Paths as default
271
271
  };
272
+ //# sourceMappingURL=index-Cf9j0bn2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Cf9j0bn2.mjs","sources":["../../admin/src/pages/Paths/PageWrapper.tsx","../../admin/src/pages/Paths/compareBy.ts","../../admin/src/pages/Paths/SearchInput.tsx","../../admin/src/pages/Paths/TableHeader.tsx","../../admin/src/pages/Paths/TableRow.tsx","../../admin/src/pages/Paths/PathTable.tsx","../../admin/src/pages/Paths/index.tsx"],"sourcesContent":["import { Layouts, Page } from '@strapi/strapi/admin';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\n\nexport default function PageWrapper({ children }: { children: React.ReactNode }) {\n const { formatMessage } = useIntl();\n\n return (\n <Page.Main>\n <Layouts.Header\n title={formatMessage({\n id: getTranslation('paths.page.title'),\n defaultMessage: 'Paths',\n })}\n subtitle={formatMessage({\n id: getTranslation('paths.page.subtitle'),\n defaultMessage: 'Overview of all existing paths',\n })}\n />\n <Layouts.Content>\n <>\n {children}\n </>\n </Layouts.Content>\n </Page.Main>\n );\n}","import type { Route } from '../../../../types';\nimport type { RouteSortKey } from '../../types';\n\nexport default function compareBy(field: RouteSortKey, direction: 'asc' | 'desc') {\n if (!field) {\n return () => 0;\n }\n if (field === 'type') {\n return (a: Route, b: Route) => {\n return direction === 'asc'\n ? a.type.localeCompare(b.type)\n : b.type.localeCompare(a.type);\n };\n }\n return (a: Route, b: Route) => {\n const aValue = a[field];\n const bValue = b[field];\n \n if (aValue == null && bValue == null) {\n return 0;\n }\n if (aValue == null) {\n return direction === 'asc' ? 1 : -1;\n }\n if (bValue == null) {\n return direction === 'asc' ? -1 : 1;\n }\n \n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return direction === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue);\n }\n return 0;\n };\n}","import { Box, Grid, Field } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { getTranslation } from '../../utils';\n\nfunction SearchInput({\n searchQuery,\n handleSearchChange\n}: {\n searchQuery: string;\n handleSearchChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}) {\n\n const { formatMessage } = useIntl();\n\n return (\n <Grid.Root style={{ marginBottom: '16px' }}>\n <Grid.Item col={4} s={12}>\n <Box width=\"100%\">\n <Field.Root>\n <Field.Input\n name=\"search\"\n placeholder={formatMessage({\n id: getTranslation('paths.page.searchPlaceholder'),\n defaultMessage: 'Search paths',\n })}\n value={searchQuery}\n onChange={handleSearchChange}\n endAction={\n searchQuery ? (\n <button\n type=\"button\"\n onClick={() => handleSearchChange({ target: { value: '' } } as React.ChangeEvent<HTMLInputElement>)}\n style={{ color: 'inherit', background: 'none', border: 'none', cursor: 'pointer' }}\n aria-label=\"Clear search\"\n >\n <Cross />\n </button>\n ) : null\n }\n />\n </Field.Root>\n </Box>\n </Grid.Item>\n </Grid.Root>\n );\n}\n\nexport default SearchInput;","import type { RouteSortKey } from '../../types';\nimport { Typography, Thead, Tr, Th, VisuallyHidden } from '@strapi/design-system';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\nimport { ChevronDown } from '@strapi/icons';\n\nexport default function TableHeader({\n sortKey,\n handleSort\n}: {\n sortKey: RouteSortKey,\n handleSort: (key: RouteSortKey) => void\n}) {\n const { formatMessage } = useIntl();\n\n return (\n <Thead>\n <Tr>\n <Th onClick={() => handleSort('title')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('title'),\n defaultMessage: 'Title',\n })}\n </Typography>\n {sortKey === 'title' && <ChevronDown />}\n </Th>\n <Th onClick={() => handleSort('canonicalPath')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('canonicalPath'),\n defaultMessage: 'Canonical Path',\n })}\n </Typography>\n {sortKey === 'canonicalPath' && <ChevronDown />}\n </Th>\n <Th onClick={() => handleSort('path')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('path'),\n defaultMessage: 'Path',\n })}\n </Typography>\n {sortKey === 'path' && <ChevronDown />}\n </Th>\n <Th onClick={() => handleSort('type')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('paths.page.column.type'),\n defaultMessage: 'Type',\n })}\n </Typography>\n {sortKey === 'type' && <ChevronDown />}\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: getTranslation('actions'),\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n )\n}","import type { Route } from '../../../../types';\nimport { Typography, Tr, Td, Flex, LinkButton } from '@strapi/design-system';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\nimport { Pencil } from '@strapi/icons';\n\nexport default function TableRow({ route }: { route: Route }) {\n const { formatMessage } = useIntl();\n \n return (\n <Tr>\n {[route.title, route.canonicalPath, route.path].map((field, index) => (\n <Td key={index}>\n <Typography\n title={field}\n textColor=\"neutral800\"\n >\n {field || '-'}\n </Typography>\n </Td>\n ))}\n <Td>\n <Typography\n title={route.type}\n textColor=\"neutral800\"\n >\n {formatMessage({\n id: getTranslation(`path.type.${route.type}`),\n defaultMessage: '-',\n })}\n </Typography>\n </Td>\n <Td>\n <Flex gap={2} justifyContent=\"end\">\n {route.type === \"internal\" && \n <LinkButton\n variant=\"secondary\"\n startIcon={<Pencil />} \n href={`/admin/content-manager/collection-types/${route.relatedContentType}/${route.relatedDocumentId}`}\n >\n {formatMessage({\n id: getTranslation('edit'),\n defaultMessage: 'Edit',\n })}\n </LinkButton>\n }\n </Flex>\n </Td>\n </Tr>\n )\n}","import type { Route } from '../../../../types';\nimport type { RouteSortKey } from '../../types';\nimport { Table, Tbody, EmptyStateLayout, Tr, Td } from '@strapi/design-system';\nimport TableHeader from './TableHeader';\nimport TableRow from './TableRow';\nimport { useIntl } from 'react-intl';\nimport { getTranslation } from '../../utils';\n\nfunction PathTable({\n routes,\n sortKey,\n handleSort\n}: {\n routes: Route[],\n sortKey: RouteSortKey,\n handleSort: (key: RouteSortKey) => void\n}) {\n\n const { formatMessage } = useIntl();\n\n const TABLE_COL_COUNT = 5;\n\n return (\n <Table\n colCount={TABLE_COL_COUNT}\n rowCount={routes.length}\n >\n <TableHeader sortKey={sortKey} handleSort={handleSort} />\n <Tbody>\n {routes.length > 0 ? routes.map((route: Route) => (\n <TableRow key={route.id} route={route} />\n )) :\n <Tr>\n <Td colSpan={TABLE_COL_COUNT}>\n <EmptyStateLayout\n shadow=\"none\"\n content={\n formatMessage({\n id: getTranslation('paths.page.emptyPaths'),\n defaultMessage: 'No paths found',\n })\n }\n />\n </Td>\n </Tr>\n }\n </Tbody>\n </Table>\n )\n}\n\nexport default PathTable;\n","/*\n *\n * Routes\n * This file contains the Routes page of the Webatlas plugin for Strapi.\n * It displays a table of all existing routes with their details and allows editing.\n *\n*/\n\nimport type { Route } from '../../../../types';\nimport type { RouteSortKey } from '../../types';\nimport { useState, useEffect } from 'react';\nimport { useApi } from '../../hooks';\nimport { FullLoader } from '../../components/UI';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\nimport { useNotification, Page } from '@strapi/strapi/admin'\nimport PageWrapper from './PageWrapper';\nimport { useSearchParams } from 'react-router-dom';\nimport debounce from '../../utils/debounce';\nimport { useMemo } from 'react';\nimport compareBy from './compareBy';\nimport pluginPermissions from '../../permissions';\nimport SearchInput from './SearchInput';\nimport PathTable from './PathTable';\n\nconst Paths = () => {\n const { getAllRoutes } = useApi();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const [allRoutes, setAllRoutes] = useState<Route[]>([]);\n const [routes, setRoutes] = useState<Route[]>([]);\n const [loading, setLoading] = useState(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const initialQuery = searchParams.get('search') || '';\n const [searchQuery, setSearchQuery] = useState(initialQuery);\n const [sortKey, setSortKey] = useState<RouteSortKey>('canonicalPath');\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc');\n\n useEffect(() => {\n const query = searchQuery.toLowerCase()\n setRoutes(\n allRoutes.filter((route) =>\n JSON.stringify(route.id).toLowerCase().includes(query) ||\n route.title.toLowerCase().includes(query) ||\n route.path.toLowerCase().includes(query) ||\n route.relatedDocumentId.toLowerCase().includes(query) ||\n route.relatedContentType.toLowerCase().includes(query)\n )\n )\n }, [searchQuery, allRoutes]);\n\n const debouncedSetSearchParams = useMemo(() =>\n debounce((value: string) => {\n value\n ? setSearchParams({ search: value })\n : setSearchParams({});\n }, 300),\n [setSearchParams]);\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n setSearchQuery(value);\n debouncedSetSearchParams(value);\n }\n\n useEffect(() => {\n async function fetchRoutes() {\n try {\n const data = await getAllRoutes();\n setAllRoutes(data);\n setRoutes(data);\n } catch (err) {\n strapi.log.error('Failed to fetch paths:', err);\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.paths.fetchFailed'),\n defaultMessage: 'Failed to fetch paths',\n }),\n });\n } finally {\n setLoading(false);\n }\n }\n fetchRoutes();\n }, [])\n\n const handleSort = (key: RouteSortKey) => {\n setSortDirection(prev => (prev === 'asc' ? 'desc' : 'asc'));\n setSortKey(key);\n };\n\n const sortedRoutes = useMemo(() => {\n return sortKey\n ? [...routes].sort(compareBy(sortKey, sortDirection))\n : routes;\n }, [routes, sortKey, sortDirection]);\n\n if (loading) {\n return <PageWrapper>\n <FullLoader />\n </PageWrapper>\n }\n\n return (\n <Page.Protect permissions={pluginPermissions['page.routes']}>\n <PageWrapper>\n <SearchInput\n handleSearchChange={handleSearchChange}\n searchQuery={searchQuery}\n />\n <PathTable\n routes={sortedRoutes}\n sortKey={sortKey}\n handleSort={handleSort}\n />\n </PageWrapper>\n </Page.Protect>\n );\n};\n\nexport default Paths;\n"],"names":[],"mappings":"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"}
@@ -4,11 +4,11 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
5
  const designSystem = require("@strapi/design-system");
6
6
  const admin = require("@strapi/strapi/admin");
7
- const index = require("./index-DC5WwNdi.js");
7
+ const index = require("./index-Yq-QR8t0.js");
8
8
  const reactIntl = require("react-intl");
9
9
  require("@strapi/icons/symbols");
10
10
  const FullLoader = require("./FullLoader-Cmsf8xS6.js");
11
- const SettingTitle = require("./SettingTitle-uw1S5OmC.js");
11
+ const SettingTitle = require("./SettingTitle-BjE_2u6R.js");
12
12
  function reducer(newConfig, action) {
13
13
  switch (action.type) {
14
14
  case "SET_MAX_DEPTH":
@@ -126,3 +126,4 @@ const Settings = () => {
126
126
  ) });
127
127
  };
128
128
  exports.default = Settings;
129
+ //# sourceMappingURL=index-D8bG0YFB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-D8bG0YFB.js","sources":["../../admin/src/pages/Settings/Navigation/index.tsx"],"sourcesContent":["/*\n *\n * Settings\n * This file contains the navigation settings page for the Webatlas plugin.\n * It allows users to set the max depth of the navigation tree.\n *\n*/\n\nimport { useEffect, useState, useReducer, useRef } from 'react';\nimport { Field } from '@strapi/design-system';\nimport { useNotification, Page } from '@strapi/strapi/admin'\nimport usePluginConfig from '../../../hooks/usePluginConfig';\nimport type { PluginConfig } from '../../../../../types';\nimport { getTranslation } from '../../../utils';\nimport { useIntl } from 'react-intl';\nimport { FullLoader } from '../../../components/UI';\nimport { PageWrapper, ContentBox, SettingTitle } from '../';\nimport pluginPermissions from '../../../permissions';\n\ntype Action =\n | { type: 'SET_MAX_DEPTH'; payload: number }\n | { type: 'SET_CONFIG'; payload: PluginConfig }\n\nfunction reducer(newConfig: PluginConfig | null, action: Action): PluginConfig | null {\n switch (action.type) {\n case 'SET_MAX_DEPTH':\n if (!newConfig) return null;\n return {\n ...newConfig,\n navigation: { ...newConfig.navigation, maxDepth: action.payload },\n selectedContentTypes: newConfig.selectedContentTypes || []\n };\n case 'SET_CONFIG':\n return action.payload;\n default:\n throw new Error();\n }\n}\n\nconst Settings = () => {\n const { config: fetchedConfig, setConfig, loading, fetchError } = usePluginConfig();\n const [config, dispatch] = useReducer(reducer, fetchedConfig);\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const [isSaving, setIsSaving] = useState(false);\n const initialConfig = useRef<PluginConfig | null>(fetchedConfig);\n\n useEffect(() => {\n initialConfig.current = fetchedConfig;\n\n if (fetchedConfig)\n dispatch({ type: 'SET_CONFIG', payload: fetchedConfig });\n }, [fetchedConfig]);\n\n useEffect(() => {\n if (fetchError) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.error'),\n defaultMessage: 'An error occurred',\n }) + ': ' + fetchError,\n });\n }\n }, [fetchError, toggleNotification, formatMessage]);\n\n async function save() {\n if (!config) return\n\n setIsSaving(true);\n try {\n await setConfig({ navigation: config.navigation })\n initialConfig.current = config;\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('notification.settings.saved'),\n defaultMessage: 'Settings saved successfully',\n }),\n });\n setIsSaving(false);\n } catch (err) {\n setIsSaving(false);\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.error'),\n defaultMessage: 'An error occurred',\n }) + ': ' + err,\n });\n strapi.log.error(err);\n }\n }\n\n if (loading) {\n return <PageWrapper\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('loading'),\n defaultMessage: 'Loading...',\n })}\n disabledCondition={true}\n >\n <FullLoader height={200} />\n </PageWrapper>\n }\n\n return (\n <Page.Protect permissions={pluginPermissions['settings.navigation']}>\n <PageWrapper\n save={save}\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('settings.page.navigation.subtitle'),\n defaultMessage: 'Configure navigation settings',\n })}\n disabledCondition={JSON.stringify(config) === JSON.stringify(initialConfig.current)}\n >\n <ContentBox title={formatMessage({\n id: getTranslation('settings.page.navigation.navigation'),\n defaultMessage: 'Navigation',\n })}>\n <Field.Root name=\"maxNavDepth\">\n <Field.Label>\n <SettingTitle>\n {formatMessage({\n id: getTranslation('settings.page.navigation.maxNavDepth.label'),\n defaultMessage: 'Max depth of navigation tree',\n })}\n </SettingTitle>\n </Field.Label>\n <Field.Input\n id=\"maxNavDepth\"\n type=\"number\"\n min={0}\n step={1}\n value={config?.navigation?.maxDepth !== undefined ? config.navigation.maxDepth + 1 : ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => dispatch({ type: 'SET_MAX_DEPTH', payload: Number(e.target.value) - 1 })}\n onBlur={(e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.value === '') return\n dispatch({ type: 'SET_MAX_DEPTH', payload: Number(e.target.value) - 1 })}\n }\n />\n <Field.Hint/>\n </Field.Root>\n </ContentBox>\n </PageWrapper>\n </Page.Protect>\n );\n};\n\nexport default Settings;\n"],"names":["usePluginConfig","useReducer","useNotification","useIntl","useState","useRef","useEffect","getTranslation","jsx","PageWrapper","FullLoader","Page","pluginPermissions","ContentBox","jsxs","Field","SettingTitle"],"mappings":"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"}
@@ -23,18 +23,25 @@ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
23
23
  );
24
24
  });
25
25
  };
26
- function transformToUrl(input) {
26
+ function transformToUrl(input, replaceSlash = true) {
27
27
  const specialCharMap = {
28
28
  "ü": "ue",
29
29
  "ä": "ae",
30
- "ö": "oe"
30
+ "ö": "oe",
31
+ "ß": "ss"
31
32
  };
32
33
  if (!input || typeof input !== "string") return "";
33
34
  input = input.toLowerCase();
34
35
  input = input.replace(/\/+/g, "/");
35
36
  input = input.startsWith("/") ? input.slice(1) : input;
36
37
  input = input.endsWith("/") ? input.slice(0, -1) : input;
37
- input = input.replace(/\//g, "-");
38
+ if (replaceSlash) {
39
+ input = input.replace(/\//g, "-");
40
+ } else {
41
+ input = input.replace(/\/+/g, "/");
42
+ input = input.startsWith("/") ? input.slice(1) : input;
43
+ input = input.endsWith("/") ? input.slice(0, -1) : input;
44
+ }
38
45
  for (const char in specialCharMap) {
39
46
  const regex = new RegExp(char, "g");
40
47
  input = input.replace(regex, specialCharMap[char]);
@@ -45,7 +52,7 @@ function transformToUrl(input) {
45
52
  input = input.replace(/-+/g, "-");
46
53
  return input;
47
54
  }
48
- const version = "0.10.0";
55
+ const version = "0.11.0";
49
56
  const strapi$1 = { "name": "webatlas", "displayName": "Webatlas" };
50
57
  const pluginPkg = {
51
58
  version,
@@ -3685,10 +3692,7 @@ function PathInput({ path, dispatchPath, isOverride, config }) {
3685
3692
  value: displayedPath,
3686
3693
  onChange: (e) => dispatchPath({ type: "SET_OVERRIDEPATH", payload: e.target.value }),
3687
3694
  disabled: !isOverride,
3688
- onBlur: (e) => {
3689
- if (e.target.value === path.prevValue) return;
3690
- dispatchPath({ type: "DEFAULT", payload: e.target.value });
3691
- },
3695
+ onBlur: (e) => dispatchPath({ type: "SET_OVERRIDEPATH", payload: transformToUrl(e.target.value) }),
3692
3696
  style: { outline: inputBorder }
3693
3697
  }
3694
3698
  ),
@@ -3697,11 +3701,17 @@ function PathInput({ path, dispatchPath, isOverride, config }) {
3697
3701
  }
3698
3702
  );
3699
3703
  }
3700
- function RouteStructure({ routes, selectedParent, setSelectedParent, canonicalPath, prohibitedRouteIds }) {
3704
+ function RouteStructure({
3705
+ routes,
3706
+ selectedParent,
3707
+ setSelectedParent,
3708
+ canonicalPath,
3709
+ prohibitedRouteIds
3710
+ }) {
3701
3711
  const { formatMessage } = useIntl();
3702
- const sortedRoutes = useMemo(() => {
3703
- return [...routes].sort((a, b) => a.title.localeCompare(b.title));
3704
- }, [routes]);
3712
+ const filteredRoutes = useMemo(() => {
3713
+ return [...routes].sort((a, b) => a.title.localeCompare(b.title)).filter((route) => !prohibitedRouteIds?.includes(route.documentId) || route.documentId === selectedParent?.documentId);
3714
+ }, [routes, prohibitedRouteIds, selectedParent]);
3705
3715
  const handleSelectParent = (value) => {
3706
3716
  const parentRoute = routes.find((route) => route.documentId === value) || null;
3707
3717
  setSelectedParent(parentRoute);
@@ -3722,16 +3732,14 @@ function RouteStructure({ routes, selectedParent, setSelectedParent, canonicalPa
3722
3732
  id: getTranslation("components.CMEditViewAside.path.input.parentSelect.rootPath"),
3723
3733
  defaultMessage: "None (root path)"
3724
3734
  }) }),
3725
- sortedRoutes.filter((route) => !prohibitedRouteIds?.includes(route.documentId) || route.documentId === selectedParent?.documentId).map(
3726
- (route) => /* @__PURE__ */ jsx(
3727
- SingleSelectOption,
3728
- {
3729
- value: route.documentId,
3730
- children: route.title
3731
- },
3732
- route.documentId
3733
- )
3734
- )
3735
+ filteredRoutes.map((route) => /* @__PURE__ */ jsx(
3736
+ SingleSelectOption,
3737
+ {
3738
+ value: route.documentId,
3739
+ children: route.title
3740
+ },
3741
+ route.documentId
3742
+ ))
3735
3743
  ]
3736
3744
  }
3737
3745
  )
@@ -3759,9 +3767,10 @@ function RouteStructure({ routes, selectedParent, setSelectedParent, canonicalPa
3759
3767
  ] })
3760
3768
  ] });
3761
3769
  }
3762
- function getCanonicalPath(selectedParent, sourceFieldValue) {
3763
- const parentPath = selectedParent ? selectedParent.canonicalPath + "/" : "";
3764
- return `${parentPath}${transformToUrl(sourceFieldValue)}`;
3770
+ function buildPath(type, slug, parent) {
3771
+ const parentSlug = type === "canonical" ? parent?.canonicalPath : parent?.path;
3772
+ const parentPath = parentSlug ? `${parentSlug}/` : "";
3773
+ return `${parentPath}${transformToUrl(slug)}`;
3765
3774
  }
3766
3775
  function reducer(state, action) {
3767
3776
  switch (action.type) {
@@ -3792,6 +3801,8 @@ function reducer(state, action) {
3792
3801
  return { ...state, replacement: action.payload };
3793
3802
  case "SET_UIDPATH":
3794
3803
  return { ...state, uidPath: action.payload };
3804
+ case "SET_SLUG":
3805
+ return { ...state, slug: action.payload };
3795
3806
  case "SET_CANONICALPATH":
3796
3807
  return { ...state, canonicalPath: action.payload };
3797
3808
  case "SET_OVERRIDEPATH":
@@ -3837,66 +3848,76 @@ const Panel = ({ config }) => {
3837
3848
  replacement: null,
3838
3849
  uidPath: "",
3839
3850
  canonicalPath: "",
3851
+ slug: "",
3840
3852
  overridePath: ""
3841
3853
  });
3842
3854
  const hasUserChangedField = useRef(false);
3855
+ const hasUserInteracted = useRef(false);
3843
3856
  const initialPath = useRef("");
3844
3857
  const prevSourceValueRef = useRef(null);
3845
- const sourceFieldValue = useMemo(() => {
3846
- const key = config?.default;
3847
- if (!key) return "";
3848
- const currentValue = values[key];
3849
- if (!currentValue) return "";
3850
- return currentValue;
3851
- }, [values, config]);
3852
- const debouncedCheckPath = useCallback(debounce(checkPath, 250), []);
3853
- const debouncedCheckCanonicalPath = useCallback(debounce(checkCanonicalPath, 250), []);
3858
+ const sourceFieldValue = values[config?.default] || "";
3859
+ const initialSourceFieldValue = initialValues[config?.default] || "";
3860
+ const latestCheckPathRef = useRef(checkPath);
3861
+ latestCheckPathRef.current = checkPath;
3862
+ const debouncedCheckPath = useRef(debounce((p, id) => latestCheckPathRef.current(p, id), 250)).current;
3863
+ const latestCheckCanonicalRef = useRef(checkCanonicalPath);
3864
+ latestCheckCanonicalRef.current = checkCanonicalPath;
3865
+ const debouncedCheckCanonicalPath = useRef(debounce((p, id) => latestCheckCanonicalRef.current(p, id), 250)).current;
3854
3866
  useEffect(() => {
3855
- if (isOverride) onChange("webatlas_path", path.overridePath);
3856
- onChange("webatlas_override", isOverride);
3857
- onChange("webatlas_parent", selectedParent?.documentId || null);
3858
- }, [path.value, path.overridePath, isOverride, selectedParent]);
3859
- const debouncedValueEffect = useMemo(() => debounce((currentValues) => {
3860
- const key = config?.default;
3861
- if (!key) return;
3862
- const currentValue = currentValues[key];
3863
- if (!currentValue) {
3864
- dispatchPath({ type: "NO_URL_CHECK", payload: "" });
3865
- return;
3866
- }
3867
- if (initialLoadComplete && (hasUserChangedField.current || !route) && prevSourceValueRef.current !== currentValue && !isOverride) {
3868
- const path2 = getCanonicalPath(selectedParent, currentValue);
3869
- if (currentValue === initialValues[key]) {
3870
- dispatchPath({ type: "NO_URL_CHECK", payload: path2 });
3871
- } else {
3872
- dispatchPath({ type: "DEFAULT", payload: path2 });
3873
- }
3874
- prevSourceValueRef.current = currentValue;
3867
+ async function fetchAllRoutes() {
3868
+ const allRoutes = await getAllRoutes();
3869
+ setRoutes(allRoutes);
3875
3870
  }
3876
- }, 500), [config?.default, initialValues, isOverride, initialLoadComplete, route, selectedParent]);
3871
+ fetchAllRoutes();
3872
+ }, []);
3877
3873
  useEffect(() => {
3878
- const key = config?.default;
3879
- if (!key) return;
3880
- const currentValue = values[key];
3881
- const initialValue = initialValues[key];
3882
- if (currentValue !== initialValue && currentValue && !isOverride) {
3883
- onChange("webatlas_path", transformToUrl(currentValue));
3874
+ const slug = transformToUrl(sourceFieldValue);
3875
+ const overridePath = transformToUrl(path.overridePath || "", false);
3876
+ const data = {
3877
+ path: isOverride ? overridePath : path.value,
3878
+ isOverride,
3879
+ parentDocumentId: selectedParent?.documentId || null,
3880
+ slug: isOverride ? overridePath : slug
3881
+ };
3882
+ if (hasUserChangedField.current || hasUserInteracted.current) {
3883
+ onChange("webatlas", data);
3884
3884
  }
3885
+ }, [path.value, path.overridePath, isOverride, selectedParent, sourceFieldValue, hasUserChangedField, hasUserInteracted]);
3886
+ useEffect(() => {
3885
3887
  if (!initialLoadComplete) return;
3886
- if (currentValue !== initialValue) {
3888
+ if (sourceFieldValue !== initialSourceFieldValue) {
3887
3889
  hasUserChangedField.current = true;
3888
3890
  }
3889
- debouncedValueEffect(values);
3890
- }, [values, debouncedValueEffect, initialLoadComplete, selectedParent]);
3891
+ if (!sourceFieldValue) {
3892
+ dispatchPath({ type: "NO_URL_CHECK", payload: "" });
3893
+ return;
3894
+ }
3895
+ if (initialLoadComplete && (hasUserChangedField.current || !route) && prevSourceValueRef.current !== sourceFieldValue && !isOverride) {
3896
+ const newPath = buildPath("path", sourceFieldValue, selectedParent);
3897
+ const type = sourceFieldValue === initialSourceFieldValue ? "NO_URL_CHECK" : "DEFAULT";
3898
+ const slug = transformToUrl(sourceFieldValue);
3899
+ dispatchPath({ type, payload: newPath });
3900
+ dispatchPath({ type: "SET_SLUG", payload: slug });
3901
+ dispatchPath({ type: "SET_OVERRIDEPATH", payload: slug });
3902
+ prevSourceValueRef.current = sourceFieldValue;
3903
+ }
3904
+ const canonicalPath = buildPath("canonical", sourceFieldValue, selectedParent);
3905
+ dispatchPath({ type: "SET_CANONICALPATH", payload: canonicalPath });
3906
+ debouncedCheckCanonicalPath(canonicalPath, route?.documentId || null);
3907
+ }, [sourceFieldValue, initialSourceFieldValue, initialLoadComplete, selectedParent, isOverride, route]);
3891
3908
  useEffect(() => {
3909
+ if (!initialLoadComplete) return;
3892
3910
  if (path.needsUrlCheck && path.value) {
3893
3911
  if (path.uidPath === path.value || initialPath.current === path.value) return;
3894
3912
  debouncedCheckPath(path.value, route?.documentId || null);
3895
3913
  dispatchPath({ type: "RESET_URL_CHECK_FLAG" });
3914
+ } else {
3915
+ setValidationState("idle");
3916
+ dispatchPath({ type: "SET_REPLACEMENT", payload: null });
3896
3917
  }
3897
- }, [path.needsUrlCheck, path.value, path.uidPath, route]);
3918
+ }, [path.needsUrlCheck, path.value, path.uidPath, route, initialLoadComplete]);
3898
3919
  useEffect(() => {
3899
- async function getTypes() {
3920
+ async function fetchRelatedRute() {
3900
3921
  if (!initialValues.documentId) {
3901
3922
  setInitialLoadComplete(true);
3902
3923
  return;
@@ -3907,12 +3928,11 @@ const Panel = ({ config }) => {
3907
3928
  initialPath.current = initialValues.webatlas_path || route2.uidPath;
3908
3929
  setRoute(route2);
3909
3930
  setIsOverride(route2.isOverride || false);
3910
- if (route2.isOverride) {
3911
- dispatchPath({ type: "SET_OVERRIDEPATH", payload: route2.path || "" });
3912
- } else {
3913
- dispatchPath({ type: "NO_TRANSFORM_AND_CHECK", payload: route2.path || "" });
3914
- }
3931
+ dispatchPath({ type: "SET_OVERRIDEPATH", payload: route2.path || "" });
3932
+ dispatchPath({ type: "NO_TRANSFORM_AND_CHECK", payload: route2.path || "" });
3915
3933
  dispatchPath({ type: "SET_UIDPATH", payload: route2.uidPath || "" });
3934
+ dispatchPath({ type: "SET_SLUG", payload: route2.slug || "" });
3935
+ dispatchPath({ type: "SET_CANONICALPATH", payload: route2.canonicalPath || "" });
3916
3936
  const key = config?.default;
3917
3937
  if (key) {
3918
3938
  prevSourceValueRef.current = values[key];
@@ -3923,27 +3943,13 @@ const Panel = ({ config }) => {
3923
3943
  }
3924
3944
  setInitialLoadComplete(true);
3925
3945
  }
3926
- getTypes();
3946
+ fetchRelatedRute();
3927
3947
  }, [config]);
3928
3948
  useEffect(() => {
3929
- if (initialValues.webatlas_parent && routes.length > 0 && !selectedParent) {
3930
- const parentRoute = routes.find((route2) => route2.documentId === initialValues.webatlas_parent);
3931
- if (parentRoute) {
3932
- setSelectedParent(parentRoute);
3933
- const canonicalPath = getCanonicalPath(parentRoute, sourceFieldValue);
3934
- dispatchPath({ type: "DEFAULT", payload: canonicalPath });
3935
- }
3936
- }
3937
- }, [initialValues, routes]);
3938
- useEffect(() => {
3939
- if (initialValues.webatlas_path) dispatchPath({ type: "NO_URL_CHECK", payload: initialValues.webatlas_path });
3940
- if (initialValues.webatlas_override) setIsOverride(initialValues.webatlas_override);
3941
- async function fetchAllRoutes() {
3942
- const allRoutes = await getAllRoutes();
3943
- setRoutes(allRoutes);
3944
- }
3945
- fetchAllRoutes();
3946
- }, []);
3949
+ if (!route || !routes.length) return;
3950
+ const parentRoute = routes.find((singleRoute) => singleRoute.documentId === route.parent?.documentId);
3951
+ setSelectedParent(parentRoute || null);
3952
+ }, [route, routes]);
3947
3953
  useEffect(() => {
3948
3954
  async function fetchProhibitedRouteIds() {
3949
3955
  const prohibitedIds = await getProhibitedRouteIds(route?.documentId);
@@ -3953,27 +3959,26 @@ const Panel = ({ config }) => {
3953
3959
  }, [route]);
3954
3960
  useEffect(() => {
3955
3961
  if (!sourceFieldValue) return;
3956
- const canonicalPath = getCanonicalPath(selectedParent, sourceFieldValue);
3957
- !isOverride && dispatchPath({ type: "DEFAULT", payload: canonicalPath });
3958
- dispatchPath({ type: "SET_CANONICALPATH", payload: canonicalPath });
3959
- debouncedCheckCanonicalPath(canonicalPath, route?.documentId || null);
3960
- dispatchPath({ type: "RESET_URL_CHECK_FLAG" });
3962
+ if (!isOverride) {
3963
+ const newPath = buildPath("path", sourceFieldValue, selectedParent);
3964
+ dispatchPath({ type: "DEFAULT", payload: newPath });
3965
+ }
3961
3966
  }, [selectedParent, sourceFieldValue, route, isOverride]);
3962
- async function checkCanonicalPath(path2, documentId) {
3967
+ async function checkCanonicalPath(path2, routeDocumentId) {
3963
3968
  if (!path2) return;
3964
3969
  try {
3965
- const result = await duplicateCheck({ fetchFunction: get, path: path2, routeDocumentId: documentId, withoutTransform: true });
3970
+ const result = await duplicateCheck({ fetchFunction: get, path: path2, routeDocumentId, withoutTransform: true });
3966
3971
  dispatchPath({ type: "SET_CANONICALPATH", payload: result });
3967
3972
  } catch (err) {
3968
3973
  strapi.log.error(err);
3969
3974
  }
3970
3975
  }
3971
- async function checkPath(path2, route2) {
3976
+ async function checkPath(path2, routeDocumentId) {
3972
3977
  if (!path2) return;
3973
3978
  setValidationState("checking");
3974
3979
  dispatchPath({ type: "SET_REPLACEMENT", payload: "" });
3975
3980
  try {
3976
- const data = await duplicateCheck({ fetchFunction: get, path: path2, routeDocumentId: route2, withoutTransform: true });
3981
+ const data = await duplicateCheck({ fetchFunction: get, path: path2, routeDocumentId, withoutTransform: true });
3977
3982
  if (!data || data === path2) return;
3978
3983
  dispatchPath({ type: "NO_URL_CHECK", payload: data });
3979
3984
  dispatchPath({ type: "SET_REPLACEMENT", payload: data });
@@ -4010,7 +4015,10 @@ const Panel = ({ config }) => {
4010
4015
  canonicalPath: path.canonicalPath,
4011
4016
  routes,
4012
4017
  selectedParent,
4013
- setSelectedParent,
4018
+ setSelectedParent: (val) => {
4019
+ hasUserInteracted.current = true;
4020
+ setSelectedParent(val);
4021
+ },
4014
4022
  prohibitedRouteIds
4015
4023
  }
4016
4024
  ),
@@ -4037,7 +4045,10 @@ const Panel = ({ config }) => {
4037
4045
  OverrideCheckbox,
4038
4046
  {
4039
4047
  isOverride,
4040
- setIsOverride,
4048
+ setIsOverride: (val) => {
4049
+ hasUserInteracted.current = true;
4050
+ setIsOverride(val);
4051
+ },
4041
4052
  disabledCondition: !canCreate && !canUpdate
4042
4053
  }
4043
4054
  ),
@@ -4072,7 +4083,7 @@ const CMEditViewAside = ({ documentId, model }) => {
4072
4083
  setIsAllowedContentType(!!contentType?.pluginOptions?.webatlas?.enabled);
4073
4084
  }, [contentTypes, model]);
4074
4085
  useEffect(() => {
4075
- const isWebatlasLabel = (label) => label.textContent?.startsWith("webatlas_");
4086
+ const isWebatlasLabel = (label) => label.textContent?.startsWith("webatlas");
4076
4087
  const cleanupLabels = () => {
4077
4088
  const labels = document.querySelectorAll("label");
4078
4089
  labels.forEach((label) => {
@@ -4142,7 +4153,7 @@ const index = {
4142
4153
  id: `${PLUGIN_ID}.link.paths`,
4143
4154
  defaultMessage: "Paths"
4144
4155
  },
4145
- Component: () => import("./index-BKWY9Ta-.mjs"),
4156
+ Component: () => import("./index-Cf9j0bn2.mjs"),
4146
4157
  permissions: [
4147
4158
  pluginPermissions["page.routes"][0]
4148
4159
  ]
@@ -4154,7 +4165,7 @@ const index = {
4154
4165
  id: `${PLUGIN_ID}.link.navigation`,
4155
4166
  defaultMessage: "Navigation"
4156
4167
  },
4157
- Component: () => import("./index-tPrfjOIn.mjs"),
4168
+ Component: () => import("./index-BIEUXWe7.mjs"),
4158
4169
  permissions: [
4159
4170
  pluginPermissions["page.navigation"][0]
4160
4171
  ]
@@ -4174,7 +4185,7 @@ const index = {
4174
4185
  },
4175
4186
  id: `${PLUGIN_ID}-general`,
4176
4187
  to: `${PLUGIN_ID}/general`,
4177
- Component: () => import("./index-B07KlG03.mjs"),
4188
+ Component: () => import("./index-Y_PYIiRA.mjs"),
4178
4189
  permissions: [
4179
4190
  pluginPermissions["settings.general"][0]
4180
4191
  ]
@@ -4189,7 +4200,7 @@ const index = {
4189
4200
  },
4190
4201
  id: `${PLUGIN_ID}-navigation`,
4191
4202
  to: `${PLUGIN_ID}/navigation`,
4192
- Component: () => import("./index-CUaBX_v-.mjs"),
4203
+ Component: () => import("./index-BbnlyBrZ.mjs"),
4193
4204
  permissions: [
4194
4205
  pluginPermissions["settings.navigation"][0]
4195
4206
  ]
@@ -4233,3 +4244,4 @@ export {
4233
4244
  pluginPermissions as p,
4234
4245
  useApi as u
4235
4246
  };
4247
+ //# sourceMappingURL=index-DCYCtKrj.mjs.map