@payloadcms/plugin-seo 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (_) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __importDefault = (this && this.__importDefault) || function (mod) {
73
+ return (mod && mod.__esModule) ? mod : { "default": mod };
74
+ };
75
+ Object.defineProperty(exports, "__esModule", { value: true });
76
+ exports.getMetaTitleField = exports.MetaTitle = void 0;
77
+ var react_1 = __importStar(require("react"));
78
+ var Input_1 = __importDefault(require("payload/dist/admin/components/forms/field-types/Text/Input"));
79
+ var forms_1 = require("payload/components/forms");
80
+ var LengthIndicator_1 = require("../ui/LengthIndicator");
81
+ var defaults_1 = require("../defaults");
82
+ var _a = defaults_1.defaults.title, minLength = _a.minLength, maxLength = _a.maxLength;
83
+ var MetaTitle = function (props) {
84
+ var _a = props || {}, label = _a.label, name = _a.name, path = _a.path, seoConfig = _a.seoConfig; // TODO: this typing is temporary until payload types are updated for custom field props
85
+ var field = (0, forms_1.useField)({
86
+ label: label,
87
+ name: name,
88
+ path: path
89
+ });
90
+ var fields = (0, forms_1.useWatchForm)().fields;
91
+ var value = field.value, setValue = field.setValue, showError = field.showError;
92
+ var regenerateTitle = (0, react_1.useCallback)(function () {
93
+ var generateTitle = seoConfig.generateTitle;
94
+ var getTitle = function () { return __awaiter(void 0, void 0, void 0, function () {
95
+ var generatedTitle;
96
+ return __generator(this, function (_a) {
97
+ switch (_a.label) {
98
+ case 0:
99
+ if (!(typeof generateTitle === 'function')) return [3 /*break*/, 2];
100
+ return [4 /*yield*/, generateTitle({ doc: __assign({}, fields) })];
101
+ case 1:
102
+ generatedTitle = _a.sent();
103
+ _a.label = 2;
104
+ case 2:
105
+ setValue(generatedTitle);
106
+ return [2 /*return*/];
107
+ }
108
+ });
109
+ }); };
110
+ getTitle();
111
+ }, [
112
+ fields,
113
+ setValue,
114
+ seoConfig
115
+ ]);
116
+ return (react_1.default.createElement("div", { style: {
117
+ marginBottom: '20px',
118
+ } },
119
+ react_1.default.createElement("div", { style: {
120
+ marginBottom: '5px',
121
+ position: 'relative',
122
+ } },
123
+ react_1.default.createElement("div", null,
124
+ label,
125
+ "\u00A0 \u2014 \u00A0",
126
+ react_1.default.createElement("button", { onClick: regenerateTitle, type: "button", style: {
127
+ padding: 0,
128
+ background: 'none',
129
+ border: 'none',
130
+ backgroundColor: 'transparent',
131
+ cursor: 'pointer',
132
+ textDecoration: 'underline',
133
+ } }, "Auto-generate")),
134
+ react_1.default.createElement("div", { style: {
135
+ color: '#9A9A9A',
136
+ } }, "This should be between ".concat(minLength, " and ").concat(maxLength, " characters. Auto-generation will format a title using the page title. For help in writing quality meta titles, see "),
137
+ react_1.default.createElement("a", { href: "https://developers.google.com/search/docs/advanced/appearance/title-link#page-titles", rel: "noopener noreferrer", target: "_blank", style: {
138
+ color: '-webkit-link',
139
+ textDecoration: 'none',
140
+ } }, "best practices"),
141
+ ".")),
142
+ react_1.default.createElement("div", { style: {
143
+ position: 'relative',
144
+ marginBottom: '10px',
145
+ } },
146
+ react_1.default.createElement(Input_1.default, { path: name, name: name, onChange: setValue, value: value, showError: showError, style: {
147
+ marginBottom: 0
148
+ } })),
149
+ react_1.default.createElement("div", { style: {
150
+ display: 'flex',
151
+ alignItems: 'center',
152
+ width: '100%',
153
+ } },
154
+ react_1.default.createElement(LengthIndicator_1.LengthIndicator, { text: value, minLength: minLength, maxLength: maxLength }))));
155
+ };
156
+ exports.MetaTitle = MetaTitle;
157
+ var getMetaTitleField = function (props) { return (react_1.default.createElement(exports.MetaTitle, __assign({}, props))); };
158
+ exports.getMetaTitleField = getMetaTitleField;
159
+ //# sourceMappingURL=MetaTitle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaTitle.js","sourceRoot":"","sources":["../../src/fields/MetaTitle.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Config } from 'payload/config';
2
+ import { SEOConfig } from './types';
3
+ declare const seo: (seoConfig: SEOConfig) => (config: Config) => Config;
4
+ export default seo;
package/dist/index.js ADDED
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ var MetaDescription_1 = require("./fields/MetaDescription");
24
+ var Overview_1 = require("./ui/Overview");
25
+ var MetaTitle_1 = require("./fields/MetaTitle");
26
+ var Preview_1 = require("./ui/Preview");
27
+ var MetaImage_1 = require("./fields/MetaImage");
28
+ var seo = function (seoConfig) { return function (config) {
29
+ var _a;
30
+ var seoFields = [
31
+ {
32
+ name: 'meta',
33
+ label: 'SEO',
34
+ type: 'group',
35
+ fields: __spreadArray(__spreadArray([
36
+ {
37
+ name: 'overview',
38
+ label: 'Overview',
39
+ type: 'ui',
40
+ admin: {
41
+ components: {
42
+ Field: Overview_1.Overview,
43
+ },
44
+ },
45
+ },
46
+ {
47
+ name: 'title',
48
+ type: 'text',
49
+ admin: {
50
+ components: {
51
+ Field: function (props) { return (0, MetaTitle_1.getMetaTitleField)(__assign(__assign({}, props), { seoConfig: seoConfig })); },
52
+ },
53
+ },
54
+ },
55
+ {
56
+ name: 'description',
57
+ type: 'textarea',
58
+ admin: {
59
+ components: {
60
+ Field: function (props) { return (0, MetaDescription_1.getMetaDescriptionField)(__assign(__assign({}, props), { seoConfig: seoConfig })); },
61
+ },
62
+ },
63
+ }
64
+ ], (seoConfig === null || seoConfig === void 0 ? void 0 : seoConfig.uploadsCollection) ? [{
65
+ name: 'image',
66
+ label: 'Meta Image',
67
+ type: 'upload',
68
+ relationTo: seoConfig === null || seoConfig === void 0 ? void 0 : seoConfig.uploadsCollection,
69
+ admin: {
70
+ description: 'Maximum upload file size: 12MB. Recommended file size for images is <500KB.',
71
+ components: {
72
+ Field: function (props) { return (0, MetaImage_1.getMetaImageField)(__assign(__assign({}, props), { seoConfig: seoConfig })); },
73
+ },
74
+ },
75
+ }] : [], true), [
76
+ {
77
+ name: 'preview',
78
+ label: 'Preview',
79
+ type: 'ui',
80
+ admin: {
81
+ components: {
82
+ Field: function (props) { return (0, Preview_1.getPreviewField)(__assign(__assign({}, props), { seoConfig: seoConfig })); },
83
+ },
84
+ },
85
+ },
86
+ ], false)
87
+ }
88
+ ];
89
+ return (__assign(__assign({}, config), { collections: ((_a = config.collections) === null || _a === void 0 ? void 0 : _a.map(function (collection) {
90
+ var _a;
91
+ var slug = collection.slug;
92
+ var isEnabled = (_a = seoConfig === null || seoConfig === void 0 ? void 0 : seoConfig.collections) === null || _a === void 0 ? void 0 : _a.includes(slug);
93
+ if (isEnabled) {
94
+ return (__assign(__assign({}, collection), { fields: __spreadArray(__spreadArray([], (collection === null || collection === void 0 ? void 0 : collection.fields) || [], true), seoFields, true) }));
95
+ }
96
+ return collection;
97
+ })) || [] }));
98
+ }; };
99
+ exports.default = seo;
100
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AACA,4DAAmE;AACnE,0CAAyC;AACzC,gDAAuD;AACvD,wCAA+C;AAC/C,gDAAuD;AAIvD,IAAM,GAAG,GAAG,UAAC,SAAoB,IAAK,OAAA,UAAC,MAAc;;IACnD,IAAM,SAAS,GAAY;QACzB;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,OAAO;YACb,MAAM;gBACJ;oBACE,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,UAAU;oBACjB,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE;wBACL,UAAU,EAAE;4BACV,KAAK,EAAE,mBAAQ;yBAChB;qBACF;iBACF;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE;wBACL,UAAU,EAAE;4BACV,KAAK,EAAE,UAAC,KAAK,IAAK,OAAA,IAAA,6BAAiB,wBAAM,KAAK,KAAE,SAAS,WAAA,IAAG,EAA1C,CAA0C;yBAC7D;qBACF;iBACF;gBACD;oBACE,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE;wBACL,UAAU,EAAE;4BACV,KAAK,EAAE,UAAC,KAAK,IAAK,OAAA,IAAA,yCAAuB,wBAAM,KAAK,KAAE,SAAS,WAAA,IAAG,EAAhD,CAAgD;yBACnE;qBACF;iBACF;eACE,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,iBAAiB,EAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,YAAY;oBACnB,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,iBAAiB;oBACxC,KAAK,EAAE;wBACL,WAAW,EAAE,6EAA6E;wBAC1F,UAAU,EAAE;4BACV,KAAK,EAAE,UAAC,KAAK,IAAK,OAAA,IAAA,6BAAiB,wBAAM,KAAK,KAAE,SAAS,WAAA,IAAG,EAA1C,CAA0C;yBAC7D;qBACF;iBACO,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChB;oBACE,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,SAAS;oBAChB,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE;wBACL,UAAU,EAAE;4BACV,KAAK,EAAE,UAAC,KAAK,IAAK,OAAA,IAAA,yBAAe,wBAAM,KAAK,KAAE,SAAS,WAAA,IAAG,EAAxC,CAAwC;yBAC3D;qBACF;iBACF;qBACF;SACF;KACF,CAAA;IAED,OAAO,uBACF,MAAM,KACT,WAAW,EAAE,CAAA,MAAA,MAAM,CAAC,WAAW,0CAAE,GAAG,CAAC,UAAC,UAAU;;YACtC,IAAA,IAAI,GAAK,UAAU,KAAf,CAAgB;YAC5B,IAAM,SAAS,GAAG,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,WAAW,0CAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEzD,IAAI,SAAS,EAAE;gBACb,OAAO,uBACF,UAAU,KACb,MAAM,kCACD,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,KAAI,EAAE,SACxB,SAAS,WAEd,CAAA;aACH;YACD,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,KAAI,EAAE,IACR,CAAA;AACJ,CAAC,EA/EqC,CA+ErC,CAAC;AAEF,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { Field } from "payload/dist/fields/config/types";
2
+ export declare type SEOConfig = {
3
+ collections?: string[];
4
+ uploadsCollection?: string;
5
+ fields?: Partial<Field>[];
6
+ generateTitle?: (args: {
7
+ doc: any;
8
+ }) => string | Promise<string>;
9
+ generateDescription?: (args: {
10
+ doc: any;
11
+ }) => string | Promise<string>;
12
+ generateImage?: (args: {
13
+ doc: any;
14
+ }) => string | Promise<string>;
15
+ generateURL?: (args: {
16
+ doc: any;
17
+ }) => string | Promise<string>;
18
+ };
19
+ export declare type Meta = {
20
+ title?: string;
21
+ description?: string;
22
+ keywords?: string;
23
+ image?: any;
24
+ };
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export declare const LengthIndicator: React.FC<{
3
+ text?: string;
4
+ minLength?: number;
5
+ maxLength?: number;
6
+ }>;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.LengthIndicator = void 0;
27
+ /* eslint-disable react/require-default-props */
28
+ /* eslint-disable import/no-extraneous-dependencies */
29
+ /* eslint-disable no-use-before-define */
30
+ var react_1 = __importStar(require("react"));
31
+ var Pill_1 = require("./Pill");
32
+ var LengthIndicator = function (props) {
33
+ var text = props.text, _a = props.minLength, minLength = _a === void 0 ? 0 : _a, _b = props.maxLength, maxLength = _b === void 0 ? 0 : _b;
34
+ var _c = (0, react_1.useState)({
35
+ color: '',
36
+ backgroundColor: '',
37
+ }), labelStyle = _c[0], setLabelStyle = _c[1];
38
+ var _d = (0, react_1.useState)(''), label = _d[0], setLabel = _d[1];
39
+ var _e = (0, react_1.useState)(0), barWidth = _e[0], setBarWidth = _e[1];
40
+ (0, react_1.useEffect)(function () {
41
+ var textLength = (text === null || text === void 0 ? void 0 : text.length) || 0;
42
+ if (textLength === 0) {
43
+ setLabel('Missing');
44
+ setLabelStyle({
45
+ backgroundColor: 'red',
46
+ color: 'white',
47
+ });
48
+ setBarWidth(0);
49
+ }
50
+ else {
51
+ var progress = (textLength - minLength) / (maxLength - minLength);
52
+ if (progress < 0) {
53
+ var ratioUntilMin = textLength / minLength;
54
+ if (ratioUntilMin > 0.9) {
55
+ setLabel('Almost there');
56
+ setLabelStyle({
57
+ backgroundColor: 'orange',
58
+ color: 'white',
59
+ });
60
+ }
61
+ else {
62
+ setLabel('Too short');
63
+ setLabelStyle({
64
+ backgroundColor: 'orangered',
65
+ color: 'white',
66
+ });
67
+ }
68
+ setBarWidth(ratioUntilMin);
69
+ }
70
+ if (progress >= 0 && progress <= 1) {
71
+ setLabel('Good');
72
+ setLabelStyle({
73
+ backgroundColor: 'green',
74
+ color: 'white',
75
+ });
76
+ setBarWidth(progress);
77
+ }
78
+ if (progress > 1) {
79
+ setLabel('Too long');
80
+ setLabelStyle({
81
+ backgroundColor: 'red',
82
+ color: 'white',
83
+ });
84
+ setBarWidth(1);
85
+ }
86
+ }
87
+ }, [
88
+ minLength,
89
+ maxLength,
90
+ text,
91
+ ]);
92
+ var textLength = (text === null || text === void 0 ? void 0 : text.length) || 0;
93
+ var charsUntilMax = maxLength - textLength;
94
+ var charsUntilMin = minLength - textLength;
95
+ return (react_1.default.createElement("div", { style: {
96
+ width: '100%',
97
+ display: 'flex',
98
+ alignItems: 'center',
99
+ } },
100
+ react_1.default.createElement(Pill_1.Pill, { label: label, color: labelStyle.color, backgroundColor: labelStyle.backgroundColor }),
101
+ react_1.default.createElement("div", { style: {
102
+ marginRight: '10px',
103
+ whiteSpace: 'nowrap',
104
+ flexShrink: 0,
105
+ lineHeight: 1
106
+ } },
107
+ react_1.default.createElement("small", null, "".concat((text === null || text === void 0 ? void 0 : text.length) || 0, "/").concat(minLength, "-").concat(maxLength, " chars, "),
108
+ (textLength === 0 || charsUntilMin > 0) && (react_1.default.createElement(react_1.Fragment, null, "".concat(charsUntilMin, " to go"))),
109
+ charsUntilMin <= 0 && charsUntilMax >= 0 && (react_1.default.createElement(react_1.Fragment, null, "".concat(charsUntilMax, " left over"))),
110
+ charsUntilMax < 0 && (react_1.default.createElement(react_1.Fragment, null, "".concat(charsUntilMax * -1, " too many"))))),
111
+ react_1.default.createElement("div", { style: {
112
+ height: '2px',
113
+ width: '100%',
114
+ backgroundColor: '#F3F3F3',
115
+ position: 'relative',
116
+ } },
117
+ react_1.default.createElement("div", { style: {
118
+ height: '100%',
119
+ width: "".concat(barWidth * 100, "%"),
120
+ backgroundColor: labelStyle.backgroundColor,
121
+ position: 'absolute',
122
+ left: 0,
123
+ top: 0,
124
+ } }))));
125
+ };
126
+ exports.LengthIndicator = LengthIndicator;
127
+ //# sourceMappingURL=LengthIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LengthIndicator.js","sourceRoot":"","sources":["../../src/ui/LengthIndicator.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const Overview: React.FC;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Overview = void 0;
27
+ // import { Button } from 'payload/components';
28
+ var forms_1 = require("payload/components/forms");
29
+ var react_1 = __importStar(require("react"));
30
+ var defaults_1 = require("../defaults");
31
+ var _a = defaults_1.defaults.title, minTitle = _a.minLength, maxTitle = _a.maxLength, _b = defaults_1.defaults.description, minDesc = _b.minLength, maxDesc = _b.maxLength;
32
+ var Overview = function () {
33
+ var _a = (0, forms_1.useForm)(), dispatchFields = _a.dispatchFields, getFields = _a.getFields;
34
+ var _b = (0, forms_1.useWatchForm)().fields, _c = _b["meta.title"], _d = _c === void 0 ? {} : _c, metaTitle = _d.value, _e = _b["meta.description"], _f = _e === void 0 ? {} : _e, metaDesc = _f.value, _g = _b["meta.image"], _h = _g === void 0 ? {} : _g, metaImage = _h.value;
35
+ var _j = (0, react_1.useState)(), titleIsValid = _j[0], setTitleIsValid = _j[1];
36
+ var _k = (0, react_1.useState)(), descIsValid = _k[0], setDescIsValid = _k[1];
37
+ var _l = (0, react_1.useState)(), imageIsValid = _l[0], setImageIsValid = _l[1];
38
+ var resetAll = (0, react_1.useCallback)(function () {
39
+ var fields = getFields();
40
+ var fieldsWithoutMeta = fields;
41
+ fieldsWithoutMeta['meta.title'].value = '';
42
+ fieldsWithoutMeta['meta.description'].value = '';
43
+ fieldsWithoutMeta['meta.image'].value = '';
44
+ dispatchFields(fieldsWithoutMeta);
45
+ }, [
46
+ dispatchFields,
47
+ getFields,
48
+ ]);
49
+ (0, react_1.useEffect)(function () {
50
+ if (typeof metaTitle === 'string')
51
+ setTitleIsValid(metaTitle.length >= minTitle && metaTitle.length <= maxTitle);
52
+ if (typeof metaDesc === 'string')
53
+ setDescIsValid(metaDesc.length >= minDesc && metaDesc.length <= maxDesc);
54
+ setImageIsValid(Boolean(metaImage));
55
+ }, [
56
+ metaTitle,
57
+ metaDesc,
58
+ metaImage,
59
+ ]);
60
+ var testResults = [
61
+ titleIsValid,
62
+ descIsValid,
63
+ imageIsValid,
64
+ ];
65
+ var numberOfPasses = testResults.filter(Boolean).length;
66
+ return (react_1.default.createElement("div", { style: {
67
+ marginBottom: '20px',
68
+ } },
69
+ react_1.default.createElement("div", null, "".concat(numberOfPasses, "/").concat(testResults.length, " checks are passing"))));
70
+ };
71
+ exports.Overview = Overview;
72
+ //# sourceMappingURL=Overview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overview.js","sourceRoot":"","sources":["../../src/ui/Overview.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA+C;AAC/C,kDAAiE;AAEjE,6CAAgE;AAChE,wCAAuC;AAGrC,IAAA,KAQE,mBAAQ,MALT,EAFY,QAAQ,eAAA,EACR,QAAQ,eAAA,EAErB,KAIE,mBAAQ,YADT,EAFY,OAAO,eAAA,EACP,OAAO,eACnB,CACU;AAEN,IAAM,QAAQ,GAAa;IAC1B,IAAA,KAGF,IAAA,eAAO,GAAE,EAFX,cAAc,oBAAA,EACd,SAAS,eACE,CAAC;IAGZ,IAAA,KAWE,IAAA,oBAAY,GAAE,OADf,EATC,qBAEe,EAFf,qBAEI,EAAW,KAAA,EADN,SAAS,WAAA,EAElB,2BAEe,EAFf,qBAEI,EAAW,KAAA,EADN,QAAQ,WAAA,EAEjB,qBAEe,EAFf,qBAEI,EAAW,KAAA,EADN,SAAS,WAEnB,CACgB;IAEb,IAAA,KAAkC,IAAA,gBAAQ,GAAuB,EAAhE,YAAY,QAAA,EAAE,eAAe,QAAmC,CAAC;IAClE,IAAA,KAAgC,IAAA,gBAAQ,GAAuB,EAA9D,WAAW,QAAA,EAAE,cAAc,QAAmC,CAAC;IAChE,IAAA,KAAkC,IAAA,gBAAQ,GAAuB,EAAhE,YAAY,QAAA,EAAE,eAAe,QAAmC,CAAC;IAExE,IAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC;QAC3B,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAM,iBAAiB,GAAG,MAAM,CAAC;QACjC,iBAAiB,CAAC,YAAY,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC3C,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACjD,iBAAiB,CAAC,YAAY,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC3C,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC,EAAE;QACD,cAAc;QACd,SAAS;KACV,CAAC,CAAC;IAEH,IAAA,iBAAS,EAAC;QACR,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,eAAe,CAAC,SAAS,CAAC,MAAM,IAAI,QAAQ,IAAI,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC;QACjH,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,cAAc,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,IAAI,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;QAC3G,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,CAAC,EAAE;QACD,SAAS;QACT,QAAQ;QACR,SAAS;KACV,CAAC,CAAC;IAEH,IAAM,WAAW,GAAG;QAClB,YAAY;QACZ,WAAW;QACX,YAAY;KACb,CAAC;IAEF,IAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAE1D,OAAO,CACL,uCACE,KAAK,EAAE;YACL,YAAY,EAAE,MAAM;SACrB;QAED,2CACG,UAAG,cAAc,cAAI,WAAW,CAAC,MAAM,wBAAqB,CACzD,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAjEW,QAAA,QAAQ,YAiEnB"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export declare const Pill: React.FC<{
3
+ backgroundColor: string;
4
+ color: string;
5
+ label: string;
6
+ }>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Pill = void 0;
7
+ /* eslint-disable no-use-before-define */
8
+ /* eslint-disable import/no-extraneous-dependencies */
9
+ var react_1 = __importDefault(require("react"));
10
+ var Pill = function (props) {
11
+ var backgroundColor = props.backgroundColor, color = props.color, label = props.label;
12
+ return (react_1.default.createElement("div", { style: {
13
+ padding: '4px 6px',
14
+ backgroundColor: backgroundColor,
15
+ color: color,
16
+ borderRadius: '2px',
17
+ marginRight: '10px',
18
+ whiteSpace: 'nowrap',
19
+ flexShrink: 0,
20
+ lineHeight: 1,
21
+ } },
22
+ react_1.default.createElement("small", null, label)));
23
+ };
24
+ exports.Pill = Pill;
25
+ //# sourceMappingURL=Pill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pill.js","sourceRoot":"","sources":["../../src/ui/Pill.tsx"],"names":[],"mappings":";;;;;;AAAA,yCAAyC;AACzC,sDAAsD;AACtD,gDAA0B;AAEnB,IAAM,IAAI,GAIZ,UAAC,KAAK;IAEP,IAAA,eAAe,GAGb,KAAK,gBAHQ,EACf,KAAK,GAEH,KAAK,MAFF,EACL,KAAK,GACH,KAAK,MADF,CACG;IAEV,OAAO,CACL,uCACE,KAAK,EAAE;YACL,OAAO,EAAE,SAAS;YAClB,eAAe,iBAAA;YACf,KAAK,OAAA;YACL,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,MAAM;YACnB,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;SACd;QAED,6CACG,KAAK,CACA,CACJ,CACP,CAAC;AACJ,CAAC,CAAC;AA7BW,QAAA,IAAI,QA6Bf"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { Field } from 'payload/dist/admin/components/forms/Form/types';
3
+ import { SEOConfig } from '../types';
4
+ declare type PreviewFieldWithProps = Field & {
5
+ seoConfig: SEOConfig;
6
+ };
7
+ export declare const Preview: React.FC<PreviewFieldWithProps | {}>;
8
+ export declare const getPreviewField: (props: any) => JSX.Element;
9
+ export {};