@payloadcms/plugin-seo 3.0.0-canary.78bbed6 → 3.0.0-canary.79ab53e

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.
@@ -1,8 +1,8 @@
1
- import type { TextareaFieldProps } from 'payload';
1
+ import type { TextareaFieldClientProps } from 'payload';
2
2
  import React from 'react';
3
3
  type MetaDescriptionProps = {
4
4
  readonly hasGenerateDescriptionFn: boolean;
5
- } & TextareaFieldProps;
5
+ } & TextareaFieldClientProps;
6
6
  export declare const MetaDescriptionComponent: React.FC<MetaDescriptionProps>;
7
7
  export {};
8
8
  //# sourceMappingURL=MetaDescriptionComponent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetaDescriptionComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/MetaDescription/MetaDescriptionComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAYjD,OAAO,KAAsB,MAAM,OAAO,CAAA;AAU1C,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAA;CAC3C,GAAG,kBAAkB,CAAA;AAEtB,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA4InE,CAAA"}
1
+ {"version":3,"file":"MetaDescriptionComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/MetaDescription/MetaDescriptionComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAYvD,OAAO,KAAsB,MAAM,OAAO,CAAA;AAU1C,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAA;CAC3C,GAAG,wBAAwB,CAAA;AAE5B,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA8InE,CAAA"}
@@ -17,7 +17,9 @@ export const MetaDescriptionComponent = (props)=>{
17
17
  });
18
18
  const { errorMessage, setValue, showError, value } = field;
19
19
  const regenerateDescription = useCallback(async ()=>{
20
- if (!hasGenerateDescriptionFn) return;
20
+ if (!hasGenerateDescriptionFn) {
21
+ return;
22
+ }
21
23
  const genDescriptionResponse = await fetch('/api/plugin-seo/generate-description', {
22
24
  body: JSON.stringify({
23
25
  id: docInfo.id,
@@ -61,8 +63,8 @@ export const MetaDescriptionComponent = (props)=>{
61
63
  className: "plugin-seo__field",
62
64
  children: [
63
65
  /*#__PURE__*/ _jsx(FieldLabel, {
64
- Label: Label,
65
66
  field: null,
67
+ Label: Label,
66
68
  label: label,
67
69
  ...labelProps || {}
68
70
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/MetaDescription/MetaDescriptionComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldType, Options } from '@payloadcms/ui'\nimport type { TextareaFieldProps } from 'payload'\n\nimport {\n FieldLabel,\n TextareaInput,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\n\nimport type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../translations/index.js'\nimport type { GenerateDescription } from '../../types.js'\n\nimport { defaults } from '../../defaults.js'\nimport { LengthIndicator } from '../../ui/LengthIndicator.js'\n\nconst { maxLength, minLength } = defaults.description\n\ntype MetaDescriptionProps = {\n readonly hasGenerateDescriptionFn: boolean\n} & TextareaFieldProps\n\nexport const MetaDescriptionComponent: React.FC<MetaDescriptionProps> = (props) => {\n const {\n field: {\n admin: {\n components: { Label },\n },\n label,\n required,\n },\n hasGenerateDescriptionFn,\n labelProps,\n } = props\n const { path: pathFromContext } = useFieldProps()\n\n const { t } = useTranslation<PluginSEOTranslations, PluginSEOTranslationKeys>()\n\n const locale = useLocale()\n const { getData } = useForm()\n const docInfo = useDocumentInfo()\n\n const field: FieldType<string> = useField({\n path: pathFromContext,\n } as Options)\n\n const { errorMessage, setValue, showError, value } = field\n\n const regenerateDescription = useCallback(async () => {\n if (!hasGenerateDescriptionFn) return\n\n const genDescriptionResponse = await fetch('/api/plugin-seo/generate-description', {\n body: JSON.stringify({\n id: docInfo.id,\n slug: docInfo.slug,\n doc: getData(),\n docPermissions: docInfo.docPermissions,\n hasPublishPermission: docInfo.hasPublishPermission,\n hasSavePermission: docInfo.hasSavePermission,\n initialData: docInfo.initialData,\n initialState: docInfo.initialState,\n locale: typeof locale === 'object' ? locale?.code : locale,\n title: docInfo.title,\n } satisfies Omit<Parameters<GenerateDescription>[0], 'req'>),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n const { result: generatedDescription } = await genDescriptionResponse.json()\n\n setValue(generatedDescription || '')\n }, [hasGenerateDescriptionFn, docInfo, getData, locale, setValue])\n\n return (\n <div\n style={{\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n marginBottom: '5px',\n position: 'relative',\n }}\n >\n <div className=\"plugin-seo__field\">\n <FieldLabel Label={Label} field={null} label={label} {...(labelProps || {})} />\n {hasGenerateDescriptionFn && (\n <React.Fragment>\n &nbsp; &mdash; &nbsp;\n <button\n onClick={() => {\n void regenerateDescription()\n }}\n style={{\n background: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n color: 'currentcolor',\n cursor: 'pointer',\n padding: 0,\n textDecoration: 'underline',\n }}\n type=\"button\"\n >\n {t('plugin-seo:autoGenerate')}\n </button>\n </React.Fragment>\n )}\n </div>\n <div\n style={{\n color: '#9A9A9A',\n }}\n >\n {t('plugin-seo:lengthTipDescription', { maxLength, minLength })}\n <a\n href=\"https://developers.google.com/search/docs/advanced/appearance/snippet#meta-descriptions\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {t('plugin-seo:bestPractices')}\n </a>\n </div>\n </div>\n <div\n style={{\n marginBottom: '10px',\n position: 'relative',\n }}\n >\n <TextareaInput\n Error={{\n type: 'client',\n Component: null,\n RenderedComponent: errorMessage,\n }}\n label={label}\n onChange={setValue}\n path={pathFromContext}\n required={required}\n showError={showError}\n style={{\n marginBottom: 0,\n }}\n value={value}\n />\n </div>\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n width: '100%',\n }}\n >\n <LengthIndicator maxLength={maxLength} minLength={minLength} text={value} />\n </div>\n </div>\n )\n}\n"],"names":["FieldLabel","TextareaInput","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useTranslation","React","useCallback","defaults","LengthIndicator","maxLength","minLength","description","MetaDescriptionComponent","props","field","admin","components","Label","label","required","hasGenerateDescriptionFn","labelProps","path","pathFromContext","t","locale","getData","docInfo","errorMessage","setValue","showError","value","regenerateDescription","genDescriptionResponse","fetch","body","JSON","stringify","id","slug","doc","docPermissions","hasPublishPermission","hasSavePermission","initialData","initialState","code","title","credentials","headers","method","result","generatedDescription","json","div","style","marginBottom","position","className","Fragment","button","onClick","background","backgroundColor","border","color","cursor","padding","textDecoration","type","a","href","rel","target","Error","Component","RenderedComponent","onChange","alignItems","display","width","text"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/MetaDescription/MetaDescriptionComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldType, Options } from '@payloadcms/ui'\nimport type { TextareaFieldClientProps } from 'payload'\n\nimport {\n FieldLabel,\n TextareaInput,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\n\nimport type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../translations/index.js'\nimport type { GenerateDescription } from '../../types.js'\n\nimport { defaults } from '../../defaults.js'\nimport { LengthIndicator } from '../../ui/LengthIndicator.js'\n\nconst { maxLength, minLength } = defaults.description\n\ntype MetaDescriptionProps = {\n readonly hasGenerateDescriptionFn: boolean\n} & TextareaFieldClientProps\n\nexport const MetaDescriptionComponent: React.FC<MetaDescriptionProps> = (props) => {\n const {\n field: {\n admin: {\n components: { Label },\n },\n label,\n required,\n },\n hasGenerateDescriptionFn,\n labelProps,\n } = props\n const { path: pathFromContext } = useFieldProps()\n\n const { t } = useTranslation<PluginSEOTranslations, PluginSEOTranslationKeys>()\n\n const locale = useLocale()\n const { getData } = useForm()\n const docInfo = useDocumentInfo()\n\n const field: FieldType<string> = useField({\n path: pathFromContext,\n } as Options)\n\n const { errorMessage, setValue, showError, value } = field\n\n const regenerateDescription = useCallback(async () => {\n if (!hasGenerateDescriptionFn) {\n return\n }\n\n const genDescriptionResponse = await fetch('/api/plugin-seo/generate-description', {\n body: JSON.stringify({\n id: docInfo.id,\n slug: docInfo.slug,\n doc: getData(),\n docPermissions: docInfo.docPermissions,\n hasPublishPermission: docInfo.hasPublishPermission,\n hasSavePermission: docInfo.hasSavePermission,\n initialData: docInfo.initialData,\n initialState: docInfo.initialState,\n locale: typeof locale === 'object' ? locale?.code : locale,\n title: docInfo.title,\n } satisfies Omit<Parameters<GenerateDescription>[0], 'req'>),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n const { result: generatedDescription } = await genDescriptionResponse.json()\n\n setValue(generatedDescription || '')\n }, [hasGenerateDescriptionFn, docInfo, getData, locale, setValue])\n\n return (\n <div\n style={{\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n marginBottom: '5px',\n position: 'relative',\n }}\n >\n <div className=\"plugin-seo__field\">\n <FieldLabel field={null} Label={Label} label={label} {...(labelProps || {})} />\n {hasGenerateDescriptionFn && (\n <React.Fragment>\n &nbsp; &mdash; &nbsp;\n <button\n onClick={() => {\n void regenerateDescription()\n }}\n style={{\n background: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n color: 'currentcolor',\n cursor: 'pointer',\n padding: 0,\n textDecoration: 'underline',\n }}\n type=\"button\"\n >\n {t('plugin-seo:autoGenerate')}\n </button>\n </React.Fragment>\n )}\n </div>\n <div\n style={{\n color: '#9A9A9A',\n }}\n >\n {t('plugin-seo:lengthTipDescription', { maxLength, minLength })}\n <a\n href=\"https://developers.google.com/search/docs/advanced/appearance/snippet#meta-descriptions\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {t('plugin-seo:bestPractices')}\n </a>\n </div>\n </div>\n <div\n style={{\n marginBottom: '10px',\n position: 'relative',\n }}\n >\n <TextareaInput\n Error={{\n type: 'client',\n Component: null,\n RenderedComponent: errorMessage,\n }}\n label={label}\n onChange={setValue}\n path={pathFromContext}\n required={required}\n showError={showError}\n style={{\n marginBottom: 0,\n }}\n value={value}\n />\n </div>\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n width: '100%',\n }}\n >\n <LengthIndicator maxLength={maxLength} minLength={minLength} text={value} />\n </div>\n </div>\n )\n}\n"],"names":["FieldLabel","TextareaInput","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useTranslation","React","useCallback","defaults","LengthIndicator","maxLength","minLength","description","MetaDescriptionComponent","props","field","admin","components","Label","label","required","hasGenerateDescriptionFn","labelProps","path","pathFromContext","t","locale","getData","docInfo","errorMessage","setValue","showError","value","regenerateDescription","genDescriptionResponse","fetch","body","JSON","stringify","id","slug","doc","docPermissions","hasPublishPermission","hasSavePermission","initialData","initialState","code","title","credentials","headers","method","result","generatedDescription","json","div","style","marginBottom","position","className","Fragment","button","onClick","background","backgroundColor","border","color","cursor","padding","textDecoration","type","a","href","rel","target","Error","Component","RenderedComponent","onChange","alignItems","display","width","text"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import type { UploadFieldProps } from '@payloadcms/ui';
1
+ import type { UploadFieldClientProps } from 'payload';
2
2
  import React from 'react';
3
3
  type MetaImageProps = {
4
4
  readonly hasGenerateImageFn: boolean;
5
- } & UploadFieldProps;
5
+ } & UploadFieldClientProps;
6
6
  export declare const MetaImageComponent: React.FC<MetaImageProps>;
7
7
  export {};
8
8
  //# sourceMappingURL=MetaImageComponent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetaImageComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/MetaImage/MetaImageComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAa1E,OAAO,KAAsB,MAAM,OAAO,CAAA;AAO1C,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;CACrC,GAAG,gBAAgB,CAAA;AAEpB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA6JvD,CAAA"}
1
+ {"version":3,"file":"MetaImageComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/MetaImage/MetaImageComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAarD,OAAO,KAAsB,MAAM,OAAO,CAAA;AAO1C,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;CACrC,GAAG,sBAAsB,CAAA;AAE1B,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAoKvD,CAAA"}
@@ -16,7 +16,9 @@ export const MetaImageComponent = (props)=>{
16
16
  const docInfo = useDocumentInfo();
17
17
  const { errorMessage, setValue, showError, value } = field;
18
18
  const regenerateImage = useCallback(async ()=>{
19
- if (!hasGenerateImageFn) return;
19
+ if (!hasGenerateImageFn) {
20
+ return;
21
+ }
20
22
  const genImageResponse = await fetch('/api/plugin-seo/generate-image', {
21
23
  body: JSON.stringify({
22
24
  id: docInfo.id,
@@ -64,8 +66,8 @@ export const MetaImageComponent = (props)=>{
64
66
  className: "plugin-seo__field",
65
67
  children: [
66
68
  /*#__PURE__*/ _jsx(FieldLabel, {
67
- Label: Label,
68
69
  field: null,
70
+ Label: Label,
69
71
  label: label,
70
72
  ...labelProps || {}
71
73
  }),
@@ -106,23 +108,28 @@ export const MetaImageComponent = (props)=>{
106
108
  position: 'relative'
107
109
  },
108
110
  children: /*#__PURE__*/ _jsx(UploadInput, {
111
+ api: api,
112
+ collection: collection,
109
113
  Error: {
110
114
  type: 'client',
111
115
  Component: null,
112
116
  RenderedComponent: errorMessage
113
117
  },
114
- api: api,
115
- collection: collection,
116
118
  filterOptions: field.filterOptions,
117
119
  label: undefined,
118
120
  onChange: (incomingImage)=>{
119
121
  if (incomingImage !== null) {
120
- const { id: incomingID } = incomingImage;
121
- setValue(incomingID);
122
+ if (typeof incomingImage === 'object') {
123
+ const { id: incomingID } = incomingImage;
124
+ setValue(incomingID);
125
+ } else {
126
+ setValue(incomingImage);
127
+ }
122
128
  } else {
123
129
  setValue(null);
124
130
  }
125
131
  },
132
+ path: field.path,
126
133
  relationTo: relationTo,
127
134
  required: required,
128
135
  serverURL: serverURL,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/MetaImage/MetaImageComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldType, Options, UploadFieldProps } from '@payloadcms/ui'\n\nimport {\n FieldLabel,\n UploadInput,\n useConfig,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\n\nimport type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../translations/index.js'\nimport type { GenerateImage } from '../../types.js'\n\nimport { Pill } from '../../ui/Pill.js'\n\ntype MetaImageProps = {\n readonly hasGenerateImageFn: boolean\n} & UploadFieldProps\n\nexport const MetaImageComponent: React.FC<MetaImageProps> = (props) => {\n const {\n field: {\n admin: {\n components: { Label },\n },\n label,\n relationTo,\n required,\n },\n hasGenerateImageFn,\n labelProps,\n } = props || {}\n const { path: pathFromContext } = useFieldProps()\n\n const field: FieldType<string> = useField({ ...props, path: pathFromContext } as Options)\n\n const { t } = useTranslation<PluginSEOTranslations, PluginSEOTranslationKeys>()\n\n const locale = useLocale()\n const { getData } = useForm()\n const docInfo = useDocumentInfo()\n\n const { errorMessage, setValue, showError, value } = field\n\n const regenerateImage = useCallback(async () => {\n if (!hasGenerateImageFn) return\n\n const genImageResponse = await fetch('/api/plugin-seo/generate-image', {\n body: JSON.stringify({\n id: docInfo.id,\n slug: docInfo.slug,\n doc: getData(),\n docPermissions: docInfo.docPermissions,\n hasPublishPermission: docInfo.hasPublishPermission,\n hasSavePermission: docInfo.hasSavePermission,\n initialData: docInfo.initialData,\n initialState: docInfo.initialState,\n locale: typeof locale === 'object' ? locale?.code : locale,\n title: docInfo.title,\n } satisfies Omit<Parameters<GenerateImage>[0], 'req'>),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n const generatedImage = await genImageResponse.text()\n\n setValue(generatedImage || '')\n }, [hasGenerateImageFn, docInfo, getData, locale, setValue])\n\n const hasImage = Boolean(value)\n\n const { config } = useConfig()\n\n const { collections, routes: { api } = {}, serverURL } = config\n\n const collection = collections?.find((coll) => coll.slug === relationTo) || undefined\n\n return (\n <div\n style={{\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n marginBottom: '5px',\n position: 'relative',\n }}\n >\n <div className=\"plugin-seo__field\">\n <FieldLabel Label={Label} field={null} label={label} {...(labelProps || {})} />\n {hasGenerateImageFn && (\n <React.Fragment>\n &nbsp; &mdash; &nbsp;\n <button\n onClick={() => {\n void regenerateImage()\n }}\n style={{\n background: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n color: 'currentcolor',\n cursor: 'pointer',\n padding: 0,\n textDecoration: 'underline',\n }}\n type=\"button\"\n >\n {t('plugin-seo:autoGenerate')}\n </button>\n </React.Fragment>\n )}\n </div>\n {hasGenerateImageFn && (\n <div\n style={{\n color: '#9A9A9A',\n }}\n >\n {t('plugin-seo:imageAutoGenerationTip')}\n </div>\n )}\n </div>\n <div\n style={{\n marginBottom: '10px',\n position: 'relative',\n }}\n >\n <UploadInput\n Error={{\n type: 'client',\n Component: null,\n RenderedComponent: errorMessage,\n }}\n api={api}\n collection={collection}\n filterOptions={field.filterOptions}\n label={undefined}\n onChange={(incomingImage) => {\n if (incomingImage !== null) {\n const { id: incomingID } = incomingImage\n setValue(incomingID)\n } else {\n setValue(null)\n }\n }}\n relationTo={relationTo}\n required={required}\n serverURL={serverURL}\n showError={showError}\n style={{\n marginBottom: 0,\n }}\n value={value}\n />\n </div>\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n width: '100%',\n }}\n >\n <Pill\n backgroundColor={hasImage ? 'green' : 'red'}\n color=\"white\"\n label={hasImage ? t('plugin-seo:good') : t('plugin-seo:noImage')}\n />\n </div>\n </div>\n )\n}\n"],"names":["FieldLabel","UploadInput","useConfig","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useTranslation","React","useCallback","Pill","MetaImageComponent","props","field","admin","components","Label","label","relationTo","required","hasGenerateImageFn","labelProps","path","pathFromContext","t","locale","getData","docInfo","errorMessage","setValue","showError","value","regenerateImage","genImageResponse","fetch","body","JSON","stringify","id","slug","doc","docPermissions","hasPublishPermission","hasSavePermission","initialData","initialState","code","title","credentials","headers","method","generatedImage","text","hasImage","Boolean","config","collections","routes","api","serverURL","collection","find","coll","undefined","div","style","marginBottom","position","className","Fragment","button","onClick","background","backgroundColor","border","color","cursor","padding","textDecoration","type","Error","Component","RenderedComponent","filterOptions","onChange","incomingImage","incomingID","alignItems","display","width"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/MetaImage/MetaImageComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldType, Options } from '@payloadcms/ui'\nimport type { UploadFieldClientProps } from 'payload'\n\nimport {\n FieldLabel,\n UploadInput,\n useConfig,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\n\nimport type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../translations/index.js'\nimport type { GenerateImage } from '../../types.js'\n\nimport { Pill } from '../../ui/Pill.js'\n\ntype MetaImageProps = {\n readonly hasGenerateImageFn: boolean\n} & UploadFieldClientProps\n\nexport const MetaImageComponent: React.FC<MetaImageProps> = (props) => {\n const {\n field: {\n admin: {\n components: { Label },\n },\n label,\n relationTo,\n required,\n },\n hasGenerateImageFn,\n labelProps,\n } = props || {}\n const { path: pathFromContext } = useFieldProps()\n\n const field: FieldType<string> = useField({ ...props, path: pathFromContext } as Options)\n\n const { t } = useTranslation<PluginSEOTranslations, PluginSEOTranslationKeys>()\n\n const locale = useLocale()\n const { getData } = useForm()\n const docInfo = useDocumentInfo()\n\n const { errorMessage, setValue, showError, value } = field\n\n const regenerateImage = useCallback(async () => {\n if (!hasGenerateImageFn) {\n return\n }\n\n const genImageResponse = await fetch('/api/plugin-seo/generate-image', {\n body: JSON.stringify({\n id: docInfo.id,\n slug: docInfo.slug,\n doc: getData(),\n docPermissions: docInfo.docPermissions,\n hasPublishPermission: docInfo.hasPublishPermission,\n hasSavePermission: docInfo.hasSavePermission,\n initialData: docInfo.initialData,\n initialState: docInfo.initialState,\n locale: typeof locale === 'object' ? locale?.code : locale,\n title: docInfo.title,\n } satisfies Omit<Parameters<GenerateImage>[0], 'req'>),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n const generatedImage = await genImageResponse.text()\n\n setValue(generatedImage || '')\n }, [hasGenerateImageFn, docInfo, getData, locale, setValue])\n\n const hasImage = Boolean(value)\n\n const { config } = useConfig()\n\n const { collections, routes: { api } = {}, serverURL } = config\n\n const collection = collections?.find((coll) => coll.slug === relationTo) || undefined\n\n return (\n <div\n style={{\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n marginBottom: '5px',\n position: 'relative',\n }}\n >\n <div className=\"plugin-seo__field\">\n <FieldLabel field={null} Label={Label} label={label} {...(labelProps || {})} />\n {hasGenerateImageFn && (\n <React.Fragment>\n &nbsp; &mdash; &nbsp;\n <button\n onClick={() => {\n void regenerateImage()\n }}\n style={{\n background: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n color: 'currentcolor',\n cursor: 'pointer',\n padding: 0,\n textDecoration: 'underline',\n }}\n type=\"button\"\n >\n {t('plugin-seo:autoGenerate')}\n </button>\n </React.Fragment>\n )}\n </div>\n {hasGenerateImageFn && (\n <div\n style={{\n color: '#9A9A9A',\n }}\n >\n {t('plugin-seo:imageAutoGenerationTip')}\n </div>\n )}\n </div>\n <div\n style={{\n marginBottom: '10px',\n position: 'relative',\n }}\n >\n <UploadInput\n api={api}\n collection={collection}\n Error={{\n type: 'client',\n Component: null,\n RenderedComponent: errorMessage,\n }}\n filterOptions={field.filterOptions}\n label={undefined}\n onChange={(incomingImage) => {\n if (incomingImage !== null) {\n if (typeof incomingImage === 'object') {\n const { id: incomingID } = incomingImage\n setValue(incomingID)\n } else {\n setValue(incomingImage)\n }\n } else {\n setValue(null)\n }\n }}\n path={field.path}\n relationTo={relationTo}\n required={required}\n serverURL={serverURL}\n showError={showError}\n style={{\n marginBottom: 0,\n }}\n value={value}\n />\n </div>\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n width: '100%',\n }}\n >\n <Pill\n backgroundColor={hasImage ? 'green' : 'red'}\n color=\"white\"\n label={hasImage ? t('plugin-seo:good') : t('plugin-seo:noImage')}\n />\n </div>\n </div>\n )\n}\n"],"names":["FieldLabel","UploadInput","useConfig","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useTranslation","React","useCallback","Pill","MetaImageComponent","props","field","admin","components","Label","label","relationTo","required","hasGenerateImageFn","labelProps","path","pathFromContext","t","locale","getData","docInfo","errorMessage","setValue","showError","value","regenerateImage","genImageResponse","fetch","body","JSON","stringify","id","slug","doc","docPermissions","hasPublishPermission","hasSavePermission","initialData","initialState","code","title","credentials","headers","method","generatedImage","text","hasImage","Boolean","config","collections","routes","api","serverURL","collection","find","coll","undefined","div","style","marginBottom","position","className","Fragment","button","onClick","background","backgroundColor","border","color","cursor","padding","textDecoration","type","Error","Component","RenderedComponent","filterOptions","onChange","incomingImage","incomingID","alignItems","display","width"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import type { TextFieldProps } from 'payload';
1
+ import type { TextFieldClientProps } from 'payload';
2
2
  import React from 'react';
3
3
  import '../index.scss';
4
4
  type MetaTitleProps = {
5
5
  readonly hasGenerateTitleFn: boolean;
6
- } & TextFieldProps;
6
+ } & TextFieldClientProps;
7
7
  export declare const MetaTitleComponent: React.FC<MetaTitleProps>;
8
8
  export {};
9
9
  //# sourceMappingURL=MetaTitleComponent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetaTitleComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/MetaTitle/MetaTitleComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAY7C,OAAO,KAAsB,MAAM,OAAO,CAAA;AAO1C,OAAO,eAAe,CAAA;AAItB,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;CACrC,GAAG,cAAc,CAAA;AAElB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA6IvD,CAAA"}
1
+ {"version":3,"file":"MetaTitleComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/MetaTitle/MetaTitleComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAYnD,OAAO,KAAsB,MAAM,OAAO,CAAA;AAO1C,OAAO,eAAe,CAAA;AAItB,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;CACrC,GAAG,oBAAoB,CAAA;AAExB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA+IvD,CAAA"}
@@ -18,7 +18,9 @@ export const MetaTitleComponent = (props)=>{
18
18
  const docInfo = useDocumentInfo();
19
19
  const { errorMessage, setValue, showError, value } = field;
20
20
  const regenerateTitle = useCallback(async ()=>{
21
- if (!hasGenerateTitleFn) return;
21
+ if (!hasGenerateTitleFn) {
22
+ return;
23
+ }
22
24
  const genTitleResponse = await fetch('/api/plugin-seo/generate-title', {
23
25
  body: JSON.stringify({
24
26
  id: docInfo.id,
@@ -62,8 +64,8 @@ export const MetaTitleComponent = (props)=>{
62
64
  className: "plugin-seo__field",
63
65
  children: [
64
66
  /*#__PURE__*/ _jsx(FieldLabel, {
65
- Label: Label,
66
67
  field: null,
68
+ Label: Label,
67
69
  label: label,
68
70
  ...labelProps || {}
69
71
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/MetaTitle/MetaTitleComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldType, Options } from '@payloadcms/ui'\nimport type { TextFieldProps } from 'payload'\n\nimport {\n FieldLabel,\n TextInput,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\n\nimport type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../translations/index.js'\nimport type { GenerateTitle } from '../../types.js'\n\nimport { defaults } from '../../defaults.js'\nimport { LengthIndicator } from '../../ui/LengthIndicator.js'\nimport '../index.scss'\n\nconst { maxLength, minLength } = defaults.title\n\ntype MetaTitleProps = {\n readonly hasGenerateTitleFn: boolean\n} & TextFieldProps\n\nexport const MetaTitleComponent: React.FC<MetaTitleProps> = (props) => {\n const {\n field: {\n admin: {\n components: { Label },\n },\n label,\n required,\n },\n hasGenerateTitleFn,\n labelProps,\n } = props || {}\n const { path: pathFromContext } = useFieldProps()\n\n const { t } = useTranslation<PluginSEOTranslations, PluginSEOTranslationKeys>()\n\n const field: FieldType<string> = useField({\n path: pathFromContext,\n } as Options)\n\n const locale = useLocale()\n const { getData } = useForm()\n const docInfo = useDocumentInfo()\n\n const { errorMessage, setValue, showError, value } = field\n\n const regenerateTitle = useCallback(async () => {\n if (!hasGenerateTitleFn) return\n\n const genTitleResponse = await fetch('/api/plugin-seo/generate-title', {\n body: JSON.stringify({\n id: docInfo.id,\n slug: docInfo.slug,\n doc: getData(),\n docPermissions: docInfo.docPermissions,\n hasPublishPermission: docInfo.hasPublishPermission,\n hasSavePermission: docInfo.hasSavePermission,\n initialData: docInfo.initialData,\n initialState: docInfo.initialState,\n locale: typeof locale === 'object' ? locale?.code : locale,\n title: docInfo.title,\n } satisfies Omit<Parameters<GenerateTitle>[0], 'req'>),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n const { result: generatedTitle } = await genTitleResponse.json()\n\n setValue(generatedTitle || '')\n }, [hasGenerateTitleFn, docInfo, getData, locale, setValue])\n\n return (\n <div\n style={{\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n marginBottom: '5px',\n position: 'relative',\n }}\n >\n <div className=\"plugin-seo__field\">\n <FieldLabel Label={Label} field={null} label={label} {...(labelProps || {})} />\n {hasGenerateTitleFn && (\n <React.Fragment>\n &nbsp; &mdash; &nbsp;\n <button\n onClick={() => {\n void regenerateTitle()\n }}\n style={{\n background: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n color: 'currentcolor',\n cursor: 'pointer',\n padding: 0,\n textDecoration: 'underline',\n }}\n type=\"button\"\n >\n {t('plugin-seo:autoGenerate')}\n </button>\n </React.Fragment>\n )}\n </div>\n <div\n style={{\n color: '#9A9A9A',\n }}\n >\n {t('plugin-seo:lengthTipTitle', { maxLength, minLength })}\n <a\n href=\"https://developers.google.com/search/docs/advanced/appearance/title-link#page-titles\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {t('plugin-seo:bestPractices')}\n </a>\n .\n </div>\n </div>\n <div\n style={{\n marginBottom: '10px',\n position: 'relative',\n }}\n >\n <TextInput\n Error={{\n type: 'client',\n Component: null,\n RenderedComponent: errorMessage,\n }}\n label={label}\n onChange={setValue}\n path={pathFromContext}\n required={required}\n showError={showError}\n style={{\n marginBottom: 0,\n }}\n value={value}\n />\n </div>\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n width: '100%',\n }}\n >\n <LengthIndicator maxLength={maxLength} minLength={minLength} text={value} />\n </div>\n </div>\n )\n}\n"],"names":["FieldLabel","TextInput","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useTranslation","React","useCallback","defaults","LengthIndicator","maxLength","minLength","title","MetaTitleComponent","props","field","admin","components","Label","label","required","hasGenerateTitleFn","labelProps","path","pathFromContext","t","locale","getData","docInfo","errorMessage","setValue","showError","value","regenerateTitle","genTitleResponse","fetch","body","JSON","stringify","id","slug","doc","docPermissions","hasPublishPermission","hasSavePermission","initialData","initialState","code","credentials","headers","method","result","generatedTitle","json","div","style","marginBottom","position","className","Fragment","button","onClick","background","backgroundColor","border","color","cursor","padding","textDecoration","type","a","href","rel","target","Error","Component","RenderedComponent","onChange","alignItems","display","width","text"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/MetaTitle/MetaTitleComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldType, Options } from '@payloadcms/ui'\nimport type { TextFieldClientProps } from 'payload'\n\nimport {\n FieldLabel,\n TextInput,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\n\nimport type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../translations/index.js'\nimport type { GenerateTitle } from '../../types.js'\n\nimport { defaults } from '../../defaults.js'\nimport { LengthIndicator } from '../../ui/LengthIndicator.js'\nimport '../index.scss'\n\nconst { maxLength, minLength } = defaults.title\n\ntype MetaTitleProps = {\n readonly hasGenerateTitleFn: boolean\n} & TextFieldClientProps\n\nexport const MetaTitleComponent: React.FC<MetaTitleProps> = (props) => {\n const {\n field: {\n admin: {\n components: { Label },\n },\n label,\n required,\n },\n hasGenerateTitleFn,\n labelProps,\n } = props || {}\n const { path: pathFromContext } = useFieldProps()\n\n const { t } = useTranslation<PluginSEOTranslations, PluginSEOTranslationKeys>()\n\n const field: FieldType<string> = useField({\n path: pathFromContext,\n } as Options)\n\n const locale = useLocale()\n const { getData } = useForm()\n const docInfo = useDocumentInfo()\n\n const { errorMessage, setValue, showError, value } = field\n\n const regenerateTitle = useCallback(async () => {\n if (!hasGenerateTitleFn) {\n return\n }\n\n const genTitleResponse = await fetch('/api/plugin-seo/generate-title', {\n body: JSON.stringify({\n id: docInfo.id,\n slug: docInfo.slug,\n doc: getData(),\n docPermissions: docInfo.docPermissions,\n hasPublishPermission: docInfo.hasPublishPermission,\n hasSavePermission: docInfo.hasSavePermission,\n initialData: docInfo.initialData,\n initialState: docInfo.initialState,\n locale: typeof locale === 'object' ? locale?.code : locale,\n title: docInfo.title,\n } satisfies Omit<Parameters<GenerateTitle>[0], 'req'>),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n const { result: generatedTitle } = await genTitleResponse.json()\n\n setValue(generatedTitle || '')\n }, [hasGenerateTitleFn, docInfo, getData, locale, setValue])\n\n return (\n <div\n style={{\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n marginBottom: '5px',\n position: 'relative',\n }}\n >\n <div className=\"plugin-seo__field\">\n <FieldLabel field={null} Label={Label} label={label} {...(labelProps || {})} />\n {hasGenerateTitleFn && (\n <React.Fragment>\n &nbsp; &mdash; &nbsp;\n <button\n onClick={() => {\n void regenerateTitle()\n }}\n style={{\n background: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n color: 'currentcolor',\n cursor: 'pointer',\n padding: 0,\n textDecoration: 'underline',\n }}\n type=\"button\"\n >\n {t('plugin-seo:autoGenerate')}\n </button>\n </React.Fragment>\n )}\n </div>\n <div\n style={{\n color: '#9A9A9A',\n }}\n >\n {t('plugin-seo:lengthTipTitle', { maxLength, minLength })}\n <a\n href=\"https://developers.google.com/search/docs/advanced/appearance/title-link#page-titles\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {t('plugin-seo:bestPractices')}\n </a>\n .\n </div>\n </div>\n <div\n style={{\n marginBottom: '10px',\n position: 'relative',\n }}\n >\n <TextInput\n Error={{\n type: 'client',\n Component: null,\n RenderedComponent: errorMessage,\n }}\n label={label}\n onChange={setValue}\n path={pathFromContext}\n required={required}\n showError={showError}\n style={{\n marginBottom: 0,\n }}\n value={value}\n />\n </div>\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n width: '100%',\n }}\n >\n <LengthIndicator maxLength={maxLength} minLength={minLength} text={value} />\n </div>\n </div>\n )\n}\n"],"names":["FieldLabel","TextInput","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useTranslation","React","useCallback","defaults","LengthIndicator","maxLength","minLength","title","MetaTitleComponent","props","field","admin","components","Label","label","required","hasGenerateTitleFn","labelProps","path","pathFromContext","t","locale","getData","docInfo","errorMessage","setValue","showError","value","regenerateTitle","genTitleResponse","fetch","body","JSON","stringify","id","slug","doc","docPermissions","hasPublishPermission","hasSavePermission","initialData","initialState","code","credentials","headers","method","result","generatedTitle","json","div","style","marginBottom","position","className","Fragment","button","onClick","background","backgroundColor","border","color","cursor","padding","textDecoration","type","a","href","rel","target","Error","Component","RenderedComponent","onChange","alignItems","display","width","text"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OverviewComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/Overview/OverviewComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,OAAO,EAAE,MAAM,SAAS,CAAA;AAGjD,OAAO,KAA2C,MAAM,OAAO,CAAA;AAW/D,KAAK,aAAa,GAAG;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAA;AAEX,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA4DrD,CAAA"}
1
+ {"version":3,"file":"OverviewComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/Overview/OverviewComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,OAAO,EAAE,MAAM,SAAS,CAAA;AAGjD,OAAO,KAA2C,MAAM,OAAO,CAAA;AAW/D,KAAK,aAAa,GAAG;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAA;AAEX,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA6DrD,CAAA"}
@@ -15,7 +15,6 @@ export const OverviewComponent = ({ descriptionPath: descriptionPathFromContext,
15
15
  const [titleIsValid, setTitleIsValid] = useState();
16
16
  const [descIsValid, setDescIsValid] = useState();
17
17
  const [imageIsValid, setImageIsValid] = useState();
18
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
19
18
  const resetAll = useCallback(()=>{
20
19
  const fields = getFields();
21
20
  const fieldsWithoutMeta = fields;
@@ -27,8 +26,12 @@ export const OverviewComponent = ({ descriptionPath: descriptionPathFromContext,
27
26
  getFields
28
27
  ]);
29
28
  useEffect(()=>{
30
- if (typeof metaTitle === 'string') setTitleIsValid(metaTitle.length >= minTitle && metaTitle.length <= maxTitle);
31
- if (typeof metaDesc === 'string') setDescIsValid(metaDesc.length >= minDesc && metaDesc.length <= maxDesc);
29
+ if (typeof metaTitle === 'string') {
30
+ setTitleIsValid(metaTitle.length >= minTitle && metaTitle.length <= maxTitle);
31
+ }
32
+ if (typeof metaDesc === 'string') {
33
+ setDescIsValid(metaDesc.length >= minDesc && metaDesc.length <= maxDesc);
34
+ }
32
35
  setImageIsValid(Boolean(metaImage));
33
36
  }, [
34
37
  metaTitle,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/Overview/OverviewComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FormField, UIField } from 'payload'\n\nimport { useAllFormFields, useForm, useTranslation } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../translations/index.js'\n\nimport { defaults } from '../../defaults.js'\n\nconst {\n description: { maxLength: maxDesc, minLength: minDesc },\n title: { maxLength: maxTitle, minLength: minTitle },\n} = defaults\n\ntype OverviewProps = {\n descriptionPath?: string\n imagePath?: string\n titlePath?: string\n} & UIField\n\nexport const OverviewComponent: React.FC<OverviewProps> = ({\n descriptionPath: descriptionPathFromContext,\n imagePath: imagePathFromContext,\n titlePath: titlePathFromContext,\n}) => {\n const {\n // dispatchFields,\n getFields,\n } = useForm()\n\n const descriptionPath = descriptionPathFromContext || 'meta.description'\n const titlePath = titlePathFromContext || 'meta.title'\n const imagePath = imagePathFromContext || 'meta.image'\n\n const [\n {\n [descriptionPath]: { value: metaDesc } = {} as FormField,\n [imagePath]: { value: metaImage } = {} as FormField,\n [titlePath]: { value: metaTitle } = {} as FormField,\n },\n ] = useAllFormFields()\n const { t } = useTranslation<PluginSEOTranslations, PluginSEOTranslationKeys>()\n\n const [titleIsValid, setTitleIsValid] = useState<boolean | undefined>()\n const [descIsValid, setDescIsValid] = useState<boolean | undefined>()\n const [imageIsValid, setImageIsValid] = useState<boolean | undefined>()\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const resetAll = useCallback(() => {\n const fields = getFields()\n const fieldsWithoutMeta = fields\n fieldsWithoutMeta['meta.title'].value = ''\n fieldsWithoutMeta['meta.description'].value = ''\n fieldsWithoutMeta['meta.image'].value = ''\n // dispatchFields(fieldsWithoutMeta);\n }, [getFields])\n\n useEffect(() => {\n if (typeof metaTitle === 'string')\n setTitleIsValid(metaTitle.length >= minTitle && metaTitle.length <= maxTitle)\n if (typeof metaDesc === 'string')\n setDescIsValid(metaDesc.length >= minDesc && metaDesc.length <= maxDesc)\n setImageIsValid(Boolean(metaImage))\n }, [metaTitle, metaDesc, metaImage])\n\n const testResults = [titleIsValid, descIsValid, imageIsValid]\n\n const numberOfPasses = testResults.filter(Boolean).length\n\n return (\n <div\n style={{\n marginBottom: '20px',\n }}\n >\n <div>\n {t('plugin-seo:checksPassing', { current: numberOfPasses, max: testResults.length })}\n </div>\n </div>\n )\n}\n"],"names":["useAllFormFields","useForm","useTranslation","React","useCallback","useEffect","useState","defaults","description","maxLength","maxDesc","minLength","minDesc","title","maxTitle","minTitle","OverviewComponent","descriptionPath","descriptionPathFromContext","imagePath","imagePathFromContext","titlePath","titlePathFromContext","getFields","value","metaDesc","metaImage","metaTitle","t","titleIsValid","setTitleIsValid","descIsValid","setDescIsValid","imageIsValid","setImageIsValid","resetAll","fields","fieldsWithoutMeta","length","Boolean","testResults","numberOfPasses","filter","div","style","marginBottom","current","max"],"mappings":"AAAA;;AAIA,SAASA,gBAAgB,EAAEC,OAAO,EAAEC,cAAc,QAAQ,iBAAgB;AAC1E,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAI/D,SAASC,QAAQ,QAAQ,oBAAmB;AAE5C,MAAM,EACJC,aAAa,EAAEC,WAAWC,OAAO,EAAEC,WAAWC,OAAO,EAAE,EACvDC,OAAO,EAAEJ,WAAWK,QAAQ,EAAEH,WAAWI,QAAQ,EAAE,EACpD,GAAGR;AAQJ,OAAO,MAAMS,oBAA6C,CAAC,EACzDC,iBAAiBC,0BAA0B,EAC3CC,WAAWC,oBAAoB,EAC/BC,WAAWC,oBAAoB,EAChC;IACC,MAAM,EACJ,mBAAmB;IACnBC,SAAS,EACV,GAAGtB;IAEJ,MAAMgB,kBAAkBC,8BAA8B;IACtD,MAAMG,YAAYC,wBAAwB;IAC1C,MAAMH,YAAYC,wBAAwB;IAE1C,MAAM,CACJ,EACE,CAACH,gBAAgB,EAAE,EAAEO,OAAOC,QAAQ,EAAE,GAAG,CAAC,CAAc,EACxD,CAACN,UAAU,EAAE,EAAEK,OAAOE,SAAS,EAAE,GAAG,CAAC,CAAc,EACnD,CAACL,UAAU,EAAE,EAAEG,OAAOG,SAAS,EAAE,GAAG,CAAC,CAAc,EACpD,CACF,GAAG3B;IACJ,MAAM,EAAE4B,CAAC,EAAE,GAAG1B;IAEd,MAAM,CAAC2B,cAAcC,gBAAgB,GAAGxB;IACxC,MAAM,CAACyB,aAAaC,eAAe,GAAG1B;IACtC,MAAM,CAAC2B,cAAcC,gBAAgB,GAAG5B;IAExC,6DAA6D;IAC7D,MAAM6B,WAAW/B,YAAY;QAC3B,MAAMgC,SAASb;QACf,MAAMc,oBAAoBD;QAC1BC,iBAAiB,CAAC,aAAa,CAACb,KAAK,GAAG;QACxCa,iBAAiB,CAAC,mBAAmB,CAACb,KAAK,GAAG;QAC9Ca,iBAAiB,CAAC,aAAa,CAACb,KAAK,GAAG;IACxC,qCAAqC;IACvC,GAAG;QAACD;KAAU;IAEdlB,UAAU;QACR,IAAI,OAAOsB,cAAc,UACvBG,gBAAgBH,UAAUW,MAAM,IAAIvB,YAAYY,UAAUW,MAAM,IAAIxB;QACtE,IAAI,OAAOW,aAAa,UACtBO,eAAeP,SAASa,MAAM,IAAI1B,WAAWa,SAASa,MAAM,IAAI5B;QAClEwB,gBAAgBK,QAAQb;IAC1B,GAAG;QAACC;QAAWF;QAAUC;KAAU;IAEnC,MAAMc,cAAc;QAACX;QAAcE;QAAaE;KAAa;IAE7D,MAAMQ,iBAAiBD,YAAYE,MAAM,CAACH,SAASD,MAAM;IAEzD,qBACE,KAACK;QACCC,OAAO;YACLC,cAAc;QAChB;kBAEA,cAAA,KAACF;sBACEf,EAAE,4BAA4B;gBAAEkB,SAASL;gBAAgBM,KAAKP,YAAYF,MAAM;YAAC;;;AAI1F,EAAC"}
1
+ {"version":3,"sources":["../../../src/fields/Overview/OverviewComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FormField, UIField } from 'payload'\n\nimport { useAllFormFields, useForm, useTranslation } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../translations/index.js'\n\nimport { defaults } from '../../defaults.js'\n\nconst {\n description: { maxLength: maxDesc, minLength: minDesc },\n title: { maxLength: maxTitle, minLength: minTitle },\n} = defaults\n\ntype OverviewProps = {\n descriptionPath?: string\n imagePath?: string\n titlePath?: string\n} & UIField\n\nexport const OverviewComponent: React.FC<OverviewProps> = ({\n descriptionPath: descriptionPathFromContext,\n imagePath: imagePathFromContext,\n titlePath: titlePathFromContext,\n}) => {\n const {\n // dispatchFields,\n getFields,\n } = useForm()\n\n const descriptionPath = descriptionPathFromContext || 'meta.description'\n const titlePath = titlePathFromContext || 'meta.title'\n const imagePath = imagePathFromContext || 'meta.image'\n\n const [\n {\n [descriptionPath]: { value: metaDesc } = {} as FormField,\n [imagePath]: { value: metaImage } = {} as FormField,\n [titlePath]: { value: metaTitle } = {} as FormField,\n },\n ] = useAllFormFields()\n const { t } = useTranslation<PluginSEOTranslations, PluginSEOTranslationKeys>()\n\n const [titleIsValid, setTitleIsValid] = useState<boolean | undefined>()\n const [descIsValid, setDescIsValid] = useState<boolean | undefined>()\n const [imageIsValid, setImageIsValid] = useState<boolean | undefined>()\n\n const resetAll = useCallback(() => {\n const fields = getFields()\n const fieldsWithoutMeta = fields\n fieldsWithoutMeta['meta.title'].value = ''\n fieldsWithoutMeta['meta.description'].value = ''\n fieldsWithoutMeta['meta.image'].value = ''\n // dispatchFields(fieldsWithoutMeta);\n }, [getFields])\n\n useEffect(() => {\n if (typeof metaTitle === 'string') {\n setTitleIsValid(metaTitle.length >= minTitle && metaTitle.length <= maxTitle)\n }\n if (typeof metaDesc === 'string') {\n setDescIsValid(metaDesc.length >= minDesc && metaDesc.length <= maxDesc)\n }\n setImageIsValid(Boolean(metaImage))\n }, [metaTitle, metaDesc, metaImage])\n\n const testResults = [titleIsValid, descIsValid, imageIsValid]\n\n const numberOfPasses = testResults.filter(Boolean).length\n\n return (\n <div\n style={{\n marginBottom: '20px',\n }}\n >\n <div>\n {t('plugin-seo:checksPassing', { current: numberOfPasses, max: testResults.length })}\n </div>\n </div>\n )\n}\n"],"names":["useAllFormFields","useForm","useTranslation","React","useCallback","useEffect","useState","defaults","description","maxLength","maxDesc","minLength","minDesc","title","maxTitle","minTitle","OverviewComponent","descriptionPath","descriptionPathFromContext","imagePath","imagePathFromContext","titlePath","titlePathFromContext","getFields","value","metaDesc","metaImage","metaTitle","t","titleIsValid","setTitleIsValid","descIsValid","setDescIsValid","imageIsValid","setImageIsValid","resetAll","fields","fieldsWithoutMeta","length","Boolean","testResults","numberOfPasses","filter","div","style","marginBottom","current","max"],"mappings":"AAAA;;AAIA,SAASA,gBAAgB,EAAEC,OAAO,EAAEC,cAAc,QAAQ,iBAAgB;AAC1E,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAI/D,SAASC,QAAQ,QAAQ,oBAAmB;AAE5C,MAAM,EACJC,aAAa,EAAEC,WAAWC,OAAO,EAAEC,WAAWC,OAAO,EAAE,EACvDC,OAAO,EAAEJ,WAAWK,QAAQ,EAAEH,WAAWI,QAAQ,EAAE,EACpD,GAAGR;AAQJ,OAAO,MAAMS,oBAA6C,CAAC,EACzDC,iBAAiBC,0BAA0B,EAC3CC,WAAWC,oBAAoB,EAC/BC,WAAWC,oBAAoB,EAChC;IACC,MAAM,EACJ,mBAAmB;IACnBC,SAAS,EACV,GAAGtB;IAEJ,MAAMgB,kBAAkBC,8BAA8B;IACtD,MAAMG,YAAYC,wBAAwB;IAC1C,MAAMH,YAAYC,wBAAwB;IAE1C,MAAM,CACJ,EACE,CAACH,gBAAgB,EAAE,EAAEO,OAAOC,QAAQ,EAAE,GAAG,CAAC,CAAc,EACxD,CAACN,UAAU,EAAE,EAAEK,OAAOE,SAAS,EAAE,GAAG,CAAC,CAAc,EACnD,CAACL,UAAU,EAAE,EAAEG,OAAOG,SAAS,EAAE,GAAG,CAAC,CAAc,EACpD,CACF,GAAG3B;IACJ,MAAM,EAAE4B,CAAC,EAAE,GAAG1B;IAEd,MAAM,CAAC2B,cAAcC,gBAAgB,GAAGxB;IACxC,MAAM,CAACyB,aAAaC,eAAe,GAAG1B;IACtC,MAAM,CAAC2B,cAAcC,gBAAgB,GAAG5B;IAExC,MAAM6B,WAAW/B,YAAY;QAC3B,MAAMgC,SAASb;QACf,MAAMc,oBAAoBD;QAC1BC,iBAAiB,CAAC,aAAa,CAACb,KAAK,GAAG;QACxCa,iBAAiB,CAAC,mBAAmB,CAACb,KAAK,GAAG;QAC9Ca,iBAAiB,CAAC,aAAa,CAACb,KAAK,GAAG;IACxC,qCAAqC;IACvC,GAAG;QAACD;KAAU;IAEdlB,UAAU;QACR,IAAI,OAAOsB,cAAc,UAAU;YACjCG,gBAAgBH,UAAUW,MAAM,IAAIvB,YAAYY,UAAUW,MAAM,IAAIxB;QACtE;QACA,IAAI,OAAOW,aAAa,UAAU;YAChCO,eAAeP,SAASa,MAAM,IAAI1B,WAAWa,SAASa,MAAM,IAAI5B;QAClE;QACAwB,gBAAgBK,QAAQb;IAC1B,GAAG;QAACC;QAAWF;QAAUC;KAAU;IAEnC,MAAMc,cAAc;QAACX;QAAcE;QAAaE;KAAa;IAE7D,MAAMQ,iBAAiBD,YAAYE,MAAM,CAACH,SAASD,MAAM;IAEzD,qBACE,KAACK;QACCC,OAAO;YACLC,cAAc;QAChB;kBAEA,cAAA,KAACF;sBACEf,EAAE,4BAA4B;gBAAEkB,SAASL;gBAAgBM,KAAKP,YAAYF,MAAM;YAAC;;;AAI1F,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAoC,MAAM,SAAS,CAAA;AAKvE,OAAO,KAAK,EAKV,eAAe,EAChB,MAAM,YAAY,CAAA;AASnB,eAAO,MAAM,SAAS,iBACL,eAAe,cACrB,MAAM,KAAG,MA+NjB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAoC,MAAM,SAAS,CAAA;AAIvE,OAAO,KAAK,EAKV,eAAe,EAChB,MAAM,YAAY,CAAA;AASnB,eAAO,MAAM,SAAS,iBACL,eAAe,cACrB,MAAM,KAAG,MA+OjB,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- import { addDataAndFileToRequest } from '@payloadcms/next/utilities';
2
1
  import { deepMergeSimple } from 'payload/shared';
3
2
  import { MetaDescriptionField } from './fields/MetaDescription/index.js';
4
3
  import { MetaImageField } from './fields/MetaImage/index.js';
@@ -103,7 +102,10 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
103
102
  ...config.endpoints ?? [],
104
103
  {
105
104
  handler: async (req)=>{
106
- await addDataAndFileToRequest(req);
105
+ const data = await req.json();
106
+ if (data) {
107
+ req.data = data;
108
+ }
107
109
  const result = pluginConfig.generateTitle ? await pluginConfig.generateTitle({
108
110
  ...req.data,
109
111
  req
@@ -119,7 +121,10 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
119
121
  },
120
122
  {
121
123
  handler: async (req)=>{
122
- await addDataAndFileToRequest(req);
124
+ const data = await req.json();
125
+ if (data) {
126
+ req.data = data;
127
+ }
123
128
  const result = pluginConfig.generateDescription ? await pluginConfig.generateDescription({
124
129
  ...req.data,
125
130
  req
@@ -135,7 +140,10 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
135
140
  },
136
141
  {
137
142
  handler: async (req)=>{
138
- await addDataAndFileToRequest(req);
143
+ const data = await req.json();
144
+ if (data) {
145
+ req.data = data;
146
+ }
139
147
  const result = pluginConfig.generateURL ? await pluginConfig.generateURL({
140
148
  ...req.data,
141
149
  req
@@ -151,7 +159,10 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
151
159
  },
152
160
  {
153
161
  handler: async (req)=>{
154
- await addDataAndFileToRequest(req);
162
+ const data = await req.json();
163
+ if (data) {
164
+ req.data = data;
165
+ }
155
166
  const result = pluginConfig.generateImage ? await pluginConfig.generateImage({
156
167
  ...req.data,
157
168
  req
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import type { Config, GroupField, TabsField, TextField } from 'payload'\n\nimport { addDataAndFileToRequest } from '@payloadcms/next/utilities'\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 seoFields: GroupField[] = [\n {\n name: 'meta',\n type: 'group',\n fields: [\n OverviewField({}),\n MetaTitleField({\n hasGenerateFn: typeof pluginConfig?.generateTitle === 'function',\n overrides: pluginConfig?.fieldOverrides?.title as unknown as TextField,\n }),\n MetaDescriptionField({\n hasGenerateFn: typeof pluginConfig?.generateDescription === 'function',\n overrides: pluginConfig?.fieldOverrides?.description,\n }),\n ...(pluginConfig?.uploadsCollection\n ? [\n MetaImageField({\n hasGenerateFn: typeof pluginConfig?.generateImage === 'function',\n overrides: pluginConfig?.fieldOverrides?.image,\n relationTo: pluginConfig.uploadsCollection,\n }),\n ]\n : []),\n ...(pluginConfig?.fields || []),\n PreviewField({\n hasGenerateFn: typeof pluginConfig?.generateURL === 'function',\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\n const result = pluginConfig.generateTitle\n ? await pluginConfig.generateTitle({\n ...req.data,\n req,\n } as unknown as 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 await addDataAndFileToRequest(req)\n\n const result = pluginConfig.generateDescription\n ? await pluginConfig.generateDescription({\n ...req.data,\n req,\n } as unknown as 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 await addDataAndFileToRequest(req)\n\n const result = pluginConfig.generateURL\n ? await pluginConfig.generateURL({\n ...req.data,\n req,\n } 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\n const result = pluginConfig.generateImage\n ? await pluginConfig.generateImage({\n ...req.data,\n req,\n } as unknown 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":["addDataAndFileToRequest","deepMergeSimple","MetaDescriptionField","MetaImageField","MetaTitleField","OverviewField","PreviewField","translations","seoPlugin","pluginConfig","config","seoFields","name","type","fields","hasGenerateFn","generateTitle","overrides","fieldOverrides","title","generateDescription","description","uploadsCollection","generateImage","image","relationTo","generateURL","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","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, GroupField, TabsField, TextField } 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 seoFields: GroupField[] = [\n {\n name: 'meta',\n type: 'group',\n fields: [\n OverviewField({}),\n MetaTitleField({\n hasGenerateFn: typeof pluginConfig?.generateTitle === 'function',\n overrides: pluginConfig?.fieldOverrides?.title as unknown as TextField,\n }),\n MetaDescriptionField({\n hasGenerateFn: typeof pluginConfig?.generateDescription === 'function',\n overrides: pluginConfig?.fieldOverrides?.description,\n }),\n ...(pluginConfig?.uploadsCollection\n ? [\n MetaImageField({\n hasGenerateFn: typeof pluginConfig?.generateImage === 'function',\n overrides: pluginConfig?.fieldOverrides?.image,\n relationTo: pluginConfig.uploadsCollection,\n }),\n ]\n : []),\n ...(pluginConfig?.fields || []),\n PreviewField({\n hasGenerateFn: typeof pluginConfig?.generateURL === 'function',\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 const data = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateTitle\n ? await pluginConfig.generateTitle({\n ...req.data,\n req,\n } as unknown as 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 = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateDescription\n ? await pluginConfig.generateDescription({\n ...req.data,\n req,\n } as unknown as 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 = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateURL\n ? await pluginConfig.generateURL({\n ...req.data,\n req,\n } 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 const data = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateImage\n ? await pluginConfig.generateImage({\n ...req.data,\n req,\n } as unknown 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","seoFields","name","type","fields","hasGenerateFn","generateTitle","overrides","fieldOverrides","title","generateDescription","description","uploadsCollection","generateImage","image","relationTo","generateURL","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","Response","JSON","stringify","status","method","path","globals","global","i18n"],"mappings":"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"}
@@ -88,6 +88,28 @@ export declare const translations: {
88
88
  tooShort: string;
89
89
  };
90
90
  };
91
+ it: {
92
+ $schema: string;
93
+ 'plugin-seo': {
94
+ almostThere: string;
95
+ autoGenerate: string;
96
+ bestPractices: string;
97
+ characterCount: string;
98
+ charactersLeftOver: string;
99
+ charactersToGo: string;
100
+ charactersTooMany: string;
101
+ checksPassing: string;
102
+ good: string;
103
+ imageAutoGenerationTip: string;
104
+ lengthTipDescription: string;
105
+ lengthTipTitle: string;
106
+ noImage: string;
107
+ preview: string;
108
+ previewDescription: string;
109
+ tooLong: string;
110
+ tooShort: string;
111
+ };
112
+ };
91
113
  nb: {
92
114
  $schema: string;
93
115
  'plugin-seo': {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAElE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyMxB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,YAAY,CAAC,EAAE,CAAA;AAE1D,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAElE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmOxB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,YAAY,CAAC,EAAE,CAAA;AAE1D,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAA"}
@@ -87,6 +87,28 @@ export const translations = {
87
87
  tooShort: 'Trop court'
88
88
  }
89
89
  },
90
+ it: {
91
+ $schema: './translation-schema.json',
92
+ 'plugin-seo': {
93
+ almostThere: 'Ci siamo quasi',
94
+ autoGenerate: 'Generazione automatica',
95
+ bestPractices: 'migliori pratiche',
96
+ characterCount: '{{current}}/{{minLength}}-{{maxLength}} caratteri, ',
97
+ charactersLeftOver: '{{characters}} rimasti',
98
+ charactersToGo: '{{characters}} mancanti',
99
+ charactersTooMany: '{{characters}} in più',
100
+ checksPassing: '{{current}}/{{max}} controlli superati',
101
+ good: 'Bene',
102
+ imageAutoGenerationTip: "La generazione automatica recupererà l'immagine selezionata per l'hero",
103
+ lengthTipDescription: 'Dovrebbe essere compreso tra {{minLength}} e {{maxLength}} caratteri. Per assistenza nella scrittura di meta descrizioni di qualità, vedere ',
104
+ lengthTipTitle: 'Dovrebbe essere compreso tra {{minLength}} e {{maxLength}} caratteri. Per assistenza nella scrittura di meta titoli di qualità, vedere ',
105
+ noImage: 'Nessuna Immagine',
106
+ preview: 'Anteprima',
107
+ previewDescription: 'I risultati esatti possono variare in base al contenuto e alla pertinenza della ricerca.',
108
+ tooLong: 'Troppo lungo',
109
+ tooShort: 'Troppo corto'
110
+ }
111
+ },
90
112
  nb: {
91
113
  $schema: './translation-schema.json',
92
114
  'plugin-seo': {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/translations/index.ts"],"sourcesContent":["import type { NestedKeysStripped } from '@payloadcms/translations'\n\nexport const translations = {\n en: {\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 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 es: {\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 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 fa: {\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 noImage: 'بدون تصویر',\n preview: 'پیش‌نمایش',\n previewDescription:\n 'فهرست نتایج ممکن است بر اساس محتوا و متناسب با کلمه کلیدی جستجو شده باشند',\n tooLong: 'خیلی طولانی',\n tooShort: 'خیلی کوتاه',\n },\n },\n fr: {\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 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 nb: {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'Nesten der',\n autoGenerate: 'Auto-generer',\n bestPractices: 'beste praksis',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} tegn, ',\n charactersLeftOver: '{{characters}} til overs',\n charactersToGo: '{{characters}} igjen',\n charactersTooMany: '{{characters}} for mange',\n checksPassing: '{{current}}/{{max}} sjekker bestått',\n good: 'Bra',\n imageAutoGenerationTip: 'Auto-generering vil hente det valgte hero-bildet.',\n lengthTipDescription:\n 'Dette bør være mellom {{minLength}} og {{maxLength}} tegn. For hjelp til å skrive beskrivelser av god kvalitet, se ',\n lengthTipTitle:\n 'Dette bør være mellom {{minLength}} og {{maxLength}} tegn. For hjelp til å skrive metatitler av god kvalitet, se ',\n noImage: 'Bilde mangler',\n preview: 'Forhåndsvisning',\n previewDescription:\n 'Eksakte resultatoppføringer kan variere basert på innhold og søke relevans.',\n tooLong: 'For lang',\n tooShort: 'For kort',\n },\n },\n pl: {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'Prawie gotowe',\n autoGenerate: 'Wygeneruj automatycznie',\n bestPractices: 'najlepsze praktyki',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} znaków, ',\n charactersLeftOver: 'zostało {{characters}} znaków',\n charactersToGo: 'pozostało {{characters}} znaków',\n charactersTooMany: '{{characters}} znaków za dużo',\n checksPassing: '{{current}}/{{max}} testów zakończonych pomyślnie',\n good: 'Dobrze',\n imageAutoGenerationTip: 'Automatyczne generowanie pobierze wybrany główny obraz.',\n lengthTipDescription:\n 'Długość powinna wynosić od {{minLength}} do {{maxLength}} znaków. Po porady dotyczące pisania wysokiej jakości meta opisów zobacz ',\n lengthTipTitle:\n 'Długość powinna wynosić od {{minLength}} do {{maxLength}} znaków. Po porady dotyczące pisania wysokiej jakości meta tytułów zobacz ',\n noImage: 'Brak obrazu',\n preview: 'Podgląd',\n previewDescription:\n 'Dokładne wyniki listowania mogą się różnić w zależności od treści i zgodności z kryteriami wyszukiwania.',\n tooLong: 'Zbyt długie',\n tooShort: 'Zbyt krótkie',\n },\n },\n ru: {\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 lengthTipDescription:\n 'Должно быть от {{minLength}} до {{maxLength}} символов. Для помощи в написании качественных метаописаний см.',\n lengthTipTitle:\n 'Должно быть от {{minLength}} до {{maxLength}} символов. Для помощи в написании качественных метазаголовков см.',\n noImage: 'Нет изображения',\n preview: 'Предварительный просмотр',\n previewDescription:\n 'Фактические результаты могут отличаться в зависимости от контента и релевантности поиска.',\n tooLong: 'Слишком длинно',\n tooShort: 'Слишком коротко',\n },\n },\n uk: {\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 lengthTipDescription:\n 'Має бути від {{minLength}} до {{maxLength}} символів. Щоб дізнатися, як писати якісні метаописи — перегляньте ',\n lengthTipTitle:\n 'Має бути від {{minLength}} до {{maxLength}} символів. Щоб дізнатися, як писати якісні метазаголовки — перегляньте ',\n noImage: 'Немає зображення',\n preview: 'Попередній перегляд',\n previewDescription:\n 'Реальне відображення може відрізнятися в залежності від вмісту та релевантності пошуку.',\n tooLong: 'Задовгий',\n tooShort: 'Закороткий',\n },\n },\n}\n\nexport type PluginSEOTranslations = typeof translations.en\n\nexport type PluginSEOTranslationKeys = NestedKeysStripped<PluginSEOTranslations>\n"],"names":["translations","en","$schema","almostThere","autoGenerate","bestPractices","characterCount","charactersLeftOver","charactersToGo","charactersTooMany","checksPassing","good","imageAutoGenerationTip","lengthTipDescription","lengthTipTitle","noImage","preview","previewDescription","tooLong","tooShort","es","fa","fr","nb","pl","ru","uk"],"mappings":"AAEA,OAAO,MAAMA,eAAe;IAC1BC,IAAI;QACFC,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBAAoB;YACpBC,SAAS;YACTC,UAAU;QACZ;IACF;IACAC,IAAI;QACFlB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAE,IAAI;QACFnB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBACE;YACFC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAG,IAAI;QACFpB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAI,IAAI;QACFrB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAK,IAAI;QACFtB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAM,IAAI;QACFvB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAO,IAAI;QACFxB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/translations/index.ts"],"sourcesContent":["import type { NestedKeysStripped } from '@payloadcms/translations'\n\nexport const translations = {\n en: {\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 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 es: {\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 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 fa: {\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 noImage: 'بدون تصویر',\n preview: 'پیش‌نمایش',\n previewDescription:\n 'فهرست نتایج ممکن است بر اساس محتوا و متناسب با کلمه کلیدی جستجو شده باشند',\n tooLong: 'خیلی طولانی',\n tooShort: 'خیلی کوتاه',\n },\n },\n fr: {\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 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 it: {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'Ci siamo quasi',\n autoGenerate: 'Generazione automatica',\n bestPractices: 'migliori pratiche',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} caratteri, ',\n charactersLeftOver: '{{characters}} rimasti',\n charactersToGo: '{{characters}} mancanti',\n charactersTooMany: '{{characters}} in più',\n checksPassing: '{{current}}/{{max}} controlli superati',\n good: 'Bene',\n imageAutoGenerationTip:\n \"La generazione automatica recupererà l'immagine selezionata per l'hero\",\n lengthTipDescription:\n 'Dovrebbe essere compreso tra {{minLength}} e {{maxLength}} caratteri. Per assistenza nella scrittura di meta descrizioni di qualità, vedere ',\n lengthTipTitle:\n 'Dovrebbe essere compreso tra {{minLength}} e {{maxLength}} caratteri. Per assistenza nella scrittura di meta titoli di qualità, vedere ',\n noImage: 'Nessuna Immagine',\n preview: 'Anteprima',\n previewDescription:\n 'I risultati esatti possono variare in base al contenuto e alla pertinenza della ricerca.',\n tooLong: 'Troppo lungo',\n tooShort: 'Troppo corto',\n },\n },\n nb: {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'Nesten der',\n autoGenerate: 'Auto-generer',\n bestPractices: 'beste praksis',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} tegn, ',\n charactersLeftOver: '{{characters}} til overs',\n charactersToGo: '{{characters}} igjen',\n charactersTooMany: '{{characters}} for mange',\n checksPassing: '{{current}}/{{max}} sjekker bestått',\n good: 'Bra',\n imageAutoGenerationTip: 'Auto-generering vil hente det valgte hero-bildet.',\n lengthTipDescription:\n 'Dette bør være mellom {{minLength}} og {{maxLength}} tegn. For hjelp til å skrive beskrivelser av god kvalitet, se ',\n lengthTipTitle:\n 'Dette bør være mellom {{minLength}} og {{maxLength}} tegn. For hjelp til å skrive metatitler av god kvalitet, se ',\n noImage: 'Bilde mangler',\n preview: 'Forhåndsvisning',\n previewDescription:\n 'Eksakte resultatoppføringer kan variere basert på innhold og søke relevans.',\n tooLong: 'For lang',\n tooShort: 'For kort',\n },\n },\n pl: {\n $schema: './translation-schema.json',\n 'plugin-seo': {\n almostThere: 'Prawie gotowe',\n autoGenerate: 'Wygeneruj automatycznie',\n bestPractices: 'najlepsze praktyki',\n characterCount: '{{current}}/{{minLength}}-{{maxLength}} znaków, ',\n charactersLeftOver: 'zostało {{characters}} znaków',\n charactersToGo: 'pozostało {{characters}} znaków',\n charactersTooMany: '{{characters}} znaków za dużo',\n checksPassing: '{{current}}/{{max}} testów zakończonych pomyślnie',\n good: 'Dobrze',\n imageAutoGenerationTip: 'Automatyczne generowanie pobierze wybrany główny obraz.',\n lengthTipDescription:\n 'Długość powinna wynosić od {{minLength}} do {{maxLength}} znaków. Po porady dotyczące pisania wysokiej jakości meta opisów zobacz ',\n lengthTipTitle:\n 'Długość powinna wynosić od {{minLength}} do {{maxLength}} znaków. Po porady dotyczące pisania wysokiej jakości meta tytułów zobacz ',\n noImage: 'Brak obrazu',\n preview: 'Podgląd',\n previewDescription:\n 'Dokładne wyniki listowania mogą się różnić w zależności od treści i zgodności z kryteriami wyszukiwania.',\n tooLong: 'Zbyt długie',\n tooShort: 'Zbyt krótkie',\n },\n },\n ru: {\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 lengthTipDescription:\n 'Должно быть от {{minLength}} до {{maxLength}} символов. Для помощи в написании качественных метаописаний см.',\n lengthTipTitle:\n 'Должно быть от {{minLength}} до {{maxLength}} символов. Для помощи в написании качественных метазаголовков см.',\n noImage: 'Нет изображения',\n preview: 'Предварительный просмотр',\n previewDescription:\n 'Фактические результаты могут отличаться в зависимости от контента и релевантности поиска.',\n tooLong: 'Слишком длинно',\n tooShort: 'Слишком коротко',\n },\n },\n uk: {\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 lengthTipDescription:\n 'Має бути від {{minLength}} до {{maxLength}} символів. Щоб дізнатися, як писати якісні метаописи — перегляньте ',\n lengthTipTitle:\n 'Має бути від {{minLength}} до {{maxLength}} символів. Щоб дізнатися, як писати якісні метазаголовки — перегляньте ',\n noImage: 'Немає зображення',\n preview: 'Попередній перегляд',\n previewDescription:\n 'Реальне відображення може відрізнятися в залежності від вмісту та релевантності пошуку.',\n tooLong: 'Задовгий',\n tooShort: 'Закороткий',\n },\n },\n}\n\nexport type PluginSEOTranslations = typeof translations.en\n\nexport type PluginSEOTranslationKeys = NestedKeysStripped<PluginSEOTranslations>\n"],"names":["translations","en","$schema","almostThere","autoGenerate","bestPractices","characterCount","charactersLeftOver","charactersToGo","charactersTooMany","checksPassing","good","imageAutoGenerationTip","lengthTipDescription","lengthTipTitle","noImage","preview","previewDescription","tooLong","tooShort","es","fa","fr","it","nb","pl","ru","uk"],"mappings":"AAEA,OAAO,MAAMA,eAAe;IAC1BC,IAAI;QACFC,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBAAoB;YACpBC,SAAS;YACTC,UAAU;QACZ;IACF;IACAC,IAAI;QACFlB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAE,IAAI;QACFnB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBACE;YACFC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAG,IAAI;QACFpB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAI,IAAI;QACFrB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBACE;YACFC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAK,IAAI;QACFtB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAM,IAAI;QACFvB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAO,IAAI;QACFxB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;IACAQ,IAAI;QACFzB,SAAS;QACT,cAAc;YACZC,aAAa;YACbC,cAAc;YACdC,eAAe;YACfC,gBAAgB;YAChBC,oBAAoB;YACpBC,gBAAgB;YAChBC,mBAAmB;YACnBC,eAAe;YACfC,MAAM;YACNC,wBAAwB;YACxBC,sBACE;YACFC,gBACE;YACFC,SAAS;YACTC,SAAS;YACTC,oBACE;YACFC,SAAS;YACTC,UAAU;QACZ;IACF;AACF,EAAC"}
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "./translation-schema.json",
3
+ "plugin-seo": {
4
+ "almostThere": "Ci siamo quasi",
5
+ "autoGenerate": "Generazione automatica",
6
+ "bestPractices": "migliori pratiche",
7
+ "characterCount": "{{current}}/{{minLength}}-{{maxLength}} caratteri, ",
8
+ "charactersLeftOver": "{{characters}} rimasti",
9
+ "charactersToGo": "{{characters}} mancanti",
10
+ "charactersTooMany": "{{characters}} in più",
11
+ "checksPassing": "{{current}}/{{max}} controlli superati",
12
+ "good": "Bene",
13
+ "imageAutoGenerationTip": "La generazione automatica recupererà l'immagine selezionata per l'hero.",
14
+ "lengthTipDescription": "Dovrebbe essere compreso tra {{minLength}} e {{maxLength}} caratteri. Per assistenza nella scrittura di meta descrizioni di qualità, vedere ",
15
+ "lengthTipTitle": "Dovrebbe essere compreso tra {{minLength}} e {{maxLength}} caratteri. Per assistenza nella scrittura di meta titoli di qualità, vedere ",
16
+ "noImage": "Nessuna Immagine",
17
+ "preview": "Anteprima",
18
+ "previewDescription": "I risultati esatti possono variare in base al contenuto e alla pertinenza della ricerca.",
19
+ "tooLong": "Troppo lungo",
20
+ "tooShort": "Troppo corto"
21
+ }
22
+ }
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { DocumentInfoContext } from '@payloadcms/ui';
2
- import type { Field, PayloadRequest, TextField, TextareaField, UploadField } from 'payload';
2
+ import type { Field, PayloadRequest, TextareaField, TextField, UploadField } from 'payload';
3
3
  export type PartialDocumentInfoContext = Pick<DocumentInfoContext, 'docPermissions' | 'hasPublishPermission' | 'hasSavePermission' | 'id' | 'initialData' | 'initialState' | 'preferencesKey' | 'publishedDoc' | 'slug' | 'title' | 'versionsCount'>;
4
4
  export type GenerateTitle<T = any> = (args: {
5
5
  doc: T;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE3F,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,mBAAmB,EACjB,gBAAgB,GAChB,sBAAsB,GACtB,mBAAmB,GACnB,IAAI,GACJ,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,MAAM,GACN,OAAO,GACP,eAAe,CAClB,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI,CACnC,IAAI,EAAE;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GAAG,0BAA0B,KAChF,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE7B,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,GAAG,IAAI,CACzC,IAAI,EAAE;IACJ,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,0BAA0B,KAC3B,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE7B,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI,CACnC,IAAI,EAAE;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GAAG,0BAA0B,KAChF,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE7B,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,CACjC,IAAI,EAAE;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GAAG,0BAA0B,KAChF,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE7B,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,cAAc,CAAC,EAAE;QACf,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;QACpC,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QAC5B,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;KAC3B,CAAA;IACD,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAChB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE3F,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,mBAAmB,EACjB,gBAAgB,GAChB,sBAAsB,GACtB,mBAAmB,GACnB,IAAI,GACJ,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,MAAM,GACN,OAAO,GACP,eAAe,CAClB,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI,CACnC,IAAI,EAAE;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GAAG,0BAA0B,KAChF,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE7B,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,GAAG,IAAI,CACzC,IAAI,EAAE;IACJ,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,0BAA0B,KAC3B,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE7B,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI,CACnC,IAAI,EAAE;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GAAG,0BAA0B,KAChF,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE7B,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,CACjC,IAAI,EAAE;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GAAG,0BAA0B,KAChF,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE7B,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,cAAc,CAAC,EAAE;QACf,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;QACpC,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QAC5B,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;KAC3B,CAAA;IACD,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAChB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { DocumentInfoContext } from '@payloadcms/ui'\nimport type { Field, PayloadRequest, TextField, TextareaField, UploadField } from 'payload'\n\nexport type PartialDocumentInfoContext = Pick<\n DocumentInfoContext,\n | 'docPermissions'\n | 'hasPublishPermission'\n | 'hasSavePermission'\n | 'id'\n | 'initialData'\n | 'initialState'\n | 'preferencesKey'\n | 'publishedDoc'\n | 'slug'\n | 'title'\n | 'versionsCount'\n>\n\nexport type GenerateTitle<T = any> = (\n args: { doc: T; locale?: string; req: PayloadRequest } & PartialDocumentInfoContext,\n) => Promise<string> | string\n\nexport type GenerateDescription<T = any> = (\n args: {\n doc: T\n locale?: string\n req: PayloadRequest\n } & PartialDocumentInfoContext,\n) => Promise<string> | string\n\nexport type GenerateImage<T = any> = (\n args: { doc: T; locale?: string; req: PayloadRequest } & PartialDocumentInfoContext,\n) => Promise<string> | string\n\nexport type GenerateURL<T = any> = (\n args: { doc: T; locale?: string; req: PayloadRequest } & PartialDocumentInfoContext,\n) => Promise<string> | string\n\nexport type SEOPluginConfig = {\n collections?: string[]\n fieldOverrides?: {\n description?: Partial<TextareaField>\n image?: Partial<UploadField>\n title?: Partial<TextField>\n }\n fields?: Field[]\n generateDescription?: GenerateDescription\n generateImage?: GenerateImage\n generateTitle?: GenerateTitle\n generateURL?: GenerateURL\n globals?: string[]\n interfaceName?: string\n tabbedUI?: boolean\n uploadsCollection?: string\n}\n\nexport type Meta = {\n description?: string\n image?: any // TODO: type this\n keywords?: string\n title?: string\n}\n"],"names":[],"mappings":"AAwDA,WAKC"}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { DocumentInfoContext } from '@payloadcms/ui'\nimport type { Field, PayloadRequest, TextareaField, TextField, UploadField } from 'payload'\n\nexport type PartialDocumentInfoContext = Pick<\n DocumentInfoContext,\n | 'docPermissions'\n | 'hasPublishPermission'\n | 'hasSavePermission'\n | 'id'\n | 'initialData'\n | 'initialState'\n | 'preferencesKey'\n | 'publishedDoc'\n | 'slug'\n | 'title'\n | 'versionsCount'\n>\n\nexport type GenerateTitle<T = any> = (\n args: { doc: T; locale?: string; req: PayloadRequest } & PartialDocumentInfoContext,\n) => Promise<string> | string\n\nexport type GenerateDescription<T = any> = (\n args: {\n doc: T\n locale?: string\n req: PayloadRequest\n } & PartialDocumentInfoContext,\n) => Promise<string> | string\n\nexport type GenerateImage<T = any> = (\n args: { doc: T; locale?: string; req: PayloadRequest } & PartialDocumentInfoContext,\n) => Promise<string> | string\n\nexport type GenerateURL<T = any> = (\n args: { doc: T; locale?: string; req: PayloadRequest } & PartialDocumentInfoContext,\n) => Promise<string> | string\n\nexport type SEOPluginConfig = {\n collections?: string[]\n fieldOverrides?: {\n description?: Partial<TextareaField>\n image?: Partial<UploadField>\n title?: Partial<TextField>\n }\n fields?: Field[]\n generateDescription?: GenerateDescription\n generateImage?: GenerateImage\n generateTitle?: GenerateTitle\n generateURL?: GenerateURL\n globals?: string[]\n interfaceName?: string\n tabbedUI?: boolean\n uploadsCollection?: string\n}\n\nexport type Meta = {\n description?: string\n image?: any // TODO: type this\n keywords?: string\n title?: string\n}\n"],"names":[],"mappings":"AAwDA,WAKC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/plugin-seo",
3
- "version": "3.0.0-canary.78bbed6",
3
+ "version": "3.0.0-canary.79ab53e",
4
4
  "description": "SEO plugin for Payload",
5
5
  "keywords": [
6
6
  "payload",
@@ -46,21 +46,21 @@
46
46
  "files": [
47
47
  "dist"
48
48
  ],
49
+ "dependencies": {
50
+ "@payloadcms/translations": "3.0.0-canary.79ab53e",
51
+ "@payloadcms/ui": "3.0.0-canary.79ab53e"
52
+ },
49
53
  "devDependencies": {
50
54
  "@types/react": "npm:types-react@19.0.0-rc.0",
51
55
  "@types/react-dom": "npm:types-react-dom@19.0.0-rc.0",
52
- "@payloadcms/eslint-config": "3.0.0-beta.59",
53
- "@payloadcms/next": "3.0.0-canary.78bbed6",
54
- "@payloadcms/translations": "3.0.0-canary.78bbed6",
55
- "@payloadcms/ui": "3.0.0-canary.78bbed6",
56
- "payload": "3.0.0-canary.78bbed6"
56
+ "@payloadcms/eslint-config": "3.0.0-beta.97",
57
+ "payload": "3.0.0-canary.79ab53e",
58
+ "@payloadcms/next": "3.0.0-canary.79ab53e"
57
59
  },
58
60
  "peerDependencies": {
59
61
  "react": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
60
62
  "react-dom": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
61
- "@payloadcms/translations": "3.0.0-canary.78bbed6",
62
- "@payloadcms/ui": "3.0.0-canary.78bbed6",
63
- "payload": "3.0.0-canary.78bbed6"
63
+ "payload": "3.0.0-canary.79ab53e"
64
64
  },
65
65
  "publishConfig": {
66
66
  "registry": "https://registry.npmjs.org/"
@@ -76,7 +76,7 @@
76
76
  "build:types": "tsc --emitDeclarationOnly --outDir dist",
77
77
  "clean": "rimraf {dist,*.tsbuildinfo}",
78
78
  "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
79
- "lint": "eslint src",
80
- "lint:fix": "eslint --fix --ext .ts,.tsx src"
79
+ "lint": "eslint .",
80
+ "lint:fix": "eslint . --fix"
81
81
  }
82
82
  }