@sittari/payload-seo 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/dist/admin/ResetRawJson.d.ts +4 -0
- package/dist/admin/ResetRawJson.d.ts.map +1 -0
- package/dist/admin/ResetRawJson.js +53 -0
- package/dist/admin/ResetRawJson.js.map +1 -0
- package/dist/admin/SchemaValueOverrides.d.ts +4 -0
- package/dist/admin/SchemaValueOverrides.d.ts.map +1 -0
- package/dist/admin/SchemaValueOverrides.js +46 -0
- package/dist/admin/SchemaValueOverrides.js.map +1 -0
- package/dist/admin/SeoPreviews.d.ts +4 -0
- package/dist/admin/SeoPreviews.d.ts.map +1 -0
- package/dist/admin/SeoPreviews.js +172 -0
- package/dist/admin/SeoPreviews.js.map +1 -0
- package/dist/admin/preview-document.d.ts +7 -0
- package/dist/admin/preview-document.d.ts.map +1 -0
- package/dist/admin/preview-document.js +50 -0
- package/dist/admin/preview-document.js.map +1 -0
- package/dist/admin/translations.d.ts +236 -0
- package/dist/admin/translations.d.ts.map +1 -0
- package/dist/admin/translations.js +67 -0
- package/dist/admin/translations.js.map +1 -0
- package/dist/admin/use-admin-text.d.ts +4 -0
- package/dist/admin/use-admin-text.d.ts.map +1 -0
- package/dist/admin/use-admin-text.js +9 -0
- package/dist/admin/use-admin-text.js.map +1 -0
- package/dist/collections/redirects.d.ts +7 -0
- package/dist/collections/redirects.d.ts.map +1 -0
- package/dist/collections/redirects.js +71 -0
- package/dist/collections/redirects.js.map +1 -0
- package/dist/endpoints/preview.d.ts +4 -0
- package/dist/endpoints/preview.d.ts.map +1 -0
- package/dist/endpoints/preview.js +170 -0
- package/dist/endpoints/preview.js.map +1 -0
- package/dist/exports/client.d.ts +4 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/exports/client.js +5 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/types.d.ts +3 -0
- package/dist/exports/types.d.ts.map +1 -0
- package/dist/exports/types.js +2 -0
- package/dist/exports/types.js.map +1 -0
- package/dist/fields/seo.d.ts +11 -0
- package/dist/fields/seo.d.ts.map +1 -0
- package/dist/fields/seo.js +187 -0
- package/dist/fields/seo.js.map +1 -0
- package/dist/globals/seo-settings.d.ts +8 -0
- package/dist/globals/seo-settings.d.ts.map +1 -0
- package/dist/globals/seo-settings.js +73 -0
- package/dist/globals/seo-settings.js.map +1 -0
- package/dist/helpers/config.d.ts +5 -0
- package/dist/helpers/config.d.ts.map +1 -0
- package/dist/helpers/config.js +7 -0
- package/dist/helpers/config.js.map +1 -0
- package/dist/helpers/metadata.d.ts +27 -0
- package/dist/helpers/metadata.d.ts.map +1 -0
- package/dist/helpers/metadata.js +50 -0
- package/dist/helpers/metadata.js.map +1 -0
- package/dist/helpers/preview.d.ts +18 -0
- package/dist/helpers/preview.d.ts.map +1 -0
- package/dist/helpers/preview.js +23 -0
- package/dist/helpers/preview.js.map +1 -0
- package/dist/helpers/redirects.d.ts +10 -0
- package/dist/helpers/redirects.d.ts.map +1 -0
- package/dist/helpers/redirects.js +27 -0
- package/dist/helpers/redirects.js.map +1 -0
- package/dist/helpers/robots.d.ts +6 -0
- package/dist/helpers/robots.d.ts.map +1 -0
- package/dist/helpers/robots.js +46 -0
- package/dist/helpers/robots.js.map +1 -0
- package/dist/helpers/schema.d.ts +15 -0
- package/dist/helpers/schema.d.ts.map +1 -0
- package/dist/helpers/schema.js +5 -0
- package/dist/helpers/schema.js.map +1 -0
- package/dist/helpers/sitemap.d.ts +11 -0
- package/dist/helpers/sitemap.d.ts.map +1 -0
- package/dist/helpers/sitemap.js +131 -0
- package/dist/helpers/sitemap.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/next.d.ts +14 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +24 -0
- package/dist/next.js.map +1 -0
- package/dist/plugin.d.ts +12 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +260 -0
- package/dist/plugin.js.map +1 -0
- package/dist/resolvers/document.d.ts +5 -0
- package/dist/resolvers/document.d.ts.map +1 -0
- package/dist/resolvers/document.js +15 -0
- package/dist/resolvers/document.js.map +1 -0
- package/dist/resolvers/effective.d.ts +33 -0
- package/dist/resolvers/effective.d.ts.map +1 -0
- package/dist/resolvers/effective.js +225 -0
- package/dist/resolvers/effective.js.map +1 -0
- package/dist/resolvers/metadata.d.ts +13 -0
- package/dist/resolvers/metadata.d.ts.map +1 -0
- package/dist/resolvers/metadata.js +24 -0
- package/dist/resolvers/metadata.js.map +1 -0
- package/dist/types.d.ts +261 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/generated-schema.d.ts +11 -0
- package/dist/utils/generated-schema.d.ts.map +1 -0
- package/dist/utils/generated-schema.js +69 -0
- package/dist/utils/generated-schema.js.map +1 -0
- package/dist/utils/locale.d.ts +17 -0
- package/dist/utils/locale.d.ts.map +1 -0
- package/dist/utils/locale.js +5 -0
- package/dist/utils/locale.js.map +1 -0
- package/dist/utils/robots.d.ts +11 -0
- package/dist/utils/robots.d.ts.map +1 -0
- package/dist/utils/robots.js +35 -0
- package/dist/utils/robots.js.map +1 -0
- package/dist/utils/urls.d.ts +9 -0
- package/dist/utils/urls.d.ts.map +1 -0
- package/dist/utils/urls.js +48 -0
- package/dist/utils/urls.js.map +1 -0
- package/dist/utils/validation.d.ts +20 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +56 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { canAccessAdmin } from 'payload';
|
|
2
|
+
import { resolveSeoPreview } from '../helpers/preview.js';
|
|
3
|
+
import { getSeoRuntimeConfig } from '../helpers/config.js';
|
|
4
|
+
import { resolveSeoNames } from '../plugin.js';
|
|
5
|
+
import { SEO_PLUGIN_MARKER } from '../types.js';
|
|
6
|
+
import { isPlainJsonObject } from '../utils/validation.js';
|
|
7
|
+
const object = (value) => isPlainJsonObject(value) ? value : undefined;
|
|
8
|
+
const findField = (fields, name) => {
|
|
9
|
+
for (const field of fields ?? []) {
|
|
10
|
+
if ('name' in field && field.name === name)
|
|
11
|
+
return field;
|
|
12
|
+
if ('fields' in field && Array.isArray(field.fields)) {
|
|
13
|
+
const found = findField(field.fields, name);
|
|
14
|
+
if (found)
|
|
15
|
+
return found;
|
|
16
|
+
}
|
|
17
|
+
if (field.type === 'tabs') {
|
|
18
|
+
for (const tab of field.tabs) {
|
|
19
|
+
const found = findField(tab.fields, name);
|
|
20
|
+
if (found)
|
|
21
|
+
return found;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
};
|
|
27
|
+
const merge = (base, overlay) => Object.entries(overlay).reduce((result, [key, value]) => {
|
|
28
|
+
const inherited = result[key];
|
|
29
|
+
result[key] = isPlainJsonObject(inherited) && isPlainJsonObject(value) ? merge(inherited, value) : value;
|
|
30
|
+
return result;
|
|
31
|
+
}, { ...base });
|
|
32
|
+
const relationId = (value) => typeof value === 'string' || typeof value === 'number' ? value : undefined;
|
|
33
|
+
const readPath = (document, path) => path.split('.').filter(Boolean).reduce((value, segment) => value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
34
|
+
? value[segment]
|
|
35
|
+
: undefined, document);
|
|
36
|
+
const writePath = (document, path, value) => {
|
|
37
|
+
const segments = path.split('.').filter(Boolean);
|
|
38
|
+
if (!segments.length)
|
|
39
|
+
return;
|
|
40
|
+
let target = document;
|
|
41
|
+
for (const segment of segments.slice(0, -1)) {
|
|
42
|
+
const current = target[segment];
|
|
43
|
+
if (!isPlainJsonObject(current))
|
|
44
|
+
target[segment] = {};
|
|
45
|
+
target = target[segment];
|
|
46
|
+
}
|
|
47
|
+
target[segments.at(-1)] = value;
|
|
48
|
+
};
|
|
49
|
+
/** Payload Admin serializes upload fields as IDs. Resolve only the preview image
|
|
50
|
+
* inputs so the configured media URL callback receives the media document it expects. */
|
|
51
|
+
const hydratePreviewMedia = async ({ collection, config, document, locale, req, }) => {
|
|
52
|
+
if (!config)
|
|
53
|
+
return document;
|
|
54
|
+
const mediaCollection = config.collections[collection]?.media?.collection ?? config.media.collection;
|
|
55
|
+
const paths = ['seo.openGraph.image', 'seo.twitter.image'];
|
|
56
|
+
const mappedImage = config.collections[collection]?.fields?.image;
|
|
57
|
+
if (mappedImage)
|
|
58
|
+
paths.push(mappedImage);
|
|
59
|
+
await Promise.all(paths.map(async (path) => {
|
|
60
|
+
const id = relationId(readPath(document, path));
|
|
61
|
+
if (id === undefined)
|
|
62
|
+
return;
|
|
63
|
+
try {
|
|
64
|
+
const media = await req.payload.findByID({
|
|
65
|
+
collection: mediaCollection,
|
|
66
|
+
id,
|
|
67
|
+
locale,
|
|
68
|
+
fallbackLocale: false,
|
|
69
|
+
depth: 0,
|
|
70
|
+
overrideAccess: false,
|
|
71
|
+
req,
|
|
72
|
+
user: req.user,
|
|
73
|
+
});
|
|
74
|
+
writePath(document, path, media);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Keep the unresolved ID. The shared resolver will omit it safely.
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
return document;
|
|
81
|
+
};
|
|
82
|
+
const localeIsConfigured = (payload, locale) => {
|
|
83
|
+
const configured = payload.config?.localization?.locales;
|
|
84
|
+
// Payload has no locale registry when localization is disabled. In that
|
|
85
|
+
// mode the host may use its own fixed locale label, so only validate against
|
|
86
|
+
// a registry when one actually exists.
|
|
87
|
+
if (!configured?.length)
|
|
88
|
+
return true;
|
|
89
|
+
return configured.some((item) => (typeof item === 'string' ? item : item.code) === locale);
|
|
90
|
+
};
|
|
91
|
+
const hasPreviewAccess = async (req, collection, seoField, document) => {
|
|
92
|
+
const config = req.payload.config?.collections?.find((candidate) => candidate.slug === collection);
|
|
93
|
+
if (!config)
|
|
94
|
+
return false;
|
|
95
|
+
const collectionAccess = config.access?.read;
|
|
96
|
+
if (typeof collectionAccess === 'function') {
|
|
97
|
+
const allowed = await collectionAccess({ req });
|
|
98
|
+
// A query is safe only when an ID read below enforces it. Never use it to
|
|
99
|
+
// authorize an unsaved create preview.
|
|
100
|
+
if (allowed !== true && (!document || allowed === false))
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
const field = findField(config.fields, seoField);
|
|
104
|
+
const fieldAccess = field?.access?.read;
|
|
105
|
+
if (typeof fieldAccess === 'function' && await fieldAccess({ req, doc: document, data: document, siblingData: document }) !== true)
|
|
106
|
+
return false;
|
|
107
|
+
return true;
|
|
108
|
+
};
|
|
109
|
+
/** Resolves an authenticated Admin form's unsaved values with the production SEO resolver. */
|
|
110
|
+
export const createSeoPreviewEndpoint = (collection) => ({
|
|
111
|
+
path: '/seo-preview',
|
|
112
|
+
method: 'post',
|
|
113
|
+
handler: async (req) => {
|
|
114
|
+
if (!req.user)
|
|
115
|
+
return Response.json({ message: 'Unauthorized' }, { status: 401 });
|
|
116
|
+
try {
|
|
117
|
+
await canAccessAdmin({ req });
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return Response.json({ message: 'Forbidden' }, { status: 403 });
|
|
121
|
+
}
|
|
122
|
+
let body;
|
|
123
|
+
try {
|
|
124
|
+
body = await req.json?.();
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return Response.json({ message: 'Invalid preview request.' }, { status: 400 });
|
|
128
|
+
}
|
|
129
|
+
const input = object(body);
|
|
130
|
+
const document = object(input?.document);
|
|
131
|
+
const locale = typeof input?.locale === 'string' ? input.locale : undefined;
|
|
132
|
+
if (!document || locale === undefined || !localeIsConfigured(req.payload, locale))
|
|
133
|
+
return Response.json({ message: 'Invalid preview request.' }, { status: 400 });
|
|
134
|
+
const config = getSeoRuntimeConfig(req.payload);
|
|
135
|
+
if (!config?.collections[collection])
|
|
136
|
+
return Response.json({ message: 'Not found' }, { status: 404 });
|
|
137
|
+
const names = resolveSeoNames(config.names);
|
|
138
|
+
const id = document.id;
|
|
139
|
+
if (id !== undefined && typeof id !== 'string' && typeof id !== 'number')
|
|
140
|
+
return Response.json({ message: 'Invalid preview request.' }, { status: 400 });
|
|
141
|
+
let persisted;
|
|
142
|
+
if (id !== undefined) {
|
|
143
|
+
try {
|
|
144
|
+
// Admin previews must be able to resolve a draft-only document, but the
|
|
145
|
+
// Local API still applies the current user's collection access rules.
|
|
146
|
+
persisted = await req.payload.findByID({ collection, id, locale, fallbackLocale: false, draft: true, depth: 0, overrideAccess: false, req, user: req.user });
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
return Response.json({ message: 'Forbidden' }, { status: 403 });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (!(await hasPreviewAccess(req, collection, names.seoField, persisted)))
|
|
153
|
+
return Response.json({ message: 'Forbidden' }, { status: 403 });
|
|
154
|
+
const previewDocument = await hydratePreviewMedia({
|
|
155
|
+
collection,
|
|
156
|
+
config,
|
|
157
|
+
document: persisted ? merge(persisted, document) : document,
|
|
158
|
+
locale,
|
|
159
|
+
req,
|
|
160
|
+
});
|
|
161
|
+
return Response.json(await resolveSeoPreview({
|
|
162
|
+
payload: req.payload,
|
|
163
|
+
collection,
|
|
164
|
+
document: previewDocument,
|
|
165
|
+
locale,
|
|
166
|
+
}));
|
|
167
|
+
},
|
|
168
|
+
custom: { seo: { marker: SEO_PLUGIN_MARKER } },
|
|
169
|
+
});
|
|
170
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/endpoints/preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { ResolveDocumentUrl, ResolveLastModified, ResolveMediaUrl, ResolveRobotsSitemapUrls, ResolveSitemapChunkUrl, SeoAdminCustom, SeoCollectionConfig, SeoDocument, SeoDiagnostic, SeoDocumentFieldMappings, SeoDisabledPluginConfig, SeoEnabledPluginConfig, SeoGeneratedNames, SeoPluginAccess, SeoPluginConfig, SeoSchemaType, SeoSitemapConfig, SeoPayload, SeoRobotsDirectives, RobotsMode, CanonicalMode, TrailingSlashPolicy, SeoSocialMetadata, ResolvedEffectiveSeo, SeoPreview, ResolvedSeoMetadata, } from '../types.js';
|
|
2
|
+
export type { SeoRedirect } from '../helpers/redirects.js';
|
|
3
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exports/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,mBAAmB,GACpB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/exports/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Field, GroupField } from 'payload';
|
|
2
|
+
import { type SeoCollectionConfig } from '../types.js';
|
|
3
|
+
export declare const isSupportedVisualField: (field: Field) => boolean;
|
|
4
|
+
/** Creates the localized, marked SEO group attached to each enabled document. */
|
|
5
|
+
export declare const createSeoField: ({ collection, mediaCollection, name, trailingSlashPolicy, }: {
|
|
6
|
+
collection: SeoCollectionConfig;
|
|
7
|
+
mediaCollection: string;
|
|
8
|
+
name: string;
|
|
9
|
+
trailingSlashPolicy?: "always" | "never";
|
|
10
|
+
}) => GroupField;
|
|
11
|
+
//# sourceMappingURL=seo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/fields/seo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAa,MAAM,SAAS,CAAA;AAE3D,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAA;AA0CpB,eAAO,MAAM,sBAAsB,GAAI,OAAO,KAAK,KAAG,OACD,CAAA;AAmBrD,iFAAiF;AACjF,eAAO,MAAM,cAAc,GAAI,6DAK5B;IACD,UAAU,EAAE,mBAAmB,CAAA;IAC/B,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,mBAAmB,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CACzC,KAAG,UAiIH,CAAA"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { SEO_PLUGIN_MARKER, SEO_PREVIEWS_ADMIN_COMPONENT, SEO_RAW_JSON_ADMIN_COMPONENT, SEO_SCHEMA_VALUE_OVERRIDES_ADMIN_COMPONENT, } from '../types.js';
|
|
2
|
+
import { adminLabel, adminTabLabel, adminText } from '../admin/translations.js';
|
|
3
|
+
import { validateCanonicalUrl, validateJson } from '../utils/validation.js';
|
|
4
|
+
const localized = true;
|
|
5
|
+
const socialCards = [
|
|
6
|
+
{ label: adminLabel('summary'), value: 'summary' },
|
|
7
|
+
{ label: adminLabel('summaryLargeImage'), value: 'summary_large_image' },
|
|
8
|
+
];
|
|
9
|
+
const visualFieldTypes = new Set(['text', 'textarea', 'number', 'checkbox', 'select', 'date', 'upload']);
|
|
10
|
+
const schemaTypeIs = (seoField, data, ...types) => {
|
|
11
|
+
if (!data || typeof data !== 'object')
|
|
12
|
+
return false;
|
|
13
|
+
const seo = data[seoField];
|
|
14
|
+
if (!seo || typeof seo !== 'object')
|
|
15
|
+
return false;
|
|
16
|
+
const schema = seo.schema;
|
|
17
|
+
return Boolean(schema && typeof schema === 'object' && types.includes(schema.type));
|
|
18
|
+
};
|
|
19
|
+
const createBuiltInVisualFields = (seoField, imageCollection) => {
|
|
20
|
+
const when = (...types) => (data) => schemaTypeIs(seoField, data, ...types);
|
|
21
|
+
return [
|
|
22
|
+
{ name: 'name', type: 'text', label: adminLabel('name'), admin: { condition: when('WebPage', 'Product', 'Organization', 'LocalBusiness') } },
|
|
23
|
+
{ name: 'image', type: 'upload', label: adminLabel('image'), relationTo: imageCollection },
|
|
24
|
+
{ name: 'about', type: 'textarea', label: adminLabel('about'), admin: { condition: when('WebPage') } },
|
|
25
|
+
{ name: 'headline', type: 'text', label: adminLabel('headline'), admin: { condition: when('Article') } },
|
|
26
|
+
{ name: 'author', type: 'text', label: adminLabel('author'), admin: { condition: when('Article') } },
|
|
27
|
+
{ name: 'datePublished', type: 'date', label: adminLabel('datePublished'), admin: { condition: when('Article') } },
|
|
28
|
+
{ name: 'dateModified', type: 'date', label: adminLabel('dateModified'), admin: { condition: when('Article') } },
|
|
29
|
+
{ name: 'description', type: 'textarea', label: adminLabel('productDescription'), admin: { condition: when('Product') } },
|
|
30
|
+
{ name: 'sku', type: 'text', label: adminLabel('sku'), admin: { condition: when('Product') } },
|
|
31
|
+
{ name: 'brand', type: 'text', label: adminLabel('brand'), admin: { condition: when('Product') } },
|
|
32
|
+
{ name: 'price', type: 'number', label: adminLabel('price'), admin: { condition: when('Product') } },
|
|
33
|
+
{ name: 'priceCurrency', type: 'text', label: adminLabel('priceCurrency'), admin: { condition: when('Product') } },
|
|
34
|
+
{ name: 'telephone', type: 'text', label: adminLabel('telephone'), admin: { condition: when('LocalBusiness') } },
|
|
35
|
+
{ name: 'address', type: 'textarea', label: adminLabel('address'), admin: { condition: when('LocalBusiness') } },
|
|
36
|
+
{ name: 'question', type: 'text', label: adminLabel('question'), admin: { condition: when('FAQPage') } },
|
|
37
|
+
{ name: 'answer', type: 'textarea', label: adminLabel('answer'), admin: { condition: when('FAQPage') } },
|
|
38
|
+
];
|
|
39
|
+
};
|
|
40
|
+
export const isSupportedVisualField = (field) => 'name' in field && visualFieldTypes.has(field.type);
|
|
41
|
+
const schemaOptions = [
|
|
42
|
+
'WebPage',
|
|
43
|
+
'Article',
|
|
44
|
+
'Product',
|
|
45
|
+
'Organization',
|
|
46
|
+
'LocalBusiness',
|
|
47
|
+
'FAQPage',
|
|
48
|
+
].map((value) => ({ label: value, value }));
|
|
49
|
+
const uploadField = (name, relationTo) => ({
|
|
50
|
+
name,
|
|
51
|
+
type: 'upload',
|
|
52
|
+
label: adminLabel('image'),
|
|
53
|
+
relationTo,
|
|
54
|
+
localized,
|
|
55
|
+
});
|
|
56
|
+
/** Creates the localized, marked SEO group attached to each enabled document. */
|
|
57
|
+
export const createSeoField = ({ collection, mediaCollection, name, trailingSlashPolicy, }) => {
|
|
58
|
+
const imageCollection = collection.media?.collection ?? mediaCollection;
|
|
59
|
+
const customVisualFields = (collection.visualFields ?? []).map((field) => ({ ...field, localized }));
|
|
60
|
+
const visualFields = [...createBuiltInVisualFields(name, imageCollection), ...customVisualFields]
|
|
61
|
+
.reduce((fields, field) => {
|
|
62
|
+
const fieldName = 'name' in field ? field.name : undefined;
|
|
63
|
+
const index = fieldName ? fields.findIndex((candidate) => 'name' in candidate && candidate.name === fieldName) : -1;
|
|
64
|
+
if (index >= 0)
|
|
65
|
+
fields[index] = field;
|
|
66
|
+
else
|
|
67
|
+
fields.push(field);
|
|
68
|
+
return fields;
|
|
69
|
+
}, [])
|
|
70
|
+
.map((field) => ({ ...field, localized }));
|
|
71
|
+
return {
|
|
72
|
+
name,
|
|
73
|
+
type: 'group',
|
|
74
|
+
label: adminLabel('seo'),
|
|
75
|
+
...(collection.access ? { access: collection.access } : {}),
|
|
76
|
+
admin: { custom: { seo: { marker: SEO_PLUGIN_MARKER } } },
|
|
77
|
+
fields: [
|
|
78
|
+
{
|
|
79
|
+
type: 'tabs',
|
|
80
|
+
tabs: [
|
|
81
|
+
{
|
|
82
|
+
label: adminTabLabel('general'),
|
|
83
|
+
fields: [
|
|
84
|
+
{ name: 'title', type: 'text', label: adminLabel('title'), localized },
|
|
85
|
+
{ name: 'description', type: 'textarea', label: adminLabel('description'), localized },
|
|
86
|
+
{ name: 'focusKeyword', type: 'text', label: adminLabel('focusKeyword'), localized },
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
label: adminTabLabel('canonical'),
|
|
91
|
+
fields: [{
|
|
92
|
+
name: 'canonical', type: 'group', label: adminLabel('canonical'), fields: [
|
|
93
|
+
{ name: 'mode', type: 'select', label: adminLabel('canonicalMode'), localized, defaultValue: 'auto', required: true, options: [{ label: adminLabel('auto'), value: 'auto' }, { label: adminLabel('manual'), value: 'manual' }, { label: adminLabel('none'), value: 'none' }] },
|
|
94
|
+
{
|
|
95
|
+
name: 'url', type: 'text', label: adminLabel('canonicalUrl'), localized, validate: (value, { siblingData, req } = {}) => siblingData?.mode === 'manual' && !value
|
|
96
|
+
? adminText('validationManualCanonical', req?.i18n?.language)
|
|
97
|
+
: validateCanonicalUrl(value, { req }, trailingSlashPolicy),
|
|
98
|
+
admin: { condition: (_, siblingData) => siblingData?.mode === 'manual' },
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
}],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
label: adminTabLabel('robots'),
|
|
105
|
+
fields: [{
|
|
106
|
+
name: 'robots', type: 'group', label: adminLabel('robots'), fields: [
|
|
107
|
+
{
|
|
108
|
+
name: 'mode', type: 'select', label: adminLabel('robotsMode'), localized, defaultValue: 'inherit', required: true,
|
|
109
|
+
options: [
|
|
110
|
+
{ label: 'Inherit', value: 'inherit' }, { label: 'Index, follow', value: 'index-follow' },
|
|
111
|
+
{ label: 'No index, follow', value: 'noindex-follow' }, { label: 'Index, nofollow', value: 'index-nofollow' },
|
|
112
|
+
{ label: 'No index, nofollow', value: 'noindex-nofollow' }, { label: 'Custom directives', value: 'custom' },
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
{ name: 'directives', type: 'text', label: adminLabel('robots'), localized, admin: { condition: (_, siblingData) => siblingData?.mode === 'custom' } },
|
|
116
|
+
],
|
|
117
|
+
}],
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
label: adminTabLabel('openGraph'),
|
|
121
|
+
fields: [{
|
|
122
|
+
name: 'openGraph', type: 'group', label: adminLabel('openGraph'), fields: [
|
|
123
|
+
{ name: 'title', type: 'text', label: adminLabel('title'), localized },
|
|
124
|
+
{ name: 'description', type: 'textarea', label: adminLabel('description'), localized },
|
|
125
|
+
uploadField('image', imageCollection),
|
|
126
|
+
],
|
|
127
|
+
}],
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
label: adminTabLabel('twitter'),
|
|
131
|
+
fields: [{
|
|
132
|
+
name: 'twitter', type: 'group', label: adminLabel('twitter'), fields: [
|
|
133
|
+
{ name: 'title', type: 'text', label: adminLabel('title'), localized },
|
|
134
|
+
{ name: 'description', type: 'textarea', label: adminLabel('description'), localized },
|
|
135
|
+
uploadField('image', imageCollection),
|
|
136
|
+
{ name: 'card', type: 'select', label: adminLabel('card'), localized, options: socialCards },
|
|
137
|
+
{ name: 'site', type: 'text', label: adminLabel('twitter'), localized },
|
|
138
|
+
{ name: 'creator', type: 'text', label: adminLabel('author'), localized },
|
|
139
|
+
],
|
|
140
|
+
}],
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
label: adminTabLabel('schema'),
|
|
144
|
+
fields: [{
|
|
145
|
+
name: 'schema', type: 'group', label: adminLabel('schema'), fields: [
|
|
146
|
+
{ name: 'type', type: 'select', label: adminLabel('schemaType'), localized, defaultValue: collection.schemaType, required: true, options: schemaOptions },
|
|
147
|
+
{
|
|
148
|
+
name: 'values', type: 'group', label: adminLabel('schemaOverrides'), localized, fields: visualFields,
|
|
149
|
+
admin: {
|
|
150
|
+
components: { Field: SEO_SCHEMA_VALUE_OVERRIDES_ADMIN_COMPONENT },
|
|
151
|
+
custom: { seo: { schemaMappings: collection.schema ?? {} } },
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'rawJson', type: 'textarea', label: adminLabel('rawJson'), localized, validate: validateJson,
|
|
156
|
+
admin: {
|
|
157
|
+
components: { Field: SEO_RAW_JSON_ADMIN_COMPONENT },
|
|
158
|
+
custom: {
|
|
159
|
+
seo: {
|
|
160
|
+
collectionSchema: collection.schema ?? {},
|
|
161
|
+
defaultType: collection.schemaType,
|
|
162
|
+
marker: SEO_PLUGIN_MARKER,
|
|
163
|
+
seoField: name,
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
}],
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
label: adminTabLabel('previews'),
|
|
173
|
+
fields: [{
|
|
174
|
+
name: 'previews',
|
|
175
|
+
type: 'ui',
|
|
176
|
+
admin: {
|
|
177
|
+
components: { Field: SEO_PREVIEWS_ADMIN_COMPONENT },
|
|
178
|
+
custom: { seo: { seoField: name } },
|
|
179
|
+
},
|
|
180
|
+
}],
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
//# sourceMappingURL=seo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/fields/seo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GlobalConfig } from 'payload';
|
|
2
|
+
import { type SeoPluginAccess } from '../types.js';
|
|
3
|
+
export declare const createSeoSettingsGlobal: ({ access, slug, mediaCollection }: {
|
|
4
|
+
access?: SeoPluginAccess["settings"];
|
|
5
|
+
slug: string;
|
|
6
|
+
mediaCollection: string;
|
|
7
|
+
}) => GlobalConfig;
|
|
8
|
+
//# sourceMappingURL=seo-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-settings.d.ts","sourceRoot":"","sources":["../../src/globals/seo-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAIrE,eAAO,MAAM,uBAAuB,GAAI,mCAAmC;IAAE,MAAM,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,KAAG,YAoE3J,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { SEO_PLUGIN_MARKER } from '../types.js';
|
|
2
|
+
import { adminLabel, adminTabLabel } from '../admin/translations.js';
|
|
3
|
+
import { validateAbsoluteHttpUrl, validateRobotsToken } from '../utils/validation.js';
|
|
4
|
+
export const createSeoSettingsGlobal = ({ access, slug, mediaCollection }) => ({
|
|
5
|
+
slug,
|
|
6
|
+
label: adminLabel('seoSettings'),
|
|
7
|
+
access: { read: access?.read ?? (() => false), update: access?.update ?? (() => false) },
|
|
8
|
+
admin: {
|
|
9
|
+
custom: { seo: { marker: SEO_PLUGIN_MARKER } },
|
|
10
|
+
group: "SEO"
|
|
11
|
+
},
|
|
12
|
+
fields: [
|
|
13
|
+
{
|
|
14
|
+
type: 'tabs',
|
|
15
|
+
tabs: [
|
|
16
|
+
{
|
|
17
|
+
label: adminTabLabel('siteDefaults'),
|
|
18
|
+
fields: [
|
|
19
|
+
{ name: 'siteName', type: 'text', label: adminLabel('siteName'), localized: true },
|
|
20
|
+
{ name: 'titleTemplate', type: 'text', label: adminLabel('titleTemplate'), localized: true },
|
|
21
|
+
{ name: 'defaultDescription', type: 'textarea', label: adminLabel('defaultDescription'), localized: true },
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: adminTabLabel('socialDefaults'),
|
|
26
|
+
fields: [
|
|
27
|
+
{ name: 'defaultOpenGraphImage', type: 'upload', label: adminLabel('defaultOpenGraphImage'), relationTo: mediaCollection, localized: true },
|
|
28
|
+
{ name: 'defaultTwitterCard', type: 'select', label: adminLabel('defaultTwitterCard'), localized: true, options: [{ label: adminLabel('summary'), value: 'summary' }, { label: adminLabel('summaryLargeImage'), value: 'summary_large_image' }] },
|
|
29
|
+
{ name: 'defaultOpenGraphType', type: 'text', label: adminLabel('openGraph'), localized: true },
|
|
30
|
+
{ name: 'defaultTwitterSite', type: 'text', label: adminLabel('twitter'), localized: true },
|
|
31
|
+
{ name: 'defaultTwitterCreator', type: 'text', label: adminLabel('author'), localized: true },
|
|
32
|
+
{ name: 'defaultLocale', type: 'text', label: adminLabel('siteDefaults'), localized: true },
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
label: adminTabLabel('defaultRobots'),
|
|
37
|
+
fields: [{
|
|
38
|
+
name: 'defaultRobots', type: 'group', label: adminLabel('defaultRobots'), localized: true, fields: [
|
|
39
|
+
{ name: 'mode', type: 'select', label: adminLabel('defaultRobots'), required: true, defaultValue: 'index-follow', options: [{ label: 'Index, follow', value: 'index-follow' }, { label: 'No index, follow', value: 'noindex-follow' }, { label: 'Index, nofollow', value: 'index-nofollow' }, { label: 'No index, nofollow', value: 'noindex-nofollow' }, { label: 'Custom directives', value: 'custom' }] },
|
|
40
|
+
{ name: 'directives', type: 'text', label: adminLabel('robots'), admin: { condition: (_, siblingData) => siblingData?.mode === 'custom' } },
|
|
41
|
+
]
|
|
42
|
+
}],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
label: adminTabLabel('organizationSchema'),
|
|
46
|
+
fields: [{
|
|
47
|
+
name: 'organizationSchema', type: 'group', label: adminLabel('organizationSchema'), localized: true, fields: [
|
|
48
|
+
{ name: 'name', type: 'text', label: adminLabel('organizationName') }, { name: 'url', type: 'text', label: adminLabel('organizationUrl'), validate: validateAbsoluteHttpUrl }, { name: 'logo', type: 'upload', label: adminLabel('organizationLogo'), relationTo: mediaCollection },
|
|
49
|
+
{ name: 'sameAs', type: 'array', label: adminLabel('organizationSchema'), fields: [{ name: 'url', type: 'text', label: adminLabel('organizationUrl'), validate: validateAbsoluteHttpUrl }] },
|
|
50
|
+
]
|
|
51
|
+
}],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
label: adminTabLabel('robotsTxt'),
|
|
55
|
+
fields: [{
|
|
56
|
+
name: 'robots', type: 'group', label: adminLabel('robots'), localized: true, fields: [
|
|
57
|
+
{ name: 'mode', type: 'select', label: adminLabel('robotsMode'), required: true, defaultValue: 'generated', options: [{ label: adminLabel('generated'), value: 'generated' }, { label: adminLabel('override'), value: 'override' }] },
|
|
58
|
+
{
|
|
59
|
+
name: 'groups', type: 'array', label: adminLabel('groups'), fields: [
|
|
60
|
+
{ name: 'userAgent', type: 'text', label: adminLabel('userAgent'), required: true, validate: validateRobotsToken },
|
|
61
|
+
{ name: 'allow', type: 'array', label: adminLabel('allow'), fields: [{ name: 'path', type: 'text', label: adminLabel('path'), validate: validateRobotsToken }] },
|
|
62
|
+
{ name: 'disallow', type: 'array', label: adminLabel('disallow'), fields: [{ name: 'path', type: 'text', label: adminLabel('path'), validate: validateRobotsToken }] },
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
{ name: 'overrideText', type: 'textarea', label: adminLabel('overrideText'), admin: { condition: (_, siblingData) => siblingData?.mode === 'override' } },
|
|
66
|
+
]
|
|
67
|
+
}],
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=seo-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-settings.js","sourceRoot":"","sources":["../../src/globals/seo-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SeoEnabledPluginConfig, SeoPayload } from '../types.js';
|
|
2
|
+
export declare const SEO_RUNTIME_CONFIG_KEY = "@sittari/payload-seo/config";
|
|
3
|
+
/** Gets the server-only plugin configuration retained on Payload's config object. */
|
|
4
|
+
export declare const getSeoRuntimeConfig: (payload: SeoPayload) => SeoEnabledPluginConfig | undefined;
|
|
5
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/helpers/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAErE,eAAO,MAAM,sBAAsB,gCAAgC,CAAA;AAEnE,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,GAAI,SAAS,UAAU,KAAG,sBAAsB,GAAG,SAGlF,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const SEO_RUNTIME_CONFIG_KEY = '@sittari/payload-seo/config';
|
|
2
|
+
/** Gets the server-only plugin configuration retained on Payload's config object. */
|
|
3
|
+
export const getSeoRuntimeConfig = (payload) => {
|
|
4
|
+
const value = payload.config?.custom?.[SEO_RUNTIME_CONFIG_KEY];
|
|
5
|
+
return value !== null && typeof value === 'object' ? value : undefined;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/helpers/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAA;AAEnE,qFAAqF;AACrF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAmB,EAAsC,EAAE;IAC7F,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,sBAAsB,CAAC,CAAA;IAC9D,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAA+B,CAAC,CAAC,CAAC,SAAS,CAAA;AAClG,CAAC,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ResolvedSeoMetadata, SeoDocument, SeoPayload } from '../types.js';
|
|
2
|
+
import { resolveSeoNames } from '../plugin.js';
|
|
3
|
+
import { getSeoRuntimeConfig } from './config.js';
|
|
4
|
+
type DocumentInput = {
|
|
5
|
+
document: SeoDocument;
|
|
6
|
+
id?: never;
|
|
7
|
+
} | {
|
|
8
|
+
document?: never;
|
|
9
|
+
id: string | number;
|
|
10
|
+
};
|
|
11
|
+
/** Shared translation eligibility used by metadata and XML sitemap alternates. */
|
|
12
|
+
export declare const resolveSeoAlternates: ({ payload, collection, locale, document, config, names, settings, }: {
|
|
13
|
+
payload: SeoPayload;
|
|
14
|
+
collection: string;
|
|
15
|
+
locale: string;
|
|
16
|
+
document: SeoDocument;
|
|
17
|
+
config: NonNullable<ReturnType<typeof getSeoRuntimeConfig>>;
|
|
18
|
+
names: ReturnType<typeof resolveSeoNames>;
|
|
19
|
+
settings: SeoDocument;
|
|
20
|
+
}) => Promise<Record<string, string>>;
|
|
21
|
+
export declare const resolveSeoMetadata: ({ payload, collection, locale, ...input }: {
|
|
22
|
+
payload: SeoPayload;
|
|
23
|
+
collection: string;
|
|
24
|
+
locale: string;
|
|
25
|
+
} & DocumentInput) => Promise<ResolvedSeoMetadata>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/helpers/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAI9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,EAAE,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAQtG,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,GAAU,qEAQxC;IACD,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,WAAW,CAAA;IACrB,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAA;IAC3D,KAAK,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAA;IACzC,QAAQ,EAAE,WAAW,CAAA;CACtB,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAejC,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,2CAA2C;IAClF,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,aAAa,KAAG,OAAO,CAAC,mBAAmB,CAe9C,CAAA"}
|