@payloadcms/plugin-seo 3.0.0-canary.fb81f02 → 3.0.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 (119) hide show
  1. package/dist/exports/client.d.ts +6 -0
  2. package/dist/exports/client.d.ts.map +1 -0
  3. package/dist/exports/client.js +7 -0
  4. package/dist/exports/client.js.map +1 -0
  5. package/dist/fields/MetaDescription/MetaDescriptionComponent.d.ts +3 -4
  6. package/dist/fields/MetaDescription/MetaDescriptionComponent.d.ts.map +1 -1
  7. package/dist/fields/MetaDescription/MetaDescriptionComponent.js +44 -20
  8. package/dist/fields/MetaDescription/MetaDescriptionComponent.js.map +1 -1
  9. package/dist/fields/MetaDescription/index.d.ts.map +1 -1
  10. package/dist/fields/MetaDescription/index.js +5 -8
  11. package/dist/fields/MetaDescription/index.js.map +1 -1
  12. package/dist/fields/MetaImage/MetaImageComponent.d.ts +3 -3
  13. package/dist/fields/MetaImage/MetaImageComponent.d.ts.map +1 -1
  14. package/dist/fields/MetaImage/MetaImageComponent.js +50 -23
  15. package/dist/fields/MetaImage/MetaImageComponent.js.map +1 -1
  16. package/dist/fields/MetaImage/index.d.ts.map +1 -1
  17. package/dist/fields/MetaImage/index.js +5 -8
  18. package/dist/fields/MetaImage/index.js.map +1 -1
  19. package/dist/fields/MetaTitle/MetaTitleComponent.d.ts +3 -3
  20. package/dist/fields/MetaTitle/MetaTitleComponent.d.ts.map +1 -1
  21. package/dist/fields/MetaTitle/MetaTitleComponent.js +43 -18
  22. package/dist/fields/MetaTitle/MetaTitleComponent.js.map +1 -1
  23. package/dist/fields/MetaTitle/index.d.ts.map +1 -1
  24. package/dist/fields/MetaTitle/index.js +5 -8
  25. package/dist/fields/MetaTitle/index.js.map +1 -1
  26. package/dist/fields/Overview/OverviewComponent.d.ts +8 -0
  27. package/dist/fields/Overview/OverviewComponent.d.ts.map +1 -1
  28. package/dist/fields/Overview/OverviewComponent.js +13 -7
  29. package/dist/fields/Overview/OverviewComponent.js.map +1 -1
  30. package/dist/fields/Overview/index.d.ts +8 -0
  31. package/dist/fields/Overview/index.d.ts.map +1 -1
  32. package/dist/fields/Overview/index.js +8 -9
  33. package/dist/fields/Overview/index.js.map +1 -1
  34. package/dist/fields/Preview/PreviewComponent.d.ts +3 -3
  35. package/dist/fields/Preview/PreviewComponent.d.ts.map +1 -1
  36. package/dist/fields/Preview/PreviewComponent.js +24 -9
  37. package/dist/fields/Preview/PreviewComponent.js.map +1 -1
  38. package/dist/fields/Preview/index.d.ts.map +1 -1
  39. package/dist/fields/Preview/index.js +5 -8
  40. package/dist/fields/Preview/index.js.map +1 -1
  41. package/dist/fields/index.scss +5 -3
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +67 -102
  44. package/dist/index.js.map +1 -1
  45. package/dist/translations/cs.d.ts +3 -0
  46. package/dist/translations/cs.d.ts.map +1 -0
  47. package/dist/translations/cs.js +25 -0
  48. package/dist/translations/cs.js.map +1 -0
  49. package/dist/translations/de.d.ts +3 -0
  50. package/dist/translations/de.d.ts.map +1 -0
  51. package/dist/translations/de.js +25 -0
  52. package/dist/translations/de.js.map +1 -0
  53. package/dist/translations/en.d.ts +3 -0
  54. package/dist/translations/en.d.ts.map +1 -0
  55. package/dist/translations/en.js +25 -0
  56. package/dist/translations/en.js.map +1 -0
  57. package/dist/translations/es.d.ts +3 -0
  58. package/dist/translations/es.d.ts.map +1 -0
  59. package/dist/translations/es.js +25 -0
  60. package/dist/translations/es.js.map +1 -0
  61. package/dist/translations/fa.d.ts +3 -0
  62. package/dist/translations/fa.d.ts.map +1 -0
  63. package/dist/translations/fa.js +25 -0
  64. package/dist/translations/fa.js.map +1 -0
  65. package/dist/translations/fr.d.ts +3 -0
  66. package/dist/translations/fr.d.ts.map +1 -0
  67. package/dist/translations/fr.js +25 -0
  68. package/dist/translations/fr.js.map +1 -0
  69. package/dist/translations/index.d.ts +15 -178
  70. package/dist/translations/index.d.ts.map +1 -1
  71. package/dist/translations/index.js +26 -176
  72. package/dist/translations/index.js.map +1 -1
  73. package/dist/translations/it.d.ts +3 -0
  74. package/dist/translations/it.d.ts.map +1 -0
  75. package/dist/translations/it.js +25 -0
  76. package/dist/translations/it.js.map +1 -0
  77. package/dist/translations/nb.d.ts +3 -0
  78. package/dist/translations/nb.d.ts.map +1 -0
  79. package/dist/translations/nb.js +25 -0
  80. package/dist/translations/nb.js.map +1 -0
  81. package/dist/translations/pl.d.ts +3 -0
  82. package/dist/translations/pl.d.ts.map +1 -0
  83. package/dist/translations/pl.js +25 -0
  84. package/dist/translations/pl.js.map +1 -0
  85. package/dist/translations/ru.d.ts +3 -0
  86. package/dist/translations/ru.d.ts.map +1 -0
  87. package/dist/translations/ru.js +25 -0
  88. package/dist/translations/ru.js.map +1 -0
  89. package/dist/translations/sv.d.ts +3 -0
  90. package/dist/translations/sv.d.ts.map +1 -0
  91. package/dist/translations/sv.js +25 -0
  92. package/dist/translations/sv.js.map +1 -0
  93. package/dist/translations/tr.d.ts +3 -0
  94. package/dist/translations/tr.d.ts.map +1 -0
  95. package/dist/translations/tr.js +25 -0
  96. package/dist/translations/tr.js.map +1 -0
  97. package/dist/translations/translation-schema.json +5 -1
  98. package/dist/translations/uk.d.ts +3 -0
  99. package/dist/translations/uk.d.ts.map +1 -0
  100. package/dist/translations/uk.js +25 -0
  101. package/dist/translations/uk.js.map +1 -0
  102. package/dist/translations/vi.d.ts +3 -0
  103. package/dist/translations/vi.d.ts.map +1 -0
  104. package/dist/translations/vi.js +25 -0
  105. package/dist/translations/vi.js.map +1 -0
  106. package/dist/types.d.ts +44 -11
  107. package/dist/types.d.ts.map +1 -1
  108. package/dist/types.js.map +1 -1
  109. package/dist/ui/LengthIndicator.js +1 -1
  110. package/dist/ui/LengthIndicator.js.map +1 -1
  111. package/license.md +22 -0
  112. package/package.json +29 -17
  113. package/dist/translations/en.json +0 -22
  114. package/dist/translations/es.json +0 -22
  115. package/dist/translations/fa.json +0 -22
  116. package/dist/translations/fr.json +0 -22
  117. package/dist/translations/pl.json +0 -22
  118. package/dist/translations/ru.json +0 -22
  119. package/dist/translations/uk.json +0 -22
package/dist/index.js CHANGED
@@ -1,101 +1,37 @@
1
- import { addDataAndFileToRequest } from '@payloadcms/next/utilities';
2
- import { withMergedProps } from '@payloadcms/ui/shared';
3
1
  import { deepMergeSimple } from 'payload/shared';
4
- import { MetaDescriptionComponent } from './fields/MetaDescription/MetaDescriptionComponent.js';
5
- import { MetaImageComponent } from './fields/MetaImage/MetaImageComponent.js';
6
- import { MetaTitleComponent } from './fields/MetaTitle/MetaTitleComponent.js';
7
- import { OverviewComponent } from './fields/Overview/OverviewComponent.js';
8
- import { PreviewComponent } from './fields/Preview/PreviewComponent.js';
2
+ import { MetaDescriptionField } from './fields/MetaDescription/index.js';
3
+ import { MetaImageField } from './fields/MetaImage/index.js';
4
+ import { MetaTitleField } from './fields/MetaTitle/index.js';
5
+ import { OverviewField } from './fields/Overview/index.js';
6
+ import { PreviewField } from './fields/Preview/index.js';
9
7
  import { translations } from './translations/index.js';
10
8
  export const seoPlugin = (pluginConfig)=>(config)=>{
9
+ const defaultFields = [
10
+ OverviewField({}),
11
+ MetaTitleField({
12
+ hasGenerateFn: typeof pluginConfig?.generateTitle === 'function'
13
+ }),
14
+ MetaDescriptionField({
15
+ hasGenerateFn: typeof pluginConfig?.generateDescription === 'function'
16
+ }),
17
+ ...pluginConfig?.uploadsCollection ? [
18
+ MetaImageField({
19
+ hasGenerateFn: typeof pluginConfig?.generateImage === 'function',
20
+ relationTo: pluginConfig.uploadsCollection
21
+ })
22
+ ] : [],
23
+ PreviewField({
24
+ hasGenerateFn: typeof pluginConfig?.generateURL === 'function'
25
+ })
26
+ ];
11
27
  const seoFields = [
12
28
  {
13
29
  name: 'meta',
14
30
  type: 'group',
15
31
  fields: [
16
- {
17
- name: 'overview',
18
- type: 'ui',
19
- admin: {
20
- components: {
21
- Field: OverviewComponent
22
- }
23
- },
24
- label: 'Overview'
25
- },
26
- {
27
- name: 'title',
28
- type: 'text',
29
- admin: {
30
- components: {
31
- Field: withMergedProps({
32
- Component: MetaTitleComponent,
33
- sanitizeServerOnlyProps: true,
34
- toMergeIntoProps: {
35
- hasGenerateTitleFn: typeof pluginConfig?.generateTitle === 'function'
36
- }
37
- })
38
- }
39
- },
40
- localized: true,
41
- ...pluginConfig?.fieldOverrides?.title ?? {}
42
- },
43
- {
44
- name: 'description',
45
- type: 'textarea',
46
- admin: {
47
- components: {
48
- Field: withMergedProps({
49
- Component: MetaDescriptionComponent,
50
- sanitizeServerOnlyProps: true,
51
- toMergeIntoProps: {
52
- hasGenerateDescriptionFn: typeof pluginConfig?.generateDescription === 'function'
53
- }
54
- })
55
- }
56
- },
57
- localized: true,
58
- ...pluginConfig?.fieldOverrides?.description ?? {}
59
- },
60
- ...pluginConfig?.uploadsCollection ? [
61
- {
62
- name: 'image',
63
- type: 'upload',
64
- admin: {
65
- components: {
66
- Field: withMergedProps({
67
- Component: MetaImageComponent,
68
- sanitizeServerOnlyProps: true,
69
- toMergeIntoProps: {
70
- hasGenerateImageFn: typeof pluginConfig?.generateImage === 'function'
71
- }
72
- })
73
- },
74
- description: 'Maximum upload file size: 12MB. Recommended file size for images is <500KB.'
75
- },
76
- label: 'Meta Image',
77
- localized: true,
78
- relationTo: pluginConfig?.uploadsCollection,
79
- ...pluginConfig?.fieldOverrides?.image ?? {}
80
- }
81
- ] : [],
82
- ...pluginConfig?.fields || [],
83
- {
84
- name: 'preview',
85
- type: 'ui',
86
- admin: {
87
- components: {
88
- Field: withMergedProps({
89
- Component: PreviewComponent,
90
- sanitizeServerOnlyProps: true,
91
- toMergeIntoProps: {
92
- hasGenerateURLFn: typeof pluginConfig?.generateURL === 'function'
93
- }
94
- })
95
- }
96
- },
97
- label: 'Preview'
98
- }
32
+ ...pluginConfig?.fields && typeof pluginConfig.fields === 'function' ? pluginConfig.fields({
33
+ defaultFields
34
+ }) : defaultFields
99
35
  ],
100
36
  interfaceName: pluginConfig.interfaceName,
101
37
  label: 'SEO'
@@ -167,9 +103,16 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
167
103
  ...config.endpoints ?? [],
168
104
  {
169
105
  handler: async (req)=>{
170
- await addDataAndFileToRequest(req);
171
- req.t;
172
- const result = pluginConfig.generateTitle ? await pluginConfig.generateTitle(req.data) : '';
106
+ const data = await req.json();
107
+ if (data) {
108
+ req.data = data;
109
+ }
110
+ const result = pluginConfig.generateTitle ? await pluginConfig.generateTitle({
111
+ ...data,
112
+ collectionConfig: req.data.collectionSlug ? config.collections?.find((c)=>c.slug === req.data.collectionSlug) : null,
113
+ globalConfig: req.data.globalSlug ? config.globals?.find((g)=>g.slug === req.data.globalSlug) : null,
114
+ req
115
+ }) : '';
173
116
  return new Response(JSON.stringify({
174
117
  result
175
118
  }), {
@@ -181,8 +124,16 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
181
124
  },
182
125
  {
183
126
  handler: async (req)=>{
184
- await addDataAndFileToRequest(req);
185
- const result = pluginConfig.generateDescription ? await pluginConfig.generateDescription(req.data) : '';
127
+ const data = await req.json();
128
+ if (data) {
129
+ req.data = data;
130
+ }
131
+ const result = pluginConfig.generateDescription ? await pluginConfig.generateDescription({
132
+ ...data,
133
+ collectionConfig: req.data.collectionSlug ? config.collections?.find((c)=>c.slug === req.data.collectionSlug) : null,
134
+ globalConfig: req.data.globalSlug ? config.globals?.find((g)=>g.slug === req.data.globalSlug) : null,
135
+ req
136
+ }) : '';
186
137
  return new Response(JSON.stringify({
187
138
  result
188
139
  }), {
@@ -194,8 +145,16 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
194
145
  },
195
146
  {
196
147
  handler: async (req)=>{
197
- await addDataAndFileToRequest(req);
198
- const result = pluginConfig.generateURL ? await pluginConfig.generateURL(req.data) : '';
148
+ const data = await req.json();
149
+ if (data) {
150
+ req.data = data;
151
+ }
152
+ const result = pluginConfig.generateURL ? await pluginConfig.generateURL({
153
+ ...data,
154
+ collectionConfig: req.data.collectionSlug ? config.collections?.find((c)=>c.slug === req.data.collectionSlug) : null,
155
+ globalConfig: req.data.globalSlug ? config.globals?.find((g)=>g.slug === req.data.globalSlug) : null,
156
+ req
157
+ }) : '';
199
158
  return new Response(JSON.stringify({
200
159
  result
201
160
  }), {
@@ -207,8 +166,16 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
207
166
  },
208
167
  {
209
168
  handler: async (req)=>{
210
- await addDataAndFileToRequest(req);
211
- const result = pluginConfig.generateImage ? await pluginConfig.generateImage(req.data) : '';
169
+ const data = await req.json();
170
+ if (data) {
171
+ req.data = data;
172
+ }
173
+ const result = pluginConfig.generateImage ? await pluginConfig.generateImage({
174
+ ...data,
175
+ collectionConfig: req.data.collectionSlug ? config.collections?.find((c)=>c.slug === req.data.collectionSlug) : null,
176
+ globalConfig: req.data.globalSlug ? config.globals?.find((g)=>g.slug === req.data.globalSlug) : null,
177
+ req
178
+ }) : '';
212
179
  return new Response(result, {
213
180
  status: 200
214
181
  });
@@ -263,9 +230,7 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
263
230
  }) || [],
264
231
  i18n: {
265
232
  ...config.i18n,
266
- translations: {
267
- ...deepMergeSimple(translations, config.i18n?.translations)
268
- }
233
+ translations: deepMergeSimple(translations, config.i18n?.translations)
269
234
  }
270
235
  };
271
236
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import type { Config, Field, GroupField, TabsField, TextField } from 'payload'\n\nimport { addDataAndFileToRequest } from '@payloadcms/next/utilities'\nimport { withMergedProps } from '@payloadcms/ui/shared'\nimport { deepMergeSimple } from 'payload/shared'\n\nimport type {\n GenerateDescription,\n GenerateImage,\n GenerateTitle,\n GenerateURL,\n SEOPluginConfig,\n} from './types.js'\n\nimport { MetaDescriptionComponent } from './fields/MetaDescription/MetaDescriptionComponent.js'\nimport { MetaImageComponent } from './fields/MetaImage/MetaImageComponent.js'\nimport { MetaTitleComponent } from './fields/MetaTitle/MetaTitleComponent.js'\nimport { OverviewComponent } from './fields/Overview/OverviewComponent.js'\nimport { PreviewComponent } from './fields/Preview/PreviewComponent.js'\nimport { translations } from './translations/index.js'\n\nexport const seoPlugin =\n (pluginConfig: SEOPluginConfig) =>\n (config: Config): Config => {\n const seoFields: GroupField[] = [\n {\n name: 'meta',\n type: 'group',\n fields: [\n {\n name: 'overview',\n type: 'ui',\n admin: {\n components: {\n Field: OverviewComponent,\n },\n },\n label: 'Overview',\n },\n {\n name: 'title',\n type: 'text',\n admin: {\n components: {\n Field: withMergedProps({\n Component: MetaTitleComponent,\n sanitizeServerOnlyProps: true,\n toMergeIntoProps: {\n hasGenerateTitleFn: typeof pluginConfig?.generateTitle === 'function',\n },\n }),\n },\n },\n localized: true,\n ...((pluginConfig?.fieldOverrides?.title as unknown as TextField) ?? {}),\n },\n {\n name: 'description',\n type: 'textarea',\n admin: {\n components: {\n Field: withMergedProps({\n Component: MetaDescriptionComponent,\n sanitizeServerOnlyProps: true,\n toMergeIntoProps: {\n hasGenerateDescriptionFn:\n typeof pluginConfig?.generateDescription === 'function',\n },\n }),\n },\n },\n localized: true,\n ...(pluginConfig?.fieldOverrides?.description ?? {}),\n },\n ...(pluginConfig?.uploadsCollection\n ? [\n {\n name: 'image',\n type: 'upload',\n admin: {\n components: {\n Field: withMergedProps({\n Component: MetaImageComponent,\n sanitizeServerOnlyProps: true,\n toMergeIntoProps: {\n hasGenerateImageFn: typeof pluginConfig?.generateImage === 'function',\n },\n }),\n },\n description:\n 'Maximum upload file size: 12MB. Recommended file size for images is <500KB.',\n },\n label: 'Meta Image',\n localized: true,\n relationTo: pluginConfig?.uploadsCollection,\n ...(pluginConfig?.fieldOverrides?.image ?? {}),\n } as Field,\n ]\n : []),\n ...(pluginConfig?.fields || []),\n {\n name: 'preview',\n type: 'ui',\n admin: {\n components: {\n Field: withMergedProps({\n Component: PreviewComponent,\n sanitizeServerOnlyProps: true,\n toMergeIntoProps: {\n hasGenerateURLFn: typeof pluginConfig?.generateURL === 'function',\n },\n }),\n },\n },\n label: 'Preview',\n },\n ],\n interfaceName: pluginConfig.interfaceName,\n label: 'SEO',\n },\n ]\n\n return {\n ...config,\n collections:\n config.collections?.map((collection) => {\n const { slug } = collection\n const isEnabled = pluginConfig?.collections?.includes(slug)\n\n if (isEnabled) {\n if (pluginConfig?.tabbedUI) {\n // prevent issues with auth enabled collections having an email field that shouldn't be moved to the SEO tab\n const emailField =\n (collection.auth ||\n !(typeof collection.auth === 'object' && collection.auth.disableLocalStrategy)) &&\n collection.fields?.find((field) => 'name' in field && field.name === 'email')\n const hasOnlyEmailField = collection.fields?.length === 1 && emailField\n\n const seoTabs: TabsField[] = hasOnlyEmailField\n ? [\n {\n type: 'tabs',\n tabs: [\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n : [\n {\n type: 'tabs',\n tabs: [\n // append a new tab onto the end of the tabs array, if there is one at the first index\n // if needed, create a new `Content` tab in the first index for this collection's base fields\n ...(collection?.fields?.[0]?.type === 'tabs' &&\n collection?.fields?.[0]?.tabs\n ? collection.fields[0].tabs\n : [\n {\n fields: [\n ...(emailField\n ? collection.fields.filter(\n (field) => 'name' in field && field.name !== 'email',\n )\n : collection.fields),\n ],\n label: collection?.labels?.singular || 'Content',\n },\n ]),\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n\n return {\n ...collection,\n fields: [\n ...(emailField ? [emailField] : []),\n ...seoTabs,\n ...(collection?.fields?.[0]?.type === 'tabs' ? collection.fields.slice(1) : []),\n ],\n }\n }\n\n return {\n ...collection,\n fields: [...(collection?.fields || []), ...seoFields],\n }\n }\n\n return collection\n }) || [],\n endpoints: [\n ...(config.endpoints ?? []),\n {\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n req.t\n const result = pluginConfig.generateTitle\n ? await pluginConfig.generateTitle(\n req.data as unknown as Parameters<GenerateTitle>[0],\n )\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-title',\n },\n {\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n const result = pluginConfig.generateDescription\n ? await pluginConfig.generateDescription(\n req.data as unknown as Parameters<GenerateDescription>[0],\n )\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-description',\n },\n {\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n const result = pluginConfig.generateURL\n ? await pluginConfig.generateURL(req.data as unknown as Parameters<GenerateURL>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-url',\n },\n {\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n const result = pluginConfig.generateImage\n ? await pluginConfig.generateImage(\n req.data as unknown as Parameters<GenerateImage>[0],\n )\n : ''\n return new Response(result, { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-image',\n },\n ],\n globals:\n config.globals?.map((global) => {\n const { slug } = global\n const isEnabled = pluginConfig?.globals?.includes(slug)\n\n if (isEnabled) {\n if (pluginConfig?.tabbedUI) {\n const seoTabs: TabsField[] = [\n {\n type: 'tabs',\n tabs: [\n // append a new tab onto the end of the tabs array, if there is one at the first index\n // if needed, create a new `Content` tab in the first index for this global's base fields\n ...(global?.fields?.[0].type === 'tabs' && global?.fields?.[0].tabs\n ? global.fields[0].tabs\n : [\n {\n fields: [...(global?.fields || [])],\n label: global?.label || 'Content',\n },\n ]),\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n\n return {\n ...global,\n fields: [\n ...seoTabs,\n ...(global?.fields?.[0].type === 'tabs' ? global.fields.slice(1) : []),\n ],\n }\n }\n\n return {\n ...global,\n fields: [...(global?.fields || []), ...seoFields],\n }\n }\n\n return global\n }) || [],\n i18n: {\n ...config.i18n,\n translations: {\n ...deepMergeSimple(translations, config.i18n?.translations),\n },\n },\n }\n }\n"],"names":["addDataAndFileToRequest","withMergedProps","deepMergeSimple","MetaDescriptionComponent","MetaImageComponent","MetaTitleComponent","OverviewComponent","PreviewComponent","translations","seoPlugin","pluginConfig","config","seoFields","name","type","fields","admin","components","Field","label","Component","sanitizeServerOnlyProps","toMergeIntoProps","hasGenerateTitleFn","generateTitle","localized","fieldOverrides","title","hasGenerateDescriptionFn","generateDescription","description","uploadsCollection","hasGenerateImageFn","generateImage","relationTo","image","hasGenerateURLFn","generateURL","interfaceName","collections","map","collection","slug","isEnabled","includes","tabbedUI","emailField","auth","disableLocalStrategy","find","field","hasOnlyEmailField","length","seoTabs","tabs","filter","labels","singular","slice","endpoints","handler","req","t","result","data","Response","JSON","stringify","status","method","path","globals","global","i18n"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import type { Config, Field, GroupField, TabsField } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\n\nimport type {\n GenerateDescription,\n GenerateImage,\n GenerateTitle,\n GenerateURL,\n SEOPluginConfig,\n} from './types.js'\n\nimport { MetaDescriptionField } from './fields/MetaDescription/index.js'\nimport { MetaImageField } from './fields/MetaImage/index.js'\nimport { MetaTitleField } from './fields/MetaTitle/index.js'\nimport { OverviewField } from './fields/Overview/index.js'\nimport { PreviewField } from './fields/Preview/index.js'\nimport { translations } from './translations/index.js'\n\nexport const seoPlugin =\n (pluginConfig: SEOPluginConfig) =>\n (config: Config): Config => {\n const defaultFields: Field[] = [\n OverviewField({}),\n MetaTitleField({\n hasGenerateFn: typeof pluginConfig?.generateTitle === 'function',\n }),\n MetaDescriptionField({\n hasGenerateFn: typeof pluginConfig?.generateDescription === 'function',\n }),\n ...(pluginConfig?.uploadsCollection\n ? [\n MetaImageField({\n hasGenerateFn: typeof pluginConfig?.generateImage === 'function',\n relationTo: pluginConfig.uploadsCollection,\n }),\n ]\n : []),\n PreviewField({\n hasGenerateFn: typeof pluginConfig?.generateURL === 'function',\n }),\n ]\n\n const seoFields: GroupField[] = [\n {\n name: 'meta',\n type: 'group',\n fields: [\n ...(pluginConfig?.fields && typeof pluginConfig.fields === 'function'\n ? pluginConfig.fields({ defaultFields })\n : defaultFields),\n ],\n interfaceName: pluginConfig.interfaceName,\n label: 'SEO',\n },\n ]\n\n return {\n ...config,\n collections:\n config.collections?.map((collection) => {\n const { slug } = collection\n const isEnabled = pluginConfig?.collections?.includes(slug)\n\n if (isEnabled) {\n if (pluginConfig?.tabbedUI) {\n // prevent issues with auth enabled collections having an email field that shouldn't be moved to the SEO tab\n const emailField =\n (collection.auth ||\n !(typeof collection.auth === 'object' && collection.auth.disableLocalStrategy)) &&\n collection.fields?.find((field) => 'name' in field && field.name === 'email')\n const hasOnlyEmailField = collection.fields?.length === 1 && emailField\n\n const seoTabs: TabsField[] = hasOnlyEmailField\n ? [\n {\n type: 'tabs',\n tabs: [\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n : [\n {\n type: 'tabs',\n tabs: [\n // append a new tab onto the end of the tabs array, if there is one at the first index\n // if needed, create a new `Content` tab in the first index for this collection's base fields\n ...(collection?.fields?.[0]?.type === 'tabs' &&\n collection?.fields?.[0]?.tabs\n ? collection.fields[0].tabs\n : [\n {\n fields: [\n ...(emailField\n ? collection.fields.filter(\n (field) => 'name' in field && field.name !== 'email',\n )\n : collection.fields),\n ],\n label: collection?.labels?.singular || 'Content',\n },\n ]),\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n\n return {\n ...collection,\n fields: [\n ...(emailField ? [emailField] : []),\n ...seoTabs,\n ...(collection?.fields?.[0]?.type === 'tabs' ? collection.fields.slice(1) : []),\n ],\n }\n }\n\n return {\n ...collection,\n fields: [...(collection?.fields || []), ...seoFields],\n }\n }\n\n return collection\n }) || [],\n endpoints: [\n ...(config.endpoints ?? []),\n {\n handler: async (req) => {\n const data: Omit<\n Parameters<GenerateTitle>[0],\n 'collectionConfig' | 'globalConfig' | 'req'\n > = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateTitle\n ? await pluginConfig.generateTitle({\n ...data,\n collectionConfig: req.data.collectionSlug\n ? config.collections?.find((c) => c.slug === req.data.collectionSlug)\n : null,\n globalConfig: req.data.globalSlug\n ? config.globals?.find((g) => g.slug === req.data.globalSlug)\n : null,\n req,\n } satisfies Parameters<GenerateTitle>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-title',\n },\n {\n handler: async (req) => {\n const data: Omit<\n Parameters<GenerateTitle>[0],\n 'collectionConfig' | 'globalConfig' | 'req'\n > = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateDescription\n ? await pluginConfig.generateDescription({\n ...data,\n collectionConfig: req.data.collectionSlug\n ? config.collections?.find((c) => c.slug === req.data.collectionSlug)\n : null,\n globalConfig: req.data.globalSlug\n ? config.globals?.find((g) => g.slug === req.data.globalSlug)\n : null,\n req,\n } satisfies Parameters<GenerateDescription>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-description',\n },\n {\n handler: async (req) => {\n const data: Omit<\n Parameters<GenerateTitle>[0],\n 'collectionConfig' | 'globalConfig' | 'req'\n > = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateURL\n ? await pluginConfig.generateURL({\n ...data,\n collectionConfig: req.data.collectionSlug\n ? config.collections?.find((c) => c.slug === req.data.collectionSlug)\n : null,\n globalConfig: req.data.globalSlug\n ? config.globals?.find((g) => g.slug === req.data.globalSlug)\n : null,\n req,\n } satisfies Parameters<GenerateURL>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-url',\n },\n {\n handler: async (req) => {\n const data: Omit<\n Parameters<GenerateTitle>[0],\n 'collectionConfig' | 'globalConfig' | 'req'\n > = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateImage\n ? await pluginConfig.generateImage({\n ...data,\n collectionConfig: req.data.collectionSlug\n ? config.collections?.find((c) => c.slug === req.data.collectionSlug)\n : null,\n globalConfig: req.data.globalSlug\n ? config.globals?.find((g) => g.slug === req.data.globalSlug)\n : null,\n req,\n } as Parameters<GenerateImage>[0])\n : ''\n return new Response(result, { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-image',\n },\n ],\n globals:\n config.globals?.map((global) => {\n const { slug } = global\n const isEnabled = pluginConfig?.globals?.includes(slug)\n\n if (isEnabled) {\n if (pluginConfig?.tabbedUI) {\n const seoTabs: TabsField[] = [\n {\n type: 'tabs',\n tabs: [\n // append a new tab onto the end of the tabs array, if there is one at the first index\n // if needed, create a new `Content` tab in the first index for this global's base fields\n ...(global?.fields?.[0].type === 'tabs' && global?.fields?.[0].tabs\n ? global.fields[0].tabs\n : [\n {\n fields: [...(global?.fields || [])],\n label: global?.label || 'Content',\n },\n ]),\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n\n return {\n ...global,\n fields: [\n ...seoTabs,\n ...(global?.fields?.[0].type === 'tabs' ? global.fields.slice(1) : []),\n ],\n }\n }\n\n return {\n ...global,\n fields: [...(global?.fields || []), ...seoFields],\n }\n }\n\n return global\n }) || [],\n i18n: {\n ...config.i18n,\n translations: deepMergeSimple(translations, config.i18n?.translations),\n },\n }\n }\n"],"names":["deepMergeSimple","MetaDescriptionField","MetaImageField","MetaTitleField","OverviewField","PreviewField","translations","seoPlugin","pluginConfig","config","defaultFields","hasGenerateFn","generateTitle","generateDescription","uploadsCollection","generateImage","relationTo","generateURL","seoFields","name","type","fields","interfaceName","label","collections","map","collection","slug","isEnabled","includes","tabbedUI","emailField","auth","disableLocalStrategy","find","field","hasOnlyEmailField","length","seoTabs","tabs","filter","labels","singular","slice","endpoints","handler","req","data","json","result","collectionConfig","collectionSlug","c","globalConfig","globalSlug","globals","g","Response","JSON","stringify","status","method","path","global","i18n"],"mappings":"AAEA,SAASA,eAAe,QAAQ,iBAAgB;AAUhD,SAASC,oBAAoB,QAAQ,oCAAmC;AACxE,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,aAAa,QAAQ,6BAA4B;AAC1D,SAASC,YAAY,QAAQ,4BAA2B;AACxD,SAASC,YAAY,QAAQ,0BAAyB;AAEtD,OAAO,MAAMC,YACX,CAACC,eACD,CAACC;QACC,MAAMC,gBAAyB;YAC7BN,cAAc,CAAC;YACfD,eAAe;gBACbQ,eAAe,OAAOH,cAAcI,kBAAkB;YACxD;YACAX,qBAAqB;gBACnBU,eAAe,OAAOH,cAAcK,wBAAwB;YAC9D;eACIL,cAAcM,oBACd;gBACEZ,eAAe;oBACbS,eAAe,OAAOH,cAAcO,kBAAkB;oBACtDC,YAAYR,aAAaM,iBAAiB;gBAC5C;aACD,GACD,EAAE;YACNT,aAAa;gBACXM,eAAe,OAAOH,cAAcS,gBAAgB;YACtD;SACD;QAED,MAAMC,YAA0B;YAC9B;gBACEC,MAAM;gBACNC,MAAM;gBACNC,QAAQ;uBACFb,cAAca,UAAU,OAAOb,aAAaa,MAAM,KAAK,aACvDb,aAAaa,MAAM,CAAC;wBAAEX;oBAAc,KACpCA;iBACL;gBACDY,eAAed,aAAac,aAAa;gBACzCC,OAAO;YACT;SACD;QAED,OAAO;YACL,GAAGd,MAAM;YACTe,aACEf,OAAOe,WAAW,EAAEC,IAAI,CAACC;gBACvB,MAAM,EAAEC,IAAI,EAAE,GAAGD;gBACjB,MAAME,YAAYpB,cAAcgB,aAAaK,SAASF;gBAEtD,IAAIC,WAAW;oBACb,IAAIpB,cAAcsB,UAAU;wBAC1B,4GAA4G;wBAC5G,MAAMC,aACJ,AAACL,CAAAA,WAAWM,IAAI,IACd,CAAE,CAAA,OAAON,WAAWM,IAAI,KAAK,YAAYN,WAAWM,IAAI,CAACC,oBAAoB,AAAD,CAAC,KAC/EP,WAAWL,MAAM,EAAEa,KAAK,CAACC,QAAU,UAAUA,SAASA,MAAMhB,IAAI,KAAK;wBACvE,MAAMiB,oBAAoBV,WAAWL,MAAM,EAAEgB,WAAW,KAAKN;wBAE7D,MAAMO,UAAuBF,oBACzB;4BACE;gCACEhB,MAAM;gCACNmB,MAAM;oCACJ;wCACElB,QAAQH;wCACRK,OAAO;oCACT;iCACD;4BACH;yBACD,GACD;4BACE;gCACEH,MAAM;gCACNmB,MAAM;oCACJ,sFAAsF;oCACtF,6FAA6F;uCACzFb,YAAYL,QAAQ,CAAC,EAAE,EAAED,SAAS,UACtCM,YAAYL,QAAQ,CAAC,EAAE,EAAEkB,OACrBb,WAAWL,MAAM,CAAC,EAAE,CAACkB,IAAI,GACzB;wCACE;4CACElB,QAAQ;mDACFU,aACAL,WAAWL,MAAM,CAACmB,MAAM,CACtB,CAACL,QAAU,UAAUA,SAASA,MAAMhB,IAAI,KAAK,WAE/CO,WAAWL,MAAM;6CACtB;4CACDE,OAAOG,YAAYe,QAAQC,YAAY;wCACzC;qCACD;oCACL;wCACErB,QAAQH;wCACRK,OAAO;oCACT;iCACD;4BACH;yBACD;wBAEL,OAAO;4BACL,GAAGG,UAAU;4BACbL,QAAQ;mCACFU,aAAa;oCAACA;iCAAW,GAAG,EAAE;mCAC/BO;mCACCZ,YAAYL,QAAQ,CAAC,EAAE,EAAED,SAAS,SAASM,WAAWL,MAAM,CAACsB,KAAK,CAAC,KAAK,EAAE;6BAC/E;wBACH;oBACF;oBAEA,OAAO;wBACL,GAAGjB,UAAU;wBACbL,QAAQ;+BAAKK,YAAYL,UAAU,EAAE;+BAAMH;yBAAU;oBACvD;gBACF;gBAEA,OAAOQ;YACT,MAAM,EAAE;YACVkB,WAAW;mBACLnC,OAAOmC,SAAS,IAAI,EAAE;gBAC1B;oBACEC,SAAS,OAAOC;wBACd,MAAMC,OAGF,MAAMD,IAAIE,IAAI;wBAElB,IAAID,MAAM;4BACRD,IAAIC,IAAI,GAAGA;wBACb;wBAEA,MAAME,SAASzC,aAAaI,aAAa,GACrC,MAAMJ,aAAaI,aAAa,CAAC;4BAC/B,GAAGmC,IAAI;4BACPG,kBAAkBJ,IAAIC,IAAI,CAACI,cAAc,GACrC1C,OAAOe,WAAW,EAAEU,KAAK,CAACkB,IAAMA,EAAEzB,IAAI,KAAKmB,IAAIC,IAAI,CAACI,cAAc,IAClE;4BACJE,cAAcP,IAAIC,IAAI,CAACO,UAAU,GAC7B7C,OAAO8C,OAAO,EAAErB,KAAK,CAACsB,IAAMA,EAAE7B,IAAI,KAAKmB,IAAIC,IAAI,CAACO,UAAU,IAC1D;4BACJR;wBACF,KACA;wBACJ,OAAO,IAAIW,SAASC,KAAKC,SAAS,CAAC;4BAAEV;wBAAO,IAAI;4BAAEW,QAAQ;wBAAI;oBAChE;oBACAC,QAAQ;oBACRC,MAAM;gBACR;gBACA;oBACEjB,SAAS,OAAOC;wBACd,MAAMC,OAGF,MAAMD,IAAIE,IAAI;wBAElB,IAAID,MAAM;4BACRD,IAAIC,IAAI,GAAGA;wBACb;wBAEA,MAAME,SAASzC,aAAaK,mBAAmB,GAC3C,MAAML,aAAaK,mBAAmB,CAAC;4BACrC,GAAGkC,IAAI;4BACPG,kBAAkBJ,IAAIC,IAAI,CAACI,cAAc,GACrC1C,OAAOe,WAAW,EAAEU,KAAK,CAACkB,IAAMA,EAAEzB,IAAI,KAAKmB,IAAIC,IAAI,CAACI,cAAc,IAClE;4BACJE,cAAcP,IAAIC,IAAI,CAACO,UAAU,GAC7B7C,OAAO8C,OAAO,EAAErB,KAAK,CAACsB,IAAMA,EAAE7B,IAAI,KAAKmB,IAAIC,IAAI,CAACO,UAAU,IAC1D;4BACJR;wBACF,KACA;wBACJ,OAAO,IAAIW,SAASC,KAAKC,SAAS,CAAC;4BAAEV;wBAAO,IAAI;4BAAEW,QAAQ;wBAAI;oBAChE;oBACAC,QAAQ;oBACRC,MAAM;gBACR;gBACA;oBACEjB,SAAS,OAAOC;wBACd,MAAMC,OAGF,MAAMD,IAAIE,IAAI;wBAElB,IAAID,MAAM;4BACRD,IAAIC,IAAI,GAAGA;wBACb;wBAEA,MAAME,SAASzC,aAAaS,WAAW,GACnC,MAAMT,aAAaS,WAAW,CAAC;4BAC7B,GAAG8B,IAAI;4BACPG,kBAAkBJ,IAAIC,IAAI,CAACI,cAAc,GACrC1C,OAAOe,WAAW,EAAEU,KAAK,CAACkB,IAAMA,EAAEzB,IAAI,KAAKmB,IAAIC,IAAI,CAACI,cAAc,IAClE;4BACJE,cAAcP,IAAIC,IAAI,CAACO,UAAU,GAC7B7C,OAAO8C,OAAO,EAAErB,KAAK,CAACsB,IAAMA,EAAE7B,IAAI,KAAKmB,IAAIC,IAAI,CAACO,UAAU,IAC1D;4BACJR;wBACF,KACA;wBACJ,OAAO,IAAIW,SAASC,KAAKC,SAAS,CAAC;4BAAEV;wBAAO,IAAI;4BAAEW,QAAQ;wBAAI;oBAChE;oBACAC,QAAQ;oBACRC,MAAM;gBACR;gBACA;oBACEjB,SAAS,OAAOC;wBACd,MAAMC,OAGF,MAAMD,IAAIE,IAAI;wBAElB,IAAID,MAAM;4BACRD,IAAIC,IAAI,GAAGA;wBACb;wBAEA,MAAME,SAASzC,aAAaO,aAAa,GACrC,MAAMP,aAAaO,aAAa,CAAC;4BAC/B,GAAGgC,IAAI;4BACPG,kBAAkBJ,IAAIC,IAAI,CAACI,cAAc,GACrC1C,OAAOe,WAAW,EAAEU,KAAK,CAACkB,IAAMA,EAAEzB,IAAI,KAAKmB,IAAIC,IAAI,CAACI,cAAc,IAClE;4BACJE,cAAcP,IAAIC,IAAI,CAACO,UAAU,GAC7B7C,OAAO8C,OAAO,EAAErB,KAAK,CAACsB,IAAMA,EAAE7B,IAAI,KAAKmB,IAAIC,IAAI,CAACO,UAAU,IAC1D;4BACJR;wBACF,KACA;wBACJ,OAAO,IAAIW,SAASR,QAAQ;4BAAEW,QAAQ;wBAAI;oBAC5C;oBACAC,QAAQ;oBACRC,MAAM;gBACR;aACD;YACDP,SACE9C,OAAO8C,OAAO,EAAE9B,IAAI,CAACsC;gBACnB,MAAM,EAAEpC,IAAI,EAAE,GAAGoC;gBACjB,MAAMnC,YAAYpB,cAAc+C,SAAS1B,SAASF;gBAElD,IAAIC,WAAW;oBACb,IAAIpB,cAAcsB,UAAU;wBAC1B,MAAMQ,UAAuB;4BAC3B;gCACElB,MAAM;gCACNmB,MAAM;oCACJ,sFAAsF;oCACtF,yFAAyF;uCACrFwB,QAAQ1C,QAAQ,CAAC,EAAE,CAACD,SAAS,UAAU2C,QAAQ1C,QAAQ,CAAC,EAAE,CAACkB,OAC3DwB,OAAO1C,MAAM,CAAC,EAAE,CAACkB,IAAI,GACrB;wCACE;4CACElB,QAAQ;mDAAK0C,QAAQ1C,UAAU,EAAE;6CAAE;4CACnCE,OAAOwC,QAAQxC,SAAS;wCAC1B;qCACD;oCACL;wCACEF,QAAQH;wCACRK,OAAO;oCACT;iCACD;4BACH;yBACD;wBAED,OAAO;4BACL,GAAGwC,MAAM;4BACT1C,QAAQ;mCACHiB;mCACCyB,QAAQ1C,QAAQ,CAAC,EAAE,CAACD,SAAS,SAAS2C,OAAO1C,MAAM,CAACsB,KAAK,CAAC,KAAK,EAAE;6BACtE;wBACH;oBACF;oBAEA,OAAO;wBACL,GAAGoB,MAAM;wBACT1C,QAAQ;+BAAK0C,QAAQ1C,UAAU,EAAE;+BAAMH;yBAAU;oBACnD;gBACF;gBAEA,OAAO6C;YACT,MAAM,EAAE;YACVC,MAAM;gBACJ,GAAGvD,OAAOuD,IAAI;gBACd1D,cAAcN,gBAAgBM,cAAcG,OAAOuD,IAAI,EAAE1D;YAC3D;QACF;IACF,EAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenericTranslationsObject } from '@payloadcms/translations';
2
+ export declare const cs: GenericTranslationsObject;
3
+ //# sourceMappingURL=cs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cs.d.ts","sourceRoot":"","sources":["../../src/translations/cs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,eAAO,MAAM,EAAE,EAAE,yBAyBhB,CAAA"}
@@ -0,0 +1,25 @@
1
+ export const cs = {
2
+ $schema: './translation-schema.json',
3
+ 'plugin-seo': {
4
+ almostThere: 'Skoro hotovo',
5
+ autoGenerate: 'Generovat automaticky',
6
+ bestPractices: 'osvědčené postupy',
7
+ characterCount: '{{current}}/{{minLength}}-{{maxLength}} znaků, ',
8
+ charactersLeftOver: '{{characters}} zbývá',
9
+ charactersToGo: '{{characters}} zbývá',
10
+ charactersTooMany: '{{characters}} navíc',
11
+ checksPassing: '{{current}}/{{max}} kontrol úspěšně splněno',
12
+ good: 'Dobré',
13
+ imageAutoGenerationTip: 'Automatická generace načte vybraný hero obrázek.',
14
+ lengthTipDescription: 'Toto by mělo mít mezi {{minLength}} a {{maxLength}} znaky. Pomoc při psaní kvalitních meta popisů navštivte ',
15
+ lengthTipTitle: 'Toto by mělo mít mezi {{minLength}} a {{maxLength}} znaky. Pomoc při psaní kvalitních meta titulů navštivte ',
16
+ missing: 'Chybí',
17
+ noImage: 'Bez obrázku',
18
+ preview: 'Náhled',
19
+ previewDescription: 'Přesný výsledek se může lišit v závislosti na obsahu a relevanci vyhledávání.',
20
+ tooLong: 'Příliš dlouhé',
21
+ tooShort: 'Příliš krátké'
22
+ }
23
+ };
24
+
25
+ //# sourceMappingURL=cs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translations/cs.ts"],"sourcesContent":["import type { GenericTranslationsObject } from '@payloadcms/translations'\n\nexport const cs: GenericTranslationsObject = {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'Skoro hotovo',\n autoGenerate: 'Generovat automaticky',\n bestPractices: 'osvědčené postupy',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} znaků, ',\n charactersLeftOver: '{{characters}} zbývá',\n charactersToGo: '{{characters}} zbývá',\n charactersTooMany: '{{characters}} navíc',\n checksPassing: '{{current}}/{{max}} kontrol úspěšně splněno',\n good: 'Dobré',\n imageAutoGenerationTip: 'Automatická generace načte vybraný hero obrázek.',\n lengthTipDescription:\n 'Toto by mělo mít mezi {{minLength}} a {{maxLength}} znaky. Pomoc při psaní kvalitních meta popisů navštivte ',\n lengthTipTitle:\n 'Toto by mělo mít mezi {{minLength}} a {{maxLength}} znaky. Pomoc při psaní kvalitních meta titulů navštivte ',\n missing: 'Chybí',\n noImage: 'Bez obrázku',\n preview: 'Náhled',\n previewDescription:\n 'Přesný výsledek se může lišit v závislosti na obsahu a relevanci vyhledávání.',\n tooLong: 'Příliš dlouhé',\n tooShort: 'Příliš krátké',\n },\n}\n"],"names":["cs","$schema","almostThere","autoGenerate","bestPractices","characterCount","charactersLeftOver","charactersToGo","charactersTooMany","checksPassing","good","imageAutoGenerationTip","lengthTipDescription","lengthTipTitle","missing","noImage","preview","previewDescription","tooLong","tooShort"],"mappings":"AAEA,OAAO,MAAMA,KAAgC;IAC3CC,SAAS;IACT,cAAc;QACZC,aAAa;QACbC,cAAc;QACdC,eAAe;QACfC,gBAAgB;QAChBC,oBAAoB;QACpBC,gBAAgB;QAChBC,mBAAmB;QACnBC,eAAe;QACfC,MAAM;QACNC,wBAAwB;QACxBC,sBACE;QACFC,gBACE;QACFC,SAAS;QACTC,SAAS;QACTC,SAAS;QACTC,oBACE;QACFC,SAAS;QACTC,UAAU;IACZ;AACF,EAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenericTranslationsObject } from '@payloadcms/translations';
2
+ export declare const de: GenericTranslationsObject;
3
+ //# sourceMappingURL=de.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../src/translations/de.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,eAAO,MAAM,EAAE,EAAE,yBAyBhB,CAAA"}
@@ -0,0 +1,25 @@
1
+ export const de = {
2
+ $schema: './translation-schema.json',
3
+ 'plugin-seo': {
4
+ almostThere: 'Fast da',
5
+ autoGenerate: 'Automatisch generieren',
6
+ bestPractices: 'Best Practices',
7
+ characterCount: '{{current}}/{{minLength}}-{{maxLength}} Zeichen, ',
8
+ charactersLeftOver: '{{characters}} verbleiben',
9
+ charactersToGo: '{{characters}} übrig',
10
+ charactersTooMany: '{{characters}} zu viel',
11
+ checksPassing: '{{current}}/{{max}} Kontrollen erfolgreich',
12
+ good: 'Gut',
13
+ imageAutoGenerationTip: 'Die automatische Generierung ruft das ausgewählte Hauptbild ab.',
14
+ lengthTipDescription: 'Diese sollte zwischen {{minLength}} und {{maxLength}} Zeichen lang sein. Für Hilfe beim Schreiben von qualitativ hochwertigen Meta-Beschreibungen siehe ',
15
+ lengthTipTitle: 'Dieser sollte zwischen {{minLength}} und {{maxLength}} Zeichen lang sein. Für Hilfe beim Schreiben von qualitativ hochwertigen Meta-Titeln siehe ',
16
+ missing: 'Fehlt',
17
+ noImage: 'Kein Bild',
18
+ preview: 'Vorschau',
19
+ previewDescription: 'Die genauen Ergebnislisten können je nach Inhalt und Suchrelevanz variieren.',
20
+ tooLong: 'Zu lang',
21
+ tooShort: 'Zu kurz'
22
+ }
23
+ };
24
+
25
+ //# sourceMappingURL=de.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translations/de.ts"],"sourcesContent":["import type { GenericTranslationsObject } from '@payloadcms/translations'\n\nexport const de: GenericTranslationsObject = {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'Fast da',\n autoGenerate: 'Automatisch generieren',\n bestPractices: 'Best Practices',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} Zeichen, ',\n charactersLeftOver: '{{characters}} verbleiben',\n charactersToGo: '{{characters}} übrig',\n charactersTooMany: '{{characters}} zu viel',\n checksPassing: '{{current}}/{{max}} Kontrollen erfolgreich',\n good: 'Gut',\n imageAutoGenerationTip: 'Die automatische Generierung ruft das ausgewählte Hauptbild ab.',\n lengthTipDescription:\n 'Diese sollte zwischen {{minLength}} und {{maxLength}} Zeichen lang sein. Für Hilfe beim Schreiben von qualitativ hochwertigen Meta-Beschreibungen siehe ',\n lengthTipTitle:\n 'Dieser sollte zwischen {{minLength}} und {{maxLength}} Zeichen lang sein. Für Hilfe beim Schreiben von qualitativ hochwertigen Meta-Titeln siehe ',\n missing: 'Fehlt',\n noImage: 'Kein Bild',\n preview: 'Vorschau',\n previewDescription:\n 'Die genauen Ergebnislisten können je nach Inhalt und Suchrelevanz variieren.',\n tooLong: 'Zu lang',\n tooShort: 'Zu kurz',\n },\n}\n"],"names":["de","$schema","almostThere","autoGenerate","bestPractices","characterCount","charactersLeftOver","charactersToGo","charactersTooMany","checksPassing","good","imageAutoGenerationTip","lengthTipDescription","lengthTipTitle","missing","noImage","preview","previewDescription","tooLong","tooShort"],"mappings":"AAEA,OAAO,MAAMA,KAAgC;IAC3CC,SAAS;IACT,cAAc;QACZC,aAAa;QACbC,cAAc;QACdC,eAAe;QACfC,gBAAgB;QAChBC,oBAAoB;QACpBC,gBAAgB;QAChBC,mBAAmB;QACnBC,eAAe;QACfC,MAAM;QACNC,wBAAwB;QACxBC,sBACE;QACFC,gBACE;QACFC,SAAS;QACTC,SAAS;QACTC,SAAS;QACTC,oBACE;QACFC,SAAS;QACTC,UAAU;IACZ;AACF,EAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenericTranslationsObject } from '@payloadcms/translations';
2
+ export declare const en: GenericTranslationsObject;
3
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/translations/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,eAAO,MAAM,EAAE,EAAE,yBAwBhB,CAAA"}
@@ -0,0 +1,25 @@
1
+ export const en = {
2
+ $schema: './translation-schema.json',
3
+ 'plugin-seo': {
4
+ almostThere: 'Almost there',
5
+ autoGenerate: 'Auto-generate',
6
+ bestPractices: 'best practices',
7
+ characterCount: '{{current}}/{{minLength}}-{{maxLength}} chars, ',
8
+ charactersLeftOver: '{{characters}} left over',
9
+ charactersToGo: '{{characters}} to go',
10
+ charactersTooMany: '{{characters}} too many',
11
+ checksPassing: '{{current}}/{{max}} checks are passing',
12
+ good: 'Good',
13
+ imageAutoGenerationTip: 'Auto-generation will retrieve the selected hero image.',
14
+ lengthTipDescription: 'This should be between {{minLength}} and {{maxLength}} characters. For help in writing quality meta descriptions, see ',
15
+ lengthTipTitle: 'This should be between {{minLength}} and {{maxLength}} characters. For help in writing quality meta titles, see ',
16
+ missing: 'Missing',
17
+ noImage: 'No image',
18
+ preview: 'Preview',
19
+ previewDescription: 'Exact result listings may vary based on content and search relevancy.',
20
+ tooLong: 'Too long',
21
+ tooShort: 'Too short'
22
+ }
23
+ };
24
+
25
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translations/en.ts"],"sourcesContent":["import type { GenericTranslationsObject } from '@payloadcms/translations'\n\nexport const en: GenericTranslationsObject = {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'Almost there',\n autoGenerate: 'Auto-generate',\n bestPractices: 'best practices',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} chars, ',\n charactersLeftOver: '{{characters}} left over',\n charactersToGo: '{{characters}} to go',\n charactersTooMany: '{{characters}} too many',\n checksPassing: '{{current}}/{{max}} checks are passing',\n good: 'Good',\n imageAutoGenerationTip: 'Auto-generation will retrieve the selected hero image.',\n lengthTipDescription:\n 'This should be between {{minLength}} and {{maxLength}} characters. For help in writing quality meta descriptions, see ',\n lengthTipTitle:\n 'This should be between {{minLength}} and {{maxLength}} characters. For help in writing quality meta titles, see ',\n missing: 'Missing',\n noImage: 'No image',\n preview: 'Preview',\n previewDescription: 'Exact result listings may vary based on content and search relevancy.',\n tooLong: 'Too long',\n tooShort: 'Too short',\n },\n}\n"],"names":["en","$schema","almostThere","autoGenerate","bestPractices","characterCount","charactersLeftOver","charactersToGo","charactersTooMany","checksPassing","good","imageAutoGenerationTip","lengthTipDescription","lengthTipTitle","missing","noImage","preview","previewDescription","tooLong","tooShort"],"mappings":"AAEA,OAAO,MAAMA,KAAgC;IAC3CC,SAAS;IACT,cAAc;QACZC,aAAa;QACbC,cAAc;QACdC,eAAe;QACfC,gBAAgB;QAChBC,oBAAoB;QACpBC,gBAAgB;QAChBC,mBAAmB;QACnBC,eAAe;QACfC,MAAM;QACNC,wBAAwB;QACxBC,sBACE;QACFC,gBACE;QACFC,SAAS;QACTC,SAAS;QACTC,SAAS;QACTC,oBAAoB;QACpBC,SAAS;QACTC,UAAU;IACZ;AACF,EAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenericTranslationsObject } from '@payloadcms/translations';
2
+ export declare const es: GenericTranslationsObject;
3
+ //# sourceMappingURL=es.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/translations/es.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,eAAO,MAAM,EAAE,EAAE,yBAyBhB,CAAA"}
@@ -0,0 +1,25 @@
1
+ export const es = {
2
+ $schema: './translation-schema.json',
3
+ 'plugin-seo': {
4
+ almostThere: 'Ya casi está',
5
+ autoGenerate: 'Autogénerar',
6
+ bestPractices: 'mejores prácticas',
7
+ characterCount: '{{current}}/{{minLength}}-{{maxLength}} letras, ',
8
+ charactersLeftOver: '{{characters}} letras sobrantes',
9
+ charactersToGo: '{{characters}} letras sobrantes',
10
+ charactersTooMany: '{{characters}} letras demasiados',
11
+ checksPassing: '{{current}}/{{max}} las comprobaciones están pasando',
12
+ good: 'Bien',
13
+ imageAutoGenerationTip: 'La autogeneración recuperará la imagen de héroe seleccionada.',
14
+ lengthTipDescription: 'Esto debe estar entre {{minLength}} y {{maxLength}} caracteres. Para obtener ayuda sobre cómo escribir meta descripciones de calidad, consulte ',
15
+ lengthTipTitle: 'Debe tener entre {{minLength}} y {{maxLength}} caracteres. Para obtener ayuda sobre cómo escribir metatítulos de calidad, consulte ',
16
+ missing: 'Falta',
17
+ noImage: 'Sin imagen',
18
+ preview: 'Vista previa',
19
+ previewDescription: 'Las listas de resultados pueden variar segun la relevancia de buesqueda y el contenido.',
20
+ tooLong: 'Demasiado largo',
21
+ tooShort: 'Demasiado corto'
22
+ }
23
+ };
24
+
25
+ //# sourceMappingURL=es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translations/es.ts"],"sourcesContent":["import type { GenericTranslationsObject } from '@payloadcms/translations'\n\nexport const es: GenericTranslationsObject = {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'Ya casi está',\n autoGenerate: 'Autogénerar',\n bestPractices: 'mejores prácticas',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} letras, ',\n charactersLeftOver: '{{characters}} letras sobrantes',\n charactersToGo: '{{characters}} letras sobrantes',\n charactersTooMany: '{{characters}} letras demasiados',\n checksPassing: '{{current}}/{{max}} las comprobaciones están pasando',\n good: 'Bien',\n imageAutoGenerationTip: 'La autogeneración recuperará la imagen de héroe seleccionada.',\n lengthTipDescription:\n 'Esto debe estar entre {{minLength}} y {{maxLength}} caracteres. Para obtener ayuda sobre cómo escribir meta descripciones de calidad, consulte ',\n lengthTipTitle:\n 'Debe tener entre {{minLength}} y {{maxLength}} caracteres. Para obtener ayuda sobre cómo escribir metatítulos de calidad, consulte ',\n missing: 'Falta',\n noImage: 'Sin imagen',\n preview: 'Vista previa',\n previewDescription:\n 'Las listas de resultados pueden variar segun la relevancia de buesqueda y el contenido.',\n tooLong: 'Demasiado largo',\n tooShort: 'Demasiado corto',\n },\n}\n"],"names":["es","$schema","almostThere","autoGenerate","bestPractices","characterCount","charactersLeftOver","charactersToGo","charactersTooMany","checksPassing","good","imageAutoGenerationTip","lengthTipDescription","lengthTipTitle","missing","noImage","preview","previewDescription","tooLong","tooShort"],"mappings":"AAEA,OAAO,MAAMA,KAAgC;IAC3CC,SAAS;IACT,cAAc;QACZC,aAAa;QACbC,cAAc;QACdC,eAAe;QACfC,gBAAgB;QAChBC,oBAAoB;QACpBC,gBAAgB;QAChBC,mBAAmB;QACnBC,eAAe;QACfC,MAAM;QACNC,wBAAwB;QACxBC,sBACE;QACFC,gBACE;QACFC,SAAS;QACTC,SAAS;QACTC,SAAS;QACTC,oBACE;QACFC,SAAS;QACTC,UAAU;IACZ;AACF,EAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenericTranslationsObject } from '@payloadcms/translations';
2
+ export declare const fa: GenericTranslationsObject;
3
+ //# sourceMappingURL=fa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fa.d.ts","sourceRoot":"","sources":["../../src/translations/fa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,eAAO,MAAM,EAAE,EAAE,yBAyBhB,CAAA"}
@@ -0,0 +1,25 @@
1
+ export const fa = {
2
+ $schema: './translation-schema.json',
3
+ 'plugin-seo': {
4
+ almostThere: 'چیزیی باقی نمونده',
5
+ autoGenerate: 'تولید خودکار',
6
+ bestPractices: 'آموزش بیشتر',
7
+ characterCount: '{{current}}/{{minLength}}-{{maxLength}} کلمه، ',
8
+ charactersLeftOver: '{{characters}} باقی مانده',
9
+ charactersToGo: '{{characters}} باقی مانده',
10
+ charactersTooMany: '{{characters}} بیش از حد',
11
+ checksPassing: '{{current}}/{{max}} بررسی‌ها با موفقیت انجام شده است',
12
+ good: 'خوب',
13
+ imageAutoGenerationTip: 'این قابلیت، تصویر فعلی بارگذاری شده در مجموعه محتوای شما را بازیابی می‌کند',
14
+ lengthTipDescription: 'این باید بین {{minLength}} و {{maxLength}} کلمه باشد. برای کمک در نوشتن توضیحات متا با کیفیت، مراجعه کنید به ',
15
+ lengthTipTitle: 'این باید بین {{minLength}} و {{maxLength}} کلمه باشد. برای کمک در نوشتن عناوین متا با کیفیت، مراجعه کنید به ',
16
+ missing: 'ناقص',
17
+ noImage: 'بدون تصویر',
18
+ preview: 'پیش‌نمایش',
19
+ previewDescription: 'فهرست نتایج ممکن است بر اساس محتوا و متناسب با کلمه کلیدی جستجو شده باشند',
20
+ tooLong: 'خیلی طولانی',
21
+ tooShort: 'خیلی کوتاه'
22
+ }
23
+ };
24
+
25
+ //# sourceMappingURL=fa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translations/fa.ts"],"sourcesContent":["import type { GenericTranslationsObject } from '@payloadcms/translations'\n\nexport const fa: GenericTranslationsObject = {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'چیزیی باقی نمونده',\n autoGenerate: 'تولید خودکار',\n bestPractices: 'آموزش بیشتر',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} کلمه، ',\n charactersLeftOver: '{{characters}} باقی مانده',\n charactersToGo: '{{characters}} باقی مانده',\n charactersTooMany: '{{characters}} بیش از حد',\n checksPassing: '{{current}}/{{max}} بررسی‌ها با موفقیت انجام شده است',\n good: 'خوب',\n imageAutoGenerationTip:\n 'این قابلیت، تصویر فعلی بارگذاری شده در مجموعه محتوای شما را بازیابی می‌کند',\n lengthTipDescription:\n 'این باید بین {{minLength}} و {{maxLength}} کلمه باشد. برای کمک در نوشتن توضیحات متا با کیفیت، مراجعه کنید به ',\n lengthTipTitle:\n 'این باید بین {{minLength}} و {{maxLength}} کلمه باشد. برای کمک در نوشتن عناوین متا با کیفیت، مراجعه کنید به ',\n missing: 'ناقص',\n noImage: 'بدون تصویر',\n preview: 'پیش‌نمایش',\n previewDescription: 'فهرست نتایج ممکن است بر اساس محتوا و متناسب با کلمه کلیدی جستجو شده باشند',\n tooLong: 'خیلی طولانی',\n tooShort: 'خیلی کوتاه',\n },\n}\n"],"names":["fa","$schema","almostThere","autoGenerate","bestPractices","characterCount","charactersLeftOver","charactersToGo","charactersTooMany","checksPassing","good","imageAutoGenerationTip","lengthTipDescription","lengthTipTitle","missing","noImage","preview","previewDescription","tooLong","tooShort"],"mappings":"AAEA,OAAO,MAAMA,KAAgC;IAC3CC,SAAS;IACT,cAAc;QACZC,aAAa;QACbC,cAAc;QACdC,eAAe;QACfC,gBAAgB;QAChBC,oBAAoB;QACpBC,gBAAgB;QAChBC,mBAAmB;QACnBC,eAAe;QACfC,MAAM;QACNC,wBACE;QACFC,sBACE;QACFC,gBACE;QACFC,SAAS;QACTC,SAAS;QACTC,SAAS;QACTC,oBAAoB;QACpBC,SAAS;QACTC,UAAU;IACZ;AACF,EAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenericTranslationsObject } from '@payloadcms/translations';
2
+ export declare const fr: GenericTranslationsObject;
3
+ //# sourceMappingURL=fr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/translations/fr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,eAAO,MAAM,EAAE,EAAE,yBAyBhB,CAAA"}
@@ -0,0 +1,25 @@
1
+ export const fr = {
2
+ $schema: './translation-schema.json',
3
+ 'plugin-seo': {
4
+ almostThere: 'On y est presque',
5
+ autoGenerate: 'Auto-générer',
6
+ bestPractices: 'bonnes pratiques',
7
+ characterCount: '{{current}}/{{minLength}}-{{maxLength}} caractères, ',
8
+ charactersLeftOver: '{{characters}} restants',
9
+ charactersToGo: '{{characters}} à ajouter',
10
+ charactersTooMany: '{{characters}} en trop',
11
+ checksPassing: '{{current}}/{{max}} vérifications réussies',
12
+ good: 'Bien',
13
+ imageAutoGenerationTip: "L'auto-génération récupérera l'image principale sélectionnée.",
14
+ lengthTipDescription: "Ceci devrait contenir entre {{minLength}} et {{maxLength}} caractères. Pour obtenir de l'aide pour rédiger des descriptions meta de qualité, consultez les ",
15
+ lengthTipTitle: "Ceci devrait contenir entre {{minLength}} et {{maxLength}} caractères. Pour obtenir de l'aide pour rédiger des titres meta de qualité, consultez les ",
16
+ missing: 'Manquant',
17
+ noImage: "Pas d'image",
18
+ preview: 'Aperçu',
19
+ previewDescription: 'Les résultats exacts peuvent varier en fonction du contenu et de la pertinence de la recherche.',
20
+ tooLong: 'Trop long',
21
+ tooShort: 'Trop court'
22
+ }
23
+ };
24
+
25
+ //# sourceMappingURL=fr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translations/fr.ts"],"sourcesContent":["import type { GenericTranslationsObject } from '@payloadcms/translations'\n\nexport const fr: GenericTranslationsObject = {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'On y est presque',\n autoGenerate: 'Auto-générer',\n bestPractices: 'bonnes pratiques',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} caractères, ',\n charactersLeftOver: '{{characters}} restants',\n charactersToGo: '{{characters}} à ajouter',\n charactersTooMany: '{{characters}} en trop',\n checksPassing: '{{current}}/{{max}} vérifications réussies',\n good: 'Bien',\n imageAutoGenerationTip: \"L'auto-génération récupérera l'image principale sélectionnée.\",\n lengthTipDescription:\n \"Ceci devrait contenir entre {{minLength}} et {{maxLength}} caractères. Pour obtenir de l'aide pour rédiger des descriptions meta de qualité, consultez les \",\n lengthTipTitle:\n \"Ceci devrait contenir entre {{minLength}} et {{maxLength}} caractères. Pour obtenir de l'aide pour rédiger des titres meta de qualité, consultez les \",\n missing: 'Manquant',\n noImage: \"Pas d'image\",\n preview: 'Aperçu',\n previewDescription:\n 'Les résultats exacts peuvent varier en fonction du contenu et de la pertinence de la recherche.',\n tooLong: 'Trop long',\n tooShort: 'Trop court',\n },\n}\n"],"names":["fr","$schema","almostThere","autoGenerate","bestPractices","characterCount","charactersLeftOver","charactersToGo","charactersTooMany","checksPassing","good","imageAutoGenerationTip","lengthTipDescription","lengthTipTitle","missing","noImage","preview","previewDescription","tooLong","tooShort"],"mappings":"AAEA,OAAO,MAAMA,KAAgC;IAC3CC,SAAS;IACT,cAAc;QACZC,aAAa;QACbC,cAAc;QACdC,eAAe;QACfC,gBAAgB;QAChBC,oBAAoB;QACpBC,gBAAgB;QAChBC,mBAAmB;QACnBC,eAAe;QACfC,MAAM;QACNC,wBAAwB;QACxBC,sBACE;QACFC,gBACE;QACFC,SAAS;QACTC,SAAS;QACTC,SAAS;QACTC,oBACE;QACFC,SAAS;QACTC,UAAU;IACZ;AACF,EAAC"}