@griddo/core 11.10.2 → 11.10.3-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../src/hooks/themes/useGlobalTheme.tsx","../src/hooks/themes/useTheme.tsx","../src/hooks/themes/utils.tsx","../src/hooks/themes/useThemeColors.tsx","../src/hooks/themes/useThemePrimitives.tsx","../src/hooks/themes/useThemeFont.tsx","../src/hooks/useFetch.ts","../src/contexts/utils.ts","../src/contexts/I18n/index.tsx","../src/contexts/Site/index.tsx","../src/contexts/Page/index.tsx","../src/hooks/usePage.ts","../src/contexts/Form/index.tsx","../src/contexts/ModulePreview/index.tsx","../src/contexts/Navigation/index.tsx","../src/contexts/Session/index.tsx","../src/hooks/useSite.ts","../src/hooks/useAiAnswers.ts","../../../node_modules/uuid/dist/esm-browser/rng.js","../../../node_modules/uuid/dist/esm-browser/regex.js","../../../node_modules/uuid/dist/esm-browser/validate.js","../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/uuid/dist/esm-browser/v35.js","../../../node_modules/uuid/dist/esm-browser/parse.js","../../../node_modules/uuid/dist/esm-browser/md5.js","../../../node_modules/uuid/dist/esm-browser/v4.js","../../../node_modules/uuid/dist/esm-browser/sha1.js","../src/hooks/useAiReferenceField.ts","../src/hooks/useAiSearch.ts","../../../node_modules/uuid/dist/esm-browser/v3.js","../../../node_modules/uuid/dist/esm-browser/v5.js","../src/utils/index.ts","../src/hooks/utils.ts","../src/hooks/useReferenceFieldData.ts","../src/hooks/useContentType.ts","../src/hooks/useContentTypeNavigation.ts","../src/hooks/useDataFilters.ts","../src/utils/images.ts","../src/hooks/useGriddoImage.ts","../src/hooks/useGriddoImageExp.ts","../src/hooks/useI18n.ts","../src/hooks/useModulePreview.ts","../src/hooks/useImage.ts","../src/hooks/useIsClient.ts","../src/hooks/useIsFirstRender.ts","../src/hooks/useLink.ts","../src/hooks/useList.ts","../src/hooks/useListWithDefaultStaticPage.ts","../src/functions/alerts/index.ts","../src/functions/localeDate/index.ts","../src/hooks/useLocaleDate.ts","../src/hooks/useNavigation.ts","../src/hooks/usePageRelatedContent.ts","../src/hooks/useReceiveInterests.ts","../src/hooks/useScript.ts","../src/hooks/useSendInterests.ts","../src/hooks/useSession.ts","../src/hooks/useSSR.ts","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react-aspect-ratio/dist/es/react-15.6.js","../../../node_modules/react-aspect-ratio/dist/es/react-latest.js","../../../node_modules/react-aspect-ratio/dist/es/index.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/components/CloudinaryImage/index.tsx","../src/components/CloudinaryBackgroundImage/index.tsx","../src/components/Component/ComponentWrapper/svg/Delete.tsx","../src/components/Component/ComponentWrapper/svg/Duplicate.tsx","../src/components/Component/ComponentWrapper/index.tsx","../src/components/Component/FormWrapper/index.tsx","../src/components/Component/index.tsx","../src/hooks/useForm.ts","../src/components/GriddoBackgroundImage/index.tsx","../src/components/GriddoImage/index.tsx","../src/components/GriddoImageExp/utils.ts","../src/components/GriddoImageExp/index.tsx","../src/components/GriddoLink/utils.ts","../src/components/GriddoLink/index.tsx","../src/components/LdJson/index.tsx","../src/components/Link/index.tsx","../src/components/ModulePreview/index.tsx","../src/components/Page/utils.ts","../src/components/Page/index.tsx","../src/components/Preview/index.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\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; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\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);\r\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); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\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\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\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\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import type { Theme } from \"../..\";\n\n/**\n * `useGlobalTheme()`\n *\n * Returns global theme definition and its primitives values.\n */\nfunction useGlobalTheme(themeFile: Theme.GriddoTheme): Theme.GlobalTheme {\n\treturn themeFile.global;\n}\n\nexport { useGlobalTheme };\n","import type { Theme } from \"../..\";\nimport type { UseThemeProps } from \"./types\";\n\n/**\n * `useTheme()`\n *\n * This hook can be used to get a specific theme, given its id.\n * If theme id is not specified, it will return all themes.\n */\nfunction useTheme(\n\tthemeFile: Theme.GriddoTheme,\n\tprops: UseThemeProps,\n): Array<Theme.GlobalTheme | Theme.Theme> | Theme.Theme {\n\tconst themes: Array<Theme.GlobalTheme | Theme.Theme> = [];\n\n\tif (props?.global) {\n\t\tthemes.push(themeFile.global);\n\t}\n\n\tif (props?.theme) {\n\t\tconst selectedTheme = themeFile.themes.find((t) => t.id === props.theme);\n\t\tselectedTheme && themes.push(selectedTheme);\n\t} else {\n\t\tthemes.push(...themeFile.themes);\n\t}\n\n\treturn themes.length === 1 ? themes[0] : themes;\n}\n\nexport { useTheme };\n","import type { Theme } from \"../..\";\n\nconst getPlainPrimitives = (themePrimitives: Theme.Primitives) => {\n\tconst allPrimitives: { [key: string]: string } = {};\n\n\tconst getPrimitives = (primitives: Array<Theme.Primitive>) => {\n\t\tfor (const primitive of primitives) {\n\t\t\tfor (const { cssVar, value } of primitive.values) {\n\t\t\t\tallPrimitives[cssVar] = value;\n\t\t\t}\n\t\t}\n\t};\n\n\tif (Array.isArray(themePrimitives)) {\n\t\tgetPrimitives(themePrimitives);\n\t} else {\n\t\tfor (const primitives of Object.values(themePrimitives)) {\n\t\t\tgetPrimitives(primitives);\n\t\t}\n\t}\n\n\treturn allPrimitives;\n};\n\nconst plainThemePrimitives = (theme: Theme.GlobalTheme | Theme.Theme) => {\n\tlet primitives: { [key: string]: string } = {\n\t\t...getPlainPrimitives(theme.primitives),\n\t};\n\n\tif (\"subthemes\" in theme && theme.subthemes) {\n\t\tfor (const subtheme of theme.subthemes) {\n\t\t\tprimitives = {\n\t\t\t\t...primitives,\n\t\t\t\t...getPlainPrimitives(subtheme.primitives),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn primitives;\n};\n\nconst filterColorPrimitives = (\n\tprimitives: Array<Theme.Primitive>,\n\tallPrimitives: { [key: string]: string },\n) => {\n\treturn primitives\n\t\t.map((primitive) => {\n\t\t\treturn {\n\t\t\t\t...primitive,\n\t\t\t\t// replaces var(...) with variable value, so that CSS.supports('color', value)\n\t\t\t\t// does not trigger a false positive\n\t\t\t\tvalues: primitive.values\n\t\t\t\t\t.map((primitiveValue) => {\n\t\t\t\t\t\tconst regexp = /var\\((.*?)\\)/g;\n\t\t\t\t\t\tconst matches = [...primitiveValue.value.matchAll(regexp)];\n\n\t\t\t\t\t\tfor (const match of matches) {\n\t\t\t\t\t\t\tif (match.length >= 2) {\n\t\t\t\t\t\t\t\tprimitiveValue.value = primitiveValue.value.replace(\n\t\t\t\t\t\t\t\t\tmatch[0],\n\t\t\t\t\t\t\t\t\tallPrimitives[match[1]],\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn { ...primitiveValue };\n\t\t\t\t\t})\n\t\t\t\t\t.filter(({ value }) => CSS.supports(\"color\", value)),\n\t\t\t};\n\t\t})\n\t\t.filter((primitive) => primitive.values.length);\n};\n\nconst getColorPrimitives = (\n\ttheme: Theme.GlobalTheme | Theme.Theme,\n): Theme.Primitives => {\n\tconst primitives: { [key: string]: string } = plainThemePrimitives(theme);\n\n\tif (Array.isArray(theme.primitives)) {\n\t\treturn filterColorPrimitives(theme.primitives, primitives);\n\t}\n\tconst { common, light, dark } = theme.primitives;\n\n\treturn {\n\t\tcommon: common && filterColorPrimitives(common, primitives),\n\t\tlight: filterColorPrimitives(light, primitives),\n\t\tdark: filterColorPrimitives(dark, primitives),\n\t};\n};\n\nconst filterPrimitivesByType = (\n\tprimitives: Array<Theme.Primitive>,\n\ttype: string | Array<string>,\n) => {\n\treturn primitives.filter((primitive) =>\n\t\tArray.isArray(type) ? type.includes(primitive.id) : primitive.id === type,\n\t);\n};\n\nconst getPrimitivesByType = (\n\ttheme: Theme.GlobalTheme | Theme.Theme,\n\ttype: string | Array<string>,\n): Theme.Primitives => {\n\tif (Array.isArray(theme.primitives)) {\n\t\treturn filterPrimitivesByType(theme.primitives, type);\n\t}\n\tconst { common, light, dark } = theme.primitives;\n\n\treturn {\n\t\tcommon: common && filterPrimitivesByType(common, type),\n\t\tlight: filterPrimitivesByType(light, type),\n\t\tdark: filterPrimitivesByType(dark, type),\n\t};\n};\n\nconst hasPrimitives = (theme: Theme.Theme) => {\n\tif (Array.isArray(theme.primitives)) {\n\t\treturn theme.primitives.length;\n\t}\n\tconst { common, light, dark } = theme.primitives;\n\n\treturn common?.length || light.length || dark.length;\n};\n\nconst filterThemePrimitives = (\n\tthemes: Array<Theme.GlobalTheme | Theme.Theme>,\n\tselectedSubtheme?: string,\n\ttype?: string | Array<string>,\n) => {\n\tconst color = typeof type === \"undefined\";\n\n\treturn themes\n\t\t.map((theme) => {\n\t\t\treturn {\n\t\t\t\t...theme,\n\t\t\t\tprimitives: color\n\t\t\t\t\t? getColorPrimitives(theme)\n\t\t\t\t\t: getPrimitivesByType(theme, type),\n\t\t\t\tsubthemes:\n\t\t\t\t\t(\"subthemes\" in theme &&\n\t\t\t\t\t\ttheme.subthemes &&\n\t\t\t\t\t\ttheme.subthemes\n\t\t\t\t\t\t\t.map((subtheme) => ({\n\t\t\t\t\t\t\t\t...subtheme,\n\t\t\t\t\t\t\t\tprimitives: color\n\t\t\t\t\t\t\t\t\t? getColorPrimitives(subtheme)\n\t\t\t\t\t\t\t\t\t: getPrimitivesByType(subtheme, type),\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(subtheme) =>\n\t\t\t\t\t\t\t\t\thasPrimitives(subtheme as Theme.Theme) &&\n\t\t\t\t\t\t\t\t\t(selectedSubtheme ? subtheme.id === selectedSubtheme : true),\n\t\t\t\t\t\t\t)) ||\n\t\t\t\t\t[],\n\t\t\t};\n\t\t})\n\t\t.filter(\n\t\t\t(theme) => hasPrimitives(theme as Theme.Theme) || theme.subthemes.length,\n\t\t);\n};\n\nexport const filterThemePrimitivesByType = (\n\tthemes: Array<Theme.GlobalTheme | Theme.Theme>,\n\tprimitives: string | Array<string>,\n\tsubtheme?: string,\n) => {\n\treturn filterThemePrimitives(themes, subtheme, primitives);\n};\n\nexport const filterThemePrimitivesByColor = (\n\tthemes: Array<Theme.GlobalTheme | Theme.Theme>,\n\tsubtheme?: string,\n) => {\n\treturn filterThemePrimitives(themes, subtheme);\n};\n","import type { Theme } from \"../..\";\nimport type { UseThemeColorsProps } from \"./types\";\n\nimport { filterThemePrimitivesByColor } from \"./utils\";\n\n/**\n * `useThemeColors()`\n *\n * This hook can be used to get all color primitives from the given theme.\n * If theme is not specified, it will return color primitives for all themes.\n */\nfunction useThemeColors(\n\tthemeFile: Theme.GriddoTheme,\n\tprops?: UseThemeColorsProps,\n) {\n\tconst themes: Array<Theme.GlobalTheme | Theme.Theme> = [];\n\n\tif (props?.global) {\n\t\tthemes.push(themeFile.global);\n\t}\n\n\tif (props?.theme) {\n\t\tconst selectedTheme = themeFile.themes.find((t) => t.id === props.theme);\n\t\tselectedTheme && themes.push(selectedTheme);\n\t} else {\n\t\tthemes.push(...themeFile.themes);\n\t}\n\n\tconst themesWithColors = filterThemePrimitivesByColor(\n\t\tthemes,\n\t\tprops?.subtheme,\n\t);\n\treturn themesWithColors;\n}\n\nexport { useThemeColors };\n","import type { Theme } from \"../..\";\nimport type { UseThemePrimitivesProps } from \"./types\";\n\nimport { filterThemePrimitivesByType } from \"./utils\";\n\n/**\n * `useThemePrimitives()`\n *\n * This hook can be used to get a specific group of primitives from the given theme and subtheme.\n * If theme or subtheme are not specified, it will return primitives for all themes and subthemes.\n */\nfunction useThemePrimitives(\n\tthemeFile: Theme.GriddoTheme,\n\tprops: UseThemePrimitivesProps,\n) {\n\tconst themes: Array<Theme.GlobalTheme | Theme.Theme> = [];\n\tconst { global, primitive, subtheme } = props;\n\n\tif (global) {\n\t\tthemes.push(themeFile.global);\n\t}\n\n\tif (props.theme) {\n\t\tconst selectedTheme = themeFile.themes.find((t) => t.id === props.theme);\n\t\tselectedTheme && themes.push(selectedTheme);\n\t} else {\n\t\tthemes.push(...themeFile.themes);\n\t}\n\n\treturn filterThemePrimitivesByType(themes, primitive, subtheme);\n}\n\nexport { useThemePrimitives };\n","import type { Theme } from \"../..\";\nimport type { UseThemeFontProps } from \"./types\";\n\nimport { useThemePrimitives } from \"./useThemePrimitives\";\n\n/**\n * `useThemeFont()`\n *\n * This hook can be used to get font related primitives from the given theme and subtheme.\n * If theme or subtheme are not specified, it will return font primitives for all themes and subthemes.\n */\nfunction useThemeFont(themeFile: Theme.GriddoTheme, props?: UseThemeFontProps) {\n\treturn useThemePrimitives(themeFile, {\n\t\t...props,\n\t\tprimitive: [\"fontFamily\", \"fontSize\"],\n\t});\n}\n\nexport { useThemeFont };\n","import * as React from \"react\";\n\nexport type UseFetchStateProps<T> = {\n\tisError: boolean;\n\tisLoading: boolean;\n\tmsg: { code: number; msg: string };\n\tdata?: T;\n\tisFirstFetch: boolean;\n};\n\nexport function useFetch<DataStructure>(\n\turl?: string,\n\toptions?: {\n\t\tmethod: \"POST\" | \"GET\";\n\t\tbody: unknown | null;\n\t},\n) {\n\tconst { method, body } = options || {};\n\tconst [data, setData] = React.useState<DataStructure>();\n\tconst [isLoading, setIsLoading] = React.useState(true);\n\tconst [isError, setIsError] = React.useState(false);\n\tconst [isFirstFetch, setIsFirstFetch] = React.useState(true);\n\tconst [msg, setMsg] = React.useState(\n\t\t{} as UseFetchStateProps<DataStructure>[\"msg\"],\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (!url) return;\n\t\tif (method === \"POST\" && !body) return; // With POST, useFetch needs a body.\n\n\t\tsetIsLoading(true);\n\n\t\tfetch(url, {\n\t\t\tmethod: method || \"GET\",\n\t\t\tbody: JSON.stringify(body),\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tsetIsFirstFetch(false);\n\t\t\t\tif (response.status !== 200) {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\tsetIsError(true);\n\t\t\t\t\tsetMsg({\n\t\t\t\t\t\tcode: response.status,\n\t\t\t\t\t\tmsg: response.statusText,\n\t\t\t\t\t});\n\t\t\t\t\tthrow new Error(response.statusText);\n\t\t\t\t}\n\t\t\t\treturn response.json();\n\t\t\t})\n\t\t\t.then((data: DataStructure & { code: number; msg: string }) => {\n\t\t\t\tsetData(data);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tsetIsLoading(false);\n\t\t\t\tsetIsError(false);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tsetIsError(true);\n\t\t\t});\n\t}, [url, body]);\n\n\treturn { data, isLoading, isError, isFirstFetch, msg };\n}\n","import * as React from \"react\";\n\n/**\n * Constantes para las keys de los contextos globales\n */\nexport const CONTEXT_KEYS = {\n\tI18N: \"__GRIDDO_I18N_CONTEXT__\",\n\tMODULE_PREVIEW: \"__GRIDDO_MODULE_PREVIEW_CONTEXT__\",\n\tNAVIGATION: \"__GRIDDO_NAVIGATION_CONTEXT__\",\n\tPAGE: \"__GRIDDO_PAGE_CONTEXT__\",\n\tSESSION: \"__GRIDDO_SESSION_CONTEXT__\",\n\tSITE: \"__GRIDDO_SITE_CONTEXT__\",\n} as const;\n\ntype GlobalContexts = Record<string, React.Context<any>>;\n\n/**\n * Crea o reutiliza un React.Context globalmente compartido.\n * Evita crear múltiples instancias si hay múltiples versiones del paquete\n * (pensado para el split del monorepo).\n *\n * @param key Un identificador único\n * @param defaultValue Valor por defecto del contexto\n */\nexport function getOrCreateGlobalContext<T>(\n\tkey: string,\n\tdefaultValue: T,\n): React.Context<T> {\n\tconst globalObj = (typeof globalThis !== \"undefined\" ? globalThis : {}) as GlobalContexts;\n\n\tif (!(key in globalObj)) {\n\t\tglobalObj[key] = React.createContext<T>(defaultValue);\n\t}\n\n\treturn globalObj[key] as React.Context<T>;\n}\n","import type { LocaleTranslations } from \"../../types/core\";\n\nimport * as React from \"react\";\n\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\ninterface I18nContextProps {\n\ttranslations?: LocaleTranslations;\n}\n\ninterface I18nProviderProps {\n\tchildren: JSX.Element;\n\t/** Object with static translations using local i18n locale codes.\n\t * @example\n\t * {\n\t * es_ES: { hi: \"Hola\", ... }\n\t * en_US: { hi: \"Hello\", ... }\n\t * }\n\t */\n\ttranslations?: LocaleTranslations;\n}\n\nconst defaultValue: I18nContextProps = { translations: {} } as const;\n\nconst I18nContext = getOrCreateGlobalContext<I18nContextProps>(\n\tCONTEXT_KEYS.I18N,\n\tdefaultValue,\n);\n\n/**\n * This provider component inject the `translation` object in the context of the\n * site. Then you can retrieve the translation based on the page language using\n * the `useI18n()` hook.\n */\nfunction I18nProvider(props: I18nProviderProps): JSX.Element {\n\tconst { children, translations } = props;\n\n\treturn (\n\t\t<I18nContext.Provider value={{ translations }}>\n\t\t\t{children}\n\t\t</I18nContext.Provider>\n\t);\n}\n\nexport { I18nContext, I18nProvider };\n","import type { GriddoLinkProps } from \"../../components/GriddoLink\";\nimport type { Site } from \"../../types/core\";\n\nimport * as React from \"react\";\n\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\n// Componente que hace de placeholder para el Link de Gatsby\nfunction Link(props: GriddoLinkProps) {\n\tconst { children, ...rest } = props;\n\n\treturn (\n\t\t<a data-griddo=\"link\" {...rest}>\n\t\t\t{children}\n\t\t</a>\n\t);\n}\n\n// Función que hace de place holder para la función navigate de Gatsby.\nconst navigate = () => null;\n\nconst defaultValue: SiteContextProps = {\n\tlinkComponent: Link,\n\tnavigate: navigate,\n};\n\nconst SiteContext = getOrCreateGlobalContext<SiteContextProps>(\n\tCONTEXT_KEYS.SITE,\n\tdefaultValue,\n);\n\n/**\n * <SiteProvider>\n */\nfunction SiteProvider(props: SiteProviderProps) {\n\tconst { children, ...rest } = props;\n\n\tconst value = {\n\t\t...defaultValue,\n\t\t...rest,\n\t};\n\n\treturn <SiteContext.Provider value={value}>{children}</SiteContext.Provider>;\n}\n\ninterface SiteContextProps extends Site {\n\t[key: string]: unknown;\n\tlinkComponent: (props: GriddoLinkProps) => JSX.Element;\n\tnavigate: () => null;\n\tselectEditorID?(\n\t\tselectedComponent: {\n\t\t\teditorID?: number;\n\t\t\tcomponent: string;\n\t\t\ttype?: string;\n\t\t\tparentEditorID?: number;\n\t\t},\n\t\tparentComponent: string | undefined | null,\n\t\te: React.SyntheticEvent,\n\t): void;\n\n\tselectHoverEditorID?(editorID: number): void;\n\tmoduleActions?: {\n\t\tdeleteModuleAction: (editorID: number) => void;\n\t\tduplicateModuleAction: (editorID: number) => void;\n\t};\n}\n\ninterface SiteProviderProps extends Site {\n\tchildren: JSX.Element;\n}\n\nexport {\n\tSiteContext,\n\tSiteProvider,\n\ttype SiteContextProps,\n\ttype SiteProviderProps,\n};\n","import type { ISOLocale, Locale, Page } from \"../../types/core\";\n\nimport * as React from \"react\";\n\nimport { I18nProvider } from \"../I18n\";\nimport { SiteContext } from \"../Site\";\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\nconst defaultValue: PageContextProps = {} as const;\n\nconst PageContext = getOrCreateGlobalContext<PageContextProps>(\n\tCONTEXT_KEYS.PAGE,\n\tdefaultValue,\n);\n\n/**\n * `<PageProvider>`\n *\n * This provider component inject some props in the context of the page. Then you can retrieve the context values using the `usePage()` hook.\n */\nfunction PageProvider(props: PageProviderProps): JSX.Element {\n\t// extract children and use ...rest for the rest of the props\n\tconst { children, ...rest } = props;\n\tconst siteContextValue = React.useContext(SiteContext);\n\tconst translations = siteContextValue?.translations;\n\n\treturn (\n\t\t<PageContext.Provider value={{ ...rest }}>\n\t\t\t<I18nProvider translations={translations}>{children}</I18nProvider>\n\t\t</PageContext.Provider>\n\t);\n}\n\ntype PageProps = Pick<\n\tPage,\n\t| \"activeSectionBase\"\n\t| \"activeSectionSlug\"\n\t| \"apiUrl\"\n\t| \"breadcrumb\"\n\t| \"canonicalURL\"\n\t| \"componentList\"\n\t| \"dimensions\"\n\t| \"footer\"\n\t| \"footerTheme\"\n\t| \"fullPath\"\n\t| \"fullUrl\"\n\t| \"header\"\n\t| \"headerTheme\"\n\t| \"id\"\n\t| \"isHome\"\n\t| \"isIndexed\"\n\t| \"languageId\"\n\t| \"metaDescription\"\n\t| \"metasAdvanced\"\n\t| \"metaTitle\"\n\t| \"modified\"\n\t| \"origin\"\n\t| \"pageLanguages\"\n\t| \"published\"\n\t| \"sectionModules\"\n\t| \"site\"\n\t| \"siteMetadata\"\n\t| \"siteSlug\"\n\t| \"socialDescription\"\n\t| \"socialImage\"\n\t| \"socialTitle\"\n\t| \"structuredData\"\n\t| \"structuredDataContent\"\n\t| \"template\"\n\t| \"theme\"\n\t| \"title\"\n\t| \"metaKeywords\"\n\t| \"follow\"\n>;\n\nexport type PageContextProps = Partial<PageProps> & {\n\t/** The locale code for the page language */\n\tlocale?: Locale;\n\t/** The locale code (ISO format) for the page language */\n\tISOLocale?: ISOLocale;\n};\n\nexport interface PageProviderProps extends PageProps {\n\tchildren: JSX.Element;\n}\n\nexport { PageContext, PageProvider };\n","import type { ISOLocale, Locale } from \"../types/core\";\n\nimport * as React from \"react\";\n\nimport { PageContext, type PageContextProps } from \"../contexts/Page\";\n\n/**\n * `usePage()`\n *\n * Hook to get some page properties.\n * @see [Documentation](https://www.notion.so/griddoio/usePage-2a781f907cf74b4f8df6a4fbe0d8f399)\n *\n * @example\n * const { title } = usePage()\n */\nfunction usePage(): PageContextProps {\n\tconst value = React.useContext(PageContext);\n\n\tif (!value) {\n\t\tconsole.warn(\"Griddo: You forgot to put <PageProvider>.\");\n\t\treturn {} as PageContextProps;\n\t}\n\n\t// If the page in other language is not published (isLive=false) then its\n\t// removed from the pageLanguage array.\n\tconst pageLanguagesWithLivePages = value.pageLanguages?.filter(\n\t\t(language) => language.isLive,\n\t);\n\t// Find the Locale\n\tconst pageLocale = value.pageLanguages?.find(\n\t\t(langItem) => langItem.languageId === value.languageId,\n\t);\n\tconst locale = pageLocale?.locale as Locale;\n\tconst ISOLocale = pageLocale?.locale.replace(\"_\", \"-\") as ISOLocale;\n\n\treturn {\n\t\t...value,\n\t\t// Computed context props\n\t\tpageLanguages: pageLanguagesWithLivePages,\n\t\tlocale,\n\t\tISOLocale,\n\t};\n}\n\nexport { usePage };\n","import * as React from \"react\";\n\nconst FormContext = React.createContext<FormContextProps | null>(null);\n\n/**\n * <FormProvider>\n */\nfunction FormProvider(props: FormProviderProps) {\n\treturn (\n\t\t<FormContext.Provider value={{ isForm: true }}>\n\t\t\t{props.children}\n\t\t</FormContext.Provider>\n\t);\n}\n\ninterface FormContextProps {\n\tisForm: true;\n}\n\ninterface FormProviderProps {\n\tchildren: JSX.Element;\n}\n\nexport { FormContext, FormProvider, type FormContextProps };\n","import * as React from \"react\";\n\nimport { I18nProvider } from \"../I18n\";\nimport { SiteContext } from \"../Site\";\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\nexport interface ModulePreviewContextProps {\n\tlanguageId?: number;\n}\n\nexport interface ModulePreviewProviderProps {\n\tchildren: JSX.Element;\n\tlanguageId?: number;\n}\n\nconst defaultValue: ModulePreviewContextProps = {} as const;\n\nconst ModulePreviewContext =\n\tgetOrCreateGlobalContext<ModulePreviewContextProps>(\n\t\tCONTEXT_KEYS.MODULE_PREVIEW,\n\t\tdefaultValue,\n\t);\n\nfunction ModulePreviewProvider(props: ModulePreviewProviderProps): JSX.Element {\n\t// extract children and use ...rest for the rest of the props\n\tconst { children, ...rest } = props;\n\tconst siteContextValue = React.useContext(SiteContext);\n\tconst translations = siteContextValue?.translations;\n\n\treturn (\n\t\t<ModulePreviewContext.Provider value={{ ...rest }}>\n\t\t\t<I18nProvider translations={translations}>{children}</I18nProvider>\n\t\t</ModulePreviewContext.Provider>\n\t);\n}\n\nexport { ModulePreviewContext, ModulePreviewProvider };\n","import * as React from \"react\";\n\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\ninterface NavigationContextProps {\n\tisNavigation: true;\n}\n\ninterface NavigationProviderProps {\n\tchildren: JSX.Element;\n}\n\nconst NavigationContext =\n\tgetOrCreateGlobalContext<NavigationContextProps | null>(\n\t\tCONTEXT_KEYS.NAVIGATION,\n\t\tnull,\n\t);\n\nfunction NavigationProvider(props: NavigationProviderProps) {\n\treturn (\n\t\t<NavigationContext.Provider value={{ isNavigation: true }}>\n\t\t\t{props.children}\n\t\t</NavigationContext.Provider>\n\t);\n}\n\nexport { NavigationContext, NavigationProvider, type NavigationContextProps };\n","import * as React from \"react\";\n\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\ninterface ProviderProps {\n\tchildren: JSX.Element | null;\n}\n\ntype ProviderValue = [\n\tRecord<string, unknown>,\n\t(state: Record<string, unknown>) => void,\n];\n\nconst SessionContext = getOrCreateGlobalContext<ProviderValue>(\n\tCONTEXT_KEYS.SESSION,\n\t[{}, () => null],\n);\n\nconst SessionProvider = (props: ProviderProps) => {\n\tconst { children } = props;\n\tconst value = useSessionProvider();\n\n\treturn (\n\t\t<SessionContext.Provider value={value}>{children}</SessionContext.Provider>\n\t);\n};\n\nconst useSessionProvider = (): ProviderValue => {\n\tconst [config, setConfig] = React.useState({});\n\tconst changeConfig = (value: { [key: string]: unknown }) =>\n\t\tsetConfig((state) => ({ ...state, ...value }));\n\treturn [config, changeConfig];\n};\n\nexport { SessionContext, SessionProvider };\n","import type { Site } from \"../types/core\";\n\nimport * as React from \"react\";\n\nimport { SiteContext } from \"../contexts\";\n\n/**\n * `useSite()`\n *\n * Hook to get some site properties.\n * @see [Documentation](https://www.notion.so/griddoio/useSite-6d8065726c03409f9f884515ecab2eca)\n *\n * @example\n * const { renderer } = useSite()\n */\nconst useSite: UseSite = () => React.useContext(SiteContext);\n\ntype UseSite = () => Site;\n\nexport { useSite };\n","import type { PickRename } from \"../types/global\";\n// @ts-expect-error autotypes instance file\nimport type __AT__ from \"@/autotypes\";\n\nimport * as React from \"react\";\n\nimport { useFetch, type UseFetchStateProps } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\n\ninterface AiAnswersResponse {\n\tstatus: \"ok\" | \"noResponse\";\n\tresponse: string;\n\terror: string;\n}\n\ninterface UseAiAnswersSetBodyAction {\n\tquery: string;\n\tlang?: number;\n\tsite?: number;\n\tformat?: \"lite\" | \"extended\";\n\tminSimilarity?: number;\n\tpriorities?: Partial<Record<__AT__.Templates, number>>;\n\ttemplates?: Array<__AT__.Templates>;\n}\n\ntype UseAiAnswersSetQuery = UseAiAnswersSetBodyAction;\n\ntype UseAiAnswersReturn = [\n\tUseAiAnswersState,\n\t(setQuery: UseAiAnswersSetQuery) => void,\n];\n\n// The same state as useFetch but renaming data to query for this hook\ntype UseAiAnswersState = PickRename<\n\tUseFetchStateProps<AiAnswersResponse>,\n\t\"data\",\n\t\"query\"\n>;\n\nexport function useAiAnswers(): UseAiAnswersReturn {\n\tconst { publicApiUrl } = useSite();\n\tconst { languageId } = usePage();\n\t// init with null to prevent call useFetch without a valid body.\n\tconst [body, setBody] = React.useState<UseAiAnswersSetBodyAction | null>(\n\t\tnull,\n\t);\n\n\tconst setQuery = (options: UseAiAnswersSetQuery) => {\n\t\tconst {\n\t\t\tquery,\n\t\t\tlang = languageId as number, // this `as` remove \"?\" fro languageId coming from the hook\n\t\t\tsite,\n\t\t\ttemplates,\n\t\t\tpriorities,\n\t\t\tminSimilarity,\n\t\t} = options;\n\t\tsetBody({\n\t\t\tquery,\n\t\t\tlang,\n\t\t\tsite,\n\t\t\ttemplates,\n\t\t\tpriorities,\n\t\t\tminSimilarity,\n\t\t});\n\t};\n\n\tconst { isError, isFirstFetch, isLoading, msg, data } =\n\t\tuseFetch<AiAnswersResponse>(`${publicApiUrl}/ai/answers`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t});\n\n\treturn [\n\t\t{\n\t\t\tisError,\n\t\t\tisFirstFetch,\n\t\t\tisLoading,\n\t\t\tmsg,\n\t\t\tquery: data,\n\t\t},\n\t\tsetQuery,\n\t];\n}\n\nexport {\n\tUseAiAnswersReturn,\n\tUseAiAnswersSetBodyAction,\n\tUseAiAnswersSetQuery,\n\tUseAiAnswersState,\n\ttype AiAnswersResponse,\n};\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import * as React from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\n\ninterface useAIReferenceFieldResponse {\n\tpage: number;\n\titemsPerPage: number;\n\ttotalItems: number;\n\titems: Array<{\n\t\ttitle: string;\n\t\turl: string;\n\t\timage: null;\n\t\tdescription: string;\n\t\ttemplate: string;\n\t\tsimilarity: number;\n\t\tstructuredData?: Record<string, unknown>;\n\t}>;\n}\n\ntype useAIReferenceFieldProps = {\n\t// Son opcionales porque en AX puedes no tenerlos rellenados o seleccionados.\n\tprompt?: string;\n\ttemplates?: Array<string>;\n\tsites?: Array<number>;\n\tlanguage?: number;\n\tlimit?: number;\n\t// Son completamente opcionales.\n\tuseStructuredData?: boolean;\n\tfields?: Array<string>;\n\tarea?: string;\n};\n\n/**\n * Hook to call the AI ReferenceField API.\n *\n * @example\n * const news = useAIReferenceField(data)\n * news.items.map(...)\n */\nexport function useAIReferenceField(\n\tdata?: useAIReferenceFieldProps,\n): useAIReferenceFieldResponse | undefined | null {\n\tconst { publicApiUrl } = useSite();\n\tconst { id: pageId } = usePage();\n\tconst [response, setResponse] =\n\t\tReact.useState<useAIReferenceFieldResponse | null>(null);\n\tconst {\n\t\tprompt,\n\t\ttemplates,\n\t\tsites,\n\t\tlanguage,\n\t\tuseStructuredData = false,\n\t\tfields,\n\t\tlimit,\n\t\tarea,\n\t} = data || {};\n\n\tconst [id] = React.useState(() => {\n\t\tif (typeof window === \"undefined\") return \"\";\n\t\ttry {\n\t\t\tlet storedId = localStorage.getItem(\"gpx_id\");\n\t\t\tif (!storedId) {\n\t\t\t\tstoredId = uuidv4();\n\t\t\t\tlocalStorage.setItem(\"gpx_id\", storedId);\n\t\t\t}\n\t\t\treturn storedId;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error accessing localStorage:\", error);\n\t\t\treturn uuidv4();\n\t\t}\n\t});\n\n\tReact.useEffect(() => {\n\t\t// no data\n\t\tif (!data) return;\n\t\t// no templates\n\t\tif (Array.isArray(data.templates) && data?.templates.length < 1) return;\n\t\t// no language\n\t\tif (!data.language) return;\n\t\t// no limit\n\t\tif (!data.limit) return;\n\n\t\ttry {\n\t\t\tconst url = `${publicApiUrl}/gpx/pages/`;\n\n\t\t\tconst body = {\n\t\t\t\tid,\n\t\t\t\tprompt,\n\t\t\t\ttemplates,\n\t\t\t\tsites,\n\t\t\t\tlanguage,\n\t\t\t\tuseStructuredData,\n\t\t\t\tfields,\n\t\t\t\tlimit,\n\t\t\t\tarea,\n\t\t\t\tpageId,\n\t\t\t};\n\n\t\t\tfetch(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify(body),\n\t\t\t})\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.ok) {\n\t\t\t\t\t\tthrow new Error(`HTTP error! status: ${res.status}`);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.json();\n\t\t\t\t})\n\t\t\t\t.then((data) => {\n\t\t\t\t\treturn setResponse(data);\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(\"Error:\", error);\n\t\t\t\t\tsetResponse(null);\n\t\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error\", error);\n\t\t\tsetResponse(null);\n\t\t}\n\t}, [\n\t\tpublicApiUrl,\n\t\tdata?.prompt,\n\t\tdata?.templates,\n\t\tdata?.sites,\n\t\tdata?.language,\n\t\tdata?.limit,\n\t]);\n\n\treturn response;\n}\n","import type { PickRename } from \"../types/global\";\n// @ts-expect-error autotypes instance file\nimport type __AT__ from \"@/autotypes\";\n\nimport * as React from \"react\";\n\nimport { useFetch, type UseFetchStateProps } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\n\n// Api Response for AISearch hook\ninterface AiSearchResponse {\n\tpage: number;\n\titemsPerPage: number;\n\ttotalItems: number;\n\titems: Array<{\n\t\ttitle: string;\n\t\turl: string;\n\t\timage: null;\n\t\tdescription: string;\n\t\ttemplate: string;\n\t\tsimilarity: number;\n\t\tstructuredData?: Record<string, unknown>;\n\t}>;\n}\n\ninterface UseAiSearchSetBodyAction {\n\tquery: string;\n\tlang?: number;\n\tsite?: number;\n\tpriorities?: Partial<Record<__AT__.Templates, number>>;\n\ttemplates?: Array<__AT__.Templates>;\n\tminSimilarity?: number;\n\tpage?: number;\n\titemsPerPage?: number;\n\tuseStructuredData?: boolean;\n\tfields?: Array<string>;\n}\n\ntype UseAiSearchSetQuery = UseAiSearchSetBodyAction;\n\ntype UseAiSearchReturn = [\n\tUseAiSearchState,\n\t(setQuery: UseAiSearchSetQuery) => void,\n];\n\n// The same state as useFetch but renaming data to query for this hook\ntype UseAiSearchState = PickRename<\n\tUseFetchStateProps<AiSearchResponse>,\n\t\"data\",\n\t\"query\"\n>;\n\nexport function useAiSearch(): UseAiSearchReturn {\n\tconst { publicApiUrl } = useSite();\n\tconst { languageId } = usePage();\n\t// init with null to prevent call useFetch without a valid body.\n\tconst [body, setBody] = React.useState<UseAiSearchSetBodyAction | null>(null);\n\n\tconst setQuery = (options: UseAiSearchSetQuery) => {\n\t\tconst {\n\t\t\tquery,\n\t\t\tlang = languageId as number, // this `as` remove \"?\" fro languageId coming from the hook\n\t\t\tsite,\n\t\t\ttemplates,\n\t\t\tpriorities,\n\t\t\tminSimilarity,\n\t\t\tpage = 1,\n\t\t\titemsPerPage = 10,\n\t\t\tuseStructuredData = false,\n\t\t\tfields,\n\t\t} = options;\n\t\tsetBody({\n\t\t\tquery,\n\t\t\tlang,\n\t\t\tsite,\n\t\t\ttemplates,\n\t\t\tpriorities,\n\t\t\tminSimilarity,\n\t\t\tpage,\n\t\t\titemsPerPage,\n\t\t\tuseStructuredData,\n\t\t\tfields,\n\t\t});\n\t};\n\n\tconst { isError, isFirstFetch, isLoading, msg, data } =\n\t\tuseFetch<AiSearchResponse>(`${publicApiUrl}/ai/search`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t});\n\n\treturn [\n\t\t{\n\t\t\tisError,\n\t\t\tisFirstFetch,\n\t\t\tisLoading,\n\t\t\tmsg,\n\t\t\tquery: data,\n\t\t},\n\t\tsetQuery,\n\t];\n}\n\nexport {\n\tUseAiSearchReturn,\n\tUseAiSearchSetBodyAction,\n\tUseAiSearchSetQuery,\n\tUseAiSearchState,\n\ttype AiSearchResponse,\n};\n","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","const IS_BROWSER = typeof window !== \"undefined\";\n\nexport type PublicApiOperators = \"or\" | \"and\" | \"OR\" | \"AND\";\n\nexport interface ConcatParams {\n\tbaseUrl: string;\n\tparams: Record<string, any>;\n}\n\nfunction isLocalStorageAvailable() {\n\ttry {\n\t\tconst test = \"___local_storage_test___\";\n\t\tlocalStorage.setItem(test, test);\n\t\tlocalStorage.removeItem(test);\n\t\treturn true;\n\t} catch (e) {\n\t\tconsole.log(e);\n\t\treturn false;\n\t}\n}\n\nfunction getToken() {\n\tif (!isLocalStorageAvailable()) {\n\t\treturn null;\n\t}\n\n\tconst localStorageData = localStorage.getItem(\"persist:app\");\n\n\t// No localstorage or browser\n\tif (!localStorageData || !IS_BROWSER) return null;\n\n\tconst appInfo = JSON.parse(localStorageData);\n\n\tlet { token } = appInfo;\n\ttoken = JSON.parse(token);\n\tconst authorization = { Authorization: `bearer ${token}` };\n\n\treturn authorization;\n}\n\nfunction getSiteID() {\n\tif (!isLocalStorageAvailable()) {\n\t\treturn null;\n\t}\n\n\tconst localStorageData = localStorage.getItem(\"persist:root\");\n\n\t// No localstorage or browser\n\tif (!IS_BROWSER || !localStorageData) return 1;\n\n\tconst appInfo = JSON.parse(localStorageData);\n\n\tlet { sites } = appInfo;\n\tsites = JSON.parse(sites);\n\tconst id = sites.currentSiteInfo?.id;\n\treturn id;\n}\n\nfunction getLang() {\n\tif (!isLocalStorageAvailable()) {\n\t\treturn false;\n\t}\n\n\tconst localStorageData = localStorage.getItem(\"langID\");\n\n\t// No localstorage or browser\n\tif (!IS_BROWSER || !localStorageData) return false;\n\n\treturn Number.parseInt(localStorageData);\n}\n\n/**\n * cleanPathSlashes\n * @param url A string\n * @example\n * @returns A string without duplicated slashes\n * cleanPathSlashes('url/with//duplicate///slashes//)\n * -> 'url/with/duplicate/slashes/'\n *\n */\nfunction cleanPathSlashes(url: string) {\n\treturn url.split(\"/\").filter(Boolean).join(\"/\");\n}\n\n/**\n * isValidParam\n * @param param A value for the query param\n * @returns true if the param is a valid query param\n */\nfunction isValidParam(p: Array<string> | string | number) {\n\treturn (\n\t\t(Array.isArray(p) && p.length > 0) ||\n\t\ttypeof p === \"number\" ||\n\t\t(typeof p === \"string\" && !!p)\n\t);\n}\n\n/**\n * concatParams\n * @param params\n * @param params.baseUrl base url of the api\n * @param params.params object with the params to be sent\n * @returns a string with the params concatenated\n */\nfunction concatParams({ baseUrl, params }: ConcatParams) {\n\tconst paramsUrl = Object.keys(params)\n\t\t.map((key) => (isValidParam(params[key]) ? `${key}/${params[key]}` : \"\"))\n\t\t.join(\"/\");\n\treturn `${baseUrl}${cleanPathSlashes(paramsUrl)}`;\n}\n\nexport { concatParams, getLang, getSiteID, getToken, isLocalStorageAvailable };\n","import type { Source } from \"../types/api-response-fields\";\nimport type { FilterItemFromFilterEndPoint } from \"../types/global\";\n\nimport { getLang, getToken } from \"../utils\";\n\ntype SimpleFilter = Array<unknown>;\ntype FilterWithSource = Array<{ id: number; source: string; label: string }>;\ntype FilterFromEndpoint = Record<string, FilterItemFromFilterEndPoint>;\ntype FilterWithCategory = Array<{\n\tid: number;\n\tcategory: string;\n\tlabel: string;\n\tcolor: string;\n}>;\n\n// Return a RequestInit from node types\nfunction getOptions(\n\tbody: Record<string, unknown>,\n\tlangID?: number,\n): RequestInit {\n\tconst lang = langID || getLang();\n\n\treturn {\n\t\tmethod: \"POST\",\n\t\tmode: \"cors\",\n\t\tcache: \"no-cache\",\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\tlang: lang?.toString(),\n\t\t\t...getToken(),\n\t\t},\n\t\tredirect: \"follow\",\n\t\treferrerPolicy: \"no-referrer\",\n\t\tbody: JSON.stringify(body),\n\t};\n}\n\n// Si es un array de números, es oldFormat\nfunction isArrayOfNumbers(arr?: Array<unknown>): arr is Array<number> {\n\tif (!arr) return false;\n\treturn arr.every((item) => typeof item === \"number\");\n}\n\nfunction isSimpleFilter(\n\tsomeFilter?: SimpleFilter | FilterWithSource | FilterFromEndpoint,\n): someFilter is Array<number> {\n\treturn Array.isArray(someFilter) && isArrayOfNumbers(someFilter);\n}\n\n// TODO: Asegurar más este guard para que analice la estructura de `someFilter`\nfunction isFilterWithSource(\n\tsomeFilter?: SimpleFilter | FilterWithSource | FilterFromEndpoint,\n): someFilter is FilterWithSource {\n\treturn Array.isArray(someFilter) && !isArrayOfNumbers(someFilter);\n}\n\n// TODO: Asegurar más este guard para que analice la estructura de `someFilter`\nfunction isFilterFromEndpoint(\n\tsomeFilter?: SimpleFilter | FilterWithSource | FilterFromEndpoint,\n): someFilter is FilterFromEndpoint {\n\treturn !isSimpleFilter(someFilter) && !isFilterWithSource(someFilter);\n}\n\n// TODO: Asegurar más este guard para que analice la estructura de `someFilter`\nfunction isFilterWithCategory(\n\tsomeFilter?: SimpleFilter | FilterFromEndpoint | FilterWithCategory,\n): someFilter is FilterWithCategory {\n\treturn Array.isArray(someFilter) && !isArrayOfNumbers(someFilter);\n}\n\nfunction parseFilterWithSource(filters?: FilterWithSource) {\n\tif (!filters) return undefined;\n\n\tconst filtersReduced = filters\n\t\t? filters.reduce(\n\t\t\t\t(acc, filterItem) => {\n\t\t\t\t\tconst { source, id } = filterItem;\n\t\t\t\t\t// init si no existe...\n\t\t\t\t\tif (!acc[source]) acc[source] = [];\n\t\t\t\t\t// add...\n\t\t\t\t\tacc[source].push(id);\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{} as Record<string, Array<number>>,\n\t\t\t)\n\t\t: {};\n\n\treturn Object.keys(filtersReduced)\n\t\t.map((key) => `${key}:${filtersReduced[key]}`)\n\t\t.join(\";\");\n}\n\nfunction parseSimpleFilter(filters?: Array<number>) {\n\treturn filters?.join(\",\");\n}\n\nfunction parseFilterWithCategory(filters?: FilterWithCategory) {\n\treturn filters?.map((filter) => filter.id).join(\",\");\n}\n\nfunction parseFilterFromEndpoint(filters?: FilterFromEndpoint) {\n\tif (!filters) return undefined;\n\n\treturn Object.keys(filters).map(\n\t\t(keyName) => filters[keyName].items?.map(({ id }) => id) || [],\n\t);\n}\n\nfunction parseFilter(\n\tfilter?: SimpleFilter | FilterWithSource | FilterFromEndpoint,\n) {\n\tif (isSimpleFilter(filter)) {\n\t\treturn parseSimpleFilter(filter);\n\t}\n\tif (isFilterWithCategory(filter)) {\n\t\treturn parseFilterWithCategory(filter);\n\t}\n\tif (isFilterFromEndpoint(filter)) {\n\t\treturn parseFilterFromEndpoint(filter);\n\t}\n\treturn undefined;\n}\n\n/**\n * Compute `related` with legacy support for the number and Array<number> value\n */\nfunction parseRelated(filter?: number | SimpleFilter | FilterFromEndpoint) {\n\tif (typeof filter === \"number\") {\n\t\treturn filter;\n\t}\n\tif (isSimpleFilter(filter)) {\n\t\treturn parseSimpleFilter(filter);\n\t}\n\tif (isFilterWithSource(filter)) {\n\t\treturn parseFilterWithSource(filter);\n\t}\n\tif (isFilterFromEndpoint(filter)) {\n\t\treturn parseFilterFromEndpoint(filter);\n\t}\n\treturn undefined;\n}\n\nfunction isOperator(operator?: string) {\n\treturn !!operator && [\"or\", \"and\"].includes(operator.toLowerCase());\n}\n\nfunction parseSources<ContentType>(sources?: Array<Source<ContentType>>) {\n\tif (!sources) return \"\";\n\n\tconst query: string[] = [];\n\tfor (const source of sources) {\n\t\tconst filters = parseFilter(source.filters);\n\n\t\tconst options: string[] = [];\n\t\tif (filters) {\n\t\t\toptions.push(`filters=${filters}`);\n\t\t}\n\n\t\tif (source.filterOperator) {\n\t\t\toptions.push(`filterOperator=${source.filterOperator}`);\n\t\t}\n\n\t\tif (source.globalOperator) {\n\t\t\toptions.push(`globalOperator=${source.globalOperator}`);\n\t\t}\n\n\t\toptions.length\n\t\t\t? query.push(`${source.structuredData}[${options.join(\";\")}]`)\n\t\t\t: query.push(`${source.structuredData}`);\n\t}\n\n\treturn query.join(\",\");\n}\n\n/**\n * Compute `relations` with legacy support for the boolean value\n */\nfunction parseRelations(relations?: boolean | \"off\" | \"simple\" | \"full\") {\n\t// Boolean value: legacy\n\tif (typeof relations === \"boolean\") {\n\t\treturn relations ? \"simple\" : \"off\";\n\t}\n\n\t// New values\n\tif (relations === \"off\" || relations === \"simple\" || relations === \"full\") {\n\t\treturn relations;\n\t}\n\n\t// off...\n\treturn \"off\";\n}\n\nexport {\n\tgetOptions,\n\tisArrayOfNumbers,\n\tisFilterFromEndpoint,\n\tisFilterWithCategory,\n\tisFilterWithSource,\n\tisOperator,\n\tisSimpleFilter,\n\tparseFilter,\n\tparseFilterFromEndpoint,\n\tparseFilterWithCategory,\n\tparseFilterWithSource,\n\tparseRelated,\n\tparseRelations,\n\tparseSimpleFilter,\n\tparseSources,\n};\n","import type { Fields } from \"..\";\n\nimport * as React from \"react\";\n\nimport { usePage } from \"./usePage\";\nimport { getOptions } from \"./utils\";\nimport { getLang, getSiteID } from \"../utils\";\n\n/**\n * Returns an array of the ContentType data from the ReferenceField. This hooks only works in the context of the Griddo editor.\n * @see [Documentación](https://www.notion.so/griddoio/useReferenceFieldData-9eca3bc618464c5c9bee67f3a9607138)\n *\n * @param data The property of the ReferenceField.\n *\n * @example\n * const dataItems = useReferenceFieldData<NewsContentType>(data)\n */\nfunction useReferenceFieldData<ContentType = unknown>(\n\t/** The ReferenceField from the module schema */\n\tdata?: Fields.Reference<ContentType>\n): Fields.QueriedData<ContentType> | undefined | null {\n\tconst [response, setResponse] = React.useState(null);\n\tconst {\n\t\torder,\n\t\tquantity,\n\t\tsources,\n\t\tmode,\n\t\tfixed,\n\t\tallLanguages,\n\t\tpreferenceLanguage,\n\t\tfullRelations = false,\n\t\tsite,\n\t\tlang,\n\t} = data || {};\n\n\tconst { apiUrl } = usePage();\n\n\tReact.useEffect(() => {\n\t\tconst langID = getLang();\n\t\tconst isAX = !!langID;\n\t\tconst siteID = site || getSiteID() || \"global\";\n\t\tconst url = `${apiUrl}/site/${siteID}/distributor`;\n\n\t\tconst body =\n\t\t\tmode === \"auto\"\n\t\t\t\t? {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\torder,\n\t\t\t\t\t\tquantity,\n\t\t\t\t\t\tsources,\n\t\t\t\t\t\tfullRelations,\n\t\t\t\t\t\tallLanguages,\n\t\t\t\t\t\tpreferenceLanguage,\n\t\t\t\t }\n\t\t\t\t: { mode, fixed, fullRelations };\n\t\tconst fetchOptions = getOptions(body, lang);\n\n\t\tisAX &&\n\t\t\tfetch(url, fetchOptions)\n\t\t\t\t.then((res) => res.json())\n\t\t\t\t.then((data) => setResponse(data))\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(\"Error:\", error);\n\t\t\t\t});\n\t}, [\n\t\tallLanguages,\n\t\tapiUrl,\n\t\tfixed,\n\t\tfullRelations,\n\t\tlang,\n\t\tmode,\n\t\torder,\n\t\tpreferenceLanguage,\n\t\tquantity,\n\t\tsite,\n\t\tsources,\n\t\tlang,\n\t]);\n\n\treturn response;\n}\n\nexport { useReferenceFieldData };\n","import type { Fields } from \"..\";\n\nimport { useReferenceFieldData } from \"./useReferenceFieldData\";\n\n/**\n * `useContentType<ContentType>()`\n *\n * Returns an array of the ContentType data.\n * The hook abstracts the dual behaviour of the ContentTypes inside Griddo and it will always returns the same value and type regardless the context: editor or build phase.\n * Also the hook accepts a generic type to idicates the return type of the hook.\n *\n * @param options.data The property of the ReferenceField.\n * @param options.queriedData The property returned by the build phase with the data queried.\n * @example\n * useContentType<NewsContentTypeProps>({ data, queriedItems })\n */\nfunction useContentType<ContentType>({\n\tdata,\n\tqueriedData,\n}: {\n\t/** The ReferenceField from the module schema */\n\tdata?: Fields.Reference<ContentType>;\n\t/** The queriedData prop from the building phase */\n\tqueriedData?: Fields.QueriedData<ContentType>;\n}) {\n\tconst dataItems =\n\t\t(data && useReferenceFieldData<ContentType>(data)) || queriedData;\n\n\treturn dataItems;\n}\n\nexport { useContentType };\n","import type { Fields } from \"..\";\n\nimport * as React from \"react\";\n\nimport { usePage } from \"./usePage\";\nimport { getOptions } from \"./utils\";\nimport { getLang, getSiteID } from \"../utils\";\n\n/**\n * `useContentTypeNavigation<ContentType>()`\n *\n * Returns an object with previous and next ContentType items. This hooks only works in the context of the Griddo editor.\n *\n * @param data The property of the ReferenceField.\n *\n * @example\n * const { previous, next } = useContentTypeNavigation<NewsContentType>(data)\n */\nfunction useContentTypeNavigation<ContentType = unknown>(\n\tdata?: Fields.ReferenceNavigation,\n): Fields.QueriedNavigationDataItem<ContentType> {\n\tconst [response, setResponse] = React.useState<\n\t\tFields.QueriedNavigationDataItem<ContentType>\n\t>({ previous: [], next: [], error: undefined });\n\n\tconst { apiUrl, canonicalURL, structuredDataContent } = usePage();\n\n\tconst {\n\t\torder = \"recent-asc\",\n\t\tquantity = 1,\n\t\tfullRelations = false,\n\t\treferenceId = structuredDataContent?.id,\n\t} = data || {};\n\n\tReact.useEffect(() => {\n\t\tconst lang = getLang();\n\t\tconst isAX = !!lang;\n\t\tconst siteID = getSiteID() || canonicalURL || \"global\";\n\t\tconst url = `${apiUrl}/site/${siteID}/distributor`;\n\t\tconst body = {\n\t\t\tmode: \"navigation\",\n\t\t\torder,\n\t\t\tquantity,\n\t\t\tfullRelations,\n\t\t\treferenceId,\n\t\t};\n\n\t\tconst fetchOptions = getOptions(body);\n\n\t\tisAX &&\n\t\t\tfetch(url, fetchOptions)\n\t\t\t\t.then((res) => res.json())\n\t\t\t\t.then((data) => setResponse(data))\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(\"Error:\", error);\n\t\t\t\t});\n\t}, [apiUrl, canonicalURL, fullRelations, order, quantity, referenceId]);\n\n\treturn response;\n}\n\nexport { useContentTypeNavigation };\n","import type {\n\tFiltersDataApiQueryResponseProps,\n\tPickRename,\n\tSetQueryProps,\n} from \"../types/global\";\n\nimport * as React from \"react\";\n\nimport { useFetch, type UseFetchStateProps } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\nimport { parseRelated } from \"./utils\";\nimport { concatParams } from \"../utils\";\n\n/**\n * `useDataFilters()`\n *\n * Returns an object with filter information to use with ContentTypes.\n *\n * @example\n * const [{ query }, setQuery] = useDataFilters()\n * setQuery(data) // `data` from a `ReferenceField`\n */\nfunction useDataFilters<ContentType>(): UseDataFiltersReturn<ContentType> {\n\t// Pull from providers\n\tconst { publicApiUrl, siteId, renderer } = useSite();\n\tconst { languageId } = usePage();\n\n\t// State for the data and the query url\n\tconst [url, setUrl] = React.useState<UseDataFilterSetUrlAction>();\n\n\t// Check the context: AX or CX\n\tconst isAX = renderer === \"editor\";\n\n\t// Exposed function to modify the internal state\n\tfunction setQuery<ContentType = unknown>({\n\t\tapiUrl = `${publicApiUrl}`,\n\t\tcached,\n\t\tdata: refField,\n\t\tgroupingCategories,\n\t\tlang = languageId,\n\t\tsite = siteId,\n\t}: UseDataFiltersSetQueryProps<ContentType>) {\n\t\tif (!refField) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst endPointParam = \"/filters/\";\n\t\tconst customCached = isAX ? new Date().valueOf() : cached;\n\t\tconst structuredData =\n\t\t\trefField.sources?.map(({ structuredData }) => structuredData) ||\n\t\t\trefField.fixed;\n\t\tconst structuredDataParam = `${structuredData}/`;\n\n\t\tconst queryUrl = concatParams({\n\t\t\tbaseUrl: `${apiUrl}${endPointParam}${structuredDataParam}`,\n\t\t\tparams: {\n\t\t\t\t// `site` and `lang` are from hook props and are deprecated\n\t\t\t\tsite: refField.site || site || siteId,\n\t\t\t\tlang: refField.lang || lang || languageId,\n\t\t\t\trelated: parseRelated(refField.related),\n\t\t\t\tallLanguages: refField.allLanguages ? \"on\" : \"off\",\n\t\t\t\tfilterOperator: refField.sources?.map(\n\t\t\t\t\t({ filterOperator }) => filterOperator,\n\t\t\t\t),\n\t\t\t\tglobalOperator: refField.sources?.map(\n\t\t\t\t\t({ globalOperator }) => globalOperator,\n\t\t\t\t),\n\t\t\t\torder: refField.order,\n\t\t\t\tgroupingCategories: groupingCategories ? \"on\" : \"off\",\n\t\t\t\tcached: customCached,\n\t\t\t},\n\t\t});\n\n\t\tsetUrl({ queryUrl });\n\t}\n\n\tconst { isError, isLoading, msg, data, isFirstFetch } = useFetch<\n\t\tFiltersDataApiQueryResponseProps<ContentType>\n\t>(url?.queryUrl);\n\n\treturn [{ query: data, isLoading, isError, msg, isFirstFetch }, setQuery];\n}\n\n// Types\nexport interface UseDataFilterSetUrlAction {\n\tqueryUrl: string;\n}\n\nexport type UseDataFiltersSetQueryProps<ContentType> = Pick<\n\tSetQueryProps<ContentType>,\n\t\"data\" | \"apiUrl\" | \"lang\" | \"site\" | \"cached\" | \"groupingCategories\"\n>;\n\n// The same state as useFetch but renaming data to query for this hook\nexport type UseDataFiltersState<ContentType> = PickRename<\n\tUseFetchStateProps<FiltersDataApiQueryResponseProps<ContentType>>,\n\t\"data\",\n\t\"query\"\n>;\n\nexport type UseDataFiltersReturn<ContentType> = [\n\tUseDataFiltersState<ContentType>,\n\t(setQuery: UseDataFiltersSetQueryProps<ContentType>) => void,\n];\n\nexport { useDataFilters };\n","import type { ImageConfig } from \"../hooks/useGriddoImage\";\nimport type { CloudinaryResponsiveImageProps } from \"../hooks/useImage\";\nimport type { Core } from \"../index\";\nimport type { ImageFormats, ResponsiveImageProps } from \"../types/core\";\n\nfunction sanitizeUrl(url: string) {\n\tconst [protocol, slug] = url.split(/(^https?:\\/\\/|^\\/\\/)/).filter(Boolean);\n\tconst sanitizeSlug = slug?.replace(/\\/\\/+/g, \"/\").replace(/\\/$/, \"\");\n\treturn `${protocol}${sanitizeSlug}`;\n}\n\nfunction rearrangeResponsiveArray(arr: Array<ResponsiveImageProps>) {\n\tconst nullBP = arr.filter((entry) => entry.breakpoint === null);\n\tconst mediaBPs = arr.filter((entry) => entry.breakpoint !== null);\n\treturn [...mediaBPs, ...nullBP];\n}\n\nfunction cloudinaryRearrangeResponsiveArray(\n\tarr?: Array<CloudinaryResponsiveImageProps>,\n) {\n\tif (!arr) return [];\n\tconst nullBP = arr.filter((entry) => entry.breakpoint === null);\n\tconst mediaBPs = arr.filter((entry) => entry.breakpoint !== null);\n\treturn [...mediaBPs, ...nullBP];\n}\n\nfunction fillIntArray(n: number, from = 0) {\n\treturn Array(n)\n\t\t.fill(0)\n\t\t.map((_, idx) => idx + from);\n}\n\nfunction removeUnit(unit?: string) {\n\treturn unit\n\t\t?.toString()\n\t\t.split(/cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%/)[0];\n}\n\n/**\n * _filterFalsePropValues\n * Devuelve un objeto con las propiedades truthy del objeto de entrada\n * @param {object} object Un objeto\n * @returns {object} un nuevo objeto solo con propiedades truthy\n * @example\n * _filterFalsePropValues({a: 1, b: undfined})\n * -> {a: 1}\n */\nfunction _filterFalsePropValues(object: any) {\n\treturn Object.fromEntries(Object.entries(object).filter((tuple) => tuple[1]));\n}\n\n/**\n * mergeObject\n * Sobreescribe el objeto2 al objeto1 siempre que las propiedades sean truthy\n * @param {object} object1 Un objeto\n * @param {object} object2 Un objeto\n * @return {object} un nuevo objeto resultado de sobreescribir object2 a object1\n * @example\n * mergeObject({a: 1, b: 0}, {a: 3, b: null})\n * -> {a: 3, b:0}\n */\nfunction mergeObjects(object1: any, object2: any) {\n\treturn {\n\t\t..._filterFalsePropValues(object1),\n\t\t..._filterFalsePropValues(object2),\n\t};\n}\n\nfunction getGriddoDamURIWithParams(props: GetGriddoDamURIWithParamsProps) {\n\tconst { damId, imageConfig, ...rest } = props;\n\n\t// We want to type imageConfig but to mergeObject doesn't mind it only wants a\n\t// unkown object\n\tconst params = mergeObjects(\n\t\timageConfig as unknown as UnknownObject,\n\t\trest as UnknownObject,\n\t) as Params;\n\tconst crop = params.crop ? `c/${params.crop}` : \"\";\n\tconst quality = params.quality ? `q/${params.quality}` : \"\";\n\tconst format = params.format ? `f/${params.format}` : \"\";\n\tconst width = params.width ? `w/${removeUnit(params.width as string)}` : \"\";\n\t//prettier-ignore\n\tconst height = params.height ? `h/${removeUnit(params.height as string)}` : \"\";\n\tconst position = params.position ? `p/${params.position}` : \"\";\n\tconst transforms = params.transforms?.length ? `t/${params.transforms}` : \"\";\n\n\t// Build the URI with the query params\n\tconst queryParamsURL = `${crop}/${quality}/${width}/${height}/${position}/${transforms}/${format}`;\n\tconst fullUrl = sanitizeUrl(\n\t\t`${imageConfig.domain}/${queryParamsURL}/${damId}`,\n\t);\n\n\treturn fullUrl;\n}\n\n/**\n * cleanCloudinaryURI\n * Limpia la URI de cloudinary con parámetros sin valor\n * @param {string} URI la parte de la url de cloudinary con los parámetros del\n * query para la imagen.\n * @returns {string} la URI sin valores \"nulos\"\n * @example\n * Elimina parámetros de la URI sin valores correctos\n * cloeanCloudinaryURI(\"w_320,q_undefined,f_null,,,g_,h_120\")\n * -> \"w_320,h_120\"\n */\nfunction cleanCloudinaryURI(URI: string) {\n\treturn URI.split(/._null|._undefined|,{1,}|._,|._$|undefined|null/)\n\t\t.filter(Boolean)\n\t\t.join(\",\");\n}\n\nfunction getDomainFromDamUrl(damUrl: string) {\n\tif (damUrl && typeof damUrl === \"string\") {\n\t\t// eslint-disable-next-line no-useless-escape\n\t\treturn damUrl.split(/(^[http:|https:|\\/\\/]*[\\S][^\\/]*)/)[1];\n\t}\n\n\treturn damUrl;\n}\n\nfunction getDamIdFromDamUrl(damUrl: string) {\n\tif (damUrl && typeof damUrl === \"string\") {\n\t\tconst rest = damUrl.split(\"/\").filter(Boolean).slice(-1)[0];\n\t\treturn rest;\n\t}\n\n\treturn damUrl;\n}\n\nconst rndHash = () =>\n\tMath.random()\n\t\t.toString(36)\n\t\t.replace(/[^a-z]+/g, \"\")\n\t\t.substring(0, 8);\n\nexport type UnknownObject = Record<string, unknown>;\n\ninterface GetGriddoDamURIWithParamsProps {\n\tdamId: string;\n\timageConfig: ImageConfig;\n\t[key: string]: unknown;\n}\n\ninterface Params {\n\tcrop?: string;\n\tquality?: number;\n\tformat?: ImageFormats;\n\twidth?: string;\n\theight?: string;\n\tposition?: Core.ImagePosition;\n\ttransforms?: Array<Core.ImageTransform>;\n}\n\nexport {\n\tcleanCloudinaryURI,\n\tcloudinaryRearrangeResponsiveArray,\n\tfillIntArray,\n\tgetDamIdFromDamUrl,\n\tgetDomainFromDamUrl,\n\tgetGriddoDamURIWithParams,\n\tmergeObjects,\n\trearrangeResponsiveArray,\n\tremoveUnit,\n\trndHash,\n};\n","import type {\n\tImageCropType,\n\tImageDecoding,\n\tImageFormats,\n\tImageLoading,\n\tImagePosition,\n\tImageTransform,\n\tResponsiveImageProps,\n} from \"../types/core\";\n\nimport * as React from \"react\";\n\nimport { SiteContext } from \"../contexts\";\nimport {\n\tremoveUnit,\n\trearrangeResponsiveArray,\n\tgetGriddoDamURIWithParams,\n\tgetDomainFromDamUrl,\n\tgetDamIdFromDamUrl,\n} from \"../utils/images\";\n\nconst MIME_TYPES = {\n\tjpg: \"image/jpeg\",\n\tjpeg: \"image/jpeg\",\n\tgif: \"image/gif\",\n\tsvg: \"image/svg+xml\",\n\tpng: \"image/png\",\n\tavif: \"image/avif\",\n\twebp: \"image/webp\",\n};\n\nconst internalDefaults: ImageConfig = {\n\tquality: 75,\n\tcrop: \"cover\",\n\tloading: \"lazy\",\n\tdecoding: \"auto\",\n\tblurSize: \"8px\",\n\tblurCSSTransition: \"filter 0s ease-in-out\",\n\tformats: [\"webp\"],\n};\n\n/**\n * `useGriddoImage()`\n */\nfunction useGriddoImage({\n\turl,\n\t...props\n}: UseGriddoImageProps): UseGriddoImageReturn {\n\tif (!url) {\n\t\treturn {};\n\t}\n\n\tconst siteContext = React.useContext(SiteContext);\n\tconst griddoDamDefaults = siteContext?.griddoDamDefaults || {};\n\n\tconst domain = getDomainFromDamUrl(url);\n\tconst damId = getDamIdFromDamUrl(url);\n\n\t// This object contains every aspect of the image configuration\n\tconst imageConfig: ImageConfig = {\n\t\t// defaults props from griddo-core\n\t\t...internalDefaults,\n\t\t// defaults props from instance through site context\n\t\t...griddoDamDefaults,\n\t\t// props from component\n\t\t...props,\n\t\tformat: \"jpeg\",\n\t\tdomain,\n\t};\n\n\t// Build a one element responsive prop if is not provided\n\tif (imageConfig.responsive === undefined) {\n\t\timageConfig.responsive = [\n\t\t\t{\n\t\t\t\twidth: imageConfig.width,\n\t\t\t\theight: imageConfig.height,\n\t\t\t\tquality: imageConfig.quality,\n\t\t\t\tcrop: imageConfig.crop,\n\t\t\t\tposition: imageConfig.position,\n\t\t\t\ttransforms: imageConfig.transforms,\n\t\t\t},\n\t\t];\n\t}\n\n\t// Create the content of the srcSet <img> attribute\n\tconst srcSet = imageConfig.responsive.map(\n\t\t({ width, height, quality, crop, position, transforms }) => {\n\t\t\tconst griddoDamURL = getGriddoDamURIWithParams({\n\t\t\t\t// damid\n\t\t\t\tdamId: damId,\n\t\t\t\t// image config\n\t\t\t\timageConfig: imageConfig,\n\t\t\t\t// extra props comming from <GriddoImage> props\n\t\t\t\tquality,\n\t\t\t\tcrop,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tposition,\n\t\t\t\ttransforms,\n\t\t\t});\n\n\t\t\t// empty string for the \"w\" value if not width\n\t\t\tconst withWProp: string = width ? `${removeUnit(width)}w` : \"\";\n\t\t\treturn `${griddoDamURL} ${withWProp}`.trim();\n\t\t},\n\t);\n\n\t// Create the content of the sizes <img> attribute.\n\t// rearrangeResponsiveArray put the element of the array with the\n\t// breakpoint === null at the last position to use properly in the mediaquery\n\t// interpolation.\n\tconst sizes = rearrangeResponsiveArray(imageConfig.responsive.reverse())\n\t\t.map((query, idx) => {\n\t\t\tif (imageConfig.responsive && idx < imageConfig.responsive.length - 1) {\n\t\t\t\treturn `(min-width: ${query.breakpoint}) ${query.width}`;\n\t\t\t}\n\t\t\treturn `${query.width}`;\n\t\t})\n\t\t.join(\", \");\n\n\t// Create a kind of srcSet for background images (removing the final size xxxw)\n\tconst srcSetURL = srcSet.map((entry) => entry?.split(\" \")[0]);\n\n\t// Get the src from the first (usually the small) breakpoint\n\tconst smallForSrc = imageConfig.responsive[0];\n\n\t// Old browsers src fallback (in case it doesn't support srcSet)\n\tconst src = `${getGriddoDamURIWithParams({\n\t\tdamId,\n\t\timageConfig,\n\t\t...smallForSrc,\n\t})}`;\n\n\t// MIMEType\n\tconst type = imageConfig?.format\n\t\t? MIME_TYPES[imageConfig?.format]\n\t\t: MIME_TYPES.jpeg;\n\n\treturn {\n\t\ttype,\n\t\tsrcSet,\n\t\tsrcSetURL,\n\t\tsrc,\n\t\tsizes,\n\t\twebpFallback: generateImageChunk({ srcSet, srcSetURL, format: \"jpeg\" }),\n\t\tjpeg: generateImageChunk({ srcSet, srcSetURL, format: \"jpeg\" }),\n\t\twebp: generateImageChunk({ srcSet, srcSetURL, format: \"webp\" }),\n\t\tavif: generateImageChunk({ srcSet, srcSetURL, format: \"avif\" }),\n\t\tpng: generateImageChunk({ srcSet, srcSetURL, format: \"png\" }),\n\t\tgif: generateImageChunk({ srcSet, srcSetURL, format: \"gif\" }),\n\t\tsvg: generateImageChunk({ srcSet, srcSetURL, format: \"svg\" }),\n\t};\n}\n\nfunction generateImageChunk({\n\tsrcSet,\n\tsrcSetURL,\n\tformat,\n}: GenerateImageChunkProps): ImageChunk {\n\treturn {\n\t\ttype: MIME_TYPES[format] as MIMETypes,\n\t\tsrcSet: srcSet?.map((url) => url?.replace(/f\\/\\w+/, `f/${format}`)),\n\t\tsrcSetURL: srcSetURL?.map((url) => url?.replace(/f\\/\\w+/, `f/${format}`)),\n\t};\n}\n\nexport interface GenerateImageChunkProps {\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tformat: ImageFormats;\n}\n\nexport interface UseGriddoImageProps extends Omit<ImageConfig, \"formats\"> {\n\turl?: string;\n}\n\nexport interface ImageConfig {\n\tblurCSSTransition?: string;\n\tblurSize?: string;\n\tcrop?: ImageCropType;\n\tdecoding?: ImageDecoding;\n\tdomain?: string;\n\tformat?: ImageFormats;\n\tformats?: Array<ImageFormats>;\n\theight?: string;\n\tloading?: ImageLoading;\n\tposition?: ImagePosition;\n\tquality?: number;\n\tresponsive?: Array<ResponsiveImageProps>;\n\ttransforms?: ImageTransform;\n\twidth?: string;\n\tsizes?: string;\n}\n\nexport type MIMETypes =\n\t| \"image/avif\"\n\t| \"image/gif\"\n\t| \"image/jpeg\"\n\t| \"image/png\"\n\t| \"image/svg+xml\"\n\t| \"image/webp\";\n\nexport interface ImageChunk {\n\ttype: MIMETypes;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n}\n\nexport interface UseGriddoImageReturn {\n\ttype?: string;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tsrc?: string;\n\tsizes?: string;\n\twebpFallback?: ImageChunk;\n\tjpg?: ImageChunk;\n\tjpeg?: ImageChunk;\n\twebp?: ImageChunk;\n\tavif?: ImageChunk;\n\tpng?: ImageChunk;\n\tgif?: ImageChunk;\n\tsvg?: ImageChunk;\n}\n\nexport { useGriddoImage };\n","import type {\n\tImageCropType,\n\tImageDecoding,\n\tImageFormats,\n\tImageLoading,\n\tImagePosition,\n\tImageTransform,\n} from \"../types/core\";\n\nimport { useSite } from \"./useSite\";\nimport {\n\tgetDamIdFromDamUrl,\n\tgetDomainFromDamUrl,\n\tgetGriddoDamURIWithParams,\n\tremoveUnit,\n} from \"../utils/images\";\n\nconst MIME_TYPES = {\n\tjpg: \"image/jpeg\",\n\tjpeg: \"image/jpeg\",\n\tgif: \"image/gif\",\n\tsvg: \"image/svg+xml\",\n\tpng: \"image/png\",\n\tavif: \"image/avif\",\n\twebp: \"image/webp\",\n};\n\nconst internalDefaults: ImageConfigExperimental = {\n\tquality: 75,\n\tcrop: \"cover\",\n\tloading: \"lazy\",\n\tdecoding: \"auto\",\n\tformats: [\"webp\"],\n};\n\n/**\n * `useGriddoImage()`\n */\nfunction useGriddoImageExp({\n\turl,\n\t...props\n}: UseGriddoImagePropsExperimental): UseGriddoImageReturnExperimental {\n\tif (!url) {\n\t\treturn {};\n\t}\n\n\tconst { griddoDamDefaults } = useSite();\n\n\tconst domain = getDomainFromDamUrl(url);\n\tconst damId = getDamIdFromDamUrl(url);\n\n\t// This object contains every aspect of the image configuration\n\tconst imageConfig: ImageConfigExperimental = {\n\t\t// defaults props from griddo-core\n\t\t...internalDefaults,\n\t\t// defaults props from instance through site context\n\t\t...griddoDamDefaults,\n\t\t// props from component\n\t\t...props,\n\t\t// domain\n\t\tdomain,\n\t\t// HARDCORDED values\n\t\tformat: \"jpeg\",\n\t};\n\n\tconst RATIO =\n\t\tremoveCSSUnits(props?.width || \"1x\") /\n\t\tremoveCSSUnits(props?.height || \"1px\");\n\n\t// Create the content of the srcSet <img> attribute using the widths prop.\n\t// if widhts is undefined or empty array, then use the width prop and return\n\t// a simple url without the \"w\".\n\tconst srcSet =\n\t\t(Array.isArray(imageConfig.widths) && imageConfig.widths.length) ||\n\t\timageConfig.widths !== undefined\n\t\t\t? imageConfig.widths?.map((width) => {\n\t\t\t\t\tconst griddoDamURL = getGriddoDamURIWithParams({\n\t\t\t\t\t\tdamId: damId,\n\t\t\t\t\t\timageConfig: imageConfig,\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: imageConfig.height\n\t\t\t\t\t\t\t? `${Math.round(removeCSSUnits(width) / RATIO)}px`\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t});\n\n\t\t\t\t\t// empty string for the \"w\" value if not width\n\t\t\t\t\tconst withWProp = width ? `${removeUnit(width)}w` : \"\";\n\t\t\t\t\treturn imageConfig.width ? `${griddoDamURL} ${withWProp}`.trim() : \"\";\n\t\t\t\t})\n\t\t\t: [\n\t\t\t\t\tgetGriddoDamURIWithParams({\n\t\t\t\t\t\tdamId: damId,\n\t\t\t\t\t\timageConfig: imageConfig,\n\t\t\t\t\t\twidth: imageConfig.width,\n\t\t\t\t\t\theight: imageConfig.height\n\t\t\t\t\t\t\t? `${Math.round(\n\t\t\t\t\t\t\t\t\tremoveCSSUnits(imageConfig.width || \"1px\") / RATIO,\n\t\t\t\t\t\t\t\t)}px`\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}),\n\t\t\t\t];\n\n\t// Create a kind of srcSet for background images (removing the final size xxxw)\n\tconst srcSetURL = srcSet?.map((entry) => entry?.split(\" \")[0]);\n\n\t// Old browsers src fallback (in case they doesn't support srcSet)\n\tconst src = `${getGriddoDamURIWithParams({\n\t\tdamId,\n\t\timageConfig,\n\t})}`;\n\n\t// MIMEType\n\tconst type = imageConfig?.format\n\t\t? MIME_TYPES[imageConfig?.format]\n\t\t: MIME_TYPES.jpeg;\n\n\treturn {\n\t\ttype,\n\t\tsrcSet,\n\t\tsrcSetURL,\n\t\tsrc,\n\t\twebpFallback: generateImageChunk({ srcSet, srcSetURL, format: \"jpeg\" }),\n\t\tjpeg: generateImageChunk({ srcSet, srcSetURL, format: \"jpeg\" }),\n\t\twebp: generateImageChunk({ srcSet, srcSetURL, format: \"webp\" }),\n\t\tavif: generateImageChunk({ srcSet, srcSetURL, format: \"avif\" }),\n\t\tpng: generateImageChunk({ srcSet, srcSetURL, format: \"png\" }),\n\t\tgif: generateImageChunk({ srcSet, srcSetURL, format: \"gif\" }),\n\t\tsvg: generateImageChunk({ srcSet, srcSetURL, format: \"svg\" }),\n\t};\n}\n\nfunction generateImageChunk({\n\tsrcSet,\n\tsrcSetURL,\n\tformat,\n}: GenerateImageChunkPropsExperimental): ImageChunkExperimental {\n\treturn {\n\t\ttype: MIME_TYPES[format] as MIMETypesExperimental,\n\t\tsrcSet: srcSet?.map((url) => url?.replace(/f\\/\\w+/, `f/${format}`)),\n\t\tsrcSetURL: srcSetURL?.map((url) => url?.replace(/f\\/\\w+/, `f/${format}`)),\n\t};\n}\n\nexport interface GenerateImageChunkPropsExperimental {\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tformat: ImageFormats;\n}\n\nexport interface UseGriddoImagePropsExperimental\n\textends Omit<ImageConfigExperimental, \"formats\"> {\n\turl?: string;\n}\n\nexport interface ImageConfigExperimental {\n\tblurCSSTransition?: string;\n\tblurSize?: string;\n\tcrop?: ImageCropType;\n\tdecoding?: ImageDecoding;\n\tdomain?: string;\n\tformat?: ImageFormats;\n\tformats?: Array<Extract<ImageFormats, \"webp\" | \"avif\">>;\n\theight?: string;\n\tloading?: ImageLoading;\n\tposition?: ImagePosition;\n\tquality?: number;\n\ttransforms?: ImageTransform;\n\twidth?: string;\n\tsizes?: string;\n\twidths?: Array<string>;\n\tratio?: number;\n}\n\nexport type MIMETypesExperimental =\n\t| \"image/avif\"\n\t| \"image/gif\"\n\t| \"image/jpeg\"\n\t| \"image/png\"\n\t| \"image/svg+xml\"\n\t| \"image/webp\";\n\nexport interface ImageChunkExperimental {\n\ttype: MIMETypesExperimental;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n}\n\nexport interface UseGriddoImageReturnExperimental {\n\ttype?: string;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tsrc?: string;\n\tsizes?: string;\n\twebpFallback?: ImageChunkExperimental;\n\tjpg?: ImageChunkExperimental;\n\tjpeg?: ImageChunkExperimental;\n\twebp?: ImageChunkExperimental;\n\tavif?: ImageChunkExperimental;\n\tpng?: ImageChunkExperimental;\n\tgif?: ImageChunkExperimental;\n\tsvg?: ImageChunkExperimental;\n}\n\nfunction removeCSSUnits(value: string) {\n\tconst match = value.match(/^-?\\d*\\.?\\d+/);\n\tif (match) {\n\t\treturn Number.parseFloat(match[0]);\n\t}\n\treturn 0;\n}\n\nexport { removeCSSUnits, useGriddoImageExp };\n","import type { Locale, Site } from \"../types/core\";\n\nimport * as React from \"react\";\n\nimport { useModulePreview } from \"./useModulePreview\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\nimport { I18nContext } from \"../contexts/I18n\";\n\nexport interface UseI18nProps {\n\t/** Locale code from where get the translation. This locale override the current page language */\n\tlocale?: Locale;\n}\n\n/**\n * returns functions to get the translations from the context taking into\n * account the language (locale) of the current page.\n * @see [Documentación](https://www.notion.so/griddoio/useI18n-021b08689dcf4abd8f666da7b7646611)\n *\n * @example\n * const { getTraslation, getNestedTranslation } = useI18n()\n * const foo = getTranslation(\"submitButtonLabel\")\n * const bar = getNestedTranslation(\"modules.backLabel\")\n */\nfunction useI18n(props?: UseI18nProps) {\n\tconst locale = props?.locale;\n\n\tconst i18nContext = React.useContext(I18nContext);\n\n\tconst { siteLangs } = useSite();\n\t// Get the languageId from the Page context\n\tconst { languageId: pageLanguageId } = usePage();\n\t// Get the languageId from the ModulePreview context\n\tconst { languageId: moduleLanguageId } = useModulePreview();\n\n\t// Language id from the page or module preview context\n\tconst languageId = pageLanguageId || moduleLanguageId;\n\n\tconst translations = i18nContext?.translations;\n\n\tif (!translations) {\n\t\tconsole.warn(\"Griddo: <SiteProvider> needs to have the prop translations\");\n\t}\n\n\tif (siteLangs === undefined) {\n\t\tconsole.warn(\n\t\t\t\"Griddo: <SiteProvider> needs to have the prop siteLangs set with the site languages\",\n\t\t);\n\t}\n\n\tif (!languageId) {\n\t\tconsole.warn(\n\t\t\t\"Griddo: <PageProvider> needs to have the prop languageId set with the page language id\",\n\t\t);\n\t}\n\n\tif (!checkLangId(siteLangs, languageId)) {\n\t\tconsole.warn(`Griddo: languageId ${languageId} doesn't exist in this site`);\n\t}\n\n\tif (locale !== undefined && !checkLocale(siteLangs, locale)) {\n\t\tconsole.warn(`Griddo: locale ${locale} doesn't exist in this site`);\n\t}\n\n\tconst currentLocale = locale || getLocaleFromSiteLangs(siteLangs, languageId);\n\n\tconst localeTranslations =\n\t\ttranslations && currentLocale ? translations[currentLocale] : undefined;\n\n\t/**\n\t * Return a static translation based on the translation object and current page language using a string key as argument.\n\t * @example: getTranslation(\"greetings\")\n\t * @deprecated use getNestedTranslation\n\t */\n\tconst getTranslation = <T = string>(\n\t\t/** Key from the translation object that will be obtained */\n\t\tkey: string,\n\t\t/** Fallback string in case `key` returns undefined */\n\t\tdefaultString = \"\",\n\t): T => {\n\t\tif (localeTranslations?.[key]) {\n\t\t\treturn localeTranslations[key] as string | Record<string, unknown> as T;\n\t\t}\n\n\t\treturn defaultString as T;\n\t};\n\n\t/**\n\t * Return a static translation based on the translation object and current page language using a dot notation string key as argument.\n\t * Translate function helper with \"dot object notation\"\n\t * @example: getNestedTranslation(\"ui.strings.followUs\")\n\t */\n\tconst getNestedTranslation = <T = string>(\n\t\t/** Key from the translation object that will be obtained */\n\t\tkey: string,\n\t\t/** Fallback string in case `key` returns undefined */\n\t\tdefaultString = \"\",\n\t) => {\n\t\treturn localeTranslations\n\t\t\t? (getNestedPropValue(key, localeTranslations) as T) ||\n\t\t\t\t\t(defaultString as T)\n\t\t\t: (defaultString as T);\n\t};\n\n\tif (!currentLocale || !languageId) {\n\t\tconsole.warn(\n\t\t\t\"Griddo: You forgot to put <I18nProvider> or exists an error in language id.\",\n\t\t);\n\t}\n\n\treturn { getTranslation, getNestedTranslation };\n}\n\nfunction checkLangId(siteLangs: Site[\"siteLangs\"], id?: number) {\n\treturn !!siteLangs?.find((lang) => lang.id === id);\n}\n\nfunction getLocaleFromSiteLangs(\n\tsiteLangs: Site[\"siteLangs\"],\n\tid?: number,\n): Locale | undefined {\n\treturn siteLangs?.find((lang) => lang.id === id)?.locale;\n}\n\nfunction checkLocale(siteLangs: Site[\"siteLangs\"], locale: Locale) {\n\treturn !!siteLangs?.find((lang) => lang?.locale === locale);\n}\n\n/**\n * Get the value of a nested key in string dot notation\n * @example:\n * Get the value of prop3 from foo object\n * getNestedPropValue(\"prop1.prop2.prop3\", foo)\n */\nfunction getNestedPropValue(key: string, mainObject: Record<string, any>) {\n\tconst prop = key?.split(\".\").reduce((obj, prop) => {\n\t\tif (obj[prop]) {\n\t\t\treturn obj[prop];\n\t\t}\n\n\t\t// return empty string if object[prop] is undefined to prevent type error\n\t\t// trying to acces a prop of an undefined\n\t\treturn \"\";\n\t}, mainObject);\n\n\treturn prop;\n}\n\nexport { useI18n };\n","import * as React from \"react\";\n\nimport {\n\ttype ModulePreviewContextProps,\n\tModulePreviewContext,\n} from \"../contexts/ModulePreview\";\n\nexport function useModulePreview(): ModulePreviewContextProps {\n\tconst value = React.useContext(ModulePreviewContext);\n\n\tif (!value) {\n\t\tconsole.warn(\"Griddo: You forgot to put <ModulePreviewProvider>.\");\n\t\treturn {} as ModulePreviewContextProps;\n\t}\n\n\treturn value;\n}\n","import type { ImageDecoding, ImageLoading } from \"../types/core\";\n\nimport { useSite } from \"./useSite\";\nimport {\n\tcleanCloudinaryURI,\n\tcloudinaryRearrangeResponsiveArray,\n\tremoveUnit,\n} from \"../utils/images\";\n\nconst internalDefaults: CloudinaryImageConfig = {\n\tdomain: \"https://res.cloudinary.com\",\n\tuploadFolder: \"image/upload\",\n\tfallback404ImageId: \"dx-placeholders/fallback-404-image\",\n\tquality: 51,\n\tcrop: \"fill\",\n\tgravity: \"center\",\n\tformat: \"auto\",\n\tloading: \"lazy\",\n\tbackgroundLazy: false,\n\tdecoding: \"auto\",\n\tresponsive: [{ breakpoint: null, width: \"320px\" }],\n};\n\n/**\n * `useImage()`\n *\n * @deprecated This hook will be removed from Griddo in the future.\n */\nfunction useImage({ publicId, ...props }: UseImageProps) {\n\tconst { cloudinaryCloudName, cloudinaryDefaults } = useSite();\n\n\tconst imageConfig = {\n\t\t...internalDefaults,\n\t\t...cloudinaryDefaults,\n\t\t...props,\n\t};\n\n\tconst root = `${imageConfig.domain}/${cloudinaryCloudName}/${imageConfig.uploadFolder}`;\n\n\t// 404 Fallback image\n\t// TODO: Create a Cloudinary query to create an image on the fly.\n\tconst fallbackSrcImage = `${getURIWithParams({\n\t\troot,\n\t\timageConfig: {\n\t\t\t...imageConfig,\n\t\t\tquality: 20,\n\t\t\twidth: \"512\",\n\t\t},\n\t})}/${imageConfig.fallback404ImageId}`;\n\n\t// Create the content of the srcSet <img> attribute\n\tconst srcSet = imageConfig?.responsive?.map(\n\t\t({ width, height, quality, crop }) => {\n\t\t\tconst cloudinaryURI = getURIWithParams({\n\t\t\t\troot,\n\t\t\t\timageConfig: {\n\t\t\t\t\tquality,\n\t\t\t\t\tcrop,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\t...imageConfig,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn `${cloudinaryURI}/${publicId} ${removeUnit(width)}w`;\n\t\t},\n\t);\n\n\t// Create the content of the sizes <img> attribute\n\t// rearange put the element of the array with the breakpoint === null and\n\t// put it at the last position to use properly in the mediaquery interpolation\n\tconst sizes = cloudinaryRearrangeResponsiveArray(\n\t\timageConfig?.responsive?.reverse(),\n\t)\n\t\t.map((query, idx) => {\n\t\t\tif (imageConfig.responsive && idx < imageConfig?.responsive?.length - 1) {\n\t\t\t\treturn `(min-width: ${query.breakpoint}) ${query.width}`;\n\t\t\t}\n\n\t\t\treturn `${query.width}`;\n\t\t})\n\t\t.join(\", \");\n\n\t// Create a kind of srcSet for background images (removing the final size xxxw)\n\tconst srcSetURL = srcSet?.map((entry) => entry.split(\" \")[0]);\n\n\t// Get the src from the first (usually the small) breakpoint\n\tconst smallForSrc =\n\t\t(imageConfig?.responsive && imageConfig?.responsive[0]) || [];\n\n\t// Old browsers src fallback (in case it doesn't support srcSet)\n\tconst src = `${getURIWithParams({\n\t\troot,\n\t\timageConfig,\n\t\t...smallForSrc,\n\t})}/${publicId}`;\n\n\treturn {\n\t\tsrc,\n\t\tsrcSet,\n\t\tsizes,\n\t\tfallbackSrcImage,\n\t\tsrcSetURL,\n\t};\n}\n\nfunction getURIWithParams(props: GetURIWithParamsProps) {\n\tconst { root, imageConfig } = props;\n\n\tconst crop = imageConfig?.crop ? `c_${imageConfig.crop}` : \"\";\n\tconst quality = imageConfig?.quality ? `q_${imageConfig.quality}` : \"\";\n\tconst gravity = imageConfig?.gravity ? `g_${imageConfig.gravity}` : \"\";\n\tconst format = imageConfig?.format ? `f_${imageConfig.format}` : \"\";\n\tconst width = imageConfig?.width ? `w_${removeUnit(imageConfig.width)}` : \"\";\n\tconst height = imageConfig?.height\n\t\t? `h_${removeUnit(imageConfig.height)}`\n\t\t: \"\";\n\tconst aspectRatio = imageConfig?.ar ? `ar_${imageConfig.ar}` : \"\";\n\n\t// Clean the URI to avoid orphans query params: w_null, w_, etc..\n\tconst queryParamsURL = cleanCloudinaryURI(\n\t\t`${crop},${gravity},${format},${quality},${width},${height},${aspectRatio}`,\n\t);\n\n\tconst url = `${root}/${queryParamsURL}`;\n\n\treturn url;\n}\n\ninterface GetURIWithParamsProps {\n\troot?: string;\n\timageConfig?: CloudinaryImageConfig;\n}\n\nexport type UseImageProps = CloudinaryImageConfig;\n\ninterface CloudinaryImageConfig {\n\tresponsive?: Array<CloudinaryResponsiveImageProps>;\n\tar?: number | string;\n\tbackgroundLazy?: boolean;\n\tcrop?: \"fill\" | \"crop\" | \"thumb\" | \"fill_pad\" | \"lfill\";\n\tdecoding?: ImageDecoding;\n\tdomain?: string;\n\tfallback404Image?: string;\n\tfallback404ImageId?: string;\n\tformat?: \"auto\" | \"jpg\" | \"webp\" | \"avif\" | \"gif\" | \"png\";\n\tgravity?: string;\n\theight?: string;\n\tloading?: ImageLoading;\n\tpublicId?: string;\n\tquality?: number;\n\tsizes?: string;\n\tuploadFolder?: string;\n\twidth?: string;\n}\n\nexport interface CloudinaryResponsiveImageProps {\n\tbreakpoint?: null | string;\n\twidth?: string;\n\theight?: string;\n\tquality?: number;\n\tcrop?: CloudinaryImageCrop;\n\tformat?: CloudinaryImageFormat;\n}\n\nexport type CloudinaryImageFormat =\n\t| \"auto\"\n\t| \"jpg\"\n\t| \"webp\"\n\t| \"avif\"\n\t| \"gif\"\n\t| \"png\";\n\nexport type CloudinaryImageCrop =\n\t| \"fill\"\n\t| \"crop\"\n\t| \"thumb\"\n\t| \"fill_pad\"\n\t| \"lfill\";\n\nexport { useImage };\n","import * as React from \"react\";\n\n/**\n *\n * This React Hook can be useful in a SSR environment to wait until be in a browser to execution some functions.\n * Indeed, in a SSR application, when the component with the `useIsClient` hook is mounted in the browser, its state changes and causes a re-render.\n * It is what we want here, but, if you want a boolean, without extra render see `useSSR()`\n *\n * @example\n * import { useIsClient } from '@griddo/core'\n *\n * export default function Component() {\n * const isClient = useIsClient()\n *\n * return <div>{isClient ? 'Client' : 'server'}</div>\n * }\n *\n *\n * @see\n * https://usehooks-ts.com for more hooks\n *\n */\nfunction useIsClient() {\n\tconst [isClient, setClient] = React.useState(false);\n\n\tReact.useEffect(() => {\n\t\tsetClient(true);\n\t}, []);\n\n\treturn isClient;\n}\n\nexport { useIsClient };\n","import * as React from \"react\";\n\n/**\n * Simple React hook that return a boolean;\n *\n * - `true` at the mount time\n * - Then always `false`\n *\n * @example\n * import { useIsFirstRender } from '@griddo/core'\n *\n * export default function Component() {\n * const isFirst = useIsFirstRender()\n * const [data, setData] = useState<number>(0)\n *\n * useEffect(() => {\n * console.log('Normal useEffect', { data })\n * }, [data])\n *\n * return (\n * <div>\n * <p>Open your console</p>\n * <p>Is first render: {isFirst ? 'yes' : 'no'}</p>\n * <button onClick={() => setData(Date.now())}>Update data</button>\n * </div>\n * )\n * }\n *\n * @see\n * https://usehooks-ts.com for more hooks\n *\n */\nfunction useIsFirstRender(): boolean {\n\tconst isFirst = React.useRef(true);\n\n\tif (isFirst.current) {\n\t\tisFirst.current = false;\n\n\t\treturn true;\n\t}\n\n\treturn isFirst.current;\n}\n\nexport { useIsFirstRender };\n","import * as React from \"react\";\n\nimport { SiteContext } from \"../contexts\";\n\n/**\n * `useLink()`\n *\n * @deprecated This hooks is used by the old `<Link>` component from Griddo which you may want not use anymore. Use `<GriddoLink>` instead.\n */\nfunction useLink() {\n\tconst siteContextValue = React.useContext(SiteContext);\n\treturn siteContextValue?.linkComponent;\n}\n\nexport { useLink };\n","import type { ListContentType } from \"../types/core\";\nimport type {\n\tListApiQueryResponseProps,\n\tPickRename,\n\tSetQueryProps,\n} from \"../types/global\";\n\nimport * as React from \"react\";\n\nimport { useFetch, type UseFetchStateProps } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\nimport { isOperator, parseRelations, parseSources } from \"./utils\";\nimport { concatParams } from \"../utils\";\n\n/**\n * Get a list of ContentTypes using the Griddo public API.\n *\n * @example\n * const [{ query }, setQuery] = useList()\n * setQuery(data) // `data` key from a `ReferenceField`.\n */\nexport function useList<ContentType>(): UseListReturn<ContentType> {\n\tconst { publicApiUrl, siteId, renderer } = useSite();\n\tconst { languageId } = usePage();\n\tconst [url, setUrl] = React.useState<UseListSetUrlAction>();\n\tconst isAX = renderer === \"editor\";\n\n\t// Exposed function to modify the internal state\n\tfunction setQuery<ContentType = unknown>({\n\t\tapiUrl = `${publicApiUrl}`,\n\t\tcached,\n\t\tdata: refField,\n\t\texclude,\n\t\tfields,\n\t\titems = 50,\n\t\toperator,\n\t\tpage = 1,\n\t\trelations,\n\t\tsearch,\n\t\tincludePending,\n\t\tallLanguages,\n\t\tpreferenceLanguage,\n\t}: UseListSetQueryProps<ContentType>) {\n\t\tif (!refField) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst customCached = isAX ? new Date().valueOf().toString() : cached;\n\t\tconst searchWithNoSpaces = search?.replace(/\\s/g, \"+\");\n\t\tconst isAuto = refField.mode === \"auto\";\n\t\tconst isManual = refField.mode === \"manual\";\n\t\tconst isNavigation = refField.mode === \"navigation\";\n\t\tconst contentType =\n\t\t\tparseSources<ContentType>(refField.sources) ||\n\t\t\trefField.fixed ||\n\t\t\t`reference/${refField.referenceId}` ||\n\t\t\t[];\n\t\tconst listModeParam = isAuto\n\t\t\t? \"/list/v2/\"\n\t\t\t: isManual\n\t\t\t\t? \"/list/fixed/\"\n\t\t\t\t: isNavigation\n\t\t\t\t\t? \"/list/navigations/\"\n\t\t\t\t\t: \"\";\n\n\t\tconst queryUrl = concatParams({\n\t\t\tbaseUrl: `${apiUrl}${listModeParam}${contentType}/`,\n\t\t\tparams: {\n\t\t\t\tsite: refField.site || siteId,\n\t\t\t\tlang: refField.lang || languageId,\n\t\t\t\tget: fields,\n\t\t\t\tpage,\n\t\t\t\titems,\n\t\t\t\torder: isAuto || isNavigation ? refField.order : undefined,\n\t\t\t\t//filter: parseFilter(filterIds || refField.filter),\n\t\t\t\tmaxItems: refField.quantity,\n\t\t\t\tsearch: searchWithNoSpaces,\n\t\t\t\toperator: isOperator(operator) ? operator : undefined,\n\t\t\t\t//filterOperator: isOperator(filterOperator) ? filterOperator : undefined,\n\t\t\t\t//globalOperator: isOperator(globalOperator) ? globalOperator : undefined,\n\t\t\t\texclude: Array.isArray(exclude) ? exclude : undefined,\n\t\t\t\trelations: parseRelations(relations),\n\t\t\t\tincludePending: includePending ? \"on\" : undefined,\n\t\t\t\t// For legacy pourposes the hook reads `allLanguages` and\n\t\t\t\t// `preferenceLanguage` from arguments too. They will be remove\n\t\t\t\t// in the future...\n\t\t\t\tallLanguages: allLanguages || refField.allLanguages ? \"on\" : undefined,\n\t\t\t\tpreferenceLanguage:\n\t\t\t\t\tpreferenceLanguage || refField.preferenceLanguage\n\t\t\t\t\t\t? \"true\"\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcached: customCached,\n\t\t\t},\n\t\t});\n\n\t\t// If manual selection is empty, it doesn't call to API\n\t\tif (isManual && Array.isArray(contentType) && contentType.length < 1) {\n\t\t\tsetUrl({\n\t\t\t\tqueryUrl: undefined,\n\t\t\t\textra: undefined,\n\t\t\t});\n\t\t}\n\n\t\tsetUrl({\n\t\t\tqueryUrl,\n\t\t\textra: {\n\t\t\t\ttotalItems: refField.mode === \"manual\" ? refField.fixed?.length : false,\n\t\t\t},\n\t\t});\n\t}\n\n\tconst { isError, isLoading, msg, data, isFirstFetch } = useFetch<\n\t\tListApiQueryResponseProps<ListContentType<ContentType>>\n\t>(url?.queryUrl);\n\n\treturn [{ query: data, isLoading, isError, msg, isFirstFetch }, setQuery];\n}\n\n// url\nexport interface UseListSetUrlAction {\n\tqueryUrl: string | undefined;\n\textra: Record<string, unknown> | undefined;\n}\n\n// setQuery\nexport type UseListSetQueryProps<ContentType> = SetQueryProps<ContentType>;\n\n// The same state as useFetch but renaming data to query for this hook\nexport type UseListState<ContentType> = PickRename<\n\tUseFetchStateProps<ListApiQueryResponseProps<ListContentType<ContentType>>>,\n\t\"data\",\n\t\"query\"\n>;\n\nexport type UseListReturn<ContentType> = [\n\tUseListState<ContentType>,\n\t(setQuery: UseListSetQueryProps<ContentType>) => void,\n];\n","import type { QueriedData } from \"../types/api-response-fields\";\nimport type { ListContentType } from \"../types/core\";\nimport type { ListApiQueryResponseProps } from \"../types/global\";\nimport type { PartiallyRequired } from \"../types/utilities\";\n\nimport {\n\tuseList,\n\ttype UseListReturn,\n\ttype UseListSetQueryProps,\n} from \"./useList\";\n\nexport interface useListWithDefaultStaticPageProps<T>\n\textends Omit<PartiallyRequired<UseListSetQueryProps<T>, \"items\">, \"data\"> {\n\tqueriedData?: QueriedData<T>;\n}\n\nfunction filterKeys(obj?: Record<string, unknown>, fields?: Array<string>) {\n\tif (!obj) {\n\t\treturn;\n\t}\n\n\tif (!fields) {\n\t\treturn obj;\n\t}\n\n\treturn Object.fromEntries(\n\t\tObject.keys(obj)\n\t\t\t.map((key) => fields?.includes(key) && [key, obj[key]])\n\t\t\t.filter(Boolean) as Array<[string, unknown]>,\n\t);\n}\n\n/**\n * `useListWithDefaultStaticPage()`\n *\n * Hook to fetch a list of ContentTypes from the public API that returns the first page statically.\n * This way the build process will write the data into the HTML.\n *\n * @warning\n * Maybe you **don't want** to `use { mode: \"list\" }` in the schema options\n *\n * @example\n *\tconst [{ query, isError, isFirstFetch, isLoading, msg }, setQuery] =\n *\tuseListWithDefaultStaticPage<MEMBERContentTypeProps>({\n * // This is de default query params for the first page\n *\t\tqueriedData,\n *\t\titems: itemsPerPage,\n *\t\tpage: 1,\n *\t\tfields: [\"title\", \"id\"],\n * });\n *\n */\nfunction useListWithDefaultStaticPage<T>(\n\tprops: useListWithDefaultStaticPageProps<T>,\n): UseListReturn<T> {\n\tconst { items, queriedData, fields, page } = props;\n\tconst [{ isError, isLoading, msg, query, isFirstFetch }, setQuery] =\n\t\tuseList<T>();\n\n\t// Only at build-time. SSR.\n\tconst staticQuery = {\n\t\tpage: page || 1,\n\t\ttotalItems: queriedData?.length,\n\t\ttotalPages:\n\t\t\tqueriedData?.length && items && Math.ceil(queriedData?.length / items),\n\t\titems: queriedData?.slice(0, items || 10).map((item) => {\n\t\t\treturn {\n\t\t\t\tid: item.id,\n\t\t\t\t...filterKeys(item.content, fields as Array<string>),\n\t\t\t};\n\t\t}),\n\t} as ListApiQueryResponseProps<ListContentType<T>> | undefined;\n\n\t// Only in client.\n\t// Esta const debe ser `undefined` si aun no tenemos respuesta de la API,\n\t// esto va a pasar siempre, al menos en la fase de build SSR.\n\tconst apiFetchQuery = query\n\t\t? {\n\t\t\t\t...query,\n\t\t\t\ttotalPages:\n\t\t\t\t\titems && query?.totalItems && Math.ceil(query?.totalItems / items),\n\t\t\t}\n\t\t: undefined;\n\n\treturn [\n\t\t{\n\t\t\tisError,\n\t\t\tisLoading,\n\t\t\tmsg,\n\t\t\tisFirstFetch,\n\t\t\t// En build time `query` valdrá `staticQuery`\n\t\t\tquery: apiFetchQuery || staticQuery,\n\t\t},\n\t\tsetQuery,\n\t];\n}\n\nexport { useListWithDefaultStaticPage };\n","export type GriddoAlertRegisterProps = {\n\t/** Public API URL which can be obtained from useSite() */\n\tpublicApiUrl: string;\n\t/** Error type: E: error, W: warning, I: info */\n\tlevel: \"E\" | \"W\" | \"I\";\n\t/** Generic area related to the alert for later grouping in queries */\n\tarea?: string;\n\t/** Detailed error message. */\n\tdescription: string;\n\t/** An object where you can include all the error details you find convenient. */\n\tfullData?: Record<string, unknown>;\n\t/**\n\t * Indicates whether we want to send an immediate SNS notification.\n\t * If false, it will only be saved in the database log. If true, an SNS\n\t * notification is also sent.\n\t * The default value will be true if the alert level (level) is E\n\t * (Error) and false in all other cases. */\n\tinstantNotification?: boolean;\n};\n\nexport async function griddoAlertRegister({\n\tarea,\n\tdescription,\n\tfullData,\n\tinstantNotification = false,\n\tlevel,\n\tpublicApiUrl,\n}: GriddoAlertRegisterProps) {\n\tconst url = `${publicApiUrl}/alert`;\n\tconst body = { level, area, description, fullData, instantNotification };\n\tconst fetchOptions = {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tbody: JSON.stringify(body),\n\t};\n\n\ttry {\n\t\tawait fetch(url, fetchOptions);\n\t} catch (error) {\n\t\tconsole.error(\"Error creating Griddo alert:\", error);\n\t}\n}\n","import type { Core } from \"../..\";\n\nconst INVALID_DATE = \"Invalid Date\";\n\n/**\n * Format and translate a string date from a `DateField` (YY/MM/DD) into\n * differentes Locales. You can pass an option object Intl.DateTimeFormatOptions\n * to customize the output.\n *\n * @example\n * formatLocaleDate({ dateString: \"2023/08/06\", locale: \"es-ES\"})\n * // { date: \"6 Agosto 2023\", dateTime: \"2023-08-06\" }\n */\nfunction formatLocaleDate(\n\tinputDate: string,\n\tlocale: Core.ISOLocale,\n\toptions: Intl.DateTimeFormatOptions = { dateStyle: \"long\" },\n) {\n\tif (!isDateStyleSupported(locale)) {\n\t\treturn { date: inputDate, dateTime: \"\" };\n\t}\n\n\tconst date = new Date(inputDate);\n\n\tif (Number.isNaN(date.getTime())) {\n\t\treturn {\n\t\t\tdate: INVALID_DATE,\n\t\t\tdateTime: INVALID_DATE,\n\t\t};\n\t}\n\n\tconst localeDate = date.toLocaleDateString(locale, options);\n\tconst dateTimeDate = inputDate.replaceAll(\"/\", \"-\");\n\n\treturn {\n\t\tdate: localeDate,\n\t\tdateTime: dateTimeDate,\n\t};\n}\n\nfunction isDateStyleSupported(locale: string) {\n\treturn (\n\t\tIntl.DateTimeFormat.supportedLocalesOf(locale, {\n\t\t\tdateStyle: \"long\",\n\t\t}).length > 0\n\t);\n}\n\nexport { formatLocaleDate };\n","import { formatLocaleDate } from \"../functions\";\nimport { usePage } from \"./usePage\";\n\n/**\n * Format and translate a string date from a `DateField` (YY/MM/DD) responding\n * to different Locales from page context. Also support an option object\n * (Intl.DateTimeFormatOptions) to customize the output.\n *\n * @example\n * const { date } = useLocaleDate(\"2023/08/06\")\n * // 6 Agosto 2023\n */\nexport function useLocaleDate(\n\tdate?: string,\n\toptions: Intl.DateTimeFormatOptions = {\n\t\tdateStyle: \"long\",\n\t},\n) {\n\tconst { ISOLocale: locale } = usePage();\n\n\tif (!date) {\n\t\treturn { date: undefined, dateTime: undefined };\n\t}\n\n\treturn formatLocaleDate(date, locale || \"en-US\", options);\n}\n","import * as React from \"react\";\n\nimport { NavigationContext } from \"../contexts\";\n\n/**\n * `useNavigation()`\n */\nfunction useNavigation() {\n\treturn React.useContext(NavigationContext);\n}\n\nexport { useNavigation };\n","// @ts-expect-error autotypes instance file\nimport type __AT__ from \"@/autotypes\";\n\nimport * as React from \"react\";\n\nimport { useFetch } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\nimport { concatParams } from \"../utils\";\n\ninterface Item {\n\tdescription: string;\n\timage: string;\n\tsimilarity: number;\n\tstructuredData: Record<PropertyKey, unknown>;\n\ttemplate: string;\n\ttitle: string;\n\turl: string;\n}\n\ninterface Response {\n\tpage?: number;\n\titems?: Array<Item>;\n\ttotalItems?: number;\n}\n\ninterface Options {\n\tpageId?: number;\n\tfields?: Array<string>;\n\tquantity?: number;\n\tuseStructuredData?: boolean;\n\ttemplate?: __AT__.Templates;\n}\n\nfunction createSetQuery(\n\tpublicApiUrl: string,\n\tsiteId: number,\n\tpageId: number | undefined,\n\tlanguageId: number,\n\ttemplateType: __AT__.Templates,\n\tsetQueryUrl?: React.Dispatch<React.SetStateAction<string | undefined>>,\n) {\n\tif (!publicApiUrl || !setQueryUrl) {\n\t\treturn () => \"\";\n\t}\n\n\treturn (options?: Options) => {\n\t\tconst { fields, quantity, template, useStructuredData } = options || {};\n\n\t\tconst urlWithParams = concatParams({\n\t\t\tbaseUrl: `${publicApiUrl}/ai/pages/related/`,\n\t\t\tparams: {\n\t\t\t\tp: pageId,\n\t\t\t\tl: languageId,\n\t\t\t\ts: siteId,\n\t\t\t\tq: quantity,\n\t\t\t\td: useStructuredData ? \"on\" : undefined,\n\t\t\t\tf: fields?.join(\",\") || \"\",\n\t\t\t\tt: template || templateType,\n\t\t\t},\n\t\t});\n\n\t\tsetQueryUrl(urlWithParams);\n\t};\n}\n\nexport function usePageRelatedContent() {\n\tconst { publicApiUrl, siteId } = useSite();\n\tconst { id: pageId, languageId, template } = usePage();\n\tconst [queryUrl, setQueryUrl] = React.useState<string | undefined>(undefined);\n\n\tif (!publicApiUrl || !siteId || !languageId) {\n\t\treturn;\n\t}\n\n\tconst setQuery = React.useMemo(\n\t\t() =>\n\t\t\tcreateSetQuery(\n\t\t\t\tpublicApiUrl,\n\t\t\t\tsiteId,\n\t\t\t\tpageId,\n\t\t\t\tlanguageId,\n\t\t\t\ttemplate?.templateType,\n\t\t\t\tsetQueryUrl,\n\t\t\t),\n\t\t[publicApiUrl, pageId, siteId, template],\n\t);\n\n\tconst { isError, isLoading, msg, data, isFirstFetch } =\n\t\tuseFetch<Response>(queryUrl);\n\n\treturn [\n\t\t{ query: data, isLoading, isError, msg, isFirstFetch },\n\t\tsetQuery,\n\t] as const;\n}\n","import type { UseFetchStateProps } from \"./useFetch\";\nimport type { PickRename } from \"../types/global\";\n\nimport * as React from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { concatParams } from \"../utils\";\nimport { useFetch } from \"./useFetch\";\nimport { useSite } from \"./useSite\";\n\ntype Response<Areas extends string> = Record<\n\tAreas,\n\t{ interest: { id?: string; label: string }; weight: number }\n>;\n\ntype State<Areas extends string> = PickRename<\n\tUseFetchStateProps<Response<Areas>>,\n\t\"data\",\n\t\"query\"\n>;\n\ntype SetState<Areas extends string> = { areas: Array<Areas> };\n\ntype Return<Areas extends string> = [\n\tState<Areas>,\n\t(setQuery: SetState<Areas>) => void,\n];\n\n/**\n * Hook to receive GPX interests from Griddo's Public API.\n *\n * @example\n * const [{ query }, setQuery] = useReceiveInterests();\n * setQuery({ areas: [\"Area1\"] });\n */\nexport function useReceiveInterests<Areas extends string>(): Return<Areas> {\n\tconst { publicApiUrl } = useSite();\n\tconst [url, setUrl] = React.useState<string>();\n\n\tconst [id] = React.useState(() => {\n\t\tif (typeof window === \"undefined\") return \"\";\n\t\ttry {\n\t\t\tlet storedId = localStorage.getItem(\"gpx_id\");\n\t\t\tif (!storedId) {\n\t\t\t\tstoredId = uuidv4();\n\t\t\t\tlocalStorage.setItem(\"gpx_id\", storedId);\n\t\t\t}\n\t\t\treturn storedId;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error accessing localStorage:\", error);\n\t\t\treturn uuidv4();\n\t\t}\n\t});\n\n\tconst setQuery = ({ areas }: { areas: Array<Areas> }) => {\n\t\tconst urlWithParams = concatParams({\n\t\t\tbaseUrl: `${publicApiUrl}/gpx/profile/`,\n\t\t\tparams: {\n\t\t\t\tareas,\n\t\t\t\tid,\n\t\t\t},\n\t\t});\n\n\t\tsetUrl(urlWithParams);\n\t};\n\n\tconst { isError, isLoading, msg, data, isFirstFetch } =\n\t\tuseFetch<Response<Areas>>(url);\n\n\treturn [{ query: data, isLoading, isError, msg, isFirstFetch }, setQuery];\n}\n","import * as React from \"react\";\n\n// Cached script statuses\nconst cachedScriptStatuses: Record<string, UseScriptStatus | undefined> = {};\n\n/**\n * Dynamically load an external script in one line with this React hook. This can be useful to integrate a third party libraries.\n * This avoids loading this script in the `<head>` on all your pages if it is not necessary.\n *\n * @example\n * import * as React from 'react'\n * import { useScript } from '@griddo/core'\n *\n * declare const jQuery: any\n *\n * export default function Component() {\n * \t// Load the script asynchronously\n * const status = useScript(`https://code.jquery.com/jquery-3.5.1.min.js`, {\n * removeOnUnmount: false,\n * })\n *\n * React.useEffect(() => {\n * if (typeof jQuery !== 'undefined') {\n * // jQuery is loaded => print the version\n * // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n * alert(jQuery.fn.jquery)\n * }\n * }, [status])\n *\n * return (\n * <div>\n * <p>{`Current status: ${status}`}</p>\n * {status === 'ready' && <p>You can use the script here.</p>}\n * </div>\n * )\n * }\n *\n * @see\n * https://usehooks-ts.com for more hooks\n *\n */\nfunction getScriptNode(src: string) {\n\tconst node: HTMLScriptElement | null = document.querySelector(\n\t\t`script[src=\"${src}\"]`,\n\t);\n\tconst status = node?.getAttribute(\"data-status\") as\n\t\t| UseScriptStatus\n\t\t| undefined;\n\n\treturn {\n\t\tnode,\n\t\tstatus,\n\t};\n}\n\nfunction useScript(\n\tsrc: string | null,\n\toptions?: UseScriptOptions,\n): UseScriptStatus {\n\tconst [status, setStatus] = React.useState<UseScriptStatus>(() => {\n\t\tif (!src || options?.shouldPreventLoad) {\n\t\t\treturn \"idle\";\n\t\t}\n\n\t\tif (typeof window === \"undefined\") {\n\t\t\t// SSR Handling - always return 'loading'\n\t\t\treturn \"loading\";\n\t\t}\n\n\t\treturn cachedScriptStatuses[src] ?? \"loading\";\n\t});\n\n\tReact.useEffect(() => {\n\t\tif (!src || options?.shouldPreventLoad) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cachedScriptStatus = cachedScriptStatuses[src];\n\t\tif (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n\t\t\t// If the script is already cached, set its status immediately\n\t\t\tsetStatus(cachedScriptStatus);\n\t\t\treturn;\n\t\t}\n\n\t\t// Fetch existing script element by src\n\t\t// It may have been added by another instance of this hook\n\t\tconst script = getScriptNode(src);\n\t\tlet scriptNode = script.node;\n\n\t\tif (!scriptNode) {\n\t\t\t// Create script element and add it to document body\n\t\t\tscriptNode = document.createElement(\"script\");\n\t\t\tscriptNode.src = src;\n\t\t\tscriptNode.async = true;\n\t\t\tscriptNode.setAttribute(\"data-status\", \"loading\");\n\t\t\tdocument.body.appendChild(scriptNode);\n\n\t\t\t// Store status in attribute on script\n\t\t\t// This can be read by other instances of this hook\n\t\t\tconst setAttributeFromEvent = (event: Event) => {\n\t\t\t\tconst scriptStatus: UseScriptStatus =\n\t\t\t\t\tevent.type === \"load\" ? \"ready\" : \"error\";\n\n\t\t\t\tscriptNode?.setAttribute(\"data-status\", scriptStatus);\n\t\t\t};\n\n\t\t\tscriptNode.addEventListener(\"load\", setAttributeFromEvent);\n\t\t\tscriptNode.addEventListener(\"error\", setAttributeFromEvent);\n\t\t} else {\n\t\t\t// Grab existing script status from attribute and set to state.\n\t\t\tsetStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n\t\t}\n\n\t\t// Script event handler to update status in state\n\t\t// Note: Even if the script already exists we still need to add\n\t\t// event handlers to update the state for *this* hook instance.\n\t\tconst setStateFromEvent = (event: Event) => {\n\t\t\tconst newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n\t\t\tsetStatus(newStatus);\n\t\t\tcachedScriptStatuses[src] = newStatus;\n\t\t};\n\n\t\t// Add event listeners\n\t\tscriptNode.addEventListener(\"load\", setStateFromEvent);\n\t\tscriptNode.addEventListener(\"error\", setStateFromEvent);\n\n\t\t// Remove event listeners on cleanup\n\t\treturn () => {\n\t\t\tif (scriptNode) {\n\t\t\t\tscriptNode.removeEventListener(\"load\", setStateFromEvent);\n\t\t\t\tscriptNode.removeEventListener(\"error\", setStateFromEvent);\n\t\t\t}\n\n\t\t\tif (scriptNode && options?.removeOnUnmount) {\n\t\t\t\tscriptNode.remove();\n\t\t\t}\n\t\t};\n\t}, [src, options?.shouldPreventLoad, options?.removeOnUnmount]);\n\n\treturn status;\n}\n\nexport type UseScriptStatus = \"idle\" | \"loading\" | \"ready\" | \"error\";\nexport interface UseScriptOptions {\n\tshouldPreventLoad?: boolean;\n\tremoveOnUnmount?: boolean;\n}\n\nexport { useScript };\n","import type { UseFetchStateProps } from \"./useFetch\";\n\nimport * as React from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { useFetch } from \"./useFetch\";\nimport { useSite } from \"./useSite\";\n\nexport interface Interest {\n\tarea: string;\n\tinterest: {\n\t\tid?: string;\n\t\tlabel: string;\n\t};\n\tweight: number;\n}\n\ninterface Body {\n\tid: string;\n\tinterests: Array<Interest>;\n\tnavigator: {\n\t\tuserAgent: string;\n\t\tlanguage: string;\n\t};\n}\n\ntype UseSendInterestsReturn = [\n\tOmit<UseFetchStateProps<unknown>, \"data\">,\n\t(setQuery: { interests: Array<Interest> }) => void,\n];\n\n/**\n * Hook to send GPX interests to Griddo's Public API.\n *\n * @example\n * const [{ isLoading }, setQuery] = useSendInterests();\n *\n * // Send interests\n * setQuery({\n * interests: [{ area: \"Area1\", interest: {label: \"Interest1\", id: 1}, weight: 1 }]\n * });\n *\n */\nexport function useSendInterests(): UseSendInterestsReturn {\n\tconst { publicApiUrl } = useSite();\n\t// init with null to prevent call useFetch without a valid body.\n\tconst [body, setBody] = React.useState<Body | null>(null);\n\n\tconst [id] = React.useState(() => {\n\t\tif (typeof window === \"undefined\") return \"\";\n\t\ttry {\n\t\t\tlet storedId = localStorage.getItem(\"gpx_id\");\n\t\t\tif (!storedId) {\n\t\t\t\tstoredId = uuidv4();\n\t\t\t\tlocalStorage.setItem(\"gpx_id\", storedId);\n\t\t\t}\n\t\t\treturn storedId;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error accessing localStorage:\", error);\n\t\t\treturn uuidv4();\n\t\t}\n\t});\n\n\tconst setQuery = (options: { interests: Array<Interest> }) => {\n\t\ttry {\n\t\t\tconst { interests } = options;\n\n\t\t\tif (!Array.isArray(interests) || interests.length === 0) {\n\t\t\t\tthrow new Error(\"Interests must be a non-empty array\");\n\t\t\t}\n\n\t\t\tsetBody({\n\t\t\t\tid,\n\t\t\t\tinterests,\n\t\t\t\tnavigator: {\n\t\t\t\t\tuserAgent: window.navigator.userAgent,\n\t\t\t\t\tlanguage: window.navigator.language,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error preparing GPX interests:\", error);\n\t\t}\n\t};\n\n\tconst { isError, isFirstFetch, isLoading, msg } = useFetch(\n\t\t`${publicApiUrl}/gpx/collect`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t},\n\t);\n\n\treturn [\n\t\t{\n\t\t\tisError,\n\t\t\tisFirstFetch,\n\t\t\tisLoading,\n\t\t\tmsg,\n\t\t},\n\t\tsetQuery,\n\t];\n}\n","import React from \"react\";\n\nimport { SessionContext } from \"../contexts\";\n\n/**\n * `useSession()`\n *\n * Hook to read/write any data in the context throughout the session in CX.\n * @see [Documentation](https://www.notion.so/griddoio/useSession-e446c9f55af34d09b8c27c1fcff529c3)\n *\n * @example\n * const [state, setState] = useSession()\n */\nconst useSession = () => {\n\treturn React.useContext(SessionContext);\n};\n\nexport { useSession };\n","/**\n *\n * Quickly know where your code will be executed;\n *\n * In the server (Server-Side-Rendering) at build time or in the client, the navigator.\n * This hook doesn't cause an extra render, it just returns the value directly, at the mount time, and it didn't re-trigger if the value changes.\n *\n * Otherwise, If you want to be notified when the value changes to react to it, you can use useIsClient() instead.\n *\n * @see useIsClient()\n *\n * @example\n * import { useSSR } from '@griddo/core'\n * const { isBrowser, isServer } = useSSR()\n *\n * @see\n * https://usehooks-ts.com for more hooks\n *\n */\nfunction useSSR() {\n\tconst isDOM =\n\t\ttypeof window !== \"undefined\" &&\n\t\twindow.document &&\n\t\twindow.document.documentElement;\n\n\treturn {\n\t\tisBrowser: isDOM,\n\t\tisServer: !isDOM,\n\t};\n}\n\nexport { useSSR };\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\nvar _react = require(\"react\");\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _excluded = [\"className\", \"children\", \"ratio\", \"style\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } } return target; }\nvar CUSTOM_PROPERTY_NAME = '--aspect-ratio';\nvar DEFAULT_CLASS_NAME = 'react-aspect-ratio-placeholder';\nclass AspectRatio extends _react.Component {\n constructor() {\n super(...arguments);\n this.node = null;\n this.setNode = node => {\n this.node = node;\n };\n }\n componentDidUpdate() {\n if (this.node) {\n var {\n node\n } = this;\n\n // BC for older version of React https://github.com/facebook/react/issues/6411\n // check if React support custom property AFTER\n var customPropertyValue = node.style.getPropertyValue(CUSTOM_PROPERTY_NAME);\n if (!customPropertyValue) {\n node.style.setProperty(CUSTOM_PROPERTY_NAME, \"(\" + this.props.ratio + \")\");\n }\n }\n }\n render() {\n var _this$props = this.props,\n {\n className,\n children,\n ratio,\n style\n } = _this$props,\n restProps = _objectWithoutPropertiesLoose(_this$props, _excluded); // eslint-disable-line no-unused-vars\n\n var newStyle = _extends({}, style, {\n // https://github.com/roderickhsiao/react-aspect-ratio/commit/53ec15858ae186c41e70b8c14cc5a5b6e97cb6e3\n [CUSTOM_PROPERTY_NAME]: \"(\" + ratio + \")\"\n });\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(\"div\", _extends({\n className: className,\n ref: this.setNode,\n style: newStyle\n }, restProps, {\n children: children\n }));\n }\n}\nAspectRatio.defaultProps = {\n className: DEFAULT_CLASS_NAME,\n ratio: 1\n};\nvar _default = exports.default = AspectRatio;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\nvar _react = require(\"react\");\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _excluded = [\"className\", \"children\", \"ratio\", \"style\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } } return target; }\nvar CUSTOM_PROPERTY_NAME = '--aspect-ratio';\nvar DEFAULT_CLASS_NAME = 'react-aspect-ratio-placeholder';\nvar AspectRatio = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {\n var {\n className = DEFAULT_CLASS_NAME,\n children,\n ratio = 1,\n style\n } = props,\n restProps = _objectWithoutPropertiesLoose(props, _excluded); // eslint-disable-line no-unused-vars\n\n var newStyle = _extends({}, style, {\n // https://github.com/roderickhsiao/react-aspect-ratio/commit/53ec15858ae186c41e70b8c14cc5a5b6e97cb6e3\n [CUSTOM_PROPERTY_NAME]: \"(\" + ratio + \")\"\n });\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(\"div\", _extends({\n className: className,\n style: newStyle,\n ref: ref\n }, restProps, {\n children: children\n }));\n});\nvar _default = exports.default = AspectRatio;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.AspectRatio = void 0;\nvar _react = _interopRequireDefault(require(\"./react-15.6\"));\nvar _reactLatest = _interopRequireDefault(require(\"./react-latest\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar _default = exports.default = _react.default; // use before react 15.6\nvar AspectRatio = exports.AspectRatio = _reactLatest.default;","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import type {\n\tCloudinaryImageCrop,\n\tCloudinaryImageFormat,\n\tCloudinaryResponsiveImageProps,\n} from \"../../hooks/useImage\";\nimport type {\n\tCloudinaryDefaults,\n\tImageDecoding,\n\tImageLoading,\n} from \"../../types/core\";\nimport type { CSSProperties } from \"react\";\n\nimport * as React from \"react\";\nimport { AspectRatio } from \"react-aspect-ratio\";\n\nimport \"react-aspect-ratio/aspect-ratio.css\";\nimport { useImage, useSite } from \"../../hooks\";\n\nexport const internalDefaults = {\n\tdomain: \"https://res.cloudinary.com\",\n\tuploadFolder: \"image/upload\",\n\tfallback404ImageId: \"dx-placeholders/fallback-404-image\",\n\tquality: 51,\n\tcrop: \"fill\",\n\tgravity: \"faces:center\",\n\tformat: \"auto\",\n\tloading: \"lazy\",\n\tbackgroundLazy: false,\n\tdecoding: \"auto\",\n\tresponsive: [{ breakpoint: null, width: \"320px\" }],\n};\n\n/**\n * <CloudinaryImage>\n *\n * @deprecated This component will be removed from Griddo in the future.\n */\nfunction CloudinaryImage(props: CloudinaryImageProps) {\n\tconst {\n\t\talt,\n\t\twidth,\n\t\theight,\n\t\tratio,\n\t\tfixed,\n\t\tpublicId,\n\t\tsrc,\n\t\tobjectFit = \"cover\",\n\t} = props;\n\n\tconst { cloudinaryDefaults } = useSite();\n\n\tconst imageConfig = {\n\t\t...internalDefaults,\n\t\t...cloudinaryDefaults,\n\t\t...props,\n\t} as CloudinaryDefaults;\n\n\tconst {\n\t\tsrcSet,\n\t\tsizes,\n\t\tsrc: customSrc,\n\t} = useImage({\n\t\tcrop: imageConfig.crop,\n\t\tformat: imageConfig.format,\n\t\tgravity: imageConfig.gravity,\n\t\tquality: imageConfig.quality,\n\t\tsizes: imageConfig.sizes,\n\t\tresponsive: imageConfig.responsive,\n\t\tar: ratio,\n\t\tpublicId: publicId,\n\t});\n\n\tconst commonImageProps = {\n\t\talt: alt,\n\t\twidth: width,\n\t\theight: height,\n\t\tloading: imageConfig.loading,\n\t\tstyle: { objectFit: objectFit },\n\t\tdecoding: imageConfig.decoding,\n\t};\n\n\tconst srcProps = {\n\t\t...commonImageProps,\n\t\tsrc,\n\t};\n\n\tconst publicIdProps = {\n\t\t...commonImageProps,\n\t\tsrcSet,\n\t\tsizes,\n\t\tsrc: customSrc,\n\t};\n\n\tconst imgProps = src ? srcProps : publicIdProps;\n\n\tconst Image = () => <img {...imgProps} />;\n\n\treturn fixed ? (\n\t\t<Image />\n\t) : (\n\t\t<AspectRatio\n\t\t\tratio={ratio || 1}\n\t\t\tstyle={{ maxWidth: \"100%\", alignSelf: \"normal\" }}\n\t\t>\n\t\t\t<Image />\n\t\t</AspectRatio>\n\t);\n}\n\nexport interface CloudinaryImageProps {\n\talt?: string;\n\twidth?: string;\n\theight?: string;\n\tratio?: number | string;\n\tfixed?: boolean;\n\tpublicId?: string;\n\tsrc?: string;\n\tobjectFit?: CSSProperties[\"objectFit\"];\n\tquality?: number;\n\tcrop?: CloudinaryImageCrop;\n\tgravity?: string;\n\tformat?: CloudinaryImageFormat;\n\tloading?: ImageLoading;\n\tbackgroundLazy?: boolean;\n\tdecoding?: ImageDecoding;\n\tsizes?: string;\n\tresponsive?: Array<CloudinaryResponsiveImageProps>;\n}\n\nexport { CloudinaryImage };\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport * as React from \"react\";\n\nimport { useImage, useSite } from \"../../hooks\";\nimport { fillIntArray, rndHash } from \"../../utils/images\";\nimport { internalDefaults } from \"../CloudinaryImage\";\n\nimport \"./styles.css\";\n\n/**\n * @deprecated This component will be removed from Griddo in the future.\n */\nfunction CloudinaryBackgroundImage({\n\tbackgroundRepeat = \"no-repeat\",\n\tbackgroundSize = \"cover\",\n\tbackgroundPosition = \"50% 50%\",\n\tchildren,\n\toverlayColor = null,\n\toverlayOpacity = 0,\n\toverlayTransition = \"2s\",\n\tratio,\n\tpublicId,\n\tsrc,\n\tcustomLazyClassName = \"lazy\",\n\tlazy,\n\t...props\n}) {\n\tconst { cloudinaryDefaults } = useSite();\n\n\tconst imageConfig = {\n\t\t...cloudinaryDefaults,\n\t\t...internalDefaults,\n\t\t...props,\n\t\tbackgroundLazy:\n\t\t\tcloudinaryDefaults.backgroundLazy ||\n\t\t\tinternalDefaults.backgroundLazy ||\n\t\t\tlazy,\n\t};\n\n\tconst { srcSetURL } = useImage({\n\t\tresponsive: [...imageConfig.responsive],\n\t\tquality: imageConfig.quality,\n\t\tcrop: imageConfig.crop,\n\t\tgravity: imageConfig.gravity,\n\t\tformat: imageConfig.format,\n\t\tpublicId: publicId,\n\t\tar: ratio,\n\t});\n\n\tconst SRCSET = src ? [src] : srcSetURL;\n\tconst BREAKPOINTS = src\n\t\t? []\n\t\t: imageConfig.responsive.map((entry) => entry.breakpoint);\n\tconst CLASSNAME_HASHED = `Griddo-BgImage--${rndHash()}`;\n\tconst LAZY_CLASSNAME = imageConfig.backgroundLazy ? customLazyClassName : \"\";\n\n\tconst MEDIA_QUERIES = fillIntArray(SRCSET.length - 1, 1)\n\t\t.map((idx) => {\n\t\t\treturn `@media (min-width: ${BREAKPOINTS[idx]}) {\n .${CLASSNAME_HASHED} {\n background-image: url(${SRCSET[idx]});\n }\n }\n `;\n\t\t})\n\t\t.join(\"\");\n\n\treturn (\n\t\t<>\n\t\t\t<style\n\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t__html: `\n\n .${CLASSNAME_HASHED} {\n background-repeat: ${backgroundRepeat};\n background-position: ${backgroundPosition};\n background-size: ${backgroundSize};\n background-image: url(${SRCSET[0]});\n }\n\n ${MEDIA_QUERIES}\n\n .${CLASSNAME_HASHED}::before {\n transition: all ${overlayTransition} ease;\n background-color: rgba(0, 0, 0, ${overlayOpacity});\n ${\n\t\t\t\t\toverlayColor\n\t\t\t\t\t\t? `\n background-color: ${overlayColor};\n opacity: ${overlayOpacity};\n `\n\t\t\t\t\t\t: \"\"\n\t\t\t\t}\n }`,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<div className={`Griddo-BgImage ${CLASSNAME_HASHED} ${LAZY_CLASSNAME}`}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport { CloudinaryBackgroundImage };\n","import type { SVGProps } from \"react\";\n\nimport * as React from \"react\";\n\nconst SvgDelete = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={24}\n\t\theight={24}\n\t\tfill=\"none\"\n\t\trole=\"img\"\n\t\taria-label=\"Delete\"\n\t\t{...props}\n\t>\n\t\t<path d=\"M16 9v10H8V9h8zm-1.5-6h-5l-1 1H5v2h14V4h-3.5l-1-1zM18 7H6v12c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7z\" />\n\t</svg>\n);\n\nexport default SvgDelete;\n","import type { SVGProps } from \"react\";\n\nimport * as React from \"react\";\n\nconst SvgDuplicate = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={24}\n\t\theight={24}\n\t\tfill=\"none\"\n\t\trole=\"img\"\n\t\taria-label=\"Duplicate\"\n\t\t{...props}\n\t>\n\t\t<path d=\"M12.3254 13.9H14V11.8246H16.0754V10.1746H14V8.0998H12.3254V10.1746H10.2752V11.8246H12.3254V13.9ZM8.0004 19.675C7.5504 19.675 7.1586 19.5082 6.825 19.1746C6.4918 18.8414 6.3252 18.4498 6.3252 17.9998V3.6746C6.3252 3.2246 6.4918 2.833 6.825 2.4998C7.1586 2.1666 7.5504 2 8.0004 2H16.125L20.0002 5.8746V17.9998C20.0002 18.4498 19.8336 18.8414 19.5004 19.1746C19.1668 19.5082 18.775 19.675 18.325 19.675H8.0004ZM8.0004 17.9998H18.325V6.6246L15.3 3.6746H8.0004V17.9998ZM4.6752 22.9996C4.2252 22.9996 3.8336 22.833 3.5004 22.4998C3.1668 22.1666 3 21.775 3 21.325V6.3496H4.6752V21.325H15.6254V22.9996H4.6752ZM8.0004 17.9998V3.6746V7.6246V17.9998Z\" />\n\t</svg>\n);\n\nexport default SvgDuplicate;\n","import * as React from \"react\";\n\nimport SvgDelete from \"./svg/Delete\";\nimport SvgDuplicate from \"./svg/Duplicate\";\nimport { SiteContext } from \"../../../contexts\";\n\nimport \"./style.css\";\n\n/**\n * <Wrapper>\n */\nconst Wrapper = (props: WrapperProps) => {\n\tconst componentRef = React.useRef<HTMLSpanElement>(null);\n\tconst [wrapperHeight, setWrapperHeight] = React.useState(0);\n\tconst { selectEditorID, selectHoverEditorID, moduleActions } =\n\t\tReact.useContext(SiteContext);\n\n\tconst {\n\t\tselectedEditorID,\n\t\teditorID,\n\t\tcomponent,\n\t\tchildren,\n\t\tisSelectionAllowed,\n\t\ttype,\n\t} = props;\n\n\tconst isNavigationModule = !!type && [\"header\", \"footer\"].includes(type);\n\n\tReact.useEffect(() => {\n\t\tif (!!componentRef && componentRef.current) {\n\t\t\tsetWrapperHeight(componentRef.current.scrollHeight);\n\t\t}\n\t}, [children]);\n\n\tReact.useEffect(() => {\n\t\tisSelected && scrollToComponent();\n\t}, [componentRef]);\n\n\tconst cb = React.useCallback(\n\t\t(entries: IntersectionObserverEntry[]) => {\n\t\t\tentries.forEach((entry) => {\n\t\t\t\tif (entry.isIntersecting && selectHoverEditorID && editorID) {\n\t\t\t\t\tselectHoverEditorID(editorID);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t[selectHoverEditorID, editorID],\n\t);\n\n\tconst ioConfiguration = {\n\t\trootMargin: \"-30% 0% -70% 0%\",\n\t\tthreshold: 0,\n\t};\n\n\tconst observer = new IntersectionObserver(cb, ioConfiguration);\n\n\tReact.useEffect(() => {\n\t\tif (componentRef.current) {\n\t\t\tobserver.observe(componentRef.current);\n\t\t}\n\t\treturn () => {\n\t\t\tif (componentRef.current) {\n\t\t\t\tobserver.unobserve(componentRef.current);\n\t\t\t}\n\t\t};\n\t}, [componentRef, observer]);\n\n\tconst handleClick = (e: React.SyntheticEvent) => {\n\t\tif (\n\t\t\t(!editorID && editorID !== 0) ||\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\t!isSelectionAllowed\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tselectEditorID && selectEditorID(props, undefined, e);\n\t};\n\n\tconst scrollToComponent = () => {\n\t\tif (!componentRef.current) return;\n\t\tconst pos = componentRef.current.style.position;\n\t\tconst top = componentRef.current.style.top;\n\t\tcomponentRef.current.style.position = \"relative\";\n\t\tcomponentRef.current.style.top = \"-34px\";\n\t\tcomponentRef.current.scrollIntoView({\n\t\t\tbehavior: \"smooth\",\n\t\t\tblock: \"nearest\",\n\t\t});\n\t\tcomponentRef.current.style.top = top;\n\t\tcomponentRef.current.style.position = pos;\n\n\t\tconst offsetTop = componentRef.current.offsetTop;\n\t\tif (offsetTop === 0) {\n\t\t\tcomponentRef.current.style.marginTop = \"36px\";\n\t\t}\n\t};\n\n\tconst isSelected = !!selectedEditorID && selectedEditorID === editorID;\n\tisSelected && scrollToComponent();\n\n\tconst removeItem = (e: React.SyntheticEvent) => {\n\t\te.stopPropagation();\n\t\tmoduleActions && editorID && moduleActions.deleteModuleAction(editorID);\n\t};\n\n\tconst duplicateItem = (e: React.SyntheticEvent) => {\n\t\te.stopPropagation();\n\t\tmoduleActions && editorID && moduleActions.duplicateModuleAction(editorID);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{component === \"Header\" && (\n\t\t\t\t<style\n\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t__html: `\n [data-text=\"Header\"].--selected::before {\n height: ${wrapperHeight - 8}px;\n }`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{isNavigationModule && (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`${isSelected ? \"--selected-header-footer\" : \"\"}`}\n\t\t\t\t\tdata-text={component}\n\t\t\t\t\tref={componentRef}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t{!isNavigationModule && (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`${isSelected ? \"--selected\" : \"\"}`}\n\t\t\t\t\tdata-text={component}\n\t\t\t\t\tref={componentRef}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={`${\n\t\t\t\t\t\t\tisSelected ? \"--selected-nameplate\" : \"--not-selected-nameplate\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{component}\n\t\t\t\t\t\t<span className=\"span-svg-action\" onClick={duplicateItem}>\n\t\t\t\t\t\t\t<SvgDuplicate className=\"svg-action\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span className=\"span-svg-action\" onClick={removeItem}>\n\t\t\t\t\t\t\t<SvgDelete className=\"svg-action\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t{children}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\ninterface WrapperProps {\n\tselectedEditorID: number | null;\n\teditorID?: number;\n\tcomponent: string;\n\ttype?: string;\n\tparentEditorID?: number;\n\tisSelectionAllowed: boolean;\n\tchildren: JSX.Element;\n}\n\nexport { Wrapper as ComponentWrapper };\n","import * as React from \"react\";\n\nimport { SiteContext } from \"../../../contexts\";\nimport \"./styles.css\";\n\ninterface FormWrapperProps {\n\tselectedEditorID: number | null;\n\teditorID?: number;\n\tcomponent: string;\n\tisSelectionAllowed: boolean;\n\tchildren: JSX.Element;\n}\n\nconst FormWrapper = (props: FormWrapperProps) => {\n\tconst { selectEditorID } = React.useContext(SiteContext);\n\n\tconst {\n\t\tselectedEditorID,\n\t\teditorID,\n\t\tcomponent,\n\t\tisSelectionAllowed,\n\t\tchildren,\n\t} = props;\n\n\tconst handleClick = (e: React.SyntheticEvent) => {\n\t\tif (\n\t\t\t(!editorID && editorID !== 0) ||\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\t!isSelectionAllowed\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tselectEditorID && selectEditorID(props, undefined, e);\n\t};\n\n\tconst isSelected = !!selectedEditorID && selectedEditorID === editorID;\n\n\treturn (\n\t\t<span\n\t\t\tclassName={isSelected ? \"fw-selected\" : \"\"}\n\t\t\tdata-text={component}\n\t\t\tonClick={handleClick}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName={\n\t\t\t\t\tisSelected ? \"fw-selected-nameplate\" : \"fw-not-selected-nameplate\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{component}\n\t\t\t</span>\n\t\t\t{children}\n\t\t</span>\n\t);\n};\n\nexport { FormWrapper };\n","import type { FC } from \"react\";\n\nimport * as React from \"react\";\n\nimport { ComponentWrapper } from \"./ComponentWrapper\";\nimport { FormWrapper } from \"./FormWrapper\";\nimport { FormProvider, SessionProvider } from \"../../contexts\";\nimport { useForm, useNavigation, useSite } from \"../../hooks\";\n\nexport interface ComponentProps {\n\t// libComponents: Record<\n\t// \tstring,\n\t// \tReact.FC<Omit<ComponentProps, \"libComponents\">>\n\t// >;\n\t// TODO: remove this any, maybe ths will require refactor the\n\t// component/componenWrapper/preview components.\n\tlibComponents: Record<string, any>;\n\teditorID?: number;\n\tcomponent: string;\n\ttype?: string;\n\tparentEditorID?: number;\n\t[key: string]: unknown;\n}\n\n/**\n * Griddo core component to render dynamically a component/module (using the\n * `component` prop) from the `libComponents` (a list of React components) with\n * the props we provide to it\n *\n * @example\n * import Hero from './Hero'\n * import CardCollection from './CardCollection'\n * const moduleList = { Hero, CardCollection }\n *\n * // Render the Hero component from `moduleList` with `props`\n * <Component\n * libComponents={moduleList}\n * {{ component: 'Hero', ...props }}\n * />\n */\nfunction Component({ libComponents, ...props }: ComponentProps) {\n\tconst { component, editorID, type = \"\", parentEditorID } = props;\n\tconst { renderer } = useSite();\n\tconst isNavigation = useNavigation()?.isNavigation;\n\tconst isForm = useForm()?.isForm;\n\tconst selectedEditorID =\n\t\trenderer === \"editor\" && typeof window !== \"undefined\"\n\t\t\t? Number.parseInt(localStorage.getItem(\"selectedID\") || \"0\")\n\t\t\t: null;\n\n\tconst LibComponent = getComponent(libComponents, {\n\t\t...props,\n\t});\n\n\tconst isNavigationInnerModule =\n\t\tisNavigation && ![\"header\", \"footer\"].includes(type);\n\n\tconst componentWrapper = (\n\t\t<ComponentWrapper\n\t\t\tselectedEditorID={selectedEditorID}\n\t\t\tisSelectionAllowed={!isNavigationInnerModule && !isForm}\n\t\t\teditorID={editorID}\n\t\t\tcomponent={component}\n\t\t\ttype={type}\n\t\t\tparentEditorID={parentEditorID}\n\t\t>\n\t\t\t{LibComponent ? <LibComponent {...props} /> : <></>}\n\t\t</ComponentWrapper>\n\t);\n\n\t// AX\n\tif (renderer === \"editor\") {\n\t\treturn (\n\t\t\t<SessionProvider>\n\t\t\t\t{type === \"formTemplate\" ? (\n\t\t\t\t\t<FormProvider>{componentWrapper}</FormProvider>\n\t\t\t\t) : (\n\t\t\t\t\t<>{componentWrapper}</>\n\t\t\t\t)}\n\t\t\t</SessionProvider>\n\t\t);\n\t}\n\n\t// AX preview\n\tif (renderer === \"preview\")\n\t\treturn (\n\t\t\t<SessionProvider>\n\t\t\t\t{LibComponent && <LibComponent {...props} />}\n\t\t\t</SessionProvider>\n\t\t);\n\n\t// AX forms\n\tif (renderer === \"forms\") {\n\t\treturn (\n\t\t\t<SessionProvider>\n\t\t\t\t<FormWrapper\n\t\t\t\t\tselectedEditorID={selectedEditorID}\n\t\t\t\t\tisSelectionAllowed={!isNavigationInnerModule}\n\t\t\t\t\teditorID={editorID}\n\t\t\t\t\tcomponent={component}\n\t\t\t\t>\n\t\t\t\t\t{LibComponent ? <LibComponent {...props} /> : <></>}\n\t\t\t\t</FormWrapper>\n\t\t\t</SessionProvider>\n\t\t);\n\t}\n\n\t// CX\n\treturn LibComponent && <LibComponent {...props} />;\n}\n\nfunction getComponent(\n\t// components es un objeto con key/value donde value es un componente de React\n\tcomponents: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>,\n\t// props pasadas al componente, no sabemos qué se pasará\n\tprops: {\n\t\tcomponent: string;\n\t\t[key: string]: unknown;\n\t},\n) {\n\tconst componentName = props.component;\n\tconst isComponent = typeof components[componentName] !== \"undefined\";\n\n\tif (isComponent) {\n\t\treturn components[componentName];\n\t}\n\n\tconsole.warn(\n\t\t`The component <${componentName}> doesn't exist inside ${JSON.stringify(\n\t\t\tObject.keys(components),\n\t\t)}`,\n\t);\n\n\treturn null;\n}\n\nexport { Component, getComponent };\n","import * as React from \"react\";\n\nimport { FormContext } from \"../contexts\";\n\n/**\n * `useForm()`\n */\nfunction useForm() {\n\treturn React.useContext(FormContext);\n}\n\nexport { useForm };\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport type { Core } from \"../..\";\n\nimport * as React from \"react\";\n\nimport { useSite } from \"../../hooks\";\nimport {\n\tgetGriddoDamURIWithParams,\n\tgetDomainFromDamUrl,\n\tgetDamIdFromDamUrl,\n} from \"../../utils/images\";\n\nimport \"./styles.css\";\n\nconst LAZY_CLASS_NAME = \"griddo-background-image--lazy\";\n\nexport interface GriddoBackgroundImageProps {\n\tformat?: Core.ImageFormats;\n\tbackgroundSize?: Core.ImageCropType;\n\tveilOpacity?: React.CSSProperties[\"opacity\"];\n\tveilColor?: React.CSSProperties[\"color\"];\n\tveilTransitionTime?: React.CSSProperties[\"animationDuration\"];\n\tveilTransitionEasing?: React.CSSProperties[\"animationTimingFunction\"];\n\turl?: string;\n\tsrc?: string;\n\tresponsive?: Array<\n\t\tOmit<Core.ResponsiveImageProps, \"breakpoint\"> & { customProperty: string }\n\t>;\n\tquality?: number;\n\tlazyOffset?: string;\n\tloading?: Core.ImageLoading;\n\tchildren?: React.ReactNode | Array<React.ReactNode>;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\n/**\n * <GriddoBackgroundImage>\n */\nconst GriddoBackgroundImage = React.forwardRef(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tformat,\n\t\t\tbackgroundSize,\n\t\t\tveilOpacity = 0.5,\n\t\t\tveilColor = \"#000033\",\n\t\t\tveilTransitionTime = \"2s\",\n\t\t\tveilTransitionEasing = \"easing\",\n\t\t\turl,\n\t\t\tsrc,\n\t\t\tresponsive,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tquality,\n\t\t\tlazyOffset = \"200px\",\n\t\t\tloading,\n\t\t}: GriddoBackgroundImageProps,\n\t\tref,\n\t) => {\n\t\tif (!url) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { griddoDamDefaults } = useSite();\n\t\tconst thisRef = React.useRef(null);\n\t\tconst domain = getDomainFromDamUrl(url);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!IntersectionObserver) {\n\t\t\t\tthisRef.current?.classList.remove(LAZY_CLASS_NAME);\n\t\t\t} else if (thisRef.current) {\n\t\t\t\tlet observer = new IntersectionObserver(\n\t\t\t\t\t(entries) =>\n\t\t\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\t\t\t\tthisRef.current?.classList.remove(LAZY_CLASS_NAME);\n\t\t\t\t\t\t\t\tobserver = observer.disconnect();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t{ rootMargin: `0px 0px ${lazyOffset} 0px` },\n\t\t\t\t);\n\t\t\t\tobserver.observe(thisRef.current);\n\n\t\t\t\treturn () => (observer = observer && observer.disconnect());\n\t\t\t}\n\t\t}, []);\n\n\t\t// url, imageConfig, ...props\n\t\tconst backgroundImageResponsive =\n\t\t\tresponsive &&\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.keys(responsive).map((key) => {\n\t\t\t\t\tconst griddoDamUrl = getGriddoDamURIWithParams({\n\t\t\t\t\t\tdamId: getDamIdFromDamUrl(url),\n\t\t\t\t\t\timageConfig: {\n\t\t\t\t\t\t\t...griddoDamDefaults,\n\t\t\t\t\t\t\tquality,\n\t\t\t\t\t\t\tformat,\n\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\t...responsive[key],\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tconst fullImagePath = {\n\t\t\t\t\t\turl: `url(\"${griddoDamUrl}\")`,\n\t\t\t\t\t\tcustomProperty: responsive[key].customProperty,\n\t\t\t\t\t};\n\t\t\t\t\treturn [key, fullImagePath];\n\t\t\t\t}),\n\t\t\t);\n\n\t\tconst resimages =\n\t\t\tresponsive &&\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.keys(responsive).map((key, idx) => {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tbackgroundImageResponsive[key].customProperty\n\t\t\t\t\t\t\t? `${backgroundImageResponsive[key].customProperty}`\n\t\t\t\t\t\t\t: `--image-${idx}`,\n\n\t\t\t\t\t\tbackgroundImageResponsive[key].url,\n\t\t\t\t\t];\n\t\t\t\t}),\n\t\t\t);\n\n\t\tconst allImages = src ? { \"--image-default\": `url(${src})` } : resimages;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={thisRef}\n\t\t\t\tdata-griddo=\"loading-ref\"\n\t\t\t\tclassName={`${loading === \"lazy\" ? LAZY_CLASS_NAME : \"\"}`}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-griddo=\"image-ref\"\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={`${className} griddo-background-image`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\"--veil-opacity\": `${veilColor}${Math.round(\n\t\t\t\t\t\t\t255 / (1 / veilOpacity),\n\t\t\t\t\t\t).toString(16)}`,\n\t\t\t\t\t\t\"--veil-transition-time\": veilTransitionTime,\n\t\t\t\t\t\t\"--veil-transition-easing\": veilTransitionEasing,\n\t\t\t\t\t\t\"--background-size\": backgroundSize,\n\t\t\t\t\t\t...allImages,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nGriddoBackgroundImage.displayName = \"GriddoBackgroundImage\";\n\nexport { GriddoBackgroundImage };\n","import type {\n\tFetchPriority,\n\tImageCropType,\n\tImageDecoding,\n\tImageLoading,\n\tImagePosition,\n\tImageTransform,\n\tResponsiveImageProps,\n} from \"../../types/core\";\n\nimport * as React from \"react\";\nimport { AspectRatio } from \"react-aspect-ratio\";\n\nimport \"react-aspect-ratio/aspect-ratio.css\";\nimport { useGriddoImage, useSite } from \"../../hooks\";\n\nimport \"./styles.css\";\n\n/**\n * Renders an image from the **Griddo** cdn.\n * Also return a ref with the `<picture>` tag.\n * @see [Documentation](https://www.notion.so/griddoio/GriddoImage-a3973298b4e7447884f29185dae2d07e)\n *\n * @example\n * <GriddoImage\n * url=\"https://images.griddo.io/butterfly\"\n * width=\"640px\"\n * height=\"480px\"\n * quality={75}\n * />\n */\nconst GriddoImage = React.forwardRef<HTMLPictureElement, GriddoImageProps>(\n\t(\n\t\t{\n\t\t\twidth,\n\t\t\theight,\n\t\t\tratio,\n\t\t\tfixed,\n\t\t\turl,\n\t\t\tloading,\n\t\t\tdecoding,\n\t\t\tresponsive,\n\t\t\tquality,\n\t\t\tcrop,\n\t\t\tformat,\n\t\t\tformats,\n\t\t\tposition,\n\t\t\ttransforms,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tif (!url) return null;\n\n\t\tconst { griddoDamDefaults } = useSite() || {};\n\n\t\tconst imageConfig = {\n\t\t\t// ...griddoDamDefaults,\n\t\t\tloading: loading || griddoDamDefaults?.loading,\n\t\t\tdecoding: decoding || griddoDamDefaults?.decoding,\n\t\t\tquality: quality || griddoDamDefaults?.quality,\n\t\t\tcrop: crop || griddoDamDefaults?.crop,\n\t\t\tformat: format,\n\t\t\tformats: formats || griddoDamDefaults?.formats,\n\t\t\tposition: position,\n\t\t\ttransforms: transforms,\n\t\t};\n\n\t\t// Get data necesary for the image component\n\t\tconst { src, sizes, avif, jpeg, gif, webp, svg } = useGriddoImage({\n\t\t\turl: url,\n\t\t\tcrop: imageConfig.crop,\n\t\t\tformat: imageConfig.format,\n\t\t\tquality: imageConfig.quality,\n\t\t\tresponsive: responsive,\n\t\t\tposition: imageConfig.position,\n\t\t\ttransforms: imageConfig.transforms,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t});\n\n\t\tconst GifImage = () => (\n\t\t\t<img\n\t\t\t\tdata-image=\"griddo\"\n\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\tsrcSet={responsive && gif?.srcSet?.join(\",\")}\n\t\t\t\tsizes={responsive && sizes}\n\t\t\t\tsrc={gif?.srcSetURL && gif.srcSetURL[0]}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\n\t\tconst SvgImage = () => (\n\t\t\t<img\n\t\t\t\tdata-image=\"griddo\"\n\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\tsrc={svg?.srcSetURL && svg.srcSetURL[0]}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\n\t\tconst Picture = () => {\n\t\t\treturn (\n\t\t\t\t<picture ref={ref}>\n\t\t\t\t\t{/* avif */}\n\t\t\t\t\t{imageConfig.formats?.includes(\"avif\") && (\n\t\t\t\t\t\t<source\n\t\t\t\t\t\t\tsrcSet={avif?.srcSet?.join(\",\")}\n\t\t\t\t\t\t\tsizes={responsive && sizes}\n\t\t\t\t\t\t\ttype=\"image/avif\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* webp */}\n\t\t\t\t\t{imageConfig.formats?.includes(\"webp\") && (\n\t\t\t\t\t\t<source\n\t\t\t\t\t\t\tsrcSet={webp?.srcSet?.join(\",\")}\n\t\t\t\t\t\t\tsizes={responsive && sizes}\n\t\t\t\t\t\t\ttype=\"image/webp\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* jpeg */}\n\t\t\t\t\t<img\n\t\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\t\tsizes={responsive && sizes}\n\t\t\t\t\t\tsrcSet={jpeg?.srcSet?.join(\",\")}\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t/>\n\t\t\t\t</picture>\n\t\t\t);\n\t\t};\n\n\t\tif (!url) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (format === \"svg\") {\n\t\t\treturn <SvgImage />;\n\t\t}\n\n\t\tif (format === \"gif\") {\n\t\t\treturn <GifImage />;\n\t\t}\n\n\t\tif (fixed || !responsive) {\n\t\t\treturn <Picture />;\n\t\t}\n\n\t\treturn (\n\t\t\t<AspectRatio\n\t\t\t\tratio={ratio || 1}\n\t\t\t\tstyle={{ maxWidth: \"100%\", alignSelf: \"normal\" }}\n\t\t\t>\n\t\t\t\t<Picture />\n\t\t\t</AspectRatio>\n\t\t);\n\t},\n);\n\n// Omit src, srcSet and sizes, as GriddoImage component will add them and it\n// doesn't need to be extends from React types.\n// Also omit, width and height because GriddoImage only accepts strings with\n// 'px' format and the React.ComponentPropsWithRef<\"img\"> an be numbers too.\nexport interface GriddoImageCommonProps\n\textends Omit<\n\t\tReact.ComponentPropsWithRef<\"img\">,\n\t\t\"src\" | \"srcSet\" | \"sizes\" | \"width\" | \"height\"\n\t> {\n\tcrop?: ImageCropType;\n\tfetchpriority?: FetchPriority;\n\theight?: string;\n\tposition?: ImagePosition;\n\turl?: string;\n\twidth?: string;\n\tratio?: number;\n\tfixed?: boolean;\n\tloading?: ImageLoading;\n\tdecoding?: ImageDecoding;\n\tresponsive?: Array<ResponsiveImageProps>;\n\tquality?: number;\n\tformats?: Array<\"webp\" | \"avif\">;\n\ttransforms?: ImageTransform;\n}\n\nexport interface GriddoImageSvg extends GriddoImageCommonProps {\n\t// format is used to check if is a GriddoImageSvg image\n\tformat?: \"svg\";\n\tresponsive?: never;\n\tquality?: never;\n\tformats?: never;\n\ttransforms?: never;\n\tratio?: never;\n}\n\nexport interface GriddoImageGif extends GriddoImageCommonProps {\n\t// format is used to check if is a GriddoImageGif image\n\tformat?: \"gif\";\n\tresponsive?: never;\n\tquality?: never;\n\tformats?: never;\n\ttransforms?: never;\n}\n\nexport interface GriddoImageJpgWebpAvif extends GriddoImageCommonProps {\n\t// format is used to check if is a GriddoImageJpgWebpAvif image\n\t/** Format is set automatically based on formats prop */\n\tformat?: never;\n}\n\nexport type GriddoImageProps =\n\t| GriddoImageJpgWebpAvif\n\t| GriddoImageGif\n\t| GriddoImageSvg;\n\nexport { GriddoImage };\n","import type { Source } from \"./types\";\nimport type { Core, Fields } from \"../..\";\nimport type {\n\tGriddoDamDefaults,\n\tImageCropType,\n\tImageDecoding,\n\tImageFormats,\n\tImageLoading,\n\tImagePosition,\n\tImageTransform,\n} from \"../../types/core\";\n\nimport {\n\tgetDamIdFromDamUrl,\n\tgetDomainFromDamUrl,\n\tgetGriddoDamURIWithParams,\n\tremoveUnit,\n} from \"../../utils/images\";\n\ninterface GetGriddoArtDirectionImage {\n\tsources: Array<Source>;\n\twidth?: string;\n\theight?: string;\n\twidths?: Array<string>;\n\tgriddoDamDefaults?: GriddoDamDefaults;\n\tcrop?: Core.ImageCropType;\n\tformats?: Array<\"avif\" | \"webp\">;\n\tquality?: number;\n\tposition?: Core.ImagePosition;\n\ttransforms?: Core.ImageTransform;\n\tloading?: Core.ImageLoading;\n\tdecoding?: Core.ImageDecoding;\n\timageField?: Fields.Image;\n\tsizes?: string;\n}\n\nconst MIME_TYPES = {\n\tjpg: \"image/jpeg\",\n\tjpeg: \"image/jpeg\",\n\tgif: \"image/gif\",\n\tsvg: \"image/svg+xml\",\n\tpng: \"image/png\",\n\tavif: \"image/avif\",\n\twebp: \"image/webp\",\n};\n\nfunction getGriddoArtDirectionImageSources(props: GetGriddoArtDirectionImage) {\n\tconst {\n\t\tgriddoDamDefaults,\n\t\tsources,\n\t\twidths,\n\t\tsizes: rootSizes,\n\t\ttransforms: rootTransforms,\n\t\tquality: rootQuality,\n\t\twidth: rootWidth,\n\t\theight: rootHeight,\n\t\tposition: rootPosition,\n\t\tcrop: rootCrop,\n\t\timageField: rootImageField,\n\t} = props;\n\n\tconst sourcesRawData = sources.map((source) => {\n\t\t// Explicación de root:\n\t\t// Se refiere a la prop en el raíz del componente y no en cada source del array sources.\n\t\t// <GriddoImageExp width=\"300px\" /> <---- ese width es un rootWidth\n\t\tconst domain = getDomainFromDamUrl(\n\t\t\tsource.image?.url || rootImageField?.url || \"\",\n\t\t);\n\t\tconst damId = getDamIdFromDamUrl(\n\t\t\tsource.image?.url || rootImageField?.url || \"\",\n\t\t);\n\n\t\t// This object contains every aspect of the image configuration\n\t\tconst imageConfig: ImageConfigExperimental = {\n\t\t\t...griddoDamDefaults,\n\t\t\t...props,\n\t\t\tdomain: domain,\n\t\t\tformat: \"jpeg\",\n\t\t\ttransforms: source.transforms || rootTransforms || undefined,\n\t\t\tquality: source.quality || rootQuality || griddoDamDefaults?.quality,\n\t\t\tposition: source.position || rootPosition,\n\t\t\tcrop: source.crop || rootCrop,\n\t\t};\n\n\t\t// Default ratio, this will be override 100%.\n\t\tlet RATIO = 1;\n\t\tlet imgTagWidth = \"\";\n\t\tlet imgTagHeight = \"\";\n\n\t\t// Si hay custom-width and custom-height calculamos el ratio y este\n\t\t// será el ratio final y también usarmos el width/height para el <img>\n\t\tif (source.width && source.height) {\n\t\t\t// Ratio para el srcSet\n\t\t\tRATIO = removeCSSUnits(source.width) / removeCSSUnits(source.height);\n\t\t\t// medidas para el <img>\n\t\t\timgTagWidth = source.width;\n\t\t\timgTagHeight = source.height;\n\t\t}\n\n\t\t// Si no hay width o height y hay imageField o rootImageField...\n\t\tif ((!source.width || !source.height) && (source.image || rootImageField)) {\n\t\t\t// Ratio para el srcSet\n\t\t\t// si está el field del source lo priorizamos vs el field del root\n\t\t\tconst field = source.image || rootImageField || ({} as Fields.Image);\n\t\t\tconst fieldWidth = field.width || 1;\n\t\t\tconst fieldHeight = field.height || 1;\n\t\t\tRATIO = fieldWidth / fieldHeight;\n\t\t\t// medidas para el <img>\n\t\t\t// HAY WIDTH - NO HEIGHT\n\t\t\tif (source.width && !source.height) {\n\t\t\t\timgTagWidth = source.width;\n\t\t\t\tconst fieldWidth = field.width || 1;\n\t\t\t\tconst fieldHeight = field.height || 1;\n\t\t\t\timgTagHeight = `${Math.round(\n\t\t\t\t\tfieldHeight / (fieldWidth / removeCSSUnits(source.width)),\n\t\t\t\t)}px`;\n\t\t\t}\n\t\t\t// NO WIDTH - HAY HEIGHT\n\t\t\tif (!source.width && source.height) {\n\t\t\t\tconst fieldWidth = field.width || 1;\n\t\t\t\tconst fieldHeight = field.height || 1;\n\t\t\t\timgTagWidth = `${Math.round(\n\t\t\t\t\tfieldWidth / (fieldHeight / removeCSSUnits(source.height)),\n\t\t\t\t)}px`;\n\t\t\t\timgTagHeight = source.height;\n\t\t\t}\n\t\t}\n\n\t\t// NO WIDTH - NO HEIGHT\n\t\tif (!source.width && !source.height && !rootImageField) {\n\t\t\tconst field = source.image || rootImageField || ({} as Fields.Image);\n\t\t\tif (rootWidth && rootHeight) {\n\t\t\t\t// Comprobamos si hay un width y un height (ambos) en el root y lo usamos si existe\n\t\t\t\tRATIO = removeCSSUnits(rootWidth) / removeCSSUnits(rootHeight);\n\t\t\t\timgTagWidth = rootWidth;\n\t\t\t\timgTagHeight = rootHeight;\n\t\t\t} else {\n\t\t\t\t// Si no tomamos el del field (root o source) que es obligatorio.\n\t\t\t\tconst fieldWidth = field.width || 1;\n\t\t\t\tconst fieldHeight = field.height || 1;\n\t\t\t\tRATIO = fieldWidth / fieldHeight;\n\t\t\t\timgTagWidth = `${field.width}px`;\n\t\t\t\timgTagHeight = `${field.height}px`;\n\t\t\t}\n\t\t}\n\n\t\t// NO WIDTH - NO HEIGHT - YES IMAGEFIELD\n\t\tif (!source.width && !source.height && source.image) {\n\t\t\tconst sourceImageWidth = source.image.width || 1;\n\t\t\tconst sourceImageHeight = source.image.height || 1;\n\t\t\tRATIO = sourceImageWidth / sourceImageHeight;\n\t\t\timgTagWidth = `${source.image.width}px`;\n\t\t\timgTagHeight = `${source.image.height}px`;\n\t\t}\n\n\t\t// jpgSource es un Array<string> que calcula el SRCSET\n\t\tconst jpgSource = widths?.map((widthValue) => {\n\t\t\treturn (\n\t\t\t\tgetGriddoDamURIWithParams({\n\t\t\t\t\tdamId: damId,\n\t\t\t\t\timageConfig: imageConfig,\n\t\t\t\t\twidth: widthValue,\n\t\t\t\t\theight: `${Math.round(removeCSSUnits(widthValue) / RATIO)}px`,\n\t\t\t\t}) + ` ${removeUnit(widthValue)}w`\n\t\t\t);\n\t\t});\n\n\t\t// sourcesRawData\n\t\treturn {\n\t\t\ttype: MIME_TYPES.jpeg,\n\t\t\tsrcSet: jpgSource,\n\t\t\tsizes: source.sizes || rootSizes,\n\t\t\tmedia: source.media,\n\t\t\twidth: imgTagWidth,\n\t\t\theight: imgTagHeight,\n\t\t\tsrc: getGriddoDamURIWithParams({\n\t\t\t\tdamId: damId,\n\t\t\t\timageConfig: imageConfig,\n\t\t\t\twidth: imgTagWidth || source.width || rootWidth,\n\t\t\t\theight: imgTagHeight || source.height || rootHeight,\n\t\t\t}),\n\t\t};\n\t});\n\n\treturn {\n\t\tjpeg: sourcesRawData,\n\t\twebp: JSON.parse(\n\t\t\tJSON.stringify(sourcesRawData).replaceAll(\"/jpeg\", \"/webp\"),\n\t\t) as typeof sourcesRawData,\n\t\tavif: JSON.parse(\n\t\t\tJSON.stringify(sourcesRawData).replaceAll(\"/jpeg\", \"/avif\"),\n\t\t) as typeof sourcesRawData,\n\t};\n}\n\nexport interface GenerateImageChunkPropsExperimental {\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tformat: ImageFormats;\n}\n\nexport interface UseGriddoImagePropsExperimental\n\textends Omit<ImageConfigExperimental, \"formats\"> {\n\turl?: string;\n}\n\nexport interface ImageConfigExperimental {\n\tblurCSSTransition?: string;\n\tblurSize?: string;\n\tcrop?: ImageCropType;\n\tdecoding?: ImageDecoding;\n\tdomain?: string;\n\tformat?: ImageFormats;\n\tformats?: Array<ImageFormats>;\n\theight?: string;\n\tloading?: ImageLoading;\n\tposition?: ImagePosition;\n\tquality?: number;\n\ttransforms?: ImageTransform;\n\twidth?: string;\n\tsizes?: string;\n\twidths?: Array<string>;\n\tratio?: number;\n}\n\nexport type MIMETypesExperimental =\n\t| \"image/avif\"\n\t| \"image/gif\"\n\t| \"image/jpeg\"\n\t| \"image/png\"\n\t| \"image/svg+xml\"\n\t| \"image/webp\";\n\nexport interface ImageChunkExperimental {\n\ttype: MIMETypesExperimental;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n}\n\nexport interface UseGriddoImageReturnExperimental {\n\ttype?: string;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tsrc?: string;\n\tsizes?: string;\n\twebpFallback?: ImageChunkExperimental;\n\tjpg?: ImageChunkExperimental;\n\tjpeg?: ImageChunkExperimental;\n\twebp?: ImageChunkExperimental;\n\tavif?: ImageChunkExperimental;\n\tpng?: ImageChunkExperimental;\n\tgif?: ImageChunkExperimental;\n\tsvg?: ImageChunkExperimental;\n}\n\nfunction removeCSSUnits(value: string) {\n\tconst match = value.match(/^-?\\d*\\.?\\d+/);\n\tif (match) {\n\t\treturn Number.parseFloat(match[0]);\n\t}\n\treturn 0;\n}\n\nexport {\n\tgetGriddoArtDirectionImageSources as getGriddoArtDirectionImage,\n\tremoveCSSUnits,\n};\n","import type { GriddoImagePropsExperimental } from \"./types\";\n\nimport * as React from \"react\";\n\nimport { getGriddoArtDirectionImage, removeCSSUnits } from \"./utils\";\nimport { useGriddoImageExp, useSite } from \"../../hooks\";\n\n/**\n * EXPERIMENTAL - Renders an image from the Griddo CDN using an imageField.\n * Also return a ref with the `<picture>` element.\n *\n * [GriddoImageExp Reference](https://www.notion.so/griddoio/GriddoImageExp-fdb4ea84ac044b1884f242ac854d9c1d?pvs=4)\n */\nconst GriddoImageExp = React.forwardRef<\n\tHTMLPictureElement,\n\tGriddoImagePropsExperimental\n>(\n\t(\n\t\t{\n\t\t\twidth,\n\t\t\theight,\n\t\t\twidths,\n\t\t\tloading,\n\t\t\tdecoding,\n\t\t\tquality,\n\t\t\tcrop,\n\t\t\tformat,\n\t\t\tformats,\n\t\t\tposition,\n\t\t\ttransforms,\n\t\t\tsizes,\n\t\t\tsources,\n\t\t\timage: imageField,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\t// No hay imageField.url ni sources\n\t\tif (!imageField?.url && !sources) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Computed props\n\t\tconst URL = imageField?.url;\n\t\tlet WIDTH = width || (imageField?.width && `${imageField?.width}px`) || \"\";\n\t\tlet HEIGHT =\n\t\t\theight || (imageField?.height && `${imageField?.height}px`) || \"\";\n\t\tconst POSITION = imageField?.position;\n\t\tconst TITLE = imageField?.title;\n\t\tconst ALT = imageField?.alt;\n\n\t\tif (width && height) {\n\t\t\t// si customWidth si customHeight =>\n\t\t\t// width=customWidth, height=customHeight\n\t\t\tWIDTH = width;\n\t\t\tHEIGHT = height;\n\t\t} else if (!width && height && imageField) {\n\t\t\t// no customWidth si customHeight =>\n\t\t\t// width=computedFieldWidth, height=customHeight\n\t\t\tconst imageFieldWidth = imageField.width || 1;\n\t\t\tconst imageFieldHeight = imageField.height || 1;\n\t\t\tWIDTH = `${Math.round(\n\t\t\t\timageFieldWidth / (imageFieldHeight / removeCSSUnits(height)),\n\t\t\t)}px`;\n\t\t\tHEIGHT = height;\n\t\t} else if (!width && !height && imageField) {\n\t\t\t// no customWidth no customHeight =>\n\t\t\t// width=fieldWidth, height=fieldHeight\n\t\t\tWIDTH = `${imageField.width}px`;\n\t\t\tHEIGHT = `${imageField.height}px`;\n\t\t} else if (width && !height && imageField) {\n\t\t\t// si customWidth no customHeight =>\n\t\t\t// width=customWidth, height=computedCustomHeight\n\t\t\tWIDTH = width;\n\t\t\tconst imageFieldWidth = imageField.width || 1;\n\t\t\tconst imageFieldHeight = imageField.height || 1;\n\t\t\tHEIGHT = `${Math.round(\n\t\t\t\timageFieldHeight / (imageFieldWidth / removeCSSUnits(width)),\n\t\t\t)}px`;\n\t\t} else if (width && !height && !imageField) {\n\t\t\t// si customWidth no customHeight si field\n\t\t\t// CLS!!!\n\t\t\tWIDTH = width;\n\t\t\tHEIGHT = \"\";\n\t\t}\n\n\t\t// Get instance internal || default settings\n\t\tconst { griddoDamDefaults } = useSite();\n\n\t\t// IF has sources is an AD image\n\t\tconst IS_ART_DIRECTION_IMAGE = Array.isArray(sources) && sources.length > 0;\n\n\t\t// Fill Defaults with internals\n\t\tconst internalGriddoDamDefaults = {\n\t\t\twidths: [\n\t\t\t\t\"640px\",\n\t\t\t\t\"750px\",\n\t\t\t\t\"828px\",\n\t\t\t\t\"1080px\",\n\t\t\t\t\"1200px\",\n\t\t\t\t\"1920px\",\n\t\t\t\t\"2048px\",\n\t\t\t\t\"3840px\",\n\t\t\t],\n\t\t\t...griddoDamDefaults,\n\t\t};\n\n\t\t// ---------------------------------------------------------------------\n\t\t// IMAGE CONFIGURATION\n\t\t// Configuration from differents places: Image config internal, default\n\t\t// settings, component props.\n\t\t// ---------------------------------------------------------------------\n\t\tconst imageConfig = {\n\t\t\tloading: loading || internalGriddoDamDefaults?.loading,\n\t\t\tdecoding: decoding || internalGriddoDamDefaults?.decoding,\n\t\t\tquality: quality || internalGriddoDamDefaults?.quality,\n\t\t\tcrop: crop || internalGriddoDamDefaults?.crop,\n\t\t\tformats: formats || internalGriddoDamDefaults?.formats,\n\t\t\twidths: widths || internalGriddoDamDefaults?.widths,\n\t\t\tformat: format,\n\t\t\tposition: position || POSITION,\n\t\t\ttransforms: transforms,\n\t\t};\n\n\t\t// ---------------------------------------------------------------------\n\t\t// Single image raw data.\n\t\t// ---------------------------------------------------------------------\n\t\tconst { src, avif, jpeg, gif, webp, svg } = useGriddoImageExp({\n\t\t\tcrop: imageConfig.crop,\n\t\t\tformat: imageConfig.format,\n\t\t\tquality: imageConfig.quality,\n\t\t\tposition: imageConfig.position,\n\t\t\ttransforms: imageConfig.transforms,\n\t\t\twidths: imageConfig.widths,\n\t\t\twidth: WIDTH,\n\t\t\theight: HEIGHT,\n\t\t\turl: URL,\n\t\t});\n\n\t\t// ---------------------------------------------------------------------\n\t\t// ArtDirection image raw data.\n\t\t// No need a useGriddoImagexxxx hook, just a regular function.\n\t\t// ---------------------------------------------------------------------\n\t\tconst artDirectionRawData =\n\t\t\tsources &&\n\t\t\tgetGriddoArtDirectionImage({\n\t\t\t\tgriddoDamDefaults: internalGriddoDamDefaults,\n\t\t\t\tcrop: imageConfig.crop,\n\t\t\t\tquality: imageConfig.quality,\n\t\t\t\tposition: imageConfig.position,\n\t\t\t\ttransforms: imageConfig.transforms,\n\t\t\t\twidths: imageConfig.widths,\n\t\t\t\twidth: WIDTH,\n\t\t\t\theight: HEIGHT,\n\t\t\t\timageField: imageField,\n\t\t\t\tsources: sources,\n\t\t\t\tsizes: sizes,\n\t\t\t});\n\n\t\t// ---------------------------------------------------------------------\n\t\t// SVG\n\t\t// ---------------------------------------------------------------------\n\t\tif (format === \"svg\") {\n\t\t\treturn (\n\t\t\t\t<img\n\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\tdata-imageformat=\"svg\"\n\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\tsrc={svg?.srcSetURL && svg.srcSetURL[0]}\n\t\t\t\t\twidth={WIDTH}\n\t\t\t\t\theight={HEIGHT}\n\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\talt={ALT}\n\t\t\t\t\ttitle={TITLE}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\t// ---------------------------------------------------------------------\n\t\t// GIF\n\t\t// ---------------------------------------------------------------------\n\t\tif (format === \"gif\") {\n\t\t\treturn (\n\t\t\t\t<img\n\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\tdata-imageformat=\"gif\"\n\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\tsrcSet={gif?.srcSet?.join(\",\")}\n\t\t\t\t\tsizes={sizes}\n\t\t\t\t\tsrc={gif?.srcSetURL && gif.srcSetURL[0]}\n\t\t\t\t\twidth={WIDTH}\n\t\t\t\t\theight={HEIGHT}\n\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\talt={ALT}\n\t\t\t\t\ttitle={TITLE}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\t// ---------------------------------------------------------------------\n\t\t// ART DIRECTION\n\t\t// ---------------------------------------------------------------------\n\t\tif (IS_ART_DIRECTION_IMAGE) {\n\t\t\treturn (\n\t\t\t\t<picture data-testid=\"picture\" data-artdirection=\"true\">\n\t\t\t\t\t{/* AVIF */}\n\t\t\t\t\t{imageConfig.formats?.includes(\"avif\") &&\n\t\t\t\t\t\tartDirectionRawData?.avif.map((SOURCE, idx) => (\n\t\t\t\t\t\t\t<source\n\t\t\t\t\t\t\t\tdata-imageformat=\"avif\"\n\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\tsrcSet={SOURCE.srcSet?.join(\",\")}\n\t\t\t\t\t\t\t\tsizes={SOURCE.sizes}\n\t\t\t\t\t\t\t\tmedia={SOURCE.media}\n\t\t\t\t\t\t\t\ttype=\"image/avif\"\n\t\t\t\t\t\t\t\twidth={SOURCE.width}\n\t\t\t\t\t\t\t\theight={SOURCE.height}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t{/* WEBP */}\n\t\t\t\t\t{imageConfig.formats?.includes(\"webp\") &&\n\t\t\t\t\t\tartDirectionRawData?.webp.map((SOURCE, idx) => (\n\t\t\t\t\t\t\t<source\n\t\t\t\t\t\t\t\tdata-imageformat=\"webp\"\n\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\tsrcSet={SOURCE.srcSet?.join(\",\")}\n\t\t\t\t\t\t\t\tsizes={SOURCE.sizes}\n\t\t\t\t\t\t\t\tmedia={SOURCE.media}\n\t\t\t\t\t\t\t\ttype=\"image/webp\"\n\t\t\t\t\t\t\t\twidth={SOURCE.width}\n\t\t\t\t\t\t\t\theight={SOURCE.height}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t{/* JPEG */}\n\t\t\t\t\t{artDirectionRawData?.jpeg.map((SOURCE, idx) => (\n\t\t\t\t\t\t<source\n\t\t\t\t\t\t\tdata-imageformat=\"jpeg\"\n\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\tsrcSet={SOURCE.srcSet?.join(\",\")}\n\t\t\t\t\t\t\tsizes={SOURCE.sizes}\n\t\t\t\t\t\t\tmedia={SOURCE.media}\n\t\t\t\t\t\t\ttype=\"image/jpeg\"\n\t\t\t\t\t\t\twidth={SOURCE.width}\n\t\t\t\t\t\t\theight={SOURCE.height}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\n\t\t\t\t\t{/* jpeg */}\n\t\t\t\t\t<img\n\t\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\t\tsizes={sizes}\n\t\t\t\t\t\tsrcSet={artDirectionRawData?.jpeg[0].srcSet?.join(\",\")}\n\t\t\t\t\t\tsrc={artDirectionRawData?.jpeg[0].src}\n\t\t\t\t\t\twidth={WIDTH || artDirectionRawData?.jpeg[0].width} // Si WIDTH es falsy es que no hay datos en el root de <GriddoImageExp>\n\t\t\t\t\t\theight={HEIGHT || artDirectionRawData?.jpeg[0].height} // Si HEIGHT es falsy es que no hay datos en el root de <GriddoImageExp>\n\t\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\t\talt={ALT}\n\t\t\t\t\t\ttitle={TITLE}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t/>\n\t\t\t\t</picture>\n\t\t\t);\n\t\t}\n\n\t\t// ---------------------------------------------------------------------\n\t\t// SINGLE IMAGE\n\t\t// ---------------------------------------------------------------------\n\t\treturn (\n\t\t\t<picture ref={ref} data-testid=\"picture\">\n\t\t\t\t{/* avif */}\n\t\t\t\t{imageConfig.formats?.includes(\"avif\") && (\n\t\t\t\t\t<source\n\t\t\t\t\t\tsrcSet={avif?.srcSet?.join(\",\")}\n\t\t\t\t\t\tsizes={sizes}\n\t\t\t\t\t\ttype=\"image/avif\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* webp */}\n\t\t\t\t{imageConfig.formats?.includes(\"webp\") && (\n\t\t\t\t\t<source\n\t\t\t\t\t\tsrcSet={webp?.srcSet?.join(\",\")}\n\t\t\t\t\t\tsizes={sizes}\n\t\t\t\t\t\ttype=\"image/webp\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* jpeg */}\n\t\t\t\t<img\n\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\tsizes={sizes}\n\t\t\t\t\tsrcSet={jpeg?.srcSet?.join(\",\")}\n\t\t\t\t\tsrc={src}\n\t\t\t\t\twidth={WIDTH}\n\t\t\t\t\theight={HEIGHT}\n\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\talt={ALT}\n\t\t\t\t\ttitle={TITLE}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</picture>\n\t\t);\n\t},\n);\n\nGriddoImageExp.displayName = \"GriddoImageExp\";\n\nexport { GriddoImageExp };\n","import type { FullPath } from \"../../types/core\";\n\nconst ENVS = { pre: \"pre\", pro: \"pro\" } as const;\n\nfunction getEnvironment(fullPath?: FullPath) {\n\treturn fullPath?.domainUrl?.endsWith(`/${fullPath.domain}`)\n\t\t? ENVS.pro\n\t\t: ENVS.pre;\n}\n\nfunction getRel(newTab: boolean, noFollow: boolean) {\n\treturn `${noFollow ? \"nofollow\" : \"\"} ${newTab ? \"noreferrer\" : \"\"}`.trim();\n}\n\nfunction getTarget(newTab: boolean) {\n\treturn newTab ? \"_blank\" : \"_self\";\n}\n\nfunction getRelativeToRootPath({\n\tenv,\n\tfullPath,\n\tto,\n}: {\n\tenv: string;\n\tfullPath: FullPath;\n\tto?: string;\n}) {\n\tif (typeof to !== \"string\") {\n\t\treturn to;\n\t}\n\tif (env === ENVS.pre) {\n\t\tconst cleanDomain = fullPath?.domainUrl\n\t\t\t?.split(fullPath?.domain || \"\")\n\t\t\t.join(\"\");\n\t\treturn to?.split(cleanDomain || \"\")?.join(\"\") || to;\n\t}\n\tif (env === ENVS.pro) {\n\t\treturn to?.split(fullPath?.domainUrl || \"\")?.join(\"\") || to;\n\t}\n\treturn to;\n}\n\nexport { getEnvironment, getRel, getRelativeToRootPath, getTarget };\n","import type { Url } from \"../../types/api-response-fields\";\nimport type {\n\tComponentPropsWithoutRef,\n\tCSSProperties,\n\tMouseEvent,\n\tReactNode,\n\tRef,\n} from \"react\";\n\nimport * as React from \"react\";\n\nimport {\n\tgetEnvironment,\n\tgetRel,\n\tgetRelativeToRootPath,\n\tgetTarget,\n} from \"./utils\";\nimport { usePage, useSite } from \"../../hooks\";\n\n/**\n * Renders a router component from internal/external Griddo link.\n * You may want to use `<GriddoLink>` instead of an `<a>` tag for internal Griddo pages.\n * @see [Documentation](https://www.notion.so/griddoio/GriddoLink-bc4f7cddd1484648b024d4bebe4b74c3)\n *\n * @example\n * <GriddoLink\n * activeClass=\"activeLink\"\n * url={ linkToURL: 'https://...' }\n * />\n */\nfunction GriddoLink({\n\tactiveClassName = \"\",\n\tactiveStyle = {},\n\tstyle = {},\n\tchildren,\n\tgetProps,\n\tpartiallyActive,\n\tstate,\n\turl,\n\ttitle,\n\tclassName = \"\",\n\t...props\n}: GriddoLinkProps) {\n\tconst { renderer, linkComponent: RouterLink } = useSite();\n\tconst { fullPath } = usePage();\n\n\tconst isEditor = renderer === \"editor\";\n\tconst isPreview = renderer === \"preview\";\n\n\tconst href = url?.href;\n\tconst to = url?.linkToURL;\n\tconst newTab = url?.newTab || false;\n\tconst noFollow = url?.noFollow || false;\n\tconst isEmptyLink = !url?.linkToURL && !url?.href;\n\tconst isActiveInEditor = to === `${fullPath?.domainUrl}${fullPath?.compose}`;\n\n\tconst env = getEnvironment(fullPath);\n\tconst rel = getRel(newTab, noFollow);\n\tconst target = getTarget(newTab);\n\n\t// Relative to root path.\n\tconst relativeToRootPath =\n\t\tfullPath &&\n\t\tgetRelativeToRootPath({\n\t\t\tenv,\n\t\t\tfullPath,\n\t\t\tto,\n\t\t});\n\n\tconst routerPath = !isEditor && !isEmptyLink ? relativeToRootPath : \"\";\n\n\t// <a> for an external links.\n\tif (href || newTab) {\n\t\treturn (\n\t\t\t<a\n\t\t\t\tdata-link=\"anchor\"\n\t\t\t\ttarget={isEditor ? \"_blank\" : target}\n\t\t\t\trel={rel}\n\t\t\t\thref={href || to}\n\t\t\t\tclassName={className}\n\t\t\t\ttitle={title}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t);\n\t}\n\n\t// Gatsby <Link> for internal page links.\n\treturn (\n\t\t<RouterLink\n\t\t\trel={rel}\n\t\t\t// In the Griddo editor, links will always open in a new tab.\n\t\t\ttarget={isEditor ? \"_blank\" : target}\n\t\t\tto={routerPath}\n\t\t\t// @ts-expect-error although href is not in the types it is included here so that the links work in AX Page Preview feature\n\t\t\thref={isEditor || isPreview ? href || to : undefined}\n\t\t\tgetProps={getProps}\n\t\t\tpartiallyActive={partiallyActive}\n\t\t\tstate={state}\n\t\t\tactiveStyle={activeStyle}\n\t\t\tactiveClassName={activeClassName}\n\t\t\t// Shows link in the editor.\n\t\t\ttitle={isEditor ? relativeToRootPath : title}\n\t\t\t// Styling in editor, emulating router activeStyle and activeClassName.\n\t\t\tstyle={isActiveInEditor ? activeStyle : style}\n\t\t\tclassName={\n\t\t\t\tisActiveInEditor\n\t\t\t\t\t? `${className} ${activeClassName || \"\"}`.trim()\n\t\t\t\t\t: className\n\t\t\t}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</RouterLink>\n\t);\n}\n\nexport interface HLocation<S = unknown> {\n\tpathname: string;\n\tsearch: string;\n\tstate: S;\n\thash: string;\n\tkey?: string | undefined;\n}\n\nexport type WindowLocation<S = unknown> = Window[\"location\"] & HLocation<S>;\n\nexport interface LinkGetProps {\n\t/** `true` if the location.pathname is exactly the same as the anchor’s href. */\n\tisCurrent: boolean;\n\t/** `true` if the location.pathname is exactly the same as the anchor’s href. */\n\tisPartiallyCurrent: boolean;\n\t/** The fully resolved href of the link. */\n\thref: string;\n\t/** The app’s location. */\n\tlocation: WindowLocation;\n}\n\nexport interface GriddoLinkProps\n\t// Remove href, as it's ignored by the router\n\textends Omit<ComponentPropsWithoutRef<\"a\">, \"href\"> {\n\t/** Griddo Url with the link data */\n\turl?: Url;\n\t/** Calls up to you to get props for the underlying anchor element. Useful for styling the anchor as active. */\n\tgetProps?: ((props: LinkGetProps) => Record<string, never>) | undefined;\n\t/** A class name that will be applied the current item is active. */\n\tactiveClassName?: string;\n\t/** A style object that will be applied when the current item is active. */\n\tactiveStyle?: CSSProperties;\n\t/** Whether partial URLs are considered active (e.g. /blog#hello-world matches <Link to=\"/blog\"> if partiallyActive is true). */\n\tpartiallyActive?: boolean;\n\t/** If `true`, the latest entry on the history stack will be replaced with a new one. Use this when you don’t want the previous page to show up when the user clicks the back button. */\n\treplace?: boolean;\n\t/** Used to pass state data to the linked page.\n\t * The linked page will have a `location` prop containing a nested `state` object structure containing the passed data. */\n\tstate?: Record<string, unknown>;\n\t/** @deprecated If using React >= 16.4, use ref instead. */\n\tinnerRef?: Ref<HTMLAnchorElement> | undefined;\n\t/** If using React >=16.4, Link will forward its ref to you. */\n\tref?: Ref<HTMLAnchorElement> | undefined;\n\t/** onCLick event */\n\tonClick?: (event: MouseEvent<HTMLAnchorElement>) => void;\n\tchildren?: ReactNode;\n}\n\nexport { GriddoLink };\n","import * as React from \"react\";\n\n/**\n * Inject a google structured data with a `script` tag.\n *\n * @example\n * <LdJson data={schemaData} />\n */\nexport function LdJson(props: { data: Record<string, unknown> }) {\n\tconst { data } = props;\n\n\treturn (\n\t\t<script\n\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t__html: `(function(){\n const ldJsonScript = document.createElement('script');\n ldJsonScript.setAttribute('type', 'application/ld+json');\n ldJsonScript.textContent = \\`${JSON.stringify(data)}\\`;\n document.head.appendChild(ldJsonScript);\n})();`,\n\t\t\t}}\n\t\t/>\n\t);\n}\n","import type { Url } from \"../../types/api-response-fields\";\n\nimport * as React from \"react\";\n\nimport { useLink } from \"../../hooks/useLink\";\nimport { usePage } from \"../../hooks/usePage\";\n\nexport interface GetLinkProps {\n\thref?: string;\n\tlinkToURL?: string;\n}\n\n// return an anchor if the link is in the same page.\nfunction parseAnchor(pageUrl: string, linkUrl: string) {\n\tconst hasAnchorId = linkUrl?.startsWith(`${pageUrl}#`);\n\treturn hasAnchorId ? `#${linkUrl.split(\"#\")[1]}` : linkUrl;\n}\n\n// Return { href, to } from a griddo url object field\nfunction getLinks(url?: GetLinkProps) {\n\t// Standar external url\n\tconst href = url?.href;\n\t// linkToURL could be // for internal absolute or / for router links\n\tconst linkToURL = url?.linkToURL;\n\t// linkToURL: \"//cx-web.com/site\" or \"https(s):\"\n\tconst linkToURLHasDoubleSlashOrHttp = linkToURL?.match(/^\\/{2}|^https?:/g);\n\t// linkToURL: \"/future-router-link\n\tconst linkToURL_hasSingleSlash = linkToURL?.match(/^\\/\\w/g);\n\n\tconst result = {\n\t\thref: href ? href : linkToURLHasDoubleSlashOrHttp ? linkToURL : null,\n\t\tto: linkToURL_hasSingleSlash ? linkToURL : null,\n\t};\n\n\treturn result;\n}\n\n/**\n * @deprecated This component will be removed from Griddo in the future.\n */\nfunction Link(props: LinkProps) {\n\tconst { url, linkProp = \"to\", children, ...rest } = props;\n\n\t// Get page info from provider\n\tconst { fullUrl } = usePage();\n\t// Get the router component from the provider\n\tconst RouterLink = useLink() || \"a\";\n\t// Get href for the normal links and to for the router links\n\tconst { href, to } = getLinks(url);\n\n\tconst newTab = url?.newTab;\n\tconst noFollow = url?.noFollow;\n\n\tconst linkProps = {\n\t\t...rest,\n\t\t...(newTab && { target: \"_blank\" }),\n\t\trel: `${noFollow ? \"nofollow\" : \"\"} ${newTab ? \"noreferrer\" : \"\"}`.trim(),\n\t\t...(fullUrl && href && { href: parseAnchor(fullUrl, href) }),\n\t\t...(fullUrl && to && { [linkProp]: parseAnchor(fullUrl, to) }),\n\t};\n\n\treturn to ? (\n\t\t<>\n\t\t\t<p>Router</p>\n\t\t\t<RouterLink {...linkProps}>{children}</RouterLink>\n\t\t</>\n\t) : (\n\t\tReact.createElement(\"a\", linkProps, children)\n\t);\n}\n\ninterface LinkProps {\n\turl: Url;\n\tlinkProp?: string;\n\tchildren: JSX.Element;\n\t[key: string]: unknown;\n}\n\nexport { Link };\n","import type { FC } from \"react\";\n\nimport * as React from \"react\";\n\nimport { ModulePreviewProvider } from \"../../contexts\";\nimport { Component, type ComponentProps } from \"../Component\";\n\nexport interface ModulePreviewProps {\n\tcomponent: string;\n\tcontent: Record<string, unknown>;\n\tlibrary: {\n\t\tcomponents: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>;\n\t};\n}\n\nfunction ModulePreview(props: ModulePreviewProps) {\n\tconst {\n\t\tcomponent,\n\t\tcontent,\n\t\tlibrary: { components },\n\t} = props;\n\n\tif (!content) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ModulePreviewProvider languageId={content.language as number}>\n\t\t\t<Component\n\t\t\t\tlibComponents={components}\n\t\t\t\tcomponent={component}\n\t\t\t\t{...content}\n\t\t\t/>\n\t\t</ModulePreviewProvider>\n\t);\n}\n\nexport { ModulePreview };\n","export interface RecursiveSearchProps {\n\tobj?: Record<string, string>;\n\tsearchKey?: string;\n\tresultsBuffer?: Array<string>;\n\tunique?: boolean;\n}\n\n/**\n * recursiveSearch\n * Devuelve una lista con los valores de una prop dentro de un objeto\n * La búsqueda es recursiva en todo el objeto\n * @param config Un objeto con los parámetros de la función\n * @param config.obj El objeto donde buscar\n * @param config.searchKey El nombre de la propiedad a buscar\n * @param config.results El array de resultados, se van añadiendo recursivamente los resultados.\n * @param config.unique Si es true elimina los resultados repetidos\n * @example\n * Obtiene una lista con los valores de la prop \"a\"\n * recursiveSearch({ obj: {a: 1, b: {a: \"foo\"}}, \"a\"})\n * -> [1, \"foo\"]\n *\n * @return Un array con los valores de la propiedad `searchValue`\n */\nfunction recursiveSearch({\n\tobj,\n\tsearchKey,\n\tresultsBuffer = [],\n\tunique = true,\n}: RecursiveSearchProps = {}) {\n\tif (!obj) return [];\n\n\tconst results = resultsBuffer;\n\n\tfor (const key of Object.keys(obj)) {\n\t\tconst value = obj[key];\n\t\tif (key === searchKey && typeof value !== \"object\") {\n\t\t\tresults.push(value);\n\t\t} else if (typeof value === \"object\") {\n\t\t\tvalue &&\n\t\t\t\trecursiveSearch({ obj: value, searchKey, resultsBuffer: results });\n\t\t}\n\t}\n\n\treturn unique ? [...new Set(results)] : results;\n}\n\nexport { recursiveSearch };\n","import type { Page } from \"../../types/core\";\nimport type { FC } from \"react\";\n\nimport * as React from \"react\";\n\nimport { NavigationProvider, PageProvider } from \"../../contexts\";\nimport { Component, type ComponentProps } from \"../Component\";\nimport { recursiveSearch } from \"./utils\";\n\n/**\n * <PageComponent>\n */\nfunction PageComponent(props: PageProps) {\n\tconst {\n\t\tapiUrl,\n\t\tcontent,\n\t\tfooter,\n\t\theader,\n\t\tlanguageId,\n\t\tlibrary: {\n\t\t\ttemplates: UITemplates,\n\t\t\tcomponents: UIComponents,\n\t\t\tformsTemplates: UIFormsTemplates,\n\t\t},\n\t\tpageLanguages,\n\t\tsiteMetadata,\n\t} = props;\n\n\tconst isFormTemplate = content.component === \"FormPage\";\n\n\tconst currentTemplate = content.template.templateType;\n\n\tconst Template = isFormTemplate\n\t\t? UIFormsTemplates[currentTemplate]\n\t\t: UITemplates[currentTemplate];\n\n\t// Components (component and modules) list used by the page.\n\tconst componentList = recursiveSearch({\n\t\tobj: content.template,\n\t\tsearchKey: \"component\",\n\t});\n\n\t// Array of section names\n\tconst sectionsName = Object.keys(content?.template).filter(\n\t\t(key) => content?.template[key] && content.template[key].component,\n\t);\n\n\t// Object with modules by section\n\t// {\n\t// section01: [ 'Mod2', 'Mod4' ],\n\t// section02: [ 'Mod7', 'Mod9' ],\n\t// }\n\tconst sectionModules = Object.fromEntries(\n\t\tsectionsName?.map((key) => {\n\t\t\tconst modules: Array<{ component: string }> =\n\t\t\t\tcontent?.template[key].modules || [];\n\t\t\tconst moduleNames = modules.map((module) => module?.component);\n\n\t\t\treturn [key, moduleNames];\n\t\t}),\n\t);\n\n\treturn (\n\t\t<PageProvider\n\t\t\tactiveSectionBase={content.template.activeSectionBase}\n\t\t\tactiveSectionSlug={content.template.activeSectionSlug || \"/\"}\n\t\t\tapiUrl={apiUrl}\n\t\t\tbreadcrumb={content.breadcrumb}\n\t\t\tcanonicalURL={content.canonicalURL}\n\t\t\tcomponentList={componentList}\n\t\t\tdimensions={content.dimensions?.values}\n\t\t\tfooter={footer}\n\t\t\tfooterTheme={content.footerTheme}\n\t\t\tfullPath={content.fullPath}\n\t\t\tfullUrl={content.fullUrl}\n\t\t\theader={header}\n\t\t\theaderTheme={content.headerTheme}\n\t\t\tid={content.id}\n\t\t\tisHome={content.isHome}\n\t\t\tisIndexed={content.isIndexed}\n\t\t\tlanguageId={languageId}\n\t\t\tmetaDescription={content.metaDescription}\n\t\t\tmetasAdvanced={content.metasAdvanced}\n\t\t\tmetaTitle={content.metaTitle}\n\t\t\tmodified={content.modified}\n\t\t\torigin={content.origin}\n\t\t\tpageLanguages={pageLanguages}\n\t\t\tpublished={content.published}\n\t\t\tsectionModules={sectionModules}\n\t\t\tsite={content.site}\n\t\t\tsiteMetadata={siteMetadata}\n\t\t\tsiteSlug={content.siteSlug}\n\t\t\tsocialDescription={content.socialDescription}\n\t\t\tsocialImage={content.socialImage}\n\t\t\tsocialTitle={content.socialTitle}\n\t\t\tstructuredData={content.structuredData}\n\t\t\tstructuredDataContent={content.structuredDataContent}\n\t\t\ttemplate={content.template}\n\t\t\ttheme={content.theme}\n\t\t\ttitle={content.title}\n\t\t\tmetaKeywords={content.metaKeywords}\n\t\t\tfollow={content.follow}\n\t\t>\n\t\t\t<>\n\t\t\t\t{/* Header Sections */}\n\t\t\t\t{!!header && (\n\t\t\t\t\t<NavigationProvider>\n\t\t\t\t\t\t<Component libComponents={UIComponents} {...header} />\n\t\t\t\t\t</NavigationProvider>\n\t\t\t\t)}\n\n\t\t\t\t{/* Template Modules/Components */}\n\t\t\t\t<Template {...content.template} />\n\n\t\t\t\t{/* Footer Sections */}\n\t\t\t\t{!!footer && (\n\t\t\t\t\t<NavigationProvider>\n\t\t\t\t\t\t<Component libComponents={UIComponents} {...footer} />\n\t\t\t\t\t</NavigationProvider>\n\t\t\t\t)}\n\t\t\t</>\n\t\t</PageProvider>\n\t);\n}\n\nexport interface PageProps\n\textends Pick<\n\t\tPage,\n\t\t| \"apiUrl\"\n\t\t| \"footer\"\n\t\t| \"header\"\n\t\t| \"languageId\"\n\t\t| \"pageLanguages\"\n\t\t| \"siteMetadata\"\n\t> {\n\tcontent: Pick<\n\t\tPage,\n\t\t| \"component\"\n\t\t| \"breadcrumb\"\n\t\t| \"canonicalURL\"\n\t\t| \"dimensions\"\n\t\t| \"footerTheme\"\n\t\t| \"fullPath\"\n\t\t| \"fullUrl\"\n\t\t| \"headerTheme\"\n\t\t| \"id\"\n\t\t| \"isHome\"\n\t\t| \"isIndexed\"\n\t\t| \"metaDescription\"\n\t\t| \"metasAdvanced\"\n\t\t| \"metaTitle\"\n\t\t| \"modified\"\n\t\t| \"origin\"\n\t\t| \"published\"\n\t\t| \"site\"\n\t\t| \"siteSlug\"\n\t\t| \"socialDescription\"\n\t\t| \"socialImage\"\n\t\t| \"socialTitle\"\n\t\t| \"structuredData\"\n\t\t| \"structuredDataContent\"\n\t\t| \"template\"\n\t\t| \"theme\"\n\t\t| \"title\"\n\t\t| \"metaKeywords\"\n\t\t| \"follow\"\n\t>;\n\tlibrary: {\n\t\tcomponents: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>;\n\t\ttemplates: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>;\n\t\tformsTemplates: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>;\n\t};\n\tchildren?: JSX.Element;\n}\n\nexport { PageComponent as Page };\n","import * as React from \"react\";\n\nimport { ModulePreview, type ModulePreviewProps } from \"../ModulePreview\";\nimport { Page, type PageProps } from \"../Page\";\n\n/**\n * <Preview>\n */\nfunction Preview(props: PreviewProps) {\n\tconst { isPage = false, ...rest } = props;\n\n\tconst pageProps = rest as PageProps;\n\tconst moduleProps = rest as ModulePreviewProps;\n\n\treturn isPage ? <Page {...pageProps} /> : <ModulePreview {...moduleProps} />;\n}\n\nexport type PreviewProps = { isPage?: boolean } & (\n\t| ModulePreviewProps\n\t| PageProps\n);\n\nexport { Preview };\n"],"names":["__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","apply","useGlobalTheme","themeFile","global","useTheme","props","themes","push","theme","selectedTheme","find","id","SuppressedError","getPlainPrimitives","themePrimitives","allPrimitives","getPrimitives","primitives","primitive","cssVar","values","Array","isArray","filterColorPrimitives","map","assign","primitiveValue","matches","matchAll","match","replace","filter","CSS","supports","getColorPrimitives","subthemes","subtheme","plainThemePrimitives","common","light","dark","filterPrimitivesByType","type","includes","getPrimitivesByType","hasPrimitives","filterThemePrimitives","selectedSubtheme","color","useThemeColors","themesWithColors","filterThemePrimitivesByColor","useThemePrimitives","filterThemePrimitivesByType","useThemeFont","useFetch","url","options","method","body","data","setData","React","useState","isLoading","setIsLoading","isError","setIsError","isFirstFetch","setIsFirstFetch","msg","setMsg","useEffect","fetch","JSON","stringify","headers","response","status","code","statusText","Error","json","finally","catch","CONTEXT_KEYS","getOrCreateGlobalContext","key","defaultValue","globalObj","globalThis","createContext","I18nContext","translations","I18nProvider","children","createElement","Provider","linkComponent","rest","navigate","SiteContext","SiteProvider","PageContext","PageProvider","siteContextValue","useContext","usePage","console","warn","pageLanguagesWithLivePages","_a","pageLanguages","language","isLive","pageLocale","_b","langItem","languageId","locale","ISOLocale","FormContext","FormProvider","isForm","ModulePreviewContext","ModulePreviewProvider","NavigationContext","NavigationProvider","isNavigation","SessionContext","SessionProvider","useSessionProvider","config","setConfig","state","useSite","useAiAnswers","publicApiUrl","setBody","query","lang","site","templates","priorities","minSimilarity","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","REGEX","validate","uuid","test","byteToHex","toString","substr","arr","offset","arguments","undefined","toLowerCase","TypeError","v35","name","version","hashfunc","generateUUID","namespace","buf","str","unescape","encodeURIComponent","bytes","charCodeAt","stringToBytes","v","parseInt","slice","parse","set","err","DNS","URL","getOutputLength","inputLength8","safeAdd","x","y","lsw","md5cmn","q","a","b","num","cnt","md5ff","c","d","md5gg","md5hh","md5ii","v4","rnds","random","f","z","ROTL","n","useAIReferenceField","pageId","setResponse","prompt","sites","useStructuredData","fields","limit","area","window","storedId","localStorage","getItem","uuidv4","setItem","error","res","ok","useAiSearch","page","itemsPerPage","input","output","length32","hexTab","hex","charAt","md5ToHexEncodedArray","len","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","bytesToWords","K","H","l","N","Math","ceil","M","_i","j","pow","floor","_i2","W","_t","_t2","T","IS_BROWSER","isLocalStorageAvailable","removeItem","log","getToken","localStorageData","appInfo","token","Authorization","getSiteID","currentSiteInfo","getLang","Number","concatParams","baseUrl","params","paramsUrl","keys","join","split","Boolean","getOptions","langID","mode","cache","redirect","referrerPolicy","isArrayOfNumbers","every","item","isSimpleFilter","someFilter","isFilterWithSource","isFilterFromEndpoint","parseSimpleFilter","filters","parseFilterFromEndpoint","keyName","items","parseFilter","parseRelated","filtersReduced","reduce","acc","filterItem","source","parseFilterWithSource","isOperator","operator","parseRelations","relations","useReferenceFieldData","order","quantity","sources","fixed","allLanguages","preferenceLanguage","fullRelations","apiUrl","isAX","siteID","fetchOptions","useContentType","queriedData","useContentTypeNavigation","previous","canonicalURL","structuredDataContent","referenceId","useDataFilters","siteId","renderer","setUrl","queryUrl","cached","refField","groupingCategories","customCached","Date","valueOf","structuredData","related","filterOperator","globalOperator","_c","removeUnit","unit","_filterFalsePropValues","object","fromEntries","entries","tuple","getGriddoDamURIWithParams","damId","imageConfig","object1","object2","crop","quality","format","queryParamsURL","width","height","position","transforms","protocol","slug","sanitizeUrl","domain","getDomainFromDamUrl","damUrl","getDamIdFromDamUrl","MIME_TYPES","jpg","jpeg","gif","svg","png","avif","webp","internalDefaults","loading","decoding","blurSize","blurCSSTransition","formats","useGriddoImage","siteContext","griddoDamDefaults","responsive","srcSet","trim","sizes","nullBP","entry","breakpoint","rearrangeResponsiveArray","reverse","idx","srcSetURL","smallForSrc","src","webpFallback","generateImageChunk","useGriddoImageExp","RATIO","removeCSSUnits","widths","griddoDamURL","round","withWProp","parseFloat","useI18n","i18nContext","siteLangs","pageLanguageId","moduleLanguageId","checkLangId","checkLocale","currentLocale","getLocaleFromSiteLangs","localeTranslations","getTranslation","defaultString","getNestedTranslation","mainObject","prop","obj","getNestedPropValue","uploadFolder","fallback404ImageId","gravity","backgroundLazy","useImage","publicId","cloudinaryCloudName","cloudinaryDefaults","root","fallbackSrcImage","getURIWithParams","cloudinaryRearrangeResponsiveArray","aspectRatio","ar","useIsClient","isClient","setClient","useIsFirstRender","isFirst","useRef","current","useLink","useList","exclude","search","includePending","searchWithNoSpaces","isAuto","isManual","contentType","parseSources","get","maxItems","extra","totalItems","useListWithDefaultStaticPage","setQuery","staticQuery","totalPages","filterKeys","content","griddoAlertRegister","this","description","fullData","instantNotification","level","INVALID_DATE","formatLocaleDate","inputDate","dateStyle","Intl","DateTimeFormat","supportedLocalesOf","isDateStyleSupported","date","dateTime","isNaN","getTime","toLocaleDateString","replaceAll","useLocaleDate","useNavigation","usePageRelatedContent","template","setQueryUrl","useMemo","templateType","urlWithParams","createSetQuery","useReceiveInterests","areas","cachedScriptStatuses","useScript","setStatus","shouldPreventLoad","cachedScriptStatus","script","node","document","querySelector","getAttribute","getScriptNode","scriptNode","async","setAttribute","appendChild","setAttributeFromEvent","event","scriptStatus","addEventListener","setStateFromEvent","newStatus","removeEventListener","removeOnUnmount","remove","useSendInterests","interests","navigator","userAgent","useSession","useSSR","isDOM","documentElement","isBrowser","isServer","module","require","k","Symbol","for","m","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","ref","__self","__source","g","h","defaultProps","$$typeof","_owner","exports","react15_6","default","_react","_jsxRuntime","_excluded","_extends","target","CUSTOM_PROPERTY_NAME","AspectRatio","Component","constructor","super","setNode","componentDidUpdate","style","getPropertyValue","setProperty","ratio","render","_this$props","className","restProps","excluded","_objectWithoutPropertiesLoose","newStyle","jsx","reactLatest","DEFAULT_CLASS_NAME","forwardRef","_interopRequireDefault","_reactLatest","__esModule","styleInject","css","insertAt","head","getElementsByTagName","firstChild","insertBefore","styleSheet","cssText","createTextNode","CloudinaryImage","alt","objectFit","customSrc","commonImageProps","srcProps","publicIdProps","imgProps","Image","maxWidth","alignSelf","CloudinaryBackgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","overlayColor","overlayOpacity","overlayTransition","customLazyClassName","lazy","SRCSET","BREAKPOINTS","CLASSNAME_HASHED","substring","LAZY_CLASSNAME","MEDIA_QUERIES","from","fill","_","fillIntArray","Fragment","dangerouslySetInnerHTML","__html","SvgDelete","role","SvgDuplicate","Wrapper","componentRef","wrapperHeight","setWrapperHeight","selectEditorID","selectHoverEditorID","moduleActions","selectedEditorID","editorID","component","isSelectionAllowed","isNavigationModule","scrollHeight","isSelected","scrollToComponent","cb","useCallback","forEach","isIntersecting","observer","IntersectionObserver","rootMargin","threshold","observe","unobserve","handleClick","pos","top","scrollIntoView","behavior","block","offsetTop","marginTop","onClick","stopPropagation","duplicateModuleAction","deleteModuleAction","FormWrapper","libComponents","parentEditorID","LibComponent","getComponent","isNavigationInnerModule","componentWrapper","ComponentWrapper","components","componentName","LAZY_CLASS_NAME","GriddoBackgroundImage","veilOpacity","veilColor","veilTransitionTime","veilTransitionEasing","lazyOffset","thisRef","classList","disconnect","backgroundImageResponsive","customProperty","resimages","allImages","displayName","GriddoImage","GifImage","fetchpriority","SvgImage","Picture","_d","_e","GriddoImageExp","image","imageField","WIDTH","HEIGHT","POSITION","TITLE","title","ALT","imageFieldWidth","imageFieldHeight","IS_ART_DIRECTION_IMAGE","internalGriddoDamDefaults","artDirectionRawData","rootSizes","rootTransforms","rootQuality","rootWidth","rootHeight","rootPosition","rootCrop","rootImageField","sourcesRawData","imgTagWidth","imgTagHeight","field","fieldWidth","fieldHeight","sourceImageWidth","sourceImageHeight","jpgSource","widthValue","media","getGriddoArtDirectionImage","SOURCE","_f","_g","_h","_j","_k","ENVS","GriddoLink","activeClassName","activeStyle","getProps","partiallyActive","RouterLink","fullPath","isEditor","isPreview","href","to","linkToURL","newTab","noFollow","isEmptyLink","isActiveInEditor","domainUrl","compose","env","endsWith","getEnvironment","rel","getRel","getTarget","relativeToRootPath","cleanDomain","getRelativeToRootPath","routerPath","LdJson","parseAnchor","pageUrl","linkUrl","startsWith","Link","linkProp","fullUrl","linkToURLHasDoubleSlashOrHttp","linkToURL_hasSingleSlash","getLinks","linkProps","ModulePreview","library","recursiveSearch","searchKey","resultsBuffer","unique","results","Set","PageComponent","footer","header","UITemplates","UIComponents","formsTemplates","UIFormsTemplates","siteMetadata","isFormTemplate","currentTemplate","Template","componentList","sectionsName","sectionModules","modules","activeSectionBase","activeSectionSlug","breadcrumb","dimensions","footerTheme","headerTheme","isHome","isIndexed","metaDescription","metasAdvanced","metaTitle","modified","origin","published","siteSlug","socialDescription","socialImage","socialTitle","metaKeywords","follow","Preview","isPage","pageProps","moduleProps","Page"],"mappings":"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","x_google_ignoreList":[0,19,20,21,22,23,24,25,26,27,30,31,59,60,61,62,63,64]}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../src/hooks/themes/useGlobalTheme.tsx","../src/hooks/themes/useTheme.tsx","../src/hooks/themes/utils.tsx","../src/hooks/themes/useThemeColors.tsx","../src/hooks/themes/useThemePrimitives.tsx","../src/hooks/themes/useThemeFont.tsx","../src/hooks/useFetch.ts","../src/contexts/utils.ts","../src/contexts/I18n/index.tsx","../src/contexts/Site/index.tsx","../src/contexts/Page/index.tsx","../src/hooks/usePage.ts","../src/contexts/Form/index.tsx","../src/contexts/ModulePreview/index.tsx","../src/contexts/Navigation/index.tsx","../src/contexts/Session/index.tsx","../src/hooks/useSite.ts","../src/hooks/useAiAnswers.ts","../../../node_modules/uuid/dist/esm-browser/rng.js","../../../node_modules/uuid/dist/esm-browser/regex.js","../../../node_modules/uuid/dist/esm-browser/validate.js","../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/uuid/dist/esm-browser/v35.js","../../../node_modules/uuid/dist/esm-browser/parse.js","../../../node_modules/uuid/dist/esm-browser/md5.js","../../../node_modules/uuid/dist/esm-browser/v4.js","../../../node_modules/uuid/dist/esm-browser/sha1.js","../src/hooks/useAiReferenceField.ts","../src/hooks/useAiSearch.ts","../../../node_modules/uuid/dist/esm-browser/v3.js","../../../node_modules/uuid/dist/esm-browser/v5.js","../src/utils/index.ts","../src/hooks/utils.ts","../src/hooks/useReferenceFieldData.ts","../src/hooks/useContentType.ts","../src/hooks/useContentTypeNavigation.ts","../src/hooks/useDataFilters.ts","../src/utils/images.ts","../src/hooks/useGriddoImage.ts","../src/hooks/useGriddoImageExp.ts","../src/hooks/useI18n.ts","../src/hooks/useModulePreview.ts","../src/hooks/useImage.ts","../src/hooks/useIsClient.ts","../src/hooks/useIsFirstRender.ts","../src/hooks/useLink.ts","../src/hooks/useList.ts","../src/hooks/useListWithDefaultStaticPage.ts","../src/functions/alerts/index.ts","../src/functions/localeDate/index.ts","../src/hooks/useLocaleDate.ts","../src/hooks/useNavigation.ts","../src/hooks/usePageRelatedContent.ts","../src/hooks/useReceiveInterests.ts","../src/hooks/useScript.ts","../src/hooks/useSendInterests.ts","../src/hooks/useSession.ts","../src/hooks/useSSR.ts","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react-aspect-ratio/dist/es/react-15.6.js","../../../node_modules/react-aspect-ratio/dist/es/react-latest.js","../../../node_modules/react-aspect-ratio/dist/es/index.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/components/CloudinaryImage/index.tsx","../src/components/CloudinaryBackgroundImage/index.tsx","../src/components/Component/ComponentWrapper/svg/Delete.tsx","../src/components/Component/ComponentWrapper/svg/Duplicate.tsx","../src/components/Component/ComponentWrapper/index.tsx","../src/components/Component/FormWrapper/index.tsx","../src/components/Component/index.tsx","../src/hooks/useForm.ts","../src/components/GriddoBackgroundImage/index.tsx","../src/components/GriddoImage/index.tsx","../src/components/GriddoImageExp/utils.ts","../src/components/GriddoImageExp/index.tsx","../src/components/GriddoLink/utils.ts","../src/components/GriddoLink/index.tsx","../src/components/LdJson/index.tsx","../src/components/Link/index.tsx","../src/components/ModulePreview/index.tsx","../src/components/Page/utils.ts","../src/components/Page/index.tsx","../src/components/Preview/index.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\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; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\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);\r\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); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\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\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\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\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import type { Theme } from \"../..\";\n\n/**\n * `useGlobalTheme()`\n *\n * Returns global theme definition and its primitives values.\n */\nfunction useGlobalTheme(themeFile: Theme.GriddoTheme): Theme.GlobalTheme {\n\treturn themeFile.global;\n}\n\nexport { useGlobalTheme };\n","import type { Theme } from \"../..\";\nimport type { UseThemeProps } from \"./types\";\n\n/**\n * `useTheme()`\n *\n * This hook can be used to get a specific theme, given its id.\n * If theme id is not specified, it will return all themes.\n */\nfunction useTheme(\n\tthemeFile: Theme.GriddoTheme,\n\tprops: UseThemeProps,\n): Array<Theme.GlobalTheme | Theme.Theme> | Theme.Theme {\n\tconst themes: Array<Theme.GlobalTheme | Theme.Theme> = [];\n\n\tif (props?.global) {\n\t\tthemes.push(themeFile.global);\n\t}\n\n\tif (props?.theme) {\n\t\tconst selectedTheme = themeFile.themes.find((t) => t.id === props.theme);\n\t\tselectedTheme && themes.push(selectedTheme);\n\t} else {\n\t\tthemes.push(...themeFile.themes);\n\t}\n\n\treturn themes.length === 1 ? themes[0] : themes;\n}\n\nexport { useTheme };\n","import type { Theme } from \"../..\";\n\nconst getPlainPrimitives = (themePrimitives: Theme.Primitives) => {\n\tconst allPrimitives: { [key: string]: string } = {};\n\n\tconst getPrimitives = (primitives: Array<Theme.Primitive>) => {\n\t\tfor (const primitive of primitives) {\n\t\t\tfor (const { cssVar, value } of primitive.values) {\n\t\t\t\tallPrimitives[cssVar] = value;\n\t\t\t}\n\t\t}\n\t};\n\n\tif (Array.isArray(themePrimitives)) {\n\t\tgetPrimitives(themePrimitives);\n\t} else {\n\t\tfor (const primitives of Object.values(themePrimitives)) {\n\t\t\tgetPrimitives(primitives);\n\t\t}\n\t}\n\n\treturn allPrimitives;\n};\n\nconst plainThemePrimitives = (theme: Theme.GlobalTheme | Theme.Theme) => {\n\tlet primitives: { [key: string]: string } = {\n\t\t...getPlainPrimitives(theme.primitives),\n\t};\n\n\tif (\"subthemes\" in theme && theme.subthemes) {\n\t\tfor (const subtheme of theme.subthemes) {\n\t\t\tprimitives = {\n\t\t\t\t...primitives,\n\t\t\t\t...getPlainPrimitives(subtheme.primitives),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn primitives;\n};\n\nconst filterColorPrimitives = (\n\tprimitives: Array<Theme.Primitive>,\n\tallPrimitives: { [key: string]: string },\n) => {\n\treturn primitives\n\t\t.map((primitive) => {\n\t\t\treturn {\n\t\t\t\t...primitive,\n\t\t\t\t// replaces var(...) with variable value, so that CSS.supports('color', value)\n\t\t\t\t// does not trigger a false positive\n\t\t\t\tvalues: primitive.values\n\t\t\t\t\t.map((primitiveValue) => {\n\t\t\t\t\t\tconst regexp = /var\\((.*?)\\)/g;\n\t\t\t\t\t\tconst matches = [...primitiveValue.value.matchAll(regexp)];\n\n\t\t\t\t\t\tfor (const match of matches) {\n\t\t\t\t\t\t\tif (match.length >= 2) {\n\t\t\t\t\t\t\t\tprimitiveValue.value = primitiveValue.value.replace(\n\t\t\t\t\t\t\t\t\tmatch[0],\n\t\t\t\t\t\t\t\t\tallPrimitives[match[1]],\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn { ...primitiveValue };\n\t\t\t\t\t})\n\t\t\t\t\t.filter(({ value }) => CSS.supports(\"color\", value)),\n\t\t\t};\n\t\t})\n\t\t.filter((primitive) => primitive.values.length);\n};\n\nconst getColorPrimitives = (\n\ttheme: Theme.GlobalTheme | Theme.Theme,\n): Theme.Primitives => {\n\tconst primitives: { [key: string]: string } = plainThemePrimitives(theme);\n\n\tif (Array.isArray(theme.primitives)) {\n\t\treturn filterColorPrimitives(theme.primitives, primitives);\n\t}\n\tconst { common, light, dark } = theme.primitives;\n\n\treturn {\n\t\tcommon: common && filterColorPrimitives(common, primitives),\n\t\tlight: filterColorPrimitives(light, primitives),\n\t\tdark: filterColorPrimitives(dark, primitives),\n\t};\n};\n\nconst filterPrimitivesByType = (\n\tprimitives: Array<Theme.Primitive>,\n\ttype: string | Array<string>,\n) => {\n\treturn primitives.filter((primitive) =>\n\t\tArray.isArray(type) ? type.includes(primitive.id) : primitive.id === type,\n\t);\n};\n\nconst getPrimitivesByType = (\n\ttheme: Theme.GlobalTheme | Theme.Theme,\n\ttype: string | Array<string>,\n): Theme.Primitives => {\n\tif (Array.isArray(theme.primitives)) {\n\t\treturn filterPrimitivesByType(theme.primitives, type);\n\t}\n\tconst { common, light, dark } = theme.primitives;\n\n\treturn {\n\t\tcommon: common && filterPrimitivesByType(common, type),\n\t\tlight: filterPrimitivesByType(light, type),\n\t\tdark: filterPrimitivesByType(dark, type),\n\t};\n};\n\nconst hasPrimitives = (theme: Theme.Theme) => {\n\tif (Array.isArray(theme.primitives)) {\n\t\treturn theme.primitives.length;\n\t}\n\tconst { common, light, dark } = theme.primitives;\n\n\treturn common?.length || light.length || dark.length;\n};\n\nconst filterThemePrimitives = (\n\tthemes: Array<Theme.GlobalTheme | Theme.Theme>,\n\tselectedSubtheme?: string,\n\ttype?: string | Array<string>,\n) => {\n\tconst color = typeof type === \"undefined\";\n\n\treturn themes\n\t\t.map((theme) => {\n\t\t\treturn {\n\t\t\t\t...theme,\n\t\t\t\tprimitives: color\n\t\t\t\t\t? getColorPrimitives(theme)\n\t\t\t\t\t: getPrimitivesByType(theme, type),\n\t\t\t\tsubthemes:\n\t\t\t\t\t(\"subthemes\" in theme &&\n\t\t\t\t\t\ttheme.subthemes &&\n\t\t\t\t\t\ttheme.subthemes\n\t\t\t\t\t\t\t.map((subtheme) => ({\n\t\t\t\t\t\t\t\t...subtheme,\n\t\t\t\t\t\t\t\tprimitives: color\n\t\t\t\t\t\t\t\t\t? getColorPrimitives(subtheme)\n\t\t\t\t\t\t\t\t\t: getPrimitivesByType(subtheme, type),\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(subtheme) =>\n\t\t\t\t\t\t\t\t\thasPrimitives(subtheme as Theme.Theme) &&\n\t\t\t\t\t\t\t\t\t(selectedSubtheme ? subtheme.id === selectedSubtheme : true),\n\t\t\t\t\t\t\t)) ||\n\t\t\t\t\t[],\n\t\t\t};\n\t\t})\n\t\t.filter(\n\t\t\t(theme) => hasPrimitives(theme as Theme.Theme) || theme.subthemes.length,\n\t\t);\n};\n\nexport const filterThemePrimitivesByType = (\n\tthemes: Array<Theme.GlobalTheme | Theme.Theme>,\n\tprimitives: string | Array<string>,\n\tsubtheme?: string,\n) => {\n\treturn filterThemePrimitives(themes, subtheme, primitives);\n};\n\nexport const filterThemePrimitivesByColor = (\n\tthemes: Array<Theme.GlobalTheme | Theme.Theme>,\n\tsubtheme?: string,\n) => {\n\treturn filterThemePrimitives(themes, subtheme);\n};\n","import type { Theme } from \"../..\";\nimport type { UseThemeColorsProps } from \"./types\";\n\nimport { filterThemePrimitivesByColor } from \"./utils\";\n\n/**\n * `useThemeColors()`\n *\n * This hook can be used to get all color primitives from the given theme.\n * If theme is not specified, it will return color primitives for all themes.\n */\nfunction useThemeColors(\n\tthemeFile: Theme.GriddoTheme,\n\tprops?: UseThemeColorsProps,\n) {\n\tconst themes: Array<Theme.GlobalTheme | Theme.Theme> = [];\n\n\tif (props?.global) {\n\t\tthemes.push(themeFile.global);\n\t}\n\n\tif (props?.theme) {\n\t\tconst selectedTheme = themeFile.themes.find((t) => t.id === props.theme);\n\t\tselectedTheme && themes.push(selectedTheme);\n\t} else {\n\t\tthemes.push(...themeFile.themes);\n\t}\n\n\tconst themesWithColors = filterThemePrimitivesByColor(\n\t\tthemes,\n\t\tprops?.subtheme,\n\t);\n\treturn themesWithColors;\n}\n\nexport { useThemeColors };\n","import type { Theme } from \"../..\";\nimport type { UseThemePrimitivesProps } from \"./types\";\n\nimport { filterThemePrimitivesByType } from \"./utils\";\n\n/**\n * `useThemePrimitives()`\n *\n * This hook can be used to get a specific group of primitives from the given theme and subtheme.\n * If theme or subtheme are not specified, it will return primitives for all themes and subthemes.\n */\nfunction useThemePrimitives(\n\tthemeFile: Theme.GriddoTheme,\n\tprops: UseThemePrimitivesProps,\n) {\n\tconst themes: Array<Theme.GlobalTheme | Theme.Theme> = [];\n\tconst { global, primitive, subtheme } = props;\n\n\tif (global) {\n\t\tthemes.push(themeFile.global);\n\t}\n\n\tif (props.theme) {\n\t\tconst selectedTheme = themeFile.themes.find((t) => t.id === props.theme);\n\t\tselectedTheme && themes.push(selectedTheme);\n\t} else {\n\t\tthemes.push(...themeFile.themes);\n\t}\n\n\treturn filterThemePrimitivesByType(themes, primitive, subtheme);\n}\n\nexport { useThemePrimitives };\n","import type { Theme } from \"../..\";\nimport type { UseThemeFontProps } from \"./types\";\n\nimport { useThemePrimitives } from \"./useThemePrimitives\";\n\n/**\n * `useThemeFont()`\n *\n * This hook can be used to get font related primitives from the given theme and subtheme.\n * If theme or subtheme are not specified, it will return font primitives for all themes and subthemes.\n */\nfunction useThemeFont(themeFile: Theme.GriddoTheme, props?: UseThemeFontProps) {\n\treturn useThemePrimitives(themeFile, {\n\t\t...props,\n\t\tprimitive: [\"fontFamily\", \"fontSize\"],\n\t});\n}\n\nexport { useThemeFont };\n","import * as React from \"react\";\n\nexport type UseFetchStateProps<T> = {\n\tisError: boolean;\n\tisLoading: boolean;\n\tmsg: { code: number; msg: string };\n\tdata?: T;\n\tisFirstFetch: boolean;\n};\n\nexport function useFetch<DataStructure>(\n\turl?: string,\n\toptions?: {\n\t\tmethod: \"POST\" | \"GET\";\n\t\tbody: unknown | null;\n\t},\n) {\n\tconst { method, body } = options || {};\n\tconst [data, setData] = React.useState<DataStructure>();\n\tconst [isLoading, setIsLoading] = React.useState(true);\n\tconst [isError, setIsError] = React.useState(false);\n\tconst [isFirstFetch, setIsFirstFetch] = React.useState(true);\n\tconst [msg, setMsg] = React.useState(\n\t\t{} as UseFetchStateProps<DataStructure>[\"msg\"],\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (!url) return;\n\t\tif (method === \"POST\" && !body) return; // With POST, useFetch needs a body.\n\n\t\tsetIsLoading(true);\n\n\t\tfetch(url, {\n\t\t\tmethod: method || \"GET\",\n\t\t\tbody: JSON.stringify(body),\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tsetIsFirstFetch(false);\n\t\t\t\tif (response.status !== 200) {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\tsetIsError(true);\n\t\t\t\t\tsetMsg({\n\t\t\t\t\t\tcode: response.status,\n\t\t\t\t\t\tmsg: response.statusText,\n\t\t\t\t\t});\n\t\t\t\t\tthrow new Error(response.statusText);\n\t\t\t\t}\n\t\t\t\treturn response.json();\n\t\t\t})\n\t\t\t.then((data: DataStructure & { code: number; msg: string }) => {\n\t\t\t\tsetData(data);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tsetIsLoading(false);\n\t\t\t\tsetIsError(false);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tsetIsError(true);\n\t\t\t});\n\t}, [url, body]);\n\n\treturn { data, isLoading, isError, isFirstFetch, msg };\n}\n","import * as React from \"react\";\n\n/**\n * Constantes para las keys de los contextos globales\n */\nexport const CONTEXT_KEYS = {\n\tI18N: \"__GRIDDO_I18N_CONTEXT__\",\n\tMODULE_PREVIEW: \"__GRIDDO_MODULE_PREVIEW_CONTEXT__\",\n\tNAVIGATION: \"__GRIDDO_NAVIGATION_CONTEXT__\",\n\tPAGE: \"__GRIDDO_PAGE_CONTEXT__\",\n\tSESSION: \"__GRIDDO_SESSION_CONTEXT__\",\n\tSITE: \"__GRIDDO_SITE_CONTEXT__\",\n} as const;\n\ntype GlobalContexts = Record<string, React.Context<any>>;\n\n/**\n * Crea o reutiliza un React.Context globalmente compartido.\n * Evita crear múltiples instancias si hay múltiples versiones del paquete\n * (pensado para el split del monorepo).\n *\n * @param key Un identificador único\n * @param defaultValue Valor por defecto del contexto\n */\nexport function getOrCreateGlobalContext<T>(\n\tkey: string,\n\tdefaultValue: T,\n): React.Context<T> {\n\tconst globalObj = (\n\t\ttypeof globalThis !== \"undefined\" ? globalThis : {}\n\t) as GlobalContexts;\n\n\tif (!(key in globalObj)) {\n\t\tglobalObj[key] = React.createContext<T>(defaultValue);\n\t}\n\n\treturn globalObj[key] as React.Context<T>;\n}\n","import type { LocaleTranslations } from \"../../types/core\";\n\nimport * as React from \"react\";\n\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\ninterface I18nContextProps {\n\ttranslations?: LocaleTranslations;\n}\n\ninterface I18nProviderProps {\n\tchildren: JSX.Element;\n\t/** Object with static translations using local i18n locale codes.\n\t * @example\n\t * {\n\t * es_ES: { hi: \"Hola\", ... }\n\t * en_US: { hi: \"Hello\", ... }\n\t * }\n\t */\n\ttranslations?: LocaleTranslations;\n}\n\nconst defaultValue: I18nContextProps = { translations: {} } as const;\n\nconst I18nContext = getOrCreateGlobalContext<I18nContextProps>(\n\tCONTEXT_KEYS.I18N,\n\tdefaultValue,\n);\n\n/**\n * This provider component inject the `translation` object in the context of the\n * site. Then you can retrieve the translation based on the page language using\n * the `useI18n()` hook.\n */\nfunction I18nProvider(props: I18nProviderProps): JSX.Element {\n\tconst { children, translations } = props;\n\n\treturn (\n\t\t<I18nContext.Provider value={{ translations }}>\n\t\t\t{children}\n\t\t</I18nContext.Provider>\n\t);\n}\n\nexport { I18nContext, I18nProvider };\n","import type { GriddoLinkProps } from \"../../components/GriddoLink\";\nimport type { Site } from \"../../types/core\";\n\nimport * as React from \"react\";\n\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\n// Componente que hace de placeholder para el Link de Gatsby\nfunction Link(props: GriddoLinkProps) {\n\tconst { children, ...rest } = props;\n\n\treturn (\n\t\t<a data-griddo=\"link\" {...rest}>\n\t\t\t{children}\n\t\t</a>\n\t);\n}\n\n// Función que hace de place holder para la función navigate de Gatsby.\nconst navigate = () => null;\n\nconst defaultValue: SiteContextProps = {\n\tlinkComponent: Link,\n\tnavigate: navigate,\n};\n\nconst SiteContext = getOrCreateGlobalContext<SiteContextProps>(\n\tCONTEXT_KEYS.SITE,\n\tdefaultValue,\n);\n\n/**\n * <SiteProvider>\n */\nfunction SiteProvider(props: SiteProviderProps) {\n\tconst { children, ...rest } = props;\n\n\tconst value = {\n\t\t...defaultValue,\n\t\t...rest,\n\t};\n\n\treturn <SiteContext.Provider value={value}>{children}</SiteContext.Provider>;\n}\n\ninterface SiteContextProps extends Site {\n\t[key: string]: unknown;\n\tlinkComponent: (props: GriddoLinkProps) => JSX.Element;\n\tnavigate: () => null;\n\tselectEditorID?(\n\t\tselectedComponent: {\n\t\t\teditorID?: number;\n\t\t\tcomponent: string;\n\t\t\ttype?: string;\n\t\t\tparentEditorID?: number;\n\t\t},\n\t\tparentComponent: string | undefined | null,\n\t\te: React.SyntheticEvent,\n\t): void;\n\n\tselectHoverEditorID?(editorID: number): void;\n\tmoduleActions?: {\n\t\tdeleteModuleAction: (editorID: number) => void;\n\t\tduplicateModuleAction: (editorID: number) => void;\n\t};\n}\n\ninterface SiteProviderProps extends Site {\n\tchildren: JSX.Element;\n}\n\nexport {\n\tSiteContext,\n\tSiteProvider,\n\ttype SiteContextProps,\n\ttype SiteProviderProps,\n};\n","import type { ISOLocale, Locale, Page } from \"../../types/core\";\n\nimport * as React from \"react\";\n\nimport { I18nProvider } from \"../I18n\";\nimport { SiteContext } from \"../Site\";\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\nconst defaultValue: PageContextProps = {} as const;\n\nconst PageContext = getOrCreateGlobalContext<PageContextProps>(\n\tCONTEXT_KEYS.PAGE,\n\tdefaultValue,\n);\n\n/**\n * `<PageProvider>`\n *\n * This provider component inject some props in the context of the page. Then you can retrieve the context values using the `usePage()` hook.\n */\nfunction PageProvider(props: PageProviderProps): JSX.Element {\n\t// extract children and use ...rest for the rest of the props\n\tconst { children, ...rest } = props;\n\tconst siteContextValue = React.useContext(SiteContext);\n\tconst translations = siteContextValue?.translations;\n\n\treturn (\n\t\t<PageContext.Provider value={{ ...rest }}>\n\t\t\t<I18nProvider translations={translations}>{children}</I18nProvider>\n\t\t</PageContext.Provider>\n\t);\n}\n\ntype PageProps = Pick<\n\tPage,\n\t| \"activeSectionBase\"\n\t| \"activeSectionSlug\"\n\t| \"apiUrl\"\n\t| \"breadcrumb\"\n\t| \"canonicalURL\"\n\t| \"componentList\"\n\t| \"dimensions\"\n\t| \"footer\"\n\t| \"footerTheme\"\n\t| \"fullPath\"\n\t| \"fullUrl\"\n\t| \"header\"\n\t| \"headerTheme\"\n\t| \"id\"\n\t| \"isHome\"\n\t| \"isIndexed\"\n\t| \"languageId\"\n\t| \"metaDescription\"\n\t| \"metasAdvanced\"\n\t| \"metaTitle\"\n\t| \"modified\"\n\t| \"origin\"\n\t| \"pageLanguages\"\n\t| \"published\"\n\t| \"sectionModules\"\n\t| \"site\"\n\t| \"siteMetadata\"\n\t| \"siteSlug\"\n\t| \"socialDescription\"\n\t| \"socialImage\"\n\t| \"socialTitle\"\n\t| \"structuredData\"\n\t| \"structuredDataContent\"\n\t| \"template\"\n\t| \"theme\"\n\t| \"title\"\n\t| \"metaKeywords\"\n\t| \"follow\"\n>;\n\nexport type PageContextProps = Partial<PageProps> & {\n\t/** The locale code for the page language */\n\tlocale?: Locale;\n\t/** The locale code (ISO format) for the page language */\n\tISOLocale?: ISOLocale;\n};\n\nexport interface PageProviderProps extends PageProps {\n\tchildren: JSX.Element;\n}\n\nexport { PageContext, PageProvider };\n","import type { ISOLocale, Locale } from \"../types/core\";\n\nimport * as React from \"react\";\n\nimport { PageContext, type PageContextProps } from \"../contexts/Page\";\n\n/**\n * `usePage()`\n *\n * Hook to get some page properties.\n * @see [Documentation](https://www.notion.so/griddoio/usePage-2a781f907cf74b4f8df6a4fbe0d8f399)\n *\n * @example\n * const { title } = usePage()\n */\nfunction usePage(): PageContextProps {\n\tconst value = React.useContext(PageContext);\n\n\tif (!value) {\n\t\tconsole.warn(\"Griddo: You forgot to put <PageProvider>.\");\n\t\treturn {} as PageContextProps;\n\t}\n\n\t// If the page in other language is not published (isLive=false) then its\n\t// removed from the pageLanguage array.\n\tconst pageLanguagesWithLivePages = value.pageLanguages?.filter(\n\t\t(language) => language.isLive,\n\t);\n\t// Find the Locale\n\tconst pageLocale = value.pageLanguages?.find(\n\t\t(langItem) => langItem.languageId === value.languageId,\n\t);\n\tconst locale = pageLocale?.locale as Locale;\n\tconst ISOLocale = pageLocale?.locale.replace(\"_\", \"-\") as ISOLocale;\n\n\treturn {\n\t\t...value,\n\t\t// Computed context props\n\t\tpageLanguages: pageLanguagesWithLivePages,\n\t\tlocale,\n\t\tISOLocale,\n\t};\n}\n\nexport { usePage };\n","import * as React from \"react\";\n\nconst FormContext = React.createContext<FormContextProps | null>(null);\n\n/**\n * <FormProvider>\n */\nfunction FormProvider(props: FormProviderProps) {\n\treturn (\n\t\t<FormContext.Provider value={{ isForm: true }}>\n\t\t\t{props.children}\n\t\t</FormContext.Provider>\n\t);\n}\n\ninterface FormContextProps {\n\tisForm: true;\n}\n\ninterface FormProviderProps {\n\tchildren: JSX.Element;\n}\n\nexport { FormContext, FormProvider, type FormContextProps };\n","import * as React from \"react\";\n\nimport { I18nProvider } from \"../I18n\";\nimport { SiteContext } from \"../Site\";\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\nexport interface ModulePreviewContextProps {\n\tlanguageId?: number;\n}\n\nexport interface ModulePreviewProviderProps {\n\tchildren: JSX.Element;\n\tlanguageId?: number;\n}\n\nconst defaultValue: ModulePreviewContextProps = {} as const;\n\nconst ModulePreviewContext =\n\tgetOrCreateGlobalContext<ModulePreviewContextProps>(\n\t\tCONTEXT_KEYS.MODULE_PREVIEW,\n\t\tdefaultValue,\n\t);\n\nfunction ModulePreviewProvider(props: ModulePreviewProviderProps): JSX.Element {\n\t// extract children and use ...rest for the rest of the props\n\tconst { children, ...rest } = props;\n\tconst siteContextValue = React.useContext(SiteContext);\n\tconst translations = siteContextValue?.translations;\n\n\treturn (\n\t\t<ModulePreviewContext.Provider value={{ ...rest }}>\n\t\t\t<I18nProvider translations={translations}>{children}</I18nProvider>\n\t\t</ModulePreviewContext.Provider>\n\t);\n}\n\nexport { ModulePreviewContext, ModulePreviewProvider };\n","import * as React from \"react\";\n\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\ninterface NavigationContextProps {\n\tisNavigation: true;\n}\n\ninterface NavigationProviderProps {\n\tchildren: JSX.Element;\n}\n\nconst NavigationContext =\n\tgetOrCreateGlobalContext<NavigationContextProps | null>(\n\t\tCONTEXT_KEYS.NAVIGATION,\n\t\tnull,\n\t);\n\nfunction NavigationProvider(props: NavigationProviderProps) {\n\treturn (\n\t\t<NavigationContext.Provider value={{ isNavigation: true }}>\n\t\t\t{props.children}\n\t\t</NavigationContext.Provider>\n\t);\n}\n\nexport { NavigationContext, NavigationProvider, type NavigationContextProps };\n","import * as React from \"react\";\n\nimport { getOrCreateGlobalContext, CONTEXT_KEYS } from \"../utils\";\n\ninterface ProviderProps {\n\tchildren: JSX.Element | null;\n}\n\ntype ProviderValue = [\n\tRecord<string, unknown>,\n\t(state: Record<string, unknown>) => void,\n];\n\nconst SessionContext = getOrCreateGlobalContext<ProviderValue>(\n\tCONTEXT_KEYS.SESSION,\n\t[{}, () => null],\n);\n\nconst SessionProvider = (props: ProviderProps) => {\n\tconst { children } = props;\n\tconst value = useSessionProvider();\n\n\treturn (\n\t\t<SessionContext.Provider value={value}>{children}</SessionContext.Provider>\n\t);\n};\n\nconst useSessionProvider = (): ProviderValue => {\n\tconst [config, setConfig] = React.useState({});\n\tconst changeConfig = (value: { [key: string]: unknown }) =>\n\t\tsetConfig((state) => ({ ...state, ...value }));\n\treturn [config, changeConfig];\n};\n\nexport { SessionContext, SessionProvider };\n","import type { Site } from \"../types/core\";\n\nimport * as React from \"react\";\n\nimport { SiteContext } from \"../contexts\";\n\n/**\n * `useSite()`\n *\n * Hook to get some site properties.\n * @see [Documentation](https://www.notion.so/griddoio/useSite-6d8065726c03409f9f884515ecab2eca)\n *\n * @example\n * const { renderer } = useSite()\n */\nconst useSite: UseSite = () => React.useContext(SiteContext);\n\ntype UseSite = () => Site;\n\nexport { useSite };\n","import type { PickRename } from \"../types/global\";\n// @ts-expect-error autotypes instance file\nimport type __AT__ from \"@/autotypes\";\n\nimport * as React from \"react\";\n\nimport { useFetch, type UseFetchStateProps } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\n\ninterface AiAnswersResponse {\n\tstatus: \"ok\" | \"noResponse\";\n\tresponse: string;\n\terror: string;\n}\n\ninterface UseAiAnswersSetBodyAction {\n\tquery: string;\n\tlang?: number;\n\tsite?: number;\n\tformat?: \"lite\" | \"extended\";\n\tminSimilarity?: number;\n\tpriorities?: Partial<Record<__AT__.Templates, number>>;\n\ttemplates?: Array<__AT__.Templates>;\n}\n\ntype UseAiAnswersSetQuery = UseAiAnswersSetBodyAction;\n\ntype UseAiAnswersReturn = [\n\tUseAiAnswersState,\n\t(setQuery: UseAiAnswersSetQuery) => void,\n];\n\n// The same state as useFetch but renaming data to query for this hook\ntype UseAiAnswersState = PickRename<\n\tUseFetchStateProps<AiAnswersResponse>,\n\t\"data\",\n\t\"query\"\n>;\n\nexport function useAiAnswers(): UseAiAnswersReturn {\n\tconst { publicApiUrl } = useSite();\n\tconst { languageId } = usePage();\n\t// init with null to prevent call useFetch without a valid body.\n\tconst [body, setBody] = React.useState<UseAiAnswersSetBodyAction | null>(\n\t\tnull,\n\t);\n\n\tconst setQuery = (options: UseAiAnswersSetQuery) => {\n\t\tconst {\n\t\t\tquery,\n\t\t\tlang = languageId as number, // this `as` remove \"?\" fro languageId coming from the hook\n\t\t\tsite,\n\t\t\ttemplates,\n\t\t\tpriorities,\n\t\t\tminSimilarity,\n\t\t} = options;\n\t\tsetBody({\n\t\t\tquery,\n\t\t\tlang,\n\t\t\tsite,\n\t\t\ttemplates,\n\t\t\tpriorities,\n\t\t\tminSimilarity,\n\t\t});\n\t};\n\n\tconst { isError, isFirstFetch, isLoading, msg, data } =\n\t\tuseFetch<AiAnswersResponse>(`${publicApiUrl}/ai/answers`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t});\n\n\treturn [\n\t\t{\n\t\t\tisError,\n\t\t\tisFirstFetch,\n\t\t\tisLoading,\n\t\t\tmsg,\n\t\t\tquery: data,\n\t\t},\n\t\tsetQuery,\n\t];\n}\n\nexport {\n\tUseAiAnswersReturn,\n\tUseAiAnswersSetBodyAction,\n\tUseAiAnswersSetQuery,\n\tUseAiAnswersState,\n\ttype AiAnswersResponse,\n};\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import * as React from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\n\ninterface useAIReferenceFieldResponse {\n\tpage: number;\n\titemsPerPage: number;\n\ttotalItems: number;\n\titems: Array<{\n\t\ttitle: string;\n\t\turl: string;\n\t\timage: null;\n\t\tdescription: string;\n\t\ttemplate: string;\n\t\tsimilarity: number;\n\t\tstructuredData?: Record<string, unknown>;\n\t}>;\n}\n\ntype useAIReferenceFieldProps = {\n\t// Son opcionales porque en AX puedes no tenerlos rellenados o seleccionados.\n\tprompt?: string;\n\ttemplates?: Array<string>;\n\tsites?: Array<number>;\n\tlanguage?: number;\n\tlimit?: number;\n\t// Son completamente opcionales.\n\tuseStructuredData?: boolean;\n\tfields?: Array<string>;\n\tarea?: string;\n};\n\n/**\n * Hook to call the AI ReferenceField API.\n *\n * @example\n * const news = useAIReferenceField(data)\n * news.items.map(...)\n */\nexport function useAIReferenceField(\n\tdata?: useAIReferenceFieldProps,\n): useAIReferenceFieldResponse | undefined | null {\n\tconst { publicApiUrl } = useSite();\n\tconst { id: pageId } = usePage();\n\tconst [response, setResponse] =\n\t\tReact.useState<useAIReferenceFieldResponse | null>(null);\n\tconst {\n\t\tprompt,\n\t\ttemplates,\n\t\tsites,\n\t\tlanguage,\n\t\tuseStructuredData = false,\n\t\tfields,\n\t\tlimit,\n\t\tarea,\n\t} = data || {};\n\n\tconst [id] = React.useState(() => {\n\t\tif (typeof window === \"undefined\") return \"\";\n\t\ttry {\n\t\t\tlet storedId = localStorage.getItem(\"gpx_id\");\n\t\t\tif (!storedId) {\n\t\t\t\tstoredId = uuidv4();\n\t\t\t\tlocalStorage.setItem(\"gpx_id\", storedId);\n\t\t\t}\n\t\t\treturn storedId;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error accessing localStorage:\", error);\n\t\t\treturn uuidv4();\n\t\t}\n\t});\n\n\tReact.useEffect(() => {\n\t\t// no data\n\t\tif (!data) return;\n\t\t// no templates\n\t\tif (Array.isArray(data.templates) && data?.templates.length < 1) return;\n\t\t// no language\n\t\tif (!data.language) return;\n\t\t// no limit\n\t\tif (!data.limit) return;\n\n\t\ttry {\n\t\t\tconst url = `${publicApiUrl}/gpx/pages/`;\n\n\t\t\tconst body = {\n\t\t\t\tid,\n\t\t\t\tprompt,\n\t\t\t\ttemplates,\n\t\t\t\tsites,\n\t\t\t\tlanguage,\n\t\t\t\tuseStructuredData,\n\t\t\t\tfields,\n\t\t\t\tlimit,\n\t\t\t\tarea,\n\t\t\t\tpageId,\n\t\t\t};\n\n\t\t\tfetch(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify(body),\n\t\t\t})\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.ok) {\n\t\t\t\t\t\tthrow new Error(`HTTP error! status: ${res.status}`);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.json();\n\t\t\t\t})\n\t\t\t\t.then((data) => {\n\t\t\t\t\treturn setResponse(data);\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(\"Error:\", error);\n\t\t\t\t\tsetResponse(null);\n\t\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error\", error);\n\t\t\tsetResponse(null);\n\t\t}\n\t}, [\n\t\tpublicApiUrl,\n\t\tdata?.prompt,\n\t\tdata?.templates,\n\t\tdata?.sites,\n\t\tdata?.language,\n\t\tdata?.limit,\n\t]);\n\n\treturn response;\n}\n","import type { PickRename } from \"../types/global\";\n// @ts-expect-error autotypes instance file\nimport type __AT__ from \"@/autotypes\";\n\nimport * as React from \"react\";\n\nimport { useFetch, type UseFetchStateProps } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\n\n// Api Response for AISearch hook\ninterface AiSearchResponse {\n\tpage: number;\n\titemsPerPage: number;\n\ttotalItems: number;\n\titems: Array<{\n\t\ttitle: string;\n\t\turl: string;\n\t\timage: null;\n\t\tdescription: string;\n\t\ttemplate: string;\n\t\tsimilarity: number;\n\t\tstructuredData?: Record<string, unknown>;\n\t}>;\n}\n\ninterface UseAiSearchSetBodyAction {\n\tquery: string;\n\tlang?: number;\n\tsite?: number;\n\tpriorities?: Partial<Record<__AT__.Templates, number>>;\n\ttemplates?: Array<__AT__.Templates>;\n\tminSimilarity?: number;\n\tpage?: number;\n\titemsPerPage?: number;\n\tuseStructuredData?: boolean;\n\tfields?: Array<string>;\n}\n\ntype UseAiSearchSetQuery = UseAiSearchSetBodyAction;\n\ntype UseAiSearchReturn = [\n\tUseAiSearchState,\n\t(setQuery: UseAiSearchSetQuery) => void,\n];\n\n// The same state as useFetch but renaming data to query for this hook\ntype UseAiSearchState = PickRename<\n\tUseFetchStateProps<AiSearchResponse>,\n\t\"data\",\n\t\"query\"\n>;\n\nexport function useAiSearch(): UseAiSearchReturn {\n\tconst { publicApiUrl } = useSite();\n\tconst { languageId } = usePage();\n\t// init with null to prevent call useFetch without a valid body.\n\tconst [body, setBody] = React.useState<UseAiSearchSetBodyAction | null>(null);\n\n\tconst setQuery = (options: UseAiSearchSetQuery) => {\n\t\tconst {\n\t\t\tquery,\n\t\t\tlang = languageId as number, // this `as` remove \"?\" fro languageId coming from the hook\n\t\t\tsite,\n\t\t\ttemplates,\n\t\t\tpriorities,\n\t\t\tminSimilarity,\n\t\t\tpage = 1,\n\t\t\titemsPerPage = 10,\n\t\t\tuseStructuredData = false,\n\t\t\tfields,\n\t\t} = options;\n\t\tsetBody({\n\t\t\tquery,\n\t\t\tlang,\n\t\t\tsite,\n\t\t\ttemplates,\n\t\t\tpriorities,\n\t\t\tminSimilarity,\n\t\t\tpage,\n\t\t\titemsPerPage,\n\t\t\tuseStructuredData,\n\t\t\tfields,\n\t\t});\n\t};\n\n\tconst { isError, isFirstFetch, isLoading, msg, data } =\n\t\tuseFetch<AiSearchResponse>(`${publicApiUrl}/ai/search`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t});\n\n\treturn [\n\t\t{\n\t\t\tisError,\n\t\t\tisFirstFetch,\n\t\t\tisLoading,\n\t\t\tmsg,\n\t\t\tquery: data,\n\t\t},\n\t\tsetQuery,\n\t];\n}\n\nexport {\n\tUseAiSearchReturn,\n\tUseAiSearchSetBodyAction,\n\tUseAiSearchSetQuery,\n\tUseAiSearchState,\n\ttype AiSearchResponse,\n};\n","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","const IS_BROWSER = typeof window !== \"undefined\";\n\nexport type PublicApiOperators = \"or\" | \"and\" | \"OR\" | \"AND\";\n\nexport interface ConcatParams {\n\tbaseUrl: string;\n\tparams: Record<string, any>;\n}\n\nfunction isLocalStorageAvailable() {\n\ttry {\n\t\tconst test = \"___local_storage_test___\";\n\t\tlocalStorage.setItem(test, test);\n\t\tlocalStorage.removeItem(test);\n\t\treturn true;\n\t} catch (e) {\n\t\tconsole.log(e);\n\t\treturn false;\n\t}\n}\n\nfunction getToken() {\n\tif (!isLocalStorageAvailable()) {\n\t\treturn null;\n\t}\n\n\tconst localStorageData = localStorage.getItem(\"persist:app\");\n\n\t// No localstorage or browser\n\tif (!localStorageData || !IS_BROWSER) return null;\n\n\tconst appInfo = JSON.parse(localStorageData);\n\n\tlet { token } = appInfo;\n\ttoken = JSON.parse(token);\n\tconst authorization = { Authorization: `bearer ${token}` };\n\n\treturn authorization;\n}\n\nfunction getSiteID() {\n\tif (!isLocalStorageAvailable()) {\n\t\treturn null;\n\t}\n\n\tconst localStorageData = localStorage.getItem(\"persist:root\");\n\n\t// No localstorage or browser\n\tif (!IS_BROWSER || !localStorageData) return 1;\n\n\tconst appInfo = JSON.parse(localStorageData);\n\n\tlet { sites } = appInfo;\n\tsites = JSON.parse(sites);\n\tconst id = sites.currentSiteInfo?.id;\n\treturn id;\n}\n\nfunction getLang() {\n\tif (!isLocalStorageAvailable()) {\n\t\treturn false;\n\t}\n\n\tconst localStorageData = localStorage.getItem(\"langID\");\n\n\t// No localstorage or browser\n\tif (!IS_BROWSER || !localStorageData) return false;\n\n\treturn Number.parseInt(localStorageData);\n}\n\n/**\n * cleanPathSlashes\n * @param url A string\n * @example\n * @returns A string without duplicated slashes\n * cleanPathSlashes('url/with//duplicate///slashes//)\n * -> 'url/with/duplicate/slashes/'\n *\n */\nfunction cleanPathSlashes(url: string) {\n\treturn url.split(\"/\").filter(Boolean).join(\"/\");\n}\n\n/**\n * isValidParam\n * @param param A value for the query param\n * @returns true if the param is a valid query param\n */\nfunction isValidParam(p: Array<string> | string | number) {\n\treturn (\n\t\t(Array.isArray(p) && p.length > 0) ||\n\t\ttypeof p === \"number\" ||\n\t\t(typeof p === \"string\" && !!p)\n\t);\n}\n\n/**\n * concatParams\n * @param params\n * @param params.baseUrl base url of the api\n * @param params.params object with the params to be sent\n * @returns a string with the params concatenated\n */\nfunction concatParams({ baseUrl, params }: ConcatParams) {\n\tconst paramsUrl = Object.keys(params)\n\t\t.map((key) => (isValidParam(params[key]) ? `${key}/${params[key]}` : \"\"))\n\t\t.join(\"/\");\n\treturn `${baseUrl}${cleanPathSlashes(paramsUrl)}`;\n}\n\nexport { concatParams, getLang, getSiteID, getToken, isLocalStorageAvailable };\n","import type { Source } from \"../types/api-response-fields\";\nimport type { FilterItemFromFilterEndPoint } from \"../types/global\";\n\nimport { getLang, getToken } from \"../utils\";\n\ntype SimpleFilter = Array<unknown>;\ntype FilterWithSource = Array<{ id: number; source: string; label: string }>;\ntype FilterFromEndpoint = Record<string, FilterItemFromFilterEndPoint>;\ntype FilterWithCategory = Array<{\n\tid: number;\n\tcategory: string;\n\tlabel: string;\n\tcolor: string;\n}>;\n\n// Return a RequestInit from node types\nfunction getOptions(\n\tbody: Record<string, unknown>,\n\tlangID?: number,\n): RequestInit {\n\tconst lang = langID || getLang();\n\n\treturn {\n\t\tmethod: \"POST\",\n\t\tmode: \"cors\",\n\t\tcache: \"no-cache\",\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\tlang: lang?.toString(),\n\t\t\t...getToken(),\n\t\t},\n\t\tredirect: \"follow\",\n\t\treferrerPolicy: \"no-referrer\",\n\t\tbody: JSON.stringify(body),\n\t};\n}\n\n// Si es un array de números, es oldFormat\nfunction isArrayOfNumbers(arr?: Array<unknown>): arr is Array<number> {\n\tif (!arr) return false;\n\treturn arr.every((item) => typeof item === \"number\");\n}\n\nfunction isSimpleFilter(\n\tsomeFilter?: SimpleFilter | FilterWithSource | FilterFromEndpoint,\n): someFilter is Array<number> {\n\treturn Array.isArray(someFilter) && isArrayOfNumbers(someFilter);\n}\n\n// TODO: Asegurar más este guard para que analice la estructura de `someFilter`\nfunction isFilterWithSource(\n\tsomeFilter?: SimpleFilter | FilterWithSource | FilterFromEndpoint,\n): someFilter is FilterWithSource {\n\treturn Array.isArray(someFilter) && !isArrayOfNumbers(someFilter);\n}\n\n// TODO: Asegurar más este guard para que analice la estructura de `someFilter`\nfunction isFilterFromEndpoint(\n\tsomeFilter?: SimpleFilter | FilterWithSource | FilterFromEndpoint,\n): someFilter is FilterFromEndpoint {\n\treturn !isSimpleFilter(someFilter) && !isFilterWithSource(someFilter);\n}\n\n// TODO: Asegurar más este guard para que analice la estructura de `someFilter`\nfunction isFilterWithCategory(\n\tsomeFilter?: SimpleFilter | FilterFromEndpoint | FilterWithCategory,\n): someFilter is FilterWithCategory {\n\treturn Array.isArray(someFilter) && !isArrayOfNumbers(someFilter);\n}\n\nfunction parseFilterWithSource(filters?: FilterWithSource) {\n\tif (!filters) return undefined;\n\n\tconst filtersReduced = filters\n\t\t? filters.reduce(\n\t\t\t\t(acc, filterItem) => {\n\t\t\t\t\tconst { source, id } = filterItem;\n\t\t\t\t\t// init si no existe...\n\t\t\t\t\tif (!acc[source]) acc[source] = [];\n\t\t\t\t\t// add...\n\t\t\t\t\tacc[source].push(id);\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{} as Record<string, Array<number>>,\n\t\t\t)\n\t\t: {};\n\n\treturn Object.keys(filtersReduced)\n\t\t.map((key) => `${key}:${filtersReduced[key]}`)\n\t\t.join(\";\");\n}\n\nfunction parseSimpleFilter(filters?: Array<number>) {\n\treturn filters?.join(\",\");\n}\n\nfunction parseFilterWithCategory(filters?: FilterWithCategory) {\n\treturn filters?.map((filter) => filter.id).join(\",\");\n}\n\nfunction parseFilterFromEndpoint(filters?: FilterFromEndpoint) {\n\tif (!filters) return undefined;\n\n\treturn Object.keys(filters).map(\n\t\t(keyName) => filters[keyName].items?.map(({ id }) => id) || [],\n\t);\n}\n\nfunction parseFilter(\n\tfilter?: SimpleFilter | FilterWithSource | FilterFromEndpoint,\n) {\n\tif (isSimpleFilter(filter)) {\n\t\treturn parseSimpleFilter(filter);\n\t}\n\tif (isFilterWithCategory(filter)) {\n\t\treturn parseFilterWithCategory(filter);\n\t}\n\tif (isFilterFromEndpoint(filter)) {\n\t\treturn parseFilterFromEndpoint(filter);\n\t}\n\treturn undefined;\n}\n\n/**\n * Compute `related` with legacy support for the number and Array<number> value\n */\nfunction parseRelated(filter?: number | SimpleFilter | FilterFromEndpoint) {\n\tif (typeof filter === \"number\") {\n\t\treturn filter;\n\t}\n\tif (isSimpleFilter(filter)) {\n\t\treturn parseSimpleFilter(filter);\n\t}\n\tif (isFilterWithSource(filter)) {\n\t\treturn parseFilterWithSource(filter);\n\t}\n\tif (isFilterFromEndpoint(filter)) {\n\t\treturn parseFilterFromEndpoint(filter);\n\t}\n\treturn undefined;\n}\n\nfunction isOperator(operator?: string) {\n\treturn !!operator && [\"or\", \"and\"].includes(operator.toLowerCase());\n}\n\nfunction parseSources<ContentType>(sources?: Array<Source<ContentType>>) {\n\tif (!sources) return \"\";\n\n\tconst query: string[] = [];\n\tfor (const source of sources) {\n\t\tconst filters = parseFilter(source.filters);\n\n\t\tconst options: string[] = [];\n\t\tif (filters) {\n\t\t\toptions.push(`filters=${filters}`);\n\t\t}\n\n\t\tif (source.filterOperator) {\n\t\t\toptions.push(`filterOperator=${source.filterOperator}`);\n\t\t}\n\n\t\tif (source.globalOperator) {\n\t\t\toptions.push(`globalOperator=${source.globalOperator}`);\n\t\t}\n\n\t\toptions.length\n\t\t\t? query.push(`${source.structuredData}[${options.join(\";\")}]`)\n\t\t\t: query.push(`${source.structuredData}`);\n\t}\n\n\treturn query.join(\",\");\n}\n\n/**\n * Compute `relations` with legacy support for the boolean value\n */\nfunction parseRelations(relations?: boolean | \"off\" | \"simple\" | \"full\") {\n\t// Boolean value: legacy\n\tif (typeof relations === \"boolean\") {\n\t\treturn relations ? \"simple\" : \"off\";\n\t}\n\n\t// New values\n\tif (relations === \"off\" || relations === \"simple\" || relations === \"full\") {\n\t\treturn relations;\n\t}\n\n\t// off...\n\treturn \"off\";\n}\n\nexport {\n\tgetOptions,\n\tisArrayOfNumbers,\n\tisFilterFromEndpoint,\n\tisFilterWithCategory,\n\tisFilterWithSource,\n\tisOperator,\n\tisSimpleFilter,\n\tparseFilter,\n\tparseFilterFromEndpoint,\n\tparseFilterWithCategory,\n\tparseFilterWithSource,\n\tparseRelated,\n\tparseRelations,\n\tparseSimpleFilter,\n\tparseSources,\n};\n","import type { Fields } from \"..\";\n\nimport * as React from \"react\";\n\nimport { usePage } from \"./usePage\";\nimport { getOptions } from \"./utils\";\nimport { getLang, getSiteID } from \"../utils\";\n\n/**\n * Returns an array of the ContentType data from the ReferenceField. This hooks only works in the context of the Griddo editor.\n * @see [Documentación](https://www.notion.so/griddoio/useReferenceFieldData-9eca3bc618464c5c9bee67f3a9607138)\n *\n * @param data The property of the ReferenceField.\n *\n * @example\n * const dataItems = useReferenceFieldData<NewsContentType>(data)\n */\nfunction useReferenceFieldData<ContentType = unknown>(\n\t/** The ReferenceField from the module schema */\n\tdata?: Fields.Reference<ContentType>\n): Fields.QueriedData<ContentType> | undefined | null {\n\tconst [response, setResponse] = React.useState(null);\n\tconst {\n\t\torder,\n\t\tquantity,\n\t\tsources,\n\t\tmode,\n\t\tfixed,\n\t\tallLanguages,\n\t\tpreferenceLanguage,\n\t\tfullRelations = false,\n\t\tsite,\n\t\tlang,\n\t} = data || {};\n\n\tconst { apiUrl } = usePage();\n\n\tReact.useEffect(() => {\n\t\tconst langID = getLang();\n\t\tconst isAX = !!langID;\n\t\tconst siteID = site || getSiteID() || \"global\";\n\t\tconst url = `${apiUrl}/site/${siteID}/distributor`;\n\n\t\tconst body =\n\t\t\tmode === \"auto\"\n\t\t\t\t? {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\torder,\n\t\t\t\t\t\tquantity,\n\t\t\t\t\t\tsources,\n\t\t\t\t\t\tfullRelations,\n\t\t\t\t\t\tallLanguages,\n\t\t\t\t\t\tpreferenceLanguage,\n\t\t\t\t }\n\t\t\t\t: { mode, fixed, fullRelations };\n\t\tconst fetchOptions = getOptions(body, lang);\n\n\t\tisAX &&\n\t\t\tfetch(url, fetchOptions)\n\t\t\t\t.then((res) => res.json())\n\t\t\t\t.then((data) => setResponse(data))\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(\"Error:\", error);\n\t\t\t\t});\n\t}, [\n\t\tallLanguages,\n\t\tapiUrl,\n\t\tfixed,\n\t\tfullRelations,\n\t\tlang,\n\t\tmode,\n\t\torder,\n\t\tpreferenceLanguage,\n\t\tquantity,\n\t\tsite,\n\t\tsources,\n\t\tlang,\n\t]);\n\n\treturn response;\n}\n\nexport { useReferenceFieldData };\n","import type { Fields } from \"..\";\n\nimport { useReferenceFieldData } from \"./useReferenceFieldData\";\n\n/**\n * `useContentType<ContentType>()`\n *\n * Returns an array of the ContentType data.\n * The hook abstracts the dual behaviour of the ContentTypes inside Griddo and it will always returns the same value and type regardless the context: editor or build phase.\n * Also the hook accepts a generic type to idicates the return type of the hook.\n *\n * @param options.data The property of the ReferenceField.\n * @param options.queriedData The property returned by the build phase with the data queried.\n * @example\n * useContentType<NewsContentTypeProps>({ data, queriedItems })\n */\nfunction useContentType<ContentType>({\n\tdata,\n\tqueriedData,\n}: {\n\t/** The ReferenceField from the module schema */\n\tdata?: Fields.Reference<ContentType>;\n\t/** The queriedData prop from the building phase */\n\tqueriedData?: Fields.QueriedData<ContentType>;\n}) {\n\tconst dataItems =\n\t\t(data && useReferenceFieldData<ContentType>(data)) || queriedData;\n\n\treturn dataItems;\n}\n\nexport { useContentType };\n","import type { Fields } from \"..\";\n\nimport * as React from \"react\";\n\nimport { usePage } from \"./usePage\";\nimport { getOptions } from \"./utils\";\nimport { getLang, getSiteID } from \"../utils\";\n\n/**\n * `useContentTypeNavigation<ContentType>()`\n *\n * Returns an object with previous and next ContentType items. This hooks only works in the context of the Griddo editor.\n *\n * @param data The property of the ReferenceField.\n *\n * @example\n * const { previous, next } = useContentTypeNavigation<NewsContentType>(data)\n */\nfunction useContentTypeNavigation<ContentType = unknown>(\n\tdata?: Fields.ReferenceNavigation,\n): Fields.QueriedNavigationDataItem<ContentType> {\n\tconst [response, setResponse] = React.useState<\n\t\tFields.QueriedNavigationDataItem<ContentType>\n\t>({ previous: [], next: [], error: undefined });\n\n\tconst { apiUrl, canonicalURL, structuredDataContent } = usePage();\n\n\tconst {\n\t\torder = \"recent-asc\",\n\t\tquantity = 1,\n\t\tfullRelations = false,\n\t\treferenceId = structuredDataContent?.id,\n\t} = data || {};\n\n\tReact.useEffect(() => {\n\t\tconst lang = getLang();\n\t\tconst isAX = !!lang;\n\t\tconst siteID = getSiteID() || canonicalURL || \"global\";\n\t\tconst url = `${apiUrl}/site/${siteID}/distributor`;\n\t\tconst body = {\n\t\t\tmode: \"navigation\",\n\t\t\torder,\n\t\t\tquantity,\n\t\t\tfullRelations,\n\t\t\treferenceId,\n\t\t};\n\n\t\tconst fetchOptions = getOptions(body);\n\n\t\tisAX &&\n\t\t\tfetch(url, fetchOptions)\n\t\t\t\t.then((res) => res.json())\n\t\t\t\t.then((data) => setResponse(data))\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(\"Error:\", error);\n\t\t\t\t});\n\t}, [apiUrl, canonicalURL, fullRelations, order, quantity, referenceId]);\n\n\treturn response;\n}\n\nexport { useContentTypeNavigation };\n","import type {\n\tFiltersDataApiQueryResponseProps,\n\tPickRename,\n\tSetQueryProps,\n} from \"../types/global\";\n\nimport * as React from \"react\";\n\nimport { useFetch, type UseFetchStateProps } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\nimport { parseRelated } from \"./utils\";\nimport { concatParams } from \"../utils\";\n\n/**\n * `useDataFilters()`\n *\n * Returns an object with filter information to use with ContentTypes.\n *\n * @example\n * const [{ query }, setQuery] = useDataFilters()\n * setQuery(data) // `data` from a `ReferenceField`\n */\nfunction useDataFilters<ContentType>(): UseDataFiltersReturn<ContentType> {\n\t// Pull from providers\n\tconst { publicApiUrl, siteId, renderer } = useSite();\n\tconst { languageId } = usePage();\n\n\t// State for the data and the query url\n\tconst [url, setUrl] = React.useState<UseDataFilterSetUrlAction>();\n\n\t// Check the context: AX or CX\n\tconst isAX = renderer === \"editor\";\n\n\t// Exposed function to modify the internal state\n\tfunction setQuery<ContentType = unknown>({\n\t\tapiUrl = `${publicApiUrl}`,\n\t\tcached,\n\t\tdata: refField,\n\t\tgroupingCategories,\n\t\tlang = languageId,\n\t\tsite = siteId,\n\t}: UseDataFiltersSetQueryProps<ContentType>) {\n\t\tif (!refField) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst endPointParam = \"/filters/\";\n\t\tconst customCached = isAX ? new Date().valueOf() : cached;\n\t\tconst structuredData =\n\t\t\trefField.sources?.map(({ structuredData }) => structuredData) ||\n\t\t\trefField.fixed;\n\t\tconst structuredDataParam = `${structuredData}/`;\n\n\t\tconst queryUrl = concatParams({\n\t\t\tbaseUrl: `${apiUrl}${endPointParam}${structuredDataParam}`,\n\t\t\tparams: {\n\t\t\t\t// `site` and `lang` are from hook props and are deprecated\n\t\t\t\tsite: refField.site || site || siteId,\n\t\t\t\tlang: refField.lang || lang || languageId,\n\t\t\t\trelated: parseRelated(refField.related),\n\t\t\t\tallLanguages: refField.allLanguages ? \"on\" : \"off\",\n\t\t\t\tfilterOperator: refField.sources?.map(\n\t\t\t\t\t({ filterOperator }) => filterOperator,\n\t\t\t\t),\n\t\t\t\tglobalOperator: refField.sources?.map(\n\t\t\t\t\t({ globalOperator }) => globalOperator,\n\t\t\t\t),\n\t\t\t\torder: refField.order,\n\t\t\t\tgroupingCategories: groupingCategories ? \"on\" : \"off\",\n\t\t\t\tcached: customCached,\n\t\t\t},\n\t\t});\n\n\t\tsetUrl({ queryUrl });\n\t}\n\n\tconst { isError, isLoading, msg, data, isFirstFetch } = useFetch<\n\t\tFiltersDataApiQueryResponseProps<ContentType>\n\t>(url?.queryUrl);\n\n\treturn [{ query: data, isLoading, isError, msg, isFirstFetch }, setQuery];\n}\n\n// Types\nexport interface UseDataFilterSetUrlAction {\n\tqueryUrl: string;\n}\n\nexport type UseDataFiltersSetQueryProps<ContentType> = Pick<\n\tSetQueryProps<ContentType>,\n\t\"data\" | \"apiUrl\" | \"lang\" | \"site\" | \"cached\" | \"groupingCategories\"\n>;\n\n// The same state as useFetch but renaming data to query for this hook\nexport type UseDataFiltersState<ContentType> = PickRename<\n\tUseFetchStateProps<FiltersDataApiQueryResponseProps<ContentType>>,\n\t\"data\",\n\t\"query\"\n>;\n\nexport type UseDataFiltersReturn<ContentType> = [\n\tUseDataFiltersState<ContentType>,\n\t(setQuery: UseDataFiltersSetQueryProps<ContentType>) => void,\n];\n\nexport { useDataFilters };\n","import type { ImageConfig } from \"../hooks/useGriddoImage\";\nimport type { CloudinaryResponsiveImageProps } from \"../hooks/useImage\";\nimport type { Core } from \"../index\";\nimport type { ImageFormats, ResponsiveImageProps } from \"../types/core\";\n\nfunction sanitizeUrl(url: string) {\n\tconst [protocol, slug] = url.split(/(^https?:\\/\\/|^\\/\\/)/).filter(Boolean);\n\tconst sanitizeSlug = slug?.replace(/\\/\\/+/g, \"/\").replace(/\\/$/, \"\");\n\treturn `${protocol}${sanitizeSlug}`;\n}\n\nfunction rearrangeResponsiveArray(arr: Array<ResponsiveImageProps>) {\n\tconst nullBP = arr.filter((entry) => entry.breakpoint === null);\n\tconst mediaBPs = arr.filter((entry) => entry.breakpoint !== null);\n\treturn [...mediaBPs, ...nullBP];\n}\n\nfunction cloudinaryRearrangeResponsiveArray(\n\tarr?: Array<CloudinaryResponsiveImageProps>,\n) {\n\tif (!arr) return [];\n\tconst nullBP = arr.filter((entry) => entry.breakpoint === null);\n\tconst mediaBPs = arr.filter((entry) => entry.breakpoint !== null);\n\treturn [...mediaBPs, ...nullBP];\n}\n\nfunction fillIntArray(n: number, from = 0) {\n\treturn Array(n)\n\t\t.fill(0)\n\t\t.map((_, idx) => idx + from);\n}\n\nfunction removeUnit(unit?: string) {\n\treturn unit\n\t\t?.toString()\n\t\t.split(/cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%/)[0];\n}\n\n/**\n * _filterFalsePropValues\n * Devuelve un objeto con las propiedades truthy del objeto de entrada\n * @param {object} object Un objeto\n * @returns {object} un nuevo objeto solo con propiedades truthy\n * @example\n * _filterFalsePropValues({a: 1, b: undfined})\n * -> {a: 1}\n */\nfunction _filterFalsePropValues(object: any) {\n\treturn Object.fromEntries(Object.entries(object).filter((tuple) => tuple[1]));\n}\n\n/**\n * mergeObject\n * Sobreescribe el objeto2 al objeto1 siempre que las propiedades sean truthy\n * @param {object} object1 Un objeto\n * @param {object} object2 Un objeto\n * @return {object} un nuevo objeto resultado de sobreescribir object2 a object1\n * @example\n * mergeObject({a: 1, b: 0}, {a: 3, b: null})\n * -> {a: 3, b:0}\n */\nfunction mergeObjects(object1: any, object2: any) {\n\treturn {\n\t\t..._filterFalsePropValues(object1),\n\t\t..._filterFalsePropValues(object2),\n\t};\n}\n\nfunction getGriddoDamURIWithParams(props: GetGriddoDamURIWithParamsProps) {\n\tconst { damId, imageConfig, ...rest } = props;\n\n\t// We want to type imageConfig but to mergeObject doesn't mind it only wants a\n\t// unkown object\n\tconst params = mergeObjects(\n\t\timageConfig as unknown as UnknownObject,\n\t\trest as UnknownObject,\n\t) as Params;\n\tconst crop = params.crop ? `c/${params.crop}` : \"\";\n\tconst quality = params.quality ? `q/${params.quality}` : \"\";\n\tconst format = params.format ? `f/${params.format}` : \"\";\n\tconst width = params.width ? `w/${removeUnit(params.width as string)}` : \"\";\n\t//prettier-ignore\n\tconst height = params.height ? `h/${removeUnit(params.height as string)}` : \"\";\n\tconst position = params.position ? `p/${params.position}` : \"\";\n\tconst transforms = params.transforms?.length ? `t/${params.transforms}` : \"\";\n\n\t// Build the URI with the query params\n\tconst queryParamsURL = `${crop}/${quality}/${width}/${height}/${position}/${transforms}/${format}`;\n\tconst fullUrl = sanitizeUrl(\n\t\t`${imageConfig.domain}/${queryParamsURL}/${damId}`,\n\t);\n\n\treturn fullUrl;\n}\n\n/**\n * cleanCloudinaryURI\n * Limpia la URI de cloudinary con parámetros sin valor\n * @param {string} URI la parte de la url de cloudinary con los parámetros del\n * query para la imagen.\n * @returns {string} la URI sin valores \"nulos\"\n * @example\n * Elimina parámetros de la URI sin valores correctos\n * cloeanCloudinaryURI(\"w_320,q_undefined,f_null,,,g_,h_120\")\n * -> \"w_320,h_120\"\n */\nfunction cleanCloudinaryURI(URI: string) {\n\treturn URI.split(/._null|._undefined|,{1,}|._,|._$|undefined|null/)\n\t\t.filter(Boolean)\n\t\t.join(\",\");\n}\n\nfunction getDomainFromDamUrl(damUrl: string) {\n\tif (damUrl && typeof damUrl === \"string\") {\n\t\t// eslint-disable-next-line no-useless-escape\n\t\treturn damUrl.split(/(^[http:|https:|\\/\\/]*[\\S][^\\/]*)/)[1];\n\t}\n\n\treturn damUrl;\n}\n\nfunction getDamIdFromDamUrl(damUrl: string) {\n\tif (damUrl && typeof damUrl === \"string\") {\n\t\tconst rest = damUrl.split(\"/\").filter(Boolean).slice(-1)[0];\n\t\treturn rest;\n\t}\n\n\treturn damUrl;\n}\n\nconst rndHash = () =>\n\tMath.random()\n\t\t.toString(36)\n\t\t.replace(/[^a-z]+/g, \"\")\n\t\t.substring(0, 8);\n\nexport type UnknownObject = Record<string, unknown>;\n\ninterface GetGriddoDamURIWithParamsProps {\n\tdamId: string;\n\timageConfig: ImageConfig;\n\t[key: string]: unknown;\n}\n\ninterface Params {\n\tcrop?: string;\n\tquality?: number;\n\tformat?: ImageFormats;\n\twidth?: string;\n\theight?: string;\n\tposition?: Core.ImagePosition;\n\ttransforms?: Array<Core.ImageTransform>;\n}\n\nexport {\n\tcleanCloudinaryURI,\n\tcloudinaryRearrangeResponsiveArray,\n\tfillIntArray,\n\tgetDamIdFromDamUrl,\n\tgetDomainFromDamUrl,\n\tgetGriddoDamURIWithParams,\n\tmergeObjects,\n\trearrangeResponsiveArray,\n\tremoveUnit,\n\trndHash,\n};\n","import type {\n\tImageCropType,\n\tImageDecoding,\n\tImageFormats,\n\tImageLoading,\n\tImagePosition,\n\tImageTransform,\n\tResponsiveImageProps,\n} from \"../types/core\";\n\nimport * as React from \"react\";\n\nimport { SiteContext } from \"../contexts\";\nimport {\n\tremoveUnit,\n\trearrangeResponsiveArray,\n\tgetGriddoDamURIWithParams,\n\tgetDomainFromDamUrl,\n\tgetDamIdFromDamUrl,\n} from \"../utils/images\";\n\nconst MIME_TYPES = {\n\tjpg: \"image/jpeg\",\n\tjpeg: \"image/jpeg\",\n\tgif: \"image/gif\",\n\tsvg: \"image/svg+xml\",\n\tpng: \"image/png\",\n\tavif: \"image/avif\",\n\twebp: \"image/webp\",\n};\n\nconst internalDefaults: ImageConfig = {\n\tquality: 75,\n\tcrop: \"cover\",\n\tloading: \"lazy\",\n\tdecoding: \"auto\",\n\tblurSize: \"8px\",\n\tblurCSSTransition: \"filter 0s ease-in-out\",\n\tformats: [\"webp\"],\n};\n\n/**\n * `useGriddoImage()`\n */\nfunction useGriddoImage({\n\turl,\n\t...props\n}: UseGriddoImageProps): UseGriddoImageReturn {\n\tif (!url) {\n\t\treturn {};\n\t}\n\n\tconst siteContext = React.useContext(SiteContext);\n\tconst griddoDamDefaults = siteContext?.griddoDamDefaults || {};\n\n\tconst domain = getDomainFromDamUrl(url);\n\tconst damId = getDamIdFromDamUrl(url);\n\n\t// This object contains every aspect of the image configuration\n\tconst imageConfig: ImageConfig = {\n\t\t// defaults props from griddo-core\n\t\t...internalDefaults,\n\t\t// defaults props from instance through site context\n\t\t...griddoDamDefaults,\n\t\t// props from component\n\t\t...props,\n\t\tformat: \"jpeg\",\n\t\tdomain,\n\t};\n\n\t// Build a one element responsive prop if is not provided\n\tif (imageConfig.responsive === undefined) {\n\t\timageConfig.responsive = [\n\t\t\t{\n\t\t\t\twidth: imageConfig.width,\n\t\t\t\theight: imageConfig.height,\n\t\t\t\tquality: imageConfig.quality,\n\t\t\t\tcrop: imageConfig.crop,\n\t\t\t\tposition: imageConfig.position,\n\t\t\t\ttransforms: imageConfig.transforms,\n\t\t\t},\n\t\t];\n\t}\n\n\t// Create the content of the srcSet <img> attribute\n\tconst srcSet = imageConfig.responsive.map(\n\t\t({ width, height, quality, crop, position, transforms }) => {\n\t\t\tconst griddoDamURL = getGriddoDamURIWithParams({\n\t\t\t\t// damid\n\t\t\t\tdamId: damId,\n\t\t\t\t// image config\n\t\t\t\timageConfig: imageConfig,\n\t\t\t\t// extra props comming from <GriddoImage> props\n\t\t\t\tquality,\n\t\t\t\tcrop,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tposition,\n\t\t\t\ttransforms,\n\t\t\t});\n\n\t\t\t// empty string for the \"w\" value if not width\n\t\t\tconst withWProp: string = width ? `${removeUnit(width)}w` : \"\";\n\t\t\treturn `${griddoDamURL} ${withWProp}`.trim();\n\t\t},\n\t);\n\n\t// Create the content of the sizes <img> attribute.\n\t// rearrangeResponsiveArray put the element of the array with the\n\t// breakpoint === null at the last position to use properly in the mediaquery\n\t// interpolation.\n\tconst sizes = rearrangeResponsiveArray(imageConfig.responsive.reverse())\n\t\t.map((query, idx) => {\n\t\t\tif (imageConfig.responsive && idx < imageConfig.responsive.length - 1) {\n\t\t\t\treturn `(min-width: ${query.breakpoint}) ${query.width}`;\n\t\t\t}\n\t\t\treturn `${query.width}`;\n\t\t})\n\t\t.join(\", \");\n\n\t// Create a kind of srcSet for background images (removing the final size xxxw)\n\tconst srcSetURL = srcSet.map((entry) => entry?.split(\" \")[0]);\n\n\t// Get the src from the first (usually the small) breakpoint\n\tconst smallForSrc = imageConfig.responsive[0];\n\n\t// Old browsers src fallback (in case it doesn't support srcSet)\n\tconst src = `${getGriddoDamURIWithParams({\n\t\tdamId,\n\t\timageConfig,\n\t\t...smallForSrc,\n\t})}`;\n\n\t// MIMEType\n\tconst type = imageConfig?.format\n\t\t? MIME_TYPES[imageConfig?.format]\n\t\t: MIME_TYPES.jpeg;\n\n\treturn {\n\t\ttype,\n\t\tsrcSet,\n\t\tsrcSetURL,\n\t\tsrc,\n\t\tsizes,\n\t\twebpFallback: generateImageChunk({ srcSet, srcSetURL, format: \"jpeg\" }),\n\t\tjpeg: generateImageChunk({ srcSet, srcSetURL, format: \"jpeg\" }),\n\t\twebp: generateImageChunk({ srcSet, srcSetURL, format: \"webp\" }),\n\t\tavif: generateImageChunk({ srcSet, srcSetURL, format: \"avif\" }),\n\t\tpng: generateImageChunk({ srcSet, srcSetURL, format: \"png\" }),\n\t\tgif: generateImageChunk({ srcSet, srcSetURL, format: \"gif\" }),\n\t\tsvg: generateImageChunk({ srcSet, srcSetURL, format: \"svg\" }),\n\t};\n}\n\nfunction generateImageChunk({\n\tsrcSet,\n\tsrcSetURL,\n\tformat,\n}: GenerateImageChunkProps): ImageChunk {\n\treturn {\n\t\ttype: MIME_TYPES[format] as MIMETypes,\n\t\tsrcSet: srcSet?.map((url) => url?.replace(/f\\/\\w+/, `f/${format}`)),\n\t\tsrcSetURL: srcSetURL?.map((url) => url?.replace(/f\\/\\w+/, `f/${format}`)),\n\t};\n}\n\nexport interface GenerateImageChunkProps {\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tformat: ImageFormats;\n}\n\nexport interface UseGriddoImageProps extends Omit<ImageConfig, \"formats\"> {\n\turl?: string;\n}\n\nexport interface ImageConfig {\n\tblurCSSTransition?: string;\n\tblurSize?: string;\n\tcrop?: ImageCropType;\n\tdecoding?: ImageDecoding;\n\tdomain?: string;\n\tformat?: ImageFormats;\n\tformats?: Array<ImageFormats>;\n\theight?: string;\n\tloading?: ImageLoading;\n\tposition?: ImagePosition;\n\tquality?: number;\n\tresponsive?: Array<ResponsiveImageProps>;\n\ttransforms?: ImageTransform;\n\twidth?: string;\n\tsizes?: string;\n}\n\nexport type MIMETypes =\n\t| \"image/avif\"\n\t| \"image/gif\"\n\t| \"image/jpeg\"\n\t| \"image/png\"\n\t| \"image/svg+xml\"\n\t| \"image/webp\";\n\nexport interface ImageChunk {\n\ttype: MIMETypes;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n}\n\nexport interface UseGriddoImageReturn {\n\ttype?: string;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tsrc?: string;\n\tsizes?: string;\n\twebpFallback?: ImageChunk;\n\tjpg?: ImageChunk;\n\tjpeg?: ImageChunk;\n\twebp?: ImageChunk;\n\tavif?: ImageChunk;\n\tpng?: ImageChunk;\n\tgif?: ImageChunk;\n\tsvg?: ImageChunk;\n}\n\nexport { useGriddoImage };\n","import type {\n\tImageCropType,\n\tImageDecoding,\n\tImageFormats,\n\tImageLoading,\n\tImagePosition,\n\tImageTransform,\n} from \"../types/core\";\n\nimport { useSite } from \"./useSite\";\nimport {\n\tgetDamIdFromDamUrl,\n\tgetDomainFromDamUrl,\n\tgetGriddoDamURIWithParams,\n\tremoveUnit,\n} from \"../utils/images\";\n\nconst MIME_TYPES = {\n\tjpg: \"image/jpeg\",\n\tjpeg: \"image/jpeg\",\n\tgif: \"image/gif\",\n\tsvg: \"image/svg+xml\",\n\tpng: \"image/png\",\n\tavif: \"image/avif\",\n\twebp: \"image/webp\",\n};\n\nconst internalDefaults: ImageConfigExperimental = {\n\tquality: 75,\n\tcrop: \"cover\",\n\tloading: \"lazy\",\n\tdecoding: \"auto\",\n\tformats: [\"webp\"],\n};\n\n/**\n * `useGriddoImage()`\n */\nfunction useGriddoImageExp({\n\turl,\n\t...props\n}: UseGriddoImagePropsExperimental): UseGriddoImageReturnExperimental {\n\tif (!url) {\n\t\treturn {};\n\t}\n\n\tconst { griddoDamDefaults } = useSite();\n\n\tconst domain = getDomainFromDamUrl(url);\n\tconst damId = getDamIdFromDamUrl(url);\n\n\t// This object contains every aspect of the image configuration\n\tconst imageConfig: ImageConfigExperimental = {\n\t\t// defaults props from griddo-core\n\t\t...internalDefaults,\n\t\t// defaults props from instance through site context\n\t\t...griddoDamDefaults,\n\t\t// props from component\n\t\t...props,\n\t\t// domain\n\t\tdomain,\n\t\t// HARDCORDED values\n\t\tformat: \"jpeg\",\n\t};\n\n\tconst RATIO =\n\t\tremoveCSSUnits(props?.width || \"1x\") /\n\t\tremoveCSSUnits(props?.height || \"1px\");\n\n\t// Create the content of the srcSet <img> attribute using the widths prop.\n\t// if widhts is undefined or empty array, then use the width prop and return\n\t// a simple url without the \"w\".\n\tconst srcSet =\n\t\t(Array.isArray(imageConfig.widths) && imageConfig.widths.length) ||\n\t\timageConfig.widths !== undefined\n\t\t\t? imageConfig.widths?.map((width) => {\n\t\t\t\t\tconst griddoDamURL = getGriddoDamURIWithParams({\n\t\t\t\t\t\tdamId: damId,\n\t\t\t\t\t\timageConfig: imageConfig,\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: imageConfig.height\n\t\t\t\t\t\t\t? `${Math.round(removeCSSUnits(width) / RATIO)}px`\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t});\n\n\t\t\t\t\t// empty string for the \"w\" value if not width\n\t\t\t\t\tconst withWProp = width ? `${removeUnit(width)}w` : \"\";\n\t\t\t\t\treturn imageConfig.width ? `${griddoDamURL} ${withWProp}`.trim() : \"\";\n\t\t\t\t})\n\t\t\t: [\n\t\t\t\t\tgetGriddoDamURIWithParams({\n\t\t\t\t\t\tdamId: damId,\n\t\t\t\t\t\timageConfig: imageConfig,\n\t\t\t\t\t\twidth: imageConfig.width,\n\t\t\t\t\t\theight: imageConfig.height\n\t\t\t\t\t\t\t? `${Math.round(\n\t\t\t\t\t\t\t\t\tremoveCSSUnits(imageConfig.width || \"1px\") / RATIO,\n\t\t\t\t\t\t\t\t)}px`\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}),\n\t\t\t\t];\n\n\t// Create a kind of srcSet for background images (removing the final size xxxw)\n\tconst srcSetURL = srcSet?.map((entry) => entry?.split(\" \")[0]);\n\n\t// Old browsers src fallback (in case they doesn't support srcSet)\n\tconst src = `${getGriddoDamURIWithParams({\n\t\tdamId,\n\t\timageConfig,\n\t})}`;\n\n\t// MIMEType\n\tconst type = imageConfig?.format\n\t\t? MIME_TYPES[imageConfig?.format]\n\t\t: MIME_TYPES.jpeg;\n\n\treturn {\n\t\ttype,\n\t\tsrcSet,\n\t\tsrcSetURL,\n\t\tsrc,\n\t\twebpFallback: generateImageChunk({ srcSet, srcSetURL, format: \"jpeg\" }),\n\t\tjpeg: generateImageChunk({ srcSet, srcSetURL, format: \"jpeg\" }),\n\t\twebp: generateImageChunk({ srcSet, srcSetURL, format: \"webp\" }),\n\t\tavif: generateImageChunk({ srcSet, srcSetURL, format: \"avif\" }),\n\t\tpng: generateImageChunk({ srcSet, srcSetURL, format: \"png\" }),\n\t\tgif: generateImageChunk({ srcSet, srcSetURL, format: \"gif\" }),\n\t\tsvg: generateImageChunk({ srcSet, srcSetURL, format: \"svg\" }),\n\t};\n}\n\nfunction generateImageChunk({\n\tsrcSet,\n\tsrcSetURL,\n\tformat,\n}: GenerateImageChunkPropsExperimental): ImageChunkExperimental {\n\treturn {\n\t\ttype: MIME_TYPES[format] as MIMETypesExperimental,\n\t\tsrcSet: srcSet?.map((url) => url?.replace(/f\\/\\w+/, `f/${format}`)),\n\t\tsrcSetURL: srcSetURL?.map((url) => url?.replace(/f\\/\\w+/, `f/${format}`)),\n\t};\n}\n\nexport interface GenerateImageChunkPropsExperimental {\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tformat: ImageFormats;\n}\n\nexport interface UseGriddoImagePropsExperimental\n\textends Omit<ImageConfigExperimental, \"formats\"> {\n\turl?: string;\n}\n\nexport interface ImageConfigExperimental {\n\tblurCSSTransition?: string;\n\tblurSize?: string;\n\tcrop?: ImageCropType;\n\tdecoding?: ImageDecoding;\n\tdomain?: string;\n\tformat?: ImageFormats;\n\tformats?: Array<Extract<ImageFormats, \"webp\" | \"avif\">>;\n\theight?: string;\n\tloading?: ImageLoading;\n\tposition?: ImagePosition;\n\tquality?: number;\n\ttransforms?: ImageTransform;\n\twidth?: string;\n\tsizes?: string;\n\twidths?: Array<string>;\n\tratio?: number;\n}\n\nexport type MIMETypesExperimental =\n\t| \"image/avif\"\n\t| \"image/gif\"\n\t| \"image/jpeg\"\n\t| \"image/png\"\n\t| \"image/svg+xml\"\n\t| \"image/webp\";\n\nexport interface ImageChunkExperimental {\n\ttype: MIMETypesExperimental;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n}\n\nexport interface UseGriddoImageReturnExperimental {\n\ttype?: string;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tsrc?: string;\n\tsizes?: string;\n\twebpFallback?: ImageChunkExperimental;\n\tjpg?: ImageChunkExperimental;\n\tjpeg?: ImageChunkExperimental;\n\twebp?: ImageChunkExperimental;\n\tavif?: ImageChunkExperimental;\n\tpng?: ImageChunkExperimental;\n\tgif?: ImageChunkExperimental;\n\tsvg?: ImageChunkExperimental;\n}\n\nfunction removeCSSUnits(value: string) {\n\tconst match = value.match(/^-?\\d*\\.?\\d+/);\n\tif (match) {\n\t\treturn Number.parseFloat(match[0]);\n\t}\n\treturn 0;\n}\n\nexport { removeCSSUnits, useGriddoImageExp };\n","import type { Locale, Site } from \"../types/core\";\n\nimport * as React from \"react\";\n\nimport { useModulePreview } from \"./useModulePreview\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\nimport { I18nContext } from \"../contexts/I18n\";\n\nexport interface UseI18nProps {\n\t/** Locale code from where get the translation. This locale override the current page language */\n\tlocale?: Locale;\n}\n\n/**\n * returns functions to get the translations from the context taking into\n * account the language (locale) of the current page.\n * @see [Documentación](https://www.notion.so/griddoio/useI18n-021b08689dcf4abd8f666da7b7646611)\n *\n * @example\n * const { getTraslation, getNestedTranslation } = useI18n()\n * const foo = getTranslation(\"submitButtonLabel\")\n * const bar = getNestedTranslation(\"modules.backLabel\")\n */\nfunction useI18n(props?: UseI18nProps) {\n\tconst locale = props?.locale;\n\n\tconst i18nContext = React.useContext(I18nContext);\n\n\tconst { siteLangs } = useSite();\n\t// Get the languageId from the Page context\n\tconst { languageId: pageLanguageId } = usePage();\n\t// Get the languageId from the ModulePreview context\n\tconst { languageId: moduleLanguageId } = useModulePreview();\n\n\t// Language id from the page or module preview context\n\tconst languageId = pageLanguageId || moduleLanguageId;\n\n\tconst translations = i18nContext?.translations;\n\n\tif (!translations) {\n\t\tconsole.warn(\"Griddo: <SiteProvider> needs to have the prop translations\");\n\t}\n\n\tif (siteLangs === undefined) {\n\t\tconsole.warn(\n\t\t\t\"Griddo: <SiteProvider> needs to have the prop siteLangs set with the site languages\",\n\t\t);\n\t}\n\n\tif (!languageId) {\n\t\tconsole.warn(\n\t\t\t\"Griddo: <PageProvider> needs to have the prop languageId set with the page language id\",\n\t\t);\n\t}\n\n\tif (!checkLangId(siteLangs, languageId)) {\n\t\tconsole.warn(`Griddo: languageId ${languageId} doesn't exist in this site`);\n\t}\n\n\tif (locale !== undefined && !checkLocale(siteLangs, locale)) {\n\t\tconsole.warn(`Griddo: locale ${locale} doesn't exist in this site`);\n\t}\n\n\tconst currentLocale = locale || getLocaleFromSiteLangs(siteLangs, languageId);\n\n\tconst localeTranslations =\n\t\ttranslations && currentLocale ? translations[currentLocale] : undefined;\n\n\t/**\n\t * Return a static translation based on the translation object and current page language using a string key as argument.\n\t * @example: getTranslation(\"greetings\")\n\t * @deprecated use getNestedTranslation\n\t */\n\tconst getTranslation = <T = string>(\n\t\t/** Key from the translation object that will be obtained */\n\t\tkey: string,\n\t\t/** Fallback string in case `key` returns undefined */\n\t\tdefaultString = \"\",\n\t): T => {\n\t\tif (localeTranslations?.[key]) {\n\t\t\treturn localeTranslations[key] as string | Record<string, unknown> as T;\n\t\t}\n\n\t\treturn defaultString as T;\n\t};\n\n\t/**\n\t * Return a static translation based on the translation object and current page language using a dot notation string key as argument.\n\t * Translate function helper with \"dot object notation\"\n\t * @example: getNestedTranslation(\"ui.strings.followUs\")\n\t */\n\tconst getNestedTranslation = <T = string>(\n\t\t/** Key from the translation object that will be obtained */\n\t\tkey: string,\n\t\t/** Fallback string in case `key` returns undefined */\n\t\tdefaultString = \"\",\n\t) => {\n\t\treturn localeTranslations\n\t\t\t? (getNestedPropValue(key, localeTranslations) as T) ||\n\t\t\t\t\t(defaultString as T)\n\t\t\t: (defaultString as T);\n\t};\n\n\tif (!currentLocale || !languageId) {\n\t\tconsole.warn(\n\t\t\t\"Griddo: You forgot to put <I18nProvider> or exists an error in language id.\",\n\t\t);\n\t}\n\n\treturn { getTranslation, getNestedTranslation };\n}\n\nfunction checkLangId(siteLangs: Site[\"siteLangs\"], id?: number) {\n\treturn !!siteLangs?.find((lang) => lang.id === id);\n}\n\nfunction getLocaleFromSiteLangs(\n\tsiteLangs: Site[\"siteLangs\"],\n\tid?: number,\n): Locale | undefined {\n\treturn siteLangs?.find((lang) => lang.id === id)?.locale;\n}\n\nfunction checkLocale(siteLangs: Site[\"siteLangs\"], locale: Locale) {\n\treturn !!siteLangs?.find((lang) => lang?.locale === locale);\n}\n\n/**\n * Get the value of a nested key in string dot notation\n * @example:\n * Get the value of prop3 from foo object\n * getNestedPropValue(\"prop1.prop2.prop3\", foo)\n */\nfunction getNestedPropValue(key: string, mainObject: Record<string, any>) {\n\tconst prop = key?.split(\".\").reduce((obj, prop) => {\n\t\tif (obj[prop]) {\n\t\t\treturn obj[prop];\n\t\t}\n\n\t\t// return empty string if object[prop] is undefined to prevent type error\n\t\t// trying to acces a prop of an undefined\n\t\treturn \"\";\n\t}, mainObject);\n\n\treturn prop;\n}\n\nexport { useI18n };\n","import * as React from \"react\";\n\nimport {\n\ttype ModulePreviewContextProps,\n\tModulePreviewContext,\n} from \"../contexts/ModulePreview\";\n\nexport function useModulePreview(): ModulePreviewContextProps {\n\tconst value = React.useContext(ModulePreviewContext);\n\n\tif (!value) {\n\t\tconsole.warn(\"Griddo: You forgot to put <ModulePreviewProvider>.\");\n\t\treturn {} as ModulePreviewContextProps;\n\t}\n\n\treturn value;\n}\n","import type { ImageDecoding, ImageLoading } from \"../types/core\";\n\nimport { useSite } from \"./useSite\";\nimport {\n\tcleanCloudinaryURI,\n\tcloudinaryRearrangeResponsiveArray,\n\tremoveUnit,\n} from \"../utils/images\";\n\nconst internalDefaults: CloudinaryImageConfig = {\n\tdomain: \"https://res.cloudinary.com\",\n\tuploadFolder: \"image/upload\",\n\tfallback404ImageId: \"dx-placeholders/fallback-404-image\",\n\tquality: 51,\n\tcrop: \"fill\",\n\tgravity: \"center\",\n\tformat: \"auto\",\n\tloading: \"lazy\",\n\tbackgroundLazy: false,\n\tdecoding: \"auto\",\n\tresponsive: [{ breakpoint: null, width: \"320px\" }],\n};\n\n/**\n * `useImage()`\n *\n * @deprecated This hook will be removed from Griddo in the future.\n */\nfunction useImage({ publicId, ...props }: UseImageProps) {\n\tconst { cloudinaryCloudName, cloudinaryDefaults } = useSite();\n\n\tconst imageConfig = {\n\t\t...internalDefaults,\n\t\t...cloudinaryDefaults,\n\t\t...props,\n\t};\n\n\tconst root = `${imageConfig.domain}/${cloudinaryCloudName}/${imageConfig.uploadFolder}`;\n\n\t// 404 Fallback image\n\t// TODO: Create a Cloudinary query to create an image on the fly.\n\tconst fallbackSrcImage = `${getURIWithParams({\n\t\troot,\n\t\timageConfig: {\n\t\t\t...imageConfig,\n\t\t\tquality: 20,\n\t\t\twidth: \"512\",\n\t\t},\n\t})}/${imageConfig.fallback404ImageId}`;\n\n\t// Create the content of the srcSet <img> attribute\n\tconst srcSet = imageConfig?.responsive?.map(\n\t\t({ width, height, quality, crop }) => {\n\t\t\tconst cloudinaryURI = getURIWithParams({\n\t\t\t\troot,\n\t\t\t\timageConfig: {\n\t\t\t\t\tquality,\n\t\t\t\t\tcrop,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\t...imageConfig,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn `${cloudinaryURI}/${publicId} ${removeUnit(width)}w`;\n\t\t},\n\t);\n\n\t// Create the content of the sizes <img> attribute\n\t// rearange put the element of the array with the breakpoint === null and\n\t// put it at the last position to use properly in the mediaquery interpolation\n\tconst sizes = cloudinaryRearrangeResponsiveArray(\n\t\timageConfig?.responsive?.reverse(),\n\t)\n\t\t.map((query, idx) => {\n\t\t\tif (imageConfig.responsive && idx < imageConfig?.responsive?.length - 1) {\n\t\t\t\treturn `(min-width: ${query.breakpoint}) ${query.width}`;\n\t\t\t}\n\n\t\t\treturn `${query.width}`;\n\t\t})\n\t\t.join(\", \");\n\n\t// Create a kind of srcSet for background images (removing the final size xxxw)\n\tconst srcSetURL = srcSet?.map((entry) => entry.split(\" \")[0]);\n\n\t// Get the src from the first (usually the small) breakpoint\n\tconst smallForSrc =\n\t\t(imageConfig?.responsive && imageConfig?.responsive[0]) || [];\n\n\t// Old browsers src fallback (in case it doesn't support srcSet)\n\tconst src = `${getURIWithParams({\n\t\troot,\n\t\timageConfig,\n\t\t...smallForSrc,\n\t})}/${publicId}`;\n\n\treturn {\n\t\tsrc,\n\t\tsrcSet,\n\t\tsizes,\n\t\tfallbackSrcImage,\n\t\tsrcSetURL,\n\t};\n}\n\nfunction getURIWithParams(props: GetURIWithParamsProps) {\n\tconst { root, imageConfig } = props;\n\n\tconst crop = imageConfig?.crop ? `c_${imageConfig.crop}` : \"\";\n\tconst quality = imageConfig?.quality ? `q_${imageConfig.quality}` : \"\";\n\tconst gravity = imageConfig?.gravity ? `g_${imageConfig.gravity}` : \"\";\n\tconst format = imageConfig?.format ? `f_${imageConfig.format}` : \"\";\n\tconst width = imageConfig?.width ? `w_${removeUnit(imageConfig.width)}` : \"\";\n\tconst height = imageConfig?.height\n\t\t? `h_${removeUnit(imageConfig.height)}`\n\t\t: \"\";\n\tconst aspectRatio = imageConfig?.ar ? `ar_${imageConfig.ar}` : \"\";\n\n\t// Clean the URI to avoid orphans query params: w_null, w_, etc..\n\tconst queryParamsURL = cleanCloudinaryURI(\n\t\t`${crop},${gravity},${format},${quality},${width},${height},${aspectRatio}`,\n\t);\n\n\tconst url = `${root}/${queryParamsURL}`;\n\n\treturn url;\n}\n\ninterface GetURIWithParamsProps {\n\troot?: string;\n\timageConfig?: CloudinaryImageConfig;\n}\n\nexport type UseImageProps = CloudinaryImageConfig;\n\ninterface CloudinaryImageConfig {\n\tresponsive?: Array<CloudinaryResponsiveImageProps>;\n\tar?: number | string;\n\tbackgroundLazy?: boolean;\n\tcrop?: \"fill\" | \"crop\" | \"thumb\" | \"fill_pad\" | \"lfill\";\n\tdecoding?: ImageDecoding;\n\tdomain?: string;\n\tfallback404Image?: string;\n\tfallback404ImageId?: string;\n\tformat?: \"auto\" | \"jpg\" | \"webp\" | \"avif\" | \"gif\" | \"png\";\n\tgravity?: string;\n\theight?: string;\n\tloading?: ImageLoading;\n\tpublicId?: string;\n\tquality?: number;\n\tsizes?: string;\n\tuploadFolder?: string;\n\twidth?: string;\n}\n\nexport interface CloudinaryResponsiveImageProps {\n\tbreakpoint?: null | string;\n\twidth?: string;\n\theight?: string;\n\tquality?: number;\n\tcrop?: CloudinaryImageCrop;\n\tformat?: CloudinaryImageFormat;\n}\n\nexport type CloudinaryImageFormat =\n\t| \"auto\"\n\t| \"jpg\"\n\t| \"webp\"\n\t| \"avif\"\n\t| \"gif\"\n\t| \"png\";\n\nexport type CloudinaryImageCrop =\n\t| \"fill\"\n\t| \"crop\"\n\t| \"thumb\"\n\t| \"fill_pad\"\n\t| \"lfill\";\n\nexport { useImage };\n","import * as React from \"react\";\n\n/**\n *\n * This React Hook can be useful in a SSR environment to wait until be in a browser to execution some functions.\n * Indeed, in a SSR application, when the component with the `useIsClient` hook is mounted in the browser, its state changes and causes a re-render.\n * It is what we want here, but, if you want a boolean, without extra render see `useSSR()`\n *\n * @example\n * import { useIsClient } from '@griddo/core'\n *\n * export default function Component() {\n * const isClient = useIsClient()\n *\n * return <div>{isClient ? 'Client' : 'server'}</div>\n * }\n *\n *\n * @see\n * https://usehooks-ts.com for more hooks\n *\n */\nfunction useIsClient() {\n\tconst [isClient, setClient] = React.useState(false);\n\n\tReact.useEffect(() => {\n\t\tsetClient(true);\n\t}, []);\n\n\treturn isClient;\n}\n\nexport { useIsClient };\n","import * as React from \"react\";\n\n/**\n * Simple React hook that return a boolean;\n *\n * - `true` at the mount time\n * - Then always `false`\n *\n * @example\n * import { useIsFirstRender } from '@griddo/core'\n *\n * export default function Component() {\n * const isFirst = useIsFirstRender()\n * const [data, setData] = useState<number>(0)\n *\n * useEffect(() => {\n * console.log('Normal useEffect', { data })\n * }, [data])\n *\n * return (\n * <div>\n * <p>Open your console</p>\n * <p>Is first render: {isFirst ? 'yes' : 'no'}</p>\n * <button onClick={() => setData(Date.now())}>Update data</button>\n * </div>\n * )\n * }\n *\n * @see\n * https://usehooks-ts.com for more hooks\n *\n */\nfunction useIsFirstRender(): boolean {\n\tconst isFirst = React.useRef(true);\n\n\tif (isFirst.current) {\n\t\tisFirst.current = false;\n\n\t\treturn true;\n\t}\n\n\treturn isFirst.current;\n}\n\nexport { useIsFirstRender };\n","import * as React from \"react\";\n\nimport { SiteContext } from \"../contexts\";\n\n/**\n * `useLink()`\n *\n * @deprecated This hooks is used by the old `<Link>` component from Griddo which you may want not use anymore. Use `<GriddoLink>` instead.\n */\nfunction useLink() {\n\tconst siteContextValue = React.useContext(SiteContext);\n\treturn siteContextValue?.linkComponent;\n}\n\nexport { useLink };\n","import type { ListContentType } from \"../types/core\";\nimport type {\n\tListApiQueryResponseProps,\n\tPickRename,\n\tSetQueryProps,\n} from \"../types/global\";\n\nimport * as React from \"react\";\n\nimport { useFetch, type UseFetchStateProps } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\nimport { isOperator, parseRelations, parseSources } from \"./utils\";\nimport { concatParams } from \"../utils\";\n\n/**\n * Get a list of ContentTypes using the Griddo public API.\n *\n * @example\n * const [{ query }, setQuery] = useList()\n * setQuery(data) // `data` key from a `ReferenceField`.\n */\nexport function useList<ContentType>(): UseListReturn<ContentType> {\n\tconst { publicApiUrl, siteId, renderer } = useSite();\n\tconst { languageId } = usePage();\n\tconst [url, setUrl] = React.useState<UseListSetUrlAction>();\n\tconst isAX = renderer === \"editor\";\n\n\t// Exposed function to modify the internal state\n\tfunction setQuery<ContentType = unknown>({\n\t\tapiUrl = `${publicApiUrl}`,\n\t\tcached,\n\t\tdata: refField,\n\t\texclude,\n\t\tfields,\n\t\titems = 50,\n\t\toperator,\n\t\tpage = 1,\n\t\trelations,\n\t\tsearch,\n\t\tincludePending,\n\t\tallLanguages,\n\t\tpreferenceLanguage,\n\t}: UseListSetQueryProps<ContentType>) {\n\t\tif (!refField) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst customCached = isAX ? new Date().valueOf().toString() : cached;\n\t\tconst searchWithNoSpaces = search?.replace(/\\s/g, \"+\");\n\t\tconst isAuto = refField.mode === \"auto\";\n\t\tconst isManual = refField.mode === \"manual\";\n\t\tconst isNavigation = refField.mode === \"navigation\";\n\t\tconst contentType =\n\t\t\tparseSources<ContentType>(refField.sources) ||\n\t\t\trefField.fixed ||\n\t\t\t`reference/${refField.referenceId}` ||\n\t\t\t[];\n\t\tconst listModeParam = isAuto\n\t\t\t? \"/list/v2/\"\n\t\t\t: isManual\n\t\t\t\t? \"/list/fixed/\"\n\t\t\t\t: isNavigation\n\t\t\t\t\t? \"/list/navigations/\"\n\t\t\t\t\t: \"\";\n\n\t\tconst queryUrl = concatParams({\n\t\t\tbaseUrl: `${apiUrl}${listModeParam}${contentType}/`,\n\t\t\tparams: {\n\t\t\t\tsite: refField.site || siteId,\n\t\t\t\tlang: refField.lang || languageId,\n\t\t\t\tget: fields,\n\t\t\t\tpage,\n\t\t\t\titems,\n\t\t\t\torder: isAuto || isNavigation ? refField.order : undefined,\n\t\t\t\t//filter: parseFilter(filterIds || refField.filter),\n\t\t\t\tmaxItems: refField.quantity,\n\t\t\t\tsearch: searchWithNoSpaces,\n\t\t\t\toperator: isOperator(operator) ? operator : undefined,\n\t\t\t\t//filterOperator: isOperator(filterOperator) ? filterOperator : undefined,\n\t\t\t\t//globalOperator: isOperator(globalOperator) ? globalOperator : undefined,\n\t\t\t\texclude: Array.isArray(exclude) ? exclude : undefined,\n\t\t\t\trelations: parseRelations(relations),\n\t\t\t\tincludePending: includePending ? \"on\" : undefined,\n\t\t\t\t// For legacy pourposes the hook reads `allLanguages` and\n\t\t\t\t// `preferenceLanguage` from arguments too. They will be remove\n\t\t\t\t// in the future...\n\t\t\t\tallLanguages: allLanguages || refField.allLanguages ? \"on\" : undefined,\n\t\t\t\tpreferenceLanguage:\n\t\t\t\t\tpreferenceLanguage || refField.preferenceLanguage\n\t\t\t\t\t\t? \"true\"\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcached: customCached,\n\t\t\t},\n\t\t});\n\n\t\t// If manual selection is empty, it doesn't call to API\n\t\tif (isManual && Array.isArray(contentType) && contentType.length < 1) {\n\t\t\tsetUrl({\n\t\t\t\tqueryUrl: undefined,\n\t\t\t\textra: undefined,\n\t\t\t});\n\t\t}\n\n\t\tsetUrl({\n\t\t\tqueryUrl,\n\t\t\textra: {\n\t\t\t\ttotalItems: refField.mode === \"manual\" ? refField.fixed?.length : false,\n\t\t\t},\n\t\t});\n\t}\n\n\tconst { isError, isLoading, msg, data, isFirstFetch } = useFetch<\n\t\tListApiQueryResponseProps<ListContentType<ContentType>>\n\t>(url?.queryUrl);\n\n\treturn [{ query: data, isLoading, isError, msg, isFirstFetch }, setQuery];\n}\n\n// url\nexport interface UseListSetUrlAction {\n\tqueryUrl: string | undefined;\n\textra: Record<string, unknown> | undefined;\n}\n\n// setQuery\nexport type UseListSetQueryProps<ContentType> = SetQueryProps<ContentType>;\n\n// The same state as useFetch but renaming data to query for this hook\nexport type UseListState<ContentType> = PickRename<\n\tUseFetchStateProps<ListApiQueryResponseProps<ListContentType<ContentType>>>,\n\t\"data\",\n\t\"query\"\n>;\n\nexport type UseListReturn<ContentType> = [\n\tUseListState<ContentType>,\n\t(setQuery: UseListSetQueryProps<ContentType>) => void,\n];\n","import type { QueriedData } from \"../types/api-response-fields\";\nimport type { ListContentType } from \"../types/core\";\nimport type { ListApiQueryResponseProps } from \"../types/global\";\nimport type { PartiallyRequired } from \"../types/utilities\";\n\nimport {\n\tuseList,\n\ttype UseListReturn,\n\ttype UseListSetQueryProps,\n} from \"./useList\";\n\nexport interface useListWithDefaultStaticPageProps<T>\n\textends Omit<PartiallyRequired<UseListSetQueryProps<T>, \"items\">, \"data\"> {\n\tqueriedData?: QueriedData<T>;\n}\n\nfunction filterKeys(obj?: Record<string, unknown>, fields?: Array<string>) {\n\tif (!obj) {\n\t\treturn;\n\t}\n\n\tif (!fields) {\n\t\treturn obj;\n\t}\n\n\treturn Object.fromEntries(\n\t\tObject.keys(obj)\n\t\t\t.map((key) => fields?.includes(key) && [key, obj[key]])\n\t\t\t.filter(Boolean) as Array<[string, unknown]>,\n\t);\n}\n\n/**\n * `useListWithDefaultStaticPage()`\n *\n * Hook to fetch a list of ContentTypes from the public API that returns the first page statically.\n * This way the build process will write the data into the HTML.\n *\n * @warning\n * Maybe you **don't want** to `use { mode: \"list\" }` in the schema options\n *\n * @example\n *\tconst [{ query, isError, isFirstFetch, isLoading, msg }, setQuery] =\n *\tuseListWithDefaultStaticPage<MEMBERContentTypeProps>({\n * // This is de default query params for the first page\n *\t\tqueriedData,\n *\t\titems: itemsPerPage,\n *\t\tpage: 1,\n *\t\tfields: [\"title\", \"id\"],\n * });\n *\n */\nfunction useListWithDefaultStaticPage<T>(\n\tprops: useListWithDefaultStaticPageProps<T>,\n): UseListReturn<T> {\n\tconst { items, queriedData, fields, page } = props;\n\tconst [{ isError, isLoading, msg, query, isFirstFetch }, setQuery] =\n\t\tuseList<T>();\n\n\t// Only at build-time. SSR.\n\tconst staticQuery = {\n\t\tpage: page || 1,\n\t\ttotalItems: queriedData?.length,\n\t\ttotalPages:\n\t\t\tqueriedData?.length && items && Math.ceil(queriedData?.length / items),\n\t\titems: queriedData?.slice(0, items || 10).map((item) => {\n\t\t\treturn {\n\t\t\t\tid: item.id,\n\t\t\t\t...filterKeys(item.content, fields as Array<string>),\n\t\t\t};\n\t\t}),\n\t} as ListApiQueryResponseProps<ListContentType<T>> | undefined;\n\n\t// Only in client.\n\t// Esta const debe ser `undefined` si aun no tenemos respuesta de la API,\n\t// esto va a pasar siempre, al menos en la fase de build SSR.\n\tconst apiFetchQuery = query\n\t\t? {\n\t\t\t\t...query,\n\t\t\t\ttotalPages:\n\t\t\t\t\titems && query?.totalItems && Math.ceil(query?.totalItems / items),\n\t\t\t}\n\t\t: undefined;\n\n\treturn [\n\t\t{\n\t\t\tisError,\n\t\t\tisLoading,\n\t\t\tmsg,\n\t\t\tisFirstFetch,\n\t\t\t// En build time `query` valdrá `staticQuery`\n\t\t\tquery: apiFetchQuery || staticQuery,\n\t\t},\n\t\tsetQuery,\n\t];\n}\n\nexport { useListWithDefaultStaticPage };\n","export type GriddoAlertRegisterProps = {\n\t/** Public API URL which can be obtained from useSite() */\n\tpublicApiUrl: string;\n\t/** Error type: E: error, W: warning, I: info */\n\tlevel: \"E\" | \"W\" | \"I\";\n\t/** Generic area related to the alert for later grouping in queries */\n\tarea?: string;\n\t/** Detailed error message. */\n\tdescription: string;\n\t/** An object where you can include all the error details you find convenient. */\n\tfullData?: Record<string, unknown>;\n\t/**\n\t * Indicates whether we want to send an immediate SNS notification.\n\t * If false, it will only be saved in the database log. If true, an SNS\n\t * notification is also sent.\n\t * The default value will be true if the alert level (level) is E\n\t * (Error) and false in all other cases. */\n\tinstantNotification?: boolean;\n};\n\nexport async function griddoAlertRegister({\n\tarea,\n\tdescription,\n\tfullData,\n\tinstantNotification = false,\n\tlevel,\n\tpublicApiUrl,\n}: GriddoAlertRegisterProps) {\n\tconst url = `${publicApiUrl}/alert`;\n\tconst body = { level, area, description, fullData, instantNotification };\n\tconst fetchOptions = {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tbody: JSON.stringify(body),\n\t};\n\n\ttry {\n\t\tawait fetch(url, fetchOptions);\n\t} catch (error) {\n\t\tconsole.error(\"Error creating Griddo alert:\", error);\n\t}\n}\n","import type { Core } from \"../..\";\n\nconst INVALID_DATE = \"Invalid Date\";\n\n/**\n * Format and translate a string date from a `DateField` (YY/MM/DD) into\n * differentes Locales. You can pass an option object Intl.DateTimeFormatOptions\n * to customize the output.\n *\n * @example\n * formatLocaleDate({ dateString: \"2023/08/06\", locale: \"es-ES\"})\n * // { date: \"6 Agosto 2023\", dateTime: \"2023-08-06\" }\n */\nfunction formatLocaleDate(\n\tinputDate: string,\n\tlocale: Core.ISOLocale,\n\toptions: Intl.DateTimeFormatOptions = { dateStyle: \"long\" },\n) {\n\tif (!isDateStyleSupported(locale)) {\n\t\treturn { date: inputDate, dateTime: \"\" };\n\t}\n\n\tconst date = new Date(inputDate);\n\n\tif (Number.isNaN(date.getTime())) {\n\t\treturn {\n\t\t\tdate: INVALID_DATE,\n\t\t\tdateTime: INVALID_DATE,\n\t\t};\n\t}\n\n\tconst localeDate = date.toLocaleDateString(locale, options);\n\tconst dateTimeDate = inputDate.replaceAll(\"/\", \"-\");\n\n\treturn {\n\t\tdate: localeDate,\n\t\tdateTime: dateTimeDate,\n\t};\n}\n\nfunction isDateStyleSupported(locale: string) {\n\treturn (\n\t\tIntl.DateTimeFormat.supportedLocalesOf(locale, {\n\t\t\tdateStyle: \"long\",\n\t\t}).length > 0\n\t);\n}\n\nexport { formatLocaleDate };\n","import { formatLocaleDate } from \"../functions\";\nimport { usePage } from \"./usePage\";\n\n/**\n * Format and translate a string date from a `DateField` (YY/MM/DD) responding\n * to different Locales from page context. Also support an option object\n * (Intl.DateTimeFormatOptions) to customize the output.\n *\n * @example\n * const { date } = useLocaleDate(\"2023/08/06\")\n * // 6 Agosto 2023\n */\nexport function useLocaleDate(\n\tdate?: string,\n\toptions: Intl.DateTimeFormatOptions = {\n\t\tdateStyle: \"long\",\n\t},\n) {\n\tconst { ISOLocale: locale } = usePage();\n\n\tif (!date) {\n\t\treturn { date: undefined, dateTime: undefined };\n\t}\n\n\treturn formatLocaleDate(date, locale || \"en-US\", options);\n}\n","import * as React from \"react\";\n\nimport { NavigationContext } from \"../contexts\";\n\n/**\n * `useNavigation()`\n */\nfunction useNavigation() {\n\treturn React.useContext(NavigationContext);\n}\n\nexport { useNavigation };\n","// @ts-expect-error autotypes instance file\nimport type __AT__ from \"@/autotypes\";\n\nimport * as React from \"react\";\n\nimport { useFetch } from \"./useFetch\";\nimport { usePage } from \"./usePage\";\nimport { useSite } from \"./useSite\";\nimport { concatParams } from \"../utils\";\n\ninterface Item {\n\tdescription: string;\n\timage: string;\n\tsimilarity: number;\n\tstructuredData: Record<PropertyKey, unknown>;\n\ttemplate: string;\n\ttitle: string;\n\turl: string;\n}\n\ninterface Response {\n\tpage?: number;\n\titems?: Array<Item>;\n\ttotalItems?: number;\n}\n\ninterface Options {\n\tpageId?: number;\n\tfields?: Array<string>;\n\tquantity?: number;\n\tuseStructuredData?: boolean;\n\ttemplate?: __AT__.Templates;\n}\n\nfunction createSetQuery(\n\tpublicApiUrl: string,\n\tsiteId: number,\n\tpageId: number | undefined,\n\tlanguageId: number,\n\ttemplateType: __AT__.Templates,\n\tsetQueryUrl?: React.Dispatch<React.SetStateAction<string | undefined>>,\n) {\n\tif (!publicApiUrl || !setQueryUrl) {\n\t\treturn () => \"\";\n\t}\n\n\treturn (options?: Options) => {\n\t\tconst { fields, quantity, template, useStructuredData } = options || {};\n\n\t\tconst urlWithParams = concatParams({\n\t\t\tbaseUrl: `${publicApiUrl}/ai/pages/related/`,\n\t\t\tparams: {\n\t\t\t\tp: pageId,\n\t\t\t\tl: languageId,\n\t\t\t\ts: siteId,\n\t\t\t\tq: quantity,\n\t\t\t\td: useStructuredData ? \"on\" : undefined,\n\t\t\t\tf: fields?.join(\",\") || \"\",\n\t\t\t\tt: template || templateType,\n\t\t\t},\n\t\t});\n\n\t\tsetQueryUrl(urlWithParams);\n\t};\n}\n\nexport function usePageRelatedContent() {\n\tconst { publicApiUrl, siteId } = useSite();\n\tconst { id: pageId, languageId, template } = usePage();\n\tconst [queryUrl, setQueryUrl] = React.useState<string | undefined>(undefined);\n\n\tif (!publicApiUrl || !siteId || !languageId) {\n\t\treturn;\n\t}\n\n\tconst setQuery = React.useMemo(\n\t\t() =>\n\t\t\tcreateSetQuery(\n\t\t\t\tpublicApiUrl,\n\t\t\t\tsiteId,\n\t\t\t\tpageId,\n\t\t\t\tlanguageId,\n\t\t\t\ttemplate?.templateType,\n\t\t\t\tsetQueryUrl,\n\t\t\t),\n\t\t[publicApiUrl, pageId, siteId, template],\n\t);\n\n\tconst { isError, isLoading, msg, data, isFirstFetch } =\n\t\tuseFetch<Response>(queryUrl);\n\n\treturn [\n\t\t{ query: data, isLoading, isError, msg, isFirstFetch },\n\t\tsetQuery,\n\t] as const;\n}\n","import type { UseFetchStateProps } from \"./useFetch\";\nimport type { PickRename } from \"../types/global\";\n\nimport * as React from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { concatParams } from \"../utils\";\nimport { useFetch } from \"./useFetch\";\nimport { useSite } from \"./useSite\";\n\ntype Response<Areas extends string> = Record<\n\tAreas,\n\t{ interest: { id?: string; label: string }; weight: number }\n>;\n\ntype State<Areas extends string> = PickRename<\n\tUseFetchStateProps<Response<Areas>>,\n\t\"data\",\n\t\"query\"\n>;\n\ntype SetState<Areas extends string> = { areas: Array<Areas> };\n\ntype Return<Areas extends string> = [\n\tState<Areas>,\n\t(setQuery: SetState<Areas>) => void,\n];\n\n/**\n * Hook to receive GPX interests from Griddo's Public API.\n *\n * @example\n * const [{ query }, setQuery] = useReceiveInterests();\n * setQuery({ areas: [\"Area1\"] });\n */\nexport function useReceiveInterests<Areas extends string>(): Return<Areas> {\n\tconst { publicApiUrl } = useSite();\n\tconst [url, setUrl] = React.useState<string>();\n\n\tconst [id] = React.useState(() => {\n\t\tif (typeof window === \"undefined\") return \"\";\n\t\ttry {\n\t\t\tlet storedId = localStorage.getItem(\"gpx_id\");\n\t\t\tif (!storedId) {\n\t\t\t\tstoredId = uuidv4();\n\t\t\t\tlocalStorage.setItem(\"gpx_id\", storedId);\n\t\t\t}\n\t\t\treturn storedId;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error accessing localStorage:\", error);\n\t\t\treturn uuidv4();\n\t\t}\n\t});\n\n\tconst setQuery = ({ areas }: { areas: Array<Areas> }) => {\n\t\tconst urlWithParams = concatParams({\n\t\t\tbaseUrl: `${publicApiUrl}/gpx/profile/`,\n\t\t\tparams: {\n\t\t\t\tareas,\n\t\t\t\tid,\n\t\t\t},\n\t\t});\n\n\t\tsetUrl(urlWithParams);\n\t};\n\n\tconst { isError, isLoading, msg, data, isFirstFetch } =\n\t\tuseFetch<Response<Areas>>(url);\n\n\treturn [{ query: data, isLoading, isError, msg, isFirstFetch }, setQuery];\n}\n","import * as React from \"react\";\n\n// Cached script statuses\nconst cachedScriptStatuses: Record<string, UseScriptStatus | undefined> = {};\n\n/**\n * Dynamically load an external script in one line with this React hook. This can be useful to integrate a third party libraries.\n * This avoids loading this script in the `<head>` on all your pages if it is not necessary.\n *\n * @example\n * import * as React from 'react'\n * import { useScript } from '@griddo/core'\n *\n * declare const jQuery: any\n *\n * export default function Component() {\n * \t// Load the script asynchronously\n * const status = useScript(`https://code.jquery.com/jquery-3.5.1.min.js`, {\n * removeOnUnmount: false,\n * })\n *\n * React.useEffect(() => {\n * if (typeof jQuery !== 'undefined') {\n * // jQuery is loaded => print the version\n * // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n * alert(jQuery.fn.jquery)\n * }\n * }, [status])\n *\n * return (\n * <div>\n * <p>{`Current status: ${status}`}</p>\n * {status === 'ready' && <p>You can use the script here.</p>}\n * </div>\n * )\n * }\n *\n * @see\n * https://usehooks-ts.com for more hooks\n *\n */\nfunction getScriptNode(src: string) {\n\tconst node: HTMLScriptElement | null = document.querySelector(\n\t\t`script[src=\"${src}\"]`,\n\t);\n\tconst status = node?.getAttribute(\"data-status\") as\n\t\t| UseScriptStatus\n\t\t| undefined;\n\n\treturn {\n\t\tnode,\n\t\tstatus,\n\t};\n}\n\nfunction useScript(\n\tsrc: string | null,\n\toptions?: UseScriptOptions,\n): UseScriptStatus {\n\tconst [status, setStatus] = React.useState<UseScriptStatus>(() => {\n\t\tif (!src || options?.shouldPreventLoad) {\n\t\t\treturn \"idle\";\n\t\t}\n\n\t\tif (typeof window === \"undefined\") {\n\t\t\t// SSR Handling - always return 'loading'\n\t\t\treturn \"loading\";\n\t\t}\n\n\t\treturn cachedScriptStatuses[src] ?? \"loading\";\n\t});\n\n\tReact.useEffect(() => {\n\t\tif (!src || options?.shouldPreventLoad) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cachedScriptStatus = cachedScriptStatuses[src];\n\t\tif (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n\t\t\t// If the script is already cached, set its status immediately\n\t\t\tsetStatus(cachedScriptStatus);\n\t\t\treturn;\n\t\t}\n\n\t\t// Fetch existing script element by src\n\t\t// It may have been added by another instance of this hook\n\t\tconst script = getScriptNode(src);\n\t\tlet scriptNode = script.node;\n\n\t\tif (!scriptNode) {\n\t\t\t// Create script element and add it to document body\n\t\t\tscriptNode = document.createElement(\"script\");\n\t\t\tscriptNode.src = src;\n\t\t\tscriptNode.async = true;\n\t\t\tscriptNode.setAttribute(\"data-status\", \"loading\");\n\t\t\tdocument.body.appendChild(scriptNode);\n\n\t\t\t// Store status in attribute on script\n\t\t\t// This can be read by other instances of this hook\n\t\t\tconst setAttributeFromEvent = (event: Event) => {\n\t\t\t\tconst scriptStatus: UseScriptStatus =\n\t\t\t\t\tevent.type === \"load\" ? \"ready\" : \"error\";\n\n\t\t\t\tscriptNode?.setAttribute(\"data-status\", scriptStatus);\n\t\t\t};\n\n\t\t\tscriptNode.addEventListener(\"load\", setAttributeFromEvent);\n\t\t\tscriptNode.addEventListener(\"error\", setAttributeFromEvent);\n\t\t} else {\n\t\t\t// Grab existing script status from attribute and set to state.\n\t\t\tsetStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n\t\t}\n\n\t\t// Script event handler to update status in state\n\t\t// Note: Even if the script already exists we still need to add\n\t\t// event handlers to update the state for *this* hook instance.\n\t\tconst setStateFromEvent = (event: Event) => {\n\t\t\tconst newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n\t\t\tsetStatus(newStatus);\n\t\t\tcachedScriptStatuses[src] = newStatus;\n\t\t};\n\n\t\t// Add event listeners\n\t\tscriptNode.addEventListener(\"load\", setStateFromEvent);\n\t\tscriptNode.addEventListener(\"error\", setStateFromEvent);\n\n\t\t// Remove event listeners on cleanup\n\t\treturn () => {\n\t\t\tif (scriptNode) {\n\t\t\t\tscriptNode.removeEventListener(\"load\", setStateFromEvent);\n\t\t\t\tscriptNode.removeEventListener(\"error\", setStateFromEvent);\n\t\t\t}\n\n\t\t\tif (scriptNode && options?.removeOnUnmount) {\n\t\t\t\tscriptNode.remove();\n\t\t\t}\n\t\t};\n\t}, [src, options?.shouldPreventLoad, options?.removeOnUnmount]);\n\n\treturn status;\n}\n\nexport type UseScriptStatus = \"idle\" | \"loading\" | \"ready\" | \"error\";\nexport interface UseScriptOptions {\n\tshouldPreventLoad?: boolean;\n\tremoveOnUnmount?: boolean;\n}\n\nexport { useScript };\n","import type { UseFetchStateProps } from \"./useFetch\";\n\nimport * as React from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { useFetch } from \"./useFetch\";\nimport { useSite } from \"./useSite\";\n\nexport interface Interest {\n\tarea: string;\n\tinterest: {\n\t\tid?: string;\n\t\tlabel: string;\n\t};\n\tweight: number;\n}\n\ninterface Body {\n\tid: string;\n\tinterests: Array<Interest>;\n\tnavigator: {\n\t\tuserAgent: string;\n\t\tlanguage: string;\n\t};\n}\n\ntype UseSendInterestsReturn = [\n\tOmit<UseFetchStateProps<unknown>, \"data\">,\n\t(setQuery: { interests: Array<Interest> }) => void,\n];\n\n/**\n * Hook to send GPX interests to Griddo's Public API.\n *\n * @example\n * const [{ isLoading }, setQuery] = useSendInterests();\n *\n * // Send interests\n * setQuery({\n * interests: [{ area: \"Area1\", interest: {label: \"Interest1\", id: 1}, weight: 1 }]\n * });\n *\n */\nexport function useSendInterests(): UseSendInterestsReturn {\n\tconst { publicApiUrl } = useSite();\n\t// init with null to prevent call useFetch without a valid body.\n\tconst [body, setBody] = React.useState<Body | null>(null);\n\n\tconst [id] = React.useState(() => {\n\t\tif (typeof window === \"undefined\") return \"\";\n\t\ttry {\n\t\t\tlet storedId = localStorage.getItem(\"gpx_id\");\n\t\t\tif (!storedId) {\n\t\t\t\tstoredId = uuidv4();\n\t\t\t\tlocalStorage.setItem(\"gpx_id\", storedId);\n\t\t\t}\n\t\t\treturn storedId;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error accessing localStorage:\", error);\n\t\t\treturn uuidv4();\n\t\t}\n\t});\n\n\tconst setQuery = (options: { interests: Array<Interest> }) => {\n\t\ttry {\n\t\t\tconst { interests } = options;\n\n\t\t\tif (!Array.isArray(interests) || interests.length === 0) {\n\t\t\t\tthrow new Error(\"Interests must be a non-empty array\");\n\t\t\t}\n\n\t\t\tsetBody({\n\t\t\t\tid,\n\t\t\t\tinterests,\n\t\t\t\tnavigator: {\n\t\t\t\t\tuserAgent: window.navigator.userAgent,\n\t\t\t\t\tlanguage: window.navigator.language,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error preparing GPX interests:\", error);\n\t\t}\n\t};\n\n\tconst { isError, isFirstFetch, isLoading, msg } = useFetch(\n\t\t`${publicApiUrl}/gpx/collect`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t},\n\t);\n\n\treturn [\n\t\t{\n\t\t\tisError,\n\t\t\tisFirstFetch,\n\t\t\tisLoading,\n\t\t\tmsg,\n\t\t},\n\t\tsetQuery,\n\t];\n}\n","import React from \"react\";\n\nimport { SessionContext } from \"../contexts\";\n\n/**\n * `useSession()`\n *\n * Hook to read/write any data in the context throughout the session in CX.\n * @see [Documentation](https://www.notion.so/griddoio/useSession-e446c9f55af34d09b8c27c1fcff529c3)\n *\n * @example\n * const [state, setState] = useSession()\n */\nconst useSession = () => {\n\treturn React.useContext(SessionContext);\n};\n\nexport { useSession };\n","/**\n *\n * Quickly know where your code will be executed;\n *\n * In the server (Server-Side-Rendering) at build time or in the client, the navigator.\n * This hook doesn't cause an extra render, it just returns the value directly, at the mount time, and it didn't re-trigger if the value changes.\n *\n * Otherwise, If you want to be notified when the value changes to react to it, you can use useIsClient() instead.\n *\n * @see useIsClient()\n *\n * @example\n * import { useSSR } from '@griddo/core'\n * const { isBrowser, isServer } = useSSR()\n *\n * @see\n * https://usehooks-ts.com for more hooks\n *\n */\nfunction useSSR() {\n\tconst isDOM =\n\t\ttypeof window !== \"undefined\" &&\n\t\twindow.document &&\n\t\twindow.document.documentElement;\n\n\treturn {\n\t\tisBrowser: isDOM,\n\t\tisServer: !isDOM,\n\t};\n}\n\nexport { useSSR };\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\nvar _react = require(\"react\");\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _excluded = [\"className\", \"children\", \"ratio\", \"style\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } } return target; }\nvar CUSTOM_PROPERTY_NAME = '--aspect-ratio';\nvar DEFAULT_CLASS_NAME = 'react-aspect-ratio-placeholder';\nclass AspectRatio extends _react.Component {\n constructor() {\n super(...arguments);\n this.node = null;\n this.setNode = node => {\n this.node = node;\n };\n }\n componentDidUpdate() {\n if (this.node) {\n var {\n node\n } = this;\n\n // BC for older version of React https://github.com/facebook/react/issues/6411\n // check if React support custom property AFTER\n var customPropertyValue = node.style.getPropertyValue(CUSTOM_PROPERTY_NAME);\n if (!customPropertyValue) {\n node.style.setProperty(CUSTOM_PROPERTY_NAME, \"(\" + this.props.ratio + \")\");\n }\n }\n }\n render() {\n var _this$props = this.props,\n {\n className,\n children,\n ratio,\n style\n } = _this$props,\n restProps = _objectWithoutPropertiesLoose(_this$props, _excluded); // eslint-disable-line no-unused-vars\n\n var newStyle = _extends({}, style, {\n // https://github.com/roderickhsiao/react-aspect-ratio/commit/53ec15858ae186c41e70b8c14cc5a5b6e97cb6e3\n [CUSTOM_PROPERTY_NAME]: \"(\" + ratio + \")\"\n });\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(\"div\", _extends({\n className: className,\n ref: this.setNode,\n style: newStyle\n }, restProps, {\n children: children\n }));\n }\n}\nAspectRatio.defaultProps = {\n className: DEFAULT_CLASS_NAME,\n ratio: 1\n};\nvar _default = exports.default = AspectRatio;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\nvar _react = require(\"react\");\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _excluded = [\"className\", \"children\", \"ratio\", \"style\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } } return target; }\nvar CUSTOM_PROPERTY_NAME = '--aspect-ratio';\nvar DEFAULT_CLASS_NAME = 'react-aspect-ratio-placeholder';\nvar AspectRatio = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {\n var {\n className = DEFAULT_CLASS_NAME,\n children,\n ratio = 1,\n style\n } = props,\n restProps = _objectWithoutPropertiesLoose(props, _excluded); // eslint-disable-line no-unused-vars\n\n var newStyle = _extends({}, style, {\n // https://github.com/roderickhsiao/react-aspect-ratio/commit/53ec15858ae186c41e70b8c14cc5a5b6e97cb6e3\n [CUSTOM_PROPERTY_NAME]: \"(\" + ratio + \")\"\n });\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(\"div\", _extends({\n className: className,\n style: newStyle,\n ref: ref\n }, restProps, {\n children: children\n }));\n});\nvar _default = exports.default = AspectRatio;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.AspectRatio = void 0;\nvar _react = _interopRequireDefault(require(\"./react-15.6\"));\nvar _reactLatest = _interopRequireDefault(require(\"./react-latest\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar _default = exports.default = _react.default; // use before react 15.6\nvar AspectRatio = exports.AspectRatio = _reactLatest.default;","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import type {\n\tCloudinaryImageCrop,\n\tCloudinaryImageFormat,\n\tCloudinaryResponsiveImageProps,\n} from \"../../hooks/useImage\";\nimport type {\n\tCloudinaryDefaults,\n\tImageDecoding,\n\tImageLoading,\n} from \"../../types/core\";\nimport type { CSSProperties } from \"react\";\n\nimport * as React from \"react\";\nimport { AspectRatio } from \"react-aspect-ratio\";\n\nimport \"react-aspect-ratio/aspect-ratio.css\";\nimport { useImage, useSite } from \"../../hooks\";\n\nexport const internalDefaults = {\n\tdomain: \"https://res.cloudinary.com\",\n\tuploadFolder: \"image/upload\",\n\tfallback404ImageId: \"dx-placeholders/fallback-404-image\",\n\tquality: 51,\n\tcrop: \"fill\",\n\tgravity: \"faces:center\",\n\tformat: \"auto\",\n\tloading: \"lazy\",\n\tbackgroundLazy: false,\n\tdecoding: \"auto\",\n\tresponsive: [{ breakpoint: null, width: \"320px\" }],\n};\n\n/**\n * <CloudinaryImage>\n *\n * @deprecated This component will be removed from Griddo in the future.\n */\nfunction CloudinaryImage(props: CloudinaryImageProps) {\n\tconst {\n\t\talt,\n\t\twidth,\n\t\theight,\n\t\tratio,\n\t\tfixed,\n\t\tpublicId,\n\t\tsrc,\n\t\tobjectFit = \"cover\",\n\t} = props;\n\n\tconst { cloudinaryDefaults } = useSite();\n\n\tconst imageConfig = {\n\t\t...internalDefaults,\n\t\t...cloudinaryDefaults,\n\t\t...props,\n\t} as CloudinaryDefaults;\n\n\tconst {\n\t\tsrcSet,\n\t\tsizes,\n\t\tsrc: customSrc,\n\t} = useImage({\n\t\tcrop: imageConfig.crop,\n\t\tformat: imageConfig.format,\n\t\tgravity: imageConfig.gravity,\n\t\tquality: imageConfig.quality,\n\t\tsizes: imageConfig.sizes,\n\t\tresponsive: imageConfig.responsive,\n\t\tar: ratio,\n\t\tpublicId: publicId,\n\t});\n\n\tconst commonImageProps = {\n\t\talt: alt,\n\t\twidth: width,\n\t\theight: height,\n\t\tloading: imageConfig.loading,\n\t\tstyle: { objectFit: objectFit },\n\t\tdecoding: imageConfig.decoding,\n\t};\n\n\tconst srcProps = {\n\t\t...commonImageProps,\n\t\tsrc,\n\t};\n\n\tconst publicIdProps = {\n\t\t...commonImageProps,\n\t\tsrcSet,\n\t\tsizes,\n\t\tsrc: customSrc,\n\t};\n\n\tconst imgProps = src ? srcProps : publicIdProps;\n\n\tconst Image = () => <img {...imgProps} />;\n\n\treturn fixed ? (\n\t\t<Image />\n\t) : (\n\t\t<AspectRatio\n\t\t\tratio={ratio || 1}\n\t\t\tstyle={{ maxWidth: \"100%\", alignSelf: \"normal\" }}\n\t\t>\n\t\t\t<Image />\n\t\t</AspectRatio>\n\t);\n}\n\nexport interface CloudinaryImageProps {\n\talt?: string;\n\twidth?: string;\n\theight?: string;\n\tratio?: number | string;\n\tfixed?: boolean;\n\tpublicId?: string;\n\tsrc?: string;\n\tobjectFit?: CSSProperties[\"objectFit\"];\n\tquality?: number;\n\tcrop?: CloudinaryImageCrop;\n\tgravity?: string;\n\tformat?: CloudinaryImageFormat;\n\tloading?: ImageLoading;\n\tbackgroundLazy?: boolean;\n\tdecoding?: ImageDecoding;\n\tsizes?: string;\n\tresponsive?: Array<CloudinaryResponsiveImageProps>;\n}\n\nexport { CloudinaryImage };\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport * as React from \"react\";\n\nimport { useImage, useSite } from \"../../hooks\";\nimport { fillIntArray, rndHash } from \"../../utils/images\";\nimport { internalDefaults } from \"../CloudinaryImage\";\n\nimport \"./styles.css\";\n\n/**\n * @deprecated This component will be removed from Griddo in the future.\n */\nfunction CloudinaryBackgroundImage({\n\tbackgroundRepeat = \"no-repeat\",\n\tbackgroundSize = \"cover\",\n\tbackgroundPosition = \"50% 50%\",\n\tchildren,\n\toverlayColor = null,\n\toverlayOpacity = 0,\n\toverlayTransition = \"2s\",\n\tratio,\n\tpublicId,\n\tsrc,\n\tcustomLazyClassName = \"lazy\",\n\tlazy,\n\t...props\n}) {\n\tconst { cloudinaryDefaults } = useSite();\n\n\tconst imageConfig = {\n\t\t...cloudinaryDefaults,\n\t\t...internalDefaults,\n\t\t...props,\n\t\tbackgroundLazy:\n\t\t\tcloudinaryDefaults.backgroundLazy ||\n\t\t\tinternalDefaults.backgroundLazy ||\n\t\t\tlazy,\n\t};\n\n\tconst { srcSetURL } = useImage({\n\t\tresponsive: [...imageConfig.responsive],\n\t\tquality: imageConfig.quality,\n\t\tcrop: imageConfig.crop,\n\t\tgravity: imageConfig.gravity,\n\t\tformat: imageConfig.format,\n\t\tpublicId: publicId,\n\t\tar: ratio,\n\t});\n\n\tconst SRCSET = src ? [src] : srcSetURL;\n\tconst BREAKPOINTS = src\n\t\t? []\n\t\t: imageConfig.responsive.map((entry) => entry.breakpoint);\n\tconst CLASSNAME_HASHED = `Griddo-BgImage--${rndHash()}`;\n\tconst LAZY_CLASSNAME = imageConfig.backgroundLazy ? customLazyClassName : \"\";\n\n\tconst MEDIA_QUERIES = fillIntArray(SRCSET.length - 1, 1)\n\t\t.map((idx) => {\n\t\t\treturn `@media (min-width: ${BREAKPOINTS[idx]}) {\n .${CLASSNAME_HASHED} {\n background-image: url(${SRCSET[idx]});\n }\n }\n `;\n\t\t})\n\t\t.join(\"\");\n\n\treturn (\n\t\t<>\n\t\t\t<style\n\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t__html: `\n\n .${CLASSNAME_HASHED} {\n background-repeat: ${backgroundRepeat};\n background-position: ${backgroundPosition};\n background-size: ${backgroundSize};\n background-image: url(${SRCSET[0]});\n }\n\n ${MEDIA_QUERIES}\n\n .${CLASSNAME_HASHED}::before {\n transition: all ${overlayTransition} ease;\n background-color: rgba(0, 0, 0, ${overlayOpacity});\n ${\n\t\t\t\t\toverlayColor\n\t\t\t\t\t\t? `\n background-color: ${overlayColor};\n opacity: ${overlayOpacity};\n `\n\t\t\t\t\t\t: \"\"\n\t\t\t\t}\n }`,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<div className={`Griddo-BgImage ${CLASSNAME_HASHED} ${LAZY_CLASSNAME}`}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport { CloudinaryBackgroundImage };\n","import type { SVGProps } from \"react\";\n\nimport * as React from \"react\";\n\nconst SvgDelete = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={24}\n\t\theight={24}\n\t\tfill=\"none\"\n\t\trole=\"img\"\n\t\taria-label=\"Delete\"\n\t\t{...props}\n\t>\n\t\t<path d=\"M16 9v10H8V9h8zm-1.5-6h-5l-1 1H5v2h14V4h-3.5l-1-1zM18 7H6v12c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7z\" />\n\t</svg>\n);\n\nexport default SvgDelete;\n","import type { SVGProps } from \"react\";\n\nimport * as React from \"react\";\n\nconst SvgDuplicate = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={24}\n\t\theight={24}\n\t\tfill=\"none\"\n\t\trole=\"img\"\n\t\taria-label=\"Duplicate\"\n\t\t{...props}\n\t>\n\t\t<path d=\"M12.3254 13.9H14V11.8246H16.0754V10.1746H14V8.0998H12.3254V10.1746H10.2752V11.8246H12.3254V13.9ZM8.0004 19.675C7.5504 19.675 7.1586 19.5082 6.825 19.1746C6.4918 18.8414 6.3252 18.4498 6.3252 17.9998V3.6746C6.3252 3.2246 6.4918 2.833 6.825 2.4998C7.1586 2.1666 7.5504 2 8.0004 2H16.125L20.0002 5.8746V17.9998C20.0002 18.4498 19.8336 18.8414 19.5004 19.1746C19.1668 19.5082 18.775 19.675 18.325 19.675H8.0004ZM8.0004 17.9998H18.325V6.6246L15.3 3.6746H8.0004V17.9998ZM4.6752 22.9996C4.2252 22.9996 3.8336 22.833 3.5004 22.4998C3.1668 22.1666 3 21.775 3 21.325V6.3496H4.6752V21.325H15.6254V22.9996H4.6752ZM8.0004 17.9998V3.6746V7.6246V17.9998Z\" />\n\t</svg>\n);\n\nexport default SvgDuplicate;\n","import * as React from \"react\";\n\nimport SvgDelete from \"./svg/Delete\";\nimport SvgDuplicate from \"./svg/Duplicate\";\nimport { SiteContext } from \"../../../contexts\";\n\nimport \"./style.css\";\n\n/**\n * <Wrapper>\n */\nconst Wrapper = (props: WrapperProps) => {\n\tconst componentRef = React.useRef<HTMLSpanElement>(null);\n\tconst [wrapperHeight, setWrapperHeight] = React.useState(0);\n\tconst { selectEditorID, selectHoverEditorID, moduleActions } =\n\t\tReact.useContext(SiteContext);\n\n\tconst {\n\t\tselectedEditorID,\n\t\teditorID,\n\t\tcomponent,\n\t\tchildren,\n\t\tisSelectionAllowed,\n\t\ttype,\n\t} = props;\n\n\tconst isNavigationModule = !!type && [\"header\", \"footer\"].includes(type);\n\n\tReact.useEffect(() => {\n\t\tif (!!componentRef && componentRef.current) {\n\t\t\tsetWrapperHeight(componentRef.current.scrollHeight);\n\t\t}\n\t}, [children]);\n\n\tReact.useEffect(() => {\n\t\tisSelected && scrollToComponent();\n\t}, [componentRef]);\n\n\tconst cb = React.useCallback(\n\t\t(entries: IntersectionObserverEntry[]) => {\n\t\t\tentries.forEach((entry) => {\n\t\t\t\tif (entry.isIntersecting && selectHoverEditorID && editorID) {\n\t\t\t\t\tselectHoverEditorID(editorID);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t[selectHoverEditorID, editorID],\n\t);\n\n\tconst ioConfiguration = {\n\t\trootMargin: \"-30% 0% -70% 0%\",\n\t\tthreshold: 0,\n\t};\n\n\tconst observer = new IntersectionObserver(cb, ioConfiguration);\n\n\tReact.useEffect(() => {\n\t\tif (componentRef.current) {\n\t\t\tobserver.observe(componentRef.current);\n\t\t}\n\t\treturn () => {\n\t\t\tif (componentRef.current) {\n\t\t\t\tobserver.unobserve(componentRef.current);\n\t\t\t}\n\t\t};\n\t}, [componentRef, observer]);\n\n\tconst handleClick = (e: React.SyntheticEvent) => {\n\t\tif (\n\t\t\t(!editorID && editorID !== 0) ||\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\t!isSelectionAllowed\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tselectEditorID && selectEditorID(props, undefined, e);\n\t};\n\n\tconst scrollToComponent = () => {\n\t\tif (!componentRef.current) return;\n\t\tconst pos = componentRef.current.style.position;\n\t\tconst top = componentRef.current.style.top;\n\t\tcomponentRef.current.style.position = \"relative\";\n\t\tcomponentRef.current.style.top = \"-34px\";\n\t\tcomponentRef.current.scrollIntoView({\n\t\t\tbehavior: \"smooth\",\n\t\t\tblock: \"nearest\",\n\t\t});\n\t\tcomponentRef.current.style.top = top;\n\t\tcomponentRef.current.style.position = pos;\n\n\t\tconst offsetTop = componentRef.current.offsetTop;\n\t\tif (offsetTop === 0) {\n\t\t\tcomponentRef.current.style.marginTop = \"36px\";\n\t\t}\n\t};\n\n\tconst isSelected = !!selectedEditorID && selectedEditorID === editorID;\n\tisSelected && scrollToComponent();\n\n\tconst removeItem = (e: React.SyntheticEvent) => {\n\t\te.stopPropagation();\n\t\tmoduleActions && editorID && moduleActions.deleteModuleAction(editorID);\n\t};\n\n\tconst duplicateItem = (e: React.SyntheticEvent) => {\n\t\te.stopPropagation();\n\t\tmoduleActions && editorID && moduleActions.duplicateModuleAction(editorID);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{component === \"Header\" && (\n\t\t\t\t<style\n\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t__html: `\n [data-text=\"Header\"].--selected::before {\n height: ${wrapperHeight - 8}px;\n }`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{isNavigationModule && (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`${isSelected ? \"--selected-header-footer\" : \"\"}`}\n\t\t\t\t\tdata-text={component}\n\t\t\t\t\tref={componentRef}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t{!isNavigationModule && (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`${isSelected ? \"--selected\" : \"\"}`}\n\t\t\t\t\tdata-text={component}\n\t\t\t\t\tref={componentRef}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={`${\n\t\t\t\t\t\t\tisSelected ? \"--selected-nameplate\" : \"--not-selected-nameplate\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{component}\n\t\t\t\t\t\t<span className=\"span-svg-action\" onClick={duplicateItem}>\n\t\t\t\t\t\t\t<SvgDuplicate className=\"svg-action\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span className=\"span-svg-action\" onClick={removeItem}>\n\t\t\t\t\t\t\t<SvgDelete className=\"svg-action\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t{children}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\ninterface WrapperProps {\n\tselectedEditorID: number | null;\n\teditorID?: number;\n\tcomponent: string;\n\ttype?: string;\n\tparentEditorID?: number;\n\tisSelectionAllowed: boolean;\n\tchildren: JSX.Element;\n}\n\nexport { Wrapper as ComponentWrapper };\n","import * as React from \"react\";\n\nimport { SiteContext } from \"../../../contexts\";\nimport \"./styles.css\";\n\ninterface FormWrapperProps {\n\tselectedEditorID: number | null;\n\teditorID?: number;\n\tcomponent: string;\n\tisSelectionAllowed: boolean;\n\tchildren: JSX.Element;\n}\n\nconst FormWrapper = (props: FormWrapperProps) => {\n\tconst { selectEditorID } = React.useContext(SiteContext);\n\n\tconst {\n\t\tselectedEditorID,\n\t\teditorID,\n\t\tcomponent,\n\t\tisSelectionAllowed,\n\t\tchildren,\n\t} = props;\n\n\tconst handleClick = (e: React.SyntheticEvent) => {\n\t\tif (\n\t\t\t(!editorID && editorID !== 0) ||\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\t!isSelectionAllowed\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tselectEditorID && selectEditorID(props, undefined, e);\n\t};\n\n\tconst isSelected = !!selectedEditorID && selectedEditorID === editorID;\n\n\treturn (\n\t\t<span\n\t\t\tclassName={isSelected ? \"fw-selected\" : \"\"}\n\t\t\tdata-text={component}\n\t\t\tonClick={handleClick}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName={\n\t\t\t\t\tisSelected ? \"fw-selected-nameplate\" : \"fw-not-selected-nameplate\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{component}\n\t\t\t</span>\n\t\t\t{children}\n\t\t</span>\n\t);\n};\n\nexport { FormWrapper };\n","import type { FC } from \"react\";\n\nimport * as React from \"react\";\n\nimport { ComponentWrapper } from \"./ComponentWrapper\";\nimport { FormWrapper } from \"./FormWrapper\";\nimport { FormProvider, SessionProvider } from \"../../contexts\";\nimport { useForm, useNavigation, useSite } from \"../../hooks\";\n\nexport interface ComponentProps {\n\t// libComponents: Record<\n\t// \tstring,\n\t// \tReact.FC<Omit<ComponentProps, \"libComponents\">>\n\t// >;\n\t// TODO: remove this any, maybe ths will require refactor the\n\t// component/componenWrapper/preview components.\n\tlibComponents: Record<string, any>;\n\teditorID?: number;\n\tcomponent: string;\n\ttype?: string;\n\tparentEditorID?: number;\n\t[key: string]: unknown;\n}\n\n/**\n * Griddo core component to render dynamically a component/module (using the\n * `component` prop) from the `libComponents` (a list of React components) with\n * the props we provide to it\n *\n * @example\n * import Hero from './Hero'\n * import CardCollection from './CardCollection'\n * const moduleList = { Hero, CardCollection }\n *\n * // Render the Hero component from `moduleList` with `props`\n * <Component\n * libComponents={moduleList}\n * {{ component: 'Hero', ...props }}\n * />\n */\nfunction Component({ libComponents, ...props }: ComponentProps) {\n\tconst { component, editorID, type = \"\", parentEditorID } = props;\n\tconst { renderer } = useSite();\n\tconst isNavigation = useNavigation()?.isNavigation;\n\tconst isForm = useForm()?.isForm;\n\tconst selectedEditorID =\n\t\trenderer === \"editor\" && typeof window !== \"undefined\"\n\t\t\t? Number.parseInt(localStorage.getItem(\"selectedID\") || \"0\")\n\t\t\t: null;\n\n\tconst LibComponent = getComponent(libComponents, {\n\t\t...props,\n\t});\n\n\tconst isNavigationInnerModule =\n\t\tisNavigation && ![\"header\", \"footer\"].includes(type);\n\n\tconst componentWrapper = (\n\t\t<ComponentWrapper\n\t\t\tselectedEditorID={selectedEditorID}\n\t\t\tisSelectionAllowed={!isNavigationInnerModule && !isForm}\n\t\t\teditorID={editorID}\n\t\t\tcomponent={component}\n\t\t\ttype={type}\n\t\t\tparentEditorID={parentEditorID}\n\t\t>\n\t\t\t{LibComponent ? <LibComponent {...props} /> : <></>}\n\t\t</ComponentWrapper>\n\t);\n\n\t// AX\n\tif (renderer === \"editor\") {\n\t\treturn (\n\t\t\t<SessionProvider>\n\t\t\t\t{type === \"formTemplate\" ? (\n\t\t\t\t\t<FormProvider>{componentWrapper}</FormProvider>\n\t\t\t\t) : (\n\t\t\t\t\t<>{componentWrapper}</>\n\t\t\t\t)}\n\t\t\t</SessionProvider>\n\t\t);\n\t}\n\n\t// AX preview\n\tif (renderer === \"preview\")\n\t\treturn (\n\t\t\t<SessionProvider>\n\t\t\t\t{LibComponent && <LibComponent {...props} />}\n\t\t\t</SessionProvider>\n\t\t);\n\n\t// AX forms\n\tif (renderer === \"forms\") {\n\t\treturn (\n\t\t\t<SessionProvider>\n\t\t\t\t<FormWrapper\n\t\t\t\t\tselectedEditorID={selectedEditorID}\n\t\t\t\t\tisSelectionAllowed={!isNavigationInnerModule}\n\t\t\t\t\teditorID={editorID}\n\t\t\t\t\tcomponent={component}\n\t\t\t\t>\n\t\t\t\t\t{LibComponent ? <LibComponent {...props} /> : <></>}\n\t\t\t\t</FormWrapper>\n\t\t\t</SessionProvider>\n\t\t);\n\t}\n\n\t// CX\n\treturn LibComponent && <LibComponent {...props} />;\n}\n\nfunction getComponent(\n\t// components es un objeto con key/value donde value es un componente de React\n\tcomponents: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>,\n\t// props pasadas al componente, no sabemos qué se pasará\n\tprops: {\n\t\tcomponent: string;\n\t\t[key: string]: unknown;\n\t},\n) {\n\tconst componentName = props.component;\n\tconst isComponent = typeof components[componentName] !== \"undefined\";\n\n\tif (isComponent) {\n\t\treturn components[componentName];\n\t}\n\n\tconsole.warn(\n\t\t`The component <${componentName}> doesn't exist inside ${JSON.stringify(\n\t\t\tObject.keys(components),\n\t\t)}`,\n\t);\n\n\treturn null;\n}\n\nexport { Component, getComponent };\n","import * as React from \"react\";\n\nimport { FormContext } from \"../contexts\";\n\n/**\n * `useForm()`\n */\nfunction useForm() {\n\treturn React.useContext(FormContext);\n}\n\nexport { useForm };\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport type { Core } from \"../..\";\n\nimport * as React from \"react\";\n\nimport { useSite } from \"../../hooks\";\nimport {\n\tgetGriddoDamURIWithParams,\n\tgetDomainFromDamUrl,\n\tgetDamIdFromDamUrl,\n} from \"../../utils/images\";\n\nimport \"./styles.css\";\n\nconst LAZY_CLASS_NAME = \"griddo-background-image--lazy\";\n\nexport interface GriddoBackgroundImageProps {\n\tformat?: Core.ImageFormats;\n\tbackgroundSize?: Core.ImageCropType;\n\tveilOpacity?: React.CSSProperties[\"opacity\"];\n\tveilColor?: React.CSSProperties[\"color\"];\n\tveilTransitionTime?: React.CSSProperties[\"animationDuration\"];\n\tveilTransitionEasing?: React.CSSProperties[\"animationTimingFunction\"];\n\turl?: string;\n\tsrc?: string;\n\tresponsive?: Array<\n\t\tOmit<Core.ResponsiveImageProps, \"breakpoint\"> & { customProperty: string }\n\t>;\n\tquality?: number;\n\tlazyOffset?: string;\n\tloading?: Core.ImageLoading;\n\tchildren?: React.ReactNode | Array<React.ReactNode>;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\n/**\n * <GriddoBackgroundImage>\n */\nconst GriddoBackgroundImage = React.forwardRef(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tformat,\n\t\t\tbackgroundSize,\n\t\t\tveilOpacity = 0.5,\n\t\t\tveilColor = \"#000033\",\n\t\t\tveilTransitionTime = \"2s\",\n\t\t\tveilTransitionEasing = \"easing\",\n\t\t\turl,\n\t\t\tsrc,\n\t\t\tresponsive,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tquality,\n\t\t\tlazyOffset = \"200px\",\n\t\t\tloading,\n\t\t}: GriddoBackgroundImageProps,\n\t\tref,\n\t) => {\n\t\tif (!url) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { griddoDamDefaults } = useSite();\n\t\tconst thisRef = React.useRef(null);\n\t\tconst domain = getDomainFromDamUrl(url);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!IntersectionObserver) {\n\t\t\t\tthisRef.current?.classList.remove(LAZY_CLASS_NAME);\n\t\t\t} else if (thisRef.current) {\n\t\t\t\tlet observer = new IntersectionObserver(\n\t\t\t\t\t(entries) =>\n\t\t\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\t\t\t\tthisRef.current?.classList.remove(LAZY_CLASS_NAME);\n\t\t\t\t\t\t\t\tobserver = observer.disconnect();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t{ rootMargin: `0px 0px ${lazyOffset} 0px` },\n\t\t\t\t);\n\t\t\t\tobserver.observe(thisRef.current);\n\n\t\t\t\treturn () => (observer = observer && observer.disconnect());\n\t\t\t}\n\t\t}, []);\n\n\t\t// url, imageConfig, ...props\n\t\tconst backgroundImageResponsive =\n\t\t\tresponsive &&\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.keys(responsive).map((key) => {\n\t\t\t\t\tconst griddoDamUrl = getGriddoDamURIWithParams({\n\t\t\t\t\t\tdamId: getDamIdFromDamUrl(url),\n\t\t\t\t\t\timageConfig: {\n\t\t\t\t\t\t\t...griddoDamDefaults,\n\t\t\t\t\t\t\tquality,\n\t\t\t\t\t\t\tformat,\n\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\t...responsive[key],\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tconst fullImagePath = {\n\t\t\t\t\t\turl: `url(\"${griddoDamUrl}\")`,\n\t\t\t\t\t\tcustomProperty: responsive[key].customProperty,\n\t\t\t\t\t};\n\t\t\t\t\treturn [key, fullImagePath];\n\t\t\t\t}),\n\t\t\t);\n\n\t\tconst resimages =\n\t\t\tresponsive &&\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.keys(responsive).map((key, idx) => {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tbackgroundImageResponsive[key].customProperty\n\t\t\t\t\t\t\t? `${backgroundImageResponsive[key].customProperty}`\n\t\t\t\t\t\t\t: `--image-${idx}`,\n\n\t\t\t\t\t\tbackgroundImageResponsive[key].url,\n\t\t\t\t\t];\n\t\t\t\t}),\n\t\t\t);\n\n\t\tconst allImages = src ? { \"--image-default\": `url(${src})` } : resimages;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={thisRef}\n\t\t\t\tdata-griddo=\"loading-ref\"\n\t\t\t\tclassName={`${loading === \"lazy\" ? LAZY_CLASS_NAME : \"\"}`}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-griddo=\"image-ref\"\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={`${className} griddo-background-image`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\"--veil-opacity\": `${veilColor}${Math.round(\n\t\t\t\t\t\t\t255 / (1 / veilOpacity),\n\t\t\t\t\t\t).toString(16)}`,\n\t\t\t\t\t\t\"--veil-transition-time\": veilTransitionTime,\n\t\t\t\t\t\t\"--veil-transition-easing\": veilTransitionEasing,\n\t\t\t\t\t\t\"--background-size\": backgroundSize,\n\t\t\t\t\t\t...allImages,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nGriddoBackgroundImage.displayName = \"GriddoBackgroundImage\";\n\nexport { GriddoBackgroundImage };\n","import type {\n\tFetchPriority,\n\tImageCropType,\n\tImageDecoding,\n\tImageLoading,\n\tImagePosition,\n\tImageTransform,\n\tResponsiveImageProps,\n} from \"../../types/core\";\n\nimport * as React from \"react\";\nimport { AspectRatio } from \"react-aspect-ratio\";\n\nimport \"react-aspect-ratio/aspect-ratio.css\";\nimport { useGriddoImage, useSite } from \"../../hooks\";\n\nimport \"./styles.css\";\n\n/**\n * Renders an image from the **Griddo** cdn.\n * Also return a ref with the `<picture>` tag.\n * @see [Documentation](https://www.notion.so/griddoio/GriddoImage-a3973298b4e7447884f29185dae2d07e)\n *\n * @example\n * <GriddoImage\n * url=\"https://images.griddo.io/butterfly\"\n * width=\"640px\"\n * height=\"480px\"\n * quality={75}\n * />\n */\nconst GriddoImage = React.forwardRef<HTMLPictureElement, GriddoImageProps>(\n\t(\n\t\t{\n\t\t\twidth,\n\t\t\theight,\n\t\t\tratio,\n\t\t\tfixed,\n\t\t\turl,\n\t\t\tloading,\n\t\t\tdecoding,\n\t\t\tresponsive,\n\t\t\tquality,\n\t\t\tcrop,\n\t\t\tformat,\n\t\t\tformats,\n\t\t\tposition,\n\t\t\ttransforms,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tif (!url) return null;\n\n\t\tconst { griddoDamDefaults } = useSite() || {};\n\n\t\tconst imageConfig = {\n\t\t\t// ...griddoDamDefaults,\n\t\t\tloading: loading || griddoDamDefaults?.loading,\n\t\t\tdecoding: decoding || griddoDamDefaults?.decoding,\n\t\t\tquality: quality || griddoDamDefaults?.quality,\n\t\t\tcrop: crop || griddoDamDefaults?.crop,\n\t\t\tformat: format,\n\t\t\tformats: formats || griddoDamDefaults?.formats,\n\t\t\tposition: position,\n\t\t\ttransforms: transforms,\n\t\t};\n\n\t\t// Get data necesary for the image component\n\t\tconst { src, sizes, avif, jpeg, gif, webp, svg } = useGriddoImage({\n\t\t\turl: url,\n\t\t\tcrop: imageConfig.crop,\n\t\t\tformat: imageConfig.format,\n\t\t\tquality: imageConfig.quality,\n\t\t\tresponsive: responsive,\n\t\t\tposition: imageConfig.position,\n\t\t\ttransforms: imageConfig.transforms,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t});\n\n\t\tconst GifImage = () => (\n\t\t\t<img\n\t\t\t\tdata-image=\"griddo\"\n\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\tsrcSet={responsive && gif?.srcSet?.join(\",\")}\n\t\t\t\tsizes={responsive && sizes}\n\t\t\t\tsrc={gif?.srcSetURL && gif.srcSetURL[0]}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\n\t\tconst SvgImage = () => (\n\t\t\t<img\n\t\t\t\tdata-image=\"griddo\"\n\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\tsrc={svg?.srcSetURL && svg.srcSetURL[0]}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\n\t\tconst Picture = () => {\n\t\t\treturn (\n\t\t\t\t<picture ref={ref}>\n\t\t\t\t\t{/* avif */}\n\t\t\t\t\t{imageConfig.formats?.includes(\"avif\") && (\n\t\t\t\t\t\t<source\n\t\t\t\t\t\t\tsrcSet={avif?.srcSet?.join(\",\")}\n\t\t\t\t\t\t\tsizes={responsive && sizes}\n\t\t\t\t\t\t\ttype=\"image/avif\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* webp */}\n\t\t\t\t\t{imageConfig.formats?.includes(\"webp\") && (\n\t\t\t\t\t\t<source\n\t\t\t\t\t\t\tsrcSet={webp?.srcSet?.join(\",\")}\n\t\t\t\t\t\t\tsizes={responsive && sizes}\n\t\t\t\t\t\t\ttype=\"image/webp\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* jpeg */}\n\t\t\t\t\t<img\n\t\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\t\tsizes={responsive && sizes}\n\t\t\t\t\t\tsrcSet={jpeg?.srcSet?.join(\",\")}\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t/>\n\t\t\t\t</picture>\n\t\t\t);\n\t\t};\n\n\t\tif (!url) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (format === \"svg\") {\n\t\t\treturn <SvgImage />;\n\t\t}\n\n\t\tif (format === \"gif\") {\n\t\t\treturn <GifImage />;\n\t\t}\n\n\t\tif (fixed || !responsive) {\n\t\t\treturn <Picture />;\n\t\t}\n\n\t\treturn (\n\t\t\t<AspectRatio\n\t\t\t\tratio={ratio || 1}\n\t\t\t\tstyle={{ maxWidth: \"100%\", alignSelf: \"normal\" }}\n\t\t\t>\n\t\t\t\t<Picture />\n\t\t\t</AspectRatio>\n\t\t);\n\t},\n);\n\n// Omit src, srcSet and sizes, as GriddoImage component will add them and it\n// doesn't need to be extends from React types.\n// Also omit, width and height because GriddoImage only accepts strings with\n// 'px' format and the React.ComponentPropsWithRef<\"img\"> an be numbers too.\nexport interface GriddoImageCommonProps\n\textends Omit<\n\t\tReact.ComponentPropsWithRef<\"img\">,\n\t\t\"src\" | \"srcSet\" | \"sizes\" | \"width\" | \"height\"\n\t> {\n\tcrop?: ImageCropType;\n\tfetchpriority?: FetchPriority;\n\theight?: string;\n\tposition?: ImagePosition;\n\turl?: string;\n\twidth?: string;\n\tratio?: number;\n\tfixed?: boolean;\n\tloading?: ImageLoading;\n\tdecoding?: ImageDecoding;\n\tresponsive?: Array<ResponsiveImageProps>;\n\tquality?: number;\n\tformats?: Array<\"webp\" | \"avif\">;\n\ttransforms?: ImageTransform;\n}\n\nexport interface GriddoImageSvg extends GriddoImageCommonProps {\n\t// format is used to check if is a GriddoImageSvg image\n\tformat?: \"svg\";\n\tresponsive?: never;\n\tquality?: never;\n\tformats?: never;\n\ttransforms?: never;\n\tratio?: never;\n}\n\nexport interface GriddoImageGif extends GriddoImageCommonProps {\n\t// format is used to check if is a GriddoImageGif image\n\tformat?: \"gif\";\n\tresponsive?: never;\n\tquality?: never;\n\tformats?: never;\n\ttransforms?: never;\n}\n\nexport interface GriddoImageJpgWebpAvif extends GriddoImageCommonProps {\n\t// format is used to check if is a GriddoImageJpgWebpAvif image\n\t/** Format is set automatically based on formats prop */\n\tformat?: never;\n}\n\nexport type GriddoImageProps =\n\t| GriddoImageJpgWebpAvif\n\t| GriddoImageGif\n\t| GriddoImageSvg;\n\nexport { GriddoImage };\n","import type { Source } from \"./types\";\nimport type { Core, Fields } from \"../..\";\nimport type {\n\tGriddoDamDefaults,\n\tImageCropType,\n\tImageDecoding,\n\tImageFormats,\n\tImageLoading,\n\tImagePosition,\n\tImageTransform,\n} from \"../../types/core\";\n\nimport {\n\tgetDamIdFromDamUrl,\n\tgetDomainFromDamUrl,\n\tgetGriddoDamURIWithParams,\n\tremoveUnit,\n} from \"../../utils/images\";\n\ninterface GetGriddoArtDirectionImage {\n\tsources: Array<Source>;\n\twidth?: string;\n\theight?: string;\n\twidths?: Array<string>;\n\tgriddoDamDefaults?: GriddoDamDefaults;\n\tcrop?: Core.ImageCropType;\n\tformats?: Array<\"avif\" | \"webp\">;\n\tquality?: number;\n\tposition?: Core.ImagePosition;\n\ttransforms?: Core.ImageTransform;\n\tloading?: Core.ImageLoading;\n\tdecoding?: Core.ImageDecoding;\n\timageField?: Fields.Image;\n\tsizes?: string;\n}\n\nconst MIME_TYPES = {\n\tjpg: \"image/jpeg\",\n\tjpeg: \"image/jpeg\",\n\tgif: \"image/gif\",\n\tsvg: \"image/svg+xml\",\n\tpng: \"image/png\",\n\tavif: \"image/avif\",\n\twebp: \"image/webp\",\n};\n\nfunction getGriddoArtDirectionImageSources(props: GetGriddoArtDirectionImage) {\n\tconst {\n\t\tgriddoDamDefaults,\n\t\tsources,\n\t\twidths,\n\t\tsizes: rootSizes,\n\t\ttransforms: rootTransforms,\n\t\tquality: rootQuality,\n\t\twidth: rootWidth,\n\t\theight: rootHeight,\n\t\tposition: rootPosition,\n\t\tcrop: rootCrop,\n\t\timageField: rootImageField,\n\t} = props;\n\n\tconst sourcesRawData = sources.map((source) => {\n\t\t// Explicación de root:\n\t\t// Se refiere a la prop en el raíz del componente y no en cada source del array sources.\n\t\t// <GriddoImageExp width=\"300px\" /> <---- ese width es un rootWidth\n\t\tconst domain = getDomainFromDamUrl(\n\t\t\tsource.image?.url || rootImageField?.url || \"\",\n\t\t);\n\t\tconst damId = getDamIdFromDamUrl(\n\t\t\tsource.image?.url || rootImageField?.url || \"\",\n\t\t);\n\n\t\t// This object contains every aspect of the image configuration\n\t\tconst imageConfig: ImageConfigExperimental = {\n\t\t\t...griddoDamDefaults,\n\t\t\t...props,\n\t\t\tdomain: domain,\n\t\t\tformat: \"jpeg\",\n\t\t\ttransforms: source.transforms || rootTransforms || undefined,\n\t\t\tquality: source.quality || rootQuality || griddoDamDefaults?.quality,\n\t\t\tposition: source.position || rootPosition,\n\t\t\tcrop: source.crop || rootCrop,\n\t\t};\n\n\t\t// Default ratio, this will be override 100%.\n\t\tlet RATIO = 1;\n\t\tlet imgTagWidth = \"\";\n\t\tlet imgTagHeight = \"\";\n\n\t\t// Si hay custom-width and custom-height calculamos el ratio y este\n\t\t// será el ratio final y también usarmos el width/height para el <img>\n\t\tif (source.width && source.height) {\n\t\t\t// Ratio para el srcSet\n\t\t\tRATIO = removeCSSUnits(source.width) / removeCSSUnits(source.height);\n\t\t\t// medidas para el <img>\n\t\t\timgTagWidth = source.width;\n\t\t\timgTagHeight = source.height;\n\t\t}\n\n\t\t// Si no hay width o height y hay imageField o rootImageField...\n\t\tif ((!source.width || !source.height) && (source.image || rootImageField)) {\n\t\t\t// Ratio para el srcSet\n\t\t\t// si está el field del source lo priorizamos vs el field del root\n\t\t\tconst field = source.image || rootImageField || ({} as Fields.Image);\n\t\t\tconst fieldWidth = field.width || 1;\n\t\t\tconst fieldHeight = field.height || 1;\n\t\t\tRATIO = fieldWidth / fieldHeight;\n\t\t\t// medidas para el <img>\n\t\t\t// HAY WIDTH - NO HEIGHT\n\t\t\tif (source.width && !source.height) {\n\t\t\t\timgTagWidth = source.width;\n\t\t\t\tconst fieldWidth = field.width || 1;\n\t\t\t\tconst fieldHeight = field.height || 1;\n\t\t\t\timgTagHeight = `${Math.round(\n\t\t\t\t\tfieldHeight / (fieldWidth / removeCSSUnits(source.width)),\n\t\t\t\t)}px`;\n\t\t\t}\n\t\t\t// NO WIDTH - HAY HEIGHT\n\t\t\tif (!source.width && source.height) {\n\t\t\t\tconst fieldWidth = field.width || 1;\n\t\t\t\tconst fieldHeight = field.height || 1;\n\t\t\t\timgTagWidth = `${Math.round(\n\t\t\t\t\tfieldWidth / (fieldHeight / removeCSSUnits(source.height)),\n\t\t\t\t)}px`;\n\t\t\t\timgTagHeight = source.height;\n\t\t\t}\n\t\t}\n\n\t\t// NO WIDTH - NO HEIGHT\n\t\tif (!source.width && !source.height && !rootImageField) {\n\t\t\tconst field = source.image || rootImageField || ({} as Fields.Image);\n\t\t\tif (rootWidth && rootHeight) {\n\t\t\t\t// Comprobamos si hay un width y un height (ambos) en el root y lo usamos si existe\n\t\t\t\tRATIO = removeCSSUnits(rootWidth) / removeCSSUnits(rootHeight);\n\t\t\t\timgTagWidth = rootWidth;\n\t\t\t\timgTagHeight = rootHeight;\n\t\t\t} else {\n\t\t\t\t// Si no tomamos el del field (root o source) que es obligatorio.\n\t\t\t\tconst fieldWidth = field.width || 1;\n\t\t\t\tconst fieldHeight = field.height || 1;\n\t\t\t\tRATIO = fieldWidth / fieldHeight;\n\t\t\t\timgTagWidth = `${field.width}px`;\n\t\t\t\timgTagHeight = `${field.height}px`;\n\t\t\t}\n\t\t}\n\n\t\t// NO WIDTH - NO HEIGHT - YES IMAGEFIELD\n\t\tif (!source.width && !source.height && source.image) {\n\t\t\tconst sourceImageWidth = source.image.width || 1;\n\t\t\tconst sourceImageHeight = source.image.height || 1;\n\t\t\tRATIO = sourceImageWidth / sourceImageHeight;\n\t\t\timgTagWidth = `${source.image.width}px`;\n\t\t\timgTagHeight = `${source.image.height}px`;\n\t\t}\n\n\t\t// jpgSource es un Array<string> que calcula el SRCSET\n\t\tconst jpgSource = widths?.map((widthValue) => {\n\t\t\treturn (\n\t\t\t\tgetGriddoDamURIWithParams({\n\t\t\t\t\tdamId: damId,\n\t\t\t\t\timageConfig: imageConfig,\n\t\t\t\t\twidth: widthValue,\n\t\t\t\t\theight: `${Math.round(removeCSSUnits(widthValue) / RATIO)}px`,\n\t\t\t\t}) + ` ${removeUnit(widthValue)}w`\n\t\t\t);\n\t\t});\n\n\t\t// sourcesRawData\n\t\treturn {\n\t\t\ttype: MIME_TYPES.jpeg,\n\t\t\tsrcSet: jpgSource,\n\t\t\tsizes: source.sizes || rootSizes,\n\t\t\tmedia: source.media,\n\t\t\twidth: imgTagWidth,\n\t\t\theight: imgTagHeight,\n\t\t\tsrc: getGriddoDamURIWithParams({\n\t\t\t\tdamId: damId,\n\t\t\t\timageConfig: imageConfig,\n\t\t\t\twidth: imgTagWidth || source.width || rootWidth,\n\t\t\t\theight: imgTagHeight || source.height || rootHeight,\n\t\t\t}),\n\t\t};\n\t});\n\n\treturn {\n\t\tjpeg: sourcesRawData,\n\t\twebp: JSON.parse(\n\t\t\tJSON.stringify(sourcesRawData).replaceAll(\"/jpeg\", \"/webp\"),\n\t\t) as typeof sourcesRawData,\n\t\tavif: JSON.parse(\n\t\t\tJSON.stringify(sourcesRawData).replaceAll(\"/jpeg\", \"/avif\"),\n\t\t) as typeof sourcesRawData,\n\t};\n}\n\nexport interface GenerateImageChunkPropsExperimental {\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tformat: ImageFormats;\n}\n\nexport interface UseGriddoImagePropsExperimental\n\textends Omit<ImageConfigExperimental, \"formats\"> {\n\turl?: string;\n}\n\nexport interface ImageConfigExperimental {\n\tblurCSSTransition?: string;\n\tblurSize?: string;\n\tcrop?: ImageCropType;\n\tdecoding?: ImageDecoding;\n\tdomain?: string;\n\tformat?: ImageFormats;\n\tformats?: Array<ImageFormats>;\n\theight?: string;\n\tloading?: ImageLoading;\n\tposition?: ImagePosition;\n\tquality?: number;\n\ttransforms?: ImageTransform;\n\twidth?: string;\n\tsizes?: string;\n\twidths?: Array<string>;\n\tratio?: number;\n}\n\nexport type MIMETypesExperimental =\n\t| \"image/avif\"\n\t| \"image/gif\"\n\t| \"image/jpeg\"\n\t| \"image/png\"\n\t| \"image/svg+xml\"\n\t| \"image/webp\";\n\nexport interface ImageChunkExperimental {\n\ttype: MIMETypesExperimental;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n}\n\nexport interface UseGriddoImageReturnExperimental {\n\ttype?: string;\n\tsrcSet?: Array<string>;\n\tsrcSetURL?: Array<string>;\n\tsrc?: string;\n\tsizes?: string;\n\twebpFallback?: ImageChunkExperimental;\n\tjpg?: ImageChunkExperimental;\n\tjpeg?: ImageChunkExperimental;\n\twebp?: ImageChunkExperimental;\n\tavif?: ImageChunkExperimental;\n\tpng?: ImageChunkExperimental;\n\tgif?: ImageChunkExperimental;\n\tsvg?: ImageChunkExperimental;\n}\n\nfunction removeCSSUnits(value: string) {\n\tconst match = value.match(/^-?\\d*\\.?\\d+/);\n\tif (match) {\n\t\treturn Number.parseFloat(match[0]);\n\t}\n\treturn 0;\n}\n\nexport {\n\tgetGriddoArtDirectionImageSources as getGriddoArtDirectionImage,\n\tremoveCSSUnits,\n};\n","import type { GriddoImagePropsExperimental } from \"./types\";\n\nimport * as React from \"react\";\n\nimport { getGriddoArtDirectionImage, removeCSSUnits } from \"./utils\";\nimport { useGriddoImageExp, useSite } from \"../../hooks\";\n\n/**\n * EXPERIMENTAL - Renders an image from the Griddo CDN using an imageField.\n * Also return a ref with the `<picture>` element.\n *\n * [GriddoImageExp Reference](https://www.notion.so/griddoio/GriddoImageExp-fdb4ea84ac044b1884f242ac854d9c1d?pvs=4)\n */\nconst GriddoImageExp = React.forwardRef<\n\tHTMLPictureElement,\n\tGriddoImagePropsExperimental\n>(\n\t(\n\t\t{\n\t\t\twidth,\n\t\t\theight,\n\t\t\twidths,\n\t\t\tloading,\n\t\t\tdecoding,\n\t\t\tquality,\n\t\t\tcrop,\n\t\t\tformat,\n\t\t\tformats,\n\t\t\tposition,\n\t\t\ttransforms,\n\t\t\tsizes,\n\t\t\tsources,\n\t\t\timage: imageField,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\t// No hay imageField.url ni sources\n\t\tif (!imageField?.url && !sources) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Computed props\n\t\tconst URL = imageField?.url;\n\t\tlet WIDTH = width || (imageField?.width && `${imageField?.width}px`) || \"\";\n\t\tlet HEIGHT =\n\t\t\theight || (imageField?.height && `${imageField?.height}px`) || \"\";\n\t\tconst POSITION = imageField?.position;\n\t\tconst TITLE = imageField?.title;\n\t\tconst ALT = imageField?.alt;\n\n\t\tif (width && height) {\n\t\t\t// si customWidth si customHeight =>\n\t\t\t// width=customWidth, height=customHeight\n\t\t\tWIDTH = width;\n\t\t\tHEIGHT = height;\n\t\t} else if (!width && height && imageField) {\n\t\t\t// no customWidth si customHeight =>\n\t\t\t// width=computedFieldWidth, height=customHeight\n\t\t\tconst imageFieldWidth = imageField.width || 1;\n\t\t\tconst imageFieldHeight = imageField.height || 1;\n\t\t\tWIDTH = `${Math.round(\n\t\t\t\timageFieldWidth / (imageFieldHeight / removeCSSUnits(height)),\n\t\t\t)}px`;\n\t\t\tHEIGHT = height;\n\t\t} else if (!width && !height && imageField) {\n\t\t\t// no customWidth no customHeight =>\n\t\t\t// width=fieldWidth, height=fieldHeight\n\t\t\tWIDTH = `${imageField.width}px`;\n\t\t\tHEIGHT = `${imageField.height}px`;\n\t\t} else if (width && !height && imageField) {\n\t\t\t// si customWidth no customHeight =>\n\t\t\t// width=customWidth, height=computedCustomHeight\n\t\t\tWIDTH = width;\n\t\t\tconst imageFieldWidth = imageField.width || 1;\n\t\t\tconst imageFieldHeight = imageField.height || 1;\n\t\t\tHEIGHT = `${Math.round(\n\t\t\t\timageFieldHeight / (imageFieldWidth / removeCSSUnits(width)),\n\t\t\t)}px`;\n\t\t} else if (width && !height && !imageField) {\n\t\t\t// si customWidth no customHeight si field\n\t\t\t// CLS!!!\n\t\t\tWIDTH = width;\n\t\t\tHEIGHT = \"\";\n\t\t}\n\n\t\t// Get instance internal || default settings\n\t\tconst { griddoDamDefaults } = useSite();\n\n\t\t// IF has sources is an AD image\n\t\tconst IS_ART_DIRECTION_IMAGE = Array.isArray(sources) && sources.length > 0;\n\n\t\t// Fill Defaults with internals\n\t\tconst internalGriddoDamDefaults = {\n\t\t\twidths: [\n\t\t\t\t\"640px\",\n\t\t\t\t\"750px\",\n\t\t\t\t\"828px\",\n\t\t\t\t\"1080px\",\n\t\t\t\t\"1200px\",\n\t\t\t\t\"1920px\",\n\t\t\t\t\"2048px\",\n\t\t\t\t\"3840px\",\n\t\t\t],\n\t\t\t...griddoDamDefaults,\n\t\t};\n\n\t\t// ---------------------------------------------------------------------\n\t\t// IMAGE CONFIGURATION\n\t\t// Configuration from differents places: Image config internal, default\n\t\t// settings, component props.\n\t\t// ---------------------------------------------------------------------\n\t\tconst imageConfig = {\n\t\t\tloading: loading || internalGriddoDamDefaults?.loading,\n\t\t\tdecoding: decoding || internalGriddoDamDefaults?.decoding,\n\t\t\tquality: quality || internalGriddoDamDefaults?.quality,\n\t\t\tcrop: crop || internalGriddoDamDefaults?.crop,\n\t\t\tformats: formats || internalGriddoDamDefaults?.formats,\n\t\t\twidths: widths || internalGriddoDamDefaults?.widths,\n\t\t\tformat: format,\n\t\t\tposition: position || POSITION,\n\t\t\ttransforms: transforms,\n\t\t};\n\n\t\t// ---------------------------------------------------------------------\n\t\t// Single image raw data.\n\t\t// ---------------------------------------------------------------------\n\t\tconst { src, avif, jpeg, gif, webp, svg } = useGriddoImageExp({\n\t\t\tcrop: imageConfig.crop,\n\t\t\tformat: imageConfig.format,\n\t\t\tquality: imageConfig.quality,\n\t\t\tposition: imageConfig.position,\n\t\t\ttransforms: imageConfig.transforms,\n\t\t\twidths: imageConfig.widths,\n\t\t\twidth: WIDTH,\n\t\t\theight: HEIGHT,\n\t\t\turl: URL,\n\t\t});\n\n\t\t// ---------------------------------------------------------------------\n\t\t// ArtDirection image raw data.\n\t\t// No need a useGriddoImagexxxx hook, just a regular function.\n\t\t// ---------------------------------------------------------------------\n\t\tconst artDirectionRawData =\n\t\t\tsources &&\n\t\t\tgetGriddoArtDirectionImage({\n\t\t\t\tgriddoDamDefaults: internalGriddoDamDefaults,\n\t\t\t\tcrop: imageConfig.crop,\n\t\t\t\tquality: imageConfig.quality,\n\t\t\t\tposition: imageConfig.position,\n\t\t\t\ttransforms: imageConfig.transforms,\n\t\t\t\twidths: imageConfig.widths,\n\t\t\t\twidth: WIDTH,\n\t\t\t\theight: HEIGHT,\n\t\t\t\timageField: imageField,\n\t\t\t\tsources: sources,\n\t\t\t\tsizes: sizes,\n\t\t\t});\n\n\t\t// ---------------------------------------------------------------------\n\t\t// SVG\n\t\t// ---------------------------------------------------------------------\n\t\tif (format === \"svg\") {\n\t\t\treturn (\n\t\t\t\t<img\n\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\tdata-imageformat=\"svg\"\n\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\tsrc={svg?.srcSetURL && svg.srcSetURL[0]}\n\t\t\t\t\twidth={WIDTH}\n\t\t\t\t\theight={HEIGHT}\n\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\talt={ALT}\n\t\t\t\t\ttitle={TITLE}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\t// ---------------------------------------------------------------------\n\t\t// GIF\n\t\t// ---------------------------------------------------------------------\n\t\tif (format === \"gif\") {\n\t\t\treturn (\n\t\t\t\t<img\n\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\tdata-imageformat=\"gif\"\n\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\tsrcSet={gif?.srcSet?.join(\",\")}\n\t\t\t\t\tsizes={sizes}\n\t\t\t\t\tsrc={gif?.srcSetURL && gif.srcSetURL[0]}\n\t\t\t\t\twidth={WIDTH}\n\t\t\t\t\theight={HEIGHT}\n\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\talt={ALT}\n\t\t\t\t\ttitle={TITLE}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\t// ---------------------------------------------------------------------\n\t\t// ART DIRECTION\n\t\t// ---------------------------------------------------------------------\n\t\tif (IS_ART_DIRECTION_IMAGE) {\n\t\t\treturn (\n\t\t\t\t<picture data-testid=\"picture\" data-artdirection=\"true\">\n\t\t\t\t\t{/* AVIF */}\n\t\t\t\t\t{imageConfig.formats?.includes(\"avif\") &&\n\t\t\t\t\t\tartDirectionRawData?.avif.map((SOURCE, idx) => (\n\t\t\t\t\t\t\t<source\n\t\t\t\t\t\t\t\tdata-imageformat=\"avif\"\n\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\tsrcSet={SOURCE.srcSet?.join(\",\")}\n\t\t\t\t\t\t\t\tsizes={SOURCE.sizes}\n\t\t\t\t\t\t\t\tmedia={SOURCE.media}\n\t\t\t\t\t\t\t\ttype=\"image/avif\"\n\t\t\t\t\t\t\t\twidth={SOURCE.width}\n\t\t\t\t\t\t\t\theight={SOURCE.height}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t{/* WEBP */}\n\t\t\t\t\t{imageConfig.formats?.includes(\"webp\") &&\n\t\t\t\t\t\tartDirectionRawData?.webp.map((SOURCE, idx) => (\n\t\t\t\t\t\t\t<source\n\t\t\t\t\t\t\t\tdata-imageformat=\"webp\"\n\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\tsrcSet={SOURCE.srcSet?.join(\",\")}\n\t\t\t\t\t\t\t\tsizes={SOURCE.sizes}\n\t\t\t\t\t\t\t\tmedia={SOURCE.media}\n\t\t\t\t\t\t\t\ttype=\"image/webp\"\n\t\t\t\t\t\t\t\twidth={SOURCE.width}\n\t\t\t\t\t\t\t\theight={SOURCE.height}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t{/* JPEG */}\n\t\t\t\t\t{artDirectionRawData?.jpeg.map((SOURCE, idx) => (\n\t\t\t\t\t\t<source\n\t\t\t\t\t\t\tdata-imageformat=\"jpeg\"\n\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\tsrcSet={SOURCE.srcSet?.join(\",\")}\n\t\t\t\t\t\t\tsizes={SOURCE.sizes}\n\t\t\t\t\t\t\tmedia={SOURCE.media}\n\t\t\t\t\t\t\ttype=\"image/jpeg\"\n\t\t\t\t\t\t\twidth={SOURCE.width}\n\t\t\t\t\t\t\theight={SOURCE.height}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\n\t\t\t\t\t{/* jpeg */}\n\t\t\t\t\t<img\n\t\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\t\tsizes={sizes}\n\t\t\t\t\t\tsrcSet={artDirectionRawData?.jpeg[0].srcSet?.join(\",\")}\n\t\t\t\t\t\tsrc={artDirectionRawData?.jpeg[0].src}\n\t\t\t\t\t\twidth={WIDTH || artDirectionRawData?.jpeg[0].width} // Si WIDTH es falsy es que no hay datos en el root de <GriddoImageExp>\n\t\t\t\t\t\theight={HEIGHT || artDirectionRawData?.jpeg[0].height} // Si HEIGHT es falsy es que no hay datos en el root de <GriddoImageExp>\n\t\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\t\talt={ALT}\n\t\t\t\t\t\ttitle={TITLE}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t/>\n\t\t\t\t</picture>\n\t\t\t);\n\t\t}\n\n\t\t// ---------------------------------------------------------------------\n\t\t// SINGLE IMAGE\n\t\t// ---------------------------------------------------------------------\n\t\treturn (\n\t\t\t<picture ref={ref} data-testid=\"picture\">\n\t\t\t\t{/* avif */}\n\t\t\t\t{imageConfig.formats?.includes(\"avif\") && (\n\t\t\t\t\t<source\n\t\t\t\t\t\tsrcSet={avif?.srcSet?.join(\",\")}\n\t\t\t\t\t\tsizes={sizes}\n\t\t\t\t\t\ttype=\"image/avif\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* webp */}\n\t\t\t\t{imageConfig.formats?.includes(\"webp\") && (\n\t\t\t\t\t<source\n\t\t\t\t\t\tsrcSet={webp?.srcSet?.join(\",\")}\n\t\t\t\t\t\tsizes={sizes}\n\t\t\t\t\t\ttype=\"image/webp\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* jpeg */}\n\t\t\t\t<img\n\t\t\t\t\tdata-image=\"griddo\"\n\t\t\t\t\tloading={loading || imageConfig.loading}\n\t\t\t\t\tdecoding={decoding || imageConfig.decoding}\n\t\t\t\t\tsizes={sizes}\n\t\t\t\t\tsrcSet={jpeg?.srcSet?.join(\",\")}\n\t\t\t\t\tsrc={src}\n\t\t\t\t\twidth={WIDTH}\n\t\t\t\t\theight={HEIGHT}\n\t\t\t\t\tfetchpriority={props.fetchpriority}\n\t\t\t\t\talt={ALT}\n\t\t\t\t\ttitle={TITLE}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</picture>\n\t\t);\n\t},\n);\n\nGriddoImageExp.displayName = \"GriddoImageExp\";\n\nexport { GriddoImageExp };\n","import type { FullPath } from \"../../types/core\";\n\nconst ENVS = { pre: \"pre\", pro: \"pro\" } as const;\n\nfunction getEnvironment(fullPath?: FullPath) {\n\treturn fullPath?.domainUrl?.endsWith(`/${fullPath.domain}`)\n\t\t? ENVS.pro\n\t\t: ENVS.pre;\n}\n\nfunction getRel(newTab: boolean, noFollow: boolean) {\n\treturn `${noFollow ? \"nofollow\" : \"\"} ${newTab ? \"noreferrer\" : \"\"}`.trim();\n}\n\nfunction getTarget(newTab: boolean) {\n\treturn newTab ? \"_blank\" : \"_self\";\n}\n\nfunction getRelativeToRootPath({\n\tenv,\n\tfullPath,\n\tto,\n}: {\n\tenv: string;\n\tfullPath: FullPath;\n\tto?: string;\n}) {\n\tif (typeof to !== \"string\") {\n\t\treturn to;\n\t}\n\tif (env === ENVS.pre) {\n\t\tconst cleanDomain = fullPath?.domainUrl\n\t\t\t?.split(fullPath?.domain || \"\")\n\t\t\t.join(\"\");\n\t\treturn to?.split(cleanDomain || \"\")?.join(\"\") || to;\n\t}\n\tif (env === ENVS.pro) {\n\t\treturn to?.split(fullPath?.domainUrl || \"\")?.join(\"\") || to;\n\t}\n\treturn to;\n}\n\nexport { getEnvironment, getRel, getRelativeToRootPath, getTarget };\n","import type { Url } from \"../../types/api-response-fields\";\nimport type {\n\tComponentPropsWithoutRef,\n\tCSSProperties,\n\tMouseEvent,\n\tReactNode,\n\tRef,\n} from \"react\";\n\nimport * as React from \"react\";\n\nimport {\n\tgetEnvironment,\n\tgetRel,\n\tgetRelativeToRootPath,\n\tgetTarget,\n} from \"./utils\";\nimport { usePage, useSite } from \"../../hooks\";\n\n/**\n * Renders a router component from internal/external Griddo link.\n * You may want to use `<GriddoLink>` instead of an `<a>` tag for internal Griddo pages.\n * @see [Documentation](https://www.notion.so/griddoio/GriddoLink-bc4f7cddd1484648b024d4bebe4b74c3)\n *\n * @example\n * <GriddoLink\n * activeClass=\"activeLink\"\n * url={ linkToURL: 'https://...' }\n * />\n */\nfunction GriddoLink({\n\tactiveClassName = \"\",\n\tactiveStyle = {},\n\tstyle = {},\n\tchildren,\n\tgetProps,\n\tpartiallyActive,\n\tstate,\n\turl,\n\ttitle,\n\tclassName = \"\",\n\t...props\n}: GriddoLinkProps) {\n\tconst { renderer, linkComponent: RouterLink } = useSite();\n\tconst { fullPath } = usePage();\n\n\tconst isEditor = renderer === \"editor\";\n\tconst isPreview = renderer === \"preview\";\n\n\tconst href = url?.href;\n\tconst to = url?.linkToURL;\n\tconst newTab = url?.newTab || false;\n\tconst noFollow = url?.noFollow || false;\n\tconst isEmptyLink = !url?.linkToURL && !url?.href;\n\tconst isActiveInEditor = to === `${fullPath?.domainUrl}${fullPath?.compose}`;\n\n\tconst env = getEnvironment(fullPath);\n\tconst rel = getRel(newTab, noFollow);\n\tconst target = getTarget(newTab);\n\n\t// Relative to root path.\n\tconst relativeToRootPath =\n\t\tfullPath &&\n\t\tgetRelativeToRootPath({\n\t\t\tenv,\n\t\t\tfullPath,\n\t\t\tto,\n\t\t});\n\n\tconst routerPath = !isEditor && !isEmptyLink ? relativeToRootPath : \"\";\n\n\t// <a> for an external links.\n\tif (href || newTab) {\n\t\treturn (\n\t\t\t<a\n\t\t\t\tdata-link=\"anchor\"\n\t\t\t\ttarget={isEditor ? \"_blank\" : target}\n\t\t\t\trel={rel}\n\t\t\t\thref={href || to}\n\t\t\t\tclassName={className}\n\t\t\t\ttitle={title}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t);\n\t}\n\n\t// Gatsby <Link> for internal page links.\n\treturn (\n\t\t<RouterLink\n\t\t\trel={rel}\n\t\t\t// In the Griddo editor, links will always open in a new tab.\n\t\t\ttarget={isEditor ? \"_blank\" : target}\n\t\t\tto={routerPath}\n\t\t\t// @ts-expect-error although href is not in the types it is included here so that the links work in AX Page Preview feature\n\t\t\thref={isEditor || isPreview ? href || to : undefined}\n\t\t\tgetProps={getProps}\n\t\t\tpartiallyActive={partiallyActive}\n\t\t\tstate={state}\n\t\t\tactiveStyle={activeStyle}\n\t\t\tactiveClassName={activeClassName}\n\t\t\t// Shows link in the editor.\n\t\t\ttitle={isEditor ? relativeToRootPath : title}\n\t\t\t// Styling in editor, emulating router activeStyle and activeClassName.\n\t\t\tstyle={isActiveInEditor ? activeStyle : style}\n\t\t\tclassName={\n\t\t\t\tisActiveInEditor\n\t\t\t\t\t? `${className} ${activeClassName || \"\"}`.trim()\n\t\t\t\t\t: className\n\t\t\t}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</RouterLink>\n\t);\n}\n\nexport interface HLocation<S = unknown> {\n\tpathname: string;\n\tsearch: string;\n\tstate: S;\n\thash: string;\n\tkey?: string | undefined;\n}\n\nexport type WindowLocation<S = unknown> = Window[\"location\"] & HLocation<S>;\n\nexport interface LinkGetProps {\n\t/** `true` if the location.pathname is exactly the same as the anchor’s href. */\n\tisCurrent: boolean;\n\t/** `true` if the location.pathname is exactly the same as the anchor’s href. */\n\tisPartiallyCurrent: boolean;\n\t/** The fully resolved href of the link. */\n\thref: string;\n\t/** The app’s location. */\n\tlocation: WindowLocation;\n}\n\nexport interface GriddoLinkProps\n\t// Remove href, as it's ignored by the router\n\textends Omit<ComponentPropsWithoutRef<\"a\">, \"href\"> {\n\t/** Griddo Url with the link data */\n\turl?: Url;\n\t/** Calls up to you to get props for the underlying anchor element. Useful for styling the anchor as active. */\n\tgetProps?: ((props: LinkGetProps) => Record<string, never>) | undefined;\n\t/** A class name that will be applied the current item is active. */\n\tactiveClassName?: string;\n\t/** A style object that will be applied when the current item is active. */\n\tactiveStyle?: CSSProperties;\n\t/** Whether partial URLs are considered active (e.g. /blog#hello-world matches <Link to=\"/blog\"> if partiallyActive is true). */\n\tpartiallyActive?: boolean;\n\t/** If `true`, the latest entry on the history stack will be replaced with a new one. Use this when you don’t want the previous page to show up when the user clicks the back button. */\n\treplace?: boolean;\n\t/** Used to pass state data to the linked page.\n\t * The linked page will have a `location` prop containing a nested `state` object structure containing the passed data. */\n\tstate?: Record<string, unknown>;\n\t/** @deprecated If using React >= 16.4, use ref instead. */\n\tinnerRef?: Ref<HTMLAnchorElement> | undefined;\n\t/** If using React >=16.4, Link will forward its ref to you. */\n\tref?: Ref<HTMLAnchorElement> | undefined;\n\t/** onCLick event */\n\tonClick?: (event: MouseEvent<HTMLAnchorElement>) => void;\n\tchildren?: ReactNode;\n}\n\nexport { GriddoLink };\n","import * as React from \"react\";\n\n/**\n * Inject a google structured data with a `script` tag.\n *\n * @example\n * <LdJson data={schemaData} />\n */\nexport function LdJson(props: { data: Record<string, unknown> }) {\n\tconst { data } = props;\n\n\treturn (\n\t\t<script\n\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t__html: `(function(){\n const ldJsonScript = document.createElement('script');\n ldJsonScript.setAttribute('type', 'application/ld+json');\n ldJsonScript.textContent = \\`${JSON.stringify(data)}\\`;\n document.head.appendChild(ldJsonScript);\n})();`,\n\t\t\t}}\n\t\t/>\n\t);\n}\n","import type { Url } from \"../../types/api-response-fields\";\n\nimport * as React from \"react\";\n\nimport { useLink } from \"../../hooks/useLink\";\nimport { usePage } from \"../../hooks/usePage\";\n\nexport interface GetLinkProps {\n\thref?: string;\n\tlinkToURL?: string;\n}\n\n// return an anchor if the link is in the same page.\nfunction parseAnchor(pageUrl: string, linkUrl: string) {\n\tconst hasAnchorId = linkUrl?.startsWith(`${pageUrl}#`);\n\treturn hasAnchorId ? `#${linkUrl.split(\"#\")[1]}` : linkUrl;\n}\n\n// Return { href, to } from a griddo url object field\nfunction getLinks(url?: GetLinkProps) {\n\t// Standar external url\n\tconst href = url?.href;\n\t// linkToURL could be // for internal absolute or / for router links\n\tconst linkToURL = url?.linkToURL;\n\t// linkToURL: \"//cx-web.com/site\" or \"https(s):\"\n\tconst linkToURLHasDoubleSlashOrHttp = linkToURL?.match(/^\\/{2}|^https?:/g);\n\t// linkToURL: \"/future-router-link\n\tconst linkToURL_hasSingleSlash = linkToURL?.match(/^\\/\\w/g);\n\n\tconst result = {\n\t\thref: href ? href : linkToURLHasDoubleSlashOrHttp ? linkToURL : null,\n\t\tto: linkToURL_hasSingleSlash ? linkToURL : null,\n\t};\n\n\treturn result;\n}\n\n/**\n * @deprecated This component will be removed from Griddo in the future.\n */\nfunction Link(props: LinkProps) {\n\tconst { url, linkProp = \"to\", children, ...rest } = props;\n\n\t// Get page info from provider\n\tconst { fullUrl } = usePage();\n\t// Get the router component from the provider\n\tconst RouterLink = useLink() || \"a\";\n\t// Get href for the normal links and to for the router links\n\tconst { href, to } = getLinks(url);\n\n\tconst newTab = url?.newTab;\n\tconst noFollow = url?.noFollow;\n\n\tconst linkProps = {\n\t\t...rest,\n\t\t...(newTab && { target: \"_blank\" }),\n\t\trel: `${noFollow ? \"nofollow\" : \"\"} ${newTab ? \"noreferrer\" : \"\"}`.trim(),\n\t\t...(fullUrl && href && { href: parseAnchor(fullUrl, href) }),\n\t\t...(fullUrl && to && { [linkProp]: parseAnchor(fullUrl, to) }),\n\t};\n\n\treturn to ? (\n\t\t<>\n\t\t\t<p>Router</p>\n\t\t\t<RouterLink {...linkProps}>{children}</RouterLink>\n\t\t</>\n\t) : (\n\t\tReact.createElement(\"a\", linkProps, children)\n\t);\n}\n\ninterface LinkProps {\n\turl: Url;\n\tlinkProp?: string;\n\tchildren: JSX.Element;\n\t[key: string]: unknown;\n}\n\nexport { Link };\n","import type { FC } from \"react\";\n\nimport * as React from \"react\";\n\nimport { ModulePreviewProvider } from \"../../contexts\";\nimport { Component, type ComponentProps } from \"../Component\";\n\nexport interface ModulePreviewProps {\n\tcomponent: string;\n\tcontent: Record<string, unknown>;\n\tlibrary: {\n\t\tcomponents: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>;\n\t};\n}\n\nfunction ModulePreview(props: ModulePreviewProps) {\n\tconst {\n\t\tcomponent,\n\t\tcontent,\n\t\tlibrary: { components },\n\t} = props;\n\n\tif (!content) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ModulePreviewProvider languageId={content.language as number}>\n\t\t\t<Component\n\t\t\t\tlibComponents={components}\n\t\t\t\tcomponent={component}\n\t\t\t\t{...content}\n\t\t\t/>\n\t\t</ModulePreviewProvider>\n\t);\n}\n\nexport { ModulePreview };\n","export interface RecursiveSearchProps {\n\tobj?: Record<string, string>;\n\tsearchKey?: string;\n\tresultsBuffer?: Array<string>;\n\tunique?: boolean;\n}\n\n/**\n * recursiveSearch\n * Devuelve una lista con los valores de una prop dentro de un objeto\n * La búsqueda es recursiva en todo el objeto\n * @param config Un objeto con los parámetros de la función\n * @param config.obj El objeto donde buscar\n * @param config.searchKey El nombre de la propiedad a buscar\n * @param config.results El array de resultados, se van añadiendo recursivamente los resultados.\n * @param config.unique Si es true elimina los resultados repetidos\n * @example\n * Obtiene una lista con los valores de la prop \"a\"\n * recursiveSearch({ obj: {a: 1, b: {a: \"foo\"}}, \"a\"})\n * -> [1, \"foo\"]\n *\n * @return Un array con los valores de la propiedad `searchValue`\n */\nfunction recursiveSearch({\n\tobj,\n\tsearchKey,\n\tresultsBuffer = [],\n\tunique = true,\n}: RecursiveSearchProps = {}) {\n\tif (!obj) return [];\n\n\tconst results = resultsBuffer;\n\n\tfor (const key of Object.keys(obj)) {\n\t\tconst value = obj[key];\n\t\tif (key === searchKey && typeof value !== \"object\") {\n\t\t\tresults.push(value);\n\t\t} else if (typeof value === \"object\") {\n\t\t\tvalue &&\n\t\t\t\trecursiveSearch({ obj: value, searchKey, resultsBuffer: results });\n\t\t}\n\t}\n\n\treturn unique ? [...new Set(results)] : results;\n}\n\nexport { recursiveSearch };\n","import type { Page } from \"../../types/core\";\nimport type { FC } from \"react\";\n\nimport * as React from \"react\";\n\nimport { NavigationProvider, PageProvider } from \"../../contexts\";\nimport { Component, type ComponentProps } from \"../Component\";\nimport { recursiveSearch } from \"./utils\";\n\n/**\n * <PageComponent>\n */\nfunction PageComponent(props: PageProps) {\n\tconst {\n\t\tapiUrl,\n\t\tcontent,\n\t\tfooter,\n\t\theader,\n\t\tlanguageId,\n\t\tlibrary: {\n\t\t\ttemplates: UITemplates,\n\t\t\tcomponents: UIComponents,\n\t\t\tformsTemplates: UIFormsTemplates,\n\t\t},\n\t\tpageLanguages,\n\t\tsiteMetadata,\n\t} = props;\n\n\tconst isFormTemplate = content.component === \"FormPage\";\n\n\tconst currentTemplate = content.template.templateType;\n\n\tconst Template = isFormTemplate\n\t\t? UIFormsTemplates[currentTemplate]\n\t\t: UITemplates[currentTemplate];\n\n\t// Components (component and modules) list used by the page.\n\tconst componentList = recursiveSearch({\n\t\tobj: content.template,\n\t\tsearchKey: \"component\",\n\t});\n\n\t// Array of section names\n\tconst sectionsName = Object.keys(content?.template).filter(\n\t\t(key) => content?.template[key] && content.template[key].component,\n\t);\n\n\t// Object with modules by section\n\t// {\n\t// section01: [ 'Mod2', 'Mod4' ],\n\t// section02: [ 'Mod7', 'Mod9' ],\n\t// }\n\tconst sectionModules = Object.fromEntries(\n\t\tsectionsName?.map((key) => {\n\t\t\tconst modules: Array<{ component: string }> =\n\t\t\t\tcontent?.template[key].modules || [];\n\t\t\tconst moduleNames = modules.map((module) => module?.component);\n\n\t\t\treturn [key, moduleNames];\n\t\t}),\n\t);\n\n\treturn (\n\t\t<PageProvider\n\t\t\tactiveSectionBase={content.template.activeSectionBase}\n\t\t\tactiveSectionSlug={content.template.activeSectionSlug || \"/\"}\n\t\t\tapiUrl={apiUrl}\n\t\t\tbreadcrumb={content.breadcrumb}\n\t\t\tcanonicalURL={content.canonicalURL}\n\t\t\tcomponentList={componentList}\n\t\t\tdimensions={content.dimensions?.values}\n\t\t\tfooter={footer}\n\t\t\tfooterTheme={content.footerTheme}\n\t\t\tfullPath={content.fullPath}\n\t\t\tfullUrl={content.fullUrl}\n\t\t\theader={header}\n\t\t\theaderTheme={content.headerTheme}\n\t\t\tid={content.id}\n\t\t\tisHome={content.isHome}\n\t\t\tisIndexed={content.isIndexed}\n\t\t\tlanguageId={languageId}\n\t\t\tmetaDescription={content.metaDescription}\n\t\t\tmetasAdvanced={content.metasAdvanced}\n\t\t\tmetaTitle={content.metaTitle}\n\t\t\tmodified={content.modified}\n\t\t\torigin={content.origin}\n\t\t\tpageLanguages={pageLanguages}\n\t\t\tpublished={content.published}\n\t\t\tsectionModules={sectionModules}\n\t\t\tsite={content.site}\n\t\t\tsiteMetadata={siteMetadata}\n\t\t\tsiteSlug={content.siteSlug}\n\t\t\tsocialDescription={content.socialDescription}\n\t\t\tsocialImage={content.socialImage}\n\t\t\tsocialTitle={content.socialTitle}\n\t\t\tstructuredData={content.structuredData}\n\t\t\tstructuredDataContent={content.structuredDataContent}\n\t\t\ttemplate={content.template}\n\t\t\ttheme={content.theme}\n\t\t\ttitle={content.title}\n\t\t\tmetaKeywords={content.metaKeywords}\n\t\t\tfollow={content.follow}\n\t\t>\n\t\t\t<>\n\t\t\t\t{/* Header Sections */}\n\t\t\t\t{!!header && (\n\t\t\t\t\t<NavigationProvider>\n\t\t\t\t\t\t<Component libComponents={UIComponents} {...header} />\n\t\t\t\t\t</NavigationProvider>\n\t\t\t\t)}\n\n\t\t\t\t{/* Template Modules/Components */}\n\t\t\t\t<Template {...content.template} />\n\n\t\t\t\t{/* Footer Sections */}\n\t\t\t\t{!!footer && (\n\t\t\t\t\t<NavigationProvider>\n\t\t\t\t\t\t<Component libComponents={UIComponents} {...footer} />\n\t\t\t\t\t</NavigationProvider>\n\t\t\t\t)}\n\t\t\t</>\n\t\t</PageProvider>\n\t);\n}\n\nexport interface PageProps\n\textends Pick<\n\t\tPage,\n\t\t| \"apiUrl\"\n\t\t| \"footer\"\n\t\t| \"header\"\n\t\t| \"languageId\"\n\t\t| \"pageLanguages\"\n\t\t| \"siteMetadata\"\n\t> {\n\tcontent: Pick<\n\t\tPage,\n\t\t| \"component\"\n\t\t| \"breadcrumb\"\n\t\t| \"canonicalURL\"\n\t\t| \"dimensions\"\n\t\t| \"footerTheme\"\n\t\t| \"fullPath\"\n\t\t| \"fullUrl\"\n\t\t| \"headerTheme\"\n\t\t| \"id\"\n\t\t| \"isHome\"\n\t\t| \"isIndexed\"\n\t\t| \"metaDescription\"\n\t\t| \"metasAdvanced\"\n\t\t| \"metaTitle\"\n\t\t| \"modified\"\n\t\t| \"origin\"\n\t\t| \"published\"\n\t\t| \"site\"\n\t\t| \"siteSlug\"\n\t\t| \"socialDescription\"\n\t\t| \"socialImage\"\n\t\t| \"socialTitle\"\n\t\t| \"structuredData\"\n\t\t| \"structuredDataContent\"\n\t\t| \"template\"\n\t\t| \"theme\"\n\t\t| \"title\"\n\t\t| \"metaKeywords\"\n\t\t| \"follow\"\n\t>;\n\tlibrary: {\n\t\tcomponents: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>;\n\t\ttemplates: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>;\n\t\tformsTemplates: Record<string, FC<Omit<ComponentProps, \"libComponents\">>>;\n\t};\n\tchildren?: JSX.Element;\n}\n\nexport { PageComponent as Page };\n","import * as React from \"react\";\n\nimport { ModulePreview, type ModulePreviewProps } from \"../ModulePreview\";\nimport { Page, type PageProps } from \"../Page\";\n\n/**\n * <Preview>\n */\nfunction Preview(props: PreviewProps) {\n\tconst { isPage = false, ...rest } = props;\n\n\tconst pageProps = rest as PageProps;\n\tconst moduleProps = rest as ModulePreviewProps;\n\n\treturn isPage ? <Page {...pageProps} /> : <ModulePreview {...moduleProps} />;\n}\n\nexport type PreviewProps = { isPage?: boolean } & (\n\t| ModulePreviewProps\n\t| PageProps\n);\n\nexport { Preview };\n"],"names":["__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","apply","useGlobalTheme","themeFile","global","useTheme","props","themes","push","theme","selectedTheme","find","id","SuppressedError","getPlainPrimitives","themePrimitives","allPrimitives","getPrimitives","primitives","primitive","cssVar","values","Array","isArray","filterColorPrimitives","map","assign","primitiveValue","matches","matchAll","match","replace","filter","CSS","supports","getColorPrimitives","subthemes","subtheme","plainThemePrimitives","common","light","dark","filterPrimitivesByType","type","includes","getPrimitivesByType","hasPrimitives","filterThemePrimitives","selectedSubtheme","color","useThemeColors","themesWithColors","filterThemePrimitivesByColor","useThemePrimitives","filterThemePrimitivesByType","useThemeFont","useFetch","url","options","method","body","data","setData","React","useState","isLoading","setIsLoading","isError","setIsError","isFirstFetch","setIsFirstFetch","msg","setMsg","useEffect","fetch","JSON","stringify","headers","response","status","code","statusText","Error","json","finally","catch","CONTEXT_KEYS","getOrCreateGlobalContext","key","defaultValue","globalObj","globalThis","createContext","I18nContext","translations","I18nProvider","children","createElement","Provider","linkComponent","rest","navigate","SiteContext","SiteProvider","PageContext","PageProvider","siteContextValue","useContext","usePage","console","warn","pageLanguagesWithLivePages","_a","pageLanguages","language","isLive","pageLocale","_b","langItem","languageId","locale","ISOLocale","FormContext","FormProvider","isForm","ModulePreviewContext","ModulePreviewProvider","NavigationContext","NavigationProvider","isNavigation","SessionContext","SessionProvider","useSessionProvider","config","setConfig","state","useSite","useAiAnswers","publicApiUrl","setBody","query","lang","site","templates","priorities","minSimilarity","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","REGEX","validate","uuid","test","byteToHex","toString","substr","arr","offset","arguments","undefined","toLowerCase","TypeError","v35","name","version","hashfunc","generateUUID","namespace","buf","str","unescape","encodeURIComponent","bytes","charCodeAt","stringToBytes","v","parseInt","slice","parse","set","err","DNS","URL","getOutputLength","inputLength8","safeAdd","x","y","lsw","md5cmn","q","a","b","num","cnt","md5ff","c","d","md5gg","md5hh","md5ii","v4","rnds","random","f","z","ROTL","n","useAIReferenceField","pageId","setResponse","prompt","sites","useStructuredData","fields","limit","area","window","storedId","localStorage","getItem","uuidv4","setItem","error","res","ok","useAiSearch","page","itemsPerPage","input","output","length32","hexTab","hex","charAt","md5ToHexEncodedArray","len","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","bytesToWords","K","H","l","N","Math","ceil","M","_i","j","pow","floor","_i2","W","_t","_t2","T","IS_BROWSER","isLocalStorageAvailable","removeItem","log","getToken","localStorageData","appInfo","token","Authorization","getSiteID","currentSiteInfo","getLang","Number","concatParams","baseUrl","params","paramsUrl","keys","join","split","Boolean","getOptions","langID","mode","cache","redirect","referrerPolicy","isArrayOfNumbers","every","item","isSimpleFilter","someFilter","isFilterWithSource","isFilterFromEndpoint","parseSimpleFilter","filters","parseFilterFromEndpoint","keyName","items","parseFilter","parseRelated","filtersReduced","reduce","acc","filterItem","source","parseFilterWithSource","isOperator","operator","parseRelations","relations","useReferenceFieldData","order","quantity","sources","fixed","allLanguages","preferenceLanguage","fullRelations","apiUrl","isAX","siteID","fetchOptions","useContentType","queriedData","useContentTypeNavigation","previous","canonicalURL","structuredDataContent","referenceId","useDataFilters","siteId","renderer","setUrl","queryUrl","cached","refField","groupingCategories","customCached","Date","valueOf","structuredData","related","filterOperator","globalOperator","_c","removeUnit","unit","_filterFalsePropValues","object","fromEntries","entries","tuple","getGriddoDamURIWithParams","damId","imageConfig","object1","object2","crop","quality","format","queryParamsURL","width","height","position","transforms","protocol","slug","sanitizeUrl","domain","getDomainFromDamUrl","damUrl","getDamIdFromDamUrl","MIME_TYPES","jpg","jpeg","gif","svg","png","avif","webp","internalDefaults","loading","decoding","blurSize","blurCSSTransition","formats","useGriddoImage","siteContext","griddoDamDefaults","responsive","srcSet","trim","sizes","nullBP","entry","breakpoint","rearrangeResponsiveArray","reverse","idx","srcSetURL","smallForSrc","src","webpFallback","generateImageChunk","useGriddoImageExp","RATIO","removeCSSUnits","widths","griddoDamURL","round","withWProp","parseFloat","useI18n","i18nContext","siteLangs","pageLanguageId","moduleLanguageId","checkLangId","checkLocale","currentLocale","getLocaleFromSiteLangs","localeTranslations","getTranslation","defaultString","getNestedTranslation","mainObject","prop","obj","getNestedPropValue","uploadFolder","fallback404ImageId","gravity","backgroundLazy","useImage","publicId","cloudinaryCloudName","cloudinaryDefaults","root","fallbackSrcImage","getURIWithParams","cloudinaryRearrangeResponsiveArray","aspectRatio","ar","useIsClient","isClient","setClient","useIsFirstRender","isFirst","useRef","current","useLink","useList","exclude","search","includePending","searchWithNoSpaces","isAuto","isManual","contentType","parseSources","get","maxItems","extra","totalItems","useListWithDefaultStaticPage","setQuery","staticQuery","totalPages","filterKeys","content","griddoAlertRegister","this","description","fullData","instantNotification","level","INVALID_DATE","formatLocaleDate","inputDate","dateStyle","Intl","DateTimeFormat","supportedLocalesOf","isDateStyleSupported","date","dateTime","isNaN","getTime","toLocaleDateString","replaceAll","useLocaleDate","useNavigation","usePageRelatedContent","template","setQueryUrl","useMemo","templateType","urlWithParams","createSetQuery","useReceiveInterests","areas","cachedScriptStatuses","useScript","setStatus","shouldPreventLoad","cachedScriptStatus","script","node","document","querySelector","getAttribute","getScriptNode","scriptNode","async","setAttribute","appendChild","setAttributeFromEvent","event","scriptStatus","addEventListener","setStateFromEvent","newStatus","removeEventListener","removeOnUnmount","remove","useSendInterests","interests","navigator","userAgent","useSession","useSSR","isDOM","documentElement","isBrowser","isServer","module","require","k","Symbol","for","m","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","ref","__self","__source","g","h","defaultProps","$$typeof","_owner","exports","react15_6","default","_react","_jsxRuntime","_excluded","_extends","target","CUSTOM_PROPERTY_NAME","AspectRatio","Component","constructor","super","setNode","componentDidUpdate","style","getPropertyValue","setProperty","ratio","render","_this$props","className","restProps","excluded","_objectWithoutPropertiesLoose","newStyle","jsx","reactLatest","DEFAULT_CLASS_NAME","forwardRef","_interopRequireDefault","_reactLatest","__esModule","styleInject","css","insertAt","head","getElementsByTagName","firstChild","insertBefore","styleSheet","cssText","createTextNode","CloudinaryImage","alt","objectFit","customSrc","commonImageProps","srcProps","publicIdProps","imgProps","Image","maxWidth","alignSelf","CloudinaryBackgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","overlayColor","overlayOpacity","overlayTransition","customLazyClassName","lazy","SRCSET","BREAKPOINTS","CLASSNAME_HASHED","substring","LAZY_CLASSNAME","MEDIA_QUERIES","from","fill","_","fillIntArray","Fragment","dangerouslySetInnerHTML","__html","SvgDelete","role","SvgDuplicate","Wrapper","componentRef","wrapperHeight","setWrapperHeight","selectEditorID","selectHoverEditorID","moduleActions","selectedEditorID","editorID","component","isSelectionAllowed","isNavigationModule","scrollHeight","isSelected","scrollToComponent","cb","useCallback","forEach","isIntersecting","observer","IntersectionObserver","rootMargin","threshold","observe","unobserve","handleClick","pos","top","scrollIntoView","behavior","block","offsetTop","marginTop","onClick","stopPropagation","duplicateModuleAction","deleteModuleAction","FormWrapper","libComponents","parentEditorID","LibComponent","getComponent","isNavigationInnerModule","componentWrapper","ComponentWrapper","components","componentName","LAZY_CLASS_NAME","GriddoBackgroundImage","veilOpacity","veilColor","veilTransitionTime","veilTransitionEasing","lazyOffset","thisRef","classList","disconnect","backgroundImageResponsive","customProperty","resimages","allImages","displayName","GriddoImage","GifImage","fetchpriority","SvgImage","Picture","_d","_e","GriddoImageExp","image","imageField","WIDTH","HEIGHT","POSITION","TITLE","title","ALT","imageFieldWidth","imageFieldHeight","IS_ART_DIRECTION_IMAGE","internalGriddoDamDefaults","artDirectionRawData","rootSizes","rootTransforms","rootQuality","rootWidth","rootHeight","rootPosition","rootCrop","rootImageField","sourcesRawData","imgTagWidth","imgTagHeight","field","fieldWidth","fieldHeight","sourceImageWidth","sourceImageHeight","jpgSource","widthValue","media","getGriddoArtDirectionImage","SOURCE","_f","_g","_h","_j","_k","ENVS","GriddoLink","activeClassName","activeStyle","getProps","partiallyActive","RouterLink","fullPath","isEditor","isPreview","href","to","linkToURL","newTab","noFollow","isEmptyLink","isActiveInEditor","domainUrl","compose","env","endsWith","getEnvironment","rel","getRel","getTarget","relativeToRootPath","cleanDomain","getRelativeToRootPath","routerPath","LdJson","parseAnchor","pageUrl","linkUrl","startsWith","Link","linkProp","fullUrl","linkToURLHasDoubleSlashOrHttp","linkToURL_hasSingleSlash","getLinks","linkProps","ModulePreview","library","recursiveSearch","searchKey","resultsBuffer","unique","results","Set","PageComponent","footer","header","UITemplates","UIComponents","formsTemplates","UIFormsTemplates","siteMetadata","isFormTemplate","currentTemplate","Template","componentList","sectionsName","sectionModules","modules","activeSectionBase","activeSectionSlug","breadcrumb","dimensions","footerTheme","headerTheme","isHome","isIndexed","metaDescription","metasAdvanced","metaTitle","modified","origin","published","siteSlug","socialDescription","socialImage","socialTitle","metaKeywords","follow","Preview","isPage","pageProps","moduleProps","Page"],"mappings":"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","x_google_ignoreList":[0,19,20,21,22,23,24,25,26,27,30,31,59,60,61,62,63,64]}