@mattisvensson/strapi-plugin-webatlas 0.8.1 → 0.8.2

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 (74) hide show
  1. package/dist/_chunks/SettingTitle-BaaQ_99D.mjs +69 -0
  2. package/dist/_chunks/SettingTitle-BaaQ_99D.mjs.map +1 -0
  3. package/dist/_chunks/SettingTitle-D5oNwpzC.js +67 -0
  4. package/dist/_chunks/SettingTitle-DDZxIqee.js +68 -0
  5. package/dist/_chunks/SettingTitle-DDZxIqee.js.map +1 -0
  6. package/dist/_chunks/SettingTitle-IwvX4Kb5.mjs +68 -0
  7. package/dist/_chunks/{de-Dt80IqMG.mjs → de-B9pq-AJZ.mjs} +10 -3
  8. package/dist/_chunks/{de-Dt80IqMG.mjs.map → de-B9pq-AJZ.mjs.map} +1 -1
  9. package/dist/_chunks/{de-CDBoUBzw.js → de-DlQxM8Tg.js} +10 -3
  10. package/dist/_chunks/{de-CDBoUBzw.js.map → de-DlQxM8Tg.js.map} +1 -1
  11. package/dist/_chunks/{en-BHxDiueo.mjs → en-Dmbcf7gp.mjs} +10 -3
  12. package/dist/_chunks/{en-BHxDiueo.mjs.map → en-Dmbcf7gp.mjs.map} +1 -1
  13. package/dist/_chunks/{en-DfvURaup.js → en-DrhxIwOr.js} +10 -3
  14. package/dist/_chunks/{en-DfvURaup.js.map → en-DrhxIwOr.js.map} +1 -1
  15. package/dist/_chunks/{index--oj1eNcM.js → index--XAogZgv.js} +2 -2
  16. package/dist/_chunks/{index--oj1eNcM.js.map → index--XAogZgv.js.map} +1 -1
  17. package/dist/_chunks/{index-BCPgfhBx.js → index-2lVgPz4a.js} +37 -33
  18. package/dist/_chunks/{index-BKdvSgDB.js → index-B1dEY-gs.js} +1 -1
  19. package/dist/_chunks/{index-DUgh4AJb.js → index-B1mbYb2_.js} +94 -53
  20. package/dist/_chunks/{index-CAged_xE.mjs → index-B2tjc_lG.mjs} +2 -2
  21. package/dist/_chunks/{index-CAged_xE.mjs.map → index-B2tjc_lG.mjs.map} +1 -1
  22. package/dist/_chunks/{index-YzPuPn68.js → index-BFuwbmZy.js} +22 -9
  23. package/dist/_chunks/{index-CTA8agp7.mjs → index-D2Meknib.mjs} +10 -8
  24. package/dist/_chunks/{index-D29zBs5w.mjs → index-D2SIGcj3.mjs} +23 -9
  25. package/dist/_chunks/{index-D29zBs5w.mjs.map → index-D2SIGcj3.mjs.map} +1 -1
  26. package/dist/_chunks/{index-D72CZ5b7.js → index-DH0mFrgH.js} +38 -32
  27. package/dist/_chunks/index-DH0mFrgH.js.map +1 -0
  28. package/dist/_chunks/{index-DTPDMxs_.js → index-DKtlnMlv.js} +23 -8
  29. package/dist/_chunks/{index-YzPuPn68.js.map → index-DKtlnMlv.js.map} +1 -1
  30. package/dist/_chunks/{index-Dxn0NT06.js → index-DOMrViWi.js} +11 -8
  31. package/dist/_chunks/index-DOMrViWi.js.map +1 -0
  32. package/dist/_chunks/{index-BBn1ZvsE.mjs → index-DXRtXlZW.mjs} +36 -30
  33. package/dist/_chunks/index-DXRtXlZW.mjs.map +1 -0
  34. package/dist/_chunks/{index-CtFERXkl.js → index-Df365kgY.js} +95 -54
  35. package/dist/_chunks/index-Df365kgY.js.map +1 -0
  36. package/dist/_chunks/{index-CHRBu9Xy.mjs → index-Dm_GIRd4.mjs} +35 -31
  37. package/dist/_chunks/{index-DMpiX4hP.mjs → index-Dt-mlR1F.mjs} +11 -9
  38. package/dist/_chunks/index-Dt-mlR1F.mjs.map +1 -0
  39. package/dist/_chunks/{index-DJBXRNlE.mjs → index-QFbHwlyj.mjs} +94 -53
  40. package/dist/_chunks/index-QFbHwlyj.mjs.map +1 -0
  41. package/dist/_chunks/{index-Nx4IRYIK.mjs → index-QU9SZ_H9.mjs} +93 -52
  42. package/dist/_chunks/{index-CUlRMqGG.mjs → index-_49Fvwqq.mjs} +22 -8
  43. package/dist/_chunks/{index-Rfm9O167.mjs → index-aAKsnALd.mjs} +1 -1
  44. package/dist/_chunks/{index-CbW6k4FH.js → index-g8wz2qoC.js} +9 -8
  45. package/dist/admin/index.js +1 -1
  46. package/dist/admin/index.mjs +1 -1
  47. package/dist/admin/src/pages/Navigation/RouteItem.d.ts +1 -0
  48. package/dist/admin/src/pages/Settings/ContentBox.d.ts +5 -0
  49. package/dist/admin/src/pages/Settings/PageWrapper.d.ts +2 -1
  50. package/dist/admin/src/pages/Settings/SettingTitle.d.ts +4 -0
  51. package/dist/admin/src/pages/Settings/index.d.ts +4 -0
  52. package/dist/pluginId.d.ts +2 -1
  53. package/dist/server/index.js +61 -52
  54. package/dist/server/index.js.map +1 -1
  55. package/dist/server/index.mjs +61 -52
  56. package/dist/server/index.mjs.map +1 -1
  57. package/dist/server/src/utils/index.d.ts +6 -0
  58. package/dist/server/src/utils/navItemHandler.d.ts +1 -1
  59. package/dist/server/src/utils/reduceDepthOfOrphanedItems.d.ts +2 -0
  60. package/package.json +1 -1
  61. package/dist/_chunks/PageWrapper-Bp9vGwpG.js +0 -54
  62. package/dist/_chunks/PageWrapper-BvOY7VCN.mjs +0 -55
  63. package/dist/_chunks/PageWrapper-BzDrMm2d.js +0 -55
  64. package/dist/_chunks/PageWrapper-BzDrMm2d.js.map +0 -1
  65. package/dist/_chunks/PageWrapper-oLhcg9BA.mjs +0 -56
  66. package/dist/_chunks/PageWrapper-oLhcg9BA.mjs.map +0 -1
  67. package/dist/_chunks/index-BCPgfhBx.js.map +0 -1
  68. package/dist/_chunks/index-CHRBu9Xy.mjs.map +0 -1
  69. package/dist/_chunks/index-CbW6k4FH.js.map +0 -1
  70. package/dist/_chunks/index-CtFERXkl.js.map +0 -1
  71. package/dist/_chunks/index-DJBXRNlE.mjs.map +0 -1
  72. package/dist/_chunks/index-DMpiX4hP.mjs.map +0 -1
  73. package/dist/admin/src/components/modals/fields/Visibility.d.ts +0 -5
  74. package/dist/admin/src/components/modals/fields/index.d.ts +0 -2
@@ -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 } from "@strapi/strapi/admin";
5
- import { b as usePluginConfig, g as getTranslation } from "./index-CTA8agp7.mjs";
5
+ import { b as usePluginConfig, g as getTranslation } from "./index-Dt-mlR1F.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 } from "./PageWrapper-BvOY7VCN.mjs";
9
+ import { P as PageWrapper, C as ContentBox, S as SettingTitle } from "./SettingTitle-BaaQ_99D.mjs";
10
10
  function reducer(newConfig, action) {
11
11
  switch (action.type) {
12
12
  case "SET_MAX_DEPTH":
@@ -76,6 +76,10 @@ const Settings = () => {
76
76
  PageWrapper,
77
77
  {
78
78
  isSaving,
79
+ subtitle: formatMessage({
80
+ id: getTranslation("loading"),
81
+ defaultMessage: "Loading..."
82
+ }),
79
83
  disabledCondition: true,
80
84
  children: /* @__PURE__ */ jsx(FullLoader, { height: 200 })
81
85
  }
@@ -86,38 +90,40 @@ const Settings = () => {
86
90
  {
87
91
  save,
88
92
  isSaving,
93
+ subtitle: formatMessage({
94
+ id: getTranslation("settings.page.navigation.subtitle"),
95
+ defaultMessage: "Configure navigation settings"
96
+ }),
89
97
  disabledCondition: JSON.stringify(config) === JSON.stringify(initialConfig.current),
90
- children: /* @__PURE__ */ jsxs(
91
- Field.Root,
92
- {
93
- name: "maxNavDepth",
94
- children: [
95
- /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
96
- id: getTranslation("settings.page.maxNavDepth.label"),
97
- defaultMessage: "Max depth of navigation tree"
98
- }) }),
99
- /* @__PURE__ */ jsx(
100
- Field.Input,
101
- {
102
- id: "maxNavDepth",
103
- type: "number",
104
- min: 1,
105
- step: 1,
106
- value: config?.navigation?.maxDepth !== void 0 ? config.navigation.maxDepth : "",
107
- onChange: (e) => dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) }),
108
- onBlur: (e) => {
109
- if (e.target.value === "") return;
110
- dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) });
111
- }
112
- }
113
- ),
114
- /* @__PURE__ */ jsx(Field.Hint, {})
115
- ]
116
- }
117
- )
98
+ children: /* @__PURE__ */ jsx(ContentBox, { title: formatMessage({
99
+ id: getTranslation("settings.page.navigation.navigation"),
100
+ defaultMessage: "Navigation"
101
+ }), children: /* @__PURE__ */ jsxs(Field.Root, { name: "maxNavDepth", children: [
102
+ /* @__PURE__ */ jsx(Field.Label, { children: /* @__PURE__ */ jsx(SettingTitle, { children: formatMessage({
103
+ id: getTranslation("settings.page.navigation.maxNavDepth.label"),
104
+ defaultMessage: "Max depth of navigation tree"
105
+ }) }) }),
106
+ /* @__PURE__ */ jsx(
107
+ Field.Input,
108
+ {
109
+ id: "maxNavDepth",
110
+ type: "number",
111
+ min: 0,
112
+ step: 1,
113
+ value: config?.navigation?.maxDepth !== void 0 ? config.navigation.maxDepth + 1 : "",
114
+ onChange: (e) => dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) - 1 }),
115
+ onBlur: (e) => {
116
+ if (e.target.value === "") return;
117
+ dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) - 1 });
118
+ }
119
+ }
120
+ ),
121
+ /* @__PURE__ */ jsx(Field.Hint, {})
122
+ ] }) })
118
123
  }
119
124
  );
120
125
  };
121
126
  export {
122
127
  Settings as default
123
128
  };
129
+ //# sourceMappingURL=index-DXRtXlZW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DXRtXlZW.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 } 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 '../';\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 console.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 <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 );\n};\n\nexport default Settings;\n"],"names":[],"mappings":"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"}
@@ -4,11 +4,12 @@ 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-CbW6k4FH.js");
7
+ const index = require("./index-DOMrViWi.js");
8
8
  const reactIntl = require("react-intl");
9
9
  require("@strapi/icons/symbols");
10
10
  const FullLoader = require("./FullLoader-Cmsf8xS6.js");
11
- const PageWrapper = require("./PageWrapper-BzDrMm2d.js");
11
+ const SettingTitle = require("./SettingTitle-DDZxIqee.js");
12
+ const icons = require("@strapi/icons");
12
13
  function ContentTypeAccordion({
13
14
  contentType,
14
15
  contentTypeSettings,
@@ -180,74 +181,114 @@ const Settings = () => {
180
181
  }
181
182
  if (loading) {
182
183
  return /* @__PURE__ */ jsxRuntime.jsx(
183
- PageWrapper.PageWrapper,
184
+ SettingTitle.PageWrapper,
184
185
  {
185
186
  isSaving,
187
+ subtitle: formatMessage({
188
+ id: index.getTranslation("loading"),
189
+ defaultMessage: "Loading..."
190
+ }),
186
191
  disabledCondition: true,
187
192
  children: /* @__PURE__ */ jsxRuntime.jsx(FullLoader.FullLoader, { height: 200 })
188
193
  }
189
194
  );
190
195
  }
191
196
  return /* @__PURE__ */ jsxRuntime.jsxs(
192
- PageWrapper.PageWrapper,
197
+ SettingTitle.PageWrapper,
193
198
  {
194
199
  save,
195
200
  isSaving,
201
+ subtitle: formatMessage({
202
+ id: index.getTranslation("settings.page.general.subtitle"),
203
+ defaultMessage: "Configure general settings"
204
+ }),
196
205
  disabledCondition: JSON.stringify(config) === JSON.stringify(initialConfig.current),
197
206
  children: [
198
- /* @__PURE__ */ jsxRuntime.jsxs(
199
- designSystem.Field.Root,
200
- {
201
- name: "selectedContentTypes",
202
- hint: formatMessage({
203
- id: index.getTranslation("settings.page.enabledContentTypes.hint"),
204
- defaultMessage: "Select the content types for which you want to enable URL aliases"
205
- }),
206
- children: [
207
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
208
- id: index.getTranslation("settings.page.enabledContentTypes"),
209
- defaultMessage: "Enabled Content Types"
210
- }) }),
211
- /* @__PURE__ */ jsxRuntime.jsx(
212
- designSystem.MultiSelect,
213
- {
214
- placeholder: formatMessage({
215
- id: index.getTranslation("settings.page.enabledContentTypes.placeholder"),
216
- defaultMessage: "Select content types..."
217
- }),
218
- onClear: () => dispatch({ type: "SET_SELECTED_CONTENT_TYPES", payload: [] }),
219
- value: [...config?.selectedContentTypes.map((ct) => ct.uid) || []],
220
- onChange: (value) => dispatch({
221
- type: "SET_SELECTED_CONTENT_TYPES",
222
- payload: value.map((v) => ({
223
- uid: v,
224
- default: "",
225
- pattern: ""
226
- }))
227
- }),
228
- withTags: true,
229
- children: allContentTypes && allContentTypes.map(
230
- (item) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.MultiSelectOption, { value: item.uid, children: item.info.displayName }, item.uid)
231
- )
232
- }
233
- ),
234
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
235
- ]
236
- }
237
- ),
238
- config?.selectedContentTypes && config.selectedContentTypes.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingTop: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "selectedContentTypesAccordion", children: [
239
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
240
- id: index.getTranslation("settings.page.contentTypeSettings"),
241
- defaultMessage: "Content Type settings"
242
- }) }),
243
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { children: config.selectedContentTypes?.map((contentTypeSettings) => {
244
- const ct = allContentTypes?.find((item) => item.uid === contentTypeSettings.uid);
245
- return /* @__PURE__ */ jsxRuntime.jsx(ContentTypeAccordion, { contentType: ct, contentTypeSettings, dispatch }, contentTypeSettings.uid);
246
- }) })
207
+ /* @__PURE__ */ jsxRuntime.jsxs(SettingTitle.ContentBox, { title: formatMessage({
208
+ id: index.getTranslation("settings.page.general.contentTypes"),
209
+ defaultMessage: "Content Types"
210
+ }), children: [
211
+ /* @__PURE__ */ jsxRuntime.jsxs(
212
+ designSystem.Field.Root,
213
+ {
214
+ name: "selectedContentTypes",
215
+ hint: formatMessage({
216
+ id: index.getTranslation("settings.page.enabledContentTypes.hint"),
217
+ defaultMessage: "Select the content types for which you want to enable URL aliases"
218
+ }),
219
+ children: [
220
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: /* @__PURE__ */ jsxRuntime.jsx(SettingTitle.SettingTitle, { children: formatMessage({
221
+ id: index.getTranslation("settings.page.enabledContentTypes"),
222
+ defaultMessage: "Enabled Content Types"
223
+ }) }) }),
224
+ /* @__PURE__ */ jsxRuntime.jsx(
225
+ designSystem.MultiSelect,
226
+ {
227
+ placeholder: formatMessage({
228
+ id: index.getTranslation("settings.page.enabledContentTypes.placeholder"),
229
+ defaultMessage: "Select content types..."
230
+ }),
231
+ onClear: () => dispatch({ type: "SET_SELECTED_CONTENT_TYPES", payload: [] }),
232
+ value: [...config?.selectedContentTypes.map((ct) => ct.uid) || []],
233
+ onChange: (value) => dispatch({
234
+ type: "SET_SELECTED_CONTENT_TYPES",
235
+ payload: value.map((v) => ({
236
+ uid: v,
237
+ default: "",
238
+ pattern: ""
239
+ }))
240
+ }),
241
+ withTags: true,
242
+ children: allContentTypes && allContentTypes.map(
243
+ (item) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.MultiSelectOption, { value: item.uid, children: item.info.displayName }, item.uid)
244
+ )
245
+ }
246
+ ),
247
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
248
+ ]
249
+ }
250
+ ),
251
+ config?.selectedContentTypes && config.selectedContentTypes.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingTop: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "selectedContentTypesAccordion", children: [
252
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: /* @__PURE__ */ jsxRuntime.jsx(SettingTitle.SettingTitle, { children: formatMessage({
253
+ id: index.getTranslation("settings.page.contentTypeSettings"),
254
+ defaultMessage: "Content Type settings"
255
+ }) }) }),
256
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { children: config.selectedContentTypes?.map((contentTypeSettings) => {
257
+ const ct = allContentTypes?.find((item) => item.uid === contentTypeSettings.uid);
258
+ return /* @__PURE__ */ jsxRuntime.jsx(ContentTypeAccordion, { contentType: ct, contentTypeSettings, dispatch }, contentTypeSettings.uid);
259
+ }) })
260
+ ] }) })
261
+ ] }),
262
+ /* @__PURE__ */ jsxRuntime.jsx(SettingTitle.ContentBox, { title: formatMessage({
263
+ id: index.getTranslation("settings.page.general.details"),
264
+ defaultMessage: "Details"
265
+ }), children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "selectedContentTypesAccordion", children: [
266
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: /* @__PURE__ */ jsxRuntime.jsxs(SettingTitle.SettingTitle, { children: [
267
+ index.PLUGIN_NAME,
268
+ " ",
269
+ formatMessage({
270
+ id: index.getTranslation("version"),
271
+ defaultMessage: "Version"
272
+ })
273
+ ] }) }),
274
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { children: [
275
+ "v",
276
+ index.PLUGIN_VERSION,
277
+ /* @__PURE__ */ jsxRuntime.jsx(
278
+ designSystem.Link,
279
+ {
280
+ href: `https://github.com/mattisvensson/strapi-plugin-webatlas/releases/tag/v${index.PLUGIN_VERSION}`,
281
+ target: "_blank",
282
+ rel: "noopener noreferrer",
283
+ style: { marginLeft: 4 },
284
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.ExternalLink, {})
285
+ }
286
+ )
287
+ ] })
247
288
  ] }) })
248
289
  ]
249
290
  }
250
291
  );
251
292
  };
252
293
  exports.default = Settings;
253
- //# sourceMappingURL=index-CtFERXkl.js.map
294
+ //# sourceMappingURL=index-Df365kgY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Df365kgY.js","sources":["../../admin/src/pages/Settings/General/ContentTypeAccordion.tsx","../../admin/src/pages/Settings/General/index.tsx"],"sourcesContent":["import { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport Tooltip from '../../../components/Tooltip'\nimport { Box, Accordion, Field } from '@strapi/design-system';\nimport { getTranslation } from '../../../utils';\nimport { useIntl } from 'react-intl';\nimport type { ContentType, ConfigContentType } from '../../../../../types';\n\nexport default function ContentTypeAccordion({ \n contentType,\n contentTypeSettings,\n dispatch\n}: { \n contentType: ContentType | undefined, \n contentTypeSettings: ConfigContentType, \n dispatch: React.Dispatch<any>\n}) {\n \n const { formatMessage } = useIntl();\n\n if (!contentType) return null\n\n return (\n <Box\n borderColor={!contentTypeSettings.default && 'danger500'}\n key={contentType.uid}\n >\n <Accordion.Item key={contentType.uid} value={contentType.uid} size=\"S\">\n <Accordion.Header>\n <Accordion.Trigger>\n {contentType?.info.displayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={3}>\n <Field.Root\n name=\"selectedContentTypes\"\n hint={formatMessage({\n id: getTranslation('settings.page.defaultField.hint'),\n defaultMessage: 'The selected field from the content type will be used to generate the URL alias. Use a field that is unique and descriptive, such as a \"title\" or \"name\".',\n })}\n error={!contentTypeSettings.default && formatMessage({\n id: getTranslation('settings.page.defaultField.error'),\n defaultMessage: 'Please select a default field',\n })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: getTranslation('settings.page.defaultField'),\n defaultMessage: 'Default URL Alias field',\n })}\n </Field.Label>\n <SingleSelect\n name={`defaultField-${contentType.uid}`}\n onClear={() => dispatch({ type: 'SET_DEFAULT_FIELD', payload: { ctUid: contentType.uid, field: '' } })}\n value={contentTypeSettings?.default || ''}\n onChange={(value: string) => dispatch({ type: 'SET_DEFAULT_FIELD', payload: { ctUid: contentType.uid, field: value } })}\n >\n {Object.entries(contentType.attributes).map(([key], index) => {\n if (\n key === 'id' || \n key === 'documentId' ||\n key === 'createdAt' || \n key === 'updatedAt' || \n key === 'createdBy' || \n key === 'updatedBy' ||\n key === 'webatlas_path' ||\n key === 'webatlas_override'\n ) return null\n return <SingleSelectOption key={index} value={key}>{key}</SingleSelectOption>\n })}\n </SingleSelect>\n <Field.Hint/>\n </Field.Root>\n <Box paddingTop={4}>\n <Field.Root\n name=\"urlAliasPattern\"\n hint={formatMessage({\n id: getTranslation('settings.page.urlAliasPattern.hint'),\n defaultMessage: 'The pattern to prepend to the generated URL alias. For example, if you enter \"blog\" and the value of default field is \"My First Post\", the generated URL alias will be \"blog/my-first-post\". Leave empty for no prefix.',\n })}\n >\n <Field.Label>\n {formatMessage({\n id: getTranslation('settings.page.urlAliasPattern'),\n defaultMessage: 'URL Alias Pattern',\n })}\n <Tooltip description={formatMessage({\n id: getTranslation('settings.page.urlAliasPattern.tooltip'),\n defaultMessage: 'Leading and trailing slashes will be removed. Spaces will be replaced with hyphens. Special characters will be encoded.',\n })} />\n </Field.Label>\n <Field.Input\n value={contentTypeSettings.pattern}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => dispatch({ type: 'SET_PATTERN', payload: { ctUid: contentType.uid, pattern: e.target.value } })}\n disabled={!contentTypeSettings.default}\n type=\"text\"\n placeholder={formatMessage({\n id: getTranslation('settings.page.urlAliasPattern.placeholder'),\n defaultMessage: 'e.g. blog',\n })}\n />\n <Field.Hint />\n </Field.Root>\n </Box>\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n </Box>\n \n )\n}","/*\n *\n * Settings\n * This file contains the general settings page for the Webatlas plugin.\n * It allows users to configure which content types are enabled for URL aliases and navigations,\n * as well as setting default fields and the URL alias patterns for each content type. \n *\n*/\n\nimport { useEffect, useState, useReducer, useRef } from 'react';\nimport { Box, Accordion, Field } from '@strapi/design-system';\nimport { useNotification } from '@strapi/strapi/admin'\nimport { MultiSelect, MultiSelectOption } from '@strapi/design-system';\nimport usePluginConfig from '../../../hooks/usePluginConfig';\nimport type { ContentType, ConfigContentType, PluginConfig } from '../../../../../types';\nimport transformToUrl from '../../../../../utils/transformToUrl';\nimport useAllContentTypes from '../../../hooks/useAllContentTypes';\nimport { getTranslation } from '../../../utils';\nimport { useIntl } from 'react-intl';\nimport { FullLoader } from '../../../components/UI';\nimport { PageWrapper, ContentBox, SettingTitle } from '..';\nimport ContentTypeAccordion from './ContentTypeAccordion';\nimport { PLUGIN_VERSION, PLUGIN_NAME } from '../../../../../pluginId';\nimport { Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\n\ntype Action =\n | { type: 'SET_SELECTED_CONTENT_TYPES'; payload: ConfigContentType[] }\n | { type: 'SET_DEFAULT_FIELD'; payload: { ctUid: string; field: string } }\n | { type: 'SET_PATTERN'; payload: { ctUid: string; pattern: string } }\n | { type: 'SET_CONFIG'; payload: PluginConfig }\n\nfunction reducer(newConfig: PluginConfig | null, action: Action): PluginConfig | null {\n let updatedContentTypes\n\n switch (action.type) {\n case 'SET_SELECTED_CONTENT_TYPES':\n if (!newConfig) return null;\n updatedContentTypes = action.payload.map(ct => {\n return newConfig?.selectedContentTypes.find((cta: ConfigContentType) => cta.uid === ct.uid) || ct\n })\n return { ...newConfig, selectedContentTypes: updatedContentTypes || [] };\n case 'SET_DEFAULT_FIELD':\n if (!newConfig) return null;\n updatedContentTypes = newConfig?.selectedContentTypes.map(ct =>\n ct.uid === action.payload.ctUid ? { ...ct, default: action.payload.field } : ct\n );\n return { ...newConfig, selectedContentTypes: updatedContentTypes || [] };\n case 'SET_PATTERN':\n if (!newConfig) return null;\n updatedContentTypes = newConfig?.selectedContentTypes.map(ct =>\n ct.uid === action.payload.ctUid ? { ...ct, pattern: transformToUrl(action.payload.pattern) } : ct\n );\n return { ...newConfig, selectedContentTypes: updatedContentTypes || [] };\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 { contentTypes: allContentTypesData } = useAllContentTypes();\n const allContentTypes = allContentTypesData?.filter((ct: ContentType) => ct.pluginOptions?.webatlas?.active === true);\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 (\n !config \n || config.selectedContentTypes.find((cta: ConfigContentType) => !cta.default) !== undefined\n ) return\n\n setIsSaving(true);\n try {\n await setConfig({selectedContentTypes: config.selectedContentTypes })\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 console.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 <PageWrapper\n save={save}\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('settings.page.general.subtitle'),\n defaultMessage: 'Configure general settings',\n })}\n disabledCondition={JSON.stringify(config) === JSON.stringify(initialConfig.current)}\n >\n <ContentBox title={formatMessage({\n id: getTranslation('settings.page.general.contentTypes'),\n defaultMessage: 'Content Types',\n })}>\n <Field.Root\n name=\"selectedContentTypes\"\n hint={formatMessage({\n id: getTranslation('settings.page.enabledContentTypes.hint'),\n defaultMessage: 'Select the content types for which you want to enable URL aliases',\n })}\n >\n <Field.Label>\n <SettingTitle>\n {formatMessage({\n id: getTranslation('settings.page.enabledContentTypes'),\n defaultMessage: 'Enabled Content Types',\n })}\n </SettingTitle>\n </Field.Label>\n <MultiSelect\n placeholder={formatMessage({\n id: getTranslation('settings.page.enabledContentTypes.placeholder'),\n defaultMessage: 'Select content types...',\n })}\n onClear={() => dispatch({ type: 'SET_SELECTED_CONTENT_TYPES', payload: [] })}\n value={[...config?.selectedContentTypes.map((ct: ConfigContentType) => ct.uid) || []]}\n onChange={(value: string[]) =>\n dispatch({\n type: 'SET_SELECTED_CONTENT_TYPES',\n payload: value.map(v => ({\n uid: v,\n default: '',\n pattern: '',\n })),\n })\n }\n withTags\n >\n {allContentTypes && allContentTypes.map(item => \n <MultiSelectOption key={item.uid} value={item.uid}>{item.info.displayName}</MultiSelectOption>\n )}\n </MultiSelect>\n <Field.Hint/>\n </Field.Root>\n {config?.selectedContentTypes && config.selectedContentTypes.length > 0 && \n <Box paddingTop={4}>\n <Field.Root name=\"selectedContentTypesAccordion\">\n <Field.Label>\n <SettingTitle>\n {formatMessage({\n id: getTranslation('settings.page.contentTypeSettings'),\n defaultMessage: 'Content Type settings',\n })}\n </SettingTitle> \n </Field.Label>\n <Accordion.Root>\n {config.selectedContentTypes?.map((contentTypeSettings: ConfigContentType) => {\n const ct: ContentType | undefined = allContentTypes?.find((item) => item.uid === contentTypeSettings.uid)\n return <ContentTypeAccordion key={contentTypeSettings.uid} contentType={ct} contentTypeSettings={contentTypeSettings} dispatch={dispatch} />\n })}\n </Accordion.Root>\n </Field.Root>\n </Box>\n }\n </ContentBox>\n <ContentBox title={formatMessage({\n id: getTranslation('settings.page.general.details'),\n defaultMessage: 'Details',\n })}>\n <Field.Root name=\"selectedContentTypesAccordion\">\n <Field.Label>\n <SettingTitle>\n { PLUGIN_NAME }{' '}\n {formatMessage({\n id: getTranslation('version'),\n defaultMessage: 'Version',\n })}\n </SettingTitle>\n </Field.Label>\n <Typography>\n v{PLUGIN_VERSION}\n <Link\n href={`https://github.com/mattisvensson/strapi-plugin-webatlas/releases/tag/v${PLUGIN_VERSION}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ marginLeft: 4 }}>\n <ExternalLink />\n </Link>\n </Typography>\n </Field.Root>\n </ContentBox>\n </PageWrapper>\n );\n};\n\nexport default Settings;\n"],"names":["useIntl","jsx","Box","jsxs","Accordion","Field","getTranslation","SingleSelect","index","SingleSelectOption","Tooltip","transformToUrl","usePluginConfig","useReducer","useAllContentTypes","useNotification","useState","useRef","useEffect","PageWrapper","FullLoader","ContentBox","SettingTitle","MultiSelect","MultiSelectOption","PLUGIN_NAME","Typography","PLUGIN_VERSION","Link","ExternalLink"],"mappings":"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"}
@@ -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 } from "@strapi/strapi/admin";
5
- import { b as usePluginConfig, g as getTranslation } from "./index-DMpiX4hP.mjs";
5
+ import { b as usePluginConfig, g as getTranslation } from "./index-D2Meknib.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 } from "./PageWrapper-oLhcg9BA.mjs";
9
+ import { P as PageWrapper, C as ContentBox, S as SettingTitle } from "./SettingTitle-IwvX4Kb5.mjs";
10
10
  function reducer(newConfig, action) {
11
11
  switch (action.type) {
12
12
  case "SET_MAX_DEPTH":
@@ -76,6 +76,10 @@ const Settings = () => {
76
76
  PageWrapper,
77
77
  {
78
78
  isSaving,
79
+ subtitle: formatMessage({
80
+ id: getTranslation("loading"),
81
+ defaultMessage: "Loading..."
82
+ }),
79
83
  disabledCondition: true,
80
84
  children: /* @__PURE__ */ jsx(FullLoader, { height: 200 })
81
85
  }
@@ -86,39 +90,39 @@ const Settings = () => {
86
90
  {
87
91
  save,
88
92
  isSaving,
93
+ subtitle: formatMessage({
94
+ id: getTranslation("settings.page.navigation.subtitle"),
95
+ defaultMessage: "Configure navigation settings"
96
+ }),
89
97
  disabledCondition: JSON.stringify(config) === JSON.stringify(initialConfig.current),
90
- children: /* @__PURE__ */ jsxs(
91
- Field.Root,
92
- {
93
- name: "maxNavDepth",
94
- children: [
95
- /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
96
- id: getTranslation("settings.page.maxNavDepth.label"),
97
- defaultMessage: "Max depth of navigation tree"
98
- }) }),
99
- /* @__PURE__ */ jsx(
100
- Field.Input,
101
- {
102
- id: "maxNavDepth",
103
- type: "number",
104
- min: 1,
105
- step: 1,
106
- value: config?.navigation?.maxDepth !== void 0 ? config.navigation.maxDepth : "",
107
- onChange: (e) => dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) }),
108
- onBlur: (e) => {
109
- if (e.target.value === "") return;
110
- dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) });
111
- }
112
- }
113
- ),
114
- /* @__PURE__ */ jsx(Field.Hint, {})
115
- ]
116
- }
117
- )
98
+ children: /* @__PURE__ */ jsx(ContentBox, { title: formatMessage({
99
+ id: getTranslation("settings.page.navigation.navigation"),
100
+ defaultMessage: "Navigation"
101
+ }), children: /* @__PURE__ */ jsxs(Field.Root, { name: "maxNavDepth", children: [
102
+ /* @__PURE__ */ jsx(Field.Label, { children: /* @__PURE__ */ jsx(SettingTitle, { children: formatMessage({
103
+ id: getTranslation("settings.page.navigation.maxNavDepth.label"),
104
+ defaultMessage: "Max depth of navigation tree"
105
+ }) }) }),
106
+ /* @__PURE__ */ jsx(
107
+ Field.Input,
108
+ {
109
+ id: "maxNavDepth",
110
+ type: "number",
111
+ min: 0,
112
+ step: 1,
113
+ value: config?.navigation?.maxDepth !== void 0 ? config.navigation.maxDepth + 1 : "",
114
+ onChange: (e) => dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) - 1 }),
115
+ onBlur: (e) => {
116
+ if (e.target.value === "") return;
117
+ dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) - 1 });
118
+ }
119
+ }
120
+ ),
121
+ /* @__PURE__ */ jsx(Field.Hint, {})
122
+ ] }) })
118
123
  }
119
124
  );
120
125
  };
121
126
  export {
122
127
  Settings as default
123
128
  };
124
- //# sourceMappingURL=index-CHRBu9Xy.mjs.map
@@ -23,7 +23,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
23
23
  );
24
24
  });
25
25
  };
26
- const version = "0.8.1";
26
+ const version = "0.8.2";
27
27
  const keywords = [];
28
28
  const type = "commonjs";
29
29
  const exports = {
@@ -148,6 +148,7 @@ const pluginPkg = {
148
148
  };
149
149
  const PLUGIN_ID = pluginPkg.strapi.name.replace(/^(@[^-,.][\w,-]+\/|strapi-)plugin-/i, "") || "webatlas";
150
150
  const PLUGIN_NAME = pluginPkg.strapi.displayName;
151
+ const PLUGIN_VERSION = pluginPkg.version;
151
152
  const Initializer = ({ setPlugin }) => {
152
153
  const ref = useRef(setPlugin);
153
154
  useEffect(() => {
@@ -3831,7 +3832,7 @@ const Alias = ({ config }) => {
3831
3832
  }
3832
3833
  }
3833
3834
  if (!initialLoadComplete) return /* @__PURE__ */ jsx(Typography, { textColor: "neutral600", children: formatMessage({
3834
- id: getTranslation("components.CMEditViewAside.loading"),
3835
+ id: getTranslation("loading"),
3835
3836
  defaultMessage: "Loading..."
3836
3837
  }) });
3837
3838
  return /* @__PURE__ */ jsx(
@@ -4013,7 +4014,7 @@ const CMEditViewAside = () => {
4013
4014
  });
4014
4015
  }, []);
4015
4016
  if (isLoading || !config) return /* @__PURE__ */ jsx(Typography, { textColor: "neutral600", children: formatMessage({
4016
- id: getTranslation("components.CMEditViewAside.loading"),
4017
+ id: getTranslation("loading"),
4017
4018
  defaultMessage: "Loading..."
4018
4019
  }) });
4019
4020
  if (!isAllowedContentType) return /* @__PURE__ */ jsxs(Typography, { textColor: "neutral600", children: [
@@ -4063,7 +4064,7 @@ const index = {
4063
4064
  defaultMessage: "Routes"
4064
4065
  },
4065
4066
  Component: async () => {
4066
- const component = await import("./index-CAged_xE.mjs");
4067
+ const component = await import("./index-B2tjc_lG.mjs");
4067
4068
  return { default: component.default };
4068
4069
  },
4069
4070
  permissions: [
@@ -4082,7 +4083,7 @@ const index = {
4082
4083
  defaultMessage: "Navigation"
4083
4084
  },
4084
4085
  Component: async () => {
4085
- const component = await import("./index-D29zBs5w.mjs");
4086
+ const component = await import("./index-D2SIGcj3.mjs");
4086
4087
  return { default: component.default };
4087
4088
  },
4088
4089
  permissions: [
@@ -4111,7 +4112,7 @@ const index = {
4111
4112
  Component: async () => {
4112
4113
  return await import(
4113
4114
  /* webpackChunkName: "webatlas-settings-general-page" */
4114
- "./index-DJBXRNlE.mjs"
4115
+ "./index-QFbHwlyj.mjs"
4115
4116
  );
4116
4117
  },
4117
4118
  permissions: [
@@ -4135,7 +4136,7 @@ const index = {
4135
4136
  Component: async () => {
4136
4137
  return await import(
4137
4138
  /* webpackChunkName: "webatlas-settings-navigation-page" */
4138
- "./index-CHRBu9Xy.mjs"
4139
+ "./index-DXRtXlZW.mjs"
4139
4140
  );
4140
4141
  },
4141
4142
  permissions: [
@@ -4164,7 +4165,7 @@ const index = {
4164
4165
  return Promise.all(
4165
4166
  locales.map(async (locale) => {
4166
4167
  try {
4167
- const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-Dt80IqMG.mjs"), "./translations/en.json": () => import("./en-BHxDiueo.mjs") }), `./translations/${locale}.json`, 3);
4168
+ const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-B9pq-AJZ.mjs"), "./translations/en.json": () => import("./en-Dmbcf7gp.mjs") }), `./translations/${locale}.json`, 3);
4168
4169
  return { data, locale };
4169
4170
  } catch {
4170
4171
  return { data: {}, locale };
@@ -4181,9 +4182,10 @@ export {
4181
4182
  usePluginConfig as b,
4182
4183
  useAllContentTypes as c,
4183
4184
  debounce as d,
4185
+ PLUGIN_VERSION as e,
4184
4186
  getTranslation as g,
4185
4187
  index as i,
4186
4188
  transformToUrl as t,
4187
4189
  useApi as u
4188
4190
  };
4189
- //# sourceMappingURL=index-DMpiX4hP.mjs.map
4191
+ //# sourceMappingURL=index-Dt-mlR1F.mjs.map