sanity-plugin-seofields 1.6.3 → 1.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/{SeoPreview-XVAZYHCL.js → SeoPreview-KEGGQSPJ.js} +5 -4
  2. package/dist/{SeoPreview-PYYVZMY3.cjs.map → SeoPreview-KEGGQSPJ.js.map} +1 -1
  3. package/dist/{SeoPreview-PYYVZMY3.cjs → SeoPreview-WYH7NYNM.cjs} +6 -5
  4. package/dist/SeoPreview-WYH7NYNM.cjs.map +1 -0
  5. package/dist/{chunk-XXQURVNE.cjs → chunk-BCTPOWXA.cjs} +111 -111
  6. package/dist/{chunk-XXQURVNE.cjs.map → chunk-BCTPOWXA.cjs.map} +1 -1
  7. package/dist/{chunk-25JLWVEU.js → chunk-HDZZQCH7.js} +14 -8
  8. package/dist/chunk-HDZZQCH7.js.map +1 -0
  9. package/dist/{chunk-IQG5JWVT.js → chunk-KTL6NYNG.js} +4 -2
  10. package/dist/chunk-KTL6NYNG.js.map +1 -0
  11. package/dist/{chunk-ULFY5STC.js → chunk-XXA6WCWS.js} +3 -3
  12. package/dist/{chunk-ULFY5STC.js.map → chunk-XXA6WCWS.js.map} +1 -1
  13. package/dist/{chunk-YM3ZZ2HU.cjs → chunk-YHXUWGNA.cjs} +4 -2
  14. package/dist/chunk-YHXUWGNA.cjs.map +1 -0
  15. package/dist/{chunk-IFDLKZET.cjs → chunk-ZBHLMQTS.cjs} +14 -8
  16. package/dist/chunk-ZBHLMQTS.cjs.map +1 -0
  17. package/dist/cli.js +1 -1
  18. package/dist/{component-DS-Ve_nw.d.cts → component-CIE6Sy4F.d.cts} +1 -1
  19. package/dist/{component-CWZ0tlsq.d.ts → component-H52blyfc.d.ts} +1 -1
  20. package/dist/index.cjs +40 -15
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.js +32 -7
  23. package/dist/index.js.map +1 -1
  24. package/dist/next.cjs +77 -77
  25. package/dist/next.d.cts +2 -2
  26. package/dist/next.d.ts +2 -2
  27. package/dist/next.js +2 -2
  28. package/dist/schema/next.cjs +80 -80
  29. package/dist/schema/next.d.cts +3 -3
  30. package/dist/schema/next.d.ts +3 -3
  31. package/dist/schema/next.js +3 -3
  32. package/dist/schema.cjs +153 -153
  33. package/dist/schema.d.cts +4 -4
  34. package/dist/schema.d.ts +4 -4
  35. package/dist/schema.js +2 -2
  36. package/dist/{types-BdaGoGQE.d.cts → types-BxcJinOf.d.cts} +8 -8
  37. package/dist/{types-Dy7r5det.d.ts → types-CbYb4MsN.d.ts} +1 -1
  38. package/dist/{types-BjVpmBAX.d.cts → types-CyRdIF-3.d.cts} +1 -1
  39. package/dist/{types-BwmZmt9I.d.ts → types-Dp9Pfnt9.d.ts} +8 -8
  40. package/package.json +1 -1
  41. package/dist/SeoPreview-XVAZYHCL.js.map +0 -1
  42. package/dist/chunk-25JLWVEU.js.map +0 -1
  43. package/dist/chunk-IFDLKZET.cjs.map +0 -1
  44. package/dist/chunk-IQG5JWVT.js.map +0 -1
  45. package/dist/chunk-YM3ZZ2HU.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/meta/MetaDescription.tsx","../src/components/meta/MetaImage.tsx","../src/components/meta/MetaTitle.tsx","../src/utils/fieldsUtils.ts","../src/utils/utils.ts","../src/components/openGraph/OgDescription.tsx","../src/components/openGraph/OgImage.tsx","../src/components/openGraph/OgImageUrl.tsx","../src/components/openGraph/OgTitle.tsx","../src/schemas/types/openGraph/index.ts","../src/components/twitter/twitterDescription.tsx","../src/components/twitter/TwitterImage.tsx","../src/components/twitter/TwitterImageUrl.tsx","../src/components/twitter/twitterTitle.tsx","../src/schemas/types/twitter/index.ts","../src/schemas/index.ts","../src/schemas/types/baseMeta/index.ts","../src/schemas/types/metaAttribute/index.ts","../src/schemas/types/metaTag/index.ts","../src/schemas/types/robots/index.ts","../src/schemas/types/index.ts","../src/plugin.ts","../src/components/SeoHealthPane.tsx","../src/index.ts"],"names":["useFormValue","useMemo","getMetaDescriptionValidationMessages","jsxs","Stack","jsx","Text","getMetaImageValidation","getMetaTitleValidationMessages","getOgDescriptionValidation","getOgImageValidation","getOgImageUrlValidation","getOgTitleValidation","defineType","defineField","__spreadProps","__spreadValues","getTwitterDescriptionValidation","getTwitterImageValidation","getTwitterImageUrlValidation","getTwitterTitleValidation","lazy","createElement","Suspense","_a","definePlugin","__objRest"],"mappings":"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","file":"index.cjs","sourcesContent":["import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaDescriptionValidationMessages} from '../../utils/seoUtils'\n\nconst MetaDescription = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getMetaDescriptionValidationMessages(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{width: 10, height: 10, borderRadius: '50%', backgroundColor: item.color}}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default MetaDescription\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {ObjectInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaImageValidation} from '../../utils/seoUtils'\n\nconst MetaImage = (props: ObjectInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n const hasImage = !!(value as Record<string, unknown> | undefined)?.asset\n\n const feedbackItems = useMemo(\n () => getMetaImageValidation(hasImage, seoParent),\n [hasImage, seoParent],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default MetaImage\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaTitleValidationMessages} from '../../utils/seoUtils'\n\nconst MetaTitle = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getMetaTitleValidationMessages(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default MetaTitle\n","import {AllFieldKeys, SeoFieldsPluginConfig, ValidHiddenFieldKeys} from '../plugin'\n\nconst DEFAULT_FIELD_INFO: Record<AllFieldKeys, {title: string; description: string}> = {\n title: {\n title: 'Meta Title',\n description:\n 'The meta title is displayed in search engine results as the clickable headline for a given result. It should be concise and accurately reflect the content of the page.',\n },\n description: {\n title: 'Meta Description',\n description:\n 'Provide a concise summary of the page content. This description may be used by search engines in search results.',\n },\n metaImage: {\n title: 'Meta Image',\n description:\n 'Upload an image that represents the content of the page. This image may be used in social media previews and search engine results.',\n },\n keywords: {\n title: 'Keywords',\n description:\n 'Add relevant keywords for this page. These keywords will be used for SEO purposes.',\n },\n canonicalUrl: {\n title: 'Canonical URL',\n description:\n 'Specify the canonical URL for this page. This helps prevent duplicate content issues by indicating the preferred version of a page.',\n },\n robots: {\n title: 'Robots Settings',\n description: 'Configure how search engine crawlers should index and follow links on this page.',\n },\n metaAttributes: {\n title: 'Additional Meta Attributes',\n description:\n 'Add custom meta attributes to the head of the document for additional SEO and social media integration.',\n },\n openGraphTitle: {\n title: 'Open Graph Title',\n description: '',\n },\n openGraphUrl: {\n title: 'Open Graph URL',\n description:\n 'The canonical URL of the page. This should be the full URL including protocol (https://).',\n },\n openGraphDescription: {\n title: 'Open Graph Description',\n description: '',\n },\n openGraphSiteName: {\n title: 'Open Graph Site Name',\n description: 'The name of your website. This is often the site title.',\n },\n openGraphType: {\n title: 'Open Graph Type',\n description: 'Select the type of content for Open Graph.',\n },\n openGraphImageType: {\n title: 'Image Type',\n description: 'Choose whether to upload an image or provide an image URL for Open Graph.',\n },\n openGraphImage: {\n title: 'Open Graph Image',\n description:\n 'Recommended size: 1200x630px (minimum 600x315px). Max file size: 5MB. Aspect ratio 1.91:1.',\n },\n openGraphImageUrl: {\n title: 'Open Graph Image URL',\n description:\n 'Enter the full URL of the image. Ensure the image is accessible and meets the recommended size of 1200x630px (minimum 600x315px).',\n },\n twitterCard: {\n title: 'X Card Type',\n description: '',\n },\n twitterSite: {\n title: 'Site X Handle',\n description: 'The X (formerly Twitter) handle of the website (e.g., @example)',\n },\n twitterCreator: {\n title: 'X Creator Handle',\n description: 'The X (formerly Twitter) handle of the content creator (e.g., @creator)',\n },\n twitterTitle: {\n title: 'X Title',\n description: 'The title of the content as it should appear on X (formerly Twitter).',\n },\n twitterDescription: {\n title: 'X Description',\n description: 'A brief description of the content for X (formerly Twitter).',\n },\n twitterImageType: {\n title: 'X Image Type',\n description:\n 'Choose whether to upload an image or provide an image URL for X (formerly Twitter).',\n },\n twitterImage: {\n title: 'X Image',\n description:\n 'An image URL which should be at least 120x120px for \"summary\" card and 280x150px for \"summary_large_image\" card.',\n },\n twitterImageUrl: {\n title: 'X Image URL',\n description:\n 'Enter the full URL of the image for X (formerly Twitter). Ensure the image is accessible and meets the recommended size.',\n },\n}\n\nexport const getFieldInfo = (\n fieldName: string,\n fieldOverrides: SeoFieldsPluginConfig['fieldOverrides'],\n): {title: string; description: string} => {\n const fieldInfo =\n (fieldOverrides && fieldOverrides[fieldName as keyof typeof fieldOverrides]) ||\n DEFAULT_FIELD_INFO[fieldName as keyof typeof DEFAULT_FIELD_INFO]\n return fieldInfo\n ? {title: fieldInfo.title || '', description: fieldInfo.description || ''}\n : {title: '', description: ''}\n}\n\n/**\n * Check if a field should be hidden based on the current document type\n */\nexport const isFieldHidden = (\n fieldName: ValidHiddenFieldKeys,\n config: SeoFieldsPluginConfig,\n documentType?: string,\n): boolean => {\n // Check if field is in default hidden fields\n if (config.defaultHiddenFields?.includes(fieldName)) {\n return true\n }\n\n // Check if field is hidden for specific post type\n if (documentType && config.fieldVisibility?.[documentType]?.hiddenFields?.includes(fieldName)) {\n return true\n }\n\n return false\n}\n\n/**\n * Get the hidden function for any field\n */\nexport const getFieldHiddenFunction = (\n fieldName: ValidHiddenFieldKeys,\n config: SeoFieldsPluginConfig,\n) => {\n return ({\n document,\n }: {\n document?: {\n _type?: string\n }\n }): boolean => {\n const documentType = document?._type\n return isFieldHidden(fieldName, config, documentType)\n }\n}\n","export const isEmpty = (value: unknown): boolean => {\n return (\n value === null ||\n value === undefined ||\n (typeof value === 'string' && value.trim() === '') ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length === 0)\n )\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgDescriptionValidation} from '../../utils/seoUtils'\n\nconst OgDescription = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n // Access parent object to get keywords\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getOgDescriptionValidation(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n {/* Validation */}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default OgDescription\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {ObjectInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgImageValidation} from '../../utils/seoUtils'\n\nconst OgImage = (props: ObjectInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n const imgValue = value as Record<string, unknown> | undefined\n const hasImage = !!imgValue?.asset\n const altText = imgValue?.alt as string | undefined\n\n const feedbackItems = useMemo(\n () => getOgImageValidation(hasImage, altText, seoParent),\n [hasImage, altText, seoParent],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default OgImage\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgImageUrlValidation} from '../../utils/seoUtils'\n\nconst OgImageUrl = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n\n const feedbackItems = useMemo(() => getOgImageUrlValidation(value, seoParent), [value, seoParent])\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default OgImageUrl\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactNode, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgTitleValidation} from '../../utils/seoUtils'\n\nconst OgTitle = (props: StringInputProps): ReactNode => {\n const {value, renderDefault, path} = props\n\n // Access parent object to get keywords\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getOgTitleValidation(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default OgTitle\n","import {defineField, defineType, SchemaTypeDefinition} from 'sanity'\n\nimport OgDescription from '../../../components/openGraph/OgDescription'\nimport OgImage from '../../../components/openGraph/OgImage'\nimport OgImageUrl from '../../../components/openGraph/OgImageUrl'\nimport OgTitle from '../../../components/openGraph/OgTitle'\nimport {SeoFieldsPluginConfig} from '../../../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../../../utils/fieldsUtils'\n\nexport default function openGraph(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n return defineType({\n name: 'openGraph',\n title: 'Open Graph Settings',\n type: 'object',\n fields: [\n defineField({\n name: 'url',\n type: 'url',\n ...getFieldInfo('openGraphUrl', config.fieldOverrides),\n hidden: getFieldHiddenFunction('openGraphUrl', config),\n description:\n 'The canonical URL of the page. This should be the full URL including protocol (https://).',\n }),\n defineField({\n name: 'title',\n ...getFieldInfo('openGraphTitle', config.fieldOverrides),\n type: 'string',\n hidden: getFieldHiddenFunction('openGraphTitle', config),\n components: {\n input: OgTitle, // Can also wrap with a string input + preview\n },\n }),\n defineField({\n name: 'description',\n ...getFieldInfo('openGraphDescription', config.fieldOverrides),\n type: 'text',\n rows: 3,\n hidden: getFieldHiddenFunction('openGraphDescription', config),\n components: {\n input: OgDescription, // Can also wrap with a text area + preview\n },\n }),\n defineField({\n name: 'siteName',\n ...getFieldInfo('openGraphSiteName', config.fieldOverrides),\n type: 'string',\n hidden: getFieldHiddenFunction('openGraphSiteName', config),\n }),\n defineField({\n name: 'type',\n ...getFieldInfo('openGraphType', config.fieldOverrides),\n type: 'string',\n options: {\n list: [\n {title: 'Website', value: 'website'},\n {title: 'Article', value: 'article'},\n {title: 'Profile', value: 'profile'},\n {title: 'Book', value: 'book'},\n {title: 'Music', value: 'music'},\n {title: 'Video', value: 'video'},\n {title: 'Product', value: 'product'},\n ],\n // layout: 'radio', // Display as radio buttons\n },\n hidden: getFieldHiddenFunction('openGraphType', config),\n initialValue: 'website',\n }),\n defineField({\n name: 'imageType',\n ...getFieldInfo('openGraphImageType', config.fieldOverrides),\n type: 'string',\n options: {\n list: [\n {title: 'Upload Image', value: 'upload'},\n {title: 'Image URL', value: 'url'},\n ],\n },\n hidden: getFieldHiddenFunction('openGraphImage', config),\n initialValue: 'upload',\n }),\n defineField({\n name: 'image',\n ...getFieldInfo('openGraphImage', config.fieldOverrides),\n type: 'image',\n options: {\n hotspot: true,\n },\n components: {\n input: OgImage,\n },\n fields: [\n defineField({\n name: 'alt',\n title: 'Image Alt Text',\n type: 'string',\n description: 'A description of the image for accessibility purposes.',\n }),\n ],\n hidden: (context) => {\n const {parent} = context\n if (parent?.imageType !== 'upload') return true\n const hiddenFn = getFieldHiddenFunction('openGraphImage', config)\n return typeof hiddenFn === 'function' ? hiddenFn(context) : hiddenFn\n },\n }),\n defineField({\n name: 'imageUrl',\n ...getFieldInfo('openGraphImageUrl', config.fieldOverrides),\n type: 'url',\n components: {\n input: OgImageUrl,\n },\n hidden: (context) => {\n const {parent} = context\n if (parent?.imageType !== 'url') return true\n const hiddenFn = getFieldHiddenFunction('openGraphImage', config)\n return typeof hiddenFn === 'function' ? hiddenFn(context) : hiddenFn\n },\n }),\n ],\n })\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterDescriptionValidation} from '../../utils/seoUtils'\n\nconst TwitterDescription = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n // Access parent object to get keywords\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getTwitterDescriptionValidation(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default TwitterDescription\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {ObjectInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterImageValidation} from '../../utils/seoUtils'\n\nconst TwitterImage = (props: ObjectInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n const imgValue = value as Record<string, unknown> | undefined\n const hasImage = !!imgValue?.asset\n const altText = imgValue?.alt as string | undefined\n\n const feedbackItems = useMemo(\n () => getTwitterImageValidation(hasImage, altText, seoParent),\n [hasImage, altText, seoParent],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default TwitterImage\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterImageUrlValidation} from '../../utils/seoUtils'\n\nconst TwitterImageUrl = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n\n const feedbackItems = useMemo(\n () => getTwitterImageUrlValidation(value, seoParent),\n [value, seoParent],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default TwitterImageUrl\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterTitleValidation} from '../../utils/seoUtils'\n\nconst TwitterTitle = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n // Access parent object to get keywords\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getTwitterTitleValidation(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default TwitterTitle\n","import {defineField, defineType, SchemaTypeDefinition} from 'sanity'\n\nimport TwitterDescription from '../../../components/twitter/twitterDescription'\nimport TwitterImage from '../../../components/twitter/TwitterImage'\nimport TwitterImageUrl from '../../../components/twitter/TwitterImageUrl'\nimport TwitterTitle from '../../../components/twitter/twitterTitle'\nimport {SeoFieldsPluginConfig} from '../../../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../../../utils/fieldsUtils'\n\nexport default function twitter(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n return defineType({\n name: 'twitter',\n title: 'X (Formerly Twitter)',\n type: 'object',\n fields: [\n defineField({\n name: 'card',\n ...getFieldInfo('twitterCard', config.fieldOverrides),\n type: 'string',\n options: {\n list: [\n {title: 'Summary', value: 'summary'},\n {title: 'Summary with Large Image', value: 'summary_large_image'},\n {title: 'App', value: 'app'},\n {title: 'Player', value: 'player'},\n ],\n },\n hidden: getFieldHiddenFunction('twitterCard', config),\n initialValue: 'summary_large_image', // good default\n }),\n defineField({\n name: 'site',\n ...getFieldInfo('twitterSite', config.fieldOverrides),\n type: 'string',\n hidden: getFieldHiddenFunction('twitterSite', config),\n }),\n defineField({\n name: 'creator',\n type: 'string',\n ...getFieldInfo('twitterCreator', config.fieldOverrides),\n hidden: getFieldHiddenFunction('twitterCreator', config),\n }),\n defineField({\n name: 'title',\n type: 'string',\n ...getFieldInfo('twitterTitle', config.fieldOverrides),\n hidden: getFieldHiddenFunction('twitterTitle', config),\n components: {\n input: TwitterTitle,\n },\n }),\n defineField({\n name: 'description',\n type: 'text',\n rows: 3,\n ...getFieldInfo('twitterDescription', config.fieldOverrides),\n hidden: getFieldHiddenFunction('twitterDescription', config),\n components: {\n input: TwitterDescription,\n },\n }),\n defineField({\n name: 'imageType',\n ...getFieldInfo('twitterImageType', config.fieldOverrides),\n type: 'string',\n options: {\n list: [\n {title: 'Upload Image', value: 'upload'},\n {title: 'Image URL', value: 'url'},\n ],\n },\n hidden: getFieldHiddenFunction('twitterImage', config),\n initialValue: 'upload',\n }),\n defineField({\n name: 'image',\n ...getFieldInfo('twitterImage', config.fieldOverrides),\n type: 'image',\n options: {\n hotspot: true,\n },\n components: {\n input: TwitterImage,\n },\n fields: [\n defineField({\n name: 'alt',\n title: 'Image Alt Text',\n type: 'string',\n description: 'A description of the image for accessibility purposes.',\n }),\n ],\n hidden: (context) => {\n const {parent} = context\n if (parent?.imageType !== 'upload') return true\n const hiddenFn = getFieldHiddenFunction('twitterImage', config)\n return typeof hiddenFn === 'function' ? hiddenFn(context) : hiddenFn\n },\n }),\n defineField({\n name: 'imageUrl',\n ...getFieldInfo('twitterImageUrl', config.fieldOverrides),\n type: 'url',\n components: {\n input: TwitterImageUrl,\n },\n hidden: (context) => {\n const {parent} = context\n if (parent?.imageType !== 'url') return true\n const hiddenFn = getFieldHiddenFunction('twitterImage', config)\n return typeof hiddenFn === 'function' ? hiddenFn(context) : hiddenFn\n },\n }),\n ],\n })\n}\n","import {createElement, lazy, Suspense} from 'react'\nimport {\n defineField,\n defineType,\n FieldDefinition,\n FieldGroupDefinition,\n SchemaTypeDefinition,\n StringInputProps,\n} from 'sanity'\n\nimport MetaDescription from '../components/meta/MetaDescription'\nimport MetaImage from '../components/meta/MetaImage'\nimport MetaTitle from '../components/meta/MetaTitle'\nimport type {SeoFieldGroup, SeoFieldsPluginConfig, SeoObjectFieldName} from '../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../utils/fieldsUtils'\nimport {isEmpty} from '../utils/utils'\nimport openGraph from './types/openGraph'\nimport twitter from './types/twitter'\n\n// Lazy-load SeoPreview to avoid styled-components breaking `sanity schema extract`\nconst LazySeoPreview = lazy(() => import('../components/SeoPreview'))\nconst SeoPreviewWrapper = (props: StringInputProps) =>\n createElement(Suspense, {fallback: null}, createElement(LazySeoPreview, props))\n\n/**\n * Build a field-name → group-name(s) lookup from the plugin config.\n * A field can appear in multiple groups (Sanity supports `group: string[]`).\n */\nfunction buildFieldGroupMap(groups: SeoFieldGroup[]): Map<SeoObjectFieldName, string[]> {\n const map = new Map<SeoObjectFieldName, string[]>()\n for (const g of groups) {\n for (const fieldName of g.fields) {\n const existing = map.get(fieldName)\n if (existing) {\n existing.push(g.name)\n } else {\n map.set(fieldName, [g.name])\n }\n }\n }\n return map\n}\n\n/**\n * Convert plugin `SeoFieldGroup[]` into Sanity `FieldGroupDefinition[]`.\n */\nfunction toSanityGroups(groups: SeoFieldGroup[]): FieldGroupDefinition[] {\n return groups.map((g) => {\n const def: FieldGroupDefinition = {\n name: g.name,\n title: g.title,\n default: g.default,\n }\n if (g.icon && typeof g.icon !== 'string') {\n def.icon = g.icon\n }\n return def\n })\n}\n\n/**\n * Attach the `group` property to a field definition when groups are configured.\n */\nfunction withGroup(\n field: FieldDefinition,\n fieldGroupMap: Map<SeoObjectFieldName, string[]> | undefined,\n): FieldDefinition {\n if (!fieldGroupMap) return field\n const groups = fieldGroupMap.get(field.name as SeoObjectFieldName)\n if (!groups || groups.length === 0) return field\n return {...field, group: groups.length === 1 ? groups[0] : groups} as FieldDefinition\n}\n\nexport default function seoFieldsSchema(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n const groupsCfg = config.fieldGroups\n const fieldGroupMap = groupsCfg?.length ? buildFieldGroupMap(groupsCfg) : undefined\n const sanityGroups = groupsCfg?.length ? toSanityGroups(groupsCfg) : undefined\n\n return defineType({\n name: 'seoFields',\n title: 'SEO Fields',\n type: 'object',\n ...(sanityGroups ? {groups: sanityGroups} : {}),\n fields: [\n withGroup(\n defineField({\n name: 'robots',\n title: 'Robots Settings',\n type: 'robots',\n hidden: getFieldHiddenFunction('robots', config),\n }),\n fieldGroupMap,\n ),\n // 👇 conditionally spread preview field\n ...((typeof config.seoPreview === 'boolean' && config.seoPreview) ||\n (typeof config.seoPreview === 'object' && !isEmpty(config.seoPreview))\n ? [\n withGroup(\n defineField({\n name: 'preview',\n title: 'SEO Preview',\n type: 'string',\n components: {input: SeoPreviewWrapper},\n options: {\n baseUrl: config.baseUrl || 'https://www.example.com',\n ...(config.apiVersion ? {apiVersion: config.apiVersion} : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.prefix\n ? {prefix: config.seoPreview.prefix}\n : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.titleSuffix\n ? {titleSuffix: config.seoPreview.titleSuffix}\n : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.titleSuffixInheritColor\n ? {titleSuffixInheritColor: config.seoPreview.titleSuffixInheritColor}\n : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.titleSuffixQuery\n ? {titleSuffixQuery: config.seoPreview.titleSuffixQuery}\n : {}),\n } as Record<string, unknown>,\n initialValue: '' as string,\n readOnly: true,\n }),\n fieldGroupMap,\n ),\n ]\n : []),\n\n withGroup(\n defineField({\n name: 'title',\n ...getFieldInfo('title', config.fieldOverrides),\n type: 'string',\n components: {\n input: MetaTitle,\n },\n hidden: getFieldHiddenFunction('title', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'description',\n ...getFieldInfo('description', config.fieldOverrides),\n type: 'text',\n rows: 3,\n components: {\n input: MetaDescription,\n },\n hidden: getFieldHiddenFunction('description', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'metaImage',\n ...getFieldInfo('metaImage', config.fieldOverrides),\n type: 'image',\n options: {\n hotspot: true,\n },\n components: {\n input: MetaImage,\n },\n hidden: getFieldHiddenFunction('metaImage', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'metaAttributes',\n ...getFieldInfo('metaAttributes', config.fieldOverrides),\n type: 'array',\n of: [{type: 'metaAttribute'}],\n hidden: getFieldHiddenFunction('metaAttributes', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'keywords',\n ...getFieldInfo('keywords', config.fieldOverrides),\n title: 'Keywords',\n type: 'array',\n of: [{type: 'string'}],\n description:\n 'Add relevant keywords for this page. These keywords will be used for SEO purposes.',\n hidden: getFieldHiddenFunction('keywords', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'canonicalUrl',\n ...getFieldInfo('canonicalUrl', config.fieldOverrides),\n title: 'Canonical URL',\n type: 'url',\n description:\n 'Specify the canonical URL for this page. This helps prevent duplicate content issues by indicating the preferred version of a page.',\n hidden: getFieldHiddenFunction('canonicalUrl', config),\n }),\n fieldGroupMap,\n ),\n withGroup(openGraph(config) as unknown as FieldDefinition, fieldGroupMap),\n withGroup(twitter(config) as unknown as FieldDefinition, fieldGroupMap),\n ],\n })\n}\n","import {defineField, defineType, SchemaTypeDefinition} from 'sanity'\n\nimport MetaDescription from '../../../components/meta/MetaDescription'\nimport MetaImage from '../../../components/meta/MetaImage'\nimport MetaTitle from '../../../components/meta/MetaTitle'\nimport {SeoFieldsPluginConfig} from '../../../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../../../utils/fieldsUtils'\n\nexport default function baseMeta(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n return defineType({\n name: 'baseMeta',\n title: 'Basic Meta Settings',\n type: 'object',\n fields: [\n defineField({\n name: 'title',\n ...getFieldInfo('title', config.fieldOverrides),\n type: 'string',\n components: {\n input: MetaTitle,\n },\n hidden: getFieldHiddenFunction('title', config),\n }),\n defineField({\n name: 'description',\n ...getFieldInfo('description', config.fieldOverrides),\n type: 'text',\n rows: 3,\n components: {\n input: MetaDescription,\n },\n hidden: getFieldHiddenFunction('description', config),\n }),\n defineField({\n name: 'metaImage',\n ...getFieldInfo('metaImage', config.fieldOverrides),\n type: 'image',\n options: {\n hotspot: true,\n },\n components: {\n input: MetaImage,\n },\n hidden: getFieldHiddenFunction('metaImage', config),\n }),\n defineField({\n name: 'keywords',\n ...getFieldInfo('keywords', config.fieldOverrides),\n title: 'Keywords',\n type: 'array',\n of: [{type: 'string'}],\n description:\n 'Add relevant keywords for this page. These keywords will be used for SEO purposes.',\n hidden: getFieldHiddenFunction('keywords', config),\n }),\n defineField({\n name: 'canonicalUrl',\n ...getFieldInfo('canonicalUrl', config.fieldOverrides),\n title: 'Canonical URL',\n type: 'url',\n description:\n 'Specify the canonical URL for this page. This helps prevent duplicate content issues by indicating the preferred version of a page.',\n hidden: getFieldHiddenFunction('canonicalUrl', config),\n }),\n defineField({\n name: 'metaAttributes',\n ...getFieldInfo('metaAttributes', config.fieldOverrides),\n type: 'array',\n of: [{type: 'metaAttribute'}],\n hidden: getFieldHiddenFunction('metaAttributes', config),\n }),\n ],\n })\n}\n","import {defineField, defineType} from 'sanity'\n\nexport default defineType({\n name: 'metaAttribute',\n title: 'Meta Attribute',\n type: 'object',\n fields: [\n defineField({\n name: 'key',\n title: 'Attribute Name',\n type: 'string',\n }),\n defineField({\n name: 'type',\n title: 'Attribute Value Type',\n type: 'string',\n options: {\n list: [\n {title: 'String', value: 'string'},\n {title: 'Image', value: 'image'},\n ],\n },\n initialValue: 'string',\n }),\n defineField({\n name: 'value',\n title: 'Attribute Value',\n type: 'string',\n hidden: ({parent}) => parent?.type === 'image',\n }),\n defineField({\n name: 'image',\n title: 'Attribute Image Value',\n type: 'image',\n hidden: ({parent}) => parent?.type === 'string',\n }),\n ],\n preview: {\n select: {\n attributeName: 'key',\n attributeValueString: 'value',\n attributeValueImage: 'image',\n },\n prepare({attributeName, attributeValueString, attributeValueImage}) {\n let subtitle = ''\n if (attributeValueString) {\n subtitle = `Value: ${attributeValueString}`\n } else if (attributeValueImage) {\n subtitle = 'Value: [Image]'\n } else {\n subtitle = 'No Attribute Value'\n }\n return {\n title: attributeName || 'No Attribute Name',\n subtitle: subtitle,\n media: attributeValueImage,\n }\n },\n },\n})\n","import {defineType} from 'sanity'\n\nexport default defineType({\n name: 'metaTag',\n title: 'Meta Tag',\n type: 'object',\n fields: [\n {\n name: 'metaAttributes',\n title: 'Meta Attributes',\n type: 'array',\n of: [{type: 'metaAttribute'}],\n description:\n 'Add custom meta attributes to the head of the document for additional SEO and social media integration.',\n },\n ],\n})\n","import {defineField, defineType} from 'sanity'\n\nexport default defineType({\n name: 'robots',\n title: 'Robots Settings',\n type: 'object',\n fields: [\n defineField({\n name: 'noIndex',\n title: 'No Index',\n type: 'boolean',\n initialValue: false,\n description:\n 'Enable this to prevent search engines from indexing this page. The page will not appear in search results.',\n }),\n defineField({\n name: 'noFollow',\n title: 'No Follow',\n type: 'boolean',\n initialValue: false,\n description:\n 'Enable this to prevent search engines from following links on this page. Links will not pass SEO value.',\n }),\n ],\n description: 'Select how search engines should index and follow links on this page.',\n})\n","import {SchemaTypeDefinition} from 'sanity'\n\nimport {SeoFieldsPluginConfig} from '../../plugin'\nimport seoFields from '..'\nimport baseMeta from './baseMeta'\nimport metaAttribute from './metaAttribute'\nimport metaTag from './metaTag'\nimport openGraph from './openGraph'\nimport robots from './robots'\nimport twitter from './twitter'\n\nexport default function types(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition[] {\n return [\n seoFields(config), // pass config here\n baseMeta(config), // pass config here\n openGraph(config), // pass config here\n twitter(config), // pass config here\n metaAttribute as SchemaTypeDefinition,\n metaTag,\n robots,\n ]\n}\n","// plugin.ts\nimport {type ComponentType, createElement, lazy, Suspense} from 'react'\nimport {definePlugin} from 'sanity'\n\nimport types from './schemas/types'\nimport type {DeprecationWarning, DocumentWithSeoHealth} from './types'\n\nexport interface SeoFieldConfig {\n title?: string\n description?: string\n}\n\nexport type SeoFieldKeys =\n | 'title'\n | 'description'\n | 'canonicalUrl'\n | 'metaImage'\n | 'keywords'\n | 'metaAttributes'\n | 'robots'\n\nexport type openGraphFieldKeys =\n | 'openGraphUrl'\n | 'openGraphTitle'\n | 'openGraphDescription'\n | 'openGraphSiteName'\n | 'openGraphType'\n | 'openGraphImageType'\n | 'openGraphImage'\n | 'openGraphImageUrl'\n\nexport type twitterFieldKeys =\n | 'twitterCard'\n | 'twitterSite'\n | 'twitterCreator'\n | 'twitterTitle'\n | 'twitterDescription'\n | 'twitterImageType'\n | 'twitterImage'\n | 'twitterImageUrl'\n\nexport type AllFieldKeys = SeoFieldKeys | openGraphFieldKeys | twitterFieldKeys\n\n/**\n * Names of top-level fields inside the `seoFields` object type.\n * Use these when assigning fields to groups in `fieldGroups`.\n */\nexport type SeoObjectFieldName =\n | 'robots'\n | 'preview'\n | 'title'\n | 'description'\n | 'metaImage'\n | 'metaAttributes'\n | 'keywords'\n | 'canonicalUrl'\n | 'openGraph'\n | 'twitter'\n\n/**\n * Defines a single tab/group within the `seoFields` object.\n */\nexport interface SeoFieldGroup {\n /** Unique key for this group (used internally by Sanity). */\n name: string\n /** Human-readable label shown as the tab title. */\n title: string\n /** Whether this tab is selected by default. Only one group should be `true`. */\n default?: boolean\n /**\n * Field names to include in this group.\n * Use the top-level seoFields field names: `'title'`, `'description'`, `'metaImage'`,\n * `'keywords'`, `'canonicalUrl'`, `'metaAttributes'`, `'robots'`, `'preview'`,\n * `'openGraph'`, `'twitter'`.\n */\n fields: SeoObjectFieldName[]\n /** Optional icon displayed next to the tab title. Must be a React component. */\n icon?: ComponentType\n}\n\nexport type ValidHiddenFieldKeys = Exclude<\n AllFieldKeys,\n 'openGraphImageUrl' | 'twitterImageUrl' | 'openGraphImageType' | 'twitterImageType'\n>\n\nexport interface FieldVisibilityConfig {\n hiddenFields?: ValidHiddenFieldKeys[]\n}\n\nexport interface SeoFieldsPluginConfig {\n /**\n * Enable or configure the SEO preview feature.\n * If set to `true`, the SEO preview will be enabled with default settings.\n * If set to an object, you can provide a custom `prefix` function to modify the URL prefix\n * and/or a `titleSuffix` to append text (e.g. a brand name) after the meta title in the preview.\n * The plugin automatically adds a `|` separator — only provide the suffix text itself.\n *\n * Example:\n * ```\n * seoPreview: {\n * prefix: (doc) => `/${doc.slug?.current || 'untitled'}`,\n * titleSuffix: 'Acme Corp',\n * // or dynamically:\n * titleSuffix: (doc) => doc.brandName || 'Acme Corp',\n * }\n * ```\n */\n seoPreview?:\n | boolean\n | {\n prefix?: (doc: {_type?: string} & Record<string, unknown>) => string\n /**\n * A static string or function appended to the meta title in the Live Preview.\n * Useful for showing a brand suffix (e.g. `'Acme Corp'`) that is added\n * via your Next.js title template but not stored in the Sanity field.\n * The plugin automatically prepends a `|` separator so only provide the\n * text itself. The suffix is rendered in a muted style so editors can\n * distinguish it from the typed title. The combined length (including the\n * separator) is checked against the 60-character SERP limit.\n */\n titleSuffix?: string | ((doc: {_type?: string} & Record<string, unknown>) => string)\n /**\n * When `true`, the `titleSuffix` is rendered in the same color and weight\n * as the main title (`#1a0dab`, `fontWeight: 500`) instead of the default\n * muted style (`#70757a`, `fontWeight: 400`).\n *\n * @default false\n */\n titleSuffixInheritColor?: boolean\n /**\n * A GROQ query string whose result is used as the title suffix in the Live Preview.\n * The query runs against your dataset at Studio load time, making it useful for\n * fetching a dynamic value from another document (e.g. a settings singleton).\n * Takes priority over `titleSuffix` when both are provided.\n *\n * @example\n * ```ts\n * titleSuffixQuery: '*[_type == \"siteSettings\"][0].siteName'\n * ```\n */\n titleSuffixQuery?: string\n }\n\n /**\n * A mapping of field keys to their configuration settings.\n * This allows customization of field titles and descriptions.\n * For example, to change the title of the 'title' field:\n */\n fieldOverrides?: Partial<Record<AllFieldKeys, SeoFieldConfig>>\n /**\n * A mapping of document types to field visibility configurations.\n * This allows you to specify which fields should be hidden for specific document types.\n */\n fieldVisibility?: Record<string, FieldVisibilityConfig>\n\n /**\n * A list of fields that should be hidden by default in all document types.\n * This can be overridden by specific document type settings in `fieldVisibility`.\n */\n defaultHiddenFields?: ValidHiddenFieldKeys[]\n\n /**\n * Group the SEO fields into tabbed sections inside the `seoFields` object.\n * When configured, the Studio shows tabs (Sanity groups) so editors can\n * switch between e.g. \"Meta\", \"Open Graph\", and \"Twitter Card\" panels.\n *\n * @example\n * fieldGroups: [\n * { name: 'meta', title: 'Meta', default: true,\n * fields: ['title', 'description', 'metaImage', 'keywords', 'canonicalUrl', 'metaAttributes', 'robots', 'preview'] },\n * { name: 'openGraph', title: 'Open Graph', fields: ['openGraph'] },\n * { name: 'twitter', title: 'Twitter Card', fields: ['twitter'] },\n * ]\n */\n fieldGroups?: SeoFieldGroup[]\n /**\n * The base URL of your website, used for generating full URLs in the SEO preview.\n * Defaults to 'https://www.example.com' if not provided.\n */\n baseUrl?: string\n /**\n * The Sanity API version to use for all plugin clients (SEO Preview, Health Dashboard).\n * Defaults to '2024-01-01'.\n * @example '2024-01-01'\n */\n apiVersion?: string\n /**\n * Enable or configure the SEO Health Dashboard tool.\n * If set to `true`, the dashboard is enabled with all defaults.\n * If set to an object, you can customise the tool and dashboard settings.\n * Defaults to `true`.\n * Example:\n * ```\n * healthDashboard: {\n * toolTitle: 'SEO Overview', // Studio nav tab label\n * content: {\n * icon: '🔍', // Emoji icon shown before the page heading\n * title: 'My SEO Dashboard',// Page heading inside the tool (no emoji)\n * description: 'Track SEO across all documents', // Subtitle under the heading\n * },\n * display: {\n * typeColumn: false, // Hide the document type column (default: true)\n * documentId: false, // Hide the document ID under titles (default: true)\n * },\n * query: {\n * // Option 1 – filter by specific document types\n * types: ['post', 'page'],\n * // Option 2 – provide a full custom GROQ query (takes precedence over `types`)\n * // Must return documents with at least: _id, _type, title, seo, _updatedAt\n * groq: `*[seo != null && defined(slug.current)]{ _id, _type, title, slug, seo, _updatedAt }`,\n * },\n * }\n * ```\n */\n healthDashboard?:\n | boolean\n | {\n tool?: {\n title?: string\n name?: string\n }\n toolTitle?: string\n content?: {\n icon?: string\n title?: string\n description?: string\n /** Text shown while the license key is being verified. Defaults to \"Verifying license…\" */\n loadingLicense?: string\n /** Text shown while documents are being fetched. Defaults to \"Loading documents…\" */\n loadingDocuments?: string\n /** Text shown when the query returns zero results. Defaults to \"No documents found\" */\n noDocuments?: string\n }\n /**\n * Show or hide the document type column in the results table.\n * Defaults to `true`.\n */\n showTypeColumn?: boolean\n /**\n * Show or hide the Sanity document `_id` under each title.\n * Defaults to `true`.\n */\n showDocumentId?: boolean\n query?: {\n /**\n * Limit the dashboard to specific document types.\n * Example: `['post', 'page']`\n */\n types?: string[]\n /**\n * When using `types`, also require the `seo` field to be non-null.\n * Set to `false` to include documents of those types even if `seo` is missing.\n * Defaults to `true`.\n */\n requireSeo?: boolean\n /**\n * Provide a fully custom GROQ query. Takes precedence over `types`.\n * The query must return documents with at least: _id, _type, title, seo, _updatedAt\n */\n groq?: string\n }\n /**\n * The Sanity API version to use for the client (e.g. '2023-01-01').\n * Defaults to '2023-01-01'.\n * @deprecated Use the root-level `apiVersion` option instead.\n * @example\n * // Before (deprecated):\n * healthDashboard: { apiVersion: '2024-01-01' }\n * // After:\n * apiVersion: '2024-01-01'\n */\n apiVersion?: string\n /**\n * License key for the SEO Health Dashboard pro feature.\n * Obtain a license at https://sanity-plugin-seofields.thehardik.in\n */\n licenseKey?: string\n /**\n * Map raw `_type` values to human-readable display labels.\n * Used in both the Type column and the Type filter dropdown.\n * Any type without an entry falls back to the raw `_type` string.\n *\n * @example\n * typeDisplayLabels: { productDrug: 'Products', singleCondition: 'Condition' }\n */\n typeDisplayLabels?: Record<string, string>\n /**\n * Controls how the document type is rendered in the Type column.\n * - `'badge'` (default) — coloured pill\n * - `'text'` — plain text, useful for dense layouts\n */\n typeColumnMode?: 'badge' | 'text'\n /**\n * The document field to use as the display title in the dashboard.\n *\n * - `string` — use this field for every document type (e.g. `'name'`)\n * - `Record<string, string>` — per-type mapping; unmapped types fall back to `title`\n *\n * @example\n * titleField: 'name'\n *\n * @example\n * titleField: { post: 'title', product: 'name', category: 'label' }\n */\n titleField?: string | Record<string, string>\n /**\n * Callback function to render a custom badge next to the document title.\n * Receives the full document and should return badge data or undefined.\n *\n * @example\n * getDocumentBadge: (doc) => {\n * if (doc.services === 'NHS')\n * return { label: 'NHS', bgColor: '#e0f2fe', textColor: '#0369a1' }\n * if (doc.services === 'Private')\n * return { label: 'Private', bgColor: '#fef3c7', textColor: '#92400e' }\n * }\n */\n getDocumentBadge?: (\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined\n /**\n * The `name` of the Sanity structure tool that contains the monitored documents.\n * Required when you have multiple structure tools and the documents live in a\n * non-default one. Clicking a title will navigate to\n * `/{basePath}/{structureTool}/intent/edit/…` directly.\n *\n * @example\n * structureTool: 'common'\n */\n structureTool?: string\n /**\n * Enable preview/demo mode to show dummy data.\n * Useful for testing, documentation, or showcasing the dashboard.\n * When enabled, displays realistic sample documents with various SEO scores.\n * Defaults to `false`.\n *\n * @example\n * previewMode: true\n */\n previewMode?: boolean\n /**\n * Export options for the SEO Health Dashboard.\n * Set to `true` (default) to enable both CSV and JSON export,\n * or configure per-format.\n */\n export?: boolean | {enabled?: boolean; formats?: Array<'csv' | 'json'>}\n /**\n * Show compact inline stat pills in the header row instead of the\n * full 6-card stats grid. Useful for saving vertical space.\n * Defaults to `false`.\n */\n compactStats?: boolean\n }\n}\n\ninterface ResolvedDashboardConfig {\n enabled: boolean\n toolTitle: string\n toolName: string\n icon: string | undefined\n title: string | undefined\n description: string | undefined\n showTypeColumn: boolean | undefined\n showDocumentId: boolean | undefined\n queryTypes: string[] | undefined\n queryRequireSeo: boolean | undefined\n queryGroq: string | undefined\n apiVersion: string | undefined\n licenseKey: string | undefined\n typeDisplayLabels: Record<string, string> | undefined\n typeColumnMode: 'badge' | 'text' | undefined\n titleField: string | Record<string, string> | undefined\n getDocumentBadge:\n | ((\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined)\n | undefined\n loadingLicense: string | undefined\n loadingDocuments: string | undefined\n noDocuments: string | undefined\n previewMode: boolean | undefined\n structureTool: string | undefined\n exportEnabled: boolean\n exportFormats: Array<'csv' | 'json'>\n compactStats: boolean\n /** @internal — forwarded to the UI banner when deprecated config keys are detected */\n deprecationWarnings: DeprecationWarning[]\n}\n\n// const V132 = 'v1.3.2'\n// const CHANGELOG_V132 = `https://github.com/hardik-143/sanity-plugin-seofields/blob/main/CHANGELOG.md#132--2026-03-23`\n\nconst resolveDashboardConfig = (\n healthDashboard: SeoFieldsPluginConfig['healthDashboard'],\n rootApiVersion?: string,\n): ResolvedDashboardConfig => {\n const cfg = typeof healthDashboard === 'object' ? healthDashboard : undefined\n\n const deprecationWarnings: DeprecationWarning[] = []\n if (cfg?.apiVersion !== undefined) {\n deprecationWarnings.push({\n key: 'healthDashboard.apiVersion → apiVersion',\n version: 'v1.6.1',\n changelogUrl: 'https://github.com/hardik-143/sanity-plugin-seofields/blob/main/CHANGELOG.md',\n })\n console.warn(\n '[sanity-plugin-seofields] \"healthDashboard.apiVersion\" is deprecated. Move it to the root \"apiVersion\" option instead.',\n )\n }\n\n return {\n enabled: healthDashboard !== false,\n toolTitle: cfg?.tool?.title ?? 'SEO Health',\n toolName: cfg?.tool?.name ?? 'seo-health-dashboard',\n icon: cfg?.content?.icon,\n title: cfg?.content?.title,\n description: cfg?.content?.description,\n showTypeColumn: cfg?.showTypeColumn,\n showDocumentId: cfg?.showDocumentId,\n queryTypes: cfg?.query?.types,\n queryRequireSeo: cfg?.query?.requireSeo,\n queryGroq: cfg?.query?.groq,\n apiVersion: cfg?.apiVersion ?? rootApiVersion,\n licenseKey: cfg?.licenseKey,\n typeDisplayLabels: cfg?.typeDisplayLabels,\n typeColumnMode: cfg?.typeColumnMode,\n titleField: cfg?.titleField,\n getDocumentBadge: cfg?.getDocumentBadge,\n loadingLicense: cfg?.content?.loadingLicense,\n loadingDocuments: cfg?.content?.loadingDocuments,\n noDocuments: cfg?.content?.noDocuments,\n previewMode: cfg?.previewMode,\n structureTool: cfg?.structureTool,\n exportEnabled: (() => {\n const exportCfg = cfg?.export\n if (exportCfg === false) return false\n if (typeof exportCfg === 'object') return exportCfg.enabled ?? true\n return true\n })(),\n exportFormats: (() => {\n const exportCfg = cfg?.export\n if (typeof exportCfg === 'object' && exportCfg.formats) return exportCfg.formats\n return ['csv', 'json'] as Array<'csv' | 'json'>\n })(),\n compactStats: cfg?.compactStats ?? false,\n deprecationWarnings,\n }\n}\n\nconst seofields = definePlugin<SeoFieldsPluginConfig | void>((config = {}) => {\n const {healthDashboard = true} = config as SeoFieldsPluginConfig\n const dash = resolveDashboardConfig(healthDashboard, (config as SeoFieldsPluginConfig).apiVersion)\n\n const LazySeoHealthTool = lazy(() => import('./components/SeoHealthTool'))\n\n const BoundSeoHealthTool = () =>\n createElement(\n Suspense,\n {fallback: null},\n createElement(LazySeoHealthTool, {\n icon: dash.icon,\n title: dash.title,\n description: dash.description,\n showTypeColumn: dash.showTypeColumn,\n showDocumentId: dash.showDocumentId,\n queryTypes: dash.queryTypes,\n queryRequireSeo: dash.queryRequireSeo,\n customQuery: dash.queryGroq,\n apiVersion: dash.apiVersion,\n licenseKey: dash.licenseKey,\n typeDisplayLabels: dash.typeDisplayLabels,\n typeColumnMode: dash.typeColumnMode,\n titleField: dash.titleField,\n getDocumentBadge: dash.getDocumentBadge,\n loadingLicense: dash.loadingLicense,\n loadingDocuments: dash.loadingDocuments,\n noDocuments: dash.noDocuments,\n previewMode: dash.previewMode,\n structureTool: dash.structureTool,\n exportEnabled: dash.exportEnabled,\n exportFormats: dash.exportFormats,\n compactStats: dash.compactStats,\n _deprecationWarnings: dash.deprecationWarnings,\n }),\n )\n\n return {\n name: 'sanity-plugin-seofields',\n schema: {\n types: types(config as SeoFieldsPluginConfig),\n },\n ...(dash.enabled && {\n tools: [\n {\n name: dash.toolName,\n title: dash.toolTitle,\n component: BoundSeoHealthTool,\n icon: () => '📊',\n },\n ],\n }),\n }\n})\n\nexport default seofields\n","import {lazy, Suspense} from 'react'\nimport type {ComponentBuilder, StructureBuilder} from 'sanity/structure'\n\nimport type {SeoHealthDashboardProps} from './SeoHealthDashboard'\n\nconst LazySeoHealthDashboard = lazy(() => import('./SeoHealthDashboard'))\n\n/**\n * Options accepted by `createSeoHealthPane`.\n * All props from `SeoHealthDashboardProps` are supported.\n *\n * `licenseKey` is **required** — the dashboard will not render without it.\n */\nexport interface SeoHealthPaneOptions extends Omit<SeoHealthDashboardProps, 'customQuery'> {\n /** Required license key (format: `SEOF-XXXX-XXXX-XXXX`). */\n licenseKey: string\n /**\n * A fully custom GROQ query used to fetch documents for the dashboard.\n * The query must return documents with at least: `_id`, `_type`, `title`, `seo`, `_updatedAt`.\n *\n * Takes precedence over `queryTypes` when both are provided.\n *\n * @example\n * query: `*[_type in [\"post\",\"page\"] && defined(seo)]{ _id, _type, title, slug, seo, _updatedAt }`\n */\n query?: string\n}\n\n// function isStructureBuilder(arg: unknown): arg is StructureBuilder {\n// return (\n// arg !== null &&\n// typeof arg === 'object' &&\n// typeof (arg as StructureBuilder).component === 'function' &&\n// typeof (arg as StructureBuilder).document === 'function'\n// )\n// }\n\n/**\n * Creates a desk-structure pane for the SEO Health Dashboard.\n *\n * Returns a **`ComponentBuilder`** with a built-in `.child()` resolver so that\n * clicking any document row opens the document editor as a split pane to the right.\n *\n * Use it **directly** as the `.child()` value — do **not** wrap it in `S.component()`.\n *\n * ```ts\n * // sanity.config.ts\n * structure: (S) =>\n * S.list().items([\n * S.listItem()\n * .title('SEO Health')\n * .child(\n * createSeoHealthPane(S, {\n * licenseKey: 'SEOF-XXXX-XXXX-XXXX',\n * query: `*[_type == \"post\" && defined(seo)]{ _id, _type, title, slug, seo, _updatedAt }`,\n * })\n * ),\n * ])\n * ```\n */\nexport function createSeoHealthPane(\n optionsOrS: StructureBuilder,\n optionsWhenS: SeoHealthPaneOptions,\n): ComponentBuilder {\n // ── Two-arg form: structure builder passed as first arg ──────────────────\n const S = optionsOrS\n const {query, openInPane = true, title: paneTitle, ...rest} = optionsWhenS ?? {}\n\n const SeoHealthPane = () => (\n <Suspense fallback={null}>\n <LazySeoHealthDashboard\n customQuery={query}\n openInPane={openInPane}\n title={paneTitle}\n {...rest}\n />\n </Suspense>\n )\n SeoHealthPane.displayName = 'SeoHealthPane'\n\n // Wire up the child resolver so ChildLink URLs resolve to the document editor\n return (S.component(SeoHealthPane) as ComponentBuilder)\n .title(paneTitle ?? 'SEO Health')\n .child((docId: string, {params}: {params: Record<string, string | undefined>}) => {\n const builder = S.document().documentId(docId)\n return params?.type ? builder.schemaType(params.type) : builder\n })\n}\n\nexport default createSeoHealthPane\n","// Import the plugin\nimport seofields from './plugin'\n\n// Default export the plugin\nexport default seofields\n\n// Re-export everything from plugin.ts\nexport * from './plugin'\n\n// Export schema types for external use\nexport {default as seoFieldsSchema} from './schemas'\nexport {default as allSchemas} from './schemas/types'\nexport {default as baseMetaSchema} from './schemas/types/baseMeta'\nexport {default as metaAttributeSchema} from './schemas/types/metaAttribute'\nexport {default as metaTagSchema} from './schemas/types/metaTag'\nexport {default as openGraphSchema} from './schemas/types/openGraph'\nexport {default as robotsSchema} from './schemas/types/robots'\nexport {default as twitterSchema} from './schemas/types/twitter'\n\n// Export dashboard factory (lazy — avoids styled-components at import time)\nexport type {SeoHealthPaneOptions} from './components/SeoHealthPane'\nexport {createSeoHealthPane} from './components/SeoHealthPane'\n\n// Export types\nexport type {DocumentWithSeoHealth, SeoHealthMetrics, SeoHealthStatus} from './types'\n"]}
1
+ {"version":3,"sources":["../src/components/meta/MetaDescription.tsx","../src/components/meta/MetaImage.tsx","../src/components/meta/MetaTitle.tsx","../src/utils/fieldsUtils.ts","../src/utils/utils.ts","../src/components/openGraph/OgDescription.tsx","../src/components/openGraph/OgImage.tsx","../src/components/openGraph/OgImageUrl.tsx","../src/components/openGraph/OgTitle.tsx","../src/schemas/types/openGraph/index.ts","../src/components/twitter/twitterDescription.tsx","../src/components/twitter/TwitterImage.tsx","../src/components/twitter/TwitterImageUrl.tsx","../src/components/twitter/twitterTitle.tsx","../src/schemas/types/twitter/index.ts","../src/schemas/index.ts","../src/schemas/types/baseMeta/index.ts","../src/schemas/types/metaAttribute/index.ts","../src/schemas/types/metaTag/index.ts","../src/schemas/types/robots/index.ts","../src/schemas/types/index.ts","../src/plugin.ts","../src/components/SeoHealthPane.tsx","../src/index.ts"],"names":["useFormValue","useMemo","getMetaDescriptionValidationMessages","jsxs","Stack","jsx","Text","getMetaImageValidation","useClient","useState","useEffect","getMetaTitleValidationMessages","getOgDescriptionValidation","getOgImageValidation","getOgImageUrlValidation","getOgTitleValidation","defineType","defineField","__spreadProps","__spreadValues","getTwitterDescriptionValidation","getTwitterImageValidation","getTwitterImageUrlValidation","getTwitterTitleValidation","lazy","createElement","Suspense","_a","definePlugin","__objRest"],"mappings":"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","file":"index.cjs","sourcesContent":["import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaDescriptionValidationMessages} from '../../utils/seoUtils'\n\nconst MetaDescription = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getMetaDescriptionValidationMessages(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{width: 10, height: 10, borderRadius: '50%', backgroundColor: item.color}}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default MetaDescription\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {ObjectInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaImageValidation} from '../../utils/seoUtils'\n\nconst MetaImage = (props: ObjectInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n const hasImage = !!(value as Record<string, unknown> | undefined)?.asset\n\n const feedbackItems = useMemo(\n () => getMetaImageValidation(hasImage, seoParent),\n [hasImage, seoParent],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default MetaImage\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useEffect, useMemo, useState} from 'react'\nimport {StringInputProps, useClient, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaTitleValidationMessages} from '../../utils/seoUtils'\n\nconst MetaTitle = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path, schemaType} = props\n const {options} = schemaType as {\n options?: {\n apiVersion?: string\n titleSuffix?: ((doc: {_type?: string} & Record<string, unknown>) => string) | string\n titleSuffixQuery?: string\n }\n }\n\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const rootDoc = (useFormValue([]) as ({_type?: string} & Record<string, unknown>) | null) ?? {}\n const client = useClient({apiVersion: options?.apiVersion ?? '2024-01-01'})\n const [groqTitleSuffix, setGroqTitleSuffix] = useState<string>('')\n\n const titleSuffixQuery = options?.titleSuffixQuery\n const titleSuffixOption = options?.titleSuffix\n\n useEffect(() => {\n if (!titleSuffixQuery) return\n client\n .fetch<string>(titleSuffixQuery)\n .then((result) => {\n setGroqTitleSuffix(result === null || result === undefined ? '' : String(result))\n })\n .catch(() => {\n setGroqTitleSuffix('')\n })\n }, [titleSuffixQuery, client])\n\n const resolvedSuffix = useMemo((): string => {\n if (titleSuffixQuery) return groqTitleSuffix\n if (!titleSuffixOption) return ''\n if (typeof titleSuffixOption === 'function') {\n return titleSuffixOption(rootDoc)\n }\n return titleSuffixOption\n }, [titleSuffixQuery, groqTitleSuffix, titleSuffixOption, rootDoc])\n\n // ` | ` separator = 3 chars\n const suffixLength = resolvedSuffix ? resolvedSuffix.length + 3 : 0\n\n const feedbackItems = useMemo(\n () => getMetaTitleValidationMessages(value || '', keywords, isParentseoField, suffixLength),\n [value, keywords, isParentseoField, suffixLength],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default MetaTitle\n","import {AllFieldKeys, SeoFieldsPluginConfig, ValidHiddenFieldKeys} from '../plugin'\n\nconst DEFAULT_FIELD_INFO: Record<AllFieldKeys, {title: string; description: string}> = {\n title: {\n title: 'Meta Title',\n description:\n 'The meta title is displayed in search engine results as the clickable headline for a given result. It should be concise and accurately reflect the content of the page.',\n },\n description: {\n title: 'Meta Description',\n description:\n 'Provide a concise summary of the page content. This description may be used by search engines in search results.',\n },\n metaImage: {\n title: 'Meta Image',\n description:\n 'Upload an image that represents the content of the page. This image may be used in social media previews and search engine results.',\n },\n keywords: {\n title: 'Keywords',\n description:\n 'Add relevant keywords for this page. These keywords will be used for SEO purposes.',\n },\n canonicalUrl: {\n title: 'Canonical URL',\n description:\n 'Specify the canonical URL for this page. This helps prevent duplicate content issues by indicating the preferred version of a page.',\n },\n robots: {\n title: 'Robots Settings',\n description: 'Configure how search engine crawlers should index and follow links on this page.',\n },\n metaAttributes: {\n title: 'Additional Meta Attributes',\n description:\n 'Add custom meta attributes to the head of the document for additional SEO and social media integration.',\n },\n openGraphTitle: {\n title: 'Open Graph Title',\n description: '',\n },\n openGraphUrl: {\n title: 'Open Graph URL',\n description:\n 'The canonical URL of the page. This should be the full URL including protocol (https://).',\n },\n openGraphDescription: {\n title: 'Open Graph Description',\n description: '',\n },\n openGraphSiteName: {\n title: 'Open Graph Site Name',\n description: 'The name of your website. This is often the site title.',\n },\n openGraphType: {\n title: 'Open Graph Type',\n description: 'Select the type of content for Open Graph.',\n },\n openGraphImageType: {\n title: 'Image Type',\n description: 'Choose whether to upload an image or provide an image URL for Open Graph.',\n },\n openGraphImage: {\n title: 'Open Graph Image',\n description:\n 'Recommended size: 1200x630px (minimum 600x315px). Max file size: 5MB. Aspect ratio 1.91:1.',\n },\n openGraphImageUrl: {\n title: 'Open Graph Image URL',\n description:\n 'Enter the full URL of the image. Ensure the image is accessible and meets the recommended size of 1200x630px (minimum 600x315px).',\n },\n twitterCard: {\n title: 'X Card Type',\n description: '',\n },\n twitterSite: {\n title: 'Site X Handle',\n description: 'The X (formerly Twitter) handle of the website (e.g., @example)',\n },\n twitterCreator: {\n title: 'X Creator Handle',\n description: 'The X (formerly Twitter) handle of the content creator (e.g., @creator)',\n },\n twitterTitle: {\n title: 'X Title',\n description: 'The title of the content as it should appear on X (formerly Twitter).',\n },\n twitterDescription: {\n title: 'X Description',\n description: 'A brief description of the content for X (formerly Twitter).',\n },\n twitterImageType: {\n title: 'X Image Type',\n description:\n 'Choose whether to upload an image or provide an image URL for X (formerly Twitter).',\n },\n twitterImage: {\n title: 'X Image',\n description:\n 'An image URL which should be at least 120x120px for \"summary\" card and 280x150px for \"summary_large_image\" card.',\n },\n twitterImageUrl: {\n title: 'X Image URL',\n description:\n 'Enter the full URL of the image for X (formerly Twitter). Ensure the image is accessible and meets the recommended size.',\n },\n}\n\nexport const getFieldInfo = (\n fieldName: string,\n fieldOverrides: SeoFieldsPluginConfig['fieldOverrides'],\n): {title: string; description: string} => {\n const fieldInfo =\n (fieldOverrides && fieldOverrides[fieldName as keyof typeof fieldOverrides]) ||\n DEFAULT_FIELD_INFO[fieldName as keyof typeof DEFAULT_FIELD_INFO]\n return fieldInfo\n ? {title: fieldInfo.title || '', description: fieldInfo.description || ''}\n : {title: '', description: ''}\n}\n\n/**\n * Check if a field should be hidden based on the current document type\n */\nexport const isFieldHidden = (\n fieldName: ValidHiddenFieldKeys,\n config: SeoFieldsPluginConfig,\n documentType?: string,\n): boolean => {\n // Check if field is in default hidden fields\n if (config.defaultHiddenFields?.includes(fieldName)) {\n return true\n }\n\n // Check if field is hidden for specific post type\n if (documentType && config.fieldVisibility?.[documentType]?.hiddenFields?.includes(fieldName)) {\n return true\n }\n\n return false\n}\n\n/**\n * Get the hidden function for any field\n */\nexport const getFieldHiddenFunction = (\n fieldName: ValidHiddenFieldKeys,\n config: SeoFieldsPluginConfig,\n) => {\n return ({\n document,\n }: {\n document?: {\n _type?: string\n }\n }): boolean => {\n const documentType = document?._type\n return isFieldHidden(fieldName, config, documentType)\n }\n}\n","export const isEmpty = (value: unknown): boolean => {\n return (\n value === null ||\n value === undefined ||\n (typeof value === 'string' && value.trim() === '') ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length === 0)\n )\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgDescriptionValidation} from '../../utils/seoUtils'\n\nconst OgDescription = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n // Access parent object to get keywords\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getOgDescriptionValidation(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n {/* Validation */}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default OgDescription\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {ObjectInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgImageValidation} from '../../utils/seoUtils'\n\nconst OgImage = (props: ObjectInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n const imgValue = value as Record<string, unknown> | undefined\n const hasImage = !!imgValue?.asset\n const altText = imgValue?.alt as string | undefined\n\n const feedbackItems = useMemo(\n () => getOgImageValidation(hasImage, altText, seoParent),\n [hasImage, altText, seoParent],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default OgImage\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgImageUrlValidation} from '../../utils/seoUtils'\n\nconst OgImageUrl = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n\n const feedbackItems = useMemo(() => getOgImageUrlValidation(value, seoParent), [value, seoParent])\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default OgImageUrl\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactNode, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgTitleValidation} from '../../utils/seoUtils'\n\nconst OgTitle = (props: StringInputProps): ReactNode => {\n const {value, renderDefault, path} = props\n\n // Access parent object to get keywords\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getOgTitleValidation(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default OgTitle\n","import {defineField, defineType, SchemaTypeDefinition} from 'sanity'\n\nimport OgDescription from '../../../components/openGraph/OgDescription'\nimport OgImage from '../../../components/openGraph/OgImage'\nimport OgImageUrl from '../../../components/openGraph/OgImageUrl'\nimport OgTitle from '../../../components/openGraph/OgTitle'\nimport {SeoFieldsPluginConfig} from '../../../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../../../utils/fieldsUtils'\n\nexport default function openGraph(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n return defineType({\n name: 'openGraph',\n title: 'Open Graph Settings',\n type: 'object',\n fields: [\n defineField({\n name: 'url',\n type: 'url',\n ...getFieldInfo('openGraphUrl', config.fieldOverrides),\n hidden: getFieldHiddenFunction('openGraphUrl', config),\n description:\n 'The canonical URL of the page. This should be the full URL including protocol (https://).',\n }),\n defineField({\n name: 'title',\n ...getFieldInfo('openGraphTitle', config.fieldOverrides),\n type: 'string',\n hidden: getFieldHiddenFunction('openGraphTitle', config),\n components: {\n input: OgTitle, // Can also wrap with a string input + preview\n },\n }),\n defineField({\n name: 'description',\n ...getFieldInfo('openGraphDescription', config.fieldOverrides),\n type: 'text',\n rows: 3,\n hidden: getFieldHiddenFunction('openGraphDescription', config),\n components: {\n input: OgDescription, // Can also wrap with a text area + preview\n },\n }),\n defineField({\n name: 'siteName',\n ...getFieldInfo('openGraphSiteName', config.fieldOverrides),\n type: 'string',\n hidden: getFieldHiddenFunction('openGraphSiteName', config),\n }),\n defineField({\n name: 'type',\n ...getFieldInfo('openGraphType', config.fieldOverrides),\n type: 'string',\n options: {\n list: [\n {title: 'Website', value: 'website'},\n {title: 'Article', value: 'article'},\n {title: 'Profile', value: 'profile'},\n {title: 'Book', value: 'book'},\n {title: 'Music', value: 'music'},\n {title: 'Video', value: 'video'},\n {title: 'Product', value: 'product'},\n ],\n // layout: 'radio', // Display as radio buttons\n },\n hidden: getFieldHiddenFunction('openGraphType', config),\n initialValue: 'website',\n }),\n defineField({\n name: 'imageType',\n ...getFieldInfo('openGraphImageType', config.fieldOverrides),\n type: 'string',\n options: {\n list: [\n {title: 'Upload Image', value: 'upload'},\n {title: 'Image URL', value: 'url'},\n ],\n },\n hidden: getFieldHiddenFunction('openGraphImage', config),\n initialValue: 'upload',\n }),\n defineField({\n name: 'image',\n ...getFieldInfo('openGraphImage', config.fieldOverrides),\n type: 'image',\n options: {\n hotspot: true,\n },\n components: {\n input: OgImage,\n },\n fields: [\n defineField({\n name: 'alt',\n title: 'Image Alt Text',\n type: 'string',\n description: 'A description of the image for accessibility purposes.',\n }),\n ],\n hidden: (context) => {\n const {parent} = context\n if (parent?.imageType !== 'upload') return true\n const hiddenFn = getFieldHiddenFunction('openGraphImage', config)\n return typeof hiddenFn === 'function' ? hiddenFn(context) : hiddenFn\n },\n }),\n defineField({\n name: 'imageUrl',\n ...getFieldInfo('openGraphImageUrl', config.fieldOverrides),\n type: 'url',\n components: {\n input: OgImageUrl,\n },\n hidden: (context) => {\n const {parent} = context\n if (parent?.imageType !== 'url') return true\n const hiddenFn = getFieldHiddenFunction('openGraphImage', config)\n return typeof hiddenFn === 'function' ? hiddenFn(context) : hiddenFn\n },\n }),\n ],\n })\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterDescriptionValidation} from '../../utils/seoUtils'\n\nconst TwitterDescription = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n // Access parent object to get keywords\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getTwitterDescriptionValidation(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default TwitterDescription\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {ObjectInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterImageValidation} from '../../utils/seoUtils'\n\nconst TwitterImage = (props: ObjectInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n const imgValue = value as Record<string, unknown> | undefined\n const hasImage = !!imgValue?.asset\n const altText = imgValue?.alt as string | undefined\n\n const feedbackItems = useMemo(\n () => getTwitterImageValidation(hasImage, altText, seoParent),\n [hasImage, altText, seoParent],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default TwitterImage\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterImageUrlValidation} from '../../utils/seoUtils'\n\nconst TwitterImageUrl = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n const seoParent = useFormValue([path[0]]) as Record<string, unknown> | null\n\n const feedbackItems = useMemo(\n () => getTwitterImageUrlValidation(value, seoParent),\n [value, seoParent],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default TwitterImageUrl\n","import {Stack, Text} from '@sanity/ui'\nimport {type ReactElement, useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterTitleValidation} from '../../utils/seoUtils'\n\nconst TwitterTitle = (props: StringInputProps): ReactElement => {\n const {value, renderDefault, path} = props\n\n // Access parent object to get keywords\n const parent = useFormValue([path[0]]) as {keywords?: string[]; _type?: string}\n const isParentseoField = parent && parent?._type === 'seoFields'\n const keywords = useMemo(() => parent?.keywords || [], [parent?.keywords])\n\n const feedbackItems = useMemo(\n () => getTwitterTitleValidation(value || '', keywords, isParentseoField),\n [value, keywords, isParentseoField],\n )\n\n return (\n <Stack space={3}>\n {renderDefault(props)}\n <Stack space={2}>\n {feedbackItems.map((item: FeedbackType) => (\n <div key={item.text} style={{display: 'flex', alignItems: 'center', gap: 7}}>\n <div\n style={{\n minWidth: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: item.color,\n }}\n />\n <Text weight=\"bold\" muted size={14}>\n {item.text}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n )\n}\n\nexport default TwitterTitle\n","import {defineField, defineType, SchemaTypeDefinition} from 'sanity'\n\nimport TwitterDescription from '../../../components/twitter/twitterDescription'\nimport TwitterImage from '../../../components/twitter/TwitterImage'\nimport TwitterImageUrl from '../../../components/twitter/TwitterImageUrl'\nimport TwitterTitle from '../../../components/twitter/twitterTitle'\nimport {SeoFieldsPluginConfig} from '../../../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../../../utils/fieldsUtils'\n\nexport default function twitter(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n return defineType({\n name: 'twitter',\n title: 'X (Formerly Twitter)',\n type: 'object',\n fields: [\n defineField({\n name: 'card',\n ...getFieldInfo('twitterCard', config.fieldOverrides),\n type: 'string',\n options: {\n list: [\n {title: 'Summary', value: 'summary'},\n {title: 'Summary with Large Image', value: 'summary_large_image'},\n {title: 'App', value: 'app'},\n {title: 'Player', value: 'player'},\n ],\n },\n hidden: getFieldHiddenFunction('twitterCard', config),\n initialValue: 'summary_large_image', // good default\n }),\n defineField({\n name: 'site',\n ...getFieldInfo('twitterSite', config.fieldOverrides),\n type: 'string',\n hidden: getFieldHiddenFunction('twitterSite', config),\n }),\n defineField({\n name: 'creator',\n type: 'string',\n ...getFieldInfo('twitterCreator', config.fieldOverrides),\n hidden: getFieldHiddenFunction('twitterCreator', config),\n }),\n defineField({\n name: 'title',\n type: 'string',\n ...getFieldInfo('twitterTitle', config.fieldOverrides),\n hidden: getFieldHiddenFunction('twitterTitle', config),\n components: {\n input: TwitterTitle,\n },\n }),\n defineField({\n name: 'description',\n type: 'text',\n rows: 3,\n ...getFieldInfo('twitterDescription', config.fieldOverrides),\n hidden: getFieldHiddenFunction('twitterDescription', config),\n components: {\n input: TwitterDescription,\n },\n }),\n defineField({\n name: 'imageType',\n ...getFieldInfo('twitterImageType', config.fieldOverrides),\n type: 'string',\n options: {\n list: [\n {title: 'Upload Image', value: 'upload'},\n {title: 'Image URL', value: 'url'},\n ],\n },\n hidden: getFieldHiddenFunction('twitterImage', config),\n initialValue: 'upload',\n }),\n defineField({\n name: 'image',\n ...getFieldInfo('twitterImage', config.fieldOverrides),\n type: 'image',\n options: {\n hotspot: true,\n },\n components: {\n input: TwitterImage,\n },\n fields: [\n defineField({\n name: 'alt',\n title: 'Image Alt Text',\n type: 'string',\n description: 'A description of the image for accessibility purposes.',\n }),\n ],\n hidden: (context) => {\n const {parent} = context\n if (parent?.imageType !== 'upload') return true\n const hiddenFn = getFieldHiddenFunction('twitterImage', config)\n return typeof hiddenFn === 'function' ? hiddenFn(context) : hiddenFn\n },\n }),\n defineField({\n name: 'imageUrl',\n ...getFieldInfo('twitterImageUrl', config.fieldOverrides),\n type: 'url',\n components: {\n input: TwitterImageUrl,\n },\n hidden: (context) => {\n const {parent} = context\n if (parent?.imageType !== 'url') return true\n const hiddenFn = getFieldHiddenFunction('twitterImage', config)\n return typeof hiddenFn === 'function' ? hiddenFn(context) : hiddenFn\n },\n }),\n ],\n })\n}\n","import {createElement, lazy, Suspense} from 'react'\nimport {\n defineField,\n defineType,\n FieldDefinition,\n FieldGroupDefinition,\n SchemaTypeDefinition,\n StringInputProps,\n} from 'sanity'\n\nimport MetaDescription from '../components/meta/MetaDescription'\nimport MetaImage from '../components/meta/MetaImage'\nimport MetaTitle from '../components/meta/MetaTitle'\nimport type {SeoFieldGroup, SeoFieldsPluginConfig, SeoObjectFieldName} from '../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../utils/fieldsUtils'\nimport {isEmpty} from '../utils/utils'\nimport openGraph from './types/openGraph'\nimport twitter from './types/twitter'\n\n// Lazy-load SeoPreview to avoid styled-components breaking `sanity schema extract`\nconst LazySeoPreview = lazy(() => import('../components/SeoPreview'))\nconst SeoPreviewWrapper = (props: StringInputProps) =>\n createElement(Suspense, {fallback: null}, createElement(LazySeoPreview, props))\n\n/**\n * Build a field-name → group-name(s) lookup from the plugin config.\n * A field can appear in multiple groups (Sanity supports `group: string[]`).\n */\nfunction buildFieldGroupMap(groups: SeoFieldGroup[]): Map<SeoObjectFieldName, string[]> {\n const map = new Map<SeoObjectFieldName, string[]>()\n for (const g of groups) {\n for (const fieldName of g.fields) {\n const existing = map.get(fieldName)\n if (existing) {\n existing.push(g.name)\n } else {\n map.set(fieldName, [g.name])\n }\n }\n }\n return map\n}\n\n/**\n * Convert plugin `SeoFieldGroup[]` into Sanity `FieldGroupDefinition[]`.\n */\nfunction toSanityGroups(groups: SeoFieldGroup[]): FieldGroupDefinition[] {\n return groups.map((g) => {\n const def: FieldGroupDefinition = {\n name: g.name,\n title: g.title,\n default: g.default,\n }\n if (g.icon && typeof g.icon !== 'string') {\n def.icon = g.icon\n }\n return def\n })\n}\n\n/**\n * Attach the `group` property to a field definition when groups are configured.\n */\nfunction withGroup(\n field: FieldDefinition,\n fieldGroupMap: Map<SeoObjectFieldName, string[]> | undefined,\n): FieldDefinition {\n if (!fieldGroupMap) return field\n const groups = fieldGroupMap.get(field.name as SeoObjectFieldName)\n if (!groups || groups.length === 0) return field\n return {...field, group: groups.length === 1 ? groups[0] : groups} as FieldDefinition\n}\n\nexport default function seoFieldsSchema(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n const groupsCfg = config.fieldGroups\n const fieldGroupMap = groupsCfg?.length ? buildFieldGroupMap(groupsCfg) : undefined\n const sanityGroups = groupsCfg?.length ? toSanityGroups(groupsCfg) : undefined\n\n return defineType({\n name: 'seoFields',\n title: 'SEO Fields',\n type: 'object',\n ...(sanityGroups ? {groups: sanityGroups} : {}),\n fields: [\n withGroup(\n defineField({\n name: 'robots',\n title: 'Robots Settings',\n type: 'robots',\n hidden: getFieldHiddenFunction('robots', config),\n }),\n fieldGroupMap,\n ),\n // 👇 conditionally spread preview field\n ...((typeof config.seoPreview === 'boolean' && config.seoPreview) ||\n (typeof config.seoPreview === 'object' && !isEmpty(config.seoPreview))\n ? [\n withGroup(\n defineField({\n name: 'preview',\n title: 'SEO Preview',\n type: 'string',\n components: {input: SeoPreviewWrapper},\n options: {\n baseUrl: config.baseUrl || 'https://www.example.com',\n ...(config.apiVersion ? {apiVersion: config.apiVersion} : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.prefix\n ? {prefix: config.seoPreview.prefix}\n : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.titleSuffix\n ? {titleSuffix: config.seoPreview.titleSuffix}\n : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.titleSuffixInheritColor\n ? {titleSuffixInheritColor: config.seoPreview.titleSuffixInheritColor}\n : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.titleSuffixQuery\n ? {titleSuffixQuery: config.seoPreview.titleSuffixQuery}\n : {}),\n } as Record<string, unknown>,\n initialValue: '' as string,\n readOnly: true,\n }),\n fieldGroupMap,\n ),\n ]\n : []),\n\n withGroup(\n defineField({\n name: 'title',\n ...getFieldInfo('title', config.fieldOverrides),\n type: 'string',\n components: {\n input: MetaTitle,\n },\n options: {\n ...(config.apiVersion ? {apiVersion: config.apiVersion} : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.titleSuffix\n ? {titleSuffix: config.seoPreview.titleSuffix}\n : {}),\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.titleSuffixQuery\n ? {titleSuffixQuery: config.seoPreview.titleSuffixQuery}\n : {}),\n } as Record<string, unknown>,\n hidden: getFieldHiddenFunction('title', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'description',\n ...getFieldInfo('description', config.fieldOverrides),\n type: 'text',\n rows: 3,\n components: {\n input: MetaDescription,\n },\n hidden: getFieldHiddenFunction('description', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'metaImage',\n ...getFieldInfo('metaImage', config.fieldOverrides),\n type: 'image',\n options: {\n hotspot: true,\n },\n components: {\n input: MetaImage,\n },\n hidden: getFieldHiddenFunction('metaImage', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'metaAttributes',\n ...getFieldInfo('metaAttributes', config.fieldOverrides),\n type: 'array',\n of: [{type: 'metaAttribute'}],\n hidden: getFieldHiddenFunction('metaAttributes', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'keywords',\n ...getFieldInfo('keywords', config.fieldOverrides),\n title: 'Keywords',\n type: 'array',\n of: [{type: 'string'}],\n description:\n 'Add relevant keywords for this page. These keywords will be used for SEO purposes.',\n hidden: getFieldHiddenFunction('keywords', config),\n }),\n fieldGroupMap,\n ),\n withGroup(\n defineField({\n name: 'canonicalUrl',\n ...getFieldInfo('canonicalUrl', config.fieldOverrides),\n title: 'Canonical URL',\n type: 'url',\n description:\n 'Specify the canonical URL for this page. This helps prevent duplicate content issues by indicating the preferred version of a page.',\n hidden: getFieldHiddenFunction('canonicalUrl', config),\n }),\n fieldGroupMap,\n ),\n withGroup(openGraph(config) as unknown as FieldDefinition, fieldGroupMap),\n withGroup(twitter(config) as unknown as FieldDefinition, fieldGroupMap),\n ],\n })\n}\n","import {defineField, defineType, SchemaTypeDefinition} from 'sanity'\n\nimport MetaDescription from '../../../components/meta/MetaDescription'\nimport MetaImage from '../../../components/meta/MetaImage'\nimport MetaTitle from '../../../components/meta/MetaTitle'\nimport {SeoFieldsPluginConfig} from '../../../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../../../utils/fieldsUtils'\n\nexport default function baseMeta(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n return defineType({\n name: 'baseMeta',\n title: 'Basic Meta Settings',\n type: 'object',\n fields: [\n defineField({\n name: 'title',\n ...getFieldInfo('title', config.fieldOverrides),\n type: 'string',\n components: {\n input: MetaTitle,\n },\n hidden: getFieldHiddenFunction('title', config),\n }),\n defineField({\n name: 'description',\n ...getFieldInfo('description', config.fieldOverrides),\n type: 'text',\n rows: 3,\n components: {\n input: MetaDescription,\n },\n hidden: getFieldHiddenFunction('description', config),\n }),\n defineField({\n name: 'metaImage',\n ...getFieldInfo('metaImage', config.fieldOverrides),\n type: 'image',\n options: {\n hotspot: true,\n },\n components: {\n input: MetaImage,\n },\n hidden: getFieldHiddenFunction('metaImage', config),\n }),\n defineField({\n name: 'keywords',\n ...getFieldInfo('keywords', config.fieldOverrides),\n title: 'Keywords',\n type: 'array',\n of: [{type: 'string'}],\n description:\n 'Add relevant keywords for this page. These keywords will be used for SEO purposes.',\n hidden: getFieldHiddenFunction('keywords', config),\n }),\n defineField({\n name: 'canonicalUrl',\n ...getFieldInfo('canonicalUrl', config.fieldOverrides),\n title: 'Canonical URL',\n type: 'url',\n description:\n 'Specify the canonical URL for this page. This helps prevent duplicate content issues by indicating the preferred version of a page.',\n hidden: getFieldHiddenFunction('canonicalUrl', config),\n }),\n defineField({\n name: 'metaAttributes',\n ...getFieldInfo('metaAttributes', config.fieldOverrides),\n type: 'array',\n of: [{type: 'metaAttribute'}],\n hidden: getFieldHiddenFunction('metaAttributes', config),\n }),\n ],\n })\n}\n","import {defineField, defineType} from 'sanity'\n\nexport default defineType({\n name: 'metaAttribute',\n title: 'Meta Attribute',\n type: 'object',\n fields: [\n defineField({\n name: 'key',\n title: 'Attribute Name',\n type: 'string',\n }),\n defineField({\n name: 'type',\n title: 'Attribute Value Type',\n type: 'string',\n options: {\n list: [\n {title: 'String', value: 'string'},\n {title: 'Image', value: 'image'},\n ],\n },\n initialValue: 'string',\n }),\n defineField({\n name: 'value',\n title: 'Attribute Value',\n type: 'string',\n hidden: ({parent}) => parent?.type === 'image',\n }),\n defineField({\n name: 'image',\n title: 'Attribute Image Value',\n type: 'image',\n hidden: ({parent}) => parent?.type === 'string',\n }),\n ],\n preview: {\n select: {\n attributeName: 'key',\n attributeValueString: 'value',\n attributeValueImage: 'image',\n },\n prepare({attributeName, attributeValueString, attributeValueImage}) {\n let subtitle = ''\n if (attributeValueString) {\n subtitle = `Value: ${attributeValueString}`\n } else if (attributeValueImage) {\n subtitle = 'Value: [Image]'\n } else {\n subtitle = 'No Attribute Value'\n }\n return {\n title: attributeName || 'No Attribute Name',\n subtitle: subtitle,\n media: attributeValueImage,\n }\n },\n },\n})\n","import {defineType} from 'sanity'\n\nexport default defineType({\n name: 'metaTag',\n title: 'Meta Tag',\n type: 'object',\n fields: [\n {\n name: 'metaAttributes',\n title: 'Meta Attributes',\n type: 'array',\n of: [{type: 'metaAttribute'}],\n description:\n 'Add custom meta attributes to the head of the document for additional SEO and social media integration.',\n },\n ],\n})\n","import {defineField, defineType} from 'sanity'\n\nexport default defineType({\n name: 'robots',\n title: 'Robots Settings',\n type: 'object',\n fields: [\n defineField({\n name: 'noIndex',\n title: 'No Index',\n type: 'boolean',\n initialValue: false,\n description:\n 'Enable this to prevent search engines from indexing this page. The page will not appear in search results.',\n }),\n defineField({\n name: 'noFollow',\n title: 'No Follow',\n type: 'boolean',\n initialValue: false,\n description:\n 'Enable this to prevent search engines from following links on this page. Links will not pass SEO value.',\n }),\n ],\n description: 'Select how search engines should index and follow links on this page.',\n})\n","import {SchemaTypeDefinition} from 'sanity'\n\nimport {SeoFieldsPluginConfig} from '../../plugin'\nimport seoFields from '..'\nimport baseMeta from './baseMeta'\nimport metaAttribute from './metaAttribute'\nimport metaTag from './metaTag'\nimport openGraph from './openGraph'\nimport robots from './robots'\nimport twitter from './twitter'\n\nexport default function types(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition[] {\n return [\n seoFields(config), // pass config here\n baseMeta(config), // pass config here\n openGraph(config), // pass config here\n twitter(config), // pass config here\n metaAttribute as SchemaTypeDefinition,\n metaTag,\n robots,\n ]\n}\n","// plugin.ts\nimport {type ComponentType, createElement, lazy, Suspense} from 'react'\nimport {definePlugin} from 'sanity'\n\nimport types from './schemas/types'\nimport type {DeprecationWarning, DocumentWithSeoHealth} from './types'\n\nexport interface SeoFieldConfig {\n title?: string\n description?: string\n}\n\nexport type SeoFieldKeys =\n | 'title'\n | 'description'\n | 'canonicalUrl'\n | 'metaImage'\n | 'keywords'\n | 'metaAttributes'\n | 'robots'\n\nexport type openGraphFieldKeys =\n | 'openGraphUrl'\n | 'openGraphTitle'\n | 'openGraphDescription'\n | 'openGraphSiteName'\n | 'openGraphType'\n | 'openGraphImageType'\n | 'openGraphImage'\n | 'openGraphImageUrl'\n\nexport type twitterFieldKeys =\n | 'twitterCard'\n | 'twitterSite'\n | 'twitterCreator'\n | 'twitterTitle'\n | 'twitterDescription'\n | 'twitterImageType'\n | 'twitterImage'\n | 'twitterImageUrl'\n\nexport type AllFieldKeys = SeoFieldKeys | openGraphFieldKeys | twitterFieldKeys\n\n/**\n * Names of top-level fields inside the `seoFields` object type.\n * Use these when assigning fields to groups in `fieldGroups`.\n */\nexport type SeoObjectFieldName =\n | 'robots'\n | 'preview'\n | 'title'\n | 'description'\n | 'metaImage'\n | 'metaAttributes'\n | 'keywords'\n | 'canonicalUrl'\n | 'openGraph'\n | 'twitter'\n\n/**\n * Defines a single tab/group within the `seoFields` object.\n */\nexport interface SeoFieldGroup {\n /** Unique key for this group (used internally by Sanity). */\n name: string\n /** Human-readable label shown as the tab title. */\n title: string\n /** Whether this tab is selected by default. Only one group should be `true`. */\n default?: boolean\n /**\n * Field names to include in this group.\n * Use the top-level seoFields field names: `'title'`, `'description'`, `'metaImage'`,\n * `'keywords'`, `'canonicalUrl'`, `'metaAttributes'`, `'robots'`, `'preview'`,\n * `'openGraph'`, `'twitter'`.\n */\n fields: SeoObjectFieldName[]\n /** Optional icon displayed next to the tab title. Must be a React component. */\n icon?: ComponentType\n}\n\nexport type ValidHiddenFieldKeys = Exclude<\n AllFieldKeys,\n 'openGraphImageUrl' | 'twitterImageUrl' | 'openGraphImageType' | 'twitterImageType'\n>\n\nexport interface FieldVisibilityConfig {\n hiddenFields?: ValidHiddenFieldKeys[]\n}\n\nexport interface SeoFieldsPluginConfig {\n /**\n * Enable or configure the SEO preview feature.\n * If set to `true`, the SEO preview will be enabled with default settings.\n * If set to an object, you can provide a custom `prefix` function to modify the URL prefix\n * and/or a `titleSuffix` to append text (e.g. a brand name) after the meta title in the preview.\n * The plugin automatically adds a `|` separator — only provide the suffix text itself.\n *\n * Example:\n * ```\n * seoPreview: {\n * prefix: (doc) => `/${doc.slug?.current || 'untitled'}`,\n * titleSuffix: 'Acme Corp',\n * // or dynamically:\n * titleSuffix: (doc) => doc.brandName || 'Acme Corp',\n * }\n * ```\n */\n seoPreview?:\n | boolean\n | {\n prefix?: (doc: {_type?: string} & Record<string, unknown>) => string\n /**\n * A static string or function appended to the meta title in the Live Preview.\n * Useful for showing a brand suffix (e.g. `'Acme Corp'`) that is added\n * via your Next.js title template but not stored in the Sanity field.\n * The plugin automatically prepends a `|` separator so only provide the\n * text itself. The suffix is rendered in a muted style so editors can\n * distinguish it from the typed title. The combined length (including the\n * separator) is checked against the 60-character SERP limit.\n */\n titleSuffix?: string | ((doc: {_type?: string} & Record<string, unknown>) => string)\n /**\n * When `true`, the `titleSuffix` is rendered in the same color and weight\n * as the main title (`#1a0dab`, `fontWeight: 500`) instead of the default\n * muted style (`#70757a`, `fontWeight: 400`).\n *\n * @default false\n */\n titleSuffixInheritColor?: boolean\n /**\n * A GROQ query string whose result is used as the title suffix in the Live Preview.\n * The query runs against your dataset at Studio load time, making it useful for\n * fetching a dynamic value from another document (e.g. a settings singleton).\n * Takes priority over `titleSuffix` when both are provided.\n *\n * @example\n * ```ts\n * titleSuffixQuery: '*[_type == \"siteSettings\"][0].siteName'\n * ```\n */\n titleSuffixQuery?: string\n }\n\n /**\n * A mapping of field keys to their configuration settings.\n * This allows customization of field titles and descriptions.\n * For example, to change the title of the 'title' field:\n */\n fieldOverrides?: Partial<Record<AllFieldKeys, SeoFieldConfig>>\n /**\n * A mapping of document types to field visibility configurations.\n * This allows you to specify which fields should be hidden for specific document types.\n */\n fieldVisibility?: Record<string, FieldVisibilityConfig>\n\n /**\n * A list of fields that should be hidden by default in all document types.\n * This can be overridden by specific document type settings in `fieldVisibility`.\n */\n defaultHiddenFields?: ValidHiddenFieldKeys[]\n\n /**\n * Group the SEO fields into tabbed sections inside the `seoFields` object.\n * When configured, the Studio shows tabs (Sanity groups) so editors can\n * switch between e.g. \"Meta\", \"Open Graph\", and \"Twitter Card\" panels.\n *\n * @example\n * fieldGroups: [\n * { name: 'meta', title: 'Meta', default: true,\n * fields: ['title', 'description', 'metaImage', 'keywords', 'canonicalUrl', 'metaAttributes', 'robots', 'preview'] },\n * { name: 'openGraph', title: 'Open Graph', fields: ['openGraph'] },\n * { name: 'twitter', title: 'Twitter Card', fields: ['twitter'] },\n * ]\n */\n fieldGroups?: SeoFieldGroup[]\n /**\n * The base URL of your website, used for generating full URLs in the SEO preview.\n * Defaults to 'https://www.example.com' if not provided.\n */\n baseUrl?: string\n /**\n * The Sanity API version to use for all plugin clients (SEO Preview, Health Dashboard).\n * Defaults to '2024-01-01'.\n * @example '2024-01-01'\n */\n apiVersion?: string\n /**\n * Enable or configure the SEO Health Dashboard tool.\n * If set to `true`, the dashboard is enabled with all defaults.\n * If set to an object, you can customise the tool and dashboard settings.\n * Defaults to `true`.\n * Example:\n * ```\n * healthDashboard: {\n * toolTitle: 'SEO Overview', // Studio nav tab label\n * content: {\n * icon: '🔍', // Emoji icon shown before the page heading\n * title: 'My SEO Dashboard',// Page heading inside the tool (no emoji)\n * description: 'Track SEO across all documents', // Subtitle under the heading\n * },\n * display: {\n * typeColumn: false, // Hide the document type column (default: true)\n * documentId: false, // Hide the document ID under titles (default: true)\n * },\n * query: {\n * // Option 1 – filter by specific document types\n * types: ['post', 'page'],\n * // Option 2 – provide a full custom GROQ query (takes precedence over `types`)\n * // Must return documents with at least: _id, _type, title, seo, _updatedAt\n * groq: `*[seo != null && defined(slug.current)]{ _id, _type, title, slug, seo, _updatedAt }`,\n * },\n * }\n * ```\n */\n healthDashboard?:\n | boolean\n | {\n tool?: {\n title?: string\n name?: string\n }\n toolTitle?: string\n content?: {\n icon?: string\n title?: string\n description?: string\n /** Text shown while the license key is being verified. Defaults to \"Verifying license…\" */\n loadingLicense?: string\n /** Text shown while documents are being fetched. Defaults to \"Loading documents…\" */\n loadingDocuments?: string\n /** Text shown when the query returns zero results. Defaults to \"No documents found\" */\n noDocuments?: string\n }\n /**\n * Show or hide the document type column in the results table.\n * Defaults to `true`.\n */\n showTypeColumn?: boolean\n /**\n * Show or hide the Sanity document `_id` under each title.\n * Defaults to `true`.\n */\n showDocumentId?: boolean\n query?: {\n /**\n * Limit the dashboard to specific document types.\n * Example: `['post', 'page']`\n */\n types?: string[]\n /**\n * When using `types`, also require the `seo` field to be non-null.\n * Set to `false` to include documents of those types even if `seo` is missing.\n * Defaults to `true`.\n */\n requireSeo?: boolean\n /**\n * Provide a fully custom GROQ query. Takes precedence over `types`.\n * The query must return documents with at least: _id, _type, title, seo, _updatedAt\n */\n groq?: string\n }\n /**\n * The Sanity API version to use for the client (e.g. '2023-01-01').\n * Defaults to '2023-01-01'.\n * @deprecated Use the root-level `apiVersion` option instead.\n * @example\n * // Before (deprecated):\n * healthDashboard: { apiVersion: '2024-01-01' }\n * // After:\n * apiVersion: '2024-01-01'\n */\n apiVersion?: string\n /**\n * License key for the SEO Health Dashboard pro feature.\n * Obtain a license at https://sanity-plugin-seofields.thehardik.in\n */\n licenseKey?: string\n /**\n * Map raw `_type` values to human-readable display labels.\n * Used in both the Type column and the Type filter dropdown.\n * Any type without an entry falls back to the raw `_type` string.\n *\n * @example\n * typeDisplayLabels: { productDrug: 'Products', singleCondition: 'Condition' }\n */\n typeDisplayLabels?: Record<string, string>\n /**\n * Controls how the document type is rendered in the Type column.\n * - `'badge'` (default) — coloured pill\n * - `'text'` — plain text, useful for dense layouts\n */\n typeColumnMode?: 'badge' | 'text'\n /**\n * The document field to use as the display title in the dashboard.\n *\n * - `string` — use this field for every document type (e.g. `'name'`)\n * - `Record<string, string>` — per-type mapping; unmapped types fall back to `title`\n *\n * @example\n * titleField: 'name'\n *\n * @example\n * titleField: { post: 'title', product: 'name', category: 'label' }\n */\n titleField?: string | Record<string, string>\n /**\n * Callback function to render a custom badge next to the document title.\n * Receives the full document and should return badge data or undefined.\n *\n * @example\n * getDocumentBadge: (doc) => {\n * if (doc.services === 'NHS')\n * return { label: 'NHS', bgColor: '#e0f2fe', textColor: '#0369a1' }\n * if (doc.services === 'Private')\n * return { label: 'Private', bgColor: '#fef3c7', textColor: '#92400e' }\n * }\n */\n getDocumentBadge?: (\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined\n /**\n * The `name` of the Sanity structure tool that contains the monitored documents.\n * Required when you have multiple structure tools and the documents live in a\n * non-default one. Clicking a title will navigate to\n * `/{basePath}/{structureTool}/intent/edit/…` directly.\n *\n * @example\n * structureTool: 'common'\n */\n structureTool?: string\n /**\n * Enable preview/demo mode to show dummy data.\n * Useful for testing, documentation, or showcasing the dashboard.\n * When enabled, displays realistic sample documents with various SEO scores.\n * Defaults to `false`.\n *\n * @example\n * previewMode: true\n */\n previewMode?: boolean\n /**\n * Export options for the SEO Health Dashboard.\n * Set to `true` (default) to enable both CSV and JSON export,\n * or configure per-format.\n */\n export?: boolean | {enabled?: boolean; formats?: Array<'csv' | 'json'>}\n /**\n * Show compact inline stat pills in the header row instead of the\n * full 6-card stats grid. Useful for saving vertical space.\n * Defaults to `false`.\n */\n compactStats?: boolean\n }\n}\n\ninterface ResolvedDashboardConfig {\n enabled: boolean\n toolTitle: string\n toolName: string\n icon: string | undefined\n title: string | undefined\n description: string | undefined\n showTypeColumn: boolean | undefined\n showDocumentId: boolean | undefined\n queryTypes: string[] | undefined\n queryRequireSeo: boolean | undefined\n queryGroq: string | undefined\n apiVersion: string | undefined\n licenseKey: string | undefined\n typeDisplayLabels: Record<string, string> | undefined\n typeColumnMode: 'badge' | 'text' | undefined\n titleField: string | Record<string, string> | undefined\n getDocumentBadge:\n | ((\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined)\n | undefined\n loadingLicense: string | undefined\n loadingDocuments: string | undefined\n noDocuments: string | undefined\n previewMode: boolean | undefined\n structureTool: string | undefined\n exportEnabled: boolean\n exportFormats: Array<'csv' | 'json'>\n compactStats: boolean\n /** @internal — forwarded to the UI banner when deprecated config keys are detected */\n deprecationWarnings: DeprecationWarning[]\n}\n\n// const V132 = 'v1.3.2'\n// const CHANGELOG_V132 = `https://github.com/hardik-143/sanity-plugin-seofields/blob/main/CHANGELOG.md#132--2026-03-23`\n\nconst resolveDashboardConfig = (\n healthDashboard: SeoFieldsPluginConfig['healthDashboard'],\n rootApiVersion?: string,\n): ResolvedDashboardConfig => {\n const cfg = typeof healthDashboard === 'object' ? healthDashboard : undefined\n\n const deprecationWarnings: DeprecationWarning[] = []\n if (cfg?.apiVersion !== undefined) {\n deprecationWarnings.push({\n key: 'healthDashboard.apiVersion → apiVersion',\n version: 'v1.6.1',\n changelogUrl: 'https://github.com/hardik-143/sanity-plugin-seofields/blob/main/CHANGELOG.md',\n })\n console.warn(\n '[sanity-plugin-seofields] \"healthDashboard.apiVersion\" is deprecated. Move it to the root \"apiVersion\" option instead.',\n )\n }\n\n return {\n enabled: healthDashboard !== false,\n toolTitle: cfg?.tool?.title ?? 'SEO Health',\n toolName: cfg?.tool?.name ?? 'seo-health-dashboard',\n icon: cfg?.content?.icon,\n title: cfg?.content?.title,\n description: cfg?.content?.description,\n showTypeColumn: cfg?.showTypeColumn,\n showDocumentId: cfg?.showDocumentId,\n queryTypes: cfg?.query?.types,\n queryRequireSeo: cfg?.query?.requireSeo,\n queryGroq: cfg?.query?.groq,\n apiVersion: cfg?.apiVersion ?? rootApiVersion,\n licenseKey: cfg?.licenseKey,\n typeDisplayLabels: cfg?.typeDisplayLabels,\n typeColumnMode: cfg?.typeColumnMode,\n titleField: cfg?.titleField,\n getDocumentBadge: cfg?.getDocumentBadge,\n loadingLicense: cfg?.content?.loadingLicense,\n loadingDocuments: cfg?.content?.loadingDocuments,\n noDocuments: cfg?.content?.noDocuments,\n previewMode: cfg?.previewMode,\n structureTool: cfg?.structureTool,\n exportEnabled: (() => {\n const exportCfg = cfg?.export\n if (exportCfg === false) return false\n if (typeof exportCfg === 'object') return exportCfg.enabled ?? true\n return true\n })(),\n exportFormats: (() => {\n const exportCfg = cfg?.export\n if (typeof exportCfg === 'object' && exportCfg.formats) return exportCfg.formats\n return ['csv', 'json'] as Array<'csv' | 'json'>\n })(),\n compactStats: cfg?.compactStats ?? false,\n deprecationWarnings,\n }\n}\n\nconst seofields = definePlugin<SeoFieldsPluginConfig | void>((config = {}) => {\n const {healthDashboard = true} = config as SeoFieldsPluginConfig\n const dash = resolveDashboardConfig(healthDashboard, (config as SeoFieldsPluginConfig).apiVersion)\n\n const LazySeoHealthTool = lazy(() => import('./components/SeoHealthTool'))\n\n const BoundSeoHealthTool = () =>\n createElement(\n Suspense,\n {fallback: null},\n createElement(LazySeoHealthTool, {\n icon: dash.icon,\n title: dash.title,\n description: dash.description,\n showTypeColumn: dash.showTypeColumn,\n showDocumentId: dash.showDocumentId,\n queryTypes: dash.queryTypes,\n queryRequireSeo: dash.queryRequireSeo,\n customQuery: dash.queryGroq,\n apiVersion: dash.apiVersion,\n licenseKey: dash.licenseKey,\n typeDisplayLabels: dash.typeDisplayLabels,\n typeColumnMode: dash.typeColumnMode,\n titleField: dash.titleField,\n getDocumentBadge: dash.getDocumentBadge,\n loadingLicense: dash.loadingLicense,\n loadingDocuments: dash.loadingDocuments,\n noDocuments: dash.noDocuments,\n previewMode: dash.previewMode,\n structureTool: dash.structureTool,\n exportEnabled: dash.exportEnabled,\n exportFormats: dash.exportFormats,\n compactStats: dash.compactStats,\n _deprecationWarnings: dash.deprecationWarnings,\n }),\n )\n\n return {\n name: 'sanity-plugin-seofields',\n schema: {\n types: types(config as SeoFieldsPluginConfig),\n },\n ...(dash.enabled && {\n tools: [\n {\n name: dash.toolName,\n title: dash.toolTitle,\n component: BoundSeoHealthTool,\n icon: () => '📊',\n },\n ],\n }),\n }\n})\n\nexport default seofields\n","import {lazy, Suspense} from 'react'\nimport type {ComponentBuilder, StructureBuilder} from 'sanity/structure'\n\nimport type {SeoHealthDashboardProps} from './SeoHealthDashboard'\n\nconst LazySeoHealthDashboard = lazy(() => import('./SeoHealthDashboard'))\n\n/**\n * Options accepted by `createSeoHealthPane`.\n * All props from `SeoHealthDashboardProps` are supported.\n *\n * `licenseKey` is **required** — the dashboard will not render without it.\n */\nexport interface SeoHealthPaneOptions extends Omit<SeoHealthDashboardProps, 'customQuery'> {\n /** Required license key (format: `SEOF-XXXX-XXXX-XXXX`). */\n licenseKey: string\n /**\n * A fully custom GROQ query used to fetch documents for the dashboard.\n * The query must return documents with at least: `_id`, `_type`, `title`, `seo`, `_updatedAt`.\n *\n * Takes precedence over `queryTypes` when both are provided.\n *\n * @example\n * query: `*[_type in [\"post\",\"page\"] && defined(seo)]{ _id, _type, title, slug, seo, _updatedAt }`\n */\n query?: string\n}\n\n// function isStructureBuilder(arg: unknown): arg is StructureBuilder {\n// return (\n// arg !== null &&\n// typeof arg === 'object' &&\n// typeof (arg as StructureBuilder).component === 'function' &&\n// typeof (arg as StructureBuilder).document === 'function'\n// )\n// }\n\n/**\n * Creates a desk-structure pane for the SEO Health Dashboard.\n *\n * Returns a **`ComponentBuilder`** with a built-in `.child()` resolver so that\n * clicking any document row opens the document editor as a split pane to the right.\n *\n * Use it **directly** as the `.child()` value — do **not** wrap it in `S.component()`.\n *\n * ```ts\n * // sanity.config.ts\n * structure: (S) =>\n * S.list().items([\n * S.listItem()\n * .title('SEO Health')\n * .child(\n * createSeoHealthPane(S, {\n * licenseKey: 'SEOF-XXXX-XXXX-XXXX',\n * query: `*[_type == \"post\" && defined(seo)]{ _id, _type, title, slug, seo, _updatedAt }`,\n * })\n * ),\n * ])\n * ```\n */\nexport function createSeoHealthPane(\n optionsOrS: StructureBuilder,\n optionsWhenS: SeoHealthPaneOptions,\n): ComponentBuilder {\n // ── Two-arg form: structure builder passed as first arg ──────────────────\n const S = optionsOrS\n const {query, openInPane = true, title: paneTitle, ...rest} = optionsWhenS ?? {}\n\n const SeoHealthPane = () => (\n <Suspense fallback={null}>\n <LazySeoHealthDashboard\n customQuery={query}\n openInPane={openInPane}\n title={paneTitle}\n {...rest}\n />\n </Suspense>\n )\n SeoHealthPane.displayName = 'SeoHealthPane'\n\n // Wire up the child resolver so ChildLink URLs resolve to the document editor\n return (S.component(SeoHealthPane) as ComponentBuilder)\n .title(paneTitle ?? 'SEO Health')\n .child((docId: string, {params}: {params: Record<string, string | undefined>}) => {\n const builder = S.document().documentId(docId)\n return params?.type ? builder.schemaType(params.type) : builder\n })\n}\n\nexport default createSeoHealthPane\n","// Import the plugin\nimport seofields from './plugin'\n\n// Default export the plugin\nexport default seofields\n\n// Re-export everything from plugin.ts\nexport * from './plugin'\n\n// Export schema types for external use\nexport {default as seoFieldsSchema} from './schemas'\nexport {default as allSchemas} from './schemas/types'\nexport {default as baseMetaSchema} from './schemas/types/baseMeta'\nexport {default as metaAttributeSchema} from './schemas/types/metaAttribute'\nexport {default as metaTagSchema} from './schemas/types/metaTag'\nexport {default as openGraphSchema} from './schemas/types/openGraph'\nexport {default as robotsSchema} from './schemas/types/robots'\nexport {default as twitterSchema} from './schemas/types/twitter'\n\n// Export dashboard factory (lazy — avoids styled-components at import time)\nexport type {SeoHealthPaneOptions} from './components/SeoHealthPane'\nexport {createSeoHealthPane} from './components/SeoHealthPane'\n\n// Export types\nexport type {DocumentWithSeoHealth, SeoHealthMetrics, SeoHealthStatus} from './types'\n"]}