sanity-plugin-seofields 1.2.1 → 1.2.2
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 +60 -0
- package/dist/index.d.mts +63 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +47 -12
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +47 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/SeoHealthDashboard.tsx +76 -13
- package/src/components/SeoHealthPane.tsx +81 -0
- package/src/index.ts +2 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/styled-components/node_modules/tslib/tslib.es6.mjs","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/stylis/src/Prefixer.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/styled-components/dist/styled-components.esm.js","../src/components/SeoHealthDashboard.tsx","../src/components/SeoHealthTool.tsx","../src/utils/seoUtils.ts","../src/components/meta/MetaDescription.tsx","../src/components/meta/MetaTitle.tsx","../src/components/SeoPreview.tsx","../src/utils/fieldsUtils.ts","../src/utils/utils.ts","../src/components/openGraph/OgDescription.tsx","../src/components/openGraph/OgTitle.tsx","../src/schemas/types/openGraph/index.ts","../src/components/twitter/twitterDescription.tsx","../src/components/twitter/twitterTitle.tsx","../src/schemas/types/twitter/index.ts","../src/schemas/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"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n 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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace, substr, match} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @param {object[]} children\n * @return {string}\n */\nexport function prefix (value, length, children) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// tab-size\n\t\tcase 4789:\n\t\t\treturn MOZ + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t\t// default: fallthrough to below\n\t\t\t}\n\t\t// flex, flex-direction, scroll-snap-type, writing-mode\n\t\tcase 6828: case 4268: case 2903:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/g, '') + (!match(value, /flex-|baseline/) ? MS + 'grid-row-' + replace(value, /flex-|-self/g, '') : '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/g, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// justify-self\n\t\tcase 4200:\n\t\t\tif (!match(value, /flex-|baseline/)) return MS + 'grid-column-align' + substr(value, length) + value\n\t\t\tbreak\n\t\t// grid-template-(columns|rows)\n\t\tcase 2592: case 3360:\n\t\t\treturn MS + replace(value, 'template-', '') + value\n\t\t// grid-(row|column)-start\n\t\tcase 4384: case 3616:\n\t\t\tif (children && children.some(function (element, index) { return length = index, match(element.props, /grid-\\w+-end/) })) {\n\t\t\t\treturn ~indexof(value + (children = children[length].value), 'span', 0) ? value : (MS + replace(value, '-start', '') + value + MS + 'grid-row-span:' + (~indexof(children, 'span', 0) ? match(children, /\\d+/) : +match(children, /\\d+/) - +match(value, /\\d+/)) + ';')\n\t\t\t}\n\t\t\treturn MS + replace(value, '-start', '') + value\n\t\t// grid-(row|column)-end\n\t\tcase 4896: case 4128:\n\t\t\treturn (children && children.some(function (element) { return match(element.props, /grid-\\w+-start/) })) ? value : MS + replace(replace(value, '-end', '-span'), 'span ', '') + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch', 0) ? prefix(replace(value, 'stretch', 'fill-available'), length, children) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// grid-(column|row)\n\t\tcase 5152: case 5920:\n\t\t\treturn replace(value, /(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/, function (_, a, b, c, d, e, f) { return (MS + a + ':' + b + f) + (c ? (MS + a + '-span:' + (d ? e : +e - +b)) + f : '') + value })\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// stick(y)?\n\t\t\tif (charat(value, length + 6) === 121)\n\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\tbreak\n\t\t// display: (flex|inline-flex|grid|inline-grid)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, charat(value, 14) === 45 ? 18 : 11)) {\n\t\t\t\t// (inline-)?fle(x)\n\t\t\t\tcase 120:\n\t\t\t\t\treturn replace(value, /(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t\t// (inline-)?gri(d)\n\t\t\t\tcase 100:\n\t\t\t\t\treturn replace(value, ':', ':' + MS) + value\n\t\t\t}\n\t\t\tbreak\n\t\t// scroll-margin, scroll-margin-(top|right|bottom|left)\n\t\tcase 5719: case 2647: case 2135: case 3927: case 2391:\n\t\t\treturn replace(value, 'scroll-', 'scroll-snap-') + value\n\t}\n\n\treturn value\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine, filter, assign} from './Utility.js'\nimport {copy, lift, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(children = element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, callback = /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import{__spreadArray as e,__assign as t}from\"tslib\";import n from\"@emotion/is-prop-valid\";import o,{useRef as r,useState as s,useMemo as i,useEffect as a,useContext as c,useDebugValue as l,createElement as u}from\"react\";import p from\"shallowequal\";import*as d from\"stylis\";import h from\"@emotion/unitless\";var f=\"undefined\"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||\"data-styled\",m=\"active\",y=\"data-styled-version\",v=\"6.1.19\",g=\"/*!sc*/\\n\",S=\"undefined\"!=typeof window&&\"undefined\"!=typeof document,w=Boolean(\"boolean\"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&\"\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY?\"false\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&\"\"!==process.env.SC_DISABLE_SPEEDY?\"false\"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY:\"production\"!==process.env.NODE_ENV),b={},E=/invalid hook call/i,N=new Set,P=function(t,n){if(\"production\"!==process.env.NODE_ENV){var o=n?' with the id of \"'.concat(n,'\"'):\"\",s=\"The component \".concat(t).concat(o,\" has been created dynamically.\\n\")+\"You may see this warning because you've called styled inside another component.\\nTo resolve this only create new StyledComponents outside of any render method and function component.\\nSee https://styled-components.com/docs/basics#define-styled-components-outside-of-the-render-method for more info.\\n\",i=console.error;try{var a=!0;console.error=function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];E.test(t)?(a=!1,N.delete(s)):i.apply(void 0,e([t],n,!1))},r(),a&&!N.has(s)&&(console.warn(s),N.add(s))}catch(e){E.test(e.message)&&N.delete(s)}finally{console.error=i}}},_=Object.freeze([]),C=Object.freeze({});function I(e,t,n){return void 0===n&&(n=C),e.theme!==n.theme&&e.theme||t||n.theme}var A=new Set([\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"big\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"u\",\"ul\",\"use\",\"var\",\"video\",\"wbr\",\"circle\",\"clipPath\",\"defs\",\"ellipse\",\"foreignObject\",\"g\",\"image\",\"line\",\"linearGradient\",\"marker\",\"mask\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialGradient\",\"rect\",\"stop\",\"svg\",\"text\",\"tspan\"]),O=/[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~-]+/g,D=/(^-|-$)/g;function R(e){return e.replace(O,\"-\").replace(D,\"\")}var T=/(a)(d)/gi,k=52,j=function(e){return String.fromCharCode(e+(e>25?39:97))};function x(e){var t,n=\"\";for(t=Math.abs(e);t>k;t=t/k|0)n=j(t%k)+n;return(j(t%k)+n).replace(T,\"$1-$2\")}var V,F=5381,z=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},M=function(e){return z(F,e)};function $(e){return x(M(e)>>>0)}function B(e){return\"production\"!==process.env.NODE_ENV&&\"string\"==typeof e&&e||e.displayName||e.name||\"Component\"}function G(e){return\"string\"==typeof e&&(\"production\"===process.env.NODE_ENV||e.charAt(0)===e.charAt(0).toLowerCase())}var L=\"function\"==typeof Symbol&&Symbol.for,Y=L?Symbol.for(\"react.memo\"):60115,q=L?Symbol.for(\"react.forward_ref\"):60112,W={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},H={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},U={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},J=((V={})[q]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},V[Y]=U,V);function X(e){return(\"type\"in(t=e)&&t.type.$$typeof)===Y?U:\"$$typeof\"in e?J[e.$$typeof]:W;var t}var Z=Object.defineProperty,K=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,ee=Object.getOwnPropertyDescriptor,te=Object.getPrototypeOf,ne=Object.prototype;function oe(e,t,n){if(\"string\"!=typeof t){if(ne){var o=te(t);o&&o!==ne&&oe(e,o,n)}var r=K(t);Q&&(r=r.concat(Q(t)));for(var s=X(e),i=X(t),a=0;a<r.length;++a){var c=r[a];if(!(c in H||n&&n[c]||i&&c in i||s&&c in s)){var l=ee(t,c);try{Z(e,c,l)}catch(e){}}}}return e}function re(e){return\"function\"==typeof e}function se(e){return\"object\"==typeof e&&\"styledComponentId\"in e}function ie(e,t){return e&&t?\"\".concat(e,\" \").concat(t):e||t||\"\"}function ae(e,t){if(0===e.length)return\"\";for(var n=e[0],o=1;o<e.length;o++)n+=t?t+e[o]:e[o];return n}function ce(e){return null!==e&&\"object\"==typeof e&&e.constructor.name===Object.name&&!(\"props\"in e&&e.$$typeof)}function le(e,t,n){if(void 0===n&&(n=!1),!n&&!ce(e)&&!Array.isArray(e))return t;if(Array.isArray(t))for(var o=0;o<t.length;o++)e[o]=le(e[o],t[o]);else if(ce(t))for(var o in t)e[o]=le(e[o],t[o]);return e}function ue(e,t){Object.defineProperty(e,\"toString\",{value:t})}var pe=\"production\"!==process.env.NODE_ENV?{1:\"Cannot create styled-component for component: %s.\\n\\n\",2:\"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n- Are you trying to reuse it across renders?\\n- Are you accidentally calling collectStyles twice?\\n\\n\",3:\"Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\",4:\"The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n- Does this error occur on the client and is your target falsy?\\n- Does this error occur on the server and is the sheet falsy?\\n\\n\",5:\"The clone method cannot be used on the client!\\n\\n- Are you running in a client-like environment on the server?\\n- Are you trying to run SSR on the client?\\n\\n\",6:\"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n- Are you using a custom target that isn't mounted?\\n- Does your document not have a valid head element?\\n- Have you accidentally removed a style tag manually?\\n\\n\",7:'ThemeProvider: Please return an object from your \"theme\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n',8:'ThemeProvider: Please make your \"theme\" prop an object.\\n\\n',9:\"Missing document `<head>`\\n\\n\",10:\"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",11:\"_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n\",12:\"It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n\",13:\"%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\\n\",14:'ThemeProvider: \"theme\" prop is required.\\n\\n',15:\"A stylis plugin has been supplied that is not named. We need a name for each plugin to be able to prevent styling collisions between different stylis configurations within the same app. Before you pass your plugin to `<StyleSheetManager stylisPlugins={[]}>`, please make sure each plugin is uniquely-named, e.g.\\n\\n```js\\nObject.defineProperty(importedPlugin, 'name', { value: 'some-unique-name' });\\n```\\n\\n\",16:\"Reached the limit of how many styled components may be created at group %s.\\nYou may only create up to 1,073,741,824 components. If you're creating components dynamically,\\nas for instance in your render method then you may be running into this limitation.\\n\\n\",17:\"CSSStyleSheet could not be found on HTMLStyleElement.\\nHas styled-components' style tag been unmounted or altered by another script?\\n\",18:\"ThemeProvider: Please make sure your useTheme hook is within a `<ThemeProvider>`\"}:{};function de(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=e[0],o=[],r=1,s=e.length;r<s;r+=1)o.push(e[r]);return o.forEach(function(e){n=n.replace(/%[a-z]/,e)}),n}function he(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];return\"production\"===process.env.NODE_ENV?new Error(\"An error occurred. See https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#\".concat(t,\" for more information.\").concat(n.length>0?\" Args: \".concat(n.join(\", \")):\"\")):new Error(de.apply(void 0,e([pe[t]],n,!1)).trim())}var fe=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n<e;n++)t+=this.groupSizes[n];return t},e.prototype.insertRules=function(e,t){if(e>=this.groupSizes.length){for(var n=this.groupSizes,o=n.length,r=o;e>=r;)if((r<<=1)<0)throw he(16,\"\".concat(e));this.groupSizes=new Uint32Array(r),this.groupSizes.set(n),this.length=r;for(var s=o;s<r;s++)this.groupSizes[s]=0}for(var i=this.indexOfGroup(e+1),a=(s=0,t.length);s<a;s++)this.tag.insertRule(i,t[s])&&(this.groupSizes[e]++,i++)},e.prototype.clearGroup=function(e){if(e<this.length){var t=this.groupSizes[e],n=this.indexOfGroup(e),o=n+t;this.groupSizes[e]=0;for(var r=n;r<o;r++)this.tag.deleteRule(n)}},e.prototype.getGroup=function(e){var t=\"\";if(e>=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],o=this.indexOfGroup(e),r=o+n,s=o;s<r;s++)t+=\"\".concat(this.tag.getRule(s)).concat(g);return t},e}(),me=1<<30,ye=new Map,ve=new Map,ge=1,Se=function(e){if(ye.has(e))return ye.get(e);for(;ve.has(ge);)ge++;var t=ge++;if(\"production\"!==process.env.NODE_ENV&&((0|t)<0||t>me))throw he(16,\"\".concat(t));return ye.set(e,t),ve.set(t,e),t},we=function(e,t){ge=t+1,ye.set(e,t),ve.set(t,e)},be=\"style[\".concat(f,\"][\").concat(y,'=\"').concat(v,'\"]'),Ee=new RegExp(\"^\".concat(f,'\\\\.g(\\\\d+)\\\\[id=\"([\\\\w\\\\d-]+)\"\\\\].*?\"([^\"]*)')),Ne=function(e,t,n){for(var o,r=n.split(\",\"),s=0,i=r.length;s<i;s++)(o=r[s])&&e.registerName(t,o)},Pe=function(e,t){for(var n,o=(null!==(n=t.textContent)&&void 0!==n?n:\"\").split(g),r=[],s=0,i=o.length;s<i;s++){var a=o[s].trim();if(a){var c=a.match(Ee);if(c){var l=0|parseInt(c[1],10),u=c[2];0!==l&&(we(u,l),Ne(e,u,c[3]),e.getTag().insertRules(l,r)),r.length=0}else r.push(a)}}},_e=function(e){for(var t=document.querySelectorAll(be),n=0,o=t.length;n<o;n++){var r=t[n];r&&r.getAttribute(f)!==m&&(Pe(e,r),r.parentNode&&r.parentNode.removeChild(r))}};function Ce(){return\"undefined\"!=typeof __webpack_nonce__?__webpack_nonce__:null}var Ie=function(e){var t=document.head,n=e||t,o=document.createElement(\"style\"),r=function(e){var t=Array.from(e.querySelectorAll(\"style[\".concat(f,\"]\")));return t[t.length-1]}(n),s=void 0!==r?r.nextSibling:null;o.setAttribute(f,m),o.setAttribute(y,v);var i=Ce();return i&&o.setAttribute(\"nonce\",i),n.insertBefore(o,s),o},Ae=function(){function e(e){this.element=Ie(e),this.element.appendChild(document.createTextNode(\"\")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,n=0,o=t.length;n<o;n++){var r=t[n];if(r.ownerNode===e)return r}throw he(17)}(this.element),this.length=0}return e.prototype.insertRule=function(e,t){try{return this.sheet.insertRule(t,e),this.length++,!0}catch(e){return!1}},e.prototype.deleteRule=function(e){this.sheet.deleteRule(e),this.length--},e.prototype.getRule=function(e){var t=this.sheet.cssRules[e];return t&&t.cssText?t.cssText:\"\"},e}(),Oe=function(){function e(e){this.element=Ie(e),this.nodes=this.element.childNodes,this.length=0}return e.prototype.insertRule=function(e,t){if(e<=this.length&&e>=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e<this.length?this.nodes[e].textContent:\"\"},e}(),De=function(){function e(e){this.rules=[],this.length=0}return e.prototype.insertRule=function(e,t){return e<=this.length&&(this.rules.splice(e,0,t),this.length++,!0)},e.prototype.deleteRule=function(e){this.rules.splice(e,1),this.length--},e.prototype.getRule=function(e){return e<this.length?this.rules[e]:\"\"},e}(),Re=S,Te={isServer:!S,useCSSOMInjection:!w},ke=function(){function e(e,n,o){void 0===e&&(e=C),void 0===n&&(n={});var r=this;this.options=t(t({},Te),e),this.gs=n,this.names=new Map(o),this.server=!!e.isServer,!this.server&&S&&Re&&(Re=!1,_e(this)),ue(this,function(){return function(e){for(var t=e.getTag(),n=t.length,o=\"\",r=function(n){var r=function(e){return ve.get(e)}(n);if(void 0===r)return\"continue\";var s=e.names.get(r),i=t.getGroup(n);if(void 0===s||!s.size||0===i.length)return\"continue\";var a=\"\".concat(f,\".g\").concat(n,'[id=\"').concat(r,'\"]'),c=\"\";void 0!==s&&s.forEach(function(e){e.length>0&&(c+=\"\".concat(e,\",\"))}),o+=\"\".concat(i).concat(a,'{content:\"').concat(c,'\"}').concat(g)},s=0;s<n;s++)r(s);return o}(r)})}return e.registerId=function(e){return Se(e)},e.prototype.rehydrate=function(){!this.server&&S&&_e(this)},e.prototype.reconstructWithOptions=function(n,o){return void 0===o&&(o=!0),new e(t(t({},this.options),n),this.gs,o&&this.names||void 0)},e.prototype.allocateGSInstance=function(e){return this.gs[e]=(this.gs[e]||0)+1},e.prototype.getTag=function(){return this.tag||(this.tag=(e=function(e){var t=e.useCSSOMInjection,n=e.target;return e.isServer?new De(n):t?new Ae(n):new Oe(n)}(this.options),new fe(e)));var e},e.prototype.hasNameForId=function(e,t){return this.names.has(e)&&this.names.get(e).has(t)},e.prototype.registerName=function(e,t){if(Se(e),this.names.has(e))this.names.get(e).add(t);else{var n=new Set;n.add(t),this.names.set(e,n)}},e.prototype.insertRules=function(e,t,n){this.registerName(e,t),this.getTag().insertRules(Se(e),n)},e.prototype.clearNames=function(e){this.names.has(e)&&this.names.get(e).clear()},e.prototype.clearRules=function(e){this.getTag().clearGroup(Se(e)),this.clearNames(e)},e.prototype.clearTag=function(){this.tag=void 0},e}(),je=/&/g,xe=/^\\s*\\/\\/.*$/gm;function Ve(e,t){return e.map(function(e){return\"rule\"===e.type&&(e.value=\"\".concat(t,\" \").concat(e.value),e.value=e.value.replaceAll(\",\",\",\".concat(t,\" \")),e.props=e.props.map(function(e){return\"\".concat(t,\" \").concat(e)})),Array.isArray(e.children)&&\"@keyframes\"!==e.type&&(e.children=Ve(e.children,t)),e})}function Fe(e){var t,n,o,r=void 0===e?C:e,s=r.options,i=void 0===s?C:s,a=r.plugins,c=void 0===a?_:a,l=function(e,o,r){return r.startsWith(n)&&r.endsWith(n)&&r.replaceAll(n,\"\").length>0?\".\".concat(t):e},u=c.slice();u.push(function(e){e.type===d.RULESET&&e.value.includes(\"&\")&&(e.props[0]=e.props[0].replace(je,n).replace(o,l))}),i.prefix&&u.push(d.prefixer),u.push(d.stringify);var p=function(e,r,s,a){void 0===r&&(r=\"\"),void 0===s&&(s=\"\"),void 0===a&&(a=\"&\"),t=a,n=r,o=new RegExp(\"\\\\\".concat(n,\"\\\\b\"),\"g\");var c=e.replace(xe,\"\"),l=d.compile(s||r?\"\".concat(s,\" \").concat(r,\" { \").concat(c,\" }\"):c);i.namespace&&(l=Ve(l,i.namespace));var p=[];return d.serialize(l,d.middleware(u.concat(d.rulesheet(function(e){return p.push(e)})))),p};return p.hash=c.length?c.reduce(function(e,t){return t.name||he(15),z(e,t.name)},F).toString():\"\",p}var ze=new ke,Me=Fe(),$e=o.createContext({shouldForwardProp:void 0,styleSheet:ze,stylis:Me}),Be=$e.Consumer,Ge=o.createContext(void 0);function Le(){return c($e)}function Ye(e){var t=s(e.stylisPlugins),n=t[0],r=t[1],c=Le().styleSheet,l=i(function(){var t=c;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t},[e.disableCSSOMInjection,e.sheet,e.target,c]),u=i(function(){return Fe({options:{namespace:e.namespace,prefix:e.enableVendorPrefixes},plugins:n})},[e.enableVendorPrefixes,e.namespace,n]);a(function(){p(n,e.stylisPlugins)||r(e.stylisPlugins)},[e.stylisPlugins]);var d=i(function(){return{shouldForwardProp:e.shouldForwardProp,styleSheet:l,stylis:u}},[e.shouldForwardProp,l,u]);return o.createElement($e.Provider,{value:d},o.createElement(Ge.Provider,{value:u},e.children))}var qe=function(){function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=Me);var o=n.name+t.hash;e.hasNameForId(n.id,o)||e.insertRules(n.id,o,t(n.rules,o,\"@keyframes\"))},this.name=e,this.id=\"sc-keyframes-\".concat(e),this.rules=t,ue(this,function(){throw he(12,String(n.name))})}return e.prototype.getName=function(e){return void 0===e&&(e=Me),this.name+e.hash},e}(),We=function(e){return e>=\"A\"&&e<=\"Z\"};function He(e){for(var t=\"\",n=0;n<e.length;n++){var o=e[n];if(1===n&&\"-\"===o&&\"-\"===e[0])return e;We(o)?t+=\"-\"+o.toLowerCase():t+=o}return t.startsWith(\"ms-\")?\"-\"+t:t}var Ue=function(e){return null==e||!1===e||\"\"===e},Je=function(t){var n,o,r=[];for(var s in t){var i=t[s];t.hasOwnProperty(s)&&!Ue(i)&&(Array.isArray(i)&&i.isCss||re(i)?r.push(\"\".concat(He(s),\":\"),i,\";\"):ce(i)?r.push.apply(r,e(e([\"\".concat(s,\" {\")],Je(i),!1),[\"}\"],!1)):r.push(\"\".concat(He(s),\": \").concat((n=s,null==(o=i)||\"boolean\"==typeof o||\"\"===o?\"\":\"number\"!=typeof o||0===o||n in h||n.startsWith(\"--\")?String(o).trim():\"\".concat(o,\"px\")),\";\")))}return r};function Xe(e,t,n,o){if(Ue(e))return[];if(se(e))return[\".\".concat(e.styledComponentId)];if(re(e)){if(!re(s=e)||s.prototype&&s.prototype.isReactComponent||!t)return[e];var r=e(t);return\"production\"===process.env.NODE_ENV||\"object\"!=typeof r||Array.isArray(r)||r instanceof qe||ce(r)||null===r||console.error(\"\".concat(B(e),\" is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\")),Xe(r,t,n,o)}var s;return e instanceof qe?n?(e.inject(n,o),[e.getName(o)]):[e]:ce(e)?Je(e):Array.isArray(e)?Array.prototype.concat.apply(_,e.map(function(e){return Xe(e,t,n,o)})):[e.toString()]}function Ze(e){for(var t=0;t<e.length;t+=1){var n=e[t];if(re(n)&&!se(n))return!1}return!0}var Ke=M(v),Qe=function(){function e(e,t,n){this.rules=e,this.staticRulesId=\"\",this.isStatic=\"production\"===process.env.NODE_ENV&&(void 0===n||n.isStatic)&&Ze(e),this.componentId=t,this.baseHash=z(Ke,t),this.baseStyle=n,ke.registerId(t)}return e.prototype.generateAndInjectStyles=function(e,t,n){var o=this.baseStyle?this.baseStyle.generateAndInjectStyles(e,t,n):\"\";if(this.isStatic&&!n.hash)if(this.staticRulesId&&t.hasNameForId(this.componentId,this.staticRulesId))o=ie(o,this.staticRulesId);else{var r=ae(Xe(this.rules,e,t,n)),s=x(z(this.baseHash,r)>>>0);if(!t.hasNameForId(this.componentId,s)){var i=n(r,\".\".concat(s),void 0,this.componentId);t.insertRules(this.componentId,s,i)}o=ie(o,s),this.staticRulesId=s}else{for(var a=z(this.baseHash,n.hash),c=\"\",l=0;l<this.rules.length;l++){var u=this.rules[l];if(\"string\"==typeof u)c+=u,\"production\"!==process.env.NODE_ENV&&(a=z(a,u));else if(u){var p=ae(Xe(u,e,t,n));a=z(a,p+l),c+=p}}if(c){var d=x(a>>>0);t.hasNameForId(this.componentId,d)||t.insertRules(this.componentId,d,n(c,\".\".concat(d),void 0,this.componentId)),o=ie(o,d)}}return o},e}(),et=o.createContext(void 0),tt=et.Consumer;function nt(){var e=c(et);if(!e)throw he(18);return e}function ot(e){var n=o.useContext(et),r=i(function(){return function(e,n){if(!e)throw he(14);if(re(e)){var o=e(n);if(\"production\"!==process.env.NODE_ENV&&(null===o||Array.isArray(o)||\"object\"!=typeof o))throw he(7);return o}if(Array.isArray(e)||\"object\"!=typeof e)throw he(8);return n?t(t({},n),e):e}(e.theme,n)},[e.theme,n]);return e.children?o.createElement(et.Provider,{value:r},e.children):null}var rt={},st=new Set;function it(e,r,s){var i=se(e),a=e,c=!G(e),p=r.attrs,d=void 0===p?_:p,h=r.componentId,f=void 0===h?function(e,t){var n=\"string\"!=typeof e?\"sc\":R(e);rt[n]=(rt[n]||0)+1;var o=\"\".concat(n,\"-\").concat($(v+n+rt[n]));return t?\"\".concat(t,\"-\").concat(o):o}(r.displayName,r.parentComponentId):h,m=r.displayName,y=void 0===m?function(e){return G(e)?\"styled.\".concat(e):\"Styled(\".concat(B(e),\")\")}(e):m,g=r.displayName&&r.componentId?\"\".concat(R(r.displayName),\"-\").concat(r.componentId):r.componentId||f,S=i&&a.attrs?a.attrs.concat(d).filter(Boolean):d,w=r.shouldForwardProp;if(i&&a.shouldForwardProp){var b=a.shouldForwardProp;if(r.shouldForwardProp){var E=r.shouldForwardProp;w=function(e,t){return b(e,t)&&E(e,t)}}else w=b}var N=new Qe(s,g,i?a.componentStyle:void 0);function O(e,r){return function(e,r,s){var i=e.attrs,a=e.componentStyle,c=e.defaultProps,p=e.foldedComponentIds,d=e.styledComponentId,h=e.target,f=o.useContext(et),m=Le(),y=e.shouldForwardProp||m.shouldForwardProp;\"production\"!==process.env.NODE_ENV&&l(d);var v=I(r,f,c)||C,g=function(e,n,o){for(var r,s=t(t({},n),{className:void 0,theme:o}),i=0;i<e.length;i+=1){var a=re(r=e[i])?r(s):r;for(var c in a)s[c]=\"className\"===c?ie(s[c],a[c]):\"style\"===c?t(t({},s[c]),a[c]):a[c]}return n.className&&(s.className=ie(s.className,n.className)),s}(i,r,v),S=g.as||h,w={};for(var b in g)void 0===g[b]||\"$\"===b[0]||\"as\"===b||\"theme\"===b&&g.theme===v||(\"forwardedAs\"===b?w.as=g.forwardedAs:y&&!y(b,S)||(w[b]=g[b],y||\"development\"!==process.env.NODE_ENV||n(b)||st.has(b)||!A.has(S)||(st.add(b),console.warn('styled-components: it looks like an unknown prop \"'.concat(b,'\" is being sent through to the DOM, which will likely trigger a React console error. If you would like automatic filtering of unknown props, you can opt-into that behavior via `<StyleSheetManager shouldForwardProp={...}>` (connect an API like `@emotion/is-prop-valid`) or consider using transient props (`$` prefix for automatic filtering.)')))));var E=function(e,t){var n=Le(),o=e.generateAndInjectStyles(t,n.styleSheet,n.stylis);return\"production\"!==process.env.NODE_ENV&&l(o),o}(a,g);\"production\"!==process.env.NODE_ENV&&e.warnTooManyClasses&&e.warnTooManyClasses(E);var N=ie(p,d);return E&&(N+=\" \"+E),g.className&&(N+=\" \"+g.className),w[G(S)&&!A.has(S)?\"class\":\"className\"]=N,s&&(w.ref=s),u(S,w)}(D,e,r)}O.displayName=y;var D=o.forwardRef(O);return D.attrs=S,D.componentStyle=N,D.displayName=y,D.shouldForwardProp=w,D.foldedComponentIds=i?ie(a.foldedComponentIds,a.styledComponentId):\"\",D.styledComponentId=g,D.target=i?a.target:e,Object.defineProperty(D,\"defaultProps\",{get:function(){return this._foldedDefaultProps},set:function(e){this._foldedDefaultProps=i?function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var o=0,r=t;o<r.length;o++)le(e,r[o],!0);return e}({},a.defaultProps,e):e}}),\"production\"!==process.env.NODE_ENV&&(P(y,g),D.warnTooManyClasses=function(e,t){var n={},o=!1;return function(r){if(!o&&(n[r]=!0,Object.keys(n).length>=200)){var s=t?' with the id of \"'.concat(t,'\"'):\"\";console.warn(\"Over \".concat(200,\" classes were generated for component \").concat(e).concat(s,\".\\n\")+\"Consider using the attrs method, together with a style object for frequently changed styles.\\nExample:\\n const Component = styled.div.attrs(props => ({\\n style: {\\n background: props.background,\\n },\\n }))`width: 100%;`\\n\\n <Component />\"),o=!0,n={}}}}(y,g)),ue(D,function(){return\".\".concat(D.styledComponentId)}),c&&oe(D,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0}),D}function at(e,t){for(var n=[e[0]],o=0,r=t.length;o<r;o+=1)n.push(t[o],e[o+1]);return n}var ct=function(e){return Object.assign(e,{isCss:!0})};function lt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];if(re(t)||ce(t))return ct(Xe(at(_,e([t],n,!0))));var r=t;return 0===n.length&&1===r.length&&\"string\"==typeof r[0]?Xe(r):ct(Xe(at(r,n)))}function ut(n,o,r){if(void 0===r&&(r=C),!o)throw he(1,o);var s=function(t){for(var s=[],i=1;i<arguments.length;i++)s[i-1]=arguments[i];return n(o,r,lt.apply(void 0,e([t],s,!1)))};return s.attrs=function(e){return ut(n,o,t(t({},r),{attrs:Array.prototype.concat(r.attrs,e).filter(Boolean)}))},s.withConfig=function(e){return ut(n,o,t(t({},r),e))},s}var pt=function(e){return ut(it,e)},dt=pt;A.forEach(function(e){dt[e]=pt(e)});var ht=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Ze(e),ke.registerId(this.componentId+1)}return e.prototype.createStyles=function(e,t,n,o){var r=o(ae(Xe(this.rules,t,n,o)),\"\"),s=this.componentId+e;n.insertRules(s,s,r)},e.prototype.removeStyles=function(e,t){t.clearRules(this.componentId+e)},e.prototype.renderStyles=function(e,t,n,o){e>2&&ke.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,o)},e}();function ft(n){for(var r=[],s=1;s<arguments.length;s++)r[s-1]=arguments[s];var i=lt.apply(void 0,e([n],r,!1)),a=\"sc-global-\".concat($(JSON.stringify(i))),c=new ht(i,a);\"production\"!==process.env.NODE_ENV&&P(a);var l=function(e){var n=Le(),r=o.useContext(et),s=o.useRef(n.styleSheet.allocateGSInstance(a)).current;return\"production\"!==process.env.NODE_ENV&&o.Children.count(e.children)&&console.warn(\"The global style component \".concat(a,\" was given child JSX. createGlobalStyle does not render children.\")),\"production\"!==process.env.NODE_ENV&&i.some(function(e){return\"string\"==typeof e&&-1!==e.indexOf(\"@import\")})&&console.warn(\"Please do not use @import CSS syntax in createGlobalStyle at this time, as the CSSOM APIs we use in production do not handle it well. Instead, we recommend using a library such as react-helmet to inject a typical <link> meta tag to the stylesheet, or simply embedding it manually in your index.html <head> section for a simpler app.\"),n.styleSheet.server&&function(e,n,o,r,s){if(c.isStatic)c.renderStyles(e,b,o,s);else{var i=t(t({},n),{theme:I(n,r,l.defaultProps)});c.renderStyles(e,i,o,s)}}(s,e,n.styleSheet,r,n.stylis),null};return o.memo(l)}function mt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.\");var r=ae(lt.apply(void 0,e([t],n,!1))),s=$(r);return new qe(s,r)}function yt(e){var n=o.forwardRef(function(n,r){var s=I(n,o.useContext(et),e.defaultProps);return\"production\"!==process.env.NODE_ENV&&void 0===s&&console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \"'.concat(B(e),'\"')),o.createElement(e,t({},n,{theme:s,ref:r}))});return n.displayName=\"WithTheme(\".concat(B(e),\")\"),oe(n,e)}var vt=/^\\s*<\\/[a-z]/i,gt=function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString();if(!t)return\"\";var n=Ce(),o=ae([n&&'nonce=\"'.concat(n,'\"'),\"\".concat(f,'=\"true\"'),\"\".concat(y,'=\"').concat(v,'\"')].filter(Boolean),\" \");return\"<style \".concat(o,\">\").concat(t,\"</style>\")},this.getStyleTags=function(){if(e.sealed)throw he(2);return e._emitSheetCSS()},this.getStyleElement=function(){var n;if(e.sealed)throw he(2);var r=e.instance.toString();if(!r)return[];var s=((n={})[f]=\"\",n[y]=v,n.dangerouslySetInnerHTML={__html:r},n),i=Ce();return i&&(s.nonce=i),[o.createElement(\"style\",t({},s,{key:\"sc-0-0\"}))]},this.seal=function(){e.sealed=!0},this.instance=new ke({isServer:!0}),this.sealed=!1}return e.prototype.collectStyles=function(e){if(this.sealed)throw he(2);return o.createElement(Ye,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){if(S)throw he(3);if(this.sealed)throw he(2);this.seal();var t=require(\"stream\").Transform,n=e,o=this.instance,r=this._emitSheetCSS,s=new t({transform:function(e,t,n){var s=e.toString(),i=r();if(o.clearTag(),vt.test(s)){var a=s.indexOf(\">\")+1,c=s.slice(0,a),l=s.slice(a);this.push(c+i+l)}else this.push(i+s);n()}});return n.on(\"error\",function(e){s.emit(\"error\",e)}),n.pipe(s)},e}(),St={StyleSheet:ke,mainSheet:ze};\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"It looks like you've imported 'styled-components' on React Native.\\nPerhaps you're looking to import 'styled-components/native'?\\nRead more about this at https://www.styled-components.com/docs/basics#react-native\");var wt=\"__sc-\".concat(f,\"__\");\"production\"!==process.env.NODE_ENV&&\"test\"!==process.env.NODE_ENV&&\"undefined\"!=typeof window&&(window[wt]||(window[wt]=0),1===window[wt]&&console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\\n\\nSee https://s-c.sh/2BAXzed for more info.\"),window[wt]+=1);export{gt as ServerStyleSheet,Be as StyleSheetConsumer,$e as StyleSheetContext,Ye as StyleSheetManager,tt as ThemeConsumer,et as ThemeContext,ot as ThemeProvider,St as __PRIVATE__,ft as createGlobalStyle,lt as css,dt as default,se as isStyledComponent,mt as keyframes,dt as styled,nt as useTheme,v as version,yt as withTheme};\n//# sourceMappingURL=styled-components.esm.js.map\n","import React, {useCallback, useEffect, useMemo, useState} from 'react'\nimport {useClient} from 'sanity'\nimport {useIntentLink} from 'sanity/router'\nimport styled, {keyframes} from 'styled-components'\n\nimport {DocumentWithSeoHealth, SeoHealthMetrics} from '../types'\n\nconst DashboardContainer = styled.div`\n width: 100%;\n min-height: 100%;\n background: #f0f2f5;\n padding: 28px 32px;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n`\n\nconst PageHeader = styled.div`\n margin-bottom: 28px;\n`\n\nconst PageTitle = styled.h1`\n margin: 0 0 6px 0;\n font-size: 22px;\n font-weight: 700;\n color: #111827;\n letter-spacing: -0.3px;\n display: flex;\n align-items: center;\n gap: 10px;\n`\n\nconst PreviewBadge = styled.span`\n display: inline-block;\n background: #fef3c7;\n color: #92400e;\n font-size: 11px;\n font-weight: 600;\n padding: 4px 8px;\n border-radius: 4px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-left: 8px;\n`\n\nconst PageSubtitle = styled.p`\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n`\n\nconst StatsGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 14px;\n margin-bottom: 20px;\n\n @media (max-width: 1100px) {\n grid-template-columns: repeat(3, 1fr);\n }\n @media (max-width: 600px) {\n grid-template-columns: repeat(2, 1fr);\n }\n`\n\nconst StatCard = styled.div<{$accent?: string}>`\n background: #ffffff;\n border-radius: 10px;\n padding: 16px 18px;\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.07),\n 0 1px 2px rgba(0, 0, 0, 0.05);\n border-left: ${(p) => (p.$accent ? `4px solid ${p.$accent}` : '4px solid transparent')};\n transition: box-shadow 0.15s ease;\n\n &:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n`\n\nconst StatLabel = styled.div`\n font-size: 11px;\n font-weight: 500;\n color: #9ca3af;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n`\n\nconst StatValue = styled.div`\n font-size: 26px;\n font-weight: 700;\n color: #111827;\n line-height: 1;\n`\n\nconst ControlsBar = styled.div`\n background: #ffffff;\n border-radius: 10px;\n padding: 14px 18px;\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07);\n`\n\nconst SearchWrapper = styled.div`\n position: relative;\n flex: 1;\n min-width: 220px;\n`\n\nconst SearchIconSvg = styled.span`\n position: absolute;\n left: 11px;\n top: 50%;\n transform: translateY(-50%);\n color: #9ca3af;\n display: flex;\n align-items: center;\n pointer-events: none;\n`\n\nconst SearchInput = styled.input`\n width: 100%;\n height: 36px;\n padding: 0 12px 0 34px;\n border: 1px solid #e5e7eb;\n border-radius: 7px;\n font-size: 13px;\n color: #111827;\n background: #f9fafb;\n box-sizing: border-box;\n outline: none;\n transition:\n border-color 0.15s,\n background 0.15s;\n\n &::placeholder {\n color: #9ca3af;\n }\n\n &:focus {\n border-color: #6366f1;\n background: #fff;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n }\n`\n\nconst StyledSelect = styled.select`\n height: 36px;\n padding: 0 32px 0 12px;\n border: 1px solid #e5e7eb;\n border-radius: 7px;\n font-size: 13px;\n color: #374151;\n background: #f9fafb\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E\")\n no-repeat right 10px center;\n appearance: none;\n outline: none;\n cursor: pointer;\n transition: border-color 0.15s;\n\n &:focus {\n border-color: #6366f1;\n background-color: #fff;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n }\n`\n\nconst TableCard = styled.div`\n background: #ffffff;\n border-radius: 10px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07);\n overflow: hidden;\n`\n\nconst TableHeader = styled.div`\n display: flex;\n align-items: center;\n padding: 11px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n gap: 12px;\n`\n\nconst TableRow = styled.div`\n display: flex;\n align-items: center;\n padding: 13px 20px;\n border-bottom: 1px solid #f3f4f6;\n gap: 12px;\n transition: background 0.1s;\n\n &:last-child {\n border-bottom: none;\n }\n\n &:hover {\n background: #fafafa;\n }\n`\n\nconst ColTitle = styled.div`\n flex: 2;\n min-width: 0;\n`\n\nconst TitleWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n`\n\nconst ColType = styled.div`\n flex: 0.8;\n min-width: 80px;\n`\n\nconst ColScore = styled.div`\n flex: 0.6;\n min-width: 70px;\n`\n\nconst ColIssues = styled.div`\n flex: 2;\n min-width: 0;\n`\n\nconst DocTitleLink = styled.a`\n font-size: 13px;\n font-weight: 600;\n color: #4f46e5;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-decoration: none;\n display: block;\n transition: color 0.15s;\n\n &:hover {\n color: #4338ca;\n text-decoration: underline;\n }\n`\n\nconst DocId = styled.div`\n font-size: 11px;\n color: #9ca3af;\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\nconst TypeBadge = styled.span<{$bgColor?: string; $textColor?: string}>`\n display: inline-block;\n padding: 3px 8px;\n border-radius: 5px;\n font-size: 11px;\n font-weight: 500;\n background: ${(p) => p.$bgColor || '#ede9fe'};\n color: ${(p) => p.$textColor || '#5b21b6'};\n`\n\nconst TypeText = styled.span`\n font-size: 12px;\n font-weight: 500;\n color: #374151;\n`\n\nconst CustomBadge = styled.span<{$bgColor?: string; $textColor?: string; $fontSize?: string}>`\n display: inline-block;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: ${(p) => p.$fontSize || '10px'};\n font-weight: 600;\n margin-left: 6px;\n background: ${(p) => p.$bgColor || '#e0e7ff'};\n color: ${(p) => p.$textColor || '#3730a3'};\n white-space: nowrap;\n`\n\nconst ScoreBadge = styled.span<{$score: number}>`\n display: inline-block;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 700;\n background: ${(p) => {\n if (p.$score >= 80) return '#d1fae5'\n if (p.$score >= 60) return '#fef3c7'\n if (p.$score >= 40) return '#ffedd5'\n return '#fee2e2'\n }};\n color: ${(p) => {\n if (p.$score >= 80) return '#065f46'\n if (p.$score >= 60) return '#92400e'\n if (p.$score >= 40) return '#9a3412'\n return '#991b1b'\n }};\n`\n\nconst IssueTag = styled.div`\n font-size: 11px;\n color: #ef4444;\n line-height: 1.5;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\nconst MoreIssues = styled.div`\n font-size: 11px;\n color: #6b7280;\n cursor: pointer;\n transition: color 0.15s;\n\n &:hover {\n color: #374151;\n }\n`\n\nconst MoreIssuesWrapper = styled.div`\n position: relative;\n display: inline-block;\n`\n\nconst IssuesPopover = styled.div<{\n $left?: number\n}>`\n position: absolute;\n bottom: auto;\n left: 0;\n transform: translateY(calc(-100% - 14px));\n background: #1f2937;\n color: #ffffff;\n padding: 12px;\n border-radius: 8px;\n font-size: 12px;\n z-index: 50;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);\n width: 280px;\n word-break: break-word;\n line-height: 1.5;\n\n &::after {\n content: '';\n position: absolute;\n bottom: -6px;\n left: 12px;\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #1f2937;\n }\n`\n\nconst PopoverIssueItem = styled.div`\n display: flex;\n gap: 6px;\n margin-bottom: 6px;\n\n &:last-child {\n margin-bottom: 0;\n }\n`\n\nconst UpgradeContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100%;\n padding: 60px 24px;\n`\n\nconst UpgradeBox = styled.div`\n background: #ffffff;\n border-radius: 16px;\n padding: 48px 40px;\n max-width: 480px;\n width: 100%;\n text-align: center;\n box-shadow:\n 0 4px 24px rgba(0, 0, 0, 0.08),\n 0 1px 4px rgba(0, 0, 0, 0.05);\n border: 1px solid #e5e7eb;\n`\n\nconst UpgradeLock = styled.div`\n font-size: 40px;\n margin-bottom: 16px;\n`\n\nconst UpgradeTitle = styled.h2`\n margin: 0 0 10px;\n font-size: 20px;\n font-weight: 700;\n color: #111827;\n`\n\nconst UpgradeText = styled.p`\n margin: 0 0 20px;\n font-size: 14px;\n color: #6b7280;\n line-height: 1.6;\n`\n\nconst UpgradeCode = styled.pre`\n background: #f3f4f6;\n border-radius: 8px;\n padding: 14px 16px;\n font-size: 12px;\n color: #374151;\n text-align: left;\n margin: 0 0 24px;\n overflow-x: auto;\n line-height: 1.6;\n border: 1px solid #e5e7eb;\n`\n\nconst UpgradeButton = styled.a`\n display: inline-block;\n background: #4f46e5;\n color: #ffffff;\n font-size: 14px;\n font-weight: 600;\n padding: 10px 24px;\n border-radius: 8px;\n text-decoration: none;\n transition: background 0.15s;\n\n &:hover {\n background: #4338ca;\n }\n`\n\nconst ReloadButton = styled.button`\n display: inline-block;\n background: transparent;\n color: #6b7280;\n font-size: 13px;\n font-weight: 500;\n padding: 8px 20px;\n border-radius: 8px;\n border: 1px solid #d1d5db;\n cursor: pointer;\n margin-top: 10px;\n transition:\n background 0.15s,\n color 0.15s,\n border-color 0.15s;\n\n &:hover {\n background: #f3f4f6;\n color: #374151;\n border-color: #9ca3af;\n }\n`\n\n// Sub-component so useIntentLink can be called at the top level of a component (not inside .map)\nconst DocTitleAnchor: React.FC<{id: string; type: string; children: React.ReactNode}> = ({\n id,\n type,\n children,\n}) => {\n const {onClick, href} = useIntentLink({intent: 'edit', params: {id, type}})\n return (\n <DocTitleLink href={href} onClick={onClick} title=\"Open document\">\n {children}\n </DocTitleLink>\n )\n}\n\n// Sub-component to safely call docBadge outside a .map expression\nconst DocBadgeRenderer: React.FC<{\n doc: DocumentWithSeoHealth & Record<string, unknown>\n docBadge: (\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined\n}> = ({doc, docBadge}) => {\n const badge = docBadge(doc)\n if (!badge) return null\n return (\n <CustomBadge $bgColor={badge.bgColor} $textColor={badge.textColor} $fontSize={badge.fontSize}>\n {badge.label}\n </CustomBadge>\n )\n}\n\nconst spin = keyframes`\n to { transform: rotate(360deg); }\n`\n\nconst Spinner = styled.div`\n width: 28px;\n height: 28px;\n border: 3px solid #e5e7eb;\n border-top-color: #6366f1;\n border-radius: 50%;\n animation: ${spin} 0.7s linear infinite;\n margin: 0 auto 12px;\n`\n\nconst LoadingState = styled.div`\n padding: 48px 24px;\n text-align: center;\n color: #6b7280;\n font-size: 13px;\n`\n\nconst EmptyState = styled.div`\n padding: 48px 24px;\n text-align: center;\n color: #9ca3af;\n font-size: 13px;\n`\n\n/**\n * Color palette for dynamic document type badges\n * Colors are randomly assigned based on type hash for visual variety\n * while maintaining consistency across sessions\n */\nconst TYPE_COLOR_PALETTE: Array<{bg: string; text: string}> = [\n {bg: '#dbeafe', text: '#0c4a6e'}, // Blue\n {bg: '#dcfce7', text: '#14532d'}, // Green\n {bg: '#fce7f3', text: '#500724'}, // Pink\n {bg: '#fed7aa', text: '#7c2d12'}, // Orange\n {bg: '#e9d5ff', text: '#581c87'}, // Purple\n {bg: '#f3e8ff', text: '#3f0f5c'}, // Deep Purple\n {bg: '#ccfbf1', text: '#134e4a'}, // Teal\n {bg: '#ddd6fe', text: '#3730a3'}, // Indigo\n {bg: '#fca5a5', text: '#7f1d1d'}, // Red\n {bg: '#a7f3d0', text: '#065f46'}, // Emerald\n {bg: '#fbbf24', text: '#78350f'}, // Amber\n {bg: '#c4b5fd', text: '#3b0764'}, // Violet\n {bg: '#f0fdf4', text: '#15803d'}, // Light Green\n {bg: '#fef2f2', text: '#991b1b'}, // Light Red\n {bg: '#f5f3ff', text: '#5b21b6'}, // Light Purple\n {bg: '#fffbeb', text: '#92400e'}, // Light Amber\n]\n\n/**\n * Get dynamic color for a document type based on type name hash\n * Same type always gets the same color, but assignment is not fixed\n */\nconst getTypeColor = (type: string): {bg: string; text: string} => {\n // Generate consistent hash from type string using simple arithmetic\n let hash = 0\n for (let i = 0; i < type.length; i += 1) {\n const char = type.charCodeAt(i)\n hash = Math.abs(hash * 31 + char)\n }\n\n // Use modulo to get index within palette range\n const colorIndex = hash % TYPE_COLOR_PALETTE.length\n return TYPE_COLOR_PALETTE[colorIndex]\n}\n\nconst getStatusCategory = (score: number): SeoHealthMetrics['status'] => {\n if (score >= 80) return 'excellent'\n if (score >= 60) return 'good'\n if (score >= 40) return 'fair'\n if (score > 0) return 'poor'\n return 'missing'\n}\n\nconst scoreMetaTitle = (title?: string): {score: number; issues: string[]} => {\n const issues: string[] = []\n let score = 0\n\n if (title && title.length >= 50 && title.length <= 60) {\n score = 15\n } else if (title && title.length > 0) {\n score = 10\n if (title.length < 50) issues.push('Meta title too short (< 50 chars)')\n if (title.length > 60) issues.push('Meta title too long (> 60 chars)')\n } else {\n issues.push('Missing meta title')\n }\n\n return {score, issues}\n}\n\nconst scoreMetaDescription = (description?: string): {score: number; issues: string[]} => {\n const issues: string[] = []\n let score = 0\n\n if (description && description.length >= 120 && description.length <= 160) {\n score = 15\n } else if (description && description.length > 0) {\n score = 10\n if (description.length < 120) issues.push('Meta description too short (< 120 chars)')\n if (description.length > 160) issues.push('Meta description too long (> 160 chars)')\n } else {\n issues.push('Missing meta description')\n }\n\n return {score, issues}\n}\n\nconst scoreOpenGraph = (openGraph?: Record<string, unknown>): {score: number; issues: string[]} => {\n const issues: string[] = []\n let score = 0\n\n if (openGraph) {\n if (openGraph.title) score += 6\n else issues.push('Missing OG title')\n\n if (openGraph.description) score += 6\n else issues.push('Missing OG description')\n\n if (openGraph.image) score += 6\n else issues.push('Missing OG image')\n\n if (openGraph.type) score += 7\n else issues.push('Missing OG type')\n } else {\n issues.push('Open Graph not configured')\n }\n\n return {score, issues}\n}\n\nconst scoreTwitterCard = (twitter?: Record<string, unknown>): {score: number; issues: string[]} => {\n const issues: string[] = []\n let score = 0\n\n if (twitter) {\n if (twitter.title) score += 5\n else issues.push('Missing Twitter title')\n\n if (twitter.description) score += 5\n else issues.push('Missing Twitter description')\n\n if (twitter.image) score += 5\n else issues.push('Missing Twitter image')\n } else {\n issues.push('Twitter Card not configured')\n }\n\n return {score, issues}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst calculateHealthScore = (doc: any): SeoHealthMetrics => {\n let totalScore = 0\n const allIssues: string[] = []\n\n if (!doc.seo) {\n return {score: 0, status: 'missing', issues: ['SEO fields not configured']}\n }\n\n const {title, description, metaImage, keywords, robots, openGraph, twitter} = doc.seo\n\n // Meta Title\n const titleScore = scoreMetaTitle(title)\n totalScore += titleScore.score\n allIssues.push(...titleScore.issues)\n\n // Meta Description\n const descriptionScore = scoreMetaDescription(description)\n totalScore += descriptionScore.score\n allIssues.push(...descriptionScore.issues)\n\n // Meta Image\n if (metaImage) {\n totalScore += 10\n } else {\n allIssues.push('Missing meta image')\n }\n\n // Keywords\n if (keywords && keywords.length > 0) {\n totalScore += 10\n } else {\n allIssues.push('No keywords defined')\n }\n\n // Open Graph\n const ogScore = scoreOpenGraph(openGraph as Record<string, unknown> | undefined)\n totalScore += ogScore.score\n allIssues.push(...ogScore.issues)\n\n // Twitter Card\n const twitterScore = scoreTwitterCard(twitter as Record<string, unknown> | undefined)\n totalScore += twitterScore.score\n allIssues.push(...twitterScore.issues)\n\n // Robots settings\n if (robots && !robots.noIndex) {\n totalScore += 5\n }\n\n const status = getStatusCategory(totalScore)\n\n return {score: totalScore, status, issues: allIssues}\n}\n\nconst resolveTypeLabel = (type: string, typeLabels?: Record<string, string>): string =>\n typeLabels?.[type] ?? type\n\n/**\n * Builds the GROQ projection snippet for the title field.\n * - undefined / 'title' → `title`\n * - 'name' → `\"title\": name`\n * - { post: 'title', product: 'name' } → `\"title\": select(_type == \"post\" => title, _type == \"product\" => name, title)`\n */\nconst buildTitleProjection = (titleField?: string | Record<string, string>): string => {\n if (!titleField || titleField === 'title') return 'title'\n if (typeof titleField === 'string') return `\"title\": ${titleField}`\n const cases = Object.entries(titleField)\n .map(([type, field]) => `_type == \"${type}\" => ${field}`)\n .join(', ')\n return `\"title\": select(${cases}, title)`\n}\n\nexport interface SeoHealthDashboardProps {\n icon?: string\n title?: string\n description?: string\n showTypeColumn?: boolean\n showDocumentId?: boolean\n /**\n * Limit the dashboard to specific document type names.\n * If both queryTypes and customQuery are provided, customQuery takes precedence.\n */\n queryTypes?: string[]\n /**\n * When using `queryTypes`, also filter by `seo != null`.\n * Set to `false` to include documents of those types even without an seo field.\n * Defaults to `true`.\n */\n queryRequireSeo?: boolean\n /**\n * A fully custom GROQ query used to fetch documents.\n * Must return objects with at least: _id, _type, title, seo, _updatedAt\n * Takes precedence over queryTypes.\n */\n customQuery?: string\n /**\n * The Sanity API version to use for the client (e.g. '2023-01-01').\n * Defaults to '2023-01-01'.\n */\n apiVersion?: string\n /**\n * License key for the SEO Health Dashboard.\n * Obtain a key at https://sanity-plugin-seofields.thehardik.in\n */\n licenseKey?: string\n /**\n * Map raw `_type` values to human-readable display labels used in the\n * Type column and the Type filter dropdown.\n * Any type without an entry falls back to the raw `_type` string.\n *\n * @example\n * typeLabels={{ productDrug: 'Products', singleCondition: 'Condition' }}\n */\n typeLabels?: Record<string, string>\n /**\n * Controls how the type is rendered in the Type column.\n * - `'badge'` (default) — coloured pill, consistent with score badges\n * - `'text'` — plain text, useful for dense layouts\n */\n typeColumnMode?: 'badge' | 'text'\n /**\n * The document field to use as the display title.\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 * // Same field for all types\n * titleField: 'name'\n *\n * @example\n * // Different field per type\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 * docBadge: (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 docBadge?: (\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined\n /**\n * Custom text shown while the license key is being verified.\n * Defaults to `\"Verifying license…\"`.\n */\n loadingLicense?: React.ReactNode\n /**\n * Custom text shown while documents are being fetched.\n * Defaults to `\"Loading documents…\"`.\n */\n loadingDocuments?: React.ReactNode\n /**\n * Custom text shown when the query returns zero results.\n * Defaults to `\"No documents found\"`.\n */\n noDocuments?: React.ReactNode\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 previewMode?: boolean\n}\n\n/**\n * Generate dummy data for preview mode showing various SEO health scenarios\n */\nconst generateDummyData = (): DocumentWithSeoHealth[] => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dummyDocs: any[] = [\n {\n _id: 'preview-post-1',\n _type: 'post',\n title: 'Getting Started with SEO Best Practices',\n slug: {current: 'getting-started-seo'},\n _updatedAt: new Date(Date.now() - 2 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Getting Started with SEO Best Practices | My Blog',\n description:\n 'Learn the fundamentals of SEO optimization to improve your website visibility and search rankings.',\n keywords: ['seo', 'best practices', 'optimization'],\n metaImage: {_type: 'image', asset: {_ref: 'image-123', _type: 'reference'}},\n openGraph: {\n title: 'SEO Best Practices Guide',\n description: 'Master SEO optimization',\n image: {_type: 'image', asset: {_ref: 'image-123', _type: 'reference'}, alt: 'SEO Guide'},\n type: 'article',\n },\n twitter: {\n title: 'SEO Best Practices',\n description: 'Learn SEO optimization',\n image: {_type: 'image', asset: {_ref: 'image-123', _type: 'reference'}, alt: 'Guide'},\n card: 'summary_large_image',\n },\n },\n },\n {\n _id: 'preview-post-2',\n _type: 'post',\n title: 'Advanced Analytics Strategy',\n slug: {current: 'advanced-analytics'},\n _updatedAt: new Date(Date.now() - 5 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Advanced Analytics',\n description: 'Strategy tips',\n keywords: ['analytics', 'data'],\n openGraph: {\n title: 'Analytics Guide',\n },\n },\n },\n {\n _id: 'preview-page-1',\n _type: 'page',\n title: 'About Us',\n slug: {current: 'about'},\n _updatedAt: new Date(Date.now() - 10 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'About',\n keywords: ['company', 'team'],\n metaImage: {_type: 'image', asset: {_ref: 'image-456', _type: 'reference'}},\n },\n },\n {\n _id: 'preview-post-3',\n _type: 'post',\n title: 'Content Marketing Trends for 2024',\n slug: {current: 'content-marketing-trends'},\n _updatedAt: new Date(Date.now() - 1 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Content Marketing Trends 2024',\n description:\n 'Discover the latest content marketing trends and strategies to engage your audience effectively.',\n keywords: ['content marketing', 'trends', 'strategy', 'engagement'],\n metaImage: {_type: 'image', asset: {_ref: 'image-789', _type: 'reference'}},\n openGraph: {\n title: 'Content Marketing Trends 2024',\n description: 'Latest trends in content marketing',\n image: {_type: 'image', asset: {_ref: 'image-789', _type: 'reference'}, alt: 'Trends'},\n type: 'article',\n },\n twitter: {\n title: 'Content Marketing Trends',\n description: 'Discover the latest trends',\n card: 'summary',\n },\n },\n },\n {\n _id: 'preview-post-4',\n _type: 'product',\n title: 'Pro Plan',\n slug: {current: 'pro-plan'},\n _updatedAt: new Date(Date.now() - 15 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Pro',\n keywords: ['pricing'],\n },\n },\n {\n _id: 'preview-page-2',\n _type: 'page',\n title: 'Contact',\n slug: {current: 'contact'},\n _updatedAt: new Date(Date.now() - 8 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n openGraph: {\n title: 'Get in Touch',\n },\n },\n },\n {\n _id: 'preview-post-5',\n _type: 'post',\n title: 'Mobile Optimization Guide',\n slug: {current: 'mobile-optimization'},\n _updatedAt: new Date(Date.now() - 3 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Mobile Optimization Guide: Best Practices for Responsive Design',\n description:\n 'Complete guide to mobile optimization including responsive design, performance tips, and user experience best practices for modern web development.',\n keywords: ['mobile', 'optimization', 'responsive', 'performance'],\n metaImage: {_type: 'image', asset: {_ref: 'image-mobile', _type: 'reference'}},\n openGraph: {\n title: 'Mobile Optimization Best Practices',\n description: 'Master mobile web optimization',\n image: {_type: 'image', asset: {_ref: 'image-mobile', _type: 'reference'}, alt: 'Mobile'},\n type: 'article',\n },\n twitter: {\n title: 'Mobile Optimization Tips',\n description: 'Responsive design best practices',\n image: {_type: 'image', asset: {_ref: 'image-mobile', _type: 'reference'}, alt: 'Mobile'},\n card: 'summary_large_image',\n },\n },\n },\n ]\n\n // Calculate health scores and return\n return dummyDocs.map((doc) => ({\n ...doc,\n health: calculateHealthScore(doc),\n }))\n}\n\nconst SeoHealthDashboard: React.FC<SeoHealthDashboardProps> = ({\n icon = '📊',\n title = 'SEO Health Dashboard',\n description = 'Monitor and optimize SEO fields across all your documents',\n showTypeColumn = true,\n showDocumentId = true,\n queryTypes,\n queryRequireSeo = true,\n customQuery,\n apiVersion = '2023-01-01',\n licenseKey,\n typeLabels,\n typeColumnMode = 'badge',\n titleField,\n docBadge,\n loadingLicense,\n loadingDocuments,\n noDocuments,\n previewMode = false,\n}) => {\n const client = useClient({apiVersion})\n const [licenseStatus, setLicenseStatus] = useState<'loading' | 'valid' | 'invalid'>('loading')\n const [documents, setDocuments] = useState<DocumentWithSeoHealth[]>([])\n const [loading, setLoading] = useState(true)\n const [searchQuery, setSearchQuery] = useState('')\n const [filterStatus, setFilterStatus] = useState<string>('all')\n const [filterType, setFilterType] = useState<string>('all')\n const [sortBy, setSortBy] = useState<'score' | 'title'>('score')\n const [activePopover, setActivePopover] = useState<{\n top: number\n left: number\n issues: string[]\n } | null>(null)\n\n const VALIDATION_ENDPOINT = 'https://sanity-plugin-seofields.thehardik.in/api/validate-license'\n const CACHE_TTL_MS = 60 * 60 * 1000 // 1 hour\n\n const validateLicense = useCallback(\n async (forceRefresh = false) => {\n // Preview mode bypasses license validation\n if (previewMode) {\n setLicenseStatus('valid')\n return\n }\n\n // No key provided\n if (!licenseKey) {\n setLicenseStatus('invalid')\n return\n }\n\n const projectId = client.config().projectId ?? ''\n const cacheKey = `seofields_license_${projectId}`\n\n if (forceRefresh) {\n try {\n sessionStorage.removeItem(cacheKey)\n } catch {\n // ignore storage errors\n }\n }\n\n // Check sessionStorage cache\n if (!forceRefresh) {\n try {\n const cached = sessionStorage.getItem(cacheKey)\n if (cached) {\n const {valid, ts} = JSON.parse(cached) as {valid: boolean; ts: number}\n if (Date.now() - ts < CACHE_TTL_MS) {\n setLicenseStatus(valid ? 'valid' : 'invalid')\n return\n }\n }\n } catch {\n // ignore storage errors\n }\n }\n\n setLicenseStatus('loading')\n\n try {\n const res = await fetch(VALIDATION_ENDPOINT, {\n method: 'POST',\n headers: {'Content-Type': 'application/json'},\n body: JSON.stringify({licenseKey, projectId}),\n })\n const valid = res.ok\n setLicenseStatus(valid ? 'valid' : 'invalid')\n try {\n sessionStorage.setItem(cacheKey, JSON.stringify({valid, ts: Date.now()}))\n } catch {\n // ignore storage errors\n }\n } catch {\n // Network error — fail open to avoid blocking legitimate users\n setLicenseStatus('valid')\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [licenseKey, previewMode],\n )\n\n useEffect(() => {\n validateLicense()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [licenseKey, previewMode])\n\n const handleMouseEnterIssues = (el: HTMLDivElement | null, issues: string[]) => {\n if (!el) return\n const rect = el.getBoundingClientRect()\n const popoverWidth = 280\n const viewportWidth = window.innerWidth\n\n // Align popover left edge to trigger left edge, clamp within viewport\n let left = rect.left\n if (left + popoverWidth > viewportWidth - 10) left = viewportWidth - popoverWidth - 10\n if (left < 10) left = 10\n\n setActivePopover({top: rect.top, left, issues})\n }\n\n useEffect(() => {\n const fetchDocuments = async () => {\n try {\n setLoading(true)\n\n // Use dummy data in preview mode\n if (previewMode) {\n setDocuments(generateDummyData())\n return\n }\n\n let groqQuery: string\n let params: Record<string, unknown> = {}\n\n if (customQuery) {\n // Mode 3: fully custom GROQ (user-provided)\n groqQuery = customQuery\n } else if (queryTypes && queryTypes.length > 0) {\n // Mode 2: filter by specific document types (excluding drafts)\n const seoFilter = queryRequireSeo ? ' && seo != null' : ''\n const titleProj = buildTitleProjection(titleField)\n groqQuery = `*[_type in $types${seoFilter} && !(_id in path(\"drafts.**\"))]{\n _id,\n _type,\n ${titleProj},\n slug,\n seo,\n _updatedAt\n }`\n params = {types: queryTypes}\n } else {\n // Mode 1: default — all documents with an seo field (excluding drafts)\n const titleProj = buildTitleProjection(titleField)\n groqQuery = `*[seo != null && !(_id in path(\"drafts.**\"))]{\n _id,\n _type,\n ${titleProj},\n slug,\n seo,\n _updatedAt\n }`\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = await client.fetch(groqQuery, params, {perspective: 'published'})\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docsWithHealth: DocumentWithSeoHealth[] = result.map((doc: any) => ({\n ...doc,\n health: calculateHealthScore(doc),\n }))\n\n setDocuments(docsWithHealth)\n } catch (error) {\n console.error('Error fetching documents:', error)\n } finally {\n setLoading(false)\n }\n }\n\n fetchDocuments()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n client,\n customQuery,\n queryRequireSeo,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(queryTypes),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(titleField),\n previewMode,\n ])\n\n const uniqueDocumentTypes = useMemo(() => {\n const types = new Set(documents.map((doc) => doc._type))\n return Array.from(types).sort()\n }, [documents])\n\n const filteredAndSortedDocs = useMemo(() => {\n let filtered = documents\n\n if (searchQuery) {\n filtered = filtered.filter(\n (doc) =>\n doc.title?.toLowerCase().includes(searchQuery.toLowerCase()) ||\n doc._id?.toLowerCase().includes(searchQuery.toLowerCase()),\n )\n }\n\n if (filterStatus !== 'all') {\n filtered = filtered.filter((doc) => doc.health.status === filterStatus)\n }\n\n if (filterType !== 'all') {\n filtered = filtered.filter((doc) => doc._type === filterType)\n }\n\n const sorted = [...filtered].sort((a, b) => {\n if (sortBy === 'score') {\n return b.health.score - a.health.score\n }\n return (a.title || '').localeCompare(b.title || '')\n })\n\n return sorted\n }, [documents, searchQuery, filterStatus, filterType, sortBy])\n\n const stats = useMemo(() => {\n const total = documents.length\n const excellent = documents.filter((d) => d.health.score >= 80).length\n const good = documents.filter((d) => d.health.score >= 60 && d.health.score < 80).length\n const fair = documents.filter((d) => d.health.score >= 40 && d.health.score < 60).length\n const poor = documents.filter((d) => d.health.score > 0 && d.health.score < 40).length\n const missing = documents.filter((d) => d.health.score === 0).length\n\n const avgScore =\n total > 0 ? Math.round(documents.reduce((sum, d) => sum + d.health.score, 0) / total) : 0\n\n return {total, excellent, good, fair, poor, missing, avgScore}\n }, [documents])\n\n const handleMouseLeave = useCallback(() => {\n setActivePopover(null)\n }, [])\n\n return (\n <DashboardContainer>\n {licenseStatus === 'loading' && (\n <LoadingState style={{padding: '80px 24px'}}>\n <Spinner />\n {loadingLicense ?? 'Verifying license…'}\n </LoadingState>\n )}\n {licenseStatus === 'invalid' && (\n <UpgradeContainer>\n <UpgradeBox>\n {licenseKey ? (\n <>\n <UpgradeLock>❌</UpgradeLock>\n <UpgradeTitle>Invalid License Key</UpgradeTitle>\n <UpgradeText>\n The license key you provided is invalid or has been revoked. Please check your key\n and update it in the plugin config.\n </UpgradeText>\n <UpgradeCode>{`seofields({\n healthDashboard: {\n licenseKey: 'YOUR_LICENSE_KEY', // ← replace with a valid key\n },\n})`}</UpgradeCode>\n <UpgradeButton\n href=\"https://sanity-plugin-seofields.thehardik.in\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Get a New License Key →\n </UpgradeButton>\n <br />\n {/* eslint-disable-next-line react/jsx-no-bind */}\n <ReloadButton onClick={() => validateLicense(true)}>\n Click here If You Just Updated Your Key\n </ReloadButton>\n </>\n ) : (\n <>\n <UpgradeLock>🔒</UpgradeLock>\n <UpgradeTitle>SEO Health Dashboard</UpgradeTitle>\n <UpgradeText>\n This feature requires a license key. Add your key to the plugin config to unlock\n the full dashboard.\n </UpgradeText>\n <UpgradeCode>{`// sanity.config.ts\nimport { seofields } from 'sanity-plugin-seofields'\n\nexport default defineConfig({\n plugins: [\n seofields({\n healthDashboard: {\n licenseKey: 'SEOF-XXXX-XXXX-XXXX',\n },\n }),\n ],\n})`}</UpgradeCode>\n <UpgradeButton\n href=\"https://sanity-plugin-seofields.thehardik.in\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Get a License Key →\n </UpgradeButton>\n </>\n )}\n </UpgradeBox>\n </UpgradeContainer>\n )}\n {licenseStatus === 'valid' && (\n <>\n {/* Header */}\n <PageHeader>\n <PageTitle>\n <span>\n {icon} {title}\n </span>\n {previewMode && <PreviewBadge>Preview Mode</PreviewBadge>}\n </PageTitle>\n <PageSubtitle>{description}</PageSubtitle>\n </PageHeader>\n {/* Stats Grid */}\n {!loading && (\n <StatsGrid>\n <StatCard>\n <StatLabel>Total Docs</StatLabel>\n <StatValue>{stats.total}</StatValue>\n </StatCard>\n <StatCard>\n <StatLabel>Avg Score</StatLabel>\n <StatValue>{stats.avgScore}%</StatValue>\n </StatCard>\n <StatCard $accent=\"#10b981\">\n <StatLabel>Excellent (80+)</StatLabel>\n <StatValue>{stats.excellent}</StatValue>\n </StatCard>\n <StatCard $accent=\"#f59e0b\">\n <StatLabel>Good (60–79)</StatLabel>\n <StatValue>{stats.good}</StatValue>\n </StatCard>\n <StatCard $accent=\"#f97316\">\n <StatLabel>Fair (40–59)</StatLabel>\n <StatValue>{stats.fair}</StatValue>\n </StatCard>\n <StatCard $accent=\"#ef4444\">\n <StatLabel>Poor / Missing</StatLabel>\n <StatValue>{stats.poor + stats.missing}</StatValue>\n </StatCard>\n </StatsGrid>\n )}\n {/* Controls */}\n <ControlsBar>\n <SearchWrapper>\n <SearchIconSvg>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SearchIconSvg>\n <SearchInput\n placeholder=\"Search documents...\"\n value={searchQuery}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(e) => setSearchQuery(e.currentTarget.value)}\n />\n </SearchWrapper>\n <StyledSelect\n value={filterStatus}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(e) => setFilterStatus(e.currentTarget.value)}\n >\n <option value=\"all\">All Status</option>\n <option value=\"excellent\">Excellent</option>\n <option value=\"good\">Good</option>\n <option value=\"fair\">Fair</option>\n <option value=\"poor\">Poor</option>\n <option value=\"missing\">Missing</option>\n </StyledSelect>\n {uniqueDocumentTypes.length > 1 && (\n <StyledSelect\n value={filterType}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(e) => setFilterType(e.currentTarget.value)}\n >\n <option value=\"all\">All Types</option>\n {uniqueDocumentTypes.map((type) => (\n <option key={type} value={type}>\n {resolveTypeLabel(type, typeLabels)}\n </option>\n ))}\n </StyledSelect>\n )}\n <StyledSelect\n value={sortBy}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(e) => setSortBy(e.currentTarget.value as 'score' | 'title')}\n >\n <option value=\"score\">Sort by Score</option>\n <option value=\"title\">Sort by Title</option>\n </StyledSelect>\n </ControlsBar>\n {/* Documents Table */}\n <TableCard>\n {loading && (\n <LoadingState>\n <Spinner />\n {loadingDocuments ?? 'Loading documents…'}\n </LoadingState>\n )}\n {!loading &&\n (filteredAndSortedDocs.length === 0 ? (\n <EmptyState>{noDocuments ?? 'No documents found'}</EmptyState>\n ) : (\n <>\n <TableHeader>\n <ColTitle>Title</ColTitle>\n {showTypeColumn && <ColType>Type</ColType>}\n <ColScore>Score</ColScore>\n <ColIssues>Top Issues</ColIssues>\n </TableHeader>\n {filteredAndSortedDocs.map((doc) => {\n return (\n <TableRow key={doc._id}>\n <ColTitle>\n <TitleWrapper>\n <div>\n <DocTitleAnchor id={doc._id} type={doc._type}>\n {doc.title || 'Untitled'}\n </DocTitleAnchor>\n {showDocumentId && <DocId>{doc._id}</DocId>}\n </div>\n {docBadge && (\n <DocBadgeRenderer\n doc={doc as DocumentWithSeoHealth & Record<string, unknown>}\n docBadge={docBadge}\n />\n )}\n </TitleWrapper>\n </ColTitle>\n {showTypeColumn && (\n <ColType>\n {typeColumnMode === 'text' ? (\n <TypeText>{resolveTypeLabel(doc._type, typeLabels)}</TypeText>\n ) : (\n (() => {\n const typeColor = getTypeColor(doc._type)\n return (\n <TypeBadge $bgColor={typeColor.bg} $textColor={typeColor.text}>\n {resolveTypeLabel(doc._type, typeLabels)}\n </TypeBadge>\n )\n })()\n )}\n </ColType>\n )}\n <ColScore>\n <ScoreBadge $score={doc.health.score}>{doc.health.score}%</ScoreBadge>\n </ColScore>\n <ColIssues>\n {doc.health.issues.slice(0, 2).map((issue) => (\n <IssueTag key={`issue-${doc._id}-${issue}`}>• {issue}</IssueTag>\n ))}\n {doc.health.issues.length > 2 && (\n <MoreIssuesWrapper\n // eslint-disable-next-line react/jsx-no-bind\n onMouseEnter={function (e) {\n handleMouseEnterIssues(\n e.currentTarget as HTMLDivElement,\n doc.health.issues,\n )\n }}\n onMouseLeave={handleMouseLeave}\n >\n <MoreIssues>+{doc.health.issues.length - 2} more issues</MoreIssues>\n </MoreIssuesWrapper>\n )}\n </ColIssues>\n </TableRow>\n )\n })}\n </>\n ))}\n </TableCard>\n {/* Single shared popover rendered outside the table */}\n {activePopover && (\n <IssuesPopover\n style={{\n top: activePopover.top,\n left: activePopover.left,\n transform: 'translateY(calc(-100% - 10px))',\n }}\n >\n {activePopover.issues.map((issue) => (\n <PopoverIssueItem key={issue}>⚠️ {issue}</PopoverIssueItem>\n ))}\n </IssuesPopover>\n )}{' '}\n </>\n )}{' '}\n </DashboardContainer>\n )\n}\n\nexport default SeoHealthDashboard\n","import SeoHealthDashboard, {SeoHealthDashboardProps} from './SeoHealthDashboard'\n\n/**\n * Sanity Tool component for the SEO Health Dashboard\n * This component wraps the SeoHealthDashboard for use as a custom tool in Sanity Studio\n */\nconst SeoHealthTool = (props: SeoHealthDashboardProps) => {\n return <SeoHealthDashboard {...props} />\n}\n\nexport default SeoHealthTool\n","import {FeedbackType} from '../types'\n\nexport const stopWords = ['the', 'a', 'an', 'and', 'or', 'but']\n\nexport const hasMatchingKeyword = (title: string, keywordList: string[]): boolean => {\n if (!title || keywordList.length === 0) return false\n const lowerTitle = title.toLowerCase()\n return keywordList.some((keyword) => keyword && lowerTitle.includes(keyword.toLowerCase()))\n}\n\nexport const hasKeywordOveruse = (\n title: string,\n keywordList: string[],\n maxOccurrences = 3,\n): boolean => {\n if (!title || keywordList.length === 0) return false\n const lowerTitle = title.toLowerCase()\n return keywordList.some((keyword) => {\n if (!keyword) return false\n const matches = lowerTitle.match(new RegExp(keyword.toLowerCase(), 'g'))\n return matches ? matches.length > maxOccurrences : false\n })\n}\n\nexport const startsWithStopWord = (title: string): boolean => {\n if (!title) return false\n const firstWord = title.trim().split(' ')[0].toLowerCase()\n return stopWords.includes(firstWord)\n}\n\nexport const primaryKeywordAtStart = (title: string, keywords: string[]): boolean => {\n if (!title || keywords.length === 0) return true\n return title.toLowerCase().startsWith(keywords[0].toLowerCase())\n}\n\nexport const truncate = (text: string, maxLength: number): string =>\n text.length > maxLength ? `${text.slice(0, maxLength)}…` : text\n\nexport const hasExcessivePunctuation = (title: string): boolean => /[!@#$%^&*]{2,}/.test(title)\n\nexport const getMetaTitleValidationMessages = (\n title: string,\n keywords: string[],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n\n const minChar = 50\n const maxChar = 60\n const charCount = title?.length || 0\n\n // Empty check\n if (!title?.trim()) {\n feedback.push({text: 'Meta Title is empty. Add content to improve SEO.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (charCount < minChar)\n feedback.push({\n text: `Title is ${charCount} characters — below recommended ${minChar}.`,\n color: 'orange',\n })\n else if (charCount > maxChar)\n feedback.push({\n text: `Title is ${charCount} characters — exceeds recommended ${maxChar}.`,\n color: 'red',\n })\n else feedback.push({text: `Title length (${charCount}) looks good for SEO.`, color: 'green'})\n\n // Keyword checks\n if (isParentseoField) {\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(title, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in title — good job!'\n : 'Keywords defined but missing in title.',\n color: hasKeyword ? 'green' : 'red',\n })\n\n if (hasKeywordOveruse(title, keywords)) {\n feedback.push({\n text: 'Keyword appears too many times — avoid keyword stuffing.',\n color: 'orange',\n })\n }\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Stop word check\n if (startsWithStopWord(title))\n feedback.push({text: 'Title starts with a stop word — consider rephrasing.', color: 'orange'})\n\n // Punctuation check\n if (hasExcessivePunctuation(title))\n feedback.push({text: 'Title contains excessive punctuation — simplify it.', color: 'orange'})\n\n return feedback\n}\n\nexport const getMetaDescriptionValidationMessages = (\n description: string,\n keywords: string[],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n\n const minChar = 120\n const maxChar = 160\n const charCount = description?.length || 0\n\n if (!description?.trim()) {\n feedback.push({text: 'Meta description is empty. Add content to improve SEO.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (charCount < minChar)\n feedback.push({\n text: `Description is ${charCount} chars — below recommended ${minChar}.`,\n color: 'orange',\n })\n else if (charCount > maxChar)\n feedback.push({\n text: `Description is ${charCount} chars — exceeds recommended ${maxChar}.`,\n color: 'red',\n })\n else\n feedback.push({text: `Description length (${charCount}) looks good for SEO.`, color: 'green'})\n\n // Keyword checks\n if (isParentseoField) {\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(description, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in description — good job!'\n : 'Keywords defined but missing in description.',\n color: hasKeyword ? 'green' : 'red',\n })\n\n if (hasKeywordOveruse(description, keywords)) {\n feedback.push({\n text: 'Keyword appears too many times — avoid keyword stuffing.',\n color: 'orange',\n })\n }\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Stop word / filler check\n if (startsWithStopWord(description))\n feedback.push({\n text: 'Description starts with a stop word — consider rephrasing.',\n color: 'orange',\n })\n\n // Punctuation / special characters\n if (hasExcessivePunctuation(description))\n feedback.push({\n text: 'Description contains excessive punctuation — simplify it.',\n color: 'orange',\n })\n\n return feedback\n}\n\nexport const getOgTitleValidation = (\n title: string,\n keywords: string[] = [],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n const min = 40\n const max = 60\n const count = title?.length || 0\n\n // Empty check\n if (!title?.trim()) {\n feedback.push({text: 'OG Title is empty. Add content for better social preview.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (count < min)\n feedback.push({\n text: `OG Title is ${count} chars — shorter than recommended ${min}.`,\n color: 'orange',\n })\n else if (count > max)\n feedback.push({text: `OG Title is ${count} chars — exceeds recommended ${max}.`, color: 'red'})\n else feedback.push({text: `OG Title length (${count}) looks good.`, color: 'green'})\n\n if (isParentseoField) {\n // Keyword checks\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(title, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in OG title — good job!'\n : 'Keywords defined but missing in OG title.',\n color: hasKeyword ? 'green' : 'red',\n })\n\n if (hasKeywordOveruse(title, keywords)) {\n feedback.push({\n text: 'Keyword appears too many times in OG title — avoid keyword stuffing.',\n color: 'orange',\n })\n }\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Additional OG-specific checks\n if (startsWithStopWord(title))\n feedback.push({\n text: 'OG Title starts with a stop word — consider rephrasing.',\n color: 'orange',\n })\n\n if (hasExcessivePunctuation(title))\n feedback.push({text: 'OG Title contains excessive punctuation — simplify it.', color: 'orange'})\n\n return feedback\n}\n\nexport const getOgDescriptionValidation = (\n desc: string,\n keywords: string[] = [],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n const min = 90\n const max = 120\n const count = desc?.length || 0\n\n // Empty check\n if (!desc?.trim()) {\n feedback.push({\n text: 'OG Description is empty. Add content for better social preview.',\n color: 'red',\n })\n return feedback\n }\n\n // Length check\n if (count < min)\n feedback.push({\n text: `OG Description is ${count} chars — shorter than recommended ${min}.`,\n color: 'orange',\n })\n else if (count > max)\n feedback.push({\n text: `OG Description is ${count} chars — exceeds recommended ${max}.`,\n color: 'red',\n })\n else feedback.push({text: `OG Description length (${count}) looks good.`, color: 'green'})\n\n // Keyword checks\n if (isParentseoField) {\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(desc, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in OG description — good job!'\n : 'Keywords defined but missing in OG description.',\n color: hasKeyword ? 'green' : 'red',\n })\n\n if (hasKeywordOveruse(desc, keywords)) {\n feedback.push({\n text: 'Keyword appears too many times in OG description — avoid keyword stuffing.',\n color: 'orange',\n })\n }\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Additional OG-specific checks\n if (startsWithStopWord(desc))\n feedback.push({\n text: 'OG Description starts with a stop word — consider rephrasing.',\n color: 'orange',\n })\n\n if (hasExcessivePunctuation(desc))\n feedback.push({\n text: 'OG Description contains excessive punctuation — simplify it.',\n color: 'orange',\n })\n\n return feedback\n}\n\nexport const getTwitterTitleValidation = (\n title: string,\n keywords: string[] = [],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n const min = 30\n const max = 70\n const count = title?.length || 0\n\n if (!title?.trim()) {\n feedback.push({text: 'X Title is empty. Add content for better SEO.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (count < min)\n feedback.push({\n text: `X Title is ${count} chars — shorter than recommended ${min}.`,\n color: 'orange',\n })\n else if (count > max)\n feedback.push({\n text: `X Title is ${count} chars — exceeds recommended ${max}.`,\n color: 'red',\n })\n else feedback.push({text: `X Title length (${count}) looks good.`, color: 'green'})\n\n if (isParentseoField) {\n // Keyword checks\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(title, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in X title — good job!'\n : 'Keywords defined but missing in X title.',\n color: hasKeyword ? 'green' : 'red',\n })\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Punctuation check\n if (/[!@#$%^&*]{2,}/.test(title))\n feedback.push({text: 'X Title has excessive punctuation — simplify it.', color: 'orange'})\n\n return feedback\n}\n\nexport const getTwitterDescriptionValidation = (\n desc: string,\n keywords: string[] = [],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n const min = 50\n const max = 200\n const count = desc?.length || 0\n\n if (!desc?.trim()) {\n feedback.push({text: 'X Description is empty. Add content for better SEO.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (count < min)\n feedback.push({\n text: `X Description is ${count} chars — shorter than recommended ${min}.`,\n color: 'orange',\n })\n else if (count > max)\n feedback.push({\n text: `X Description is ${count} chars — exceeds recommended ${max}.`,\n color: 'red',\n })\n else feedback.push({text: `X Description length (${count}) looks good.`, color: 'green'})\n\n if (isParentseoField) {\n // Keyword checks\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(desc, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in X description — good job!'\n : 'Keywords defined but missing in X description.',\n color: hasKeyword ? 'green' : 'red',\n })\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Punctuation check\n if (/[!@#$%^&*]{2,}/.test(desc))\n feedback.push({\n text: 'X Description has excessive punctuation — simplify it.',\n color: 'orange',\n })\n\n return feedback\n}\n","import {Stack, Text} from '@sanity/ui'\nimport React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaDescriptionValidationMessages} from '../../utils/seoUtils'\n\nconst MetaDescription = (props: StringInputProps): React.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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaTitleValidationMessages} from '../../utils/seoUtils'\n\nconst MetaTitle = (props: StringInputProps): React.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 {Box, Stack, Text} from '@sanity/ui'\nimport React from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\nimport styled from 'styled-components'\n\nimport {truncate} from '../utils/seoUtils'\n\nconst PreviewContainer = styled.div`\n max-width: 600px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: #ffffff;\n border: 1px solid #dadce0;\n border-radius: 8px;\n overflow: hidden;\n`\n\nconst PreviewHeader = styled.div`\n background: #f8f9fa;\n padding: 12px 16px;\n border-bottom: 1px solid #dadce0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n`\n\nconst PreviewBody = styled.div`\n padding: 16px;\n`\n\nconst SerpUrl = styled.p`\n margin: 0 0 4px;\n color: #006621;\n font-size: 13px;\n line-height: 1.4;\n word-break: break-word;\n`\n\nconst SerpTitle = styled.h3`\n margin: 0 0 8px;\n color: #1a0dab;\n font-size: 18px;\n font-weight: 500;\n line-height: 1.4;\n word-break: break-word;\n\n &:hover {\n text-decoration: underline;\n }\n`\n\nconst SerpDescription = styled.p`\n margin: 0;\n color: #545454;\n font-size: 14px;\n line-height: 1.6;\n word-break: break-word;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`\n\nconst LiveIndicator = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: #4f46e5;\n background: #f0f4ff;\n padding: 4px 8px;\n border-radius: 4px;\n`\n\nconst SeoPreview = (props: StringInputProps): React.ReactElement => {\n const {path, schemaType} = props\n const {options} = schemaType as {\n options?: {\n baseUrl?: string\n prefix?: ((doc: {_type?: string} & Record<string, unknown>) => string) | string\n }\n }\n const baseUrl = options?.baseUrl || 'https://www.example.com'\n const prefixFunction = options?.prefix as\n | ((doc: {_type?: string} & Record<string, unknown>) => string)\n | undefined\n const parent = useFormValue([path[0]]) || {\n title: '',\n description: '',\n canonicalUrl: '',\n }\n const rootDoc: {\n slug?: {current: string}\n } = useFormValue([]) || {\n slug: {current: ''},\n }\n const slug: string = rootDoc?.slug?.current || ''\n\n const {\n title,\n description,\n canonicalUrl: url,\n } = parent as {\n title?: string\n description?: string\n canonicalUrl?: string\n }\n\n // Build full URL\n const base = (url || baseUrl)?.replace(/\\/+$/, '')\n const slugStr = String(slug || '').replace(/^\\/+/, '')\n const pref = String(\n prefixFunction ? prefixFunction(rootDoc as {slug?: {current: string}}) : '',\n ).replace(/^\\/+|\\/+$/g, '')\n const urlPath = [pref, slugStr].filter(Boolean).join('/')\n const finalUrl = urlPath ? `${base}/${urlPath}` : base\n\n // Extract domain for display\n const domain = (() => {\n try {\n const u = new URL(finalUrl || base)\n return u.hostname\n } catch {\n return 'example.com'\n }\n })()\n\n // Format URL display with › separator\n const urlDisplay = `${domain}${urlPath ? ` › ${urlPath.split('/').slice(-1)[0]}` : ''}`\n\n return (\n <Box padding={3}>\n <PreviewContainer>\n <PreviewHeader>\n <span\n style={{\n fontSize: '11px',\n color: '#5f6368',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Search Preview\n </span>\n <LiveIndicator>\n <span\n style={{\n width: '4px',\n height: '4px',\n borderRadius: '50%',\n backgroundColor: '#4f46e5',\n display: 'inline-block',\n }}\n />\n Live\n </LiveIndicator>\n </PreviewHeader>\n\n <PreviewBody>\n <SerpUrl>{finalUrl ? urlDisplay : 'example.com › page-url'}</SerpUrl>\n <SerpTitle>\n {title && title.length > 0 ? truncate(title, 60) : 'Your SEO Title will appear here'}\n </SerpTitle>\n <SerpDescription>\n {description && description.length > 0\n ? truncate(description, 160)\n : 'Your meta description will show up here. Make it compelling!'}\n </SerpDescription>\n </PreviewBody>\n </PreviewContainer>\n </Box>\n )\n}\n\nexport default SeoPreview\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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgDescriptionValidation} from '../../utils/seoUtils'\n\nconst OgDescription = (props: StringInputProps): React.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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgTitleValidation} from '../../utils/seoUtils'\n\nconst OgTitle: React.FC<StringInputProps> = (props) => {\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 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 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 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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterDescriptionValidation} from '../../utils/seoUtils'\n\nconst TwitterDescription = (props: StringInputProps): React.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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterTitleValidation} from '../../utils/seoUtils'\n\nconst TwitterTitle = (props: StringInputProps): React.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 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 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 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 {defineField, defineType, SchemaTypeDefinition} from 'sanity'\n\nimport MetaDescription from '../components/meta/MetaDescription'\nimport MetaTitle from '../components/meta/MetaTitle'\nimport SeoPreview from '../components/SeoPreview'\nimport {SeoFieldsPluginConfig} from '../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../utils/fieldsUtils'\nimport {isEmpty} from '../utils/utils'\nimport openGraph from './types/openGraph'\nimport twitter from './types/twitter'\n\nexport default function seoFieldsSchema(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n return defineType({\n name: 'seoFields',\n title: 'SEO Fields',\n type: 'object',\n fields: [\n defineField({\n name: 'robots',\n title: 'Robots Settings',\n type: 'robots', // Use the separate robots type here\n hidden: getFieldHiddenFunction('robots', config),\n }),\n // 👇 conditionally spread preview field\n ...((typeof config.seoPreview === 'boolean' && config.seoPreview) ||\n (typeof config.seoPreview === 'object' && !isEmpty(config.seoPreview))\n ? [\n defineField({\n name: 'preview',\n title: 'SEO Preview',\n type: 'string',\n components: {input: SeoPreview},\n options: {\n baseUrl: config.baseUrl || 'https://www.example.com',\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.prefix\n ? {prefix: config.seoPreview.prefix}\n : {}),\n } as Record<string, unknown>,\n // Use a readOnly field to prevent editing\n // This field is just for preview purposes\n initialValue: '' as string, // Set an initial value\n readOnly: true,\n }),\n ]\n : []),\n\n defineField({\n name: 'title',\n ...getFieldInfo('title', config.fieldOverrides),\n // title: 'Meta Title',\n type: 'string',\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 components: {\n input: MetaTitle,\n },\n // validation: (Rule) => Rule.max(60).warning('Meta title should be under 60 characters.'),\n hidden: getFieldHiddenFunction('title', config),\n }),\n defineField({\n name: 'description',\n ...getFieldInfo('description', config.fieldOverrides),\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 type: 'text',\n rows: 3,\n components: {\n input: MetaDescription,\n },\n // validation: (Rule) => Rule.max(160).warning('Meta description should be under 160 characters.'),\n hidden: getFieldHiddenFunction('description', config),\n }),\n defineField({\n name: 'metaImage',\n ...getFieldInfo('metaImage', config.fieldOverrides),\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 type: 'image',\n options: {\n hotspot: true,\n },\n hidden: getFieldHiddenFunction('metaImage', config),\n }),\n defineField({\n name: 'metaAttributes',\n // title: 'Additional Meta Attributes',\n ...getFieldInfo('metaAttributes', config.fieldOverrides),\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 hidden: getFieldHiddenFunction('metaAttributes', 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 openGraph(config) as any,\n twitter(config) as any,\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 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 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 React from 'react'\nimport {definePlugin} from 'sanity'\n\nimport SeoHealthTool from './components/SeoHealthTool'\nimport types from './schemas/types'\nimport type {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\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 in the preview.\n * The prefix function receives the current document as an argument and should return a string.\n * Example:\n * ```\n * seoPreview: {\n * prefix: (doc) => `/${doc.slug?.current || 'untitled'}`\n * }\n * ```\n */\n seoPreview?:\n | boolean\n | {\n prefix?: (doc: {_type?: string} & Record<string, unknown>) => 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 * 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 * 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 display?: {\n typeColumn?: boolean\n documentId?: boolean\n }\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 */\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 * typeLabels: { productDrug: 'Products', singleCondition: 'Condition' }\n */\n typeLabels?: 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 * docBadge: (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 docBadge?: (\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined\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}\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 typeLabels: Record<string, string> | undefined\n typeColumnMode: 'badge' | 'text' | undefined\n titleField: string | Record<string, string> | undefined\n docBadge:\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}\n\nconst resolveDashboardConfig = (\n healthDashboard: SeoFieldsPluginConfig['healthDashboard'],\n): ResolvedDashboardConfig => {\n const cfg = typeof healthDashboard === 'object' ? healthDashboard : undefined\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?.display?.typeColumn,\n showDocumentId: cfg?.display?.documentId,\n queryTypes: cfg?.query?.types,\n queryRequireSeo: cfg?.query?.requireSeo,\n queryGroq: cfg?.query?.groq,\n apiVersion: cfg?.apiVersion,\n licenseKey: cfg?.licenseKey,\n typeLabels: cfg?.typeLabels,\n typeColumnMode: cfg?.typeColumnMode,\n titleField: cfg?.titleField,\n docBadge: cfg?.docBadge,\n loadingLicense: cfg?.content?.loadingLicense,\n loadingDocuments: cfg?.content?.loadingDocuments,\n noDocuments: cfg?.content?.noDocuments,\n previewMode: cfg?.previewMode,\n }\n}\n\nconst seofields = definePlugin<SeoFieldsPluginConfig | void>((config = {}) => {\n const {healthDashboard = true} = config as SeoFieldsPluginConfig\n const dash = resolveDashboardConfig(healthDashboard)\n\n const BoundSeoHealthTool = () =>\n React.createElement(SeoHealthTool, {\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 typeLabels: dash.typeLabels,\n typeColumnMode: dash.typeColumnMode,\n titleField: dash.titleField,\n docBadge: dash.docBadge,\n loadingLicense: dash.loadingLicense,\n loadingDocuments: dash.loadingDocuments,\n noDocuments: dash.noDocuments,\n previewMode: dash.previewMode,\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"],"names":["from","length","position","character","characters","j","k","x","y","z","_","f","o","t","n","e","r","s","d.RULESET","d.prefixer","d.stringify","a","c","l","d.compile","p","d.serialize","d.middleware","d.rulesheet","h","m","g","S","w","E","N","O","i","d","v","b","u","D","styled","useIntentLink","jsx","keyframes","hash","char","openGraph","twitter","robots","useClient","useState","useCallback","useEffect","useMemo","types","jsxs","Fragment","useFormValue","Stack","Text","Box","document","defineType","defineField","seoFields","definePlugin","React"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/styled-components/node_modules/tslib/tslib.es6.mjs","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/stylis/src/Prefixer.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/styled-components/dist/styled-components.esm.js","../src/components/SeoHealthDashboard.tsx","../src/components/SeoHealthTool.tsx","../src/utils/seoUtils.ts","../src/components/meta/MetaDescription.tsx","../src/components/meta/MetaTitle.tsx","../src/components/SeoPreview.tsx","../src/utils/fieldsUtils.ts","../src/utils/utils.ts","../src/components/openGraph/OgDescription.tsx","../src/components/openGraph/OgTitle.tsx","../src/schemas/types/openGraph/index.ts","../src/components/twitter/twitterDescription.tsx","../src/components/twitter/twitterTitle.tsx","../src/schemas/types/twitter/index.ts","../src/schemas/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"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n 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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace, substr, match} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @param {object[]} children\n * @return {string}\n */\nexport function prefix (value, length, children) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// tab-size\n\t\tcase 4789:\n\t\t\treturn MOZ + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t\t// default: fallthrough to below\n\t\t\t}\n\t\t// flex, flex-direction, scroll-snap-type, writing-mode\n\t\tcase 6828: case 4268: case 2903:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/g, '') + (!match(value, /flex-|baseline/) ? MS + 'grid-row-' + replace(value, /flex-|-self/g, '') : '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/g, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// justify-self\n\t\tcase 4200:\n\t\t\tif (!match(value, /flex-|baseline/)) return MS + 'grid-column-align' + substr(value, length) + value\n\t\t\tbreak\n\t\t// grid-template-(columns|rows)\n\t\tcase 2592: case 3360:\n\t\t\treturn MS + replace(value, 'template-', '') + value\n\t\t// grid-(row|column)-start\n\t\tcase 4384: case 3616:\n\t\t\tif (children && children.some(function (element, index) { return length = index, match(element.props, /grid-\\w+-end/) })) {\n\t\t\t\treturn ~indexof(value + (children = children[length].value), 'span', 0) ? value : (MS + replace(value, '-start', '') + value + MS + 'grid-row-span:' + (~indexof(children, 'span', 0) ? match(children, /\\d+/) : +match(children, /\\d+/) - +match(value, /\\d+/)) + ';')\n\t\t\t}\n\t\t\treturn MS + replace(value, '-start', '') + value\n\t\t// grid-(row|column)-end\n\t\tcase 4896: case 4128:\n\t\t\treturn (children && children.some(function (element) { return match(element.props, /grid-\\w+-start/) })) ? value : MS + replace(replace(value, '-end', '-span'), 'span ', '') + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch', 0) ? prefix(replace(value, 'stretch', 'fill-available'), length, children) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// grid-(column|row)\n\t\tcase 5152: case 5920:\n\t\t\treturn replace(value, /(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/, function (_, a, b, c, d, e, f) { return (MS + a + ':' + b + f) + (c ? (MS + a + '-span:' + (d ? e : +e - +b)) + f : '') + value })\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// stick(y)?\n\t\t\tif (charat(value, length + 6) === 121)\n\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\tbreak\n\t\t// display: (flex|inline-flex|grid|inline-grid)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, charat(value, 14) === 45 ? 18 : 11)) {\n\t\t\t\t// (inline-)?fle(x)\n\t\t\t\tcase 120:\n\t\t\t\t\treturn replace(value, /(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t\t// (inline-)?gri(d)\n\t\t\t\tcase 100:\n\t\t\t\t\treturn replace(value, ':', ':' + MS) + value\n\t\t\t}\n\t\t\tbreak\n\t\t// scroll-margin, scroll-margin-(top|right|bottom|left)\n\t\tcase 5719: case 2647: case 2135: case 3927: case 2391:\n\t\t\treturn replace(value, 'scroll-', 'scroll-snap-') + value\n\t}\n\n\treturn value\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine, filter, assign} from './Utility.js'\nimport {copy, lift, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(children = element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, callback = /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import{__spreadArray as e,__assign as t}from\"tslib\";import n from\"@emotion/is-prop-valid\";import o,{useRef as r,useState as s,useMemo as i,useEffect as a,useContext as c,useDebugValue as l,createElement as u}from\"react\";import p from\"shallowequal\";import*as d from\"stylis\";import h from\"@emotion/unitless\";var f=\"undefined\"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||\"data-styled\",m=\"active\",y=\"data-styled-version\",v=\"6.1.19\",g=\"/*!sc*/\\n\",S=\"undefined\"!=typeof window&&\"undefined\"!=typeof document,w=Boolean(\"boolean\"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&\"\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY?\"false\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&\"\"!==process.env.SC_DISABLE_SPEEDY?\"false\"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY:\"production\"!==process.env.NODE_ENV),b={},E=/invalid hook call/i,N=new Set,P=function(t,n){if(\"production\"!==process.env.NODE_ENV){var o=n?' with the id of \"'.concat(n,'\"'):\"\",s=\"The component \".concat(t).concat(o,\" has been created dynamically.\\n\")+\"You may see this warning because you've called styled inside another component.\\nTo resolve this only create new StyledComponents outside of any render method and function component.\\nSee https://styled-components.com/docs/basics#define-styled-components-outside-of-the-render-method for more info.\\n\",i=console.error;try{var a=!0;console.error=function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];E.test(t)?(a=!1,N.delete(s)):i.apply(void 0,e([t],n,!1))},r(),a&&!N.has(s)&&(console.warn(s),N.add(s))}catch(e){E.test(e.message)&&N.delete(s)}finally{console.error=i}}},_=Object.freeze([]),C=Object.freeze({});function I(e,t,n){return void 0===n&&(n=C),e.theme!==n.theme&&e.theme||t||n.theme}var A=new Set([\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"big\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"u\",\"ul\",\"use\",\"var\",\"video\",\"wbr\",\"circle\",\"clipPath\",\"defs\",\"ellipse\",\"foreignObject\",\"g\",\"image\",\"line\",\"linearGradient\",\"marker\",\"mask\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialGradient\",\"rect\",\"stop\",\"svg\",\"text\",\"tspan\"]),O=/[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~-]+/g,D=/(^-|-$)/g;function R(e){return e.replace(O,\"-\").replace(D,\"\")}var T=/(a)(d)/gi,k=52,j=function(e){return String.fromCharCode(e+(e>25?39:97))};function x(e){var t,n=\"\";for(t=Math.abs(e);t>k;t=t/k|0)n=j(t%k)+n;return(j(t%k)+n).replace(T,\"$1-$2\")}var V,F=5381,z=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},M=function(e){return z(F,e)};function $(e){return x(M(e)>>>0)}function B(e){return\"production\"!==process.env.NODE_ENV&&\"string\"==typeof e&&e||e.displayName||e.name||\"Component\"}function G(e){return\"string\"==typeof e&&(\"production\"===process.env.NODE_ENV||e.charAt(0)===e.charAt(0).toLowerCase())}var L=\"function\"==typeof Symbol&&Symbol.for,Y=L?Symbol.for(\"react.memo\"):60115,q=L?Symbol.for(\"react.forward_ref\"):60112,W={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},H={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},U={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},J=((V={})[q]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},V[Y]=U,V);function X(e){return(\"type\"in(t=e)&&t.type.$$typeof)===Y?U:\"$$typeof\"in e?J[e.$$typeof]:W;var t}var Z=Object.defineProperty,K=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,ee=Object.getOwnPropertyDescriptor,te=Object.getPrototypeOf,ne=Object.prototype;function oe(e,t,n){if(\"string\"!=typeof t){if(ne){var o=te(t);o&&o!==ne&&oe(e,o,n)}var r=K(t);Q&&(r=r.concat(Q(t)));for(var s=X(e),i=X(t),a=0;a<r.length;++a){var c=r[a];if(!(c in H||n&&n[c]||i&&c in i||s&&c in s)){var l=ee(t,c);try{Z(e,c,l)}catch(e){}}}}return e}function re(e){return\"function\"==typeof e}function se(e){return\"object\"==typeof e&&\"styledComponentId\"in e}function ie(e,t){return e&&t?\"\".concat(e,\" \").concat(t):e||t||\"\"}function ae(e,t){if(0===e.length)return\"\";for(var n=e[0],o=1;o<e.length;o++)n+=t?t+e[o]:e[o];return n}function ce(e){return null!==e&&\"object\"==typeof e&&e.constructor.name===Object.name&&!(\"props\"in e&&e.$$typeof)}function le(e,t,n){if(void 0===n&&(n=!1),!n&&!ce(e)&&!Array.isArray(e))return t;if(Array.isArray(t))for(var o=0;o<t.length;o++)e[o]=le(e[o],t[o]);else if(ce(t))for(var o in t)e[o]=le(e[o],t[o]);return e}function ue(e,t){Object.defineProperty(e,\"toString\",{value:t})}var pe=\"production\"!==process.env.NODE_ENV?{1:\"Cannot create styled-component for component: %s.\\n\\n\",2:\"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n- Are you trying to reuse it across renders?\\n- Are you accidentally calling collectStyles twice?\\n\\n\",3:\"Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\",4:\"The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n- Does this error occur on the client and is your target falsy?\\n- Does this error occur on the server and is the sheet falsy?\\n\\n\",5:\"The clone method cannot be used on the client!\\n\\n- Are you running in a client-like environment on the server?\\n- Are you trying to run SSR on the client?\\n\\n\",6:\"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n- Are you using a custom target that isn't mounted?\\n- Does your document not have a valid head element?\\n- Have you accidentally removed a style tag manually?\\n\\n\",7:'ThemeProvider: Please return an object from your \"theme\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n',8:'ThemeProvider: Please make your \"theme\" prop an object.\\n\\n',9:\"Missing document `<head>`\\n\\n\",10:\"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",11:\"_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n\",12:\"It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n\",13:\"%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\\n\",14:'ThemeProvider: \"theme\" prop is required.\\n\\n',15:\"A stylis plugin has been supplied that is not named. We need a name for each plugin to be able to prevent styling collisions between different stylis configurations within the same app. Before you pass your plugin to `<StyleSheetManager stylisPlugins={[]}>`, please make sure each plugin is uniquely-named, e.g.\\n\\n```js\\nObject.defineProperty(importedPlugin, 'name', { value: 'some-unique-name' });\\n```\\n\\n\",16:\"Reached the limit of how many styled components may be created at group %s.\\nYou may only create up to 1,073,741,824 components. If you're creating components dynamically,\\nas for instance in your render method then you may be running into this limitation.\\n\\n\",17:\"CSSStyleSheet could not be found on HTMLStyleElement.\\nHas styled-components' style tag been unmounted or altered by another script?\\n\",18:\"ThemeProvider: Please make sure your useTheme hook is within a `<ThemeProvider>`\"}:{};function de(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=e[0],o=[],r=1,s=e.length;r<s;r+=1)o.push(e[r]);return o.forEach(function(e){n=n.replace(/%[a-z]/,e)}),n}function he(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];return\"production\"===process.env.NODE_ENV?new Error(\"An error occurred. See https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#\".concat(t,\" for more information.\").concat(n.length>0?\" Args: \".concat(n.join(\", \")):\"\")):new Error(de.apply(void 0,e([pe[t]],n,!1)).trim())}var fe=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n<e;n++)t+=this.groupSizes[n];return t},e.prototype.insertRules=function(e,t){if(e>=this.groupSizes.length){for(var n=this.groupSizes,o=n.length,r=o;e>=r;)if((r<<=1)<0)throw he(16,\"\".concat(e));this.groupSizes=new Uint32Array(r),this.groupSizes.set(n),this.length=r;for(var s=o;s<r;s++)this.groupSizes[s]=0}for(var i=this.indexOfGroup(e+1),a=(s=0,t.length);s<a;s++)this.tag.insertRule(i,t[s])&&(this.groupSizes[e]++,i++)},e.prototype.clearGroup=function(e){if(e<this.length){var t=this.groupSizes[e],n=this.indexOfGroup(e),o=n+t;this.groupSizes[e]=0;for(var r=n;r<o;r++)this.tag.deleteRule(n)}},e.prototype.getGroup=function(e){var t=\"\";if(e>=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],o=this.indexOfGroup(e),r=o+n,s=o;s<r;s++)t+=\"\".concat(this.tag.getRule(s)).concat(g);return t},e}(),me=1<<30,ye=new Map,ve=new Map,ge=1,Se=function(e){if(ye.has(e))return ye.get(e);for(;ve.has(ge);)ge++;var t=ge++;if(\"production\"!==process.env.NODE_ENV&&((0|t)<0||t>me))throw he(16,\"\".concat(t));return ye.set(e,t),ve.set(t,e),t},we=function(e,t){ge=t+1,ye.set(e,t),ve.set(t,e)},be=\"style[\".concat(f,\"][\").concat(y,'=\"').concat(v,'\"]'),Ee=new RegExp(\"^\".concat(f,'\\\\.g(\\\\d+)\\\\[id=\"([\\\\w\\\\d-]+)\"\\\\].*?\"([^\"]*)')),Ne=function(e,t,n){for(var o,r=n.split(\",\"),s=0,i=r.length;s<i;s++)(o=r[s])&&e.registerName(t,o)},Pe=function(e,t){for(var n,o=(null!==(n=t.textContent)&&void 0!==n?n:\"\").split(g),r=[],s=0,i=o.length;s<i;s++){var a=o[s].trim();if(a){var c=a.match(Ee);if(c){var l=0|parseInt(c[1],10),u=c[2];0!==l&&(we(u,l),Ne(e,u,c[3]),e.getTag().insertRules(l,r)),r.length=0}else r.push(a)}}},_e=function(e){for(var t=document.querySelectorAll(be),n=0,o=t.length;n<o;n++){var r=t[n];r&&r.getAttribute(f)!==m&&(Pe(e,r),r.parentNode&&r.parentNode.removeChild(r))}};function Ce(){return\"undefined\"!=typeof __webpack_nonce__?__webpack_nonce__:null}var Ie=function(e){var t=document.head,n=e||t,o=document.createElement(\"style\"),r=function(e){var t=Array.from(e.querySelectorAll(\"style[\".concat(f,\"]\")));return t[t.length-1]}(n),s=void 0!==r?r.nextSibling:null;o.setAttribute(f,m),o.setAttribute(y,v);var i=Ce();return i&&o.setAttribute(\"nonce\",i),n.insertBefore(o,s),o},Ae=function(){function e(e){this.element=Ie(e),this.element.appendChild(document.createTextNode(\"\")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,n=0,o=t.length;n<o;n++){var r=t[n];if(r.ownerNode===e)return r}throw he(17)}(this.element),this.length=0}return e.prototype.insertRule=function(e,t){try{return this.sheet.insertRule(t,e),this.length++,!0}catch(e){return!1}},e.prototype.deleteRule=function(e){this.sheet.deleteRule(e),this.length--},e.prototype.getRule=function(e){var t=this.sheet.cssRules[e];return t&&t.cssText?t.cssText:\"\"},e}(),Oe=function(){function e(e){this.element=Ie(e),this.nodes=this.element.childNodes,this.length=0}return e.prototype.insertRule=function(e,t){if(e<=this.length&&e>=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e<this.length?this.nodes[e].textContent:\"\"},e}(),De=function(){function e(e){this.rules=[],this.length=0}return e.prototype.insertRule=function(e,t){return e<=this.length&&(this.rules.splice(e,0,t),this.length++,!0)},e.prototype.deleteRule=function(e){this.rules.splice(e,1),this.length--},e.prototype.getRule=function(e){return e<this.length?this.rules[e]:\"\"},e}(),Re=S,Te={isServer:!S,useCSSOMInjection:!w},ke=function(){function e(e,n,o){void 0===e&&(e=C),void 0===n&&(n={});var r=this;this.options=t(t({},Te),e),this.gs=n,this.names=new Map(o),this.server=!!e.isServer,!this.server&&S&&Re&&(Re=!1,_e(this)),ue(this,function(){return function(e){for(var t=e.getTag(),n=t.length,o=\"\",r=function(n){var r=function(e){return ve.get(e)}(n);if(void 0===r)return\"continue\";var s=e.names.get(r),i=t.getGroup(n);if(void 0===s||!s.size||0===i.length)return\"continue\";var a=\"\".concat(f,\".g\").concat(n,'[id=\"').concat(r,'\"]'),c=\"\";void 0!==s&&s.forEach(function(e){e.length>0&&(c+=\"\".concat(e,\",\"))}),o+=\"\".concat(i).concat(a,'{content:\"').concat(c,'\"}').concat(g)},s=0;s<n;s++)r(s);return o}(r)})}return e.registerId=function(e){return Se(e)},e.prototype.rehydrate=function(){!this.server&&S&&_e(this)},e.prototype.reconstructWithOptions=function(n,o){return void 0===o&&(o=!0),new e(t(t({},this.options),n),this.gs,o&&this.names||void 0)},e.prototype.allocateGSInstance=function(e){return this.gs[e]=(this.gs[e]||0)+1},e.prototype.getTag=function(){return this.tag||(this.tag=(e=function(e){var t=e.useCSSOMInjection,n=e.target;return e.isServer?new De(n):t?new Ae(n):new Oe(n)}(this.options),new fe(e)));var e},e.prototype.hasNameForId=function(e,t){return this.names.has(e)&&this.names.get(e).has(t)},e.prototype.registerName=function(e,t){if(Se(e),this.names.has(e))this.names.get(e).add(t);else{var n=new Set;n.add(t),this.names.set(e,n)}},e.prototype.insertRules=function(e,t,n){this.registerName(e,t),this.getTag().insertRules(Se(e),n)},e.prototype.clearNames=function(e){this.names.has(e)&&this.names.get(e).clear()},e.prototype.clearRules=function(e){this.getTag().clearGroup(Se(e)),this.clearNames(e)},e.prototype.clearTag=function(){this.tag=void 0},e}(),je=/&/g,xe=/^\\s*\\/\\/.*$/gm;function Ve(e,t){return e.map(function(e){return\"rule\"===e.type&&(e.value=\"\".concat(t,\" \").concat(e.value),e.value=e.value.replaceAll(\",\",\",\".concat(t,\" \")),e.props=e.props.map(function(e){return\"\".concat(t,\" \").concat(e)})),Array.isArray(e.children)&&\"@keyframes\"!==e.type&&(e.children=Ve(e.children,t)),e})}function Fe(e){var t,n,o,r=void 0===e?C:e,s=r.options,i=void 0===s?C:s,a=r.plugins,c=void 0===a?_:a,l=function(e,o,r){return r.startsWith(n)&&r.endsWith(n)&&r.replaceAll(n,\"\").length>0?\".\".concat(t):e},u=c.slice();u.push(function(e){e.type===d.RULESET&&e.value.includes(\"&\")&&(e.props[0]=e.props[0].replace(je,n).replace(o,l))}),i.prefix&&u.push(d.prefixer),u.push(d.stringify);var p=function(e,r,s,a){void 0===r&&(r=\"\"),void 0===s&&(s=\"\"),void 0===a&&(a=\"&\"),t=a,n=r,o=new RegExp(\"\\\\\".concat(n,\"\\\\b\"),\"g\");var c=e.replace(xe,\"\"),l=d.compile(s||r?\"\".concat(s,\" \").concat(r,\" { \").concat(c,\" }\"):c);i.namespace&&(l=Ve(l,i.namespace));var p=[];return d.serialize(l,d.middleware(u.concat(d.rulesheet(function(e){return p.push(e)})))),p};return p.hash=c.length?c.reduce(function(e,t){return t.name||he(15),z(e,t.name)},F).toString():\"\",p}var ze=new ke,Me=Fe(),$e=o.createContext({shouldForwardProp:void 0,styleSheet:ze,stylis:Me}),Be=$e.Consumer,Ge=o.createContext(void 0);function Le(){return c($e)}function Ye(e){var t=s(e.stylisPlugins),n=t[0],r=t[1],c=Le().styleSheet,l=i(function(){var t=c;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t},[e.disableCSSOMInjection,e.sheet,e.target,c]),u=i(function(){return Fe({options:{namespace:e.namespace,prefix:e.enableVendorPrefixes},plugins:n})},[e.enableVendorPrefixes,e.namespace,n]);a(function(){p(n,e.stylisPlugins)||r(e.stylisPlugins)},[e.stylisPlugins]);var d=i(function(){return{shouldForwardProp:e.shouldForwardProp,styleSheet:l,stylis:u}},[e.shouldForwardProp,l,u]);return o.createElement($e.Provider,{value:d},o.createElement(Ge.Provider,{value:u},e.children))}var qe=function(){function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=Me);var o=n.name+t.hash;e.hasNameForId(n.id,o)||e.insertRules(n.id,o,t(n.rules,o,\"@keyframes\"))},this.name=e,this.id=\"sc-keyframes-\".concat(e),this.rules=t,ue(this,function(){throw he(12,String(n.name))})}return e.prototype.getName=function(e){return void 0===e&&(e=Me),this.name+e.hash},e}(),We=function(e){return e>=\"A\"&&e<=\"Z\"};function He(e){for(var t=\"\",n=0;n<e.length;n++){var o=e[n];if(1===n&&\"-\"===o&&\"-\"===e[0])return e;We(o)?t+=\"-\"+o.toLowerCase():t+=o}return t.startsWith(\"ms-\")?\"-\"+t:t}var Ue=function(e){return null==e||!1===e||\"\"===e},Je=function(t){var n,o,r=[];for(var s in t){var i=t[s];t.hasOwnProperty(s)&&!Ue(i)&&(Array.isArray(i)&&i.isCss||re(i)?r.push(\"\".concat(He(s),\":\"),i,\";\"):ce(i)?r.push.apply(r,e(e([\"\".concat(s,\" {\")],Je(i),!1),[\"}\"],!1)):r.push(\"\".concat(He(s),\": \").concat((n=s,null==(o=i)||\"boolean\"==typeof o||\"\"===o?\"\":\"number\"!=typeof o||0===o||n in h||n.startsWith(\"--\")?String(o).trim():\"\".concat(o,\"px\")),\";\")))}return r};function Xe(e,t,n,o){if(Ue(e))return[];if(se(e))return[\".\".concat(e.styledComponentId)];if(re(e)){if(!re(s=e)||s.prototype&&s.prototype.isReactComponent||!t)return[e];var r=e(t);return\"production\"===process.env.NODE_ENV||\"object\"!=typeof r||Array.isArray(r)||r instanceof qe||ce(r)||null===r||console.error(\"\".concat(B(e),\" is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\")),Xe(r,t,n,o)}var s;return e instanceof qe?n?(e.inject(n,o),[e.getName(o)]):[e]:ce(e)?Je(e):Array.isArray(e)?Array.prototype.concat.apply(_,e.map(function(e){return Xe(e,t,n,o)})):[e.toString()]}function Ze(e){for(var t=0;t<e.length;t+=1){var n=e[t];if(re(n)&&!se(n))return!1}return!0}var Ke=M(v),Qe=function(){function e(e,t,n){this.rules=e,this.staticRulesId=\"\",this.isStatic=\"production\"===process.env.NODE_ENV&&(void 0===n||n.isStatic)&&Ze(e),this.componentId=t,this.baseHash=z(Ke,t),this.baseStyle=n,ke.registerId(t)}return e.prototype.generateAndInjectStyles=function(e,t,n){var o=this.baseStyle?this.baseStyle.generateAndInjectStyles(e,t,n):\"\";if(this.isStatic&&!n.hash)if(this.staticRulesId&&t.hasNameForId(this.componentId,this.staticRulesId))o=ie(o,this.staticRulesId);else{var r=ae(Xe(this.rules,e,t,n)),s=x(z(this.baseHash,r)>>>0);if(!t.hasNameForId(this.componentId,s)){var i=n(r,\".\".concat(s),void 0,this.componentId);t.insertRules(this.componentId,s,i)}o=ie(o,s),this.staticRulesId=s}else{for(var a=z(this.baseHash,n.hash),c=\"\",l=0;l<this.rules.length;l++){var u=this.rules[l];if(\"string\"==typeof u)c+=u,\"production\"!==process.env.NODE_ENV&&(a=z(a,u));else if(u){var p=ae(Xe(u,e,t,n));a=z(a,p+l),c+=p}}if(c){var d=x(a>>>0);t.hasNameForId(this.componentId,d)||t.insertRules(this.componentId,d,n(c,\".\".concat(d),void 0,this.componentId)),o=ie(o,d)}}return o},e}(),et=o.createContext(void 0),tt=et.Consumer;function nt(){var e=c(et);if(!e)throw he(18);return e}function ot(e){var n=o.useContext(et),r=i(function(){return function(e,n){if(!e)throw he(14);if(re(e)){var o=e(n);if(\"production\"!==process.env.NODE_ENV&&(null===o||Array.isArray(o)||\"object\"!=typeof o))throw he(7);return o}if(Array.isArray(e)||\"object\"!=typeof e)throw he(8);return n?t(t({},n),e):e}(e.theme,n)},[e.theme,n]);return e.children?o.createElement(et.Provider,{value:r},e.children):null}var rt={},st=new Set;function it(e,r,s){var i=se(e),a=e,c=!G(e),p=r.attrs,d=void 0===p?_:p,h=r.componentId,f=void 0===h?function(e,t){var n=\"string\"!=typeof e?\"sc\":R(e);rt[n]=(rt[n]||0)+1;var o=\"\".concat(n,\"-\").concat($(v+n+rt[n]));return t?\"\".concat(t,\"-\").concat(o):o}(r.displayName,r.parentComponentId):h,m=r.displayName,y=void 0===m?function(e){return G(e)?\"styled.\".concat(e):\"Styled(\".concat(B(e),\")\")}(e):m,g=r.displayName&&r.componentId?\"\".concat(R(r.displayName),\"-\").concat(r.componentId):r.componentId||f,S=i&&a.attrs?a.attrs.concat(d).filter(Boolean):d,w=r.shouldForwardProp;if(i&&a.shouldForwardProp){var b=a.shouldForwardProp;if(r.shouldForwardProp){var E=r.shouldForwardProp;w=function(e,t){return b(e,t)&&E(e,t)}}else w=b}var N=new Qe(s,g,i?a.componentStyle:void 0);function O(e,r){return function(e,r,s){var i=e.attrs,a=e.componentStyle,c=e.defaultProps,p=e.foldedComponentIds,d=e.styledComponentId,h=e.target,f=o.useContext(et),m=Le(),y=e.shouldForwardProp||m.shouldForwardProp;\"production\"!==process.env.NODE_ENV&&l(d);var v=I(r,f,c)||C,g=function(e,n,o){for(var r,s=t(t({},n),{className:void 0,theme:o}),i=0;i<e.length;i+=1){var a=re(r=e[i])?r(s):r;for(var c in a)s[c]=\"className\"===c?ie(s[c],a[c]):\"style\"===c?t(t({},s[c]),a[c]):a[c]}return n.className&&(s.className=ie(s.className,n.className)),s}(i,r,v),S=g.as||h,w={};for(var b in g)void 0===g[b]||\"$\"===b[0]||\"as\"===b||\"theme\"===b&&g.theme===v||(\"forwardedAs\"===b?w.as=g.forwardedAs:y&&!y(b,S)||(w[b]=g[b],y||\"development\"!==process.env.NODE_ENV||n(b)||st.has(b)||!A.has(S)||(st.add(b),console.warn('styled-components: it looks like an unknown prop \"'.concat(b,'\" is being sent through to the DOM, which will likely trigger a React console error. If you would like automatic filtering of unknown props, you can opt-into that behavior via `<StyleSheetManager shouldForwardProp={...}>` (connect an API like `@emotion/is-prop-valid`) or consider using transient props (`$` prefix for automatic filtering.)')))));var E=function(e,t){var n=Le(),o=e.generateAndInjectStyles(t,n.styleSheet,n.stylis);return\"production\"!==process.env.NODE_ENV&&l(o),o}(a,g);\"production\"!==process.env.NODE_ENV&&e.warnTooManyClasses&&e.warnTooManyClasses(E);var N=ie(p,d);return E&&(N+=\" \"+E),g.className&&(N+=\" \"+g.className),w[G(S)&&!A.has(S)?\"class\":\"className\"]=N,s&&(w.ref=s),u(S,w)}(D,e,r)}O.displayName=y;var D=o.forwardRef(O);return D.attrs=S,D.componentStyle=N,D.displayName=y,D.shouldForwardProp=w,D.foldedComponentIds=i?ie(a.foldedComponentIds,a.styledComponentId):\"\",D.styledComponentId=g,D.target=i?a.target:e,Object.defineProperty(D,\"defaultProps\",{get:function(){return this._foldedDefaultProps},set:function(e){this._foldedDefaultProps=i?function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var o=0,r=t;o<r.length;o++)le(e,r[o],!0);return e}({},a.defaultProps,e):e}}),\"production\"!==process.env.NODE_ENV&&(P(y,g),D.warnTooManyClasses=function(e,t){var n={},o=!1;return function(r){if(!o&&(n[r]=!0,Object.keys(n).length>=200)){var s=t?' with the id of \"'.concat(t,'\"'):\"\";console.warn(\"Over \".concat(200,\" classes were generated for component \").concat(e).concat(s,\".\\n\")+\"Consider using the attrs method, together with a style object for frequently changed styles.\\nExample:\\n const Component = styled.div.attrs(props => ({\\n style: {\\n background: props.background,\\n },\\n }))`width: 100%;`\\n\\n <Component />\"),o=!0,n={}}}}(y,g)),ue(D,function(){return\".\".concat(D.styledComponentId)}),c&&oe(D,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0}),D}function at(e,t){for(var n=[e[0]],o=0,r=t.length;o<r;o+=1)n.push(t[o],e[o+1]);return n}var ct=function(e){return Object.assign(e,{isCss:!0})};function lt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];if(re(t)||ce(t))return ct(Xe(at(_,e([t],n,!0))));var r=t;return 0===n.length&&1===r.length&&\"string\"==typeof r[0]?Xe(r):ct(Xe(at(r,n)))}function ut(n,o,r){if(void 0===r&&(r=C),!o)throw he(1,o);var s=function(t){for(var s=[],i=1;i<arguments.length;i++)s[i-1]=arguments[i];return n(o,r,lt.apply(void 0,e([t],s,!1)))};return s.attrs=function(e){return ut(n,o,t(t({},r),{attrs:Array.prototype.concat(r.attrs,e).filter(Boolean)}))},s.withConfig=function(e){return ut(n,o,t(t({},r),e))},s}var pt=function(e){return ut(it,e)},dt=pt;A.forEach(function(e){dt[e]=pt(e)});var ht=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Ze(e),ke.registerId(this.componentId+1)}return e.prototype.createStyles=function(e,t,n,o){var r=o(ae(Xe(this.rules,t,n,o)),\"\"),s=this.componentId+e;n.insertRules(s,s,r)},e.prototype.removeStyles=function(e,t){t.clearRules(this.componentId+e)},e.prototype.renderStyles=function(e,t,n,o){e>2&&ke.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,o)},e}();function ft(n){for(var r=[],s=1;s<arguments.length;s++)r[s-1]=arguments[s];var i=lt.apply(void 0,e([n],r,!1)),a=\"sc-global-\".concat($(JSON.stringify(i))),c=new ht(i,a);\"production\"!==process.env.NODE_ENV&&P(a);var l=function(e){var n=Le(),r=o.useContext(et),s=o.useRef(n.styleSheet.allocateGSInstance(a)).current;return\"production\"!==process.env.NODE_ENV&&o.Children.count(e.children)&&console.warn(\"The global style component \".concat(a,\" was given child JSX. createGlobalStyle does not render children.\")),\"production\"!==process.env.NODE_ENV&&i.some(function(e){return\"string\"==typeof e&&-1!==e.indexOf(\"@import\")})&&console.warn(\"Please do not use @import CSS syntax in createGlobalStyle at this time, as the CSSOM APIs we use in production do not handle it well. Instead, we recommend using a library such as react-helmet to inject a typical <link> meta tag to the stylesheet, or simply embedding it manually in your index.html <head> section for a simpler app.\"),n.styleSheet.server&&function(e,n,o,r,s){if(c.isStatic)c.renderStyles(e,b,o,s);else{var i=t(t({},n),{theme:I(n,r,l.defaultProps)});c.renderStyles(e,i,o,s)}}(s,e,n.styleSheet,r,n.stylis),null};return o.memo(l)}function mt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.\");var r=ae(lt.apply(void 0,e([t],n,!1))),s=$(r);return new qe(s,r)}function yt(e){var n=o.forwardRef(function(n,r){var s=I(n,o.useContext(et),e.defaultProps);return\"production\"!==process.env.NODE_ENV&&void 0===s&&console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \"'.concat(B(e),'\"')),o.createElement(e,t({},n,{theme:s,ref:r}))});return n.displayName=\"WithTheme(\".concat(B(e),\")\"),oe(n,e)}var vt=/^\\s*<\\/[a-z]/i,gt=function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString();if(!t)return\"\";var n=Ce(),o=ae([n&&'nonce=\"'.concat(n,'\"'),\"\".concat(f,'=\"true\"'),\"\".concat(y,'=\"').concat(v,'\"')].filter(Boolean),\" \");return\"<style \".concat(o,\">\").concat(t,\"</style>\")},this.getStyleTags=function(){if(e.sealed)throw he(2);return e._emitSheetCSS()},this.getStyleElement=function(){var n;if(e.sealed)throw he(2);var r=e.instance.toString();if(!r)return[];var s=((n={})[f]=\"\",n[y]=v,n.dangerouslySetInnerHTML={__html:r},n),i=Ce();return i&&(s.nonce=i),[o.createElement(\"style\",t({},s,{key:\"sc-0-0\"}))]},this.seal=function(){e.sealed=!0},this.instance=new ke({isServer:!0}),this.sealed=!1}return e.prototype.collectStyles=function(e){if(this.sealed)throw he(2);return o.createElement(Ye,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){if(S)throw he(3);if(this.sealed)throw he(2);this.seal();var t=require(\"stream\").Transform,n=e,o=this.instance,r=this._emitSheetCSS,s=new t({transform:function(e,t,n){var s=e.toString(),i=r();if(o.clearTag(),vt.test(s)){var a=s.indexOf(\">\")+1,c=s.slice(0,a),l=s.slice(a);this.push(c+i+l)}else this.push(i+s);n()}});return n.on(\"error\",function(e){s.emit(\"error\",e)}),n.pipe(s)},e}(),St={StyleSheet:ke,mainSheet:ze};\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"It looks like you've imported 'styled-components' on React Native.\\nPerhaps you're looking to import 'styled-components/native'?\\nRead more about this at https://www.styled-components.com/docs/basics#react-native\");var wt=\"__sc-\".concat(f,\"__\");\"production\"!==process.env.NODE_ENV&&\"test\"!==process.env.NODE_ENV&&\"undefined\"!=typeof window&&(window[wt]||(window[wt]=0),1===window[wt]&&console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\\n\\nSee https://s-c.sh/2BAXzed for more info.\"),window[wt]+=1);export{gt as ServerStyleSheet,Be as StyleSheetConsumer,$e as StyleSheetContext,Ye as StyleSheetManager,tt as ThemeConsumer,et as ThemeContext,ot as ThemeProvider,St as __PRIVATE__,ft as createGlobalStyle,lt as css,dt as default,se as isStyledComponent,mt as keyframes,dt as styled,nt as useTheme,v as version,yt as withTheme};\n//# sourceMappingURL=styled-components.esm.js.map\n","import React, {useCallback, useEffect, useMemo, useState} from 'react'\nimport {useClient} from 'sanity'\nimport {useIntentLink} from 'sanity/router'\nimport {usePaneRouter} from 'sanity/structure'\nimport styled, {keyframes} from 'styled-components'\n\nimport {DocumentWithSeoHealth, SeoHealthMetrics} from '../types'\n\nconst DashboardContainer = styled.div`\n width: 100%;\n min-height: 100%;\n background: #f0f2f5;\n padding: 28px 32px;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n`\n\nconst PageHeader = styled.div`\n margin-bottom: 28px;\n`\n\nconst PageTitle = styled.h1`\n margin: 0 0 6px 0;\n font-size: 22px;\n font-weight: 700;\n color: #111827;\n letter-spacing: -0.3px;\n display: flex;\n align-items: center;\n gap: 10px;\n`\n\nconst PreviewBadge = styled.span`\n display: inline-block;\n background: #fef3c7;\n color: #92400e;\n font-size: 11px;\n font-weight: 600;\n padding: 4px 8px;\n border-radius: 4px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-left: 8px;\n`\n\nconst PageSubtitle = styled.p`\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n`\n\nconst StatsGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));\n gap: 14px;\n margin-bottom: 20px;\n`\n\nconst StatCard = styled.div<{$accent?: string}>`\n background: #ffffff;\n border-radius: 10px;\n padding: 16px 18px;\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.07),\n 0 1px 2px rgba(0, 0, 0, 0.05);\n border-left: ${(p) => (p.$accent ? `4px solid ${p.$accent}` : '4px solid transparent')};\n transition: box-shadow 0.15s ease;\n\n &:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n`\n\nconst StatLabel = styled.div`\n font-size: 11px;\n font-weight: 500;\n color: #9ca3af;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n`\n\nconst StatValue = styled.div`\n font-size: 26px;\n font-weight: 700;\n color: #111827;\n line-height: 1;\n`\n\nconst ControlsBar = styled.div`\n background: #ffffff;\n border-radius: 10px;\n padding: 14px 18px;\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07);\n`\n\nconst SearchWrapper = styled.div`\n position: relative;\n flex: 1;\n min-width: 220px;\n`\n\nconst SearchIconSvg = styled.span`\n position: absolute;\n left: 11px;\n top: 50%;\n transform: translateY(-50%);\n color: #9ca3af;\n display: flex;\n align-items: center;\n pointer-events: none;\n`\n\nconst SearchInput = styled.input`\n width: 100%;\n height: 36px;\n padding: 0 12px 0 34px;\n border: 1px solid #e5e7eb;\n border-radius: 7px;\n font-size: 13px;\n color: #111827;\n background: #f9fafb;\n box-sizing: border-box;\n outline: none;\n transition:\n border-color 0.15s,\n background 0.15s;\n\n &::placeholder {\n color: #9ca3af;\n }\n\n &:focus {\n border-color: #6366f1;\n background: #fff;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n }\n`\n\nconst StyledSelect = styled.select`\n height: 36px;\n padding: 0 32px 0 12px;\n border: 1px solid #e5e7eb;\n border-radius: 7px;\n font-size: 13px;\n color: #374151;\n background: #f9fafb\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E\")\n no-repeat right 10px center;\n appearance: none;\n outline: none;\n cursor: pointer;\n transition: border-color 0.15s;\n\n &:focus {\n border-color: #6366f1;\n background-color: #fff;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n }\n`\n\nconst TableCard = styled.div`\n background: #ffffff;\n border-radius: 10px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07);\n overflow: hidden;\n`\n\nconst TableHeader = styled.div`\n display: flex;\n align-items: center;\n padding: 11px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n gap: 12px;\n`\n\nconst TableRow = styled.div`\n display: flex;\n align-items: center;\n padding: 13px 20px;\n border-bottom: 1px solid #f3f4f6;\n gap: 12px;\n transition: background 0.1s;\n\n &:last-child {\n border-bottom: none;\n }\n\n &:hover {\n background: #fafafa;\n }\n`\n\nconst ColTitle = styled.div`\n flex: 2;\n min-width: 0;\n`\n\nconst TitleWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n min-width: 0;\n`\n\n/* Constrains the title + doc-id block so text-overflow works inside flex */\nconst TitleCell = styled.div`\n min-width: 0;\n overflow: hidden;\n flex: 1;\n`\n\nconst ColType = styled.div`\n flex: 0.8;\n min-width: 80px;\n`\n\nconst ColScore = styled.div`\n flex: 0.6;\n min-width: 70px;\n`\n\nconst ColIssues = styled.div`\n flex: 2;\n min-width: 0;\n`\n\nconst DocTitleLink = styled.a`\n font-size: 13px;\n font-weight: 600;\n color: #4f46e5;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-decoration: none;\n display: block;\n transition: color 0.15s;\n\n &:hover {\n color: #4338ca;\n text-decoration: underline;\n }\n`\n\nconst DocId = styled.div`\n font-size: 11px;\n color: #9ca3af;\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\nconst TypeBadge = styled.span<{$bgColor?: string; $textColor?: string}>`\n display: inline-block;\n padding: 3px 8px;\n border-radius: 5px;\n font-size: 11px;\n font-weight: 500;\n background: ${(p) => p.$bgColor || '#ede9fe'};\n color: ${(p) => p.$textColor || '#5b21b6'};\n`\n\nconst TypeText = styled.span`\n font-size: 12px;\n font-weight: 500;\n color: #374151;\n`\n\nconst CustomBadge = styled.span<{$bgColor?: string; $textColor?: string; $fontSize?: string}>`\n display: inline-block;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: ${(p) => p.$fontSize || '10px'};\n font-weight: 600;\n margin-left: 6px;\n background: ${(p) => p.$bgColor || '#e0e7ff'};\n color: ${(p) => p.$textColor || '#3730a3'};\n white-space: nowrap;\n`\n\nconst ScoreBadge = styled.span<{$score: number}>`\n display: inline-block;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 700;\n background: ${(p) => {\n if (p.$score >= 80) return '#d1fae5'\n if (p.$score >= 60) return '#fef3c7'\n if (p.$score >= 40) return '#ffedd5'\n return '#fee2e2'\n }};\n color: ${(p) => {\n if (p.$score >= 80) return '#065f46'\n if (p.$score >= 60) return '#92400e'\n if (p.$score >= 40) return '#9a3412'\n return '#991b1b'\n }};\n`\n\nconst IssueTag = styled.div`\n font-size: 11px;\n color: #ef4444;\n line-height: 1.5;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\nconst MoreIssues = styled.div`\n font-size: 11px;\n color: #6b7280;\n cursor: pointer;\n transition: color 0.15s;\n\n &:hover {\n color: #374151;\n }\n`\n\nconst MoreIssuesWrapper = styled.div`\n position: relative;\n display: inline-block;\n`\n\nconst IssuesPopover = styled.div<{\n $left?: number\n}>`\n position: absolute;\n bottom: auto;\n left: 0;\n transform: translateY(calc(-100% - 14px));\n background: #1f2937;\n color: #ffffff;\n padding: 12px;\n border-radius: 8px;\n font-size: 12px;\n z-index: 50;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);\n width: 280px;\n word-break: break-word;\n line-height: 1.5;\n\n &::after {\n content: '';\n position: absolute;\n bottom: -6px;\n left: 12px;\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #1f2937;\n }\n`\n\nconst PopoverIssueItem = styled.div`\n display: flex;\n gap: 6px;\n margin-bottom: 6px;\n\n &:last-child {\n margin-bottom: 0;\n }\n`\n\nconst UpgradeContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100%;\n padding: 60px 24px;\n`\n\nconst UpgradeBox = styled.div`\n background: #ffffff;\n border-radius: 16px;\n padding: 48px 40px;\n max-width: 480px;\n width: 100%;\n text-align: center;\n box-shadow:\n 0 4px 24px rgba(0, 0, 0, 0.08),\n 0 1px 4px rgba(0, 0, 0, 0.05);\n border: 1px solid #e5e7eb;\n`\n\nconst UpgradeLock = styled.div`\n font-size: 40px;\n margin-bottom: 16px;\n`\n\nconst UpgradeTitle = styled.h2`\n margin: 0 0 10px;\n font-size: 20px;\n font-weight: 700;\n color: #111827;\n`\n\nconst UpgradeText = styled.p`\n margin: 0 0 20px;\n font-size: 14px;\n color: #6b7280;\n line-height: 1.6;\n`\n\nconst UpgradeCode = styled.pre`\n background: #f3f4f6;\n border-radius: 8px;\n padding: 14px 16px;\n font-size: 12px;\n color: #374151;\n text-align: left;\n margin: 0 0 24px;\n overflow-x: auto;\n line-height: 1.6;\n border: 1px solid #e5e7eb;\n`\n\nconst UpgradeButton = styled.a`\n display: inline-block;\n background: #4f46e5;\n color: #ffffff;\n font-size: 14px;\n font-weight: 600;\n padding: 10px 24px;\n border-radius: 8px;\n text-decoration: none;\n transition: background 0.15s;\n\n &:hover {\n background: #4338ca;\n }\n`\n\nconst ReloadButton = styled.button`\n display: inline-block;\n background: transparent;\n color: #6b7280;\n font-size: 13px;\n font-weight: 500;\n padding: 8px 20px;\n border-radius: 8px;\n border: 1px solid #d1d5db;\n cursor: pointer;\n margin-top: 10px;\n transition:\n background 0.15s,\n color 0.15s,\n border-color 0.15s;\n\n &:hover {\n background: #f3f4f6;\n color: #374151;\n border-color: #9ca3af;\n }\n`\n\n// Sub-component so useIntentLink can be called at the top level of a component (not inside .map)\nconst DocTitleAnchor: React.FC<{id: string; type: string; children: React.ReactNode}> = ({\n id,\n type,\n children,\n}) => {\n const {onClick, href} = useIntentLink({intent: 'edit', params: {id, type}})\n return (\n <DocTitleLink href={href} onClick={onClick} title=\"Open document\">\n {children}\n </DocTitleLink>\n )\n}\n\n// Wrapper that applies DocTitleLink styles to the ChildLink <a> rendered by Sanity's pane router\nconst PaneLinkWrapper = styled.span`\n display: block;\n min-width: 0;\n overflow: hidden;\n\n a {\n font-size: 13px;\n font-weight: 600;\n color: #4f46e5;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-decoration: none;\n display: block;\n transition: color 0.15s;\n\n &:hover {\n color: #4338ca;\n text-decoration: underline;\n }\n }\n`\n\n// Sub-component for desk-structure split-pane navigation.\n// Uses ChildLink from usePaneRouter to open the document editor to the right\n// while keeping the SEO Health pane visible on the left.\nconst DocTitleAnchorPane: React.FC<{id: string; type: string; children: React.ReactNode}> = ({\n id,\n type,\n children,\n}) => {\n const {ChildLink} = usePaneRouter()\n return (\n <PaneLinkWrapper>\n <ChildLink childId={id} childParameters={{type}}>\n {children}\n </ChildLink>\n </PaneLinkWrapper>\n )\n}\n\n// Sub-component to safely call docBadge outside a .map expression\nconst DocBadgeRenderer: React.FC<{\n doc: DocumentWithSeoHealth & Record<string, unknown>\n docBadge: (\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined\n}> = ({doc, docBadge}) => {\n const badge = docBadge(doc)\n if (!badge) return null\n return (\n <CustomBadge $bgColor={badge.bgColor} $textColor={badge.textColor} $fontSize={badge.fontSize}>\n {badge.label}\n </CustomBadge>\n )\n}\n\nconst spin = keyframes`\n to { transform: rotate(360deg); }\n`\n\nconst Spinner = styled.div`\n width: 28px;\n height: 28px;\n border: 3px solid #e5e7eb;\n border-top-color: #6366f1;\n border-radius: 50%;\n animation: ${spin} 0.7s linear infinite;\n margin: 0 auto 12px;\n`\n\nconst LoadingState = styled.div`\n padding: 48px 24px;\n text-align: center;\n color: #6b7280;\n font-size: 13px;\n`\n\nconst EmptyState = styled.div`\n padding: 48px 24px;\n text-align: center;\n color: #9ca3af;\n font-size: 13px;\n`\n\n/**\n * Color palette for dynamic document type badges\n * Colors are randomly assigned based on type hash for visual variety\n * while maintaining consistency across sessions\n */\nconst TYPE_COLOR_PALETTE: Array<{bg: string; text: string}> = [\n {bg: '#dbeafe', text: '#0c4a6e'}, // Blue\n {bg: '#dcfce7', text: '#14532d'}, // Green\n {bg: '#fce7f3', text: '#500724'}, // Pink\n {bg: '#fed7aa', text: '#7c2d12'}, // Orange\n {bg: '#e9d5ff', text: '#581c87'}, // Purple\n {bg: '#f3e8ff', text: '#3f0f5c'}, // Deep Purple\n {bg: '#ccfbf1', text: '#134e4a'}, // Teal\n {bg: '#ddd6fe', text: '#3730a3'}, // Indigo\n {bg: '#fca5a5', text: '#7f1d1d'}, // Red\n {bg: '#a7f3d0', text: '#065f46'}, // Emerald\n {bg: '#fbbf24', text: '#78350f'}, // Amber\n {bg: '#c4b5fd', text: '#3b0764'}, // Violet\n {bg: '#f0fdf4', text: '#15803d'}, // Light Green\n {bg: '#fef2f2', text: '#991b1b'}, // Light Red\n {bg: '#f5f3ff', text: '#5b21b6'}, // Light Purple\n {bg: '#fffbeb', text: '#92400e'}, // Light Amber\n]\n\n/**\n * Get dynamic color for a document type based on type name hash\n * Same type always gets the same color, but assignment is not fixed\n */\nconst getTypeColor = (type: string): {bg: string; text: string} => {\n // Generate consistent hash from type string using simple arithmetic\n let hash = 0\n for (let i = 0; i < type.length; i += 1) {\n const char = type.charCodeAt(i)\n hash = Math.abs(hash * 31 + char)\n }\n\n // Use modulo to get index within palette range\n const colorIndex = hash % TYPE_COLOR_PALETTE.length\n return TYPE_COLOR_PALETTE[colorIndex]\n}\n\nconst getStatusCategory = (score: number): SeoHealthMetrics['status'] => {\n if (score >= 80) return 'excellent'\n if (score >= 60) return 'good'\n if (score >= 40) return 'fair'\n if (score > 0) return 'poor'\n return 'missing'\n}\n\nconst scoreMetaTitle = (title?: string): {score: number; issues: string[]} => {\n const issues: string[] = []\n let score = 0\n\n if (title && title.length >= 50 && title.length <= 60) {\n score = 15\n } else if (title && title.length > 0) {\n score = 10\n if (title.length < 50) issues.push('Meta title too short (< 50 chars)')\n if (title.length > 60) issues.push('Meta title too long (> 60 chars)')\n } else {\n issues.push('Missing meta title')\n }\n\n return {score, issues}\n}\n\nconst scoreMetaDescription = (description?: string): {score: number; issues: string[]} => {\n const issues: string[] = []\n let score = 0\n\n if (description && description.length >= 120 && description.length <= 160) {\n score = 15\n } else if (description && description.length > 0) {\n score = 10\n if (description.length < 120) issues.push('Meta description too short (< 120 chars)')\n if (description.length > 160) issues.push('Meta description too long (> 160 chars)')\n } else {\n issues.push('Missing meta description')\n }\n\n return {score, issues}\n}\n\nconst scoreOpenGraph = (openGraph?: Record<string, unknown>): {score: number; issues: string[]} => {\n const issues: string[] = []\n let score = 0\n\n if (openGraph) {\n if (openGraph.title) score += 6\n else issues.push('Missing OG title')\n\n if (openGraph.description) score += 6\n else issues.push('Missing OG description')\n\n if (openGraph.image) score += 6\n else issues.push('Missing OG image')\n\n if (openGraph.type) score += 7\n else issues.push('Missing OG type')\n } else {\n issues.push('Open Graph not configured')\n }\n\n return {score, issues}\n}\n\nconst scoreTwitterCard = (twitter?: Record<string, unknown>): {score: number; issues: string[]} => {\n const issues: string[] = []\n let score = 0\n\n if (twitter) {\n if (twitter.title) score += 5\n else issues.push('Missing Twitter title')\n\n if (twitter.description) score += 5\n else issues.push('Missing Twitter description')\n\n if (twitter.image) score += 5\n else issues.push('Missing Twitter image')\n } else {\n issues.push('Twitter Card not configured')\n }\n\n return {score, issues}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst calculateHealthScore = (doc: any): SeoHealthMetrics => {\n let totalScore = 0\n const allIssues: string[] = []\n\n if (!doc.seo) {\n return {score: 0, status: 'missing', issues: ['SEO fields not configured']}\n }\n\n const {title, description, metaImage, keywords, robots, openGraph, twitter} = doc.seo\n\n // Meta Title\n const titleScore = scoreMetaTitle(title)\n totalScore += titleScore.score\n allIssues.push(...titleScore.issues)\n\n // Meta Description\n const descriptionScore = scoreMetaDescription(description)\n totalScore += descriptionScore.score\n allIssues.push(...descriptionScore.issues)\n\n // Meta Image\n if (metaImage) {\n totalScore += 10\n } else {\n allIssues.push('Missing meta image')\n }\n\n // Keywords\n if (keywords && keywords.length > 0) {\n totalScore += 10\n } else {\n allIssues.push('No keywords defined')\n }\n\n // Open Graph\n const ogScore = scoreOpenGraph(openGraph as Record<string, unknown> | undefined)\n totalScore += ogScore.score\n allIssues.push(...ogScore.issues)\n\n // Twitter Card\n const twitterScore = scoreTwitterCard(twitter as Record<string, unknown> | undefined)\n totalScore += twitterScore.score\n allIssues.push(...twitterScore.issues)\n\n // Robots settings\n if (robots && !robots.noIndex) {\n totalScore += 5\n }\n\n const status = getStatusCategory(totalScore)\n\n return {score: totalScore, status, issues: allIssues}\n}\n\nconst resolveTypeLabel = (type: string, typeLabels?: Record<string, string>): string =>\n typeLabels?.[type] ?? type\n\n/**\n * Builds the GROQ projection snippet for the title field.\n * - undefined / 'title' → `title`\n * - 'name' → `\"title\": name`\n * - { post: 'title', product: 'name' } → `\"title\": select(_type == \"post\" => title, _type == \"product\" => name, title)`\n */\nconst buildTitleProjection = (titleField?: string | Record<string, string>): string => {\n if (!titleField || titleField === 'title') return 'title'\n if (typeof titleField === 'string') return `\"title\": ${titleField}`\n const cases = Object.entries(titleField)\n .map(([type, field]) => `_type == \"${type}\" => ${field}`)\n .join(', ')\n return `\"title\": select(${cases}, title)`\n}\n\nexport interface SeoHealthDashboardProps {\n icon?: string\n title?: string\n description?: string\n showTypeColumn?: boolean\n showDocumentId?: boolean\n /**\n * Limit the dashboard to specific document type names.\n * If both queryTypes and customQuery are provided, customQuery takes precedence.\n */\n queryTypes?: string[]\n /**\n * When using `queryTypes`, also filter by `seo != null`.\n * Set to `false` to include documents of those types even without an seo field.\n * Defaults to `true`.\n */\n queryRequireSeo?: boolean\n /**\n * A fully custom GROQ query used to fetch documents.\n * Must return objects with at least: _id, _type, title, seo, _updatedAt\n * Takes precedence over queryTypes.\n */\n customQuery?: string\n /**\n * The Sanity API version to use for the client (e.g. '2023-01-01').\n * Defaults to '2023-01-01'.\n */\n apiVersion?: string\n /**\n * License key for the SEO Health Dashboard.\n * Obtain a key at https://sanity-plugin-seofields.thehardik.in\n */\n licenseKey?: string\n /**\n * Map raw `_type` values to human-readable display labels used in the\n * Type column and the Type filter dropdown.\n * Any type without an entry falls back to the raw `_type` string.\n *\n * @example\n * typeLabels={{ productDrug: 'Products', singleCondition: 'Condition' }}\n */\n typeLabels?: Record<string, string>\n /**\n * Controls how the type is rendered in the Type column.\n * - `'badge'` (default) — coloured pill, consistent with score badges\n * - `'text'` — plain text, useful for dense layouts\n */\n typeColumnMode?: 'badge' | 'text'\n /**\n * The document field to use as the display title.\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 * // Same field for all types\n * titleField: 'name'\n *\n * @example\n * // Different field per type\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 * docBadge: (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 docBadge?: (\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined\n /**\n * Custom text shown while the license key is being verified.\n * Defaults to `\"Verifying license…\"`.\n */\n loadingLicense?: React.ReactNode\n /**\n * Custom text shown while documents are being fetched.\n * Defaults to `\"Loading documents…\"`.\n */\n loadingDocuments?: React.ReactNode\n /**\n * Custom text shown when the query returns zero results.\n * Defaults to `\"No documents found\"`.\n */\n noDocuments?: React.ReactNode\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 previewMode?: boolean\n /**\n * When `true`, clicking a document title opens the document editor as a split\n * pane to the right, keeping the SEO Health pane visible on the left.\n * This uses Sanity's pane router and requires the component to be rendered\n * inside a desk-structure pane context (i.e. via `createSeoHealthPane`).\n *\n * When `false` (default), clicking navigates to the document via the standard\n * intent-link system (full navigation).\n *\n * This is set to `true` automatically by `createSeoHealthPane`.\n */\n openInPane?: boolean\n}\n\n/**\n * Generate dummy data for preview mode showing various SEO health scenarios\n */\nconst generateDummyData = (): DocumentWithSeoHealth[] => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dummyDocs: any[] = [\n {\n _id: 'preview-post-1',\n _type: 'post',\n title: 'Getting Started with SEO Best Practices',\n slug: {current: 'getting-started-seo'},\n _updatedAt: new Date(Date.now() - 2 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Getting Started with SEO Best Practices | My Blog',\n description:\n 'Learn the fundamentals of SEO optimization to improve your website visibility and search rankings.',\n keywords: ['seo', 'best practices', 'optimization'],\n metaImage: {_type: 'image', asset: {_ref: 'image-123', _type: 'reference'}},\n openGraph: {\n title: 'SEO Best Practices Guide',\n description: 'Master SEO optimization',\n image: {_type: 'image', asset: {_ref: 'image-123', _type: 'reference'}, alt: 'SEO Guide'},\n type: 'article',\n },\n twitter: {\n title: 'SEO Best Practices',\n description: 'Learn SEO optimization',\n image: {_type: 'image', asset: {_ref: 'image-123', _type: 'reference'}, alt: 'Guide'},\n card: 'summary_large_image',\n },\n },\n },\n {\n _id: 'preview-post-2',\n _type: 'post',\n title: 'Advanced Analytics Strategy',\n slug: {current: 'advanced-analytics'},\n _updatedAt: new Date(Date.now() - 5 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Advanced Analytics',\n description: 'Strategy tips',\n keywords: ['analytics', 'data'],\n openGraph: {\n title: 'Analytics Guide',\n },\n },\n },\n {\n _id: 'preview-page-1',\n _type: 'page',\n title: 'About Us',\n slug: {current: 'about'},\n _updatedAt: new Date(Date.now() - 10 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'About',\n keywords: ['company', 'team'],\n metaImage: {_type: 'image', asset: {_ref: 'image-456', _type: 'reference'}},\n },\n },\n {\n _id: 'preview-post-3',\n _type: 'post',\n title: 'Content Marketing Trends for 2024',\n slug: {current: 'content-marketing-trends'},\n _updatedAt: new Date(Date.now() - 1 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Content Marketing Trends 2024',\n description:\n 'Discover the latest content marketing trends and strategies to engage your audience effectively.',\n keywords: ['content marketing', 'trends', 'strategy', 'engagement'],\n metaImage: {_type: 'image', asset: {_ref: 'image-789', _type: 'reference'}},\n openGraph: {\n title: 'Content Marketing Trends 2024',\n description: 'Latest trends in content marketing',\n image: {_type: 'image', asset: {_ref: 'image-789', _type: 'reference'}, alt: 'Trends'},\n type: 'article',\n },\n twitter: {\n title: 'Content Marketing Trends',\n description: 'Discover the latest trends',\n card: 'summary',\n },\n },\n },\n {\n _id: 'preview-post-4',\n _type: 'product',\n title: 'Pro Plan',\n slug: {current: 'pro-plan'},\n _updatedAt: new Date(Date.now() - 15 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Pro',\n keywords: ['pricing'],\n },\n },\n {\n _id: 'preview-page-2',\n _type: 'page',\n title: 'Contact',\n slug: {current: 'contact'},\n _updatedAt: new Date(Date.now() - 8 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n openGraph: {\n title: 'Get in Touch',\n },\n },\n },\n {\n _id: 'preview-post-5',\n _type: 'post',\n title: 'Mobile Optimization Guide',\n slug: {current: 'mobile-optimization'},\n _updatedAt: new Date(Date.now() - 3 * 24 * 60 * 60 * 1000).toISOString(),\n seo: {\n title: 'Mobile Optimization Guide: Best Practices for Responsive Design',\n description:\n 'Complete guide to mobile optimization including responsive design, performance tips, and user experience best practices for modern web development.',\n keywords: ['mobile', 'optimization', 'responsive', 'performance'],\n metaImage: {_type: 'image', asset: {_ref: 'image-mobile', _type: 'reference'}},\n openGraph: {\n title: 'Mobile Optimization Best Practices',\n description: 'Master mobile web optimization',\n image: {_type: 'image', asset: {_ref: 'image-mobile', _type: 'reference'}, alt: 'Mobile'},\n type: 'article',\n },\n twitter: {\n title: 'Mobile Optimization Tips',\n description: 'Responsive design best practices',\n image: {_type: 'image', asset: {_ref: 'image-mobile', _type: 'reference'}, alt: 'Mobile'},\n card: 'summary_large_image',\n },\n },\n },\n ]\n\n // Calculate health scores and return\n return dummyDocs.map((doc) => ({\n ...doc,\n health: calculateHealthScore(doc),\n }))\n}\n\nconst SeoHealthDashboard: React.FC<SeoHealthDashboardProps> = ({\n icon = '📊',\n title = 'SEO Health Dashboard',\n description = 'Monitor and optimize SEO fields across all your documents',\n showTypeColumn = true,\n showDocumentId = true,\n queryTypes,\n queryRequireSeo = true,\n customQuery,\n apiVersion = '2023-01-01',\n licenseKey,\n typeLabels,\n typeColumnMode = 'badge',\n titleField,\n docBadge,\n loadingLicense,\n loadingDocuments,\n noDocuments,\n previewMode = false,\n openInPane = false,\n}) => {\n const client = useClient({apiVersion})\n const [licenseStatus, setLicenseStatus] = useState<'loading' | 'valid' | 'invalid'>('loading')\n const [documents, setDocuments] = useState<DocumentWithSeoHealth[]>([])\n const [loading, setLoading] = useState(true)\n const [searchQuery, setSearchQuery] = useState('')\n const [filterStatus, setFilterStatus] = useState<string>('all')\n const [filterType, setFilterType] = useState<string>('all')\n const [sortBy, setSortBy] = useState<'score' | 'title'>('score')\n const [activePopover, setActivePopover] = useState<{\n top: number\n left: number\n issues: string[]\n } | null>(null)\n\n const VALIDATION_ENDPOINT = 'https://sanity-plugin-seofields.thehardik.in/api/validate-license'\n const CACHE_TTL_MS = 60 * 60 * 1000 // 1 hour\n\n const validateLicense = useCallback(\n async (forceRefresh = false) => {\n // Preview mode bypasses license validation\n if (previewMode) {\n setLicenseStatus('valid')\n return\n }\n\n // No key provided\n if (!licenseKey) {\n setLicenseStatus('invalid')\n return\n }\n\n const projectId = client.config().projectId ?? ''\n const cacheKey = `seofields_license_${projectId}`\n\n if (forceRefresh) {\n try {\n sessionStorage.removeItem(cacheKey)\n } catch {\n // ignore storage errors\n }\n }\n\n // Check sessionStorage cache\n if (!forceRefresh) {\n try {\n const cached = sessionStorage.getItem(cacheKey)\n if (cached) {\n const {valid, ts} = JSON.parse(cached) as {valid: boolean; ts: number}\n if (Date.now() - ts < CACHE_TTL_MS) {\n setLicenseStatus(valid ? 'valid' : 'invalid')\n return\n }\n }\n } catch {\n // ignore storage errors\n }\n }\n\n setLicenseStatus('loading')\n\n try {\n const res = await fetch(VALIDATION_ENDPOINT, {\n method: 'POST',\n headers: {'Content-Type': 'application/json'},\n body: JSON.stringify({licenseKey, projectId}),\n })\n const valid = res.ok\n setLicenseStatus(valid ? 'valid' : 'invalid')\n try {\n sessionStorage.setItem(cacheKey, JSON.stringify({valid, ts: Date.now()}))\n } catch {\n // ignore storage errors\n }\n } catch {\n // Network error — fail open to avoid blocking legitimate users\n setLicenseStatus('valid')\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [licenseKey, previewMode],\n )\n\n useEffect(() => {\n validateLicense()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [licenseKey, previewMode])\n\n const handleMouseEnterIssues = (el: HTMLDivElement | null, issues: string[]) => {\n if (!el) return\n const rect = el.getBoundingClientRect()\n const popoverWidth = 280\n const viewportWidth = window.innerWidth\n\n // Align popover left edge to trigger left edge, clamp within viewport\n let left = rect.left\n if (left + popoverWidth > viewportWidth - 10) left = viewportWidth - popoverWidth - 10\n if (left < 10) left = 10\n\n setActivePopover({top: rect.top, left, issues})\n }\n\n useEffect(() => {\n const fetchDocuments = async () => {\n try {\n setLoading(true)\n\n // Use dummy data in preview mode\n if (previewMode) {\n setDocuments(generateDummyData())\n return\n }\n\n let groqQuery: string\n let params: Record<string, unknown> = {}\n\n if (customQuery) {\n // Mode 3: fully custom GROQ (user-provided)\n groqQuery = customQuery\n } else if (queryTypes && queryTypes.length > 0) {\n // Mode 2: filter by specific document types (excluding drafts)\n const seoFilter = queryRequireSeo ? ' && seo != null' : ''\n const titleProj = buildTitleProjection(titleField)\n groqQuery = `*[_type in $types${seoFilter} && !(_id in path(\"drafts.**\"))]{\n _id,\n _type,\n ${titleProj},\n slug,\n seo,\n _updatedAt\n }`\n params = {types: queryTypes}\n } else {\n // Mode 1: default — all documents with an seo field (excluding drafts)\n const titleProj = buildTitleProjection(titleField)\n groqQuery = `*[seo != null && !(_id in path(\"drafts.**\"))]{\n _id,\n _type,\n ${titleProj},\n slug,\n seo,\n _updatedAt\n }`\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = await client.fetch(groqQuery, params, {perspective: 'published'})\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docsWithHealth: DocumentWithSeoHealth[] = result.map((doc: any) => ({\n ...doc,\n health: calculateHealthScore(doc),\n }))\n\n setDocuments(docsWithHealth)\n } catch (error) {\n console.error('Error fetching documents:', error)\n } finally {\n setLoading(false)\n }\n }\n\n fetchDocuments()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n client,\n customQuery,\n queryRequireSeo,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(queryTypes),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(titleField),\n previewMode,\n ])\n\n const uniqueDocumentTypes = useMemo(() => {\n const types = new Set(documents.map((doc) => doc._type))\n return Array.from(types).sort()\n }, [documents])\n\n const filteredAndSortedDocs = useMemo(() => {\n let filtered = documents\n\n if (searchQuery) {\n filtered = filtered.filter(\n (doc) =>\n doc.title?.toLowerCase().includes(searchQuery.toLowerCase()) ||\n doc._id?.toLowerCase().includes(searchQuery.toLowerCase()),\n )\n }\n\n if (filterStatus !== 'all') {\n filtered = filtered.filter((doc) => doc.health.status === filterStatus)\n }\n\n if (filterType !== 'all') {\n filtered = filtered.filter((doc) => doc._type === filterType)\n }\n\n const sorted = [...filtered].sort((a, b) => {\n if (sortBy === 'score') {\n return b.health.score - a.health.score\n }\n return (a.title || '').localeCompare(b.title || '')\n })\n\n return sorted\n }, [documents, searchQuery, filterStatus, filterType, sortBy])\n\n const stats = useMemo(() => {\n const total = documents.length\n const excellent = documents.filter((d) => d.health.score >= 80).length\n const good = documents.filter((d) => d.health.score >= 60 && d.health.score < 80).length\n const fair = documents.filter((d) => d.health.score >= 40 && d.health.score < 60).length\n const poor = documents.filter((d) => d.health.score > 0 && d.health.score < 40).length\n const missing = documents.filter((d) => d.health.score === 0).length\n\n const avgScore =\n total > 0 ? Math.round(documents.reduce((sum, d) => sum + d.health.score, 0) / total) : 0\n\n return {total, excellent, good, fair, poor, missing, avgScore}\n }, [documents])\n\n const handleMouseLeave = useCallback(() => {\n setActivePopover(null)\n }, [])\n\n return (\n <DashboardContainer>\n {licenseStatus === 'loading' && (\n <LoadingState style={{padding: '80px 24px'}}>\n <Spinner />\n {loadingLicense ?? 'Verifying license…'}\n </LoadingState>\n )}\n {licenseStatus === 'invalid' && (\n <UpgradeContainer>\n <UpgradeBox>\n {licenseKey ? (\n <>\n <UpgradeLock>❌</UpgradeLock>\n <UpgradeTitle>Invalid License Key</UpgradeTitle>\n <UpgradeText>\n The license key you provided is invalid or has been revoked. Please check your key\n and update it in the plugin config.\n </UpgradeText>\n <UpgradeCode>{`seofields({\n healthDashboard: {\n licenseKey: 'YOUR_LICENSE_KEY', // ← replace with a valid key\n },\n})`}</UpgradeCode>\n <UpgradeButton\n href=\"https://sanity-plugin-seofields.thehardik.in\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Get a New License Key →\n </UpgradeButton>\n <br />\n {/* eslint-disable-next-line react/jsx-no-bind */}\n <ReloadButton onClick={() => validateLicense(true)}>\n Click here If You Just Updated Your Key\n </ReloadButton>\n </>\n ) : (\n <>\n <UpgradeLock>🔒</UpgradeLock>\n <UpgradeTitle>SEO Health Dashboard</UpgradeTitle>\n <UpgradeText>\n This feature requires a license key. Add your key to the plugin config to unlock\n the full dashboard.\n </UpgradeText>\n <UpgradeCode>{`// sanity.config.ts\nimport { seofields } from 'sanity-plugin-seofields'\n\nexport default defineConfig({\n plugins: [\n seofields({\n healthDashboard: {\n licenseKey: 'SEOF-XXXX-XXXX-XXXX',\n },\n }),\n ],\n})`}</UpgradeCode>\n <UpgradeButton\n href=\"https://sanity-plugin-seofields.thehardik.in\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Get a License Key →\n </UpgradeButton>\n </>\n )}\n </UpgradeBox>\n </UpgradeContainer>\n )}\n {licenseStatus === 'valid' && (\n <>\n {/* Header */}\n <PageHeader>\n <PageTitle>\n <span>\n {icon} {title}\n </span>\n {previewMode && <PreviewBadge>Preview Mode</PreviewBadge>}\n </PageTitle>\n <PageSubtitle>{description}</PageSubtitle>\n </PageHeader>\n {/* Stats Grid */}\n {!loading && (\n <StatsGrid>\n <StatCard>\n <StatLabel>Total Docs</StatLabel>\n <StatValue>{stats.total}</StatValue>\n </StatCard>\n <StatCard>\n <StatLabel>Avg Score</StatLabel>\n <StatValue>{stats.avgScore}%</StatValue>\n </StatCard>\n <StatCard $accent=\"#10b981\">\n <StatLabel>Excellent (80+)</StatLabel>\n <StatValue>{stats.excellent}</StatValue>\n </StatCard>\n <StatCard $accent=\"#f59e0b\">\n <StatLabel>Good (60–79)</StatLabel>\n <StatValue>{stats.good}</StatValue>\n </StatCard>\n <StatCard $accent=\"#f97316\">\n <StatLabel>Fair (40–59)</StatLabel>\n <StatValue>{stats.fair}</StatValue>\n </StatCard>\n <StatCard $accent=\"#ef4444\">\n <StatLabel>Poor / Missing</StatLabel>\n <StatValue>{stats.poor + stats.missing}</StatValue>\n </StatCard>\n </StatsGrid>\n )}\n {/* Controls */}\n <ControlsBar>\n <SearchWrapper>\n <SearchIconSvg>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SearchIconSvg>\n <SearchInput\n placeholder=\"Search documents...\"\n value={searchQuery}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(e) => setSearchQuery(e.currentTarget.value)}\n />\n </SearchWrapper>\n <StyledSelect\n value={filterStatus}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(e) => setFilterStatus(e.currentTarget.value)}\n >\n <option value=\"all\">All Status</option>\n <option value=\"excellent\">Excellent</option>\n <option value=\"good\">Good</option>\n <option value=\"fair\">Fair</option>\n <option value=\"poor\">Poor</option>\n <option value=\"missing\">Missing</option>\n </StyledSelect>\n {uniqueDocumentTypes.length > 1 && (\n <StyledSelect\n value={filterType}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(e) => setFilterType(e.currentTarget.value)}\n >\n <option value=\"all\">All Types</option>\n {uniqueDocumentTypes.map((type) => (\n <option key={type} value={type}>\n {resolveTypeLabel(type, typeLabels)}\n </option>\n ))}\n </StyledSelect>\n )}\n <StyledSelect\n value={sortBy}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(e) => setSortBy(e.currentTarget.value as 'score' | 'title')}\n >\n <option value=\"score\">Sort by Score</option>\n <option value=\"title\">Sort by Title</option>\n </StyledSelect>\n </ControlsBar>\n {/* Documents Table */}\n <TableCard>\n {loading && (\n <LoadingState>\n <Spinner />\n {loadingDocuments ?? 'Loading documents…'}\n </LoadingState>\n )}\n {!loading &&\n (filteredAndSortedDocs.length === 0 ? (\n <EmptyState>{noDocuments ?? 'No documents found'}</EmptyState>\n ) : (\n <>\n <TableHeader>\n <ColTitle>Title</ColTitle>\n {showTypeColumn && <ColType>Type</ColType>}\n <ColScore>Score</ColScore>\n <ColIssues>Top Issues</ColIssues>\n </TableHeader>\n {filteredAndSortedDocs.map((doc) => {\n return (\n <TableRow key={doc._id}>\n <ColTitle>\n <TitleWrapper>\n <TitleCell>\n {openInPane ? (\n <DocTitleAnchorPane id={doc._id} type={doc._type}>\n {doc.title || 'Untitled'}\n </DocTitleAnchorPane>\n ) : (\n <DocTitleAnchor id={doc._id} type={doc._type}>\n {doc.title || 'Untitled'}\n </DocTitleAnchor>\n )}\n {showDocumentId && <DocId>{doc._id}</DocId>}\n </TitleCell>\n {docBadge && (\n <DocBadgeRenderer\n doc={doc as DocumentWithSeoHealth & Record<string, unknown>}\n docBadge={docBadge}\n />\n )}\n </TitleWrapper>\n </ColTitle>\n {showTypeColumn && (\n <ColType>\n {typeColumnMode === 'text' ? (\n <TypeText>{resolveTypeLabel(doc._type, typeLabels)}</TypeText>\n ) : (\n (() => {\n const typeColor = getTypeColor(doc._type)\n return (\n <TypeBadge $bgColor={typeColor.bg} $textColor={typeColor.text}>\n {resolveTypeLabel(doc._type, typeLabels)}\n </TypeBadge>\n )\n })()\n )}\n </ColType>\n )}\n <ColScore>\n <ScoreBadge $score={doc.health.score}>{doc.health.score}%</ScoreBadge>\n </ColScore>\n <ColIssues>\n {doc.health.issues.slice(0, 2).map((issue) => (\n <IssueTag key={`issue-${doc._id}-${issue}`}>• {issue}</IssueTag>\n ))}\n {doc.health.issues.length > 2 && (\n <MoreIssuesWrapper\n // eslint-disable-next-line react/jsx-no-bind\n onMouseEnter={function (e) {\n handleMouseEnterIssues(\n e.currentTarget as HTMLDivElement,\n doc.health.issues,\n )\n }}\n onMouseLeave={handleMouseLeave}\n >\n <MoreIssues>+{doc.health.issues.length - 2} more issues</MoreIssues>\n </MoreIssuesWrapper>\n )}\n </ColIssues>\n </TableRow>\n )\n })}\n </>\n ))}\n </TableCard>\n {/* Single shared popover rendered outside the table */}\n {activePopover && (\n <IssuesPopover\n style={{\n top: activePopover.top,\n left: activePopover.left,\n transform: 'translateY(calc(-100% - 10px))',\n }}\n >\n {activePopover.issues.map((issue) => (\n <PopoverIssueItem key={issue}>⚠️ {issue}</PopoverIssueItem>\n ))}\n </IssuesPopover>\n )}{' '}\n </>\n )}{' '}\n </DashboardContainer>\n )\n}\n\nexport default SeoHealthDashboard\n","import SeoHealthDashboard, {SeoHealthDashboardProps} from './SeoHealthDashboard'\n\n/**\n * Sanity Tool component for the SEO Health Dashboard\n * This component wraps the SeoHealthDashboard for use as a custom tool in Sanity Studio\n */\nconst SeoHealthTool = (props: SeoHealthDashboardProps) => {\n return <SeoHealthDashboard {...props} />\n}\n\nexport default SeoHealthTool\n","import {FeedbackType} from '../types'\n\nexport const stopWords = ['the', 'a', 'an', 'and', 'or', 'but']\n\nexport const hasMatchingKeyword = (title: string, keywordList: string[]): boolean => {\n if (!title || keywordList.length === 0) return false\n const lowerTitle = title.toLowerCase()\n return keywordList.some((keyword) => keyword && lowerTitle.includes(keyword.toLowerCase()))\n}\n\nexport const hasKeywordOveruse = (\n title: string,\n keywordList: string[],\n maxOccurrences = 3,\n): boolean => {\n if (!title || keywordList.length === 0) return false\n const lowerTitle = title.toLowerCase()\n return keywordList.some((keyword) => {\n if (!keyword) return false\n const matches = lowerTitle.match(new RegExp(keyword.toLowerCase(), 'g'))\n return matches ? matches.length > maxOccurrences : false\n })\n}\n\nexport const startsWithStopWord = (title: string): boolean => {\n if (!title) return false\n const firstWord = title.trim().split(' ')[0].toLowerCase()\n return stopWords.includes(firstWord)\n}\n\nexport const primaryKeywordAtStart = (title: string, keywords: string[]): boolean => {\n if (!title || keywords.length === 0) return true\n return title.toLowerCase().startsWith(keywords[0].toLowerCase())\n}\n\nexport const truncate = (text: string, maxLength: number): string =>\n text.length > maxLength ? `${text.slice(0, maxLength)}…` : text\n\nexport const hasExcessivePunctuation = (title: string): boolean => /[!@#$%^&*]{2,}/.test(title)\n\nexport const getMetaTitleValidationMessages = (\n title: string,\n keywords: string[],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n\n const minChar = 50\n const maxChar = 60\n const charCount = title?.length || 0\n\n // Empty check\n if (!title?.trim()) {\n feedback.push({text: 'Meta Title is empty. Add content to improve SEO.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (charCount < minChar)\n feedback.push({\n text: `Title is ${charCount} characters — below recommended ${minChar}.`,\n color: 'orange',\n })\n else if (charCount > maxChar)\n feedback.push({\n text: `Title is ${charCount} characters — exceeds recommended ${maxChar}.`,\n color: 'red',\n })\n else feedback.push({text: `Title length (${charCount}) looks good for SEO.`, color: 'green'})\n\n // Keyword checks\n if (isParentseoField) {\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(title, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in title — good job!'\n : 'Keywords defined but missing in title.',\n color: hasKeyword ? 'green' : 'red',\n })\n\n if (hasKeywordOveruse(title, keywords)) {\n feedback.push({\n text: 'Keyword appears too many times — avoid keyword stuffing.',\n color: 'orange',\n })\n }\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Stop word check\n if (startsWithStopWord(title))\n feedback.push({text: 'Title starts with a stop word — consider rephrasing.', color: 'orange'})\n\n // Punctuation check\n if (hasExcessivePunctuation(title))\n feedback.push({text: 'Title contains excessive punctuation — simplify it.', color: 'orange'})\n\n return feedback\n}\n\nexport const getMetaDescriptionValidationMessages = (\n description: string,\n keywords: string[],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n\n const minChar = 120\n const maxChar = 160\n const charCount = description?.length || 0\n\n if (!description?.trim()) {\n feedback.push({text: 'Meta description is empty. Add content to improve SEO.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (charCount < minChar)\n feedback.push({\n text: `Description is ${charCount} chars — below recommended ${minChar}.`,\n color: 'orange',\n })\n else if (charCount > maxChar)\n feedback.push({\n text: `Description is ${charCount} chars — exceeds recommended ${maxChar}.`,\n color: 'red',\n })\n else\n feedback.push({text: `Description length (${charCount}) looks good for SEO.`, color: 'green'})\n\n // Keyword checks\n if (isParentseoField) {\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(description, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in description — good job!'\n : 'Keywords defined but missing in description.',\n color: hasKeyword ? 'green' : 'red',\n })\n\n if (hasKeywordOveruse(description, keywords)) {\n feedback.push({\n text: 'Keyword appears too many times — avoid keyword stuffing.',\n color: 'orange',\n })\n }\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Stop word / filler check\n if (startsWithStopWord(description))\n feedback.push({\n text: 'Description starts with a stop word — consider rephrasing.',\n color: 'orange',\n })\n\n // Punctuation / special characters\n if (hasExcessivePunctuation(description))\n feedback.push({\n text: 'Description contains excessive punctuation — simplify it.',\n color: 'orange',\n })\n\n return feedback\n}\n\nexport const getOgTitleValidation = (\n title: string,\n keywords: string[] = [],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n const min = 40\n const max = 60\n const count = title?.length || 0\n\n // Empty check\n if (!title?.trim()) {\n feedback.push({text: 'OG Title is empty. Add content for better social preview.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (count < min)\n feedback.push({\n text: `OG Title is ${count} chars — shorter than recommended ${min}.`,\n color: 'orange',\n })\n else if (count > max)\n feedback.push({text: `OG Title is ${count} chars — exceeds recommended ${max}.`, color: 'red'})\n else feedback.push({text: `OG Title length (${count}) looks good.`, color: 'green'})\n\n if (isParentseoField) {\n // Keyword checks\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(title, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in OG title — good job!'\n : 'Keywords defined but missing in OG title.',\n color: hasKeyword ? 'green' : 'red',\n })\n\n if (hasKeywordOveruse(title, keywords)) {\n feedback.push({\n text: 'Keyword appears too many times in OG title — avoid keyword stuffing.',\n color: 'orange',\n })\n }\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Additional OG-specific checks\n if (startsWithStopWord(title))\n feedback.push({\n text: 'OG Title starts with a stop word — consider rephrasing.',\n color: 'orange',\n })\n\n if (hasExcessivePunctuation(title))\n feedback.push({text: 'OG Title contains excessive punctuation — simplify it.', color: 'orange'})\n\n return feedback\n}\n\nexport const getOgDescriptionValidation = (\n desc: string,\n keywords: string[] = [],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n const min = 90\n const max = 120\n const count = desc?.length || 0\n\n // Empty check\n if (!desc?.trim()) {\n feedback.push({\n text: 'OG Description is empty. Add content for better social preview.',\n color: 'red',\n })\n return feedback\n }\n\n // Length check\n if (count < min)\n feedback.push({\n text: `OG Description is ${count} chars — shorter than recommended ${min}.`,\n color: 'orange',\n })\n else if (count > max)\n feedback.push({\n text: `OG Description is ${count} chars — exceeds recommended ${max}.`,\n color: 'red',\n })\n else feedback.push({text: `OG Description length (${count}) looks good.`, color: 'green'})\n\n // Keyword checks\n if (isParentseoField) {\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(desc, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in OG description — good job!'\n : 'Keywords defined but missing in OG description.',\n color: hasKeyword ? 'green' : 'red',\n })\n\n if (hasKeywordOveruse(desc, keywords)) {\n feedback.push({\n text: 'Keyword appears too many times in OG description — avoid keyword stuffing.',\n color: 'orange',\n })\n }\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Additional OG-specific checks\n if (startsWithStopWord(desc))\n feedback.push({\n text: 'OG Description starts with a stop word — consider rephrasing.',\n color: 'orange',\n })\n\n if (hasExcessivePunctuation(desc))\n feedback.push({\n text: 'OG Description contains excessive punctuation — simplify it.',\n color: 'orange',\n })\n\n return feedback\n}\n\nexport const getTwitterTitleValidation = (\n title: string,\n keywords: string[] = [],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n const min = 30\n const max = 70\n const count = title?.length || 0\n\n if (!title?.trim()) {\n feedback.push({text: 'X Title is empty. Add content for better SEO.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (count < min)\n feedback.push({\n text: `X Title is ${count} chars — shorter than recommended ${min}.`,\n color: 'orange',\n })\n else if (count > max)\n feedback.push({\n text: `X Title is ${count} chars — exceeds recommended ${max}.`,\n color: 'red',\n })\n else feedback.push({text: `X Title length (${count}) looks good.`, color: 'green'})\n\n if (isParentseoField) {\n // Keyword checks\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(title, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in X title — good job!'\n : 'Keywords defined but missing in X title.',\n color: hasKeyword ? 'green' : 'red',\n })\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Punctuation check\n if (/[!@#$%^&*]{2,}/.test(title))\n feedback.push({text: 'X Title has excessive punctuation — simplify it.', color: 'orange'})\n\n return feedback\n}\n\nexport const getTwitterDescriptionValidation = (\n desc: string,\n keywords: string[] = [],\n isParentseoField: boolean,\n): FeedbackType[] => {\n const feedback: FeedbackType[] = []\n const min = 50\n const max = 200\n const count = desc?.length || 0\n\n if (!desc?.trim()) {\n feedback.push({text: 'X Description is empty. Add content for better SEO.', color: 'red'})\n return feedback\n }\n\n // Length check\n if (count < min)\n feedback.push({\n text: `X Description is ${count} chars — shorter than recommended ${min}.`,\n color: 'orange',\n })\n else if (count > max)\n feedback.push({\n text: `X Description is ${count} chars — exceeds recommended ${max}.`,\n color: 'red',\n })\n else feedback.push({text: `X Description length (${count}) looks good.`, color: 'green'})\n\n if (isParentseoField) {\n // Keyword checks\n if (keywords.length > 0) {\n const hasKeyword = hasMatchingKeyword(desc, keywords)\n feedback.push({\n text: hasKeyword\n ? 'Keyword found in X description — good job!'\n : 'Keywords defined but missing in X description.',\n color: hasKeyword ? 'green' : 'red',\n })\n } else {\n feedback.push({\n text: 'No keywords defined. Consider adding relevant keywords.',\n color: 'orange',\n })\n }\n }\n\n // Punctuation check\n if (/[!@#$%^&*]{2,}/.test(desc))\n feedback.push({\n text: 'X Description has excessive punctuation — simplify it.',\n color: 'orange',\n })\n\n return feedback\n}\n","import {Stack, Text} from '@sanity/ui'\nimport React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaDescriptionValidationMessages} from '../../utils/seoUtils'\n\nconst MetaDescription = (props: StringInputProps): React.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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getMetaTitleValidationMessages} from '../../utils/seoUtils'\n\nconst MetaTitle = (props: StringInputProps): React.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 {Box, Stack, Text} from '@sanity/ui'\nimport React from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\nimport styled from 'styled-components'\n\nimport {truncate} from '../utils/seoUtils'\n\nconst PreviewContainer = styled.div`\n max-width: 600px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: #ffffff;\n border: 1px solid #dadce0;\n border-radius: 8px;\n overflow: hidden;\n`\n\nconst PreviewHeader = styled.div`\n background: #f8f9fa;\n padding: 12px 16px;\n border-bottom: 1px solid #dadce0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n`\n\nconst PreviewBody = styled.div`\n padding: 16px;\n`\n\nconst SerpUrl = styled.p`\n margin: 0 0 4px;\n color: #006621;\n font-size: 13px;\n line-height: 1.4;\n word-break: break-word;\n`\n\nconst SerpTitle = styled.h3`\n margin: 0 0 8px;\n color: #1a0dab;\n font-size: 18px;\n font-weight: 500;\n line-height: 1.4;\n word-break: break-word;\n\n &:hover {\n text-decoration: underline;\n }\n`\n\nconst SerpDescription = styled.p`\n margin: 0;\n color: #545454;\n font-size: 14px;\n line-height: 1.6;\n word-break: break-word;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`\n\nconst LiveIndicator = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: #4f46e5;\n background: #f0f4ff;\n padding: 4px 8px;\n border-radius: 4px;\n`\n\nconst SeoPreview = (props: StringInputProps): React.ReactElement => {\n const {path, schemaType} = props\n const {options} = schemaType as {\n options?: {\n baseUrl?: string\n prefix?: ((doc: {_type?: string} & Record<string, unknown>) => string) | string\n }\n }\n const baseUrl = options?.baseUrl || 'https://www.example.com'\n const prefixFunction = options?.prefix as\n | ((doc: {_type?: string} & Record<string, unknown>) => string)\n | undefined\n const parent = useFormValue([path[0]]) || {\n title: '',\n description: '',\n canonicalUrl: '',\n }\n const rootDoc: {\n slug?: {current: string}\n } = useFormValue([]) || {\n slug: {current: ''},\n }\n const slug: string = rootDoc?.slug?.current || ''\n\n const {\n title,\n description,\n canonicalUrl: url,\n } = parent as {\n title?: string\n description?: string\n canonicalUrl?: string\n }\n\n // Build full URL\n const base = (url || baseUrl)?.replace(/\\/+$/, '')\n const slugStr = String(slug || '').replace(/^\\/+/, '')\n const pref = String(\n prefixFunction ? prefixFunction(rootDoc as {slug?: {current: string}}) : '',\n ).replace(/^\\/+|\\/+$/g, '')\n const urlPath = [pref, slugStr].filter(Boolean).join('/')\n const finalUrl = urlPath ? `${base}/${urlPath}` : base\n\n // Extract domain for display\n const domain = (() => {\n try {\n const u = new URL(finalUrl || base)\n return u.hostname\n } catch {\n return 'example.com'\n }\n })()\n\n // Format URL display with › separator\n const urlDisplay = `${domain}${urlPath ? ` › ${urlPath.split('/').slice(-1)[0]}` : ''}`\n\n return (\n <Box padding={3}>\n <PreviewContainer>\n <PreviewHeader>\n <span\n style={{\n fontSize: '11px',\n color: '#5f6368',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Search Preview\n </span>\n <LiveIndicator>\n <span\n style={{\n width: '4px',\n height: '4px',\n borderRadius: '50%',\n backgroundColor: '#4f46e5',\n display: 'inline-block',\n }}\n />\n Live\n </LiveIndicator>\n </PreviewHeader>\n\n <PreviewBody>\n <SerpUrl>{finalUrl ? urlDisplay : 'example.com › page-url'}</SerpUrl>\n <SerpTitle>\n {title && title.length > 0 ? truncate(title, 60) : 'Your SEO Title will appear here'}\n </SerpTitle>\n <SerpDescription>\n {description && description.length > 0\n ? truncate(description, 160)\n : 'Your meta description will show up here. Make it compelling!'}\n </SerpDescription>\n </PreviewBody>\n </PreviewContainer>\n </Box>\n )\n}\n\nexport default SeoPreview\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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgDescriptionValidation} from '../../utils/seoUtils'\n\nconst OgDescription = (props: StringInputProps): React.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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getOgTitleValidation} from '../../utils/seoUtils'\n\nconst OgTitle: React.FC<StringInputProps> = (props) => {\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 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 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 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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterDescriptionValidation} from '../../utils/seoUtils'\n\nconst TwitterDescription = (props: StringInputProps): React.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 React, {useMemo} from 'react'\nimport {StringInputProps, useFormValue} from 'sanity'\n\nimport {FeedbackType} from '../../types'\nimport {getTwitterTitleValidation} from '../../utils/seoUtils'\n\nconst TwitterTitle = (props: StringInputProps): React.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 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 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 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 {defineField, defineType, SchemaTypeDefinition} from 'sanity'\n\nimport MetaDescription from '../components/meta/MetaDescription'\nimport MetaTitle from '../components/meta/MetaTitle'\nimport SeoPreview from '../components/SeoPreview'\nimport {SeoFieldsPluginConfig} from '../plugin'\nimport {getFieldHiddenFunction, getFieldInfo} from '../utils/fieldsUtils'\nimport {isEmpty} from '../utils/utils'\nimport openGraph from './types/openGraph'\nimport twitter from './types/twitter'\n\nexport default function seoFieldsSchema(config: SeoFieldsPluginConfig = {}): SchemaTypeDefinition {\n return defineType({\n name: 'seoFields',\n title: 'SEO Fields',\n type: 'object',\n fields: [\n defineField({\n name: 'robots',\n title: 'Robots Settings',\n type: 'robots', // Use the separate robots type here\n hidden: getFieldHiddenFunction('robots', config),\n }),\n // 👇 conditionally spread preview field\n ...((typeof config.seoPreview === 'boolean' && config.seoPreview) ||\n (typeof config.seoPreview === 'object' && !isEmpty(config.seoPreview))\n ? [\n defineField({\n name: 'preview',\n title: 'SEO Preview',\n type: 'string',\n components: {input: SeoPreview},\n options: {\n baseUrl: config.baseUrl || 'https://www.example.com',\n ...(typeof config.seoPreview === 'object' &&\n config.seoPreview &&\n config.seoPreview.prefix\n ? {prefix: config.seoPreview.prefix}\n : {}),\n } as Record<string, unknown>,\n // Use a readOnly field to prevent editing\n // This field is just for preview purposes\n initialValue: '' as string, // Set an initial value\n readOnly: true,\n }),\n ]\n : []),\n\n defineField({\n name: 'title',\n ...getFieldInfo('title', config.fieldOverrides),\n // title: 'Meta Title',\n type: 'string',\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 components: {\n input: MetaTitle,\n },\n // validation: (Rule) => Rule.max(60).warning('Meta title should be under 60 characters.'),\n hidden: getFieldHiddenFunction('title', config),\n }),\n defineField({\n name: 'description',\n ...getFieldInfo('description', config.fieldOverrides),\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 type: 'text',\n rows: 3,\n components: {\n input: MetaDescription,\n },\n // validation: (Rule) => Rule.max(160).warning('Meta description should be under 160 characters.'),\n hidden: getFieldHiddenFunction('description', config),\n }),\n defineField({\n name: 'metaImage',\n ...getFieldInfo('metaImage', config.fieldOverrides),\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 type: 'image',\n options: {\n hotspot: true,\n },\n hidden: getFieldHiddenFunction('metaImage', config),\n }),\n defineField({\n name: 'metaAttributes',\n // title: 'Additional Meta Attributes',\n ...getFieldInfo('metaAttributes', config.fieldOverrides),\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 hidden: getFieldHiddenFunction('metaAttributes', 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 openGraph(config) as any,\n twitter(config) as any,\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 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 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 React from 'react'\nimport {definePlugin} from 'sanity'\n\nimport SeoHealthTool from './components/SeoHealthTool'\nimport types from './schemas/types'\nimport type {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\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 in the preview.\n * The prefix function receives the current document as an argument and should return a string.\n * Example:\n * ```\n * seoPreview: {\n * prefix: (doc) => `/${doc.slug?.current || 'untitled'}`\n * }\n * ```\n */\n seoPreview?:\n | boolean\n | {\n prefix?: (doc: {_type?: string} & Record<string, unknown>) => 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 * 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 * 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 display?: {\n typeColumn?: boolean\n documentId?: boolean\n }\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 */\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 * typeLabels: { productDrug: 'Products', singleCondition: 'Condition' }\n */\n typeLabels?: 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 * docBadge: (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 docBadge?: (\n doc: DocumentWithSeoHealth & Record<string, unknown>,\n ) => {label: string; bgColor?: string; textColor?: string; fontSize?: string} | undefined\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}\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 typeLabels: Record<string, string> | undefined\n typeColumnMode: 'badge' | 'text' | undefined\n titleField: string | Record<string, string> | undefined\n docBadge:\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}\n\nconst resolveDashboardConfig = (\n healthDashboard: SeoFieldsPluginConfig['healthDashboard'],\n): ResolvedDashboardConfig => {\n const cfg = typeof healthDashboard === 'object' ? healthDashboard : undefined\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?.display?.typeColumn,\n showDocumentId: cfg?.display?.documentId,\n queryTypes: cfg?.query?.types,\n queryRequireSeo: cfg?.query?.requireSeo,\n queryGroq: cfg?.query?.groq,\n apiVersion: cfg?.apiVersion,\n licenseKey: cfg?.licenseKey,\n typeLabels: cfg?.typeLabels,\n typeColumnMode: cfg?.typeColumnMode,\n titleField: cfg?.titleField,\n docBadge: cfg?.docBadge,\n loadingLicense: cfg?.content?.loadingLicense,\n loadingDocuments: cfg?.content?.loadingDocuments,\n noDocuments: cfg?.content?.noDocuments,\n previewMode: cfg?.previewMode,\n }\n}\n\nconst seofields = definePlugin<SeoFieldsPluginConfig | void>((config = {}) => {\n const {healthDashboard = true} = config as SeoFieldsPluginConfig\n const dash = resolveDashboardConfig(healthDashboard)\n\n const BoundSeoHealthTool = () =>\n React.createElement(SeoHealthTool, {\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 typeLabels: dash.typeLabels,\n typeColumnMode: dash.typeColumnMode,\n titleField: dash.titleField,\n docBadge: dash.docBadge,\n loadingLicense: dash.loadingLicense,\n loadingDocuments: dash.loadingDocuments,\n noDocuments: dash.noDocuments,\n previewMode: dash.previewMode,\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 React from 'react'\nimport type {ComponentBuilder, StructureBuilder} from 'sanity/structure'\n\nimport SeoHealthDashboard, {SeoHealthDashboardProps} from './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: React.FC = () => (\n <SeoHealthDashboard customQuery={query} openInPane={openInPane} title={paneTitle} {...rest} />\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"],"names":["from","length","position","character","characters","j","k","x","y","z","_","f","o","t","n","e","r","s","d.RULESET","d.prefixer","d.stringify","a","c","l","d.compile","p","d.serialize","d.middleware","d.rulesheet","h","m","g","S","w","E","N","O","i","d","v","b","u","D","styled","useIntentLink","usePaneRouter","jsx","keyframes","hash","char","openGraph","twitter","robots","useClient","useState","useCallback","useEffect","useMemo","types","jsxs","Fragment","useFormValue","Stack","Text","Box","document","defineType","defineField","seoFields","definePlugin","React"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]}
|