@fluid-app/fluid-cli-portal 0.1.113 → 0.1.114
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/{backend-dev-plugin-CCIGu1Ly.mjs → backend-dev-plugin-B7rf1lmf.mjs} +2 -2
- package/dist/{backend-dev-plugin-CCIGu1Ly.mjs.map → backend-dev-plugin-B7rf1lmf.mjs.map} +1 -1
- package/dist/index.mjs +6 -6
- package/dist/{portal-dev-plugin-CzQGHgMv.mjs → portal-dev-plugin-uSNQdb4E.mjs} +2 -2
- package/dist/{portal-dev-plugin-CzQGHgMv.mjs.map → portal-dev-plugin-uSNQdb4E.mjs.map} +1 -1
- package/dist/{portal-widget-dev-plugin-CpThuSXZ.mjs → portal-widget-dev-plugin-rJTEEYgh.mjs} +2 -2
- package/dist/{portal-widget-dev-plugin-CpThuSXZ.mjs.map → portal-widget-dev-plugin-rJTEEYgh.mjs.map} +1 -1
- package/dist/{pull-B-vcf1uV.mjs → pull-C9a0z-7O.mjs} +10 -3
- package/dist/pull-C9a0z-7O.mjs.map +1 -0
- package/dist/vite-plugin.mjs +3 -3
- package/package.json +3 -3
- package/dist/pull-B-vcf1uV.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-C9a0z-7O.mjs","names":["getAuthToken","getAuthToken","createClient","createClient","sdk.fluidOsV0ListWidgetPackages","sdk.fluidOsV0ListFluidOsdefinitions","sdk.fluidOsV0ListFluidOsscreens","sdk.fluidOsV0GetFluidOsscreen","sdk.fluidOsV0CreateFluidOsscreen","sdk.fluidOsV0UpdateFluidOsscreen","sdk.fluidOsV0DeleteFluidOsscreen","sdk.fluidOsV0ListFluidOsthemes","sdk.fluidOsV0CreateFluidOstheme","sdk.fluidOsV0UpdateFluidOstheme","sdk.fluidOsV0DeleteFluidOstheme","sdk.fluidOsV0ListFluidOsnavigations","sdk.fluidOsV0CreateFluidOsnavigation","sdk.fluidOsV0UpdateFluidOsnavigation","sdk.fluidOsV0DeleteFluidOsnavigation","sdk.fluidOsV0ListFluidOsnavigationItems","sdk.fluidOsV0CreateFluidOsnavigationItem","sdk.fluidOsV0UpdateFluidOsnavigationItem","sdk.fluidOsV0DeleteFluidOsnavigationItem","sdk.fluidOsV0ListFluidOsprofiles","sdk.fluidOsV0CreateFluidOsprofile","sdk.fluidOsV0UpdateFluidOsprofile","sdk.fluidOsV0DeleteFluidOsprofile","sdk.fluidOsV0ListFluidOsversions","sdk.fluidOsV0CreateFluidOsversion","sdk.fluidOsV0UpdateFluidOsversion","Ajv2020"],"sources":["../src/commands/pull-definition.ts","../../../platform/api-client-core/src/api-error-shape.ts","../../../platform/api-client-core/src/fetch-client.ts","../../../platform/api-client-core/src/hey-api-error-policy.ts","../../../api-clients/hey-api-fetch-runtime/src/generated/core/bodySerializer.gen.ts","../../../api-clients/hey-api-fetch-runtime/src/generated/core/params.gen.ts","../../../api-clients/hey-api-fetch-runtime/src/generated/core/serverSentEvents.gen.ts","../../../api-clients/hey-api-fetch-runtime/src/generated/core/pathSerializer.gen.ts","../../../api-clients/hey-api-fetch-runtime/src/generated/core/utils.gen.ts","../../../api-clients/hey-api-fetch-runtime/src/generated/core/auth.gen.ts","../../../api-clients/hey-api-fetch-runtime/src/generated/client/utils.gen.ts","../../../api-clients/hey-api-fetch-runtime/src/generated/client/client.gen.ts","../../../api-clients/fluidos/src/hey-api-client.ts","../../../api-clients/fluidos/src/json.ts","../src/api/fluidos.ts","../src/utils/atomic-write.ts","../src/utils/mappings.ts","../src/utils/snapshot.ts","../../../../node_modules/.pnpm/colorjs.io@0.5.2/node_modules/colorjs.io/dist/color.js","../../../platform/theme-engine/src/types.ts","../../../platform/theme-engine/src/color-engine.ts","../../../platform/ui-primitives/src/tokens/manifest.ts","../../../platform/theme-engine/src/css-generator.ts","../../../platform/theme-engine/src/defaults.ts","../../../platform/theme-engine/src/serialisation.ts","../../../platform/theme-engine/src/transforms.ts","../src/utils/transform.ts","../../../portal/definition-schema/src/constants.ts","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/code.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/scope.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/util.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/names.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/errors.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/boolSchema.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/rules.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/applicability.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/dataType.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/defaults.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/code.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/keyword.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/subschema.js","../../../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../../../../node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/resolve.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/validate/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/validation_error.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/ref_error.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/compile/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/data.json","../../../../node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js","../../../../node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js","../../../../node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/uri.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/core.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/id.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/ref.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitNumber.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/multipleOf.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/ucs2length.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitLength.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/pattern.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitProperties.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/required.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitItems.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/runtime/equal.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/const.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/enum.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items2020.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/contains.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/dependencies.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/properties.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/not.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/anyOf.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/oneOf.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/allOf.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/if.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/thenElse.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitContains.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/next.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/unevaluated/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/format.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/metadata.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/draft2020.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/types.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/index.js","../../../../node_modules/.pnpm/ajv@8.17.1/node_modules/ajv/dist/2020.js","../../../portal/definition-schema/src/generated/schemas.ts","../../../portal/definition-schema/src/validate.ts","../src/utils/portal-schema.ts","../src/commands/pull.ts"],"sourcesContent":["import chalk from \"chalk\";\n\n/** Minimal shape both the id and name lookups need. */\nexport interface DefinitionChoice {\n readonly id: number;\n readonly name?: string | null;\n}\n\n/** Pick a definition by explicit id, else by name.\n *\n * Mirrors clone.ts's resolver of the same name, and for the same\n * reason: definition NAMES REPEAT. clone's `--id` help says so\n * outright (\"avoids ambiguity when names repeat\") and clone.test.ts\n * pins it. pull only ever looked up by name — first match wins — so a\n * caller holding an unambiguous id had no way to use it, and Mist\n * called pull by name immediately after cloning by id.\n *\n * Returns null when neither is supplied, so the caller falls through\n * to the interactive selector. */\nexport function resolveDefinition(\n definitions: readonly DefinitionChoice[],\n appName?: string,\n rawDefinitionId?: string,\n): DefinitionChoice | null {\n if (rawDefinitionId !== undefined) {\n if (!/^[1-9]\\d*$/.test(rawDefinitionId)) {\n throw new Error(\"--id must be a positive integer\");\n }\n const definitionId = Number.parseInt(rawDefinitionId, 10);\n const match = definitions.find((d) => d.id === definitionId);\n if (!match) {\n throw new Error(`No definition found with id ${definitionId}.`);\n }\n return match;\n }\n if (appName) {\n const match = definitions.find(\n (d) => d.name?.toLowerCase() === appName.toLowerCase(),\n );\n if (!match) {\n const availableNames = definitions\n .map((d) => chalk.cyan(d.name ?? \"(unnamed)\"))\n .join(\", \");\n throw new Error(\n `No definition found matching \"${appName}\". Available: ${availableNames}`,\n );\n }\n return match;\n }\n return null;\n}\n","/**\n * The shape contract for `ApiError.body` and `ApiError.data`.\n *\n * One decision, in one place: `body` is the response envelope exactly as the\n * server sent it, `data` is the unwrapped field-error bag. Rationale and the\n * alternatives considered live in `docs/api-error-data-contract.md`.\n */\n\n/**\n * The parsed JSON error response body, exactly as the server sent it.\n *\n * This is the envelope: `errors`, `error_message`, `error`, `status`, `meta`\n * and `request_id` all live here. `null` when the response carried no JSON\n * object — HTML, an empty body, a JSON primitive, or unparseable text.\n */\nexport type ApiErrorBody = Record<string, unknown> | null;\n\n/**\n * The field-level error bag: the envelope's `errors` value when the body has\n * one, otherwise the body itself.\n *\n * `errors` is declared `never` because unwrapping already consumed it — read\n * the envelope from `ApiError.body`, not from here. That makes the historical\n * mistake (`error.data.errors.some_field`, which silently resolved to\n * `undefined`) a typecheck failure instead of a degraded error message.\n */\nexport type ApiErrorFieldErrors = Record<string, unknown> & {\n errors?: never;\n};\n\n/**\n * Every value `ApiError.data` can hold. Fluid endpoints return an object bag,\n * but `errors` is occasionally an array or a string, and non-JSON responses\n * carry no data at all.\n */\nexport type ApiErrorData =\n | ApiErrorFieldErrors\n | readonly unknown[]\n | string\n | number\n | boolean\n | null;\n\n/**\n * Narrows a parsed JSON error payload to the envelope contract. Arrays and\n * primitives are not envelopes, so they resolve to `null` — their content is\n * still reachable through `ApiError.data`.\n */\nexport function toApiErrorBody(value: unknown): ApiErrorBody {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n\n return value as Record<string, unknown>;\n}\n\n/**\n * The single unwrap rule, shared by every producer of `ApiError`.\n *\n * `??` rather than `||` so an explicitly empty `errors` (`\"\"`, `0`, `false`)\n * is preserved instead of silently falling back to the whole envelope.\n */\nexport function toApiErrorData(body: ApiErrorBody): ApiErrorData {\n if (!body) {\n return null;\n }\n\n return (body.errors ?? body) as ApiErrorData;\n}\n","/**\n * Minimal, framework-agnostic fetch client for Fluid APIs\n * Compatible with fluid-admin patterns but usable standalone\n */\n\nimport type { ApiErrorBody, ApiErrorData } from \"./api-error-shape\";\nimport { toApiErrorBody, toApiErrorData } from \"./api-error-shape\";\n\nexport interface FetchClientConfig {\n /**\n * Base URL for all requests (e.g., \"https://api.fluid.app/api\")\n */\n baseUrl: string;\n\n /**\n * Optional function to get auth token\n * Return null/undefined if no token available\n */\n getAuthToken?: () => string | null | Promise<string | null>;\n\n /**\n * Optional callback when 401 auth error occurs\n */\n onAuthError?: () => void;\n\n /**\n * Default headers to include in all requests\n * Example: { \"x-fluid-client\": \"admin\" }\n */\n defaultHeaders?: Record<string, string>;\n\n /**\n * Credentials mode for fetch requests.\n * Set to `\"include\"` for cookie-based (same-origin BFF) authentication.\n * @default undefined (browser default: \"same-origin\")\n */\n credentials?: RequestCredentials;\n\n /**\n * Request cache mode for fetch requests.\n * @default undefined (browser default)\n */\n cache?: RequestCache;\n\n /**\n * Retry configuration for thrown network errors from fetch.\n * Does not retry HTTP error responses or aborted requests.\n * @default undefined (no retries)\n */\n networkRetry?: {\n maxRetries?: number;\n baseDelayMs?: number;\n };\n\n /**\n * Throw ApiError when a successful response declares JSON but cannot be parsed.\n * Defaults to false to preserve the legacy generated-client behavior.\n * @default false\n */\n throwOnInvalidJson?: boolean;\n}\n\nexport interface RequestOptions {\n method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n headers?: Record<string, string>;\n params?: Record<string, unknown>;\n body?: unknown;\n signal?: AbortSignal;\n priority?: RequestInit[\"priority\"];\n}\n\n/**\n * API Error class compatible with fluid-admin's ApiError\n */\nexport class ApiError extends Error {\n public readonly status: number;\n\n /**\n * The unwrapped field-error bag. See `ApiErrorData`; the contract is\n * documented in `docs/api-error-data-contract.md`.\n */\n public readonly data: ApiErrorData;\n\n /**\n * The full error response envelope. Read `error_message`, `error`, `status`\n * and nested `errors` from here — `data` has already unwrapped one level.\n */\n public readonly body: ApiErrorBody;\n\n public readonly requestId?: string;\n\n constructor(\n message: string,\n status: number,\n data?: ApiErrorData,\n requestId?: string,\n body?: ApiErrorBody,\n ) {\n super(message);\n this.name = \"ApiError\";\n this.status = status;\n this.data = data ?? null;\n this.body = body ?? null;\n this.requestId = requestId;\n\n if (\"captureStackTrace\" in Error) {\n (\n Error as {\n captureStackTrace: (\n target: Error,\n constructor: NewableFunction,\n ) => void;\n }\n ).captureStackTrace(this, ApiError);\n }\n }\n\n toJSON(): {\n name: string;\n message: string;\n status: number;\n data: ApiErrorData;\n body: ApiErrorBody;\n requestId?: string;\n } {\n return {\n name: this.name,\n message: this.message,\n status: this.status,\n data: this.data,\n body: this.body,\n requestId: this.requestId,\n };\n }\n}\n\nfunction getStringRequestId(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction getRequestIdFromHeaders(headers: Headers): string | undefined {\n return (\n getStringRequestId(headers.get(\"x-request-id\")) ??\n getStringRequestId(headers.get(\"request-id\")) ??\n getStringRequestId(headers.get(\"X-Request-ID\"))\n );\n}\n\nfunction getRequestIdFromJsonBody(body: unknown): string | undefined {\n if (!body || typeof body !== \"object\" || Array.isArray(body)) {\n return undefined;\n }\n\n const record = body as Record<string, unknown>;\n const meta = record.meta;\n\n return (\n getStringRequestId(record.request_id) ??\n getStringRequestId(record.requestId) ??\n (meta && typeof meta === \"object\" && !Array.isArray(meta)\n ? (getStringRequestId((meta as Record<string, unknown>).request_id) ??\n getStringRequestId((meta as Record<string, unknown>).requestId))\n : undefined)\n );\n}\n\n/**\n * Type guard for ApiError\n */\nexport function isApiError(error: unknown): error is ApiError {\n return error instanceof ApiError;\n}\n\nexport interface FetchClientInstance {\n request: <TResponse = unknown>(\n endpoint: string,\n options?: RequestOptions,\n ) => Promise<TResponse>;\n requestWithFormData: <TResponse = unknown>(\n endpoint: string,\n formData: FormData,\n options?: Omit<RequestOptions, \"body\" | \"params\"> & {\n method?: \"POST\" | \"PUT\" | \"PATCH\";\n },\n ) => Promise<TResponse>;\n get: <TResponse = unknown>(\n endpoint: string,\n params?: Record<string, unknown>,\n options?: Omit<RequestOptions, \"method\" | \"params\">,\n ) => Promise<TResponse>;\n post: <TResponse = unknown>(\n endpoint: string,\n body?: unknown,\n options?: Omit<RequestOptions, \"method\" | \"body\">,\n ) => Promise<TResponse>;\n put: <TResponse = unknown>(\n endpoint: string,\n body?: unknown,\n options?: Omit<RequestOptions, \"method\" | \"body\">,\n ) => Promise<TResponse>;\n patch: <TResponse = unknown>(\n endpoint: string,\n body?: unknown,\n options?: Omit<RequestOptions, \"method\" | \"body\">,\n ) => Promise<TResponse>;\n delete: <TResponse = unknown>(\n endpoint: string,\n options?: Omit<RequestOptions, \"method\">,\n ) => Promise<TResponse>;\n}\n\n/**\n * Creates a configured fetch client instance\n */\nexport function createFetchClient(\n config: FetchClientConfig,\n): FetchClientInstance {\n const {\n baseUrl,\n getAuthToken,\n onAuthError,\n defaultHeaders = {},\n credentials,\n cache,\n networkRetry,\n throwOnInvalidJson = false,\n } = config;\n const maxNetworkRetries = Math.max(0, networkRetry?.maxRetries ?? 0);\n const baseNetworkRetryDelayMs = Math.max(0, networkRetry?.baseDelayMs ?? 0);\n\n /**\n * Build headers for a request\n */\n async function buildHeaders(\n customHeaders?: Record<string, string>,\n ): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n ...defaultHeaders,\n ...customHeaders,\n };\n\n // Add auth token if available\n if (getAuthToken) {\n const token = await getAuthToken();\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n }\n\n return headers;\n }\n\n /**\n * Join baseUrl + endpoint via string concatenation (matches fetchApi).\n * Using `new URL(endpoint, baseUrl)` would strip any path prefix from\n * baseUrl (e.g. \"/api\") when the endpoint starts with \"/\".\n */\n function joinUrl(endpoint: string): string {\n return `${baseUrl}${endpoint}`;\n }\n\n /**\n * Build URL with query parameters for GET requests\n * Compatible with fluid-admin's query param handling\n */\n function buildUrl(\n endpoint: string,\n params?: Record<string, unknown>,\n ): string {\n const fullUrl = joinUrl(endpoint);\n\n if (!params || Object.keys(params).length === 0) {\n return fullUrl;\n }\n\n const queryString = new URLSearchParams();\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return; // Skip undefined/null values\n }\n\n if (Array.isArray(value)) {\n // Handle arrays like Rails expects: key[]\n value.forEach((item) => queryString.append(`${key}[]`, String(item)));\n } else if (typeof value === \"object\") {\n // Handle nested objects: key[subkey]\n Object.entries(value).forEach(([subKey, subValue]) => {\n if (subValue === undefined || subValue === null) {\n return;\n }\n\n if (Array.isArray(subValue)) {\n subValue.forEach((item) =>\n queryString.append(`${key}[${subKey}][]`, String(item)),\n );\n } else {\n queryString.append(`${key}[${subKey}]`, String(subValue));\n }\n });\n } else {\n queryString.append(key, String(value));\n }\n });\n\n const qs = queryString.toString();\n return qs ? `${fullUrl}?${qs}` : fullUrl;\n }\n\n /**\n * Shared response handler for both JSON and FormData requests.\n * Handles auth errors, non-OK responses, 204 No Content, and JSON parsing.\n */\n async function handleResponse<TResponse>(\n response: Response,\n method: string,\n _url: string,\n ): Promise<TResponse> {\n const headerRequestId = getRequestIdFromHeaders(response.headers);\n\n if (response.status === 401 && onAuthError) {\n onAuthError();\n }\n\n if (!response.ok) {\n // Read body as text first to avoid SyntaxError from response.json()\n // when server returns non-JSON bodies with application/json content-type.\n const errorText = await response.text().catch(() => \"\");\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType?.includes(\"application/json\")) {\n // Parsed as `unknown` and narrowed before any property read: a body of\n // `null` (or a bare string/number/array) is valid JSON, and reading\n // `.error` off it directly threw a TypeError instead of an ApiError.\n let parsed: unknown;\n try {\n parsed = JSON.parse(errorText);\n } catch {\n throw new ApiError(\n errorText.slice(0, 200) ||\n `${method} request failed with status ${response.status}`,\n response.status,\n null,\n headerRequestId,\n );\n }\n\n const body = toApiErrorBody(parsed);\n // Only an object envelope can carry a message. Some Rails BFF endpoints\n // return `{ error: { message, details } }` instead of `{ message }` or\n // `{ error_message }`, so that shape is tried last.\n const msg = body\n ? (() => {\n const nestedError =\n typeof body.error === \"object\" && body.error !== null\n ? (body.error as { message?: unknown }).message\n : undefined;\n const directError =\n typeof body.error === \"string\" ? body.error : undefined;\n const message =\n typeof body.message === \"string\" ? body.message : undefined;\n const errorMessage =\n typeof body.error_message === \"string\"\n ? body.error_message\n : undefined;\n return (\n message ||\n errorMessage ||\n directError ||\n (typeof nestedError === \"string\" ? nestedError : undefined)\n );\n })()\n : undefined;\n\n throw new ApiError(\n msg || `${method} request failed with status ${response.status}`,\n response.status,\n body ? toApiErrorData(body) : (parsed as ApiErrorData),\n headerRequestId ?? getRequestIdFromJsonBody(parsed),\n body,\n );\n } else {\n throw new ApiError(\n `${method} request failed with status ${response.status}`,\n response.status,\n null,\n headerRequestId,\n );\n }\n }\n\n if (\n response.status === 204 ||\n response.headers.get(\"content-length\") === \"0\"\n ) {\n return null as TResponse;\n }\n\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType?.includes(\"application/json\")) {\n const responseText = await response.text();\n\n try {\n const data = JSON.parse(responseText);\n return data as TResponse;\n } catch {\n if (throwOnInvalidJson) {\n throw new ApiError(\n \"Failed to parse response as JSON\",\n response.status,\n null,\n headerRequestId,\n );\n }\n\n // API declared JSON content-type but body isn't valid JSON.\n // Return the raw payload to preserve the legacy non-strict path.\n return responseText ? (responseText as TResponse) : (null as TResponse);\n }\n }\n\n // Non-JSON response (text/plain, text/html, etc.)\n return null as TResponse;\n }\n\n function getNetworkRetryDelayMs(retryAttempt: number): number {\n return baseNetworkRetryDelayMs * 2 ** (retryAttempt - 1);\n }\n\n async function waitForNetworkRetry(retryAttempt: number): Promise<void> {\n const delayMs = getNetworkRetryDelayMs(retryAttempt);\n if (delayMs <= 0) {\n return;\n }\n\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n\n async function fetchWithNetworkRetry(\n url: string,\n fetchOptions: RequestInit,\n signal?: AbortSignal,\n ): Promise<Response> {\n let retryCount = 0;\n\n while (true) {\n try {\n return await fetch(url, fetchOptions);\n } catch (networkError) {\n if (signal?.aborted || retryCount >= maxNetworkRetries) {\n throw networkError;\n }\n\n retryCount += 1;\n await waitForNetworkRetry(retryCount);\n\n if (signal?.aborted) {\n throw networkError;\n }\n }\n }\n }\n\n /**\n * Main request function\n */\n async function request<TResponse = unknown>(\n endpoint: string,\n options: RequestOptions = {},\n ): Promise<TResponse> {\n const {\n method = \"GET\",\n headers: customHeaders,\n params,\n body,\n signal,\n priority,\n } = options;\n\n const url = params ? buildUrl(endpoint, params) : joinUrl(endpoint);\n\n const headers = await buildHeaders(customHeaders);\n\n let response: Response;\n\n try {\n const fetchOptions: RequestInit = { method, headers };\n if (credentials) fetchOptions.credentials = credentials;\n if (cache) fetchOptions.cache = cache;\n if (priority) fetchOptions.priority = priority;\n const serializedBody =\n body && method !== \"GET\" ? JSON.stringify(body) : null;\n if (serializedBody) fetchOptions.body = serializedBody;\n if (signal) fetchOptions.signal = signal;\n response = await fetchWithNetworkRetry(url, fetchOptions, signal);\n } catch (networkError) {\n throw new ApiError(\n `Network error: ${networkError instanceof Error ? networkError.message : \"Unknown network error\"}`,\n 0,\n null,\n );\n }\n\n return handleResponse<TResponse>(response, method, url);\n }\n\n /**\n * Request with FormData (for file uploads)\n */\n async function requestWithFormData<TResponse = unknown>(\n endpoint: string,\n formData: FormData,\n options: Omit<RequestOptions, \"body\" | \"params\"> & {\n method?: \"POST\" | \"PUT\" | \"PATCH\";\n } = {},\n ): Promise<TResponse> {\n const {\n method = \"POST\",\n headers: customHeaders,\n signal,\n priority,\n } = options;\n\n const url = joinUrl(endpoint);\n const headers = await buildHeaders(customHeaders);\n\n // Remove Content-Type to let browser set it with boundary\n delete headers[\"Content-Type\"];\n\n let response: Response;\n\n try {\n const fetchOptions: RequestInit = { method, headers, body: formData };\n if (credentials) fetchOptions.credentials = credentials;\n if (cache) fetchOptions.cache = cache;\n if (priority) fetchOptions.priority = priority;\n if (signal) fetchOptions.signal = signal;\n response = await fetchWithNetworkRetry(url, fetchOptions, signal);\n } catch (networkError) {\n throw new ApiError(\n `Network error: ${networkError instanceof Error ? networkError.message : \"Unknown network error\"}`,\n 0,\n null,\n );\n }\n\n return handleResponse<TResponse>(response, method, url);\n }\n\n // Return client with convenience methods\n return {\n request: request,\n requestWithFormData: requestWithFormData,\n\n // Convenience methods for common HTTP verbs\n get: <TResponse = unknown>(\n endpoint: string,\n params?: Record<string, unknown>,\n options?: Omit<RequestOptions, \"method\" | \"params\">,\n ): Promise<TResponse> =>\n request<TResponse>(endpoint, {\n ...options,\n method: \"GET\" as const,\n ...(params && { params }),\n }),\n\n post: <TResponse = unknown>(\n endpoint: string,\n body?: unknown,\n options?: Omit<RequestOptions, \"method\" | \"body\">,\n ): Promise<TResponse> =>\n request<TResponse>(endpoint, {\n ...options,\n method: \"POST\",\n body,\n }),\n\n put: <TResponse = unknown>(\n endpoint: string,\n body?: unknown,\n options?: Omit<RequestOptions, \"method\" | \"body\">,\n ): Promise<TResponse> =>\n request<TResponse>(endpoint, {\n ...options,\n method: \"PUT\",\n body,\n }),\n\n patch: <TResponse = unknown>(\n endpoint: string,\n body?: unknown,\n options?: Omit<RequestOptions, \"method\" | \"body\">,\n ): Promise<TResponse> =>\n request<TResponse>(endpoint, {\n ...options,\n method: \"PATCH\",\n body,\n }),\n\n delete: <TResponse = unknown>(\n endpoint: string,\n options?: Omit<RequestOptions, \"method\">,\n ): Promise<TResponse> =>\n request<TResponse>(endpoint, {\n ...options,\n method: \"DELETE\",\n }),\n };\n}\n\nexport type FetchClient = FetchClientInstance;\n","import type { ApiErrorBody, ApiErrorData } from \"./api-error-shape\";\nimport { toApiErrorBody, toApiErrorData } from \"./api-error-shape\";\nimport { ApiError } from \"./fetch-client\";\n\nexport interface HeyApiErrorRequestOptions {\n method?: string;\n}\n\nexport interface HeyApiErrorInterceptorOptions {\n onResponseError?: (response: Response) => void;\n shouldPassThroughTransportError?: (error: unknown) => boolean;\n}\n\nexport type HeyApiErrorInterceptor = (\n error: unknown,\n response: Response | undefined,\n request: Request | undefined,\n options: HeyApiErrorRequestOptions,\n) => unknown;\n\nfunction getNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction getRequestId(\n response: Response,\n error: ApiErrorBody,\n): string | undefined {\n const meta = toApiErrorBody(error?.meta);\n\n return (\n getNonEmptyString(response.headers.get(\"x-request-id\")) ??\n getNonEmptyString(response.headers.get(\"request-id\")) ??\n getNonEmptyString(error?.request_id) ??\n getNonEmptyString(error?.requestId) ??\n getNonEmptyString(meta?.request_id) ??\n getNonEmptyString(meta?.requestId)\n );\n}\n\nfunction getErrorMessage(\n error: Record<string, unknown>,\n fallback: string,\n): string {\n const nestedError = toApiErrorBody(error.error);\n\n return (\n getNonEmptyString(error.message) ??\n getNonEmptyString(error.error_message) ??\n getNonEmptyString(nestedError?.message) ??\n fallback\n );\n}\n\n/**\n * Creates an error interceptor compatible with generated Hey API fetch clients.\n * Consumer-specific auth and cancellation policy is supplied through callbacks,\n * keeping this package independent from generated client types.\n */\nexport function createHeyApiErrorInterceptor(\n options: HeyApiErrorInterceptorOptions = {},\n): HeyApiErrorInterceptor {\n return (error, response, request, requestOptions) => {\n if (!response) {\n if (error instanceof ApiError) {\n return error;\n }\n\n if (options.shouldPassThroughTransportError?.(error)) {\n return error;\n }\n\n // Request construction and auth callbacks run before dispatch. Preserve\n // those errors instead of reporting them as network failures.\n if (!request) {\n return error;\n }\n\n return new ApiError(\n `Network error: ${error instanceof Error ? error.message : \"Unknown network error\"}`,\n 0,\n null,\n );\n }\n\n // Generated clients surface malformed JSON bodies as SyntaxError. Map an\n // otherwise successful response to the shared strict parse contract.\n if (response.ok && error instanceof SyntaxError) {\n return new ApiError(\n \"Failed to parse response as JSON\",\n response.status,\n null,\n getRequestId(response, null),\n );\n }\n\n options.onResponseError?.(response);\n\n const method = request?.method ?? requestOptions.method ?? \"GET\";\n const errorRecord = toApiErrorBody(error);\n const requestId = getRequestId(response, errorRecord);\n\n if (errorRecord) {\n // `data` is the unwrapped field-error bag, `body` the whole envelope.\n // Both derive from one shared rule — see docs/api-error-data-contract.md.\n return new ApiError(\n getErrorMessage(errorRecord, `${method} request failed`),\n response.status,\n toApiErrorData(errorRecord),\n requestId,\n errorRecord,\n );\n }\n\n const isJson = response.headers\n .get(\"content-type\")\n ?.includes(\"application/json\");\n const text = getNonEmptyString(error);\n\n return new ApiError(\n isJson && text\n ? text.slice(0, 200)\n : `${method} request failed with status ${response.status}`,\n response.status,\n // A parsed JSON string is a legal `ApiErrorData` member, so it is kept\n // rather than dropped — the shared fetch client already preserves it, and\n // discarding it here made the two producers disagree.\n isJson ? (error as ApiErrorData) : null,\n requestId,\n // Unreachable as an envelope: this branch runs only when the payload is\n // not a plain object, which is exactly what `toApiErrorBody` rejects.\n null,\n );\n };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n ArrayStyle,\n ObjectStyle,\n SerializerOptions,\n} from \"./pathSerializer.gen\";\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (\n data: FormData,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\" || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (\n data: URLSearchParams,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\") {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: (body: unknown): string =>\n JSON.stringify(body, (_key, value) =>\n typeof value === \"bigint\" ? value.toString() : value,\n ),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\ntype Slot = \"body\" | \"headers\" | \"path\" | \"query\";\n\nexport type Field =\n | {\n in: Exclude<Slot, \"body\">;\n /**\n * Field name. This is the name we want the user to see and use.\n */\n key: string;\n /**\n * Field mapped name. This is the name we want to use in the request.\n * If omitted, we use the same value as `key`.\n */\n map?: string;\n }\n | {\n in: Extract<Slot, \"body\">;\n /**\n * Key isn't required for bodies.\n */\n key?: string;\n map?: string;\n }\n | {\n /**\n * Field name. This is the name we want the user to see and use.\n */\n key: string;\n /**\n * Field mapped name. This is the name we want to use in the request.\n * If `in` is omitted, `map` aliases `key` to the transport layer.\n */\n map: Slot;\n };\n\nexport interface Fields {\n allowExtra?: Partial<Record<Slot, boolean>>;\n args?: ReadonlyArray<Field>;\n}\n\nexport type FieldsConfig = ReadonlyArray<Field | Fields>;\n\nconst extraPrefixesMap: Record<string, Slot> = {\n $body_: \"body\",\n $headers_: \"headers\",\n $path_: \"path\",\n $query_: \"query\",\n};\nconst extraPrefixes = Object.entries(extraPrefixesMap);\n\ntype KeyMap = Map<\n string,\n | {\n in: Slot;\n map?: string;\n }\n | {\n in?: never;\n map: Slot;\n }\n>;\n\nfunction buildKeyMap(fields: FieldsConfig, map?: KeyMap): KeyMap {\n if (!map) {\n map = new Map();\n }\n\n for (const config of fields) {\n if (\"in\" in config) {\n if (config.key) {\n map.set(config.key, {\n in: config.in,\n map: config.map,\n });\n }\n } else if (\"key\" in config) {\n map.set(config.key, {\n map: config.map,\n });\n } else if (config.args) {\n buildKeyMap(config.args, map);\n }\n }\n\n return map;\n}\n\ninterface Params {\n body?: unknown;\n headers: Record<string, unknown>;\n path: Record<string, unknown>;\n query: Record<string, unknown>;\n}\n\nfunction stripEmptySlots(params: Params): void {\n for (const [slot, value] of Object.entries(params)) {\n if (slot === \"body\") continue;\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !Object.keys(value).length\n ) {\n delete params[slot as Slot];\n }\n }\n}\n\nexport function buildClientParams(\n args: ReadonlyArray<unknown>,\n fields: FieldsConfig,\n): Params {\n const params: Params = {\n headers: Object.create(null),\n path: Object.create(null),\n query: Object.create(null),\n };\n\n const map = buildKeyMap(fields);\n\n function writeSlot(slot: Slot, key: string, value: unknown): void {\n let record = params[slot] as Record<string, unknown> | undefined;\n if (record === undefined) {\n record = Object.create(null) as Record<string, unknown>;\n params[slot] = record;\n }\n record[key] = value;\n }\n\n let config: FieldsConfig[number] | undefined;\n\n for (const [index, arg] of args.entries()) {\n if (fields[index]) {\n config = fields[index];\n }\n\n if (!config) {\n continue;\n }\n\n if (\"in\" in config) {\n if (config.key) {\n const field = map.get(config.key)!;\n const name = field.map || config.key;\n if (field.in) {\n writeSlot(field.in, name, arg);\n }\n } else {\n params.body = arg;\n }\n } else {\n for (const [key, value] of Object.entries(arg ?? {})) {\n const field = map.get(key);\n\n if (field) {\n if (field.in) {\n const name = field.map || key;\n writeSlot(field.in, name, value);\n } else {\n params[field.map] = value;\n }\n } else {\n const extra = extraPrefixes.find(([prefix]) =>\n key.startsWith(prefix),\n );\n\n if (extra) {\n const [prefix, slot] = extra;\n writeSlot(slot, key.slice(prefix.length), value);\n } else if (\"allowExtra\" in config && config.allowExtra) {\n for (const [slot, allowed] of Object.entries(config.allowExtra)) {\n if (allowed) {\n writeSlot(slot as Slot, key, value);\n break;\n }\n }\n }\n }\n }\n }\n }\n\n stripEmptySlots(params);\n\n return params;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from \"./types.gen\";\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<\n RequestInit,\n \"method\"\n> &\n Pick<Config, \"method\" | \"responseTransformer\" | \"responseValidator\"> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit[\"body\"];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<\n TData = unknown,\n TReturn = void,\n TNext = unknown,\n> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function createSseClient<TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n let lastEventId: string | undefined;\n\n const sleep =\n sseSleepFn ??\n ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set(\"Last-Event-ID\", lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: \"follow\",\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok)\n throw new Error(\n `SSE failed: ${response.status} ${response.statusText}`,\n );\n\n if (!response.body) throw new Error(\"No body in SSE response\");\n\n const reader = response.body\n .pipeThrough(new TextDecoderStream())\n .getReader();\n\n let buffer = \"\";\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener(\"abort\", abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n buffer = buffer.replace(/\\r\\n?/g, \"\\n\"); // normalize line endings\n\n const chunks = buffer.split(\"\\n\\n\");\n buffer = chunks.pop() ?? \"\";\n\n for (const chunk of chunks) {\n const lines = chunk.split(\"\\n\");\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith(\"data:\")) {\n dataLines.push(line.replace(/^data:\\s*/, \"\"));\n } else if (line.startsWith(\"event:\")) {\n eventName = line.replace(/^event:\\s*/, \"\");\n } else if (line.startsWith(\"id:\")) {\n lastEventId = line.replace(/^id:\\s*/, \"\");\n } else if (line.startsWith(\"retry:\")) {\n const parsed = Number.parseInt(\n line.replace(/^retry:\\s*/, \"\"),\n 10,\n );\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join(\"\\n\");\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener(\"abort\", abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (\n sseMaxRetryAttempts !== undefined &&\n attempt >= sseMaxRetryAttempts\n ) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(\n retryDelay * 2 ** (attempt - 1),\n sseMaxRetryDelay ?? 30000,\n );\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T>\n extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = \"form\" | \"spaceDelimited\" | \"pipeDelimited\";\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = \"label\" | \"matrix\" | \"simple\";\nexport type ObjectStyle = \"form\" | \"deepObject\";\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (\n style: ArraySeparatorStyle,\n): \".\" | \";\" | \",\" | \"&\" => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const separatorArrayNoExplode = (\n style: ArraySeparatorStyle,\n): \",\" | \"|\" | \"%20\" => {\n switch (style) {\n case \"form\":\n return \",\";\n case \"pipeDelimited\":\n return \"|\";\n case \"spaceDelimited\":\n return \"%20\";\n default:\n return \",\";\n }\n};\n\nexport const separatorObjectExplode = (\n style: ObjectSeparatorStyle,\n): \".\" | \";\" | \",\" | \"&\" => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n value: unknown[];\n}): string => {\n if (!explode) {\n const joinedValues = (\n allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n ).join(separatorArrayNoExplode(style));\n switch (style) {\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n case \"simple\":\n return joinedValues;\n default:\n return `${name}=${joinedValues}`;\n }\n }\n\n const separator = separatorArrayExplode(style);\n const joinedValues = value\n .map((v) => {\n if (style === \"label\" || style === \"simple\") {\n return allowReserved ? v : encodeURIComponent(v as string);\n }\n\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v as string,\n });\n })\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n allowReserved,\n name,\n value,\n}: SerializePrimitiveParam): string => {\n if (value === undefined || value === null) {\n return \"\";\n }\n\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n value: Record<string, unknown> | Date;\n valueOnly?: boolean;\n}): string => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n\n if (style !== \"deepObject\" && !explode) {\n let values: string[] = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [\n ...values,\n key,\n allowReserved ? (v as string) : encodeURIComponent(v as string),\n ];\n });\n const joinedValues = values.join(\",\");\n switch (style) {\n case \"form\":\n return `${name}=${joinedValues}`;\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n default:\n return joinedValues;\n }\n }\n\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value)\n .map(([key, v]) =>\n serializePrimitiveParam({\n allowReserved,\n name: style === \"deepObject\" ? `${name}[${key}]` : key,\n value: v as string,\n }),\n )\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from \"./bodySerializer.gen\";\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from \"./pathSerializer.gen\";\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE: RegExp = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({\n path,\n url: _url,\n}: PathSerializer): string => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = \"simple\";\n\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith(\".\")) {\n name = name.substring(1);\n style = \"label\";\n } else if (name.startsWith(\";\")) {\n name = name.substring(1);\n style = \"matrix\";\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(\n match,\n serializeArrayParam({ explode, name, style, value }),\n );\n continue;\n }\n\n if (typeof value === \"object\") {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n }),\n );\n continue;\n }\n\n if (style === \"matrix\") {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`,\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === \"label\" ? `.${value as string}` : (value as string),\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}): string => {\n const pathUrl = _url.startsWith(\"/\") ? _url : `/${_url}`;\n let url = (baseUrl ?? \"\") + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : \"\";\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}): unknown {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if (\"serializedBody\" in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== \"\";\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e., client-axios)\n return options.body !== \"\" ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: \"header\" | \"query\" | \"cookie\";\n /**\n * A unique identifier for the security scheme.\n *\n * Defined only when there are multiple security schemes whose `Auth`\n * shape would otherwise be identical.\n */\n key?: string;\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: \"basic\" | \"bearer\";\n type: \"apiKey\" | \"http\";\n}\n\nexport const getAuthToken = async (\n auth: Auth,\n callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken,\n): Promise<string | undefined> => {\n const token =\n typeof callback === \"function\" ? await callback(auth) : callback;\n\n if (!token) {\n return;\n }\n\n if (auth.scheme === \"bearer\") {\n return `Bearer ${token}`;\n }\n\n if (auth.scheme === \"basic\") {\n return `Basic ${btoa(token)}`;\n }\n\n return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from \"../core/auth.gen\";\nimport type { QuerySerializerOptions } from \"../core/bodySerializer.gen\";\nimport { jsonBodySerializer } from \"../core/bodySerializer.gen\";\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from \"../core/pathSerializer.gen\";\nimport { getUrl } from \"../core/utils.gen\";\nimport type {\n Client,\n ClientOptions,\n Config,\n RequestOptions,\n} from \"./types.gen\";\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\n}: QuerySerializerOptions = {}): ((queryParams: T) => string) => {\n const querySerializer = (queryParams: T): string => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"form\",\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === \"object\") {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"deepObject\",\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join(\"&\");\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (\n contentType: string | null,\n): Exclude<Config[\"parseAs\"], \"auto\"> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return \"stream\";\n }\n\n const cleanContent = contentType.split(\";\")[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith(\"application/json\") ||\n cleanContent.endsWith(\"+json\")\n ) {\n return \"json\";\n }\n\n if (cleanContent === \"multipart/form-data\") {\n return \"formData\";\n }\n\n if (\n [\"application/\", \"audio/\", \"image/\", \"video/\"].some((type) =>\n cleanContent.startsWith(type),\n )\n ) {\n return \"blob\";\n }\n\n if (cleanContent.startsWith(\"text/\")) {\n return \"text\";\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, \"auth\" | \"query\"> & {\n headers: Headers;\n },\n name?: string,\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get(\"Cookie\")?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport async function setAuthParams(\n options: Pick<RequestOptions, \"auth\" | \"query\" | \"security\"> & {\n headers: Headers;\n },\n): Promise<void> {\n for (const auth of options.security ?? []) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? \"Authorization\";\n\n switch (auth.in) {\n case \"query\":\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case \"cookie\":\n options.headers.append(\"Cookie\", `${name}=${token}`);\n break;\n case \"header\":\n default:\n options.headers.set(name, token);\n break;\n }\n }\n}\n\nexport const buildUrl: Client[\"buildUrl\"] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === \"function\"\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith(\"/\")) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>[\"headers\"] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator =\n header instanceof Headers\n ? headersEntries(header)\n : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e., their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === \"object\" ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n /** response may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (\n request: Req,\n options: Options,\n) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === \"number\") {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(\n id: number | Interceptor,\n fn: Interceptor,\n ): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: \"form\",\n },\n object: {\n explode: true,\n style: \"deepObject\",\n },\n});\n\nconst defaultHeaders = {\n \"Content-Type\": \"application/json\",\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: \"auto\",\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from \"../core/serverSentEvents.gen\";\nimport type { HttpMethod } from \"../core/types.gen\";\nimport { getValidRequestBody } from \"../core/utils.gen\";\nimport type {\n Client,\n Config,\n RequestOptions,\n ResolvedRequestOptions,\n} from \"./types.gen\";\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from \"./utils.gen\";\n\ntype ReqInit = Omit<RequestInit, \"body\" | \"headers\"> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<\n Request,\n Response,\n unknown,\n ResolvedRequestOptions\n >();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends \"data\" | \"fields\" = \"fields\",\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined as string | undefined,\n };\n\n if (opts.security) {\n await setAuthParams(opts);\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body) as\n | string\n | undefined;\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === \"\") {\n opts.headers.delete(\"Content-Type\");\n }\n\n const resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client[\"request\"] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: \"follow\",\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n\n response = await _fetch(request);\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === \"auto\"\n ? getParseAs(response.headers.get(\"Content-Type\"))\n : opts.parseAs) ?? \"json\";\n\n if (\n response.status === 204 ||\n response.headers.get(\"Content-Length\") === \"0\"\n ) {\n let emptyData: any;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"text\":\n emptyData = await response[parseAs]();\n break;\n case \"formData\":\n emptyData = new FormData();\n break;\n case \"stream\":\n emptyData = response.body;\n break;\n case \"json\":\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === \"data\"\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"formData\":\n case \"text\":\n data = await response[parseAs]();\n break;\n case \"json\": {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\n case \"stream\":\n return opts.responseStyle === \"data\"\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === \"json\") {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === \"data\"\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(\n finalError,\n response,\n request,\n options as ResolvedRequestOptions,\n );\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === \"data\"\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn =\n (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn =\n (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n serializedBody: getValidRequestBody(opts) as\n | BodyInit\n | null\n | undefined,\n url,\n });\n };\n\n const _buildUrl: Client[\"buildUrl\"] = (options) =>\n buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _buildUrl,\n connect: makeMethodFn(\"CONNECT\"),\n delete: makeMethodFn(\"DELETE\"),\n get: makeMethodFn(\"GET\"),\n getConfig,\n head: makeMethodFn(\"HEAD\"),\n interceptors,\n options: makeMethodFn(\"OPTIONS\"),\n patch: makeMethodFn(\"PATCH\"),\n post: makeMethodFn(\"POST\"),\n put: makeMethodFn(\"PUT\"),\n request,\n setConfig,\n sse: {\n connect: makeSseFn(\"CONNECT\"),\n delete: makeSseFn(\"DELETE\"),\n get: makeSseFn(\"GET\"),\n head: makeSseFn(\"HEAD\"),\n options: makeSseFn(\"OPTIONS\"),\n patch: makeSseFn(\"PATCH\"),\n post: makeSseFn(\"POST\"),\n put: makeSseFn(\"PUT\"),\n trace: makeSseFn(\"TRACE\"),\n },\n trace: makeMethodFn(\"TRACE\"),\n } as Client;\n};\n","import { createHeyApiErrorInterceptor } from \"@fluid-app/api-client-core\";\nimport { type Client, createClient } from \"@fluid-app/hey-api-fetch-runtime\";\n\nexport type FluidOsHeyApiClient = Client;\n\nexport interface FluidOsHeyApiClientConfig {\n baseUrl: string;\n fetch?: typeof fetch;\n getAuthToken?: () =>\n | string\n | null\n | undefined\n | Promise<string | null | undefined>;\n defaultHeaders?: Record<string, string>;\n onAuthError?: () => void;\n}\n\nfunction isAbortError(error: unknown): boolean {\n return (\n (error instanceof DOMException && error.name === \"AbortError\") ||\n (error instanceof Error && error.name === \"AbortError\")\n );\n}\n\nexport function createFluidOsHeyApiClient(\n config: FluidOsHeyApiClientConfig,\n): Client {\n const client = createClient({\n auth: async () => (await config.getAuthToken?.()) ?? undefined,\n baseUrl: config.baseUrl,\n fetch: config.fetch,\n headers: {\n Accept: \"application/json\",\n ...config.defaultHeaders,\n },\n throwOnError: true,\n });\n\n client.interceptors.error.use(\n createHeyApiErrorInterceptor({\n onResponseError: (response) => {\n if (response.status === 401) {\n config.onAuthError?.();\n }\n },\n shouldPassThroughTransportError: isAbortError,\n }),\n );\n\n return client;\n}\n","import type { FluidOsDynamicObject } from \"./hey-api/types.gen\";\n\nexport function toFluidOsDynamicObject(value: null): null;\nexport function toFluidOsDynamicObject(\n value: Record<string, unknown>,\n): FluidOsDynamicObject;\nexport function toFluidOsDynamicObject(\n value: Record<string, unknown> | null,\n): FluidOsDynamicObject | null;\nexport function toFluidOsDynamicObject(\n value: Record<string, unknown> | null,\n): FluidOsDynamicObject | null {\n if (value === null) return null;\n\n const serialized = JSON.stringify(value);\n if (serialized === undefined) {\n throw new TypeError(\"FluidOS payload cannot be serialized as JSON.\");\n }\n\n return JSON.parse(serialized) as FluidOsDynamicObject;\n}\n\nexport function toNumberArray(value: unknown): number[] | undefined {\n if (!Array.isArray(value)) return undefined;\n return value.filter((item): item is number => typeof item === \"number\");\n}\n\nexport function toStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n return value.filter((item): item is string => typeof item === \"string\");\n}\n","import {\n createFluidOsHeyApiClient,\n toFluidOsDynamicObject,\n type FluidOsHeyApiClient,\n} from \"@fluid-app/fluidos-api-client\";\nimport * as sdk from \"@fluid-app/fluidos-api-client/sdk\";\nimport type {\n FluidOsV0CreateFluidOsnavigationData,\n FluidOsV0CreateFluidOsnavigationItemData,\n FluidOsV0CreateFluidOsprofileData,\n FluidOsV0CreateFluidOsscreenData,\n FluidOsV0CreateFluidOsthemeData,\n FluidOsV0ListFluidOsdefinitionsData,\n FluidOsV0ListFluidOsnavigationsData,\n FluidOsV0ListFluidOsprofilesData,\n FluidOsV0ListFluidOsscreensData,\n FluidOsV0ListFluidOsthemesData,\n FluidOsV0ListFluidOsversionsData,\n FluidOsV0UpdateFluidOsnavigationData,\n FluidOsV0UpdateFluidOsnavigationItemData,\n FluidOsV0UpdateFluidOsprofileData,\n FluidOsV0UpdateFluidOsscreenData,\n FluidOsV0UpdateFluidOsthemeData,\n FluidOsV0UpdateFluidOsversionData,\n} from \"@fluid-app/fluidos-api-client/types\";\n\nexport type FluidOsClient = FluidOsHeyApiClient;\ntype RequiredApiResult<T> = Promise<Exclude<Awaited<T>, undefined>>;\n\nexport { toFluidOsDynamicObject };\n\n// The unattended desktop worker paces the pull command's parallel screen and\n// navigation requests. Interactive CLI requests retain their normal latency.\nlet backgroundGate = Promise.resolve();\nfunction requestToken(token: string): string | Promise<string> {\n if (process.env[\"FLUID_BACKGROUND_SYNC\"] !== \"1\") return token;\n const turn = backgroundGate.then(\n () => new Promise<void>((resolve) => setTimeout(resolve, 1_000)),\n );\n backgroundGate = turn;\n return turn.then(() => token);\n}\n\nexport function createFluidOsClient(options: {\n readonly baseUrl: string;\n readonly token: string;\n}): FluidOsClient {\n return createFluidOsHeyApiClient({\n baseUrl: options.baseUrl,\n getAuthToken: () => requestToken(options.token),\n });\n}\n\nexport const fluidOsApi = {\n listWidgetPackages: (\n client: FluidOsClient,\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0ListWidgetPackages>> =>\n sdk.fluidOsV0ListWidgetPackages({ client }),\n listDefinitions: (\n client: FluidOsClient,\n query?: FluidOsV0ListFluidOsdefinitionsData[\"query\"],\n ): RequiredApiResult<\n ReturnType<typeof sdk.fluidOsV0ListFluidOsdefinitions>\n > => sdk.fluidOsV0ListFluidOsdefinitions({ client, query }),\n listScreens: (\n client: FluidOsClient,\n definitionId: number,\n query?: FluidOsV0ListFluidOsscreensData[\"query\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0ListFluidOsscreens>> =>\n sdk.fluidOsV0ListFluidOsscreens({\n client,\n path: { definition_id: definitionId },\n query,\n }),\n getScreen: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0GetFluidOsscreen>> =>\n sdk.fluidOsV0GetFluidOsscreen({\n client,\n path: { definition_id: definitionId, id },\n }),\n createScreen: (\n client: FluidOsClient,\n definitionId: number,\n body: FluidOsV0CreateFluidOsscreenData[\"body\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0CreateFluidOsscreen>> =>\n sdk.fluidOsV0CreateFluidOsscreen({\n body,\n client,\n path: { definition_id: definitionId },\n }),\n updateScreen: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n body: FluidOsV0UpdateFluidOsscreenData[\"body\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0UpdateFluidOsscreen>> =>\n sdk.fluidOsV0UpdateFluidOsscreen({\n body,\n client,\n path: { definition_id: definitionId, id },\n }),\n deleteScreen: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0DeleteFluidOsscreen>> =>\n sdk.fluidOsV0DeleteFluidOsscreen({\n client,\n path: { definition_id: definitionId, id },\n }),\n listThemes: (\n client: FluidOsClient,\n definitionId: number,\n query?: FluidOsV0ListFluidOsthemesData[\"query\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0ListFluidOsthemes>> =>\n sdk.fluidOsV0ListFluidOsthemes({\n client,\n path: { definition_id: definitionId },\n query,\n }),\n createTheme: (\n client: FluidOsClient,\n definitionId: number,\n body: FluidOsV0CreateFluidOsthemeData[\"body\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0CreateFluidOstheme>> =>\n sdk.fluidOsV0CreateFluidOstheme({\n body,\n client,\n path: { definition_id: definitionId },\n }),\n updateTheme: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n body: FluidOsV0UpdateFluidOsthemeData[\"body\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0UpdateFluidOstheme>> =>\n sdk.fluidOsV0UpdateFluidOstheme({\n body,\n client,\n path: { definition_id: definitionId, id },\n }),\n deleteTheme: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0DeleteFluidOstheme>> =>\n sdk.fluidOsV0DeleteFluidOstheme({\n client,\n path: { definition_id: definitionId, id },\n }),\n listNavigations: (\n client: FluidOsClient,\n definitionId: number,\n query?: FluidOsV0ListFluidOsnavigationsData[\"query\"],\n ): RequiredApiResult<\n ReturnType<typeof sdk.fluidOsV0ListFluidOsnavigations>\n > =>\n sdk.fluidOsV0ListFluidOsnavigations({\n client,\n path: { definition_id: definitionId },\n query,\n }),\n createNavigation: (\n client: FluidOsClient,\n definitionId: number,\n body: FluidOsV0CreateFluidOsnavigationData[\"body\"],\n ): RequiredApiResult<\n ReturnType<typeof sdk.fluidOsV0CreateFluidOsnavigation>\n > =>\n sdk.fluidOsV0CreateFluidOsnavigation({\n body,\n client,\n path: { definition_id: definitionId },\n }),\n updateNavigation: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n body: FluidOsV0UpdateFluidOsnavigationData[\"body\"],\n ): RequiredApiResult<\n ReturnType<typeof sdk.fluidOsV0UpdateFluidOsnavigation>\n > =>\n sdk.fluidOsV0UpdateFluidOsnavigation({\n body,\n client,\n path: { definition_id: definitionId, id },\n }),\n deleteNavigation: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n ): RequiredApiResult<\n ReturnType<typeof sdk.fluidOsV0DeleteFluidOsnavigation>\n > =>\n sdk.fluidOsV0DeleteFluidOsnavigation({\n client,\n path: { definition_id: definitionId, id },\n }),\n listNavigationItems: (\n client: FluidOsClient,\n definitionId: number,\n navigationId: number,\n ): RequiredApiResult<\n ReturnType<typeof sdk.fluidOsV0ListFluidOsnavigationItems>\n > =>\n sdk.fluidOsV0ListFluidOsnavigationItems({\n client,\n path: { definition_id: definitionId, navigation_id: navigationId },\n }),\n createNavigationItem: (\n client: FluidOsClient,\n definitionId: number,\n navigationId: number,\n body: FluidOsV0CreateFluidOsnavigationItemData[\"body\"],\n ): RequiredApiResult<\n ReturnType<typeof sdk.fluidOsV0CreateFluidOsnavigationItem>\n > =>\n sdk.fluidOsV0CreateFluidOsnavigationItem({\n body,\n client,\n path: { definition_id: definitionId, navigation_id: navigationId },\n }),\n updateNavigationItem: (\n client: FluidOsClient,\n definitionId: number,\n navigationId: number,\n id: number,\n body: FluidOsV0UpdateFluidOsnavigationItemData[\"body\"],\n ): RequiredApiResult<\n ReturnType<typeof sdk.fluidOsV0UpdateFluidOsnavigationItem>\n > =>\n sdk.fluidOsV0UpdateFluidOsnavigationItem({\n body,\n client,\n path: {\n definition_id: definitionId,\n id,\n navigation_id: navigationId,\n },\n }),\n deleteNavigationItem: (\n client: FluidOsClient,\n definitionId: number,\n navigationId: number,\n id: number,\n ): RequiredApiResult<\n ReturnType<typeof sdk.fluidOsV0DeleteFluidOsnavigationItem>\n > =>\n sdk.fluidOsV0DeleteFluidOsnavigationItem({\n client,\n path: {\n definition_id: definitionId,\n id,\n navigation_id: navigationId,\n },\n }),\n listProfiles: (\n client: FluidOsClient,\n definitionId: number,\n query?: FluidOsV0ListFluidOsprofilesData[\"query\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0ListFluidOsprofiles>> =>\n sdk.fluidOsV0ListFluidOsprofiles({\n client,\n path: { definition_id: definitionId },\n query,\n }),\n createProfile: (\n client: FluidOsClient,\n definitionId: number,\n body: FluidOsV0CreateFluidOsprofileData[\"body\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0CreateFluidOsprofile>> =>\n sdk.fluidOsV0CreateFluidOsprofile({\n body,\n client,\n path: { definition_id: definitionId },\n }),\n updateProfile: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n body: FluidOsV0UpdateFluidOsprofileData[\"body\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0UpdateFluidOsprofile>> =>\n sdk.fluidOsV0UpdateFluidOsprofile({\n body,\n client,\n path: { definition_id: definitionId, id },\n }),\n deleteProfile: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0DeleteFluidOsprofile>> =>\n sdk.fluidOsV0DeleteFluidOsprofile({\n client,\n path: { definition_id: definitionId, id },\n }),\n listVersions: (\n client: FluidOsClient,\n definitionId: number,\n query?: FluidOsV0ListFluidOsversionsData[\"query\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0ListFluidOsversions>> =>\n sdk.fluidOsV0ListFluidOsversions({\n client,\n path: { definition_id: definitionId },\n query,\n }),\n createVersion: (\n client: FluidOsClient,\n definitionId: number,\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0CreateFluidOsversion>> =>\n sdk.fluidOsV0CreateFluidOsversion({\n client,\n path: { definition_id: definitionId },\n }),\n updateVersion: (\n client: FluidOsClient,\n definitionId: number,\n id: number,\n body: FluidOsV0UpdateFluidOsversionData[\"body\"],\n ): RequiredApiResult<ReturnType<typeof sdk.fluidOsV0UpdateFluidOsversion>> =>\n sdk.fluidOsV0UpdateFluidOsversion({\n body,\n client,\n path: { definition_id: definitionId, id },\n }),\n};\n","/**\n * Atomic file write utility.\n *\n * Uses a write-then-rename pattern so readers always see either the old\n * file or the complete new file — never a partially-written state.\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport { rename, unlink, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\n/**\n * Write a file atomically using a write-then-rename pattern.\n * Ensures readers always see either the old file or the complete new file.\n *\n * If `rename` fails after the temp file has been written, the temp file\n * is cleaned up on a best-effort basis before re-throwing the error.\n */\nexport async function atomicWriteFile(\n filePath: string,\n data: string,\n): Promise<void> {\n const dir = dirname(filePath);\n const tmp = join(dir, `.tmp-${randomBytes(6).toString(\"hex\")}`);\n try {\n await writeFile(tmp, data, \"utf-8\");\n await rename(tmp, filePath);\n } catch (err) {\n // Best-effort cleanup of the temp file\n await unlink(tmp).catch(() => {});\n throw err;\n }\n}\n","/**\n * Slug-to-ID mapping system for portal content sync.\n *\n * Maps human-readable slugs (derived from resource names) to API IDs,\n * enabling the file system to use readable directory/file names while\n * maintaining the link back to server-side resources.\n *\n * Persisted in `.portal-sync/mappings.json`.\n */\n\nimport { readFile, mkdir } from \"node:fs/promises\";\nimport { join, dirname } from \"node:path\";\n\nimport { atomicWriteFile } from \"./atomic-write.js\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Definition metadata stored at the top level of the mappings file. */\nexport interface DefinitionMapping {\n readonly name: string;\n readonly id: number;\n}\n\n/**\n * Resource types that support slug-to-ID mappings.\n * \"countries\" and \"ranks\" use display names as keys (not slugified).\n */\nexport type MappedResourceType =\n | \"screens\"\n | \"themes\"\n | \"navigations\"\n | \"profiles\"\n | \"countries\"\n | \"ranks\";\n\n/** Full mappings structure persisted to disk. */\nexport interface PortalMappings {\n readonly definition: DefinitionMapping;\n readonly screens: Record<string, number>;\n readonly themes: Record<string, number>;\n readonly navigations: Record<string, number>;\n readonly profiles: Record<string, number>;\n readonly countries: Record<string, number>;\n readonly ranks: Record<string, number>;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Runtime check that a parsed value has the expected PortalMappings shape. */\nfunction isMappings(value: unknown): value is PortalMappings {\n if (!value || typeof value !== \"object\") return false;\n const m = value as Record<string, unknown>;\n\n // Validate inner DefinitionMapping fields\n const def = m.definition as Record<string, unknown> | null | undefined;\n if (!def || typeof def !== \"object\") return false;\n if (typeof def.name !== \"string\" || typeof def.id !== \"number\") return false;\n\n return (\n typeof m.screens === \"object\" &&\n m.screens !== null &&\n typeof m.themes === \"object\" &&\n m.themes !== null &&\n typeof m.navigations === \"object\" &&\n m.navigations !== null &&\n typeof m.profiles === \"object\" &&\n m.profiles !== null &&\n typeof m.countries === \"object\" &&\n m.countries !== null &&\n typeof m.ranks === \"object\" &&\n m.ranks !== null\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Read / Write\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst MAPPINGS_FILE = \"mappings.json\";\n\n/**\n * Read the mappings file from the `.portal-sync/` directory.\n * Returns `null` if the file does not exist.\n */\nexport async function readMappings(\n portalSyncDir: string,\n): Promise<PortalMappings | null> {\n try {\n const filePath = join(portalSyncDir, MAPPINGS_FILE);\n const content = await readFile(filePath, \"utf-8\");\n const parsed: unknown = JSON.parse(content);\n if (!isMappings(parsed)) {\n throw new Error(`Malformed mappings file: ${filePath}`);\n }\n return parsed;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n return null;\n }\n throw err;\n }\n}\n\n/**\n * Write the mappings file to the `.portal-sync/` directory.\n * Creates the directory if it does not exist.\n */\nexport async function writeMappings(\n portalSyncDir: string,\n mappings: PortalMappings,\n): Promise<void> {\n const filePath = join(portalSyncDir, MAPPINGS_FILE);\n await mkdir(dirname(filePath), { recursive: true });\n await atomicWriteFile(filePath, JSON.stringify(mappings, null, 2) + \"\\n\");\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Slug derivation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Derive a filesystem-safe slug from a resource name.\n *\n * - Lowercases the name\n * - Replaces non-alphanumeric characters (except hyphens) with hyphens\n * - Collapses consecutive hyphens\n * - Trims leading/trailing hyphens\n *\n * If the derived slug collides with an existing slug in `existingSlugs`,\n * a numeric suffix is appended (e.g., `home-2`, `home-3`).\n */\nexport function deriveSlug(\n name: string,\n existingSlugs: ReadonlySet<string> = new Set(),\n): string {\n const base =\n name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\") || \"unnamed\";\n\n if (!existingSlugs.has(base)) {\n return base;\n }\n\n // Collision detected — append a numeric suffix\n let counter = 2;\n while (existingSlugs.has(`${base}-${counter}`)) {\n counter++;\n }\n return `${base}-${counter}`;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Lookup helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolve a slug to its server-side ID.\n * Returns `undefined` if the slug is not mapped.\n */\nexport function resolveSlugToId(\n mappings: PortalMappings,\n resourceType: MappedResourceType,\n slug: string,\n): number | undefined {\n return mappings[resourceType][slug];\n}\n\n/**\n * Resolve a server-side ID back to its slug.\n * Returns `undefined` if no slug maps to the given ID.\n */\nexport function resolveIdToSlug(\n mappings: PortalMappings,\n resourceType: MappedResourceType,\n id: number,\n): string | undefined {\n const entries = mappings[resourceType];\n for (const [slug, mappedId] of Object.entries(entries)) {\n if (mappedId === id) {\n return slug;\n }\n }\n return undefined;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Mutation helpers (return new objects — no mutation)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Add or update a mapping entry for a given resource type.\n * Returns a new `PortalMappings` object (immutable update).\n */\nexport function updateMapping(\n mappings: PortalMappings,\n resourceType: MappedResourceType,\n slug: string,\n id: number,\n): PortalMappings {\n return {\n ...mappings,\n [resourceType]: {\n ...mappings[resourceType],\n [slug]: id,\n },\n };\n}\n\n/**\n * Remove a mapping entry for a given resource type.\n * Returns a new `PortalMappings` object (immutable update).\n * If the slug does not exist, the original mappings are returned unchanged.\n */\nexport function removeMapping(\n mappings: PortalMappings,\n resourceType: MappedResourceType,\n slug: string,\n): PortalMappings {\n if (!(slug in mappings[resourceType])) {\n return mappings;\n }\n\n const { [slug]: _removed, ...rest } = mappings[resourceType];\n return {\n ...mappings,\n [resourceType]: rest,\n };\n}\n","/**\n * Hash-based snapshot system for portal content sync.\n *\n * Tracks file hashes to detect local changes since the last pull,\n * enabling efficient push operations that only send modified files.\n *\n * Persisted in `.portal-sync/snapshot.json`.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { readFile, readdir, mkdir, stat } from \"node:fs/promises\";\nimport { join, dirname, relative, sep } from \"node:path\";\n\nimport { atomicWriteFile } from \"./atomic-write.js\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Maximum number of concurrent file operations. */\nconst MAX_CONCURRENCY = 20;\n\n/** SHA-256 hex digest of a file's contents. */\nexport type FileHash = string;\n\n/** Map of relative file paths to their content hashes. */\nexport type FileHashMap = Record<string, FileHash>;\n\nexport interface SnapshotNetworkWidgetGrant {\n readonly widgetId: string;\n readonly widgetType: string;\n readonly packageId: string;\n readonly packageVersion: string;\n readonly capabilityVersion: string;\n}\n\nexport interface SnapshotWidgetCapabilityGrant extends SnapshotNetworkWidgetGrant {\n readonly capability: string;\n}\n\nexport type SnapshotNetworkWidgetGrantMap = Readonly<\n Record<string, readonly SnapshotNetworkWidgetGrant[]>\n>;\n\nexport type SnapshotWidgetCapabilityGrantMap = Readonly<\n Record<string, readonly SnapshotWidgetCapabilityGrant[]>\n>;\n\n/** Snapshot structure persisted to `.portal-sync/snapshot.json`. */\nexport interface Snapshot {\n /** Human-readable name of the portal definition. */\n readonly definition: string;\n /** Server-side ID of the portal definition. */\n readonly definition_id: number;\n /** ISO 8601 timestamp of when the snapshot was created. */\n readonly pulled_at: string;\n /** Map of relative file paths → SHA-256 hashes. */\n readonly files: FileHashMap;\n /** Network-enabled widget nodes present at the last successful sync. */\n readonly network_widget_grants?: SnapshotNetworkWidgetGrantMap;\n /** Sensitive widget capability grants present at the last successful sync. */\n readonly widget_capability_grants?: SnapshotWidgetCapabilityGrantMap;\n}\n\n/** Result of diffing current files against a snapshot. */\nexport interface SnapshotDiff {\n /** Files that exist on disk but not in the snapshot. */\n readonly new: readonly string[];\n /** Files that exist in both but have different hashes. */\n readonly changed: readonly string[];\n /** Files that exist in the snapshot but not on disk. */\n readonly deleted: readonly string[];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Run async tasks with bounded concurrency to avoid exhausting file descriptors.\n */\nasync function mapWithLimit<T, R>(\n items: readonly T[],\n limit: number,\n fn: (item: T) => Promise<R>,\n): Promise<R[]> {\n const results: R[] = new Array(items.length);\n let index = 0;\n\n async function worker(): Promise<void> {\n while (index < items.length) {\n const i = index++;\n results[i] = await fn(items[i]!);\n }\n }\n\n const workers = Array.from({ length: Math.min(limit, items.length) }, () =>\n worker(),\n );\n await Promise.all(workers);\n return results;\n}\n\n/** Runtime check that a parsed value has the expected Snapshot shape. */\nfunction isSnapshot(value: unknown): value is Snapshot {\n if (!value || typeof value !== \"object\") return false;\n const s = value as Record<string, unknown>;\n return (\n typeof s.definition === \"string\" &&\n typeof s.definition_id === \"number\" &&\n typeof s.pulled_at === \"string\" &&\n typeof s.files === \"object\" &&\n s.files !== null\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hashing\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Compute the SHA-256 hash of a file's contents.\n * Returns the hex-encoded digest.\n */\nexport async function computeFileHash(filePath: string): Promise<FileHash> {\n const content = await readFile(filePath);\n return createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Read / Write\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst SNAPSHOT_FILE = \"snapshot.json\";\n\n/**\n * Read the snapshot file from the `.portal-sync/` directory.\n * Returns `null` if the file does not exist.\n */\nexport async function readSnapshot(\n portalSyncDir: string,\n): Promise<Snapshot | null> {\n try {\n const filePath = join(portalSyncDir, SNAPSHOT_FILE);\n const content = await readFile(filePath, \"utf-8\");\n const parsed: unknown = JSON.parse(content);\n if (!isSnapshot(parsed)) {\n throw new Error(`Malformed snapshot file: ${filePath}`);\n }\n const snapshot = parsed as Snapshot;\n const widgetCapabilityGrants =\n snapshot.widget_capability_grants ??\n migrateLegacyNetworkWidgetGrants(snapshot.network_widget_grants);\n return {\n ...snapshot,\n ...(widgetCapabilityGrants === undefined\n ? {}\n : { widget_capability_grants: widgetCapabilityGrants }),\n };\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n return null;\n }\n throw err;\n }\n}\n\n/**\n * Write the snapshot file to the `.portal-sync/` directory.\n * Creates the directory if it does not exist.\n */\nexport async function writeSnapshot(\n portalSyncDir: string,\n snapshot: Snapshot,\n): Promise<void> {\n const filePath = join(portalSyncDir, SNAPSHOT_FILE);\n await mkdir(dirname(filePath), { recursive: true });\n await atomicWriteFile(filePath, JSON.stringify(snapshot, null, 2) + \"\\n\");\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Diff\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Recursively collect all files in a directory, returning paths\n * relative to `baseDir`.\n */\nasync function collectFiles(\n dir: string,\n baseDir: string = dir,\n): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true });\n const files: string[] = [];\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n\n // Skip .portal-sync directory\n if (entry.name === \".portal-sync\") continue;\n\n if (entry.isSymbolicLink()) {\n // Resolve symlink to determine if it points to a file or directory\n const realStat = await stat(fullPath);\n if (realStat.isDirectory()) {\n files.push(...(await collectFiles(fullPath, baseDir)));\n } else if (realStat.isFile()) {\n files.push(relative(baseDir, fullPath).split(sep).join(\"/\"));\n }\n } else if (entry.isDirectory()) {\n files.push(...(await collectFiles(fullPath, baseDir)));\n } else {\n files.push(relative(baseDir, fullPath).split(sep).join(\"/\"));\n }\n }\n\n return files;\n}\n\n/**\n * Compare the current portal directory contents against a snapshot.\n *\n * Returns lists of new, changed, and deleted files (relative paths).\n */\nexport async function diffAgainstSnapshot(\n portalDir: string,\n snapshot: Snapshot,\n): Promise<SnapshotDiff> {\n const currentFiles = await collectFiles(portalDir);\n\n const snapshotPaths = new Set(Object.keys(snapshot.files));\n\n const newFiles: string[] = [];\n const changedFiles: string[] = [];\n\n // Check current files against snapshot (bounded concurrency)\n await mapWithLimit(currentFiles, MAX_CONCURRENCY, async (filePath) => {\n const hash = await computeFileHash(join(portalDir, filePath));\n\n if (!snapshotPaths.has(filePath)) {\n newFiles.push(filePath);\n } else if (snapshot.files[filePath] !== hash) {\n changedFiles.push(filePath);\n }\n });\n\n // Find deleted files (in snapshot but not on disk)\n const currentSet = new Set(currentFiles);\n const deletedFiles = [...snapshotPaths].filter(\n (filePath) => !currentSet.has(filePath),\n );\n\n return {\n new: [...newFiles].sort(),\n changed: [...changedFiles].sort(),\n deleted: [...deletedFiles].sort(),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Build\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build a fresh snapshot from the current portal directory contents.\n *\n * Hashes every file in `portalDir` (excluding `.portal-sync/`)\n * and records the definition metadata.\n */\nexport async function buildSnapshot(\n portalDir: string,\n definitionName: string,\n definitionId: number,\n): Promise<Snapshot> {\n const files = await collectFiles(portalDir);\n\n const hashEntries = await mapWithLimit(\n files,\n MAX_CONCURRENCY,\n async (filePath) => {\n const hash = await computeFileHash(join(portalDir, filePath));\n return [filePath, hash] as const;\n },\n );\n\n // Sort entries for deterministic output\n hashEntries.sort(([a], [b]) => a.localeCompare(b));\n\n const fileHashes: Record<string, FileHash> = {};\n for (const [path, hash] of hashEntries) {\n fileHashes[path] = hash;\n }\n\n const widgetCapabilityGrants = await collectSnapshotWidgetCapabilityGrants(\n portalDir,\n files,\n );\n\n return {\n definition: definitionName,\n definition_id: definitionId,\n pulled_at: new Date().toISOString(),\n files: fileHashes,\n widget_capability_grants: widgetCapabilityGrants,\n network_widget_grants: selectLegacyNetworkWidgetGrants(\n widgetCapabilityGrants,\n ),\n };\n}\n\nexport async function collectSnapshotWidgetCapabilityGrants(\n portalDir: string,\n files: readonly string[],\n): Promise<SnapshotWidgetCapabilityGrantMap> {\n const screenFiles = files.filter(\n (file) => file.startsWith(\"screens/\") && file.endsWith(\".json\"),\n );\n const entries = await mapWithLimit(\n screenFiles,\n MAX_CONCURRENCY,\n async (file) => {\n try {\n const parsed = JSON.parse(\n await readFile(join(portalDir, file), \"utf8\"),\n ) as unknown;\n return [file, collectWidgetCapabilityGrants(parsed)] as const;\n } catch {\n return [file, []] as const;\n }\n },\n );\n return Object.fromEntries(entries.filter(([, grants]) => grants.length > 0));\n}\n\nexport async function collectSnapshotNetworkWidgetGrants(\n portalDir: string,\n files: readonly string[],\n): Promise<SnapshotNetworkWidgetGrantMap> {\n const screenFiles = files.filter(\n (file) => file.startsWith(\"screens/\") && file.endsWith(\".json\"),\n );\n const entries = await mapWithLimit(\n screenFiles,\n MAX_CONCURRENCY,\n async (file) => {\n try {\n const parsed = JSON.parse(\n await readFile(join(portalDir, file), \"utf8\"),\n ) as unknown;\n return [file, collectNetworkWidgetGrants(parsed)] as const;\n } catch {\n return [file, []] as const;\n }\n },\n );\n return Object.fromEntries(entries.filter(([, grants]) => grants.length > 0));\n}\n\nexport function collectWidgetCapabilityGrants(\n value: unknown,\n): SnapshotWidgetCapabilityGrant[] {\n const grants: SnapshotWidgetCapabilityGrant[] = [];\n const visit = (candidate: unknown): void => {\n if (!candidate || typeof candidate !== \"object\") return;\n if (Array.isArray(candidate)) {\n for (const item of candidate) visit(item);\n return;\n }\n const record = candidate as Record<string, unknown>;\n const capabilityGrants = asRecord(record.capabilityGrants);\n if (\n typeof record.id === \"string\" &&\n typeof record.type === \"string\" &&\n capabilityGrants\n ) {\n for (const [capability, rawGrant] of Object.entries(capabilityGrants)) {\n const grant = asRecord(rawGrant);\n if (\n typeof grant?.packageId === \"string\" &&\n typeof grant.packageVersion === \"string\" &&\n typeof grant.capabilityVersion === \"string\"\n ) {\n grants.push({\n capability,\n widgetId: record.id,\n widgetType: record.type,\n packageId: grant.packageId,\n packageVersion: grant.packageVersion,\n capabilityVersion: grant.capabilityVersion,\n });\n }\n }\n }\n for (const child of Object.values(record)) visit(child);\n };\n visit(value);\n return grants;\n}\n\nexport function collectNetworkWidgetGrants(\n value: unknown,\n): SnapshotNetworkWidgetGrant[] {\n return collectWidgetCapabilityGrants(value)\n .filter(({ capability }) => capability === \"networkAccess\")\n .map(({ capability: _capability, ...grant }) => grant);\n}\n\nexport function selectLegacyNetworkWidgetGrants(\n grants: SnapshotWidgetCapabilityGrantMap,\n): SnapshotNetworkWidgetGrantMap {\n return Object.fromEntries(\n Object.entries(grants).flatMap(([file, fileGrants]) => {\n const networkGrants = fileGrants\n .filter(({ capability }) => capability === \"networkAccess\")\n .map(({ capability: _capability, ...grant }) => grant);\n return networkGrants.length === 0 ? [] : [[file, networkGrants] as const];\n }),\n );\n}\n\nfunction migrateLegacyNetworkWidgetGrants(\n grants: SnapshotNetworkWidgetGrantMap | undefined,\n): SnapshotWidgetCapabilityGrantMap | undefined {\n if (!grants) return undefined;\n return Object.fromEntries(\n Object.entries(grants).map(([file, fileGrants]) => [\n file,\n fileGrants.map((grant) => ({ ...grant, capability: \"networkAccess\" })),\n ]),\n );\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n","// A is m x n. B is n x p. product is m x p.\nfunction multiplyMatrices (A, B) {\n\tlet m = A.length;\n\n\tif (!Array.isArray(A[0])) {\n\t\t// A is vector, convert to [[a, b, c, ...]]\n\t\tA = [A];\n\t}\n\n\tif (!Array.isArray(B[0])) {\n\t\t// B is vector, convert to [[a], [b], [c], ...]]\n\t\tB = B.map(x => [x]);\n\t}\n\n\tlet p = B[0].length;\n\tlet B_cols = B[0].map((_, i) => B.map(x => x[i])); // transpose B\n\tlet product = A.map(row => B_cols.map(col => {\n\t\tlet ret = 0;\n\n\t\tif (!Array.isArray(row)) {\n\t\t\tfor (let c of col) {\n\t\t\t\tret += row * c;\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tfor (let i = 0; i < row.length; i++) {\n\t\t\tret += row[i] * (col[i] || 0);\n\t\t}\n\n\t\treturn ret;\n\t}));\n\n\tif (m === 1) {\n\t\tproduct = product[0]; // Avoid [[a, b, c, ...]]\n\t}\n\n\tif (p === 1) {\n\t\treturn product.map(x => x[0]); // Avoid [[a], [b], [c], ...]]\n\t}\n\n\treturn product;\n}\n\n/**\n * Various utility functions\n */\n\n\n/**\n * Check if a value is a string (including a String object)\n * @param {*} str - Value to check\n * @returns {boolean}\n */\nfunction isString (str) {\n\treturn type(str) === \"string\";\n}\n\n/**\n * Determine the internal JavaScript [[Class]] of an object.\n * @param {*} o - Value to check\n * @returns {string}\n */\nfunction type (o) {\n\tlet str = Object.prototype.toString.call(o);\n\n\treturn (str.match(/^\\[object\\s+(.*?)\\]$/)[1] || \"\").toLowerCase();\n}\n\nfunction serializeNumber (n, {precision, unit }) {\n\tif (isNone(n)) {\n\t\treturn \"none\";\n\t}\n\n\treturn toPrecision(n, precision) + (unit ?? \"\");\n}\n\n/**\n * Check if a value corresponds to a none argument\n * @param {*} n - Value to check\n * @returns {boolean}\n */\nfunction isNone (n) {\n\treturn Number.isNaN(n) || (n instanceof Number && n?.none);\n}\n\n/**\n * Replace none values with 0\n */\nfunction skipNone (n) {\n\treturn isNone(n) ? 0 : n;\n}\n\n/**\n * Round a number to a certain number of significant digits\n * @param {number} n - The number to round\n * @param {number} precision - Number of significant digits\n */\nfunction toPrecision (n, precision) {\n\tif (n === 0) {\n\t\treturn 0;\n\t}\n\tlet integer = ~~n;\n\tlet digits = 0;\n\tif (integer && precision) {\n\t\tdigits = ~~Math.log10(Math.abs(integer)) + 1;\n\t}\n\tconst multiplier = 10.0 ** (precision - digits);\n\treturn Math.floor(n * multiplier + 0.5) / multiplier;\n}\n\nconst angleFactor = {\n\tdeg: 1,\n\tgrad: 0.9,\n\trad: 180 / Math.PI,\n\tturn: 360,\n};\n\n/**\n* Parse a CSS function, regardless of its name and arguments\n* @param String str String to parse\n* @return {{name, args, rawArgs}}\n*/\nfunction parseFunction (str) {\n\tif (!str) {\n\t\treturn;\n\t}\n\n\tstr = str.trim();\n\n\tconst isFunctionRegex = /^([a-z]+)\\((.+?)\\)$/i;\n\tconst isNumberRegex = /^-?[\\d.]+$/;\n\tconst unitValueRegex = /%|deg|g?rad|turn$/;\n\tconst singleArgument = /\\/?\\s*(none|[-\\w.]+(?:%|deg|g?rad|turn)?)/g;\n\tlet parts = str.match(isFunctionRegex);\n\n\tif (parts) {\n\t\t// It is a function, parse args\n\t\tlet args = [];\n\t\tparts[2].replace(singleArgument, ($0, rawArg) => {\n\t\t\tlet match = rawArg.match(unitValueRegex);\n\t\t\tlet arg = rawArg;\n\n\t\t\tif (match) {\n\t\t\t\tlet unit = match[0];\n\t\t\t\t// Drop unit from value\n\t\t\t\tlet unitlessArg = arg.slice(0, -unit.length);\n\n\t\t\t\tif (unit === \"%\") {\n\t\t\t\t\t// Convert percentages to 0-1 numbers\n\t\t\t\t\targ = new Number(unitlessArg / 100);\n\t\t\t\t\targ.type = \"<percentage>\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Multiply angle by appropriate factor for its unit\n\t\t\t\t\targ = new Number(unitlessArg * angleFactor[unit]);\n\t\t\t\t\targ.type = \"<angle>\";\n\t\t\t\t\targ.unit = unit;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (isNumberRegex.test(arg)) {\n\t\t\t\t// Convert numerical args to numbers\n\t\t\t\targ = new Number(arg);\n\t\t\t\targ.type = \"<number>\";\n\t\t\t}\n\t\t\telse if (arg === \"none\") {\n\t\t\t\targ = new Number(NaN);\n\t\t\t\targ.none = true;\n\t\t\t}\n\n\t\t\tif ($0.startsWith(\"/\")) {\n\t\t\t\t// It's alpha\n\t\t\t\targ = arg instanceof Number ? arg : new Number(arg);\n\t\t\t\targ.alpha = true;\n\t\t\t}\n\n\t\t\tif (typeof arg === \"object\" && arg instanceof Number) {\n\t\t\t\targ.raw = rawArg;\n\t\t\t}\n\n\t\t\targs.push(arg);\n\t\t});\n\n\t\treturn {\n\t\t\tname: parts[1].toLowerCase(),\n\t\t\trawName: parts[1],\n\t\t\trawArgs: parts[2],\n\t\t\t// An argument could be (as of css-color-4):\n\t\t\t// a number, percentage, degrees (hue), ident (in color())\n\t\t\targs,\n\t\t};\n\t}\n}\n\nfunction last (arr) {\n\treturn arr[arr.length - 1];\n}\n\nfunction interpolate (start, end, p) {\n\tif (isNaN(start)) {\n\t\treturn end;\n\t}\n\n\tif (isNaN(end)) {\n\t\treturn start;\n\t}\n\n\treturn start + (end - start) * p;\n}\n\nfunction interpolateInv (start, end, value) {\n\treturn (value - start) / (end - start);\n}\n\nfunction mapRange (from, to, value) {\n\treturn interpolate(to[0], to[1], interpolateInv(from[0], from[1], value));\n}\n\nfunction parseCoordGrammar (coordGrammars) {\n\treturn coordGrammars.map(coordGrammar => {\n\t\treturn coordGrammar.split(\"|\").map(type => {\n\t\t\ttype = type.trim();\n\t\t\tlet range = type.match(/^(<[a-z]+>)\\[(-?[.\\d]+),\\s*(-?[.\\d]+)\\]?$/);\n\n\t\t\tif (range) {\n\t\t\t\tlet ret = new String(range[1]);\n\t\t\t\tret.range = [+range[2], +range[3]];\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn type;\n\t\t});\n\t});\n}\n\n/**\n * Clamp value between the minimum and maximum\n * @param {number} min minimum value to return\n * @param {number} val the value to return if it is between min and max\n * @param {number} max maximum value to return\n * @returns number\n */\nfunction clamp (min, val, max) {\n\treturn Math.max(Math.min(max, val), min);\n}\n\n/**\n * Copy sign of one value to another.\n * @param {number} - to number to copy sign to\n * @param {number} - from number to copy sign from\n * @returns number\n */\nfunction copySign (to, from) {\n\treturn Math.sign(to) === Math.sign(from) ? to : -to;\n}\n\n/**\n * Perform pow on a signed number and copy sign to result\n * @param {number} - base the base number\n * @param {number} - exp the exponent\n * @returns number\n */\nfunction spow (base, exp) {\n\treturn copySign(Math.abs(base) ** exp, base);\n}\n\n/**\n * Perform a divide, but return zero if the numerator is zero\n * @param {number} n - the numerator\n * @param {number} d - the denominator\n * @returns number\n */\nfunction zdiv (n, d) {\n\treturn (d === 0) ? 0 : n / d;\n}\n\n/**\n * Perform a bisect on a sorted list and locate the insertion point for\n * a value in arr to maintain sorted order.\n * @param {number[]} arr - array of sorted numbers\n * @param {number} value - value to find insertion point for\n * @param {number} lo - used to specify a the low end of a subset of the list\n * @param {number} hi - used to specify a the high end of a subset of the list\n * @returns number\n */\nfunction bisectLeft (arr, value, lo = 0, hi = arr.length) {\n\twhile (lo < hi) {\n\t\tconst mid = (lo + hi) >> 1;\n\t\tif (arr[mid] < value) {\n\t\t\tlo = mid + 1;\n\t\t}\n\t\telse {\n\t\t\thi = mid;\n\t\t}\n\t}\n\treturn lo;\n}\n\nvar util = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tbisectLeft: bisectLeft,\n\tclamp: clamp,\n\tcopySign: copySign,\n\tinterpolate: interpolate,\n\tinterpolateInv: interpolateInv,\n\tisNone: isNone,\n\tisString: isString,\n\tlast: last,\n\tmapRange: mapRange,\n\tmultiplyMatrices: multiplyMatrices,\n\tparseCoordGrammar: parseCoordGrammar,\n\tparseFunction: parseFunction,\n\tserializeNumber: serializeNumber,\n\tskipNone: skipNone,\n\tspow: spow,\n\ttoPrecision: toPrecision,\n\ttype: type,\n\tzdiv: zdiv\n});\n\n/**\n * A class for adding deep extensibility to any piece of JS code\n */\nclass Hooks {\n\tadd (name, callback, first) {\n\t\tif (typeof arguments[0] != \"string\") {\n\t\t\t// Multiple hooks\n\t\t\tfor (var name in arguments[0]) {\n\t\t\t\tthis.add(name, arguments[0][name], arguments[1]);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t(Array.isArray(name) ? name : [name]).forEach(function (name) {\n\t\t\tthis[name] = this[name] || [];\n\n\t\t\tif (callback) {\n\t\t\t\tthis[name][first ? \"unshift\" : \"push\"](callback);\n\t\t\t}\n\t\t}, this);\n\t}\n\n\trun (name, env) {\n\t\tthis[name] = this[name] || [];\n\t\tthis[name].forEach(function (callback) {\n\t\t\tcallback.call(env && env.context ? env.context : env, env);\n\t\t});\n\t}\n}\n\n/**\n * The instance of {@link Hooks} used throughout Color.js\n */\nconst hooks = new Hooks();\n\n// Global defaults one may want to configure\nvar defaults = {\n\tgamut_mapping: \"css\",\n\tprecision: 5,\n\tdeltaE: \"76\", // Default deltaE method\n\tverbose: globalThis?.process?.env?.NODE_ENV?.toLowerCase() !== \"test\",\n\twarn: function warn (msg) {\n\t\tif (this.verbose) {\n\t\t\tglobalThis?.console?.warn?.(msg);\n\t\t}\n\t},\n};\n\nconst WHITES = {\n\t// for compatibility, the four-digit chromaticity-derived ones everyone else uses\n\tD50: [0.3457 / 0.3585, 1.00000, (1.0 - 0.3457 - 0.3585) / 0.3585],\n\tD65: [0.3127 / 0.3290, 1.00000, (1.0 - 0.3127 - 0.3290) / 0.3290],\n};\n\nfunction getWhite (name) {\n\tif (Array.isArray(name)) {\n\t\treturn name;\n\t}\n\n\treturn WHITES[name];\n}\n\n// Adapt XYZ from white point W1 to W2\nfunction adapt$2 (W1, W2, XYZ, options = {}) {\n\tW1 = getWhite(W1);\n\tW2 = getWhite(W2);\n\n\tif (!W1 || !W2) {\n\t\tthrow new TypeError(`Missing white point to convert ${!W1 ? \"from\" : \"\"}${!W1 && !W2 ? \"/\" : \"\"}${!W2 ? \"to\" : \"\"}`);\n\t}\n\n\tif (W1 === W2) {\n\t\t// Same whitepoints, no conversion needed\n\t\treturn XYZ;\n\t}\n\n\tlet env = {W1, W2, XYZ, options};\n\n\thooks.run(\"chromatic-adaptation-start\", env);\n\n\tif (!env.M) {\n\t\tif (env.W1 === WHITES.D65 && env.W2 === WHITES.D50) {\n\t\t\tenv.M = [\n\t\t\t\t[ 1.0479297925449969, 0.022946870601609652, -0.05019226628920524 ],\n\t\t\t\t[ 0.02962780877005599, 0.9904344267538799, -0.017073799063418826 ],\n\t\t\t\t[ -0.009243040646204504, 0.015055191490298152, 0.7518742814281371 ],\n\t\t\t];\n\t\t}\n\t\telse if (env.W1 === WHITES.D50 && env.W2 === WHITES.D65) {\n\n\t\t\tenv.M = [\n\t\t\t\t[ 0.955473421488075, -0.02309845494876471, 0.06325924320057072 ],\n\t\t\t\t[ -0.0283697093338637, 1.0099953980813041, 0.021041441191917323 ],\n\t\t\t\t[ 0.012314014864481998, -0.020507649298898964, 1.330365926242124 ],\n\t\t\t];\n\t\t}\n\t}\n\n\thooks.run(\"chromatic-adaptation-end\", env);\n\n\tif (env.M) {\n\t\treturn multiplyMatrices(env.M, env.XYZ);\n\t}\n\telse {\n\t\tthrow new TypeError(\"Only Bradford CAT with white points D50 and D65 supported for now.\");\n\t}\n}\n\nconst noneTypes = new Set([\"<number>\", \"<percentage>\", \"<angle>\"]);\n\n/**\n * Validates the coordinates of a color against a format's coord grammar and\n * maps the coordinates to the range or refRange of the coordinates.\n * @param {ColorSpace} space - Colorspace the coords are in\n * @param {object} format - the format object to validate against\n * @param {string} name - the name of the color function. e.g. \"oklab\" or \"color\"\n * @returns {object[]} - an array of type metadata for each coordinate\n */\nfunction coerceCoords (space, format, name, coords) {\n\tlet types = Object.entries(space.coords).map(([id, coordMeta], i) => {\n\t\tlet coordGrammar = format.coordGrammar[i];\n\t\tlet arg = coords[i];\n\t\tlet providedType = arg?.type;\n\n\t\t// Find grammar alternative that matches the provided type\n\t\t// Non-strict equals is intentional because we are comparing w/ string objects\n\t\tlet type;\n\t\tif (arg.none) {\n\t\t\ttype = coordGrammar.find(c => noneTypes.has(c));\n\t\t}\n\t\telse {\n\t\t\ttype = coordGrammar.find(c => c == providedType);\n\t\t}\n\n\t\t// Check that each coord conforms to its grammar\n\t\tif (!type) {\n\t\t\t// Type does not exist in the grammar, throw\n\t\t\tlet coordName = coordMeta.name || id;\n\t\t\tthrow new TypeError(`${providedType ?? arg.raw} not allowed for ${coordName} in ${name}()`);\n\t\t}\n\n\t\tlet fromRange = type.range;\n\n\t\tif (providedType === \"<percentage>\") {\n\t\t\tfromRange ||= [0, 1];\n\t\t}\n\n\t\tlet toRange = coordMeta.range || coordMeta.refRange;\n\n\t\tif (fromRange && toRange) {\n\t\t\tcoords[i] = mapRange(fromRange, toRange, coords[i]);\n\t\t}\n\n\t\treturn type;\n\t});\n\n\treturn types;\n}\n\n\n/**\n * Convert a CSS Color string to a color object\n * @param {string} str\n * @param {object} [options]\n * @param {object} [options.meta] - Object for additional information about the parsing\n * @returns {Color}\n */\nfunction parse (str, {meta} = {}) {\n\tlet env = {\"str\": String(str)?.trim()};\n\thooks.run(\"parse-start\", env);\n\n\tif (env.color) {\n\t\treturn env.color;\n\t}\n\n\tenv.parsed = parseFunction(env.str);\n\n\tif (env.parsed) {\n\t\t// Is a functional syntax\n\t\tlet name = env.parsed.name;\n\n\t\tif (name === \"color\") {\n\t\t\t// color() function\n\t\t\tlet id = env.parsed.args.shift();\n\t\t\t// Check against both <dashed-ident> and <ident> versions\n\t\t\tlet alternateId = id.startsWith(\"--\") ? id.substring(2) : `--${id}`;\n\t\t\tlet ids = [id, alternateId];\n\t\t\tlet alpha = env.parsed.rawArgs.indexOf(\"/\") > 0 ? env.parsed.args.pop() : 1;\n\n\t\t\tfor (let space of ColorSpace.all) {\n\t\t\t\tlet colorSpec = space.getFormat(\"color\");\n\n\t\t\t\tif (colorSpec) {\n\t\t\t\t\tif (ids.includes(colorSpec.id) || colorSpec.ids?.filter((specId) => ids.includes(specId)).length) {\n\t\t\t\t\t\t// From https://drafts.csswg.org/css-color-4/#color-function\n\t\t\t\t\t\t// If more <number>s or <percentage>s are provided than parameters that the colorspace takes, the excess <number>s at the end are ignored.\n\t\t\t\t\t\t// If less <number>s or <percentage>s are provided than parameters that the colorspace takes, the missing parameters default to 0. (This is particularly convenient for multichannel printers where the additional inks are spot colors or varnishes that most colors on the page won’t use.)\n\t\t\t\t\t\tconst coords = Object.keys(space.coords).map((_, i) => env.parsed.args[i] || 0);\n\n\t\t\t\t\t\tlet types;\n\n\t\t\t\t\t\tif (colorSpec.coordGrammar) {\n\t\t\t\t\t\t\ttypes = coerceCoords(space, colorSpec, \"color\", coords);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (meta) {\n\t\t\t\t\t\t\tObject.assign(meta, {formatId: \"color\", types});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (colorSpec.id.startsWith(\"--\") && !id.startsWith(\"--\")) {\n\t\t\t\t\t\t\tdefaults.warn(`${space.name} is a non-standard space and not currently supported in the CSS spec. ` +\n\t\t\t\t\t\t\t `Use prefixed color(${colorSpec.id}) instead of color(${id}).`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (id.startsWith(\"--\") && !colorSpec.id.startsWith(\"--\")) {\n\t\t\t\t\t\t\tdefaults.warn(`${space.name} is a standard space and supported in the CSS spec. ` +\n\t\t\t\t\t\t\t `Use color(${colorSpec.id}) instead of prefixed color(${id}).`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {spaceId: space.id, coords, alpha};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Not found\n\t\t\tlet didYouMean = \"\";\n\t\t\tlet registryId = id in ColorSpace.registry ? id : alternateId;\n\t\t\tif (registryId in ColorSpace.registry) {\n\t\t\t\t// Used color space id instead of color() id, these are often different\n\t\t\t\tlet cssId = ColorSpace.registry[registryId].formats?.color?.id;\n\n\t\t\t\tif (cssId) {\n\t\t\t\t\tdidYouMean = `Did you mean color(${cssId})?`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new TypeError(`Cannot parse color(${id}). ` + (didYouMean || \"Missing a plugin?\"));\n\t\t}\n\t\telse {\n\t\t\tfor (let space of ColorSpace.all) {\n\t\t\t\t// color space specific function\n\t\t\t\tlet format = space.getFormat(name);\n\t\t\t\tif (format && format.type === \"function\") {\n\t\t\t\t\tlet alpha = 1;\n\n\t\t\t\t\tif (format.lastAlpha || last(env.parsed.args).alpha) {\n\t\t\t\t\t\talpha = env.parsed.args.pop();\n\t\t\t\t\t}\n\n\t\t\t\t\tlet coords = env.parsed.args;\n\n\t\t\t\t\tlet types;\n\n\t\t\t\t\tif (format.coordGrammar) {\n\t\t\t\t\t\ttypes = coerceCoords(space, format, name, coords);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (meta) {\n\t\t\t\t\t\tObject.assign(meta, {formatId: format.name, types});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspaceId: space.id,\n\t\t\t\t\t\tcoords, alpha,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\t// Custom, colorspace-specific format\n\t\tfor (let space of ColorSpace.all) {\n\t\t\tfor (let formatId in space.formats) {\n\t\t\t\tlet format = space.formats[formatId];\n\n\t\t\t\tif (format.type !== \"custom\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (format.test && !format.test(env.str)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet color = format.parse(env.str);\n\n\t\t\t\tif (color) {\n\t\t\t\t\tcolor.alpha ??= 1;\n\n\t\t\t\t\tif (meta) {\n\t\t\t\t\t\tmeta.formatId = formatId;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn color;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// If we're here, we couldn't parse\n\tthrow new TypeError(`Could not parse ${str} as a color. Missing a plugin?`);\n}\n\n/**\n * Resolves a color reference (object or string) to a plain color object\n * @param {Color | {space, coords, alpha} | string | Array<Color | {space, coords, alpha} | string> } color\n * @returns {{space, coords, alpha} | Array<{space, coords, alpha}}>\n */\nfunction getColor (color) {\n\tif (Array.isArray(color)) {\n\t\treturn color.map(getColor);\n\t}\n\n\tif (!color) {\n\t\tthrow new TypeError(\"Empty color reference\");\n\t}\n\n\tif (isString(color)) {\n\t\tcolor = parse(color);\n\t}\n\n\t// Object fixup\n\tlet space = color.space || color.spaceId;\n\n\tif (!(space instanceof ColorSpace)) {\n\t\t// Convert string id to color space object\n\t\tcolor.space = ColorSpace.get(space);\n\t}\n\n\tif (color.alpha === undefined) {\n\t\tcolor.alpha = 1;\n\t}\n\n\treturn color;\n}\n\nconst ε$7 = .000075;\n\n/**\n * Class to represent a color space\n */\nclass ColorSpace {\n\tconstructor (options) {\n\t\tthis.id = options.id;\n\t\tthis.name = options.name;\n\t\tthis.base = options.base ? ColorSpace.get(options.base) : null;\n\t\tthis.aliases = options.aliases;\n\n\t\tif (this.base) {\n\t\t\tthis.fromBase = options.fromBase;\n\t\t\tthis.toBase = options.toBase;\n\t\t}\n\n\t\t// Coordinate metadata\n\n\t\tlet coords = options.coords ?? this.base.coords;\n\n\t\tfor (let name in coords) {\n\t\t\tif (!(\"name\" in coords[name])) {\n\t\t\t\tcoords[name].name = name;\n\t\t\t}\n\t\t}\n\t\tthis.coords = coords;\n\n\t\t// White point\n\n\t\tlet white = options.white ?? this.base.white ?? \"D65\";\n\t\tthis.white = getWhite(white);\n\n\t\t// Sort out formats\n\n\t\tthis.formats = options.formats ?? {};\n\n\t\tfor (let name in this.formats) {\n\t\t\tlet format = this.formats[name];\n\t\t\tformat.type ||= \"function\";\n\t\t\tformat.name ||= name;\n\t\t}\n\n\t\tif (!this.formats.color?.id) {\n\t\t\tthis.formats.color = {\n\t\t\t\t...this.formats.color ?? {},\n\t\t\t\tid: options.cssId || this.id,\n\t\t\t};\n\t\t}\n\n\t\t// Gamut space\n\n\t\tif (options.gamutSpace) {\n\t\t\t// Gamut space explicitly specified\n\t\t\tthis.gamutSpace = options.gamutSpace === \"self\" ? this : ColorSpace.get(options.gamutSpace);\n\t\t}\n\t\telse {\n\t\t\t// No gamut space specified, calculate a sensible default\n\t\t\tif (this.isPolar) {\n\t\t\t\t// Do not check gamut through polar coordinates\n\t\t\t\tthis.gamutSpace = this.base;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.gamutSpace = this;\n\t\t\t}\n\t\t}\n\n\t\t// Optimize inGamut for unbounded spaces\n\t\tif (this.gamutSpace.isUnbounded) {\n\t\t\tthis.inGamut = (coords, options) => {\n\t\t\t\treturn true;\n\t\t\t};\n\t\t}\n\n\t\t// Other stuff\n\t\tthis.referred = options.referred;\n\n\t\t// Compute ancestors and store them, since they will never change\n\t\tObject.defineProperty(this, \"path\", {\n\t\t\tvalue: getPath(this).reverse(),\n\t\t\twritable: false,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\n\t\thooks.run(\"colorspace-init-end\", this);\n\t}\n\n\tinGamut (coords, {epsilon = ε$7} = {}) {\n\t\tif (!this.equals(this.gamutSpace)) {\n\t\t\tcoords = this.to(this.gamutSpace, coords);\n\t\t\treturn this.gamutSpace.inGamut(coords, {epsilon});\n\t\t}\n\n\t\tlet coordMeta = Object.values(this.coords);\n\n\t\treturn coords.every((c, i) => {\n\t\t\tlet meta = coordMeta[i];\n\n\t\t\tif (meta.type !== \"angle\" && meta.range) {\n\t\t\t\tif (Number.isNaN(c)) {\n\t\t\t\t\t// NaN is always in gamut\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet [min, max] = meta.range;\n\t\t\t\treturn (min === undefined || c >= min - epsilon)\n\t\t\t\t && (max === undefined || c <= max + epsilon);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tget isUnbounded () {\n\t\treturn Object.values(this.coords).every(coord => !(\"range\" in coord));\n\t}\n\n\tget cssId () {\n\t\treturn this.formats?.color?.id || this.id;\n\t}\n\n\tget isPolar () {\n\t\tfor (let id in this.coords) {\n\t\t\tif (this.coords[id].type === \"angle\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tgetFormat (format) {\n\t\tif (typeof format === \"object\") {\n\t\t\tformat = processFormat(format, this);\n\t\t\treturn format;\n\t\t}\n\n\t\tlet ret;\n\t\tif (format === \"default\") {\n\t\t\t// Get first format\n\t\t\tret = Object.values(this.formats)[0];\n\t\t}\n\t\telse {\n\t\t\tret = this.formats[format];\n\t\t}\n\n\t\tif (ret) {\n\t\t\tret = processFormat(ret, this);\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Check if this color space is the same as another color space reference.\n\t * Allows proxying color space objects and comparing color spaces with ids.\n\t * @param {string | ColorSpace} space ColorSpace object or id to compare to\n\t * @returns {boolean}\n\t */\n\tequals (space) {\n\t\tif (!space) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn this === space || this.id === space || this.id === space.id;\n\t}\n\n\tto (space, coords) {\n\t\tif (arguments.length === 1) {\n\t\t\tconst color = getColor(space);\n\t\t\t[space, coords] = [color.space, color.coords];\n\t\t}\n\n\t\tspace = ColorSpace.get(space);\n\n\t\tif (this.equals(space)) {\n\t\t\t// Same space, no change needed\n\t\t\treturn coords;\n\t\t}\n\n\t\t// Convert NaN to 0, which seems to be valid in every coordinate of every color space\n\t\tcoords = coords.map(c => Number.isNaN(c) ? 0 : c);\n\n\t\t// Find connection space = lowest common ancestor in the base tree\n\t\tlet myPath = this.path;\n\t\tlet otherPath = space.path;\n\n\t\tlet connectionSpace, connectionSpaceIndex;\n\n\t\tfor (let i = 0; i < myPath.length; i++) {\n\t\t\tif (myPath[i].equals(otherPath[i])) {\n\t\t\t\tconnectionSpace = myPath[i];\n\t\t\t\tconnectionSpaceIndex = i;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!connectionSpace) {\n\t\t\t// This should never happen\n\t\t\tthrow new Error(`Cannot convert between color spaces ${this} and ${space}: no connection space was found`);\n\t\t}\n\n\t\t// Go up from current space to connection space\n\t\tfor (let i = myPath.length - 1; i > connectionSpaceIndex; i--) {\n\t\t\tcoords = myPath[i].toBase(coords);\n\t\t}\n\n\t\t// Go down from connection space to target space\n\t\tfor (let i = connectionSpaceIndex + 1; i < otherPath.length; i++) {\n\t\t\tcoords = otherPath[i].fromBase(coords);\n\t\t}\n\n\t\treturn coords;\n\t}\n\n\tfrom (space, coords) {\n\t\tif (arguments.length === 1) {\n\t\t\tconst color = getColor(space);\n\t\t\t[space, coords] = [color.space, color.coords];\n\t\t}\n\n\t\tspace = ColorSpace.get(space);\n\n\t\treturn space.to(this, coords);\n\t}\n\n\ttoString () {\n\t\treturn `${this.name} (${this.id})`;\n\t}\n\n\tgetMinCoords () {\n\t\tlet ret = [];\n\n\t\tfor (let id in this.coords) {\n\t\t\tlet meta = this.coords[id];\n\t\t\tlet range = meta.range || meta.refRange;\n\t\t\tret.push(range?.min ?? 0);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tstatic registry = {};\n\n\t// Returns array of unique color spaces\n\tstatic get all () {\n\t\treturn [...new Set(Object.values(ColorSpace.registry))];\n\t}\n\n\tstatic register (id, space) {\n\t\tif (arguments.length === 1) {\n\t\t\tspace = arguments[0];\n\t\t\tid = space.id;\n\t\t}\n\n\t\tspace = this.get(space);\n\n\t\tif (this.registry[id] && this.registry[id] !== space) {\n\t\t\tthrow new Error(`Duplicate color space registration: '${id}'`);\n\t\t}\n\t\tthis.registry[id] = space;\n\n\t\t// Register aliases when called without an explicit ID.\n\t\tif (arguments.length === 1 && space.aliases) {\n\t\t\tfor (let alias of space.aliases) {\n\t\t\t\tthis.register(alias, space);\n\t\t\t}\n\t\t}\n\n\t\treturn space;\n\t}\n\n\t/**\n\t * Lookup ColorSpace object by name\n\t * @param {ColorSpace | string} name\n\t */\n\tstatic get (space, ...alternatives) {\n\t\tif (!space || space instanceof ColorSpace) {\n\t\t\treturn space;\n\t\t}\n\n\t\tlet argType = type(space);\n\n\t\tif (argType === \"string\") {\n\t\t\t// It's a color space id\n\t\t\tlet ret = ColorSpace.registry[space.toLowerCase()];\n\n\t\t\tif (!ret) {\n\t\t\t\tthrow new TypeError(`No color space found with id = \"${space}\"`);\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tif (alternatives.length) {\n\t\t\treturn ColorSpace.get(...alternatives);\n\t\t}\n\n\t\tthrow new TypeError(`${space} is not a valid color space`);\n\t}\n\n\t/**\n\t * Get metadata about a coordinate of a color space\n\t *\n\t * @static\n\t * @param {Array | string} ref\n\t * @param {ColorSpace | string} [workingSpace]\n\t * @return {Object}\n\t */\n\tstatic resolveCoord (ref, workingSpace) {\n\t\tlet coordType = type(ref);\n\t\tlet space, coord;\n\n\t\tif (coordType === \"string\") {\n\t\t\tif (ref.includes(\".\")) {\n\t\t\t\t// Absolute coordinate\n\t\t\t\t[space, coord] = ref.split(\".\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Relative coordinate\n\t\t\t\t[space, coord] = [, ref];\n\t\t\t}\n\t\t}\n\t\telse if (Array.isArray(ref)) {\n\t\t\t[space, coord] = ref;\n\t\t}\n\t\telse {\n\t\t\t// Object\n\t\t\tspace = ref.space;\n\t\t\tcoord = ref.coordId;\n\t\t}\n\n\t\tspace = ColorSpace.get(space);\n\n\t\tif (!space) {\n\t\t\tspace = workingSpace;\n\t\t}\n\n\t\tif (!space) {\n\t\t\tthrow new TypeError(`Cannot resolve coordinate reference ${ref}: No color space specified and relative references are not allowed here`);\n\t\t}\n\n\t\tcoordType = type(coord);\n\n\t\tif (coordType === \"number\" || coordType === \"string\" && coord >= 0) {\n\t\t\t// Resolve numerical coord\n\t\t\tlet meta = Object.entries(space.coords)[coord];\n\n\t\t\tif (meta) {\n\t\t\t\treturn {space, id: meta[0], index: coord, ...meta[1]};\n\t\t\t}\n\t\t}\n\n\t\tspace = ColorSpace.get(space);\n\n\t\tlet normalizedCoord = coord.toLowerCase();\n\n\t\tlet i = 0;\n\t\tfor (let id in space.coords) {\n\t\t\tlet meta = space.coords[id];\n\n\t\t\tif (id.toLowerCase() === normalizedCoord || meta.name?.toLowerCase() === normalizedCoord) {\n\t\t\t\treturn {space, id, index: i, ...meta};\n\t\t\t}\n\n\t\t\ti++;\n\t\t}\n\n\t\tthrow new TypeError(`No \"${coord}\" coordinate found in ${space.name}. Its coordinates are: ${Object.keys(space.coords).join(\", \")}`);\n\t}\n\n\tstatic DEFAULT_FORMAT = {\n\t\ttype: \"functions\",\n\t\tname: \"color\",\n\t};\n}\n\nfunction getPath (space) {\n\tlet ret = [space];\n\n\tfor (let s = space; s = s.base;) {\n\t\tret.push(s);\n\t}\n\n\treturn ret;\n}\n\nfunction processFormat (format, {coords} = {}) {\n\tif (format.coords && !format.coordGrammar) {\n\t\tformat.type ||= \"function\";\n\t\tformat.name ||= \"color\";\n\n\t\t// Format has not been processed\n\t\tformat.coordGrammar = parseCoordGrammar(format.coords);\n\n\t\tlet coordFormats = Object.entries(coords).map(([id, coordMeta], i) => {\n\t\t\t// Preferred format for each coord is the first one\n\t\t\tlet outputType = format.coordGrammar[i][0];\n\n\t\t\tlet fromRange = coordMeta.range || coordMeta.refRange;\n\t\t\tlet toRange = outputType.range, suffix = \"\";\n\n\t\t\t// Non-strict equals intentional since outputType could be a string object\n\t\t\tif (outputType == \"<percentage>\") {\n\t\t\t\ttoRange = [0, 100];\n\t\t\t\tsuffix = \"%\";\n\t\t\t}\n\t\t\telse if (outputType == \"<angle>\") {\n\t\t\t\tsuffix = \"deg\";\n\t\t\t}\n\n\t\t\treturn {fromRange, toRange, suffix};\n\t\t});\n\n\t\tformat.serializeCoords = (coords, precision) => {\n\t\t\treturn coords.map((c, i) => {\n\t\t\t\tlet {fromRange, toRange, suffix} = coordFormats[i];\n\n\t\t\t\tif (fromRange && toRange) {\n\t\t\t\t\tc = mapRange(fromRange, toRange, c);\n\t\t\t\t}\n\n\t\t\t\tc = serializeNumber(c, {precision, unit: suffix});\n\n\t\t\t\treturn c;\n\t\t\t});\n\t\t};\n\t}\n\n\treturn format;\n}\n\nvar xyz_d65 = new ColorSpace({\n\tid: \"xyz-d65\",\n\tname: \"XYZ D65\",\n\tcoords: {\n\t\tx: {name: \"X\"},\n\t\ty: {name: \"Y\"},\n\t\tz: {name: \"Z\"},\n\t},\n\twhite: \"D65\",\n\tformats: {\n\t\tcolor: {\n\t\t\tids: [\"xyz-d65\", \"xyz\"],\n\t\t},\n\t},\n\taliases: [\"xyz\"],\n});\n\n/**\n * Convenience class for RGB color spaces\n * @extends {ColorSpace}\n */\nclass RGBColorSpace extends ColorSpace {\n\t/**\n\t * Creates a new RGB ColorSpace.\n\t * If coords are not specified, they will use the default RGB coords.\n\t * Instead of `fromBase()` and `toBase()` functions,\n\t * you can specify to/from XYZ matrices and have `toBase()` and `fromBase()` automatically generated.\n\t * @param {*} options - Same options as {@link ColorSpace} plus:\n\t * @param {number[][]} options.toXYZ_M - Matrix to convert to XYZ\n\t * @param {number[][]} options.fromXYZ_M - Matrix to convert from XYZ\n\t */\n\tconstructor (options) {\n\t\tif (!options.coords) {\n\t\t\toptions.coords = {\n\t\t\t\tr: {\n\t\t\t\t\trange: [0, 1],\n\t\t\t\t\tname: \"Red\",\n\t\t\t\t},\n\t\t\t\tg: {\n\t\t\t\t\trange: [0, 1],\n\t\t\t\t\tname: \"Green\",\n\t\t\t\t},\n\t\t\t\tb: {\n\t\t\t\t\trange: [0, 1],\n\t\t\t\t\tname: \"Blue\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (!options.base) {\n\t\t\toptions.base = xyz_d65;\n\t\t}\n\n\t\tif (options.toXYZ_M && options.fromXYZ_M) {\n\t\t\toptions.toBase ??= rgb => {\n\t\t\t\tlet xyz = multiplyMatrices(options.toXYZ_M, rgb);\n\n\t\t\t\tif (this.white !== this.base.white) {\n\t\t\t\t\t// Perform chromatic adaptation\n\t\t\t\t\txyz = adapt$2(this.white, this.base.white, xyz);\n\t\t\t\t}\n\n\t\t\t\treturn xyz;\n\t\t\t};\n\n\t\t\toptions.fromBase ??= xyz => {\n\t\t\t\txyz = adapt$2(this.base.white, this.white, xyz);\n\t\t\t\treturn multiplyMatrices(options.fromXYZ_M, xyz);\n\t\t\t};\n\t\t}\n\n\t\toptions.referred ??= \"display\";\n\n\t\tsuper(options);\n\t}\n}\n\n/**\n * Get the coordinates of a color in any color space\n * @param {Color} color\n * @param {string | ColorSpace} [space = color.space] The color space to convert to. Defaults to the color's current space\n * @returns {number[]} The color coordinates in the given color space\n */\nfunction getAll (color, space) {\n\tcolor = getColor(color);\n\n\tif (!space || color.space.equals(space)) {\n\t\t// No conversion needed\n\t\treturn color.coords.slice();\n\t}\n\n\tspace = ColorSpace.get(space);\n\treturn space.from(color);\n}\n\nfunction get (color, prop) {\n\tcolor = getColor(color);\n\n\tlet {space, index} = ColorSpace.resolveCoord(prop, color.space);\n\tlet coords = getAll(color, space);\n\treturn coords[index];\n}\n\nfunction setAll (color, space, coords) {\n\tcolor = getColor(color);\n\n\tspace = ColorSpace.get(space);\n\tcolor.coords = space.to(color.space, coords);\n\treturn color;\n}\n\nsetAll.returns = \"color\";\n\n// Set properties and return current instance\nfunction set (color, prop, value) {\n\tcolor = getColor(color);\n\n\tif (arguments.length === 2 && type(arguments[1]) === \"object\") {\n\t\t// Argument is an object literal\n\t\tlet object = arguments[1];\n\t\tfor (let p in object) {\n\t\t\tset(color, p, object[p]);\n\t\t}\n\t}\n\telse {\n\t\tif (typeof value === \"function\") {\n\t\t\tvalue = value(get(color, prop));\n\t\t}\n\n\t\tlet {space, index} = ColorSpace.resolveCoord(prop, color.space);\n\t\tlet coords = getAll(color, space);\n\t\tcoords[index] = value;\n\t\tsetAll(color, space, coords);\n\t}\n\n\treturn color;\n}\n\nset.returns = \"color\";\n\nvar XYZ_D50 = new ColorSpace({\n\tid: \"xyz-d50\",\n\tname: \"XYZ D50\",\n\twhite: \"D50\",\n\tbase: xyz_d65,\n\tfromBase: coords => adapt$2(xyz_d65.white, \"D50\", coords),\n\ttoBase: coords => adapt$2(\"D50\", xyz_d65.white, coords),\n});\n\n// κ * ε = 2^3 = 8\nconst ε$6 = 216 / 24389; // 6^3/29^3 == (24/116)^3\nconst ε3$1 = 24 / 116;\nconst κ$4 = 24389 / 27; // 29^3/3^3\n\nlet white$4 = WHITES.D50;\n\nvar lab = new ColorSpace({\n\tid: \"lab\",\n\tname: \"Lab\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 100],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t\ta: {\n\t\t\trefRange: [-125, 125],\n\t\t},\n\t\tb: {\n\t\t\trefRange: [-125, 125],\n\t\t},\n\t},\n\n\t// Assuming XYZ is relative to D50, convert to CIE Lab\n\t// from CIE standard, which now defines these as a rational fraction\n\twhite: white$4,\n\n\tbase: XYZ_D50,\n\t// Convert D50-adapted XYX to Lab\n\t// CIE 15.3:2004 section 8.2.1.1\n\tfromBase (XYZ) {\n\t\t// compute xyz, which is XYZ scaled relative to reference white\n\t\tlet xyz = XYZ.map((value, i) => value / white$4[i]);\n\n\t\t// now compute f\n\t\tlet f = xyz.map(value => value > ε$6 ? Math.cbrt(value) : (κ$4 * value + 16) / 116);\n\n\t\treturn [\n\t\t\t(116 * f[1]) - 16, // L\n\t\t\t500 * (f[0] - f[1]), // a\n\t\t\t200 * (f[1] - f[2]), // b\n\t\t];\n\t},\n\t// Convert Lab to D50-adapted XYZ\n\t// Same result as CIE 15.3:2004 Appendix D although the derivation is different\n\t// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\ttoBase (Lab) {\n\t\t// compute f, starting with the luminance-related term\n\t\tlet f = [];\n\t\tf[1] = (Lab[0] + 16) / 116;\n\t\tf[0] = Lab[1] / 500 + f[1];\n\t\tf[2] = f[1] - Lab[2] / 200;\n\n\t\t// compute xyz\n\t\tlet xyz = [\n\t\t\tf[0] > ε3$1 ? Math.pow(f[0], 3) : (116 * f[0] - 16) / κ$4,\n\t\t\tLab[0] > 8 ? Math.pow((Lab[0] + 16) / 116, 3) : Lab[0] / κ$4,\n\t\t\tf[2] > ε3$1 ? Math.pow(f[2], 3) : (116 * f[2] - 16) / κ$4,\n\t\t];\n\n\t\t// Compute XYZ by scaling xyz by reference white\n\t\treturn xyz.map((value, i) => value * white$4[i]);\n\t},\n\n\tformats: {\n\t\t\"lab\": {\n\t\t\tcoords: [\"<number> | <percentage>\", \"<number> | <percentage>[-1,1]\", \"<number> | <percentage>[-1,1]\"],\n\t\t},\n\t},\n});\n\nfunction constrain (angle) {\n\treturn ((angle % 360) + 360) % 360;\n}\n\nfunction adjust (arc, angles) {\n\tif (arc === \"raw\") {\n\t\treturn angles;\n\t}\n\n\tlet [a1, a2] = angles.map(constrain);\n\n\tlet angleDiff = a2 - a1;\n\n\tif (arc === \"increasing\") {\n\t\tif (angleDiff < 0) {\n\t\t\ta2 += 360;\n\t\t}\n\t}\n\telse if (arc === \"decreasing\") {\n\t\tif (angleDiff > 0) {\n\t\t\ta1 += 360;\n\t\t}\n\t}\n\telse if (arc === \"longer\") {\n\t\tif (-180 < angleDiff && angleDiff < 180) {\n\t\t\tif (angleDiff > 0) {\n\t\t\t\ta1 += 360;\n\t\t\t}\n\t\t\telse {\n\t\t\t\ta2 += 360;\n\t\t\t}\n\t\t}\n\t}\n\telse if (arc === \"shorter\") {\n\t\tif (angleDiff > 180) {\n\t\t\ta1 += 360;\n\t\t}\n\t\telse if (angleDiff < -180) {\n\t\t\ta2 += 360;\n\t\t}\n\t}\n\n\treturn [a1, a2];\n}\n\nvar lch = new ColorSpace({\n\tid: \"lch\",\n\tname: \"LCH\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 100],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t\tc: {\n\t\t\trefRange: [0, 150],\n\t\t\tname: \"Chroma\",\n\t\t},\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t},\n\n\tbase: lab,\n\tfromBase (Lab) {\n\t\t// Convert to polar form\n\t\tlet [L, a, b] = Lab;\n\t\tlet hue;\n\t\tconst ε = 0.02;\n\n\t\tif (Math.abs(a) < ε && Math.abs(b) < ε) {\n\t\t\thue = NaN;\n\t\t}\n\t\telse {\n\t\t\thue = Math.atan2(b, a) * 180 / Math.PI;\n\t\t}\n\n\t\treturn [\n\t\t\tL, // L is still L\n\t\t\tMath.sqrt(a ** 2 + b ** 2), // Chroma\n\t\t\tconstrain(hue), // Hue, in degrees [0 to 360)\n\t\t];\n\t},\n\ttoBase (LCH) {\n\t\t// Convert from polar form\n\t\tlet [Lightness, Chroma, Hue] = LCH;\n\t\t// Clamp any negative Chroma\n\t\tif (Chroma < 0) {\n\t\t\tChroma = 0;\n\t\t}\n\t\t// Deal with NaN Hue\n\t\tif (isNaN(Hue)) {\n\t\t\tHue = 0;\n\t\t}\n\t\treturn [\n\t\t\tLightness, // L is still L\n\t\t\tChroma * Math.cos(Hue * Math.PI / 180), // a\n\t\t\tChroma * Math.sin(Hue * Math.PI / 180), // b\n\t\t];\n\t},\n\n\tformats: {\n\t\t\"lch\": {\n\t\t\tcoords: [\"<number> | <percentage>\", \"<number> | <percentage>\", \"<number> | <angle>\"],\n\t\t},\n\t},\n});\n\n// deltaE2000 is a statistically significant improvement\n// and is recommended by the CIE and Idealliance\n// especially for color differences less than 10 deltaE76\n// but is wicked complicated\n// and many implementations have small errors!\n// DeltaE2000 is also discontinuous; in case this\n// matters to you, use deltaECMC instead.\n\nconst Gfactor = 25 ** 7;\nconst π$1 = Math.PI;\nconst r2d = 180 / π$1;\nconst d2r$1 = π$1 / 180;\n\nfunction pow7 (x) {\n\t// Faster than x ** 7 or Math.pow(x, 7)\n\n\tconst x2 = x * x;\n\tconst x7 = x2 * x2 * x2 * x;\n\n\treturn x7;\n}\n\nfunction deltaE2000 (color, sample, {kL = 1, kC = 1, kH = 1} = {}) {\n\t[color, sample] = getColor([color, sample]);\n\n\t// Given this color as the reference\n\t// and the function parameter as the sample,\n\t// calculate deltaE 2000.\n\n\t// This implementation assumes the parametric\n\t// weighting factors kL, kC and kH\n\t// for the influence of viewing conditions\n\t// are all 1, as sadly seems typical.\n\t// kL should be increased for lightness texture or noise\n\t// and kC increased for chroma noise\n\n\tlet [L1, a1, b1] = lab.from(color);\n\tlet C1 = lch.from(lab, [L1, a1, b1])[1];\n\tlet [L2, a2, b2] = lab.from(sample);\n\tlet C2 = lch.from(lab, [L2, a2, b2])[1];\n\n\t// Check for negative Chroma,\n\t// which might happen through\n\t// direct user input of LCH values\n\n\tif (C1 < 0) {\n\t\tC1 = 0;\n\t}\n\tif (C2 < 0) {\n\t\tC2 = 0;\n\t}\n\n\tlet Cbar = (C1 + C2) / 2; // mean Chroma\n\n\t// calculate a-axis asymmetry factor from mean Chroma\n\t// this turns JND ellipses for near-neutral colors back into circles\n\tlet C7 = pow7(Cbar);\n\n\tlet G = 0.5 * (1 - Math.sqrt(C7 / (C7 + Gfactor)));\n\n\t// scale a axes by asymmetry factor\n\t// this by the way is why there is no Lab2000 colorspace\n\tlet adash1 = (1 + G) * a1;\n\tlet adash2 = (1 + G) * a2;\n\n\t// calculate new Chroma from scaled a and original b axes\n\tlet Cdash1 = Math.sqrt(adash1 ** 2 + b1 ** 2);\n\tlet Cdash2 = Math.sqrt(adash2 ** 2 + b2 ** 2);\n\n\t// calculate new hues, with zero hue for true neutrals\n\t// and in degrees, not radians\n\n\tlet h1 = (adash1 === 0 && b1 === 0) ? 0 : Math.atan2(b1, adash1);\n\tlet h2 = (adash2 === 0 && b2 === 0) ? 0 : Math.atan2(b2, adash2);\n\n\tif (h1 < 0) {\n\t\th1 += 2 * π$1;\n\t}\n\tif (h2 < 0) {\n\t\th2 += 2 * π$1;\n\t}\n\n\th1 *= r2d;\n\th2 *= r2d;\n\n\t// Lightness and Chroma differences; sign matters\n\tlet ΔL = L2 - L1;\n\tlet ΔC = Cdash2 - Cdash1;\n\n\t// Hue difference, getting the sign correct\n\tlet hdiff = h2 - h1;\n\tlet hsum = h1 + h2;\n\tlet habs = Math.abs(hdiff);\n\tlet Δh;\n\n\tif (Cdash1 * Cdash2 === 0) {\n\t\tΔh = 0;\n\t}\n\telse if (habs <= 180) {\n\t\tΔh = hdiff;\n\t}\n\telse if (hdiff > 180) {\n\t\tΔh = hdiff - 360;\n\t}\n\telse if (hdiff < -180) {\n\t\tΔh = hdiff + 360;\n\t}\n\telse {\n\t\tdefaults.warn(\"the unthinkable has happened\");\n\t}\n\n\t// weighted Hue difference, more for larger Chroma\n\tlet ΔH = 2 * Math.sqrt(Cdash2 * Cdash1) * Math.sin(Δh * d2r$1 / 2);\n\n\t// calculate mean Lightness and Chroma\n\tlet Ldash = (L1 + L2) / 2;\n\tlet Cdash = (Cdash1 + Cdash2) / 2;\n\tlet Cdash7 = pow7(Cdash);\n\n\t// Compensate for non-linearity in the blue region of Lab.\n\t// Four possibilities for hue weighting factor,\n\t// depending on the angles, to get the correct sign\n\tlet hdash;\n\tif (Cdash1 * Cdash2 === 0) {\n\t\thdash = hsum; // which should be zero\n\t}\n\telse if (habs <= 180) {\n\t\thdash = hsum / 2;\n\t}\n\telse if (hsum < 360) {\n\t\thdash = (hsum + 360) / 2;\n\t}\n\telse {\n\t\thdash = (hsum - 360) / 2;\n\t}\n\n\t// positional corrections to the lack of uniformity of CIELAB\n\t// These are all trying to make JND ellipsoids more like spheres\n\n\t// SL Lightness crispening factor\n\t// a background with L=50 is assumed\n\tlet lsq = (Ldash - 50) ** 2;\n\tlet SL = 1 + ((0.015 * lsq) / Math.sqrt(20 + lsq));\n\n\t// SC Chroma factor, similar to those in CMC and deltaE 94 formulae\n\tlet SC = 1 + 0.045 * Cdash;\n\n\t// Cross term T for blue non-linearity\n\tlet T = 1;\n\tT -= (0.17 * Math.cos(( hdash - 30) * d2r$1));\n\tT += (0.24 * Math.cos( 2 * hdash * d2r$1));\n\tT += (0.32 * Math.cos(((3 * hdash) + 6) * d2r$1));\n\tT -= (0.20 * Math.cos(((4 * hdash) - 63) * d2r$1));\n\n\t// SH Hue factor depends on Chroma,\n\t// as well as adjusted hue angle like deltaE94.\n\tlet SH = 1 + 0.015 * Cdash * T;\n\n\t// RT Hue rotation term compensates for rotation of JND ellipses\n\t// and Munsell constant hue lines\n\t// in the medium-high Chroma blue region\n\t// (Hue 225 to 315)\n\tlet Δθ = 30 * Math.exp(-1 * (((hdash - 275) / 25) ** 2));\n\tlet RC = 2 * Math.sqrt(Cdash7 / (Cdash7 + Gfactor));\n\tlet RT = -1 * Math.sin(2 * Δθ * d2r$1) * RC;\n\n\t// Finally calculate the deltaE, term by term as root sume of squares\n\tlet dE = (ΔL / (kL * SL)) ** 2;\n\tdE += (ΔC / (kC * SC)) ** 2;\n\tdE += (ΔH / (kH * SH)) ** 2;\n\tdE += RT * (ΔC / (kC * SC)) * (ΔH / (kH * SH));\n\treturn Math.sqrt(dE);\n\t// Yay!!!\n}\n\n// Recalculated for consistent reference white\n// see https://github.com/w3c/csswg-drafts/issues/6642#issuecomment-943521484\nconst XYZtoLMS_M$1 = [\n\t[ 0.8190224379967030, 0.3619062600528904, -0.1288737815209879 ],\n\t[ 0.0329836539323885, 0.9292868615863434, 0.0361446663506424 ],\n\t[ 0.0481771893596242, 0.2642395317527308, 0.6335478284694309 ],\n];\n// inverse of XYZtoLMS_M\nconst LMStoXYZ_M$1 = [\n\t[ 1.2268798758459243, -0.5578149944602171, 0.2813910456659647 ],\n\t[ -0.0405757452148008, 1.1122868032803170, -0.0717110580655164 ],\n\t[ -0.0763729366746601, -0.4214933324022432, 1.5869240198367816 ],\n];\nconst LMStoLab_M = [\n\t[ 0.2104542683093140, 0.7936177747023054, -0.0040720430116193 ],\n\t[ 1.9779985324311684, -2.4285922420485799, 0.4505937096174110 ],\n\t[ 0.0259040424655478, 0.7827717124575296, -0.8086757549230774 ],\n];\n// LMStoIab_M inverted\nconst LabtoLMS_M = [\n\t[ 1.0000000000000000, 0.3963377773761749, 0.2158037573099136 ],\n\t[ 1.0000000000000000, -0.1055613458156586, -0.0638541728258133 ],\n\t[ 1.0000000000000000, -0.0894841775298119, -1.2914855480194092 ],\n];\n\nvar OKLab = new ColorSpace({\n\tid: \"oklab\",\n\tname: \"Oklab\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t\ta: {\n\t\t\trefRange: [-0.4, 0.4],\n\t\t},\n\t\tb: {\n\t\t\trefRange: [-0.4, 0.4],\n\t\t},\n\t},\n\n\t// Note that XYZ is relative to D65\n\twhite: \"D65\",\n\tbase: xyz_d65,\n\tfromBase (XYZ) {\n\t\t// move to LMS cone domain\n\t\tlet LMS = multiplyMatrices(XYZtoLMS_M$1, XYZ);\n\n\t\t// non-linearity\n\t\tlet LMSg = LMS.map(val => Math.cbrt(val));\n\n\t\treturn multiplyMatrices(LMStoLab_M, LMSg);\n\n\t},\n\ttoBase (OKLab) {\n\t\t// move to LMS cone domain\n\t\tlet LMSg = multiplyMatrices(LabtoLMS_M, OKLab);\n\n\t\t// restore linearity\n\t\tlet LMS = LMSg.map(val => val ** 3);\n\n\t\treturn multiplyMatrices(LMStoXYZ_M$1, LMS);\n\t},\n\n\tformats: {\n\t\t\"oklab\": {\n\t\t\tcoords: [\"<percentage> | <number>\", \"<number> | <percentage>[-1,1]\", \"<number> | <percentage>[-1,1]\"],\n\t\t},\n\t},\n});\n\n// More accurate color-difference formulae\n// than the simple 1976 Euclidean distance in CIE Lab\n\n\nfunction deltaEOK (color, sample) {\n\t[color, sample] = getColor([color, sample]);\n\n\t// Given this color as the reference\n\t// and a sample,\n\t// calculate deltaEOK, term by term as root sum of squares\n\tlet [L1, a1, b1] = OKLab.from(color);\n\tlet [L2, a2, b2] = OKLab.from(sample);\n\tlet ΔL = L1 - L2;\n\tlet Δa = a1 - a2;\n\tlet Δb = b1 - b2;\n\treturn Math.sqrt(ΔL ** 2 + Δa ** 2 + Δb ** 2);\n}\n\nconst ε$5 = .000075;\n\n/**\n * Check if a color is in gamut of either its own or another color space\n * @return {Boolean} Is the color in gamut?\n */\nfunction inGamut (color, space, {epsilon = ε$5} = {}) {\n\tcolor = getColor(color);\n\n\tif (!space) {\n\t\tspace = color.space;\n\t}\n\n\tspace = ColorSpace.get(space);\n\tlet coords = color.coords;\n\n\tif (space !== color.space) {\n\t\tcoords = space.from(color);\n\t}\n\n\treturn space.inGamut(coords, {epsilon});\n}\n\nfunction clone (color) {\n\treturn {\n\t\tspace: color.space,\n\t\tcoords: color.coords.slice(),\n\t\talpha: color.alpha,\n\t};\n}\n\n/**\n * Euclidean distance of colors in an arbitrary color space\n */\nfunction distance (color1, color2, space = \"lab\") {\n\tspace = ColorSpace.get(space);\n\n\t// Assume getColor() is called on color in space.from()\n\tlet coords1 = space.from(color1);\n\tlet coords2 = space.from(color2);\n\n\treturn Math.sqrt(coords1.reduce((acc, c1, i) => {\n\t\tlet c2 = coords2[i];\n\t\tif (isNaN(c1) || isNaN(c2)) {\n\t\t\treturn acc;\n\t\t}\n\n\t\treturn acc + (c2 - c1) ** 2;\n\t}, 0));\n}\n\nfunction deltaE76 (color, sample) {\n\t// Assume getColor() is called in the distance function\n\treturn distance(color, sample, \"lab\");\n}\n\n// More accurate color-difference formulae\n// than the simple 1976 Euclidean distance in Lab\n\n// CMC by the Color Measurement Committee of the\n// Bradford Society of Dyeists and Colorsts, 1994.\n// Uses LCH rather than Lab,\n// with different weights for L, C and H differences\n// A nice increase in accuracy for modest increase in complexity\nconst π = Math.PI;\nconst d2r = π / 180;\n\nfunction deltaECMC (color, sample, {l = 2, c = 1} = {}) {\n\t[color, sample] = getColor([color, sample]);\n\n\t// Given this color as the reference\n\t// and a sample,\n\t// calculate deltaE CMC.\n\n\t// This implementation assumes the parametric\n\t// weighting factors l:c are 2:1\n\t// which is typical for non-textile uses.\n\n\tlet [L1, a1, b1] = lab.from(color);\n\tlet [, C1, H1] = lch.from(lab, [L1, a1, b1]);\n\tlet [L2, a2, b2] = lab.from(sample);\n\tlet C2 = lch.from(lab, [L2, a2, b2])[1];\n\n\t// let [L1, a1, b1] = color.getAll(lab);\n\t// let C1 = color.get(\"lch.c\");\n\t// let H1 = color.get(\"lch.h\");\n\t// let [L2, a2, b2] = sample.getAll(lab);\n\t// let C2 = sample.get(\"lch.c\");\n\n\t// Check for negative Chroma,\n\t// which might happen through\n\t// direct user input of LCH values\n\n\tif (C1 < 0) {\n\t\tC1 = 0;\n\t}\n\tif (C2 < 0) {\n\t\tC2 = 0;\n\t}\n\n\t// we don't need H2 as ΔH is calculated from Δa, Δb and ΔC\n\n\t// Lightness and Chroma differences\n\t// These are (color - sample), unlike deltaE2000\n\tlet ΔL = L1 - L2;\n\tlet ΔC = C1 - C2;\n\n\tlet Δa = a1 - a2;\n\tlet Δb = b1 - b2;\n\n\t// weighted Hue difference, less for larger Chroma difference\n\n\tlet H2 = (Δa ** 2) + (Δb ** 2) - (ΔC ** 2);\n\t// due to roundoff error it is possible that, for zero a and b,\n\t// ΔC > Δa + Δb is 0, resulting in attempting\n\t// to take the square root of a negative number\n\n\t// trying instead the equation from Industrial Color Physics\n\t// By Georg A. Klein\n\n\t// let ΔH = ((a1 * b2) - (a2 * b1)) / Math.sqrt(0.5 * ((C2 * C1) + (a2 * a1) + (b2 * b1)));\n\t// console.log({ΔH});\n\t// This gives the same result to 12 decimal places\n\t// except it sometimes NaNs when trying to root a negative number\n\n\t// let ΔH = Math.sqrt(H2); we never actually use the root, it gets squared again!!\n\n\t// positional corrections to the lack of uniformity of CIELAB\n\t// These are all trying to make JND ellipsoids more like spheres\n\n\t// SL Lightness crispening factor, depends entirely on L1 not L2\n\tlet SL = 0.511;\t// linear portion of the Y to L transfer function\n\tif (L1 >= 16) {\t// cubic portion\n\t\tSL = (0.040975 * L1) / (1 + 0.01765 * L1);\n\t}\n\n\t// SC Chroma factor\n\tlet SC = ((0.0638 * C1) / (1 + 0.0131 * C1)) + 0.638;\n\n\t// Cross term T for blue non-linearity\n\tlet T;\n\tif (Number.isNaN(H1)) {\n\t\tH1 = 0;\n\t}\n\n\tif (H1 >= 164 && H1 <= 345) {\n\t\tT = 0.56 + Math.abs(0.2 * Math.cos((H1 + 168) * d2r));\n\t}\n\telse {\n\t\tT = 0.36 + Math.abs(0.4 * Math.cos((H1 + 35) * d2r));\n\t}\n\t// console.log({T});\n\n\t// SH Hue factor also depends on C1,\n\tlet C4 = Math.pow(C1, 4);\n\tlet F = Math.sqrt(C4 / (C4 + 1900));\n\tlet SH = SC * ((F * T) + 1 - F);\n\n\t// Finally calculate the deltaE, term by term as root sume of squares\n\tlet dE = (ΔL / (l * SL)) ** 2;\n\tdE += (ΔC / (c * SC)) ** 2;\n\tdE += (H2 / (SH ** 2));\n\t// dE += (ΔH / SH) ** 2;\n\treturn Math.sqrt(dE);\n\t// Yay!!!\n}\n\nconst Yw$1 = 203;\t// absolute luminance of media white\n\nvar XYZ_Abs_D65 = new ColorSpace({\n// Absolute CIE XYZ, with a D65 whitepoint,\n// as used in most HDR colorspaces as a starting point.\n// SDR spaces are converted per BT.2048\n// so that diffuse, media white is 203 cd/m²\n\tid: \"xyz-abs-d65\",\n\tcssId: \"--xyz-abs-d65\",\n\tname: \"Absolute XYZ D65\",\n\tcoords: {\n\t\tx: {\n\t\t\trefRange: [0, 9504.7],\n\t\t\tname: \"Xa\",\n\t\t},\n\t\ty: {\n\t\t\trefRange: [0, 10000],\n\t\t\tname: \"Ya\",\n\t\t},\n\t\tz: {\n\t\t\trefRange: [0, 10888.3],\n\t\t\tname: \"Za\",\n\t\t},\n\t},\n\n\tbase: xyz_d65,\n\tfromBase (XYZ) {\n\t\t// Make XYZ absolute, not relative to media white\n\t\t// Maximum luminance in PQ is 10,000 cd/m²\n\t\t// Relative XYZ has Y=1 for media white\n\t\treturn XYZ.map (v => Math.max(v * Yw$1, 0));\n\t},\n\ttoBase (AbsXYZ) {\n\t\t// Convert to media-white relative XYZ\n\t\treturn AbsXYZ.map(v => Math.max(v / Yw$1, 0));\n\t},\n});\n\nconst b$1 = 1.15;\nconst g = 0.66;\nconst n$1 = 2610 / (2 ** 14);\nconst ninv$1 = (2 ** 14) / 2610;\nconst c1$2 = 3424 / (2 ** 12);\nconst c2$2 = 2413 / (2 ** 7);\nconst c3$2 = 2392 / (2 ** 7);\nconst p = 1.7 * 2523 / (2 ** 5);\nconst pinv = (2 ** 5) / (1.7 * 2523);\nconst d = -0.56;\nconst d0 = 1.6295499532821566E-11;\n\nconst XYZtoCone_M = [\n\t[ 0.41478972, 0.579999, 0.0146480 ],\n\t[ -0.2015100, 1.120649, 0.0531008 ],\n\t[ -0.0166008, 0.264800, 0.6684799 ],\n];\n// XYZtoCone_M inverted\nconst ConetoXYZ_M = [\n\t[ 1.9242264357876067, -1.0047923125953657, 0.037651404030618 ],\n\t[ 0.35031676209499907, 0.7264811939316552, -0.06538442294808501 ],\n\t[ -0.09098281098284752, -0.3127282905230739, 1.5227665613052603 ],\n];\nconst ConetoIab_M = [\n\t[ 0.5, 0.5, 0 ],\n\t[ 3.524000, -4.066708, 0.542708 ],\n\t[ 0.199076, 1.096799, -1.295875 ],\n];\n// ConetoIab_M inverted\nconst IabtoCone_M = [\n\t[ 1, 0.1386050432715393, 0.05804731615611886 ],\n\t[ 0.9999999999999999, -0.1386050432715393, -0.05804731615611886 ],\n\t[ 0.9999999999999998, -0.09601924202631895, -0.8118918960560388 ],\n];\n\nvar Jzazbz = new ColorSpace({\n\tid: \"jzazbz\",\n\tname: \"Jzazbz\",\n\tcoords: {\n\t\tjz: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"Jz\",\n\t\t},\n\t\taz: {\n\t\t\trefRange: [-0.5, 0.5],\n\t\t},\n\t\tbz: {\n\t\t\trefRange: [-0.5, 0.5],\n\t\t},\n\t},\n\n\tbase: XYZ_Abs_D65,\n\tfromBase (XYZ) {\n\t\t// First make XYZ absolute, not relative to media white\n\t\t// Maximum luminance in PQ is 10,000 cd/m²\n\t\t// Relative XYZ has Y=1 for media white\n\t\t// BT.2048 says media white Y=203 at PQ 58\n\n\t\tlet [ Xa, Ya, Za ] = XYZ;\n\n\t\t// modify X and Y\n\t\tlet Xm = (b$1 * Xa) - ((b$1 - 1) * Za);\n\t\tlet Ym = (g * Ya) - ((g - 1) * Xa);\n\n\t\t// move to LMS cone domain\n\t\tlet LMS = multiplyMatrices(XYZtoCone_M, [ Xm, Ym, Za ]);\n\n\t\t// PQ-encode LMS\n\t\tlet PQLMS = LMS.map (function (val) {\n\t\t\tlet num = c1$2 + (c2$2 * ((val / 10000) ** n$1));\n\t\t\tlet denom = 1 + (c3$2 * ((val / 10000) ** n$1));\n\n\t\t\treturn (num / denom) ** p;\n\t\t});\n\n\t\t// almost there, calculate Iz az bz\n\t\tlet [ Iz, az, bz] = multiplyMatrices(ConetoIab_M, PQLMS);\n\t\t// console.log({Iz, az, bz});\n\n\t\tlet Jz = ((1 + d) * Iz) / (1 + (d * Iz)) - d0;\n\t\treturn [Jz, az, bz];\n\t},\n\ttoBase (Jzazbz) {\n\t\tlet [Jz, az, bz] = Jzazbz;\n\t\tlet Iz = (Jz + d0) / (1 + d - d * (Jz + d0));\n\n\t\t// bring into LMS cone domain\n\t\tlet PQLMS = multiplyMatrices(IabtoCone_M, [ Iz, az, bz ]);\n\n\t\t// convert from PQ-coded to linear-light\n\t\tlet LMS = PQLMS.map(function (val) {\n\t\t\tlet num = (c1$2 - (val ** pinv));\n\t\t\tlet denom = (c3$2 * (val ** pinv)) - c2$2;\n\t\t\tlet x = 10000 * ((num / denom) ** ninv$1);\n\n\t\t\treturn (x); \t// luminance relative to diffuse white, [0, 70 or so].\n\t\t});\n\n\t\t// modified abs XYZ\n\t\tlet [ Xm, Ym, Za ] = multiplyMatrices(ConetoXYZ_M, LMS);\n\n\t\t// restore standard D50 relative XYZ, relative to media white\n\t\tlet Xa = (Xm + ((b$1 - 1) * Za)) / b$1;\n\t\tlet Ya = (Ym + ((g - 1) * Xa)) / g;\n\t\treturn [ Xa, Ya, Za ];\n\t},\n\n\tformats: {\n\t\t// https://drafts.csswg.org/css-color-hdr/#Jzazbz\n\t\t\"color\": {\n\t\t\tcoords: [\"<number> | <percentage>\", \"<number> | <percentage>[-1,1]\", \"<number> | <percentage>[-1,1]\"],\n\t\t},\n\t},\n});\n\nvar jzczhz = new ColorSpace({\n\tid: \"jzczhz\",\n\tname: \"JzCzHz\",\n\tcoords: {\n\t\tjz: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"Jz\",\n\t\t},\n\t\tcz: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"Chroma\",\n\t\t},\n\t\thz: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t},\n\n\tbase: Jzazbz,\n\tfromBase (jzazbz) {\n\t\t// Convert to polar form\n\t\tlet [Jz, az, bz] = jzazbz;\n\t\tlet hue;\n\t\tconst ε = 0.0002; // chromatic components much smaller than a,b\n\n\t\tif (Math.abs(az) < ε && Math.abs(bz) < ε) {\n\t\t\thue = NaN;\n\t\t}\n\t\telse {\n\t\t\thue = Math.atan2(bz, az) * 180 / Math.PI;\n\t\t}\n\n\t\treturn [\n\t\t\tJz, // Jz is still Jz\n\t\t\tMath.sqrt(az ** 2 + bz ** 2), // Chroma\n\t\t\tconstrain(hue), // Hue, in degrees [0 to 360)\n\t\t];\n\t},\n\ttoBase (jzczhz) {\n\t\t// Convert from polar form\n\t\t// debugger;\n\t\treturn [\n\t\t\tjzczhz[0], // Jz is still Jz\n\t\t\tjzczhz[1] * Math.cos(jzczhz[2] * Math.PI / 180), // az\n\t\t\tjzczhz[1] * Math.sin(jzczhz[2] * Math.PI / 180), // bz\n\t\t];\n\t},\n});\n\n// More accurate color-difference formulae\n// than the simple 1976 Euclidean distance in Lab\n\n// Uses JzCzHz, which has improved perceptual uniformity\n// and thus a simple Euclidean root-sum of ΔL² ΔC² ΔH²\n// gives good results.\n\nfunction deltaEJz (color, sample) {\n\t[color, sample] = getColor([color, sample]);\n\n\t// Given this color as the reference\n\t// and a sample,\n\t// calculate deltaE in JzCzHz.\n\tlet [Jz1, Cz1, Hz1] = jzczhz.from(color);\n\tlet [Jz2, Cz2, Hz2] = jzczhz.from(sample);\n\n\t// Lightness and Chroma differences\n\t// sign does not matter as they are squared.\n\tlet ΔJ = Jz1 - Jz2;\n\tlet ΔC = Cz1 - Cz2;\n\n\t// length of chord for ΔH\n\tif ((Number.isNaN(Hz1)) && (Number.isNaN(Hz2))) {\n\t\t// both undefined hues\n\t\tHz1 = 0;\n\t\tHz2 = 0;\n\t}\n\telse if (Number.isNaN(Hz1)) {\n\t\t// one undefined, set to the defined hue\n\t\tHz1 = Hz2;\n\t}\n\telse if (Number.isNaN(Hz2)) {\n\t\tHz2 = Hz1;\n\t}\n\n\tlet Δh = Hz1 - Hz2;\n\tlet ΔH = 2 * Math.sqrt(Cz1 * Cz2) * Math.sin((Δh / 2) * (Math.PI / 180));\n\n\treturn Math.sqrt(ΔJ ** 2 + ΔC ** 2 + ΔH ** 2);\n}\n\nconst c1$1 = 3424 / 4096;\nconst c2$1 = 2413 / 128;\nconst c3$1 = 2392 / 128;\nconst m1$1 = 2610 / 16384;\nconst m2 = 2523 / 32;\nconst im1 = 16384 / 2610;\nconst im2 = 32 / 2523;\n\n// The matrix below includes the 4% crosstalk components\n// and is from the Dolby \"What is ICtCp\" paper\"\nconst XYZtoLMS_M = [\n\t[ 0.3592832590121217, 0.6976051147779502, -0.0358915932320290 ],\n\t[ -0.1920808463704993, 1.1004767970374321, 0.0753748658519118 ],\n\t[ 0.0070797844607479, 0.0748396662186362, 0.8433265453898765 ],\n];\n// linear-light Rec.2020 to LMS, again with crosstalk\n// rational terms from Jan Fröhlich,\n// Encoding High Dynamic Range andWide Color Gamut Imagery, p.97\n// and ITU-R BT.2124-0 p.2\n/*\nconst Rec2020toLMS_M = [\n\t[ 1688 / 4096, 2146 / 4096, 262 / 4096 ],\n\t[ 683 / 4096, 2951 / 4096, 462 / 4096 ],\n\t[ 99 / 4096, 309 / 4096, 3688 / 4096 ]\n];\n*/\n// this includes the Ebner LMS coefficients,\n// the rotation, and the scaling to [-0.5,0.5] range\n// rational terms from Fröhlich p.97\n// and ITU-R BT.2124-0 pp.2-3\nconst LMStoIPT_M = [\n\t[ 2048 / 4096, 2048 / 4096, 0 ],\n\t[ 6610 / 4096, -13613 / 4096, 7003 / 4096 ],\n\t[ 17933 / 4096, -17390 / 4096, -543 / 4096 ],\n];\n\n// inverted matrices, calculated from the above\nconst IPTtoLMS_M = [\n\t[ 0.9999999999999998, 0.0086090370379328, 0.1110296250030260 ],\n\t[ 0.9999999999999998, -0.0086090370379328, -0.1110296250030259 ],\n\t[ 0.9999999999999998, 0.5600313357106791, -0.3206271749873188 ],\n];\n/*\nconst LMStoRec2020_M = [\n\t[ 3.4375568932814012112, -2.5072112125095058195, 0.069654319228104608382],\n\t[-0.79142868665644156125, 1.9838372198740089874, -0.19240853321756742626 ],\n\t[-0.025646662911506476363, -0.099240248643945566751, 1.1248869115554520431 ]\n];\n*/\nconst LMStoXYZ_M = [\n\t[ 2.0701522183894223, -1.3263473389671563, 0.2066510476294053 ],\n\t[ 0.3647385209748072, 0.6805660249472273, -0.0453045459220347 ],\n\t[ -0.0497472075358123, -0.0492609666966131, 1.1880659249923042 ],\n];\n\n// Only the PQ form of ICtCp is implemented here. There is also an HLG form.\n// from Dolby, \"WHAT IS ICTCP?\"\n// https://professional.dolby.com/siteassets/pdfs/ictcp_dolbywhitepaper_v071.pdf\n// and\n// Dolby, \"Perceptual Color Volume\n// Measuring the Distinguishable Colors of HDR and WCG Displays\"\n// https://professional.dolby.com/siteassets/pdfs/dolby-vision-measuring-perceptual-color-volume-v7.1.pdf\nvar ictcp = new ColorSpace({\n\tid: \"ictcp\",\n\tname: \"ICTCP\",\n\t// From BT.2100-2 page 7:\n\t// During production, signal values are expected to exceed the\n\t// range E′ = [0.0 : 1.0]. This provides processing headroom and avoids\n\t// signal degradation during cascaded processing. Such values of E′,\n\t// below 0.0 or exceeding 1.0, should not be clipped during production\n\t// and exchange.\n\t// Values below 0.0 should not be clipped in reference displays (even\n\t// though they represent “negative” light) to allow the black level of\n\t// the signal (LB) to be properly set using test signals known as “PLUGE”\n\tcoords: {\n\t\ti: {\n\t\t\trefRange: [0, 1],\t// Constant luminance,\n\t\t\tname: \"I\",\n\t\t},\n\t\tct: {\n\t\t\trefRange: [-0.5, 0.5],\t// Full BT.2020 gamut in range [-0.5, 0.5]\n\t\t\tname: \"CT\",\n\t\t},\n\t\tcp: {\n\t\t\trefRange: [-0.5, 0.5],\n\t\t\tname: \"CP\",\n\t\t},\n\t},\n\n\tbase: XYZ_Abs_D65,\n\tfromBase (XYZ) {\n\t\t// move to LMS cone domain\n\t\tlet LMS = multiplyMatrices(XYZtoLMS_M, XYZ);\n\n\t\treturn LMStoICtCp(LMS);\n\t},\n\ttoBase (ICtCp) {\n\t\tlet LMS = ICtCptoLMS(ICtCp);\n\n\t\treturn multiplyMatrices(LMStoXYZ_M, LMS);\n\t},\n});\n\nfunction LMStoICtCp (LMS) {\n\t// apply the PQ EOTF\n\t// we can't ever be dividing by zero because of the \"1 +\" in the denominator\n\tlet PQLMS = LMS.map (function (val) {\n\t\tlet num = c1$1 + (c2$1 * ((val / 10000) ** m1$1));\n\t\tlet denom = 1 + (c3$1 * ((val / 10000) ** m1$1));\n\n\t\treturn (num / denom) ** m2;\n\t});\n\n\t// LMS to IPT, with rotation for Y'C'bC'r compatibility\n\treturn multiplyMatrices(LMStoIPT_M, PQLMS);\n}\n\nfunction ICtCptoLMS (ICtCp) {\n\tlet PQLMS = multiplyMatrices(IPTtoLMS_M, ICtCp);\n\n\t// From BT.2124-0 Annex 2 Conversion 3\n\tlet LMS = PQLMS.map (function (val) {\n\t\tlet num = Math.max((val ** im2) - c1$1, 0);\n\t\tlet denom = (c2$1 - (c3$1 * (val ** im2)));\n\t\treturn 10000 * ((num / denom) ** im1);\n\t});\n\n\treturn LMS;\n}\n\n// Delta E in ICtCp space,\n// which the ITU calls Delta E ITP, which is shorter\n// formulae from ITU Rec. ITU-R BT.2124-0\n\nfunction deltaEITP (color, sample) {\n\t[color, sample] = getColor([color, sample]);\n\n\t// Given this color as the reference\n\t// and a sample,\n\t// calculate deltaE in ICtCp\n\t// which is simply the Euclidean distance\n\n\tlet [ I1, T1, P1 ] = ictcp.from(color);\n\tlet [ I2, T2, P2 ] = ictcp.from(sample);\n\n\t// the 0.25 factor is to undo the encoding scaling in Ct\n\t// the 720 is so that 1 deltaE = 1 JND\n\t// per ITU-R BT.2124-0 p.3\n\n\treturn 720 * Math.sqrt((I1 - I2) ** 2 + (0.25 * (T1 - T2) ** 2) + (P1 - P2) ** 2);\n}\n\nconst white$3 = WHITES.D65;\nconst adaptedCoef = 0.42;\nconst adaptedCoefInv = 1 / adaptedCoef;\nconst tau = 2 * Math.PI;\n\nconst cat16 = [\n\t[ 0.401288, 0.650173, -0.051461 ],\n\t[ -0.250268, 1.204414, 0.045854 ],\n\t[ -0.002079, 0.048952, 0.953127 ],\n];\n\nconst cat16Inv = [\n\t[1.8620678550872327, -1.0112546305316843, 0.14918677544445175],\n\t[0.38752654323613717, 0.6214474419314753, -0.008973985167612518],\n\t[-0.015841498849333856, -0.03412293802851557, 1.0499644368778496],\n];\n\nconst m1 = [\n\t[460.0, 451.0, 288.0],\n\t[460.0, -891.0, -261.0],\n\t[460.0, -220.0, -6300.0],\n];\n\nconst surroundMap = {\n\tdark: [0.8, 0.525, 0.8],\n\tdim: [0.9, 0.59, 0.9],\n\taverage: [1, 0.69, 1],\n};\n\nconst hueQuadMap = {\n\t// Red, Yellow, Green, Blue, Red\n\th: [20.14, 90.00, 164.25, 237.53, 380.14],\n\te: [0.8, 0.7, 1.0, 1.2, 0.8],\n\tH: [0.0, 100.0, 200.0, 300.0, 400.0],\n};\n\nconst rad2deg = 180 / Math.PI;\nconst deg2rad$1 = Math.PI / 180;\n\nfunction adapt$1 (coords, fl) {\n\tconst temp = coords.map(c => {\n\t\tconst x = spow(fl * Math.abs(c) * 0.01, adaptedCoef);\n\t\treturn 400 * copySign(x, c) / (x + 27.13);\n\t});\n\treturn temp;\n}\n\nfunction unadapt (adapted, fl) {\n\tconst constant = 100 / fl * (27.13 ** adaptedCoefInv);\n\treturn adapted.map(c => {\n\t\tconst cabs = Math.abs(c);\n\t\treturn copySign(constant * spow(cabs / (400 - cabs), adaptedCoefInv), c);\n\t});\n}\n\nfunction hueQuadrature (h) {\n\tlet hp = constrain(h);\n\tif (hp <= hueQuadMap.h[0]) {\n\t\thp += 360;\n\t}\n\n\tconst i = bisectLeft(hueQuadMap.h, hp) - 1;\n\tconst [hi, hii] = hueQuadMap.h.slice(i, i + 2);\n\tconst [ei, eii] = hueQuadMap.e.slice(i, i + 2);\n\tconst Hi = hueQuadMap.H[i];\n\n\tconst t = (hp - hi) / ei;\n\treturn Hi + (100 * t) / (t + (hii - hp) / eii);\n}\n\nfunction invHueQuadrature (H) {\n\tlet Hp = ((H % 400 + 400) % 400);\n\tconst i = Math.floor(0.01 * Hp);\n\tHp = Hp % 100;\n\tconst [hi, hii] = hueQuadMap.h.slice(i, i + 2);\n\tconst [ei, eii] = hueQuadMap.e.slice(i, i + 2);\n\n\treturn constrain(\n\t\t(Hp * (eii * hi - ei * hii) - 100 * hi * eii) /\n\t\t(Hp * (eii - ei) - 100 * eii),\n\t);\n}\n\nfunction environment (\n\trefWhite,\n\tadaptingLuminance,\n\tbackgroundLuminance,\n\tsurround,\n\tdiscounting,\n) {\n\n\tconst env = {};\n\n\tenv.discounting = discounting;\n\tenv.refWhite = refWhite;\n\tenv.surround = surround;\n\tconst xyzW = refWhite.map(c => {\n\t\treturn c * 100;\n\t});\n\n\t// The average luminance of the environment in `cd/m^2cd/m` (a.k.a. nits)\n\tenv.la = adaptingLuminance;\n\t// The relative luminance of the nearby background\n\tenv.yb = backgroundLuminance;\n\t// Absolute luminance of the reference white.\n\tconst yw = xyzW[1];\n\n\t// Cone response for reference white\n\tconst rgbW = multiplyMatrices(cat16, xyzW);\n\n\t// Surround: dark, dim, and average\n\tsurround = surroundMap[env.surround];\n\tconst f = surround[0];\n\tenv.c = surround[1];\n\tenv.nc = surround[2];\n\n\tconst k = 1 / (5 * env.la + 1);\n\tconst k4 = k ** 4;\n\n\t// Factor of luminance level adaptation\n\tenv.fl = (k4 * env.la + 0.1 * (1 - k4) * (1 - k4) * Math.cbrt(5 * env.la));\n\tenv.flRoot = env.fl ** 0.25;\n\n\tenv.n = env.yb / yw;\n\tenv.z = 1.48 + Math.sqrt(env.n);\n\tenv.nbb = 0.725 * (env.n ** -0.2);\n\tenv.ncb = env.nbb;\n\n\t// Degree of adaptation calculating if not discounting\n\t// illuminant (assumed eye is fully adapted)\n\tconst d = (discounting) ?\n\t\t1 :\n\t\tMath.max(\n\t\t\tMath.min(f * (1 - 1 / 3.6 * Math.exp((-env.la - 42) / 92)), 1),\n\t\t\t0,\n\t\t);\n\tenv.dRgb = rgbW.map(c => {\n\t\treturn interpolate(1, yw / c, d);\n\t});\n\tenv.dRgbInv = env.dRgb.map(c => {\n\t\treturn 1 / c;\n\t});\n\n\t// Achromatic response\n\tconst rgbCW = rgbW.map((c, i) => {\n\t\treturn c * env.dRgb[i];\n\t});\n\tconst rgbAW = adapt$1(rgbCW, env.fl);\n\tenv.aW = env.nbb * (2 * rgbAW[0] + rgbAW[1] + 0.05 * rgbAW[2]);\n\n\t// console.log(env);\n\n\treturn env;\n}\n\n// Pre-calculate everything we can with the viewing conditions\nconst viewingConditions$1 = environment(\n\twhite$3,\n\t64 / Math.PI * 0.2, 20,\n\t\"average\",\n\tfalse,\n);\n\nfunction fromCam16 (cam16, env) {\n\n\t// These check ensure one, and only one attribute for a\n\t// given category is provided.\n\tif (!((cam16.J !== undefined) ^ (cam16.Q !== undefined))) {\n\t\tthrow new Error(\"Conversion requires one and only one: 'J' or 'Q'\");\n\t}\n\n\tif (!((cam16.C !== undefined) ^ (cam16.M !== undefined) ^ (cam16.s !== undefined))) {\n\t\tthrow new Error(\"Conversion requires one and only one: 'C', 'M' or 's'\");\n\t}\n\n\t// Hue is absolutely required\n\tif (!((cam16.h !== undefined) ^ (cam16.H !== undefined))) {\n\t\tthrow new Error(\"Conversion requires one and only one: 'h' or 'H'\");\n\t}\n\n\t// Black\n\tif (cam16.J === 0.0 || cam16.Q === 0.0) {\n\t\treturn [0.0, 0.0, 0.0];\n\t}\n\n\t// Break hue into Cartesian components\n\tlet hRad = 0.0;\n\tif (cam16.h !== undefined) {\n\t\thRad = constrain(cam16.h) * deg2rad$1;\n\t}\n\telse {\n\t\thRad = invHueQuadrature(cam16.H) * deg2rad$1;\n\t}\n\n\tconst cosh = Math.cos(hRad);\n\tconst sinh = Math.sin(hRad);\n\n\t// Calculate `Jroot` from one of the lightness derived coordinates.\n\tlet Jroot = 0.0;\n\tif (cam16.J !== undefined) {\n\t\tJroot = spow(cam16.J, 1 / 2) * 0.1;\n\t}\n\telse if (cam16.Q !== undefined) {\n\t\tJroot = 0.25 * env.c * cam16.Q / ((env.aW + 4) * env.flRoot);\n\t}\n\n\t// Calculate the `t` value from one of the chroma derived coordinates\n\tlet alpha = 0.0;\n\tif (cam16.C !== undefined) {\n\t\talpha = cam16.C / Jroot;\n\t}\n\telse if (cam16.M !== undefined) {\n\t\talpha = (cam16.M / env.flRoot) / Jroot;\n\t}\n\telse if (cam16.s !== undefined) {\n\t\talpha = 0.0004 * (cam16.s ** 2) * (env.aW + 4) / env.c;\n\t}\n\tconst t = spow(\n\t\talpha * Math.pow(1.64 - Math.pow(0.29, env.n), -0.73),\n\t\t10 / 9,\n\t);\n\n\t// Eccentricity\n\tconst et = 0.25 * (Math.cos(hRad + 2) + 3.8);\n\n\t// Achromatic response\n\tconst A = env.aW * spow(Jroot, 2 / env.c / env.z);\n\n\t// Calculate red-green and yellow-blue components\n\tconst p1 = 5e4 / 13 * env.nc * env.ncb * et;\n\tconst p2 = A / env.nbb;\n\tconst r = (\n\t\t23 * (p2 + 0.305) *\n\t\tzdiv(t, 23 * p1 + t * (11 * cosh + 108 * sinh))\n\t);\n\tconst a = r * cosh;\n\tconst b = r * sinh;\n\n\t// Calculate back from cone response to XYZ\n\tconst rgb_c = unadapt(\n\t\tmultiplyMatrices(m1, [p2, a, b]).map(c => {\n\t\t\treturn c * 1 / 1403;\n\t\t}),\n\t\tenv.fl,\n\t);\n\treturn multiplyMatrices(\n\t\tcat16Inv,\n\t\trgb_c.map((c, i) => {\n\t\t\treturn c * env.dRgbInv[i];\n\t\t}),\n\t).map(c => {\n\t\treturn c / 100;\n\t});\n}\n\n\nfunction toCam16 (xyzd65, env) {\n\t// Cone response\n\tconst xyz100 = xyzd65.map(c => {\n\t\treturn c * 100;\n\t});\n\tconst rgbA = adapt$1(\n\t\tmultiplyMatrices(cat16, xyz100).map((c, i) => {\n\t\t\treturn c * env.dRgb[i];\n\t\t}),\n\t\tenv.fl,\n\t);\n\n\t// Calculate hue from red-green and yellow-blue components\n\tconst a = rgbA[0] + (-12 * rgbA[1] + rgbA[2]) / 11;\n\tconst b = (rgbA[0] + rgbA[1] - 2 * rgbA[2]) / 9;\n\tconst hRad = ((Math.atan2(b, a) % tau) + tau) % tau;\n\n\t// Eccentricity\n\tconst et = 0.25 * (Math.cos(hRad + 2) + 3.8);\n\n\tconst t = (\n\t\t5e4 / 13 * env.nc * env.ncb *\n\t\tzdiv(\n\t\t\tet * Math.sqrt(a ** 2 + b ** 2),\n\t\t\trgbA[0] + rgbA[1] + 1.05 * rgbA[2] + 0.305,\n\t\t)\n\t);\n\tconst alpha = spow(t, 0.9) * Math.pow(1.64 - Math.pow(0.29, env.n), 0.73);\n\n\t// Achromatic response\n\tconst A = env.nbb * (2 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]);\n\n\tconst Jroot = spow(A / env.aW, 0.5 * env.c * env.z);\n\n\t// Lightness\n\tconst J = 100 * spow(Jroot, 2);\n\n\t// Brightness\n\tconst Q = (4 / env.c * Jroot * (env.aW + 4) * env.flRoot);\n\n\t// Chroma\n\tconst C = alpha * Jroot;\n\n\t// Colorfulness\n\tconst M = C * env.flRoot;\n\n\t// Hue\n\tconst h = constrain(hRad * rad2deg);\n\n\t// Hue quadrature\n\tconst H = hueQuadrature(h);\n\n\t// Saturation\n\tconst s = 50 * spow(env.c * alpha / (env.aW + 4), 1 / 2);\n\n\t// console.log({J: J, C: C, h: h, s: s, Q: Q, M: M, H: H});\n\n\treturn {J: J, C: C, h: h, s: s, Q: Q, M: M, H: H};\n}\n\n\n// Provided as a way to directly evaluate the CAM16 model\n// https://observablehq.com/@jrus/cam16: reference implementation\n// https://arxiv.org/pdf/1802.06067.pdf: Nico Schlömer\n// https://onlinelibrary.wiley.com/doi/pdf/10.1002/col.22324: hue quadrature\n// https://www.researchgate.net/publication/318152296_Comprehensive_color_solutions_CAM16_CAT16_and_CAM16-UCS\n// Results compared against: https://github.com/colour-science/colour\nvar cam16 = new ColorSpace({\n\tid: \"cam16-jmh\",\n\tcssId: \"--cam16-jmh\",\n\tname: \"CAM16-JMh\",\n\tcoords: {\n\t\tj: {\n\t\t\trefRange: [0, 100],\n\t\t\tname: \"J\",\n\t\t},\n\t\tm: {\n\t\t\trefRange: [0, 105.0],\n\t\t\tname: \"Colorfulness\",\n\t\t},\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t},\n\n\tbase: xyz_d65,\n\n\tfromBase (xyz) {\n\t\tconst cam16 = toCam16(xyz, viewingConditions$1);\n\t\treturn [cam16.J, cam16.M, cam16.h];\n\t},\n\ttoBase (cam16) {\n\t\treturn fromCam16(\n\t\t\t{J: cam16[0], M: cam16[1], h: cam16[2]},\n\t\t\tviewingConditions$1,\n\t\t);\n\t},\n});\n\nconst white$2 = WHITES.D65;\nconst ε$4 = 216 / 24389; // 6^3/29^3 == (24/116)^3\nconst κ$3 = 24389 / 27; // 29^3/3^3\n\nfunction toLstar (y) {\n\t// Convert XYZ Y to L*\n\n\tconst fy = (y > ε$4) ? Math.cbrt(y) : (κ$3 * y + 16) / 116;\n\treturn (116.0 * fy) - 16.0;\n}\n\nfunction fromLstar (lstar) {\n\t// Convert L* back to XYZ Y\n\n\treturn (lstar > 8) ? Math.pow((lstar + 16) / 116, 3) : lstar / κ$3;\n}\n\nfunction fromHct (coords, env) {\n\t// Use Newton's method to try and converge as quick as possible or\n\t// converge as close as we can. While the requested precision is achieved\n\t// most of the time, it may not always be achievable. Especially past the\n\t// visible spectrum, the algorithm will likely struggle to get the same\n\t// precision. If, for whatever reason, we cannot achieve the accuracy we\n\t// seek in the allotted iterations, just return the closest we were able to\n\t// get.\n\n\tlet [h, c, t] = coords;\n\tlet xyz = [];\n\tlet j = 0;\n\n\t// Shortcut out for black\n\tif (t === 0) {\n\t\treturn [0.0, 0.0, 0.0];\n\t}\n\n\t// Calculate the Y we need to target\n\tlet y = fromLstar(t);\n\n\t// A better initial guess yields better results. Polynomials come from\n\t// curve fitting the T vs J response.\n\tif (t > 0) {\n\t\tj = 0.00379058511492914 * t ** 2 + 0.608983189401032 * t + 0.9155088574762233;\n\t}\n\telse {\n\t\tj = 9.514440756550361e-06 * t ** 2 + 0.08693057439788597 * t - 21.928975842194614;\n\t}\n\n\t// Threshold of how close is close enough, and max number of attempts.\n\t// More precision and more attempts means more time spent iterating. Higher\n\t// required precision gives more accuracy but also increases the chance of\n\t// not hitting the goal. 2e-12 allows us to convert round trip with\n\t// reasonable accuracy of six decimal places or more.\n\tconst threshold = 2e-12;\n\tconst max_attempts = 15;\n\n\tlet attempt = 0;\n\tlet last = Infinity;\n\n\t// Try to find a J such that the returned y matches the returned y of the L*\n\twhile (attempt <= max_attempts) {\n\t\txyz = fromCam16({J: j, C: c, h: h}, env);\n\n\t\t// If we are within range, return XYZ\n\t\t// If we are closer than last time, save the values\n\t\tconst delta = Math.abs(xyz[1] - y);\n\t\tif (delta < last) {\n\t\t\tif (delta <= threshold) {\n\t\t\t\treturn xyz;\n\t\t\t}\n\t\t\tlast = delta;\n\t\t}\n\n\t\t// f(j_root) = (j ** (1 / 2)) * 0.1\n\t\t// f(j) = ((f(j_root) * 100) ** 2) / j - 1 = 0\n\t\t// f(j_root) = Y = y / 100\n\t\t// f(j) = (y ** 2) / j - 1\n\t\t// f'(j) = (2 * y) / j\n\t\tj = j - (xyz[1] - y) * j / (2 * xyz[1]);\n\n\t\tattempt += 1;\n\t}\n\n\t// We could not acquire the precision we desired,\n\t// return our closest attempt.\n\treturn fromCam16({J: j, C: c, h: h}, env);\n}\n\nfunction toHct (xyz, env) {\n\t// Calculate HCT by taking the L* of CIE LCh D65 and CAM16 chroma and hue.\n\n\tconst t = toLstar(xyz[1]);\n\tif (t === 0.0) {\n\t\treturn [0.0, 0.0, 0.0];\n\t}\n\tconst cam16 = toCam16(xyz, viewingConditions);\n\treturn [constrain(cam16.h), cam16.C, t];\n}\n\n// Pre-calculate everything we can with the viewing conditions\nconst viewingConditions = environment(\n\twhite$2, 200 / Math.PI * fromLstar(50.0),\n\tfromLstar(50.0) * 100,\n\t\"average\",\n\tfalse,\n);\n\n// https://material.io/blog/science-of-color-design\n// This is not a port of the material-color-utilities,\n// but instead implements the full color space as described,\n// combining CAM16 JCh and Lab D65. This does not clamp conversion\n// to HCT to specific chroma bands and provides support for wider\n// gamuts than Google currently supports and does so at a greater\n// precision (> 8 bits back to sRGB).\n// This implementation comes from https://github.com/facelessuser/coloraide\n// which is licensed under MIT.\nvar hct = new ColorSpace({\n\tid: \"hct\",\n\tname: \"HCT\",\n\tcoords: {\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t\tc: {\n\t\t\trefRange: [0, 145],\n\t\t\tname: \"Colorfulness\",\n\t\t},\n\t\tt: {\n\t\t\trefRange: [0, 100],\n\t\t\tname: \"Tone\",\n\t\t},\n\t},\n\n\tbase: xyz_d65,\n\n\tfromBase (xyz) {\n\t\treturn toHct(xyz);\n\t},\n\ttoBase (hct) {\n\t\treturn fromHct(hct, viewingConditions);\n\t},\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"--hct\",\n\t\t\tcoords: [\"<number> | <angle>\", \"<percentage> | <number>\", \"<percentage> | <number>\"],\n\t\t},\n\t},\n});\n\nconst deg2rad = Math.PI / 180;\nconst ucsCoeff = [1.00, 0.007, 0.0228];\n\n/**\n* Convert HCT chroma and hue (CAM16 JMh colorfulness and hue) using UCS logic for a and b.\n* @param {number[]} coords - HCT coordinates.\n* @return {number[]}\n*/\nfunction convertUcsAb (coords) {\n\t// We want the distance between the actual color.\n\t// If chroma is negative, it will throw off our calculations.\n\t// Normally, converting back to the base and forward will correct it.\n\t// If we have a negative chroma after this, then we have a color that\n\t// cannot resolve to positive chroma.\n\tif (coords[1] < 0) {\n\t\tcoords = hct.fromBase(hct.toBase(coords));\n\t}\n\n\t// Only in extreme cases (usually outside the visible spectrum)\n\t// can the input value for log become negative.\n\t// Avoid domain error by forcing a zero result via \"max\" if necessary.\n\tconst M = Math.log(Math.max(1 + ucsCoeff[2] * coords[1] * viewingConditions.flRoot, 1.0)) / ucsCoeff[2];\n\tconst hrad = coords[0] * deg2rad;\n\tconst a = M * Math.cos(hrad);\n\tconst b = M * Math.sin(hrad);\n\n\treturn [coords[2], a, b];\n}\n\n\n/**\n* Color distance using HCT.\n* @param {Color} color - Color to compare.\n* @param {Color} sample - Color to compare.\n* @return {number[]}\n*/\nfunction deltaEHCT (color, sample) {\n\t[color, sample] = getColor([color, sample]);\n\n\tlet [ t1, a1, b1 ] = convertUcsAb(hct.from(color));\n\tlet [ t2, a2, b2 ] = convertUcsAb(hct.from(sample));\n\n\t// Use simple euclidean distance with a and b using UCS conversion\n\t// and LCh lightness (HCT tone).\n\treturn Math.sqrt((t1 - t2) ** 2 + (a1 - a2) ** 2 + (b1 - b2) ** 2);\n}\n\nvar deltaEMethods = {\n\tdeltaE76,\n\tdeltaECMC,\n\tdeltaE2000,\n\tdeltaEJz,\n\tdeltaEITP,\n\tdeltaEOK,\n\tdeltaEHCT,\n};\n\n/**\n * Calculate the epsilon to 2 degrees smaller than the specified JND.\n * @param {Number} jnd - The target \"just noticeable difference\".\n * @returns {Number}\n */\nfunction calcEpsilon (jnd) {\n\t// Calculate the epsilon to 2 degrees smaller than the specified JND.\n\n\tconst order = (!jnd) ? 0 : Math.floor(Math.log10(Math.abs(jnd)));\n\t// Limit to an arbitrary value to ensure value is never too small and causes infinite loops.\n\treturn Math.max(parseFloat(`1e${order - 2}`), 1e-6);\n}\n\nconst GMAPPRESET = {\n\t\"hct\": {\n\t\tmethod: \"hct.c\",\n\t\tjnd: 2,\n\t\tdeltaEMethod: \"hct\",\n\t\tblackWhiteClamp: {},\n\t},\n\t\"hct-tonal\": {\n\t\tmethod: \"hct.c\",\n\t\tjnd: 0,\n\t\tdeltaEMethod: \"hct\",\n\t\tblackWhiteClamp: { channel: \"hct.t\", min: 0, max: 100 },\n\t},\n};\n\n/**\n * Force coordinates to be in gamut of a certain color space.\n * Mutates the color it is passed.\n * @param {Object|string} options object or spaceId string\n * @param {string} options.method - How to force into gamut.\n * If \"clip\", coordinates are just clipped to their reference range.\n * If \"css\", coordinates are reduced according to the CSS 4 Gamut Mapping Algorithm.\n * If in the form [colorSpaceId].[coordName], that coordinate is reduced\n * until the color is in gamut. Please note that this may produce nonsensical\n * results for certain coordinates (e.g. hue) or infinite loops if reducing the coordinate never brings the color in gamut.\n * @param {ColorSpace|string} options.space - The space whose gamut we want to map to\n * @param {string} options.deltaEMethod - The delta E method to use while performing gamut mapping.\n * If no method is specified, delta E 2000 is used.\n * @param {Number} options.jnd - The \"just noticeable difference\" to target.\n * @param {Object} options.blackWhiteClamp - Used to configure SDR black and clamping.\n * \"channel\" indicates the \"space.channel\" to use for determining when to clamp.\n * \"min\" indicates the lower limit for black clamping and \"max\" indicates the upper\n * limit for white clamping.\n */\n\nfunction toGamut (\n\tcolor,\n\t{\n\t\tmethod = defaults.gamut_mapping,\n\t\tspace = undefined,\n\t\tdeltaEMethod = \"\",\n\t\tjnd = 2,\n\t\tblackWhiteClamp = {},\n\t} = {},\n) {\n\tcolor = getColor(color);\n\n\tif (isString(arguments[1])) {\n\t\tspace = arguments[1];\n\t}\n\telse if (!space) {\n\t\tspace = color.space;\n\t}\n\n\tspace = ColorSpace.get(space);\n\n\t// 3 spaces:\n\t// color.space: current color space\n\t// space: space whose gamut we are mapping to\n\t// mapSpace: space with the coord we're reducing\n\n\tif (inGamut(color, space, { epsilon: 0 })) {\n\t\treturn color;\n\t}\n\n\tlet spaceColor;\n\tif (method === \"css\") {\n\t\tspaceColor = toGamutCSS(color, { space });\n\t}\n\telse {\n\t\tif (method !== \"clip\" && !inGamut(color, space)) {\n\n\t\t\tif (Object.prototype.hasOwnProperty.call(GMAPPRESET, method)) {\n\t\t\t\t({method, jnd, deltaEMethod, blackWhiteClamp} = GMAPPRESET[method]);\n\t\t\t}\n\n\t\t\t// Get the correct delta E method\n\t\t\tlet de = deltaE2000;\n\t\t\tif (deltaEMethod !== \"\") {\n\t\t\t\tfor (let m in deltaEMethods) {\n\t\t\t\t\tif (\"deltae\" + deltaEMethod.toLowerCase() === m.toLowerCase()) {\n\t\t\t\t\t\tde = deltaEMethods[m];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet clipped = toGamut(to(color, space), { method: \"clip\", space });\n\t\t\tif (de(color, clipped) > jnd) {\n\n\t\t\t\t// Clamp to SDR white and black if required\n\t\t\t\tif (Object.keys(blackWhiteClamp).length === 3) {\n\t\t\t\t\tlet channelMeta = ColorSpace.resolveCoord(blackWhiteClamp.channel);\n\t\t\t\t\tlet channel = get(to(color, channelMeta.space), channelMeta.id);\n\t\t\t\t\tif (isNone(channel)) {\n\t\t\t\t\t\tchannel = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (channel >= blackWhiteClamp.max) {\n\t\t\t\t\t\treturn to({ space: \"xyz-d65\", coords: WHITES[\"D65\"] }, color.space);\n\t\t\t\t\t}\n\t\t\t\t\telse if (channel <= blackWhiteClamp.min) {\n\t\t\t\t\t\treturn to({ space: \"xyz-d65\", coords: [0, 0, 0] }, color.space);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Reduce a coordinate of a certain color space until the color is in gamut\n\t\t\t\tlet coordMeta = ColorSpace.resolveCoord(method);\n\t\t\t\tlet mapSpace = coordMeta.space;\n\t\t\t\tlet coordId = coordMeta.id;\n\n\t\t\t\tlet mappedColor = to(color, mapSpace);\n\t\t\t\t// If we were already in the mapped color space, we need to resolve undefined channels\n\t\t\t\tmappedColor.coords.forEach((c, i) => {\n\t\t\t\t\tif (isNone(c)) {\n\t\t\t\t\t\tmappedColor.coords[i] = 0;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlet bounds = coordMeta.range || coordMeta.refRange;\n\t\t\t\tlet min = bounds[0];\n\t\t\t\tlet ε = calcEpsilon(jnd);\n\t\t\t\tlet low = min;\n\t\t\t\tlet high = get(mappedColor, coordId);\n\n\t\t\t\twhile (high - low > ε) {\n\t\t\t\t\tlet clipped = clone(mappedColor);\n\t\t\t\t\tclipped = toGamut(clipped, { space, method: \"clip\" });\n\t\t\t\t\tlet deltaE = de(mappedColor, clipped);\n\n\t\t\t\t\tif (deltaE - jnd < ε) {\n\t\t\t\t\t\tlow = get(mappedColor, coordId);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\thigh = get(mappedColor, coordId);\n\t\t\t\t\t}\n\n\t\t\t\t\tset(mappedColor, coordId, (low + high) / 2);\n\t\t\t\t}\n\n\t\t\t\tspaceColor = to(mappedColor, space);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tspaceColor = clipped;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tspaceColor = to(color, space);\n\t\t}\n\n\t\tif (method === \"clip\" // Dumb coord clipping\n\t\t\t// finish off smarter gamut mapping with clip to get rid of ε, see #17\n\t\t\t|| !inGamut(spaceColor, space, { epsilon: 0 })\n\t\t) {\n\t\t\tlet bounds = Object.values(space.coords).map(c => c.range || []);\n\n\t\t\tspaceColor.coords = spaceColor.coords.map((c, i) => {\n\t\t\t\tlet [min, max] = bounds[i];\n\n\t\t\t\tif (min !== undefined) {\n\t\t\t\t\tc = Math.max(min, c);\n\t\t\t\t}\n\n\t\t\t\tif (max !== undefined) {\n\t\t\t\t\tc = Math.min(c, max);\n\t\t\t\t}\n\n\t\t\t\treturn c;\n\t\t\t});\n\t\t}\n\t}\n\n\tif (space !== color.space) {\n\t\tspaceColor = to(spaceColor, color.space);\n\t}\n\n\tcolor.coords = spaceColor.coords;\n\treturn color;\n}\n\ntoGamut.returns = \"color\";\n\n// The reference colors to be used if lightness is out of the range 0-1 in the\n// `Oklch` space. These are created in the `Oklab` space, as it is used by the\n// DeltaEOK calculation, so it is guaranteed to be imported.\nconst COLORS = {\n\tWHITE: { space: OKLab, coords: [1, 0, 0] },\n\tBLACK: { space: OKLab, coords: [0, 0, 0] },\n};\n\n/**\n * Given a color `origin`, returns a new color that is in gamut using\n * the CSS Gamut Mapping Algorithm. If `space` is specified, it will be in gamut\n * in `space`, and returned in `space`. Otherwise, it will be in gamut and\n * returned in the color space of `origin`.\n * @param {Object} origin\n * @param {Object} options\n * @param {ColorSpace|string} options.space\n * @returns {Color}\n */\nfunction toGamutCSS (origin, {space} = {}) {\n\tconst JND = 0.02;\n\tconst ε = 0.0001;\n\n\torigin = getColor(origin);\n\n\tif (!space) {\n\t\tspace = origin.space;\n\t}\n\n\tspace = ColorSpace.get(space);\n\tconst oklchSpace = ColorSpace.get(\"oklch\");\n\n\tif (space.isUnbounded) {\n\t\treturn to(origin, space);\n\t}\n\n\tconst origin_OKLCH = to(origin, oklchSpace);\n\tlet L = origin_OKLCH.coords[0];\n\n\t// return media white or black, if lightness is out of range\n\tif (L >= 1) {\n\t\tconst white = to(COLORS.WHITE, space);\n\t\twhite.alpha = origin.alpha;\n\t\treturn to(white, space);\n\t}\n\tif (L <= 0) {\n\t\tconst black = to(COLORS.BLACK, space);\n\t\tblack.alpha = origin.alpha;\n\t\treturn to(black, space);\n\t}\n\n\tif (inGamut(origin_OKLCH, space, {epsilon: 0})) {\n\t\treturn to(origin_OKLCH, space);\n\t}\n\n\tfunction clip (_color) {\n\t\tconst destColor = to(_color, space);\n\t\tconst spaceCoords = Object.values(space.coords);\n\t\tdestColor.coords = destColor.coords.map((coord, index) => {\n\t\t\tif (\"range\" in spaceCoords[index]) {\n\t\t\t\tconst [min, max] = spaceCoords[index].range;\n\t\t\t\treturn clamp(min, coord, max);\n\t\t\t}\n\t\t\treturn coord;\n\t\t});\n\t\treturn destColor;\n\t}\n\tlet min = 0;\n\tlet max = origin_OKLCH.coords[1];\n\tlet min_inGamut = true;\n\tlet current = clone(origin_OKLCH);\n\tlet clipped = clip(current);\n\n\tlet E = deltaEOK(clipped, current);\n\tif (E < JND) {\n\t\treturn clipped;\n\t}\n\n\twhile ((max - min) > ε) {\n\t\tconst chroma = (min + max) / 2;\n\t\tcurrent.coords[1] = chroma;\n\t\tif (min_inGamut && inGamut(current, space, {epsilon: 0})) {\n\t\t\tmin = chroma;\n\t\t}\n\t\telse {\n\t\t\tclipped = clip(current);\n\t\t\tE = deltaEOK(clipped, current);\n\t\t\tif (E < JND) {\n\t\t\t\tif ((JND - E < ε)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmin_inGamut = false;\n\t\t\t\t\tmin = chroma;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmax = chroma;\n\t\t\t}\n\t\t}\n\t}\n\treturn clipped;\n}\n\n/**\n * Convert to color space and return a new color\n * @param {Object|string} space - Color space object or id\n * @param {Object} options\n * @param {boolean} options.inGamut - Whether to force resulting color in gamut\n * @returns {Color}\n */\nfunction to (color, space, {inGamut} = {}) {\n\tcolor = getColor(color);\n\tspace = ColorSpace.get(space);\n\n\tlet coords = space.from(color);\n\tlet ret = {space, coords, alpha: color.alpha};\n\n\tif (inGamut) {\n\t\tret = toGamut(ret, inGamut === true ? undefined : inGamut);\n\t}\n\n\treturn ret;\n}\n\nto.returns = \"color\";\n\n/**\n * Generic toString() method, outputs a color(spaceId ...coords) function, a functional syntax, or custom formats defined by the color space\n * @param {Object} options\n * @param {number} options.precision - Significant digits\n * @param {boolean} options.inGamut - Adjust coordinates to fit in gamut first? [default: false]\n */\nfunction serialize (color, {\n\tprecision = defaults.precision,\n\tformat = \"default\",\n\tinGamut: inGamut$1 = true,\n\t...customOptions\n} = {}) {\n\tlet ret;\n\n\tcolor = getColor(color);\n\n\tlet formatId = format;\n\tformat = color.space.getFormat(format)\n\t ?? color.space.getFormat(\"default\")\n\t ?? ColorSpace.DEFAULT_FORMAT;\n\n\t// The assignment to coords and inGamut needs to stay in the order they are now\n\t// The order of the assignment was changed as a workaround for a bug in Next.js\n\t// See this issue for details: https://github.com/color-js/color.js/issues/260\n\n\tlet coords = color.coords.slice(); // clone so we can manipulate it\n\n\tinGamut$1 ||= format.toGamut;\n\n\tif (inGamut$1 && !inGamut(color)) {\n\t\t// FIXME what happens if the color contains NaNs?\n\t\tcoords = toGamut(clone(color), inGamut$1 === true ? undefined : inGamut$1).coords;\n\t}\n\n\tif (format.type === \"custom\") {\n\t\tcustomOptions.precision = precision;\n\n\t\tif (format.serialize) {\n\t\t\tret = format.serialize(coords, color.alpha, customOptions);\n\t\t}\n\t\telse {\n\t\t\tthrow new TypeError(`format ${formatId} can only be used to parse colors, not for serialization`);\n\t\t}\n\t}\n\telse {\n\t\t// Functional syntax\n\t\tlet name = format.name || \"color\";\n\n\t\tif (format.serializeCoords) {\n\t\t\tcoords = format.serializeCoords(coords, precision);\n\t\t}\n\t\telse {\n\t\t\tif (precision !== null) {\n\t\t\t\tcoords = coords.map(c => {\n\t\t\t\t\treturn serializeNumber(c, {precision});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tlet args = [...coords];\n\n\t\tif (name === \"color\") {\n\t\t\t// If output is a color() function, add colorspace id as first argument\n\t\t\tlet cssId = format.id || format.ids?.[0] || color.space.id;\n\t\t\targs.unshift(cssId);\n\t\t}\n\n\t\tlet alpha = color.alpha;\n\t\tif (precision !== null) {\n\t\t\talpha = serializeNumber(alpha, {precision});\n\t\t}\n\n\t\tlet strAlpha = color.alpha >= 1 || format.noAlpha ? \"\" : `${format.commas ? \",\" : \" /\"} ${alpha}`;\n\t\tret = `${name}(${args.join(format.commas ? \", \" : \" \")}${strAlpha})`;\n\t}\n\n\treturn ret;\n}\n\n// convert an array of linear-light rec2020 values to CIE XYZ\n// using D65 (no chromatic adaptation)\n// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n// 0 is actually calculated as 4.994106574466076e-17\nconst toXYZ_M$5 = [\n\t[ 0.6369580483012914, 0.14461690358620832, 0.1688809751641721 ],\n\t[ 0.2627002120112671, 0.6779980715188708, 0.05930171646986196 ],\n\t[ 0.000000000000000, 0.028072693049087428, 1.060985057710791 ],\n];\n\n// from ITU-R BT.2124-0 Annex 2 p.3\nconst fromXYZ_M$5 = [\n\t[ 1.716651187971268, -0.355670783776392, -0.253366281373660 ],\n\t[ -0.666684351832489, 1.616481236634939, 0.0157685458139111 ],\n\t[ 0.017639857445311, -0.042770613257809, 0.942103121235474 ],\n];\n\nvar REC2020Linear = new RGBColorSpace({\n\tid: \"rec2020-linear\",\n\tcssId: \"--rec2020-linear\",\n\tname: \"Linear REC.2020\",\n\twhite: \"D65\",\n\ttoXYZ_M: toXYZ_M$5,\n\tfromXYZ_M: fromXYZ_M$5,\n});\n\n// import sRGB from \"./srgb.js\";\n\nconst α = 1.09929682680944;\nconst β = 0.018053968510807;\n\nvar REC2020 = new RGBColorSpace({\n\tid: \"rec2020\",\n\tname: \"REC.2020\",\n\tbase: REC2020Linear,\n\t// Non-linear transfer function from Rec. ITU-R BT.2020-2 table 4\n\ttoBase (RGB) {\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val < β * 4.5) {\n\t\t\t\treturn val / 4.5;\n\t\t\t}\n\n\t\t\treturn Math.pow((val + α - 1) / α, 1 / 0.45);\n\t\t});\n\t},\n\tfromBase (RGB) {\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val >= β) {\n\t\t\t\treturn α * Math.pow(val, 0.45) - (α - 1);\n\t\t\t}\n\n\t\t\treturn 4.5 * val;\n\t\t});\n\t},\n});\n\nconst toXYZ_M$4 = [\n\t[0.4865709486482162, 0.26566769316909306, 0.1982172852343625],\n\t[0.2289745640697488, 0.6917385218365064, 0.079286914093745],\n\t[0.0000000000000000, 0.04511338185890264, 1.043944368900976],\n];\n\nconst fromXYZ_M$4 = [\n\t[ 2.493496911941425, -0.9313836179191239, -0.40271078445071684],\n\t[-0.8294889695615747, 1.7626640603183463, 0.023624685841943577],\n\t[ 0.03584583024378447, -0.07617238926804182, 0.9568845240076872],\n];\n\nvar P3Linear = new RGBColorSpace({\n\tid: \"p3-linear\",\n\tcssId: \"--display-p3-linear\",\n\tname: \"Linear P3\",\n\twhite: \"D65\",\n\ttoXYZ_M: toXYZ_M$4,\n\tfromXYZ_M: fromXYZ_M$4,\n});\n\n// This is the linear-light version of sRGB\n// as used for example in SVG filters\n// or in Canvas\n\n// This matrix was calculated directly from the RGB and white chromaticities\n// when rounded to 8 decimal places, it agrees completely with the official matrix\n// see https://github.com/w3c/csswg-drafts/issues/5922\nconst toXYZ_M$3 = [\n\t[ 0.41239079926595934, 0.357584339383878, 0.1804807884018343 ],\n\t[ 0.21263900587151027, 0.715168678767756, 0.07219231536073371 ],\n\t[ 0.01933081871559182, 0.11919477979462598, 0.9505321522496607 ],\n];\n\n// This matrix is the inverse of the above;\n// again it agrees with the official definition when rounded to 8 decimal places\nconst fromXYZ_M$3 = [\n\t[ 3.2409699419045226, -1.537383177570094, -0.4986107602930034 ],\n\t[ -0.9692436362808796, 1.8759675015077202, 0.04155505740717559 ],\n\t[ 0.05563007969699366, -0.20397695888897652, 1.0569715142428786 ],\n];\n\nvar sRGBLinear = new RGBColorSpace({\n\tid: \"srgb-linear\",\n\tname: \"Linear sRGB\",\n\twhite: \"D65\",\n\ttoXYZ_M: toXYZ_M$3,\n\tfromXYZ_M: fromXYZ_M$3,\n});\n\n/* List of CSS color keywords\n * Note that this does not include currentColor, transparent,\n * or system colors\n */\n\n// To produce: Visit https://www.w3.org/TR/css-color-4/#named-colors\n// and run in the console:\n// copy($$(\"tr\", $(\".named-color-table tbody\")).map(tr => `\"${tr.cells[2].textContent.trim()}\": [${tr.cells[4].textContent.trim().split(/\\s+/).map(c => c === \"0\"? \"0\" : c === \"255\"? \"1\" : c + \" / 255\").join(\", \")}]`).join(\",\\n\"))\nvar KEYWORDS = {\n\t\"aliceblue\": [240 / 255, 248 / 255, 1],\n\t\"antiquewhite\": [250 / 255, 235 / 255, 215 / 255],\n\t\"aqua\": [0, 1, 1],\n\t\"aquamarine\": [127 / 255, 1, 212 / 255],\n\t\"azure\": [240 / 255, 1, 1],\n\t\"beige\": [245 / 255, 245 / 255, 220 / 255],\n\t\"bisque\": [1, 228 / 255, 196 / 255],\n\t\"black\": [0, 0, 0],\n\t\"blanchedalmond\": [1, 235 / 255, 205 / 255],\n\t\"blue\": [0, 0, 1],\n\t\"blueviolet\": [138 / 255, 43 / 255, 226 / 255],\n\t\"brown\": [165 / 255, 42 / 255, 42 / 255],\n\t\"burlywood\": [222 / 255, 184 / 255, 135 / 255],\n\t\"cadetblue\": [95 / 255, 158 / 255, 160 / 255],\n\t\"chartreuse\": [127 / 255, 1, 0],\n\t\"chocolate\": [210 / 255, 105 / 255, 30 / 255],\n\t\"coral\": [1, 127 / 255, 80 / 255],\n\t\"cornflowerblue\": [100 / 255, 149 / 255, 237 / 255],\n\t\"cornsilk\": [1, 248 / 255, 220 / 255],\n\t\"crimson\": [220 / 255, 20 / 255, 60 / 255],\n\t\"cyan\": [0, 1, 1],\n\t\"darkblue\": [0, 0, 139 / 255],\n\t\"darkcyan\": [0, 139 / 255, 139 / 255],\n\t\"darkgoldenrod\": [184 / 255, 134 / 255, 11 / 255],\n\t\"darkgray\": [169 / 255, 169 / 255, 169 / 255],\n\t\"darkgreen\": [0, 100 / 255, 0],\n\t\"darkgrey\": [169 / 255, 169 / 255, 169 / 255],\n\t\"darkkhaki\": [189 / 255, 183 / 255, 107 / 255],\n\t\"darkmagenta\": [139 / 255, 0, 139 / 255],\n\t\"darkolivegreen\": [85 / 255, 107 / 255, 47 / 255],\n\t\"darkorange\": [1, 140 / 255, 0],\n\t\"darkorchid\": [153 / 255, 50 / 255, 204 / 255],\n\t\"darkred\": [139 / 255, 0, 0],\n\t\"darksalmon\": [233 / 255, 150 / 255, 122 / 255],\n\t\"darkseagreen\": [143 / 255, 188 / 255, 143 / 255],\n\t\"darkslateblue\": [72 / 255, 61 / 255, 139 / 255],\n\t\"darkslategray\": [47 / 255, 79 / 255, 79 / 255],\n\t\"darkslategrey\": [47 / 255, 79 / 255, 79 / 255],\n\t\"darkturquoise\": [0, 206 / 255, 209 / 255],\n\t\"darkviolet\": [148 / 255, 0, 211 / 255],\n\t\"deeppink\": [1, 20 / 255, 147 / 255],\n\t\"deepskyblue\": [0, 191 / 255, 1],\n\t\"dimgray\": [105 / 255, 105 / 255, 105 / 255],\n\t\"dimgrey\": [105 / 255, 105 / 255, 105 / 255],\n\t\"dodgerblue\": [30 / 255, 144 / 255, 1],\n\t\"firebrick\": [178 / 255, 34 / 255, 34 / 255],\n\t\"floralwhite\": [1, 250 / 255, 240 / 255],\n\t\"forestgreen\": [34 / 255, 139 / 255, 34 / 255],\n\t\"fuchsia\": [1, 0, 1],\n\t\"gainsboro\": [220 / 255, 220 / 255, 220 / 255],\n\t\"ghostwhite\": [248 / 255, 248 / 255, 1],\n\t\"gold\": [1, 215 / 255, 0],\n\t\"goldenrod\": [218 / 255, 165 / 255, 32 / 255],\n\t\"gray\": [128 / 255, 128 / 255, 128 / 255],\n\t\"green\": [0, 128 / 255, 0],\n\t\"greenyellow\": [173 / 255, 1, 47 / 255],\n\t\"grey\": [128 / 255, 128 / 255, 128 / 255],\n\t\"honeydew\": [240 / 255, 1, 240 / 255],\n\t\"hotpink\": [1, 105 / 255, 180 / 255],\n\t\"indianred\": [205 / 255, 92 / 255, 92 / 255],\n\t\"indigo\": [75 / 255, 0, 130 / 255],\n\t\"ivory\": [1, 1, 240 / 255],\n\t\"khaki\": [240 / 255, 230 / 255, 140 / 255],\n\t\"lavender\": [230 / 255, 230 / 255, 250 / 255],\n\t\"lavenderblush\": [1, 240 / 255, 245 / 255],\n\t\"lawngreen\": [124 / 255, 252 / 255, 0],\n\t\"lemonchiffon\": [1, 250 / 255, 205 / 255],\n\t\"lightblue\": [173 / 255, 216 / 255, 230 / 255],\n\t\"lightcoral\": [240 / 255, 128 / 255, 128 / 255],\n\t\"lightcyan\": [224 / 255, 1, 1],\n\t\"lightgoldenrodyellow\": [250 / 255, 250 / 255, 210 / 255],\n\t\"lightgray\": [211 / 255, 211 / 255, 211 / 255],\n\t\"lightgreen\": [144 / 255, 238 / 255, 144 / 255],\n\t\"lightgrey\": [211 / 255, 211 / 255, 211 / 255],\n\t\"lightpink\": [1, 182 / 255, 193 / 255],\n\t\"lightsalmon\": [1, 160 / 255, 122 / 255],\n\t\"lightseagreen\": [32 / 255, 178 / 255, 170 / 255],\n\t\"lightskyblue\": [135 / 255, 206 / 255, 250 / 255],\n\t\"lightslategray\": [119 / 255, 136 / 255, 153 / 255],\n\t\"lightslategrey\": [119 / 255, 136 / 255, 153 / 255],\n\t\"lightsteelblue\": [176 / 255, 196 / 255, 222 / 255],\n\t\"lightyellow\": [1, 1, 224 / 255],\n\t\"lime\": [0, 1, 0],\n\t\"limegreen\": [50 / 255, 205 / 255, 50 / 255],\n\t\"linen\": [250 / 255, 240 / 255, 230 / 255],\n\t\"magenta\": [1, 0, 1],\n\t\"maroon\": [128 / 255, 0, 0],\n\t\"mediumaquamarine\": [102 / 255, 205 / 255, 170 / 255],\n\t\"mediumblue\": [0, 0, 205 / 255],\n\t\"mediumorchid\": [186 / 255, 85 / 255, 211 / 255],\n\t\"mediumpurple\": [147 / 255, 112 / 255, 219 / 255],\n\t\"mediumseagreen\": [60 / 255, 179 / 255, 113 / 255],\n\t\"mediumslateblue\": [123 / 255, 104 / 255, 238 / 255],\n\t\"mediumspringgreen\": [0, 250 / 255, 154 / 255],\n\t\"mediumturquoise\": [72 / 255, 209 / 255, 204 / 255],\n\t\"mediumvioletred\": [199 / 255, 21 / 255, 133 / 255],\n\t\"midnightblue\": [25 / 255, 25 / 255, 112 / 255],\n\t\"mintcream\": [245 / 255, 1, 250 / 255],\n\t\"mistyrose\": [1, 228 / 255, 225 / 255],\n\t\"moccasin\": [1, 228 / 255, 181 / 255],\n\t\"navajowhite\": [1, 222 / 255, 173 / 255],\n\t\"navy\": [0, 0, 128 / 255],\n\t\"oldlace\": [253 / 255, 245 / 255, 230 / 255],\n\t\"olive\": [128 / 255, 128 / 255, 0],\n\t\"olivedrab\": [107 / 255, 142 / 255, 35 / 255],\n\t\"orange\": [1, 165 / 255, 0],\n\t\"orangered\": [1, 69 / 255, 0],\n\t\"orchid\": [218 / 255, 112 / 255, 214 / 255],\n\t\"palegoldenrod\": [238 / 255, 232 / 255, 170 / 255],\n\t\"palegreen\": [152 / 255, 251 / 255, 152 / 255],\n\t\"paleturquoise\": [175 / 255, 238 / 255, 238 / 255],\n\t\"palevioletred\": [219 / 255, 112 / 255, 147 / 255],\n\t\"papayawhip\": [1, 239 / 255, 213 / 255],\n\t\"peachpuff\": [1, 218 / 255, 185 / 255],\n\t\"peru\": [205 / 255, 133 / 255, 63 / 255],\n\t\"pink\": [1, 192 / 255, 203 / 255],\n\t\"plum\": [221 / 255, 160 / 255, 221 / 255],\n\t\"powderblue\": [176 / 255, 224 / 255, 230 / 255],\n\t\"purple\": [128 / 255, 0, 128 / 255],\n\t\"rebeccapurple\": [102 / 255, 51 / 255, 153 / 255],\n\t\"red\": [1, 0, 0],\n\t\"rosybrown\": [188 / 255, 143 / 255, 143 / 255],\n\t\"royalblue\": [65 / 255, 105 / 255, 225 / 255],\n\t\"saddlebrown\": [139 / 255, 69 / 255, 19 / 255],\n\t\"salmon\": [250 / 255, 128 / 255, 114 / 255],\n\t\"sandybrown\": [244 / 255, 164 / 255, 96 / 255],\n\t\"seagreen\": [46 / 255, 139 / 255, 87 / 255],\n\t\"seashell\": [1, 245 / 255, 238 / 255],\n\t\"sienna\": [160 / 255, 82 / 255, 45 / 255],\n\t\"silver\": [192 / 255, 192 / 255, 192 / 255],\n\t\"skyblue\": [135 / 255, 206 / 255, 235 / 255],\n\t\"slateblue\": [106 / 255, 90 / 255, 205 / 255],\n\t\"slategray\": [112 / 255, 128 / 255, 144 / 255],\n\t\"slategrey\": [112 / 255, 128 / 255, 144 / 255],\n\t\"snow\": [1, 250 / 255, 250 / 255],\n\t\"springgreen\": [0, 1, 127 / 255],\n\t\"steelblue\": [70 / 255, 130 / 255, 180 / 255],\n\t\"tan\": [210 / 255, 180 / 255, 140 / 255],\n\t\"teal\": [0, 128 / 255, 128 / 255],\n\t\"thistle\": [216 / 255, 191 / 255, 216 / 255],\n\t\"tomato\": [1, 99 / 255, 71 / 255],\n\t\"turquoise\": [64 / 255, 224 / 255, 208 / 255],\n\t\"violet\": [238 / 255, 130 / 255, 238 / 255],\n\t\"wheat\": [245 / 255, 222 / 255, 179 / 255],\n\t\"white\": [1, 1, 1],\n\t\"whitesmoke\": [245 / 255, 245 / 255, 245 / 255],\n\t\"yellow\": [1, 1, 0],\n\t\"yellowgreen\": [154 / 255, 205 / 255, 50 / 255],\n};\n\nlet coordGrammar = Array(3).fill(\"<percentage> | <number>[0, 255]\");\nlet coordGrammarNumber = Array(3).fill(\"<number>[0, 255]\");\n\nvar sRGB = new RGBColorSpace({\n\tid: \"srgb\",\n\tname: \"sRGB\",\n\tbase: sRGBLinear,\n\tfromBase: rgb => {\n\t\t// convert an array of linear-light sRGB values in the range 0.0-1.0\n\t\t// to gamma corrected form\n\t\t// https://en.wikipedia.org/wiki/SRGB\n\t\treturn rgb.map(val => {\n\t\t\tlet sign = val < 0 ? -1 : 1;\n\t\t\tlet abs = val * sign;\n\n\t\t\tif (abs > 0.0031308) {\n\t\t\t\treturn sign * (1.055 * (abs ** (1 / 2.4)) - 0.055);\n\t\t\t}\n\n\t\t\treturn 12.92 * val;\n\t\t});\n\t},\n\ttoBase: rgb => {\n\t\t// convert an array of sRGB values in the range 0.0 - 1.0\n\t\t// to linear light (un-companded) form.\n\t\t// https://en.wikipedia.org/wiki/SRGB\n\t\treturn rgb.map(val => {\n\t\t\tlet sign = val < 0 ? -1 : 1;\n\t\t\tlet abs = val * sign;\n\n\t\t\tif (abs <= 0.04045) {\n\t\t\t\treturn val / 12.92;\n\t\t\t}\n\n\t\t\treturn sign * (((abs + 0.055) / 1.055) ** 2.4);\n\t\t});\n\t},\n\tformats: {\n\t\t\"rgb\": {\n\t\t\tcoords: coordGrammar,\n\t\t},\n\t\t\"rgb_number\": {\n\t\t\tname: \"rgb\",\n\t\t\tcommas: true,\n\t\t\tcoords: coordGrammarNumber,\n\t\t\tnoAlpha: true,\n\t\t},\n\t\t\"color\": { /* use defaults */ },\n\t\t\"rgba\": {\n\t\t\tcoords: coordGrammar,\n\t\t\tcommas: true,\n\t\t\tlastAlpha: true,\n\t\t},\n\t\t\"rgba_number\": {\n\t\t\tname: \"rgba\",\n\t\t\tcommas: true,\n\t\t\tcoords: coordGrammarNumber,\n\t\t},\n\t\t\"hex\": {\n\t\t\ttype: \"custom\",\n\t\t\ttoGamut: true,\n\t\t\ttest: str => /^#([a-f0-9]{3,4}){1,2}$/i.test(str),\n\t\t\tparse (str) {\n\t\t\t\tif (str.length <= 5) {\n\t\t\t\t\t// #rgb or #rgba, duplicate digits\n\t\t\t\t\tstr = str.replace(/[a-f0-9]/gi, \"$&$&\");\n\t\t\t\t}\n\n\t\t\t\tlet rgba = [];\n\t\t\t\tstr.replace(/[a-f0-9]{2}/gi, component => {\n\t\t\t\t\trgba.push(parseInt(component, 16) / 255);\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\tspaceId: \"srgb\",\n\t\t\t\t\tcoords: rgba.slice(0, 3),\n\t\t\t\t\talpha: rgba.slice(3)[0],\n\t\t\t\t};\n\t\t\t},\n\t\t\tserialize: (coords, alpha, {\n\t\t\t\tcollapse = true, // collapse to 3-4 digit hex when possible?\n\t\t\t} = {}) => {\n\t\t\t\tif (alpha < 1) {\n\t\t\t\t\tcoords.push(alpha);\n\t\t\t\t}\n\n\t\t\t\tcoords = coords.map(c => Math.round(c * 255));\n\n\t\t\t\tlet collapsible = collapse && coords.every(c => c % 17 === 0);\n\n\t\t\t\tlet hex = coords.map(c => {\n\t\t\t\t\tif (collapsible) {\n\t\t\t\t\t\treturn (c / 17).toString(16);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn c.toString(16).padStart(2, \"0\");\n\t\t\t\t}).join(\"\");\n\n\t\t\t\treturn \"#\" + hex;\n\t\t\t},\n\t\t},\n\t\t\"keyword\": {\n\t\t\ttype: \"custom\",\n\t\t\ttest: str => /^[a-z]+$/i.test(str),\n\t\t\tparse (str) {\n\t\t\t\tstr = str.toLowerCase();\n\t\t\t\tlet ret = {spaceId: \"srgb\", coords: null, alpha: 1};\n\n\t\t\t\tif (str === \"transparent\") {\n\t\t\t\t\tret.coords = KEYWORDS.black;\n\t\t\t\t\tret.alpha = 0;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tret.coords = KEYWORDS[str];\n\t\t\t\t}\n\n\t\t\t\tif (ret.coords) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n});\n\nvar P3 = new RGBColorSpace({\n\tid: \"p3\",\n\tcssId: \"display-p3\",\n\tname: \"P3\",\n\tbase: P3Linear,\n\t// Gamma encoding/decoding is the same as sRGB\n\tfromBase: sRGB.fromBase,\n\ttoBase: sRGB.toBase,\n});\n\n// Default space for CSS output. Code in Color.js makes this wider if there's a DOM available\ndefaults.display_space = sRGB;\n\nlet supportsNone;\n\nif (typeof CSS !== \"undefined\" && CSS.supports) {\n\t// Find widest supported color space for CSS\n\tfor (let space of [lab, REC2020, P3]) {\n\t\tlet coords = space.getMinCoords();\n\t\tlet color = {space, coords, alpha: 1};\n\t\tlet str = serialize(color);\n\n\t\tif (CSS.supports(\"color\", str)) {\n\t\t\tdefaults.display_space = space;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n/**\n * Returns a serialization of the color that can actually be displayed in the browser.\n * If the default serialization can be displayed, it is returned.\n * Otherwise, the color is converted to Lab, REC2020, or P3, whichever is the widest supported.\n * In Node.js, this is basically equivalent to `serialize()` but returns a `String` object instead.\n *\n * @export\n * @param {{space, coords} | Color | string} color\n * @param {*} [options={}] Options to be passed to serialize()\n * @param {ColorSpace | string} [options.space = defaults.display_space] Color space to use for serialization if default is not supported\n * @returns {String} String object containing the serialized color with a color property containing the converted color (or the original, if no conversion was necessary)\n */\nfunction display (color, {space = defaults.display_space, ...options} = {}) {\n\tlet ret = serialize(color, options);\n\n\tif (typeof CSS === \"undefined\" || CSS.supports(\"color\", ret) || !defaults.display_space) {\n\t\tret = new String(ret);\n\t\tret.color = color;\n\t}\n\telse {\n\t\t// If we're here, what we were about to output is not supported\n\t\tlet fallbackColor = color;\n\n\t\t// First, check if the culprit is none values\n\t\tlet hasNone = color.coords.some(isNone) || isNone(color.alpha);\n\n\t\tif (hasNone) {\n\t\t\t// Does the browser support none values?\n\t\t\tif (!(supportsNone ??= CSS.supports(\"color\", \"hsl(none 50% 50%)\"))) {\n\t\t\t\t// Nope, try again without none\n\t\t\t\tfallbackColor = clone(color);\n\t\t\t\tfallbackColor.coords = fallbackColor.coords.map(skipNone);\n\t\t\t\tfallbackColor.alpha = skipNone(fallbackColor.alpha);\n\n\t\t\t\tret = serialize(fallbackColor, options);\n\n\t\t\t\tif (CSS.supports(\"color\", ret)) {\n\t\t\t\t\t// We're done, now it's supported\n\t\t\t\t\tret = new String(ret);\n\t\t\t\t\tret.color = fallbackColor;\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're here, the color function is not supported\n\t\t// Fall back to fallback space\n\t\tfallbackColor = to(fallbackColor, space);\n\t\tret = new String(serialize(fallbackColor, options));\n\t\tret.color = fallbackColor;\n\t}\n\n\treturn ret;\n}\n\nfunction equals (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\treturn color1.space === color2.space\n\t && color1.alpha === color2.alpha\n\t && color1.coords.every((c, i) => c === color2.coords[i]);\n}\n\n/**\n * Relative luminance\n */\n\nfunction getLuminance (color) {\n\t// Assume getColor() is called on color in get()\n\treturn get(color, [xyz_d65, \"y\"]);\n}\n\nfunction setLuminance (color, value) {\n\t// Assume getColor() is called on color in set()\n\tset(color, [xyz_d65, \"y\"], value);\n}\n\nfunction register$2 (Color) {\n\tObject.defineProperty(Color.prototype, \"luminance\", {\n\t\tget () {\n\t\t\treturn getLuminance(this);\n\t\t},\n\t\tset (value) {\n\t\t\tsetLuminance(this, value);\n\t\t},\n\t});\n}\n\nvar luminance = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tgetLuminance: getLuminance,\n\tregister: register$2,\n\tsetLuminance: setLuminance\n});\n\n// WCAG 2.0 contrast https://www.w3.org/TR/WCAG20-TECHS/G18.html\n// Simple contrast, with fixed 5% viewing flare contribution\n// Symmetric, does not matter which is foreground and which is background\n\n\nfunction contrastWCAG21 (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\tlet Y1 = Math.max(getLuminance(color1), 0);\n\tlet Y2 = Math.max(getLuminance(color2), 0);\n\n\tif (Y2 > Y1) {\n\t\t[Y1, Y2] = [Y2, Y1];\n\t}\n\n\treturn (Y1 + .05) / (Y2 + .05);\n}\n\n// APCA 0.0.98G\n// https://github.com/Myndex/apca-w3\n// see also https://github.com/w3c/silver/issues/643\n\n\n// exponents\nconst normBG = 0.56;\nconst normTXT = 0.57;\nconst revTXT = 0.62;\nconst revBG = 0.65;\n\n// clamps\nconst blkThrs = 0.022;\nconst blkClmp = 1.414;\nconst loClip = 0.1;\nconst deltaYmin = 0.0005;\n\n// scalers\n// see https://github.com/w3c/silver/issues/645\nconst scaleBoW = 1.14;\nconst loBoWoffset = 0.027;\nconst scaleWoB = 1.14;\n\nfunction fclamp (Y) {\n\tif (Y >= blkThrs) {\n\t\treturn Y;\n\t}\n\treturn Y + (blkThrs - Y) ** blkClmp;\n}\n\nfunction linearize (val) {\n\tlet sign = val < 0 ? -1 : 1;\n\tlet abs = Math.abs(val);\n\treturn sign * Math.pow(abs, 2.4);\n}\n\n// Not symmetric, requires a foreground (text) color, and a background color\nfunction contrastAPCA (background, foreground) {\n\tforeground = getColor(foreground);\n\tbackground = getColor(background);\n\n\tlet S;\n\tlet C;\n\tlet Sapc;\n\n\t// Myndex as-published, assumes sRGB inputs\n\tlet R, G, B;\n\n\tforeground = to(foreground, \"srgb\");\n\t// Should these be clamped to in-gamut values?\n\n\t// Calculates \"screen luminance\" with non-standard simple gamma EOTF\n\t// weights should be from CSS Color 4, not the ones here which are via Myndex and copied from Lindbloom\n\t[R, G, B] = foreground.coords;\n\tlet lumTxt = linearize(R) * 0.2126729 + linearize(G) * 0.7151522 + linearize(B) * 0.0721750;\n\n\tbackground = to(background, \"srgb\");\n\t[R, G, B] = background.coords;\n\tlet lumBg = linearize(R) * 0.2126729 + linearize(G) * 0.7151522 + linearize(B) * 0.0721750;\n\n\t// toe clamping of very dark values to account for flare\n\tlet Ytxt = fclamp(lumTxt);\n\tlet Ybg = fclamp(lumBg);\n\n\t// are we \"Black on White\" (dark on light), or light on dark?\n\tlet BoW = Ybg > Ytxt;\n\n\t// why is this a delta, when Y is not perceptually uniform?\n\t// Answer: it is a noise gate, see\n\t// https://github.com/LeaVerou/color.js/issues/208\n\tif (Math.abs(Ybg - Ytxt) < deltaYmin) {\n\t\tC = 0;\n\t}\n\telse {\n\t\tif (BoW) {\n\t\t\t// dark text on light background\n\t\t\tS = Ybg ** normBG - Ytxt ** normTXT;\n\t\t\tC = S * scaleBoW;\n\t\t}\n\t\telse {\n\t\t\t// light text on dark background\n\t\t\tS = Ybg ** revBG - Ytxt ** revTXT;\n\t\t\tC = S * scaleWoB;\n\t\t}\n\t}\n\tif (Math.abs(C) < loClip) {\n\t\tSapc = 0;\n\t}\n\telse if (C > 0) {\n\t\t// not clear whether Woffset is loBoWoffset or loWoBoffset\n\t\t// but they have the same value\n\t\tSapc = C - loBoWoffset;\n\t}\n\telse {\n\t\tSapc = C + loBoWoffset;\n\t}\n\n\treturn Sapc * 100;\n}\n\n// Michelson luminance contrast\n// the relation between the spread and the sum of the two luminances\n// Symmetric, does not matter which is foreground and which is background\n// No black level compensation for flare.\n\n\nfunction contrastMichelson (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\tlet Y1 = Math.max(getLuminance(color1), 0);\n\tlet Y2 = Math.max(getLuminance(color2), 0);\n\n\tif (Y2 > Y1) {\n\t\t[Y1, Y2] = [Y2, Y1];\n\t}\n\n\tlet denom = (Y1 + Y2);\n\treturn denom === 0 ? 0 : (Y1 - Y2) / denom;\n}\n\n// Weber luminance contrast\n// The difference between the two luminances divided by the lower luminance\n// Symmetric, does not matter which is foreground and which is background\n// No black level compensation for flare.\n\n\n// the darkest sRGB color above black is #000001 and this produces\n// a plain Weber contrast of ~45647.\n// So, setting the divide-by-zero result at 50000 is a reasonable\n// max clamp for the plain Weber\nconst max = 50000;\n\nfunction contrastWeber (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\tlet Y1 = Math.max(getLuminance(color1), 0);\n\tlet Y2 = Math.max(getLuminance(color2), 0);\n\n\tif (Y2 > Y1) {\n\t\t[Y1, Y2] = [Y2, Y1];\n\t}\n\n\treturn Y2 === 0 ? max : (Y1 - Y2) / Y2;\n}\n\n// CIE Lightness difference, as used by Google Material Design\n// Google HCT Tone is the same as CIE Lightness\n// https://material.io/blog/science-of-color-design\n\n\nfunction contrastLstar (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\tlet L1 = get(color1, [lab, \"l\"]);\n\tlet L2 = get(color2, [lab, \"l\"]);\n\n\treturn Math.abs(L1 - L2);\n}\n\n// κ * ε = 2^3 = 8\nconst ε$3 = 216 / 24389; // 6^3/29^3 == (24/116)^3\nconst ε3 = 24 / 116;\nconst κ$2 = 24389 / 27; // 29^3/3^3\n\nlet white$1 = WHITES.D65;\n\nvar lab_d65 = new ColorSpace({\n\tid: \"lab-d65\",\n\tname: \"Lab D65\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 100],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t\ta: {\n\t\t\trefRange: [-125, 125],\n\t\t},\n\t\tb: {\n\t\t\trefRange: [-125, 125],\n\t\t},\n\t},\n\n\t// Assuming XYZ is relative to D65, convert to CIE Lab\n\t// from CIE standard, which now defines these as a rational fraction\n\twhite: white$1,\n\n\tbase: xyz_d65,\n\t// Convert D65-adapted XYZ to Lab\n\t// CIE 15.3:2004 section 8.2.1.1\n\tfromBase (XYZ) {\n\t\t// compute xyz, which is XYZ scaled relative to reference white\n\t\tlet xyz = XYZ.map((value, i) => value / white$1[i]);\n\n\t\t// now compute f\n\t\tlet f = xyz.map(value => value > ε$3 ? Math.cbrt(value) : (κ$2 * value + 16) / 116);\n\n\t\treturn [\n\t\t\t(116 * f[1]) - 16, // L\n\t\t\t500 * (f[0] - f[1]), // a\n\t\t\t200 * (f[1] - f[2]), // b\n\t\t];\n\t},\n\t// Convert Lab to D65-adapted XYZ\n\t// Same result as CIE 15.3:2004 Appendix D although the derivation is different\n\t// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\ttoBase (Lab) {\n\t\t// compute f, starting with the luminance-related term\n\t\tlet f = [];\n\t\tf[1] = (Lab[0] + 16) / 116;\n\t\tf[0] = Lab[1] / 500 + f[1];\n\t\tf[2] = f[1] - Lab[2] / 200;\n\n\t\t// compute xyz\n\t\tlet xyz = [\n\t\t\tf[0] > ε3 ? Math.pow(f[0], 3) : (116 * f[0] - 16) / κ$2,\n\t\t\tLab[0] > 8 ? Math.pow((Lab[0] + 16) / 116, 3) : Lab[0] / κ$2,\n\t\t\tf[2] > ε3 ? Math.pow(f[2], 3) : (116 * f[2] - 16) / κ$2,\n\t\t];\n\n\t\t// Compute XYZ by scaling xyz by reference white\n\t\treturn xyz.map((value, i) => value * white$1[i]);\n\t},\n\n\tformats: {\n\t\t\"lab-d65\": {\n\t\t\tcoords: [\"<number> | <percentage>\", \"<number> | <percentage>[-1,1]\", \"<number> | <percentage>[-1,1]\"],\n\t\t},\n\t},\n});\n\n// Delta Phi Star perceptual lightness contrast\n// See https://github.com/Myndex/deltaphistar\n// The (difference between two Lstars each raised to phi) raised to (1/phi)\n// Symmetric, does not matter which is foreground and which is background\n\n\nconst phi = Math.pow(5, 0.5) * 0.5 + 0.5; // Math.phi can be used if Math.js\n\nfunction contrastDeltaPhi (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\tlet Lstr1 = get(color1, [lab_d65, \"l\"]);\n\tlet Lstr2 = get(color2, [lab_d65, \"l\"]);\n\n\tlet deltaPhiStar = Math.abs(Math.pow(Lstr1, phi) - Math.pow(Lstr2, phi));\n\n\tlet contrast = Math.pow(deltaPhiStar, (1 / phi)) * Math.SQRT2 - 40;\n\n\treturn (contrast < 7.5) ? 0.0 : contrast ;\n}\n\nvar contrastMethods = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tcontrastAPCA: contrastAPCA,\n\tcontrastDeltaPhi: contrastDeltaPhi,\n\tcontrastLstar: contrastLstar,\n\tcontrastMichelson: contrastMichelson,\n\tcontrastWCAG21: contrastWCAG21,\n\tcontrastWeber: contrastWeber\n});\n\nfunction contrast (background, foreground, o = {}) {\n\tif (isString(o)) {\n\t\to = {algorithm: o};\n\t}\n\n\tlet {algorithm, ...rest} = o;\n\n\tif (!algorithm) {\n\t\tlet algorithms = Object.keys(contrastMethods).map(a => a.replace(/^contrast/, \"\")).join(\", \");\n\t\tthrow new TypeError(`contrast() function needs a contrast algorithm. Please specify one of: ${algorithms}`);\n\t}\n\n\tbackground = getColor(background);\n\tforeground = getColor(foreground);\n\n\tfor (let a in contrastMethods) {\n\t\tif (\"contrast\" + algorithm.toLowerCase() === a.toLowerCase()) {\n\t\t\treturn contrastMethods[a](background, foreground, rest);\n\t\t}\n\t}\n\n\tthrow new TypeError(`Unknown contrast algorithm: ${algorithm}`);\n}\n\n// Chromaticity coordinates\nfunction uv (color) {\n\t// Assumes getAll() calls getColor() on color\n\tlet [X, Y, Z] = getAll(color, xyz_d65);\n\tlet denom = X + 15 * Y + 3 * Z;\n\treturn [4 * X / denom, 9 * Y / denom];\n}\n\nfunction xy (color) {\n\t// Assumes getAll() calls getColor() on color\n\tlet [X, Y, Z] = getAll(color, xyz_d65);\n\tlet sum = X + Y + Z;\n\treturn [X / sum, Y / sum];\n}\n\nfunction register$1 (Color) {\n\t// no setters, as lightness information is lost\n\t// when converting color to chromaticity\n\tObject.defineProperty(Color.prototype, \"uv\", {\n\t\tget () {\n\t\t\treturn uv(this);\n\t\t},\n\t});\n\n\tObject.defineProperty(Color.prototype, \"xy\", {\n\t\tget () {\n\t\t\treturn xy(this);\n\t\t},\n\t});\n}\n\nvar chromaticity = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tregister: register$1,\n\tuv: uv,\n\txy: xy\n});\n\nfunction deltaE (c1, c2, o = {}) {\n\tif (isString(o)) {\n\t\to = {method: o};\n\t}\n\n\tlet {method = defaults.deltaE, ...rest} = o;\n\n\tfor (let m in deltaEMethods) {\n\t\tif (\"deltae\" + method.toLowerCase() === m.toLowerCase()) {\n\t\t\treturn deltaEMethods[m](c1, c2, rest);\n\t\t}\n\t}\n\n\tthrow new TypeError(`Unknown deltaE method: ${method}`);\n}\n\nfunction lighten (color, amount = .25) {\n\tlet space = ColorSpace.get(\"oklch\", \"lch\");\n\tlet lightness = [space, \"l\"];\n\treturn set(color, lightness, l => l * (1 + amount));\n}\n\nfunction darken (color, amount = .25) {\n\tlet space = ColorSpace.get(\"oklch\", \"lch\");\n\tlet lightness = [space, \"l\"];\n\treturn set(color, lightness, l => l * (1 - amount));\n}\n\nvar variations = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tdarken: darken,\n\tlighten: lighten\n});\n\n/**\n * Functions related to color interpolation\n */\n\n/**\n * Return an intermediate color between two colors\n * Signatures: mix(c1, c2, p, options)\n * mix(c1, c2, options)\n * mix(color)\n * @param {Color | string} c1 The first color\n * @param {Color | string} [c2] The second color\n * @param {number} [p=.5] A 0-1 percentage where 0 is c1 and 1 is c2\n * @param {Object} [o={}]\n * @return {Color}\n */\nfunction mix (c1, c2, p = .5, o = {}) {\n\t[c1, c2] = [getColor(c1), getColor(c2)];\n\n\tif (type(p) === \"object\") {\n\t\t[p, o] = [.5, p];\n\t}\n\n\tlet r = range(c1, c2, o);\n\treturn r(p);\n}\n\n/**\n *\n * @param {Color | string | Function} c1 The first color or a range\n * @param {Color | string} [c2] The second color if c1 is not a range\n * @param {Object} [options={}]\n * @return {Color[]}\n */\nfunction steps (c1, c2, options = {}) {\n\tlet colorRange;\n\n\tif (isRange(c1)) {\n\t\t// Tweaking existing range\n\t\t[colorRange, options] = [c1, c2];\n\t\t[c1, c2] = colorRange.rangeArgs.colors;\n\t}\n\n\tlet {\n\t\tmaxDeltaE, deltaEMethod,\n\t\tsteps = 2, maxSteps = 1000,\n\t\t...rangeOptions\n\t} = options;\n\n\tif (!colorRange) {\n\t\t[c1, c2] = [getColor(c1), getColor(c2)];\n\t\tcolorRange = range(c1, c2, rangeOptions);\n\t}\n\n\tlet totalDelta = deltaE(c1, c2);\n\tlet actualSteps = maxDeltaE > 0 ? Math.max(steps, Math.ceil(totalDelta / maxDeltaE) + 1) : steps;\n\tlet ret = [];\n\n\tif (maxSteps !== undefined) {\n\t\tactualSteps = Math.min(actualSteps, maxSteps);\n\t}\n\n\tif (actualSteps === 1) {\n\t\tret = [{p: .5, color: colorRange(.5)}];\n\t}\n\telse {\n\t\tlet step = 1 / (actualSteps - 1);\n\t\tret = Array.from({length: actualSteps}, (_, i) => {\n\t\t\tlet p = i * step;\n\t\t\treturn {p, color: colorRange(p)};\n\t\t});\n\t}\n\n\tif (maxDeltaE > 0) {\n\t\t// Iterate over all stops and find max deltaE\n\t\tlet maxDelta = ret.reduce((acc, cur, i) => {\n\t\t\tif (i === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tlet ΔΕ = deltaE(cur.color, ret[i - 1].color, deltaEMethod);\n\t\t\treturn Math.max(acc, ΔΕ);\n\t\t}, 0);\n\n\t\twhile (maxDelta > maxDeltaE) {\n\t\t\t// Insert intermediate stops and measure maxDelta again\n\t\t\t// We need to do this for all pairs, otherwise the midpoint shifts\n\t\t\tmaxDelta = 0;\n\n\t\t\tfor (let i = 1; (i < ret.length) && (ret.length < maxSteps); i++) {\n\t\t\t\tlet prev = ret[i - 1];\n\t\t\t\tlet cur = ret[i];\n\n\t\t\t\tlet p = (cur.p + prev.p) / 2;\n\t\t\t\tlet color = colorRange(p);\n\t\t\t\tmaxDelta = Math.max(maxDelta, deltaE(color, prev.color), deltaE(color, cur.color));\n\t\t\t\tret.splice(i, 0, {p, color: colorRange(p)});\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t}\n\n\tret = ret.map(a => a.color);\n\n\treturn ret;\n}\n\n/**\n * Interpolate to color2 and return a function that takes a 0-1 percentage\n * @param {Color | string | Function} color1 The first color or an existing range\n * @param {Color | string} [color2] If color1 is a color, this is the second color\n * @param {Object} [options={}]\n * @returns {Function} A function that takes a 0-1 percentage and returns a color\n */\nfunction range (color1, color2, options = {}) {\n\tif (isRange(color1)) {\n\t\t// Tweaking existing range\n\t\tlet [r, options] = [color1, color2];\n\n\t\treturn range(...r.rangeArgs.colors, {...r.rangeArgs.options, ...options});\n\t}\n\n\tlet {space, outputSpace, progression, premultiplied} = options;\n\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\t// Make sure we're working on copies of these colors\n\tcolor1 = clone(color1);\n\tcolor2 = clone(color2);\n\n\tlet rangeArgs = {colors: [color1, color2], options};\n\n\tif (space) {\n\t\tspace = ColorSpace.get(space);\n\t}\n\telse {\n\t\tspace = ColorSpace.registry[defaults.interpolationSpace] || color1.space;\n\t}\n\n\toutputSpace = outputSpace ? ColorSpace.get(outputSpace) : space;\n\n\tcolor1 = to(color1, space);\n\tcolor2 = to(color2, space);\n\n\t// Gamut map to avoid areas of flat color\n\tcolor1 = toGamut(color1);\n\tcolor2 = toGamut(color2);\n\n\t// Handle hue interpolation\n\t// See https://github.com/w3c/csswg-drafts/issues/4735#issuecomment-635741840\n\tif (space.coords.h && space.coords.h.type === \"angle\") {\n\t\tlet arc = options.hue = options.hue || \"shorter\";\n\n\t\tlet hue = [space, \"h\"];\n\t\tlet [θ1, θ2] = [get(color1, hue), get(color2, hue)];\n\t\t// Undefined hues must be evaluated before hue fix-up to properly\n\t\t// calculate hue arcs between undefined and defined hues.\n\t\t// See https://github.com/w3c/csswg-drafts/issues/9436#issuecomment-1746957545\n\t\tif (isNaN(θ1) && !isNaN(θ2)) {\n\t\t\tθ1 = θ2;\n\t\t}\n\t\telse if (isNaN(θ2) && !isNaN(θ1)) {\n\t\t\tθ2 = θ1;\n\t\t}\n\t\t[θ1, θ2] = adjust(arc, [θ1, θ2]);\n\t\tset(color1, hue, θ1);\n\t\tset(color2, hue, θ2);\n\t}\n\n\tif (premultiplied) {\n\t\t// not coping with polar spaces yet\n\t\tcolor1.coords = color1.coords.map(c => c * color1.alpha);\n\t\tcolor2.coords = color2.coords.map(c => c * color2.alpha);\n\t}\n\n\treturn Object.assign(p => {\n\t\tp = progression ? progression(p) : p;\n\t\tlet coords = color1.coords.map((start, i) => {\n\t\t\tlet end = color2.coords[i];\n\t\t\treturn interpolate(start, end, p);\n\t\t});\n\n\t\tlet alpha = interpolate(color1.alpha, color2.alpha, p);\n\t\tlet ret = {space, coords, alpha};\n\n\t\tif (premultiplied) {\n\t\t\t// undo premultiplication\n\t\t\tret.coords = ret.coords.map(c => c / alpha);\n\t\t}\n\n\t\tif (outputSpace !== space) {\n\t\t\tret = to(ret, outputSpace);\n\t\t}\n\n\t\treturn ret;\n\t}, {\n\t\trangeArgs,\n\t});\n}\n\nfunction isRange (val) {\n\treturn type(val) === \"function\" && !!val.rangeArgs;\n}\n\ndefaults.interpolationSpace = \"lab\";\n\nfunction register (Color) {\n\tColor.defineFunction(\"mix\", mix, {returns: \"color\"});\n\tColor.defineFunction(\"range\", range, {returns: \"function<color>\"});\n\tColor.defineFunction(\"steps\", steps, {returns: \"array<color>\"});\n}\n\nvar interpolation = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tisRange: isRange,\n\tmix: mix,\n\trange: range,\n\tregister: register,\n\tsteps: steps\n});\n\nvar HSL = new ColorSpace({\n\tid: \"hsl\",\n\tname: \"HSL\",\n\tcoords: {\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t\ts: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Saturation\",\n\t\t},\n\t\tl: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t},\n\n\tbase: sRGB,\n\n\t// Adapted from https://drafts.csswg.org/css-color-4/better-rgbToHsl.js\n\tfromBase: rgb => {\n\t\tlet max = Math.max(...rgb);\n\t\tlet min = Math.min(...rgb);\n\t\tlet [r, g, b] = rgb;\n\t\tlet [h, s, l] = [NaN, 0, (min + max) / 2];\n\t\tlet d = max - min;\n\n\t\tif (d !== 0) {\n\t\t\ts = (l === 0 || l === 1) ? 0 : (max - l) / Math.min(l, 1 - l);\n\n\t\t\tswitch (max) {\n\t\t\t\tcase r: h = (g - b) / d + (g < b ? 6 : 0); break;\n\t\t\t\tcase g: h = (b - r) / d + 2; break;\n\t\t\t\tcase b: h = (r - g) / d + 4;\n\t\t\t}\n\n\t\t\th = h * 60;\n\t\t}\n\n\t\t// Very out of gamut colors can produce negative saturation\n\t\t// If so, just rotate the hue by 180 and use a positive saturation\n\t\t// see https://github.com/w3c/csswg-drafts/issues/9222\n\t\tif (s < 0) {\n\t\t\th += 180;\n\t\t\ts = Math.abs(s);\n\t\t}\n\n\t\tif (h >= 360) {\n\t\t\th -= 360;\n\t\t}\n\n\t\treturn [h, s * 100, l * 100];\n\t},\n\n\t// Adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB_alternative\n\ttoBase: hsl => {\n\t\tlet [h, s, l] = hsl;\n\t\th = h % 360;\n\n\t\tif (h < 0) {\n\t\t\th += 360;\n\t\t}\n\n\t\ts /= 100;\n\t\tl /= 100;\n\n\t\tfunction f (n) {\n\t\t\tlet k = (n + h / 30) % 12;\n\t\t\tlet a = s * Math.min(l, 1 - l);\n\t\t\treturn l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n\t\t}\n\n\t\treturn [f(0), f(8), f(4)];\n\t},\n\n\tformats: {\n\t\t\"hsl\": {\n\t\t\tcoords: [\"<number> | <angle>\", \"<percentage>\", \"<percentage>\"],\n\t\t},\n\t\t\"hsla\": {\n\t\t\tcoords: [\"<number> | <angle>\", \"<percentage>\", \"<percentage>\"],\n\t\t\tcommas: true,\n\t\t\tlastAlpha: true,\n\t\t},\n\t},\n});\n\n// The Hue, Whiteness Blackness (HWB) colorspace\n// See https://drafts.csswg.org/css-color-4/#the-hwb-notation\n// Note that, like HSL, calculations are done directly on\n// gamma-corrected sRGB values rather than linearising them first.\n\nvar HSV = new ColorSpace({\n\tid: \"hsv\",\n\tname: \"HSV\",\n\tcoords: {\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t\ts: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Saturation\",\n\t\t},\n\t\tv: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Value\",\n\t\t},\n\t},\n\n\tbase: HSL,\n\t// https://en.wikipedia.org/wiki/HSL_and_HSV#Interconversion\n\tfromBase (hsl) {\n\t\tlet [h, s, l] = hsl;\n\t\ts /= 100;\n\t\tl /= 100;\n\n\t\tlet v = l + s * Math.min(l, 1 - l);\n\n\t\treturn [\n\t\t\th, // h is the same\n\t\t\tv === 0 ? 0 : 200 * (1 - l / v), // s\n\t\t\t100 * v,\n\t\t];\n\t},\n\t// https://en.wikipedia.org/wiki/HSL_and_HSV#Interconversion\n\ttoBase (hsv) {\n\t\tlet [h, s, v] = hsv;\n\n\t\ts /= 100;\n\t\tv /= 100;\n\n\t\tlet l = v * (1 - s / 2);\n\n\t\treturn [\n\t\t\th, // h is the same\n\t\t\t(l === 0 || l === 1) ? 0 : ((v - l) / Math.min(l, 1 - l)) * 100,\n\t\t\tl * 100,\n\t\t];\n\t},\n\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"--hsv\",\n\t\t\tcoords: [\"<number> | <angle>\", \"<percentage> | <number>\", \"<percentage> | <number>\"],\n\t\t},\n\t},\n});\n\n// The Hue, Whiteness Blackness (HWB) colorspace\n// See https://drafts.csswg.org/css-color-4/#the-hwb-notation\n// Note that, like HSL, calculations are done directly on\n// gamma-corrected sRGB values rather than linearising them first.\n\nvar hwb = new ColorSpace({\n\tid: \"hwb\",\n\tname: \"HWB\",\n\tcoords: {\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t\tw: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Whiteness\",\n\t\t},\n\t\tb: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Blackness\",\n\t\t},\n\t},\n\n\tbase: HSV,\n\tfromBase (hsv) {\n\t\tlet [h, s, v] = hsv;\n\n\t\treturn [h, v * (100 - s) / 100, 100 - v];\n\t},\n\ttoBase (hwb) {\n\t\tlet [h, w, b] = hwb;\n\n\t\t// Now convert percentages to [0..1]\n\t\tw /= 100;\n\t\tb /= 100;\n\n\t\t// Achromatic check (white plus black >= 1)\n\t\tlet sum = w + b;\n\t\tif (sum >= 1) {\n\t\t\tlet gray = w / sum;\n\t\t\treturn [h, 0, gray * 100];\n\t\t}\n\n\t\tlet v = (1 - b);\n\t\tlet s = (v === 0) ? 0 : 1 - w / v;\n\t\treturn [h, s * 100, v * 100];\n\t},\n\n\tformats: {\n\t\t\"hwb\": {\n\t\t\tcoords: [\"<number> | <angle>\", \"<percentage> | <number>\", \"<percentage> | <number>\"],\n\t\t},\n\t},\n});\n\n// convert an array of linear-light a98-rgb values to CIE XYZ\n// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n// has greater numerical precision than section 4.3.5.3 of\n// https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n// but the values below were calculated from first principles\n// from the chromaticity coordinates of R G B W\nconst toXYZ_M$2 = [\n\t[ 0.5766690429101305, 0.1855582379065463, 0.1882286462349947 ],\n\t[ 0.29734497525053605, 0.6273635662554661, 0.07529145849399788 ],\n\t[ 0.02703136138641234, 0.07068885253582723, 0.9913375368376388 ],\n];\n\nconst fromXYZ_M$2 = [\n\t[ 2.0415879038107465, -0.5650069742788596, -0.34473135077832956 ],\n\t[ -0.9692436362808795, 1.8759675015077202, 0.04155505740717557 ],\n\t[ 0.013444280632031142, -0.11836239223101838, 1.0151749943912054 ],\n];\n\nvar A98Linear = new RGBColorSpace({\n\tid: \"a98rgb-linear\",\n\tcssId: \"--a98-rgb-linear\",\n\tname: \"Linear Adobe® 98 RGB compatible\",\n\twhite: \"D65\",\n\ttoXYZ_M: toXYZ_M$2,\n\tfromXYZ_M: fromXYZ_M$2,\n});\n\nvar a98rgb = new RGBColorSpace({\n\tid: \"a98rgb\",\n\tcssId: \"a98-rgb\",\n\tname: \"Adobe® 98 RGB compatible\",\n\tbase: A98Linear,\n\ttoBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 563 / 256) * Math.sign(val)),\n\tfromBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 256 / 563) * Math.sign(val)),\n});\n\n// convert an array of prophoto-rgb values to CIE XYZ\n// using D50 (so no chromatic adaptation needed afterwards)\n// matrix cannot be expressed in rational form, but is calculated to 64 bit accuracy\n// see https://github.com/w3c/csswg-drafts/issues/7675\nconst toXYZ_M$1 = [\n\t[ 0.79776664490064230, 0.13518129740053308, 0.03134773412839220 ],\n\t[ 0.28807482881940130, 0.71183523424187300, 0.00008993693872564 ],\n\t[ 0.00000000000000000, 0.00000000000000000, 0.82510460251046020 ],\n];\n\nconst fromXYZ_M$1 = [\n\t[ 1.34578688164715830, -0.25557208737979464, -0.05110186497554526 ],\n\t[ -0.54463070512490190, 1.50824774284514680, 0.02052744743642139 ],\n\t[ 0.00000000000000000, 0.00000000000000000, 1.21196754563894520 ],\n];\n\nvar ProPhotoLinear = new RGBColorSpace({\n\tid: \"prophoto-linear\",\n\tcssId: \"--prophoto-rgb-linear\",\n\tname: \"Linear ProPhoto\",\n\twhite: \"D50\",\n\tbase: XYZ_D50,\n\ttoXYZ_M: toXYZ_M$1,\n\tfromXYZ_M: fromXYZ_M$1,\n});\n\nconst Et = 1 / 512;\nconst Et2 = 16 / 512;\n\nvar prophoto = new RGBColorSpace({\n\tid: \"prophoto\",\n\tcssId: \"prophoto-rgb\",\n\tname: \"ProPhoto\",\n\tbase: ProPhotoLinear,\n\ttoBase (RGB) {\n\t\t// Transfer curve is gamma 1.8 with a small linear portion\n\t\treturn RGB.map(v => v < Et2 ? v / 16 : v ** 1.8);\n\t},\n\tfromBase (RGB) {\n\t\treturn RGB.map(v => v >= Et ? v ** (1 / 1.8) : 16 * v);\n\t},\n});\n\nvar oklch = new ColorSpace({\n\tid: \"oklch\",\n\tname: \"Oklch\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t\tc: {\n\t\t\trefRange: [0, 0.4],\n\t\t\tname: \"Chroma\",\n\t\t},\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t},\n\twhite: \"D65\",\n\n\tbase: OKLab,\n\tfromBase (oklab) {\n\t\t// Convert to polar form\n\t\tlet [L, a, b] = oklab;\n\t\tlet h;\n\t\tconst ε = 0.0002; // chromatic components much smaller than a,b\n\n\t\tif (Math.abs(a) < ε && Math.abs(b) < ε) {\n\t\t\th = NaN;\n\t\t}\n\t\telse {\n\t\t\th = Math.atan2(b, a) * 180 / Math.PI;\n\t\t}\n\n\t\treturn [\n\t\t\tL, // OKLab L is still L\n\t\t\tMath.sqrt(a ** 2 + b ** 2), // Chroma\n\t\t\tconstrain(h), // Hue, in degrees [0 to 360)\n\t\t];\n\t},\n\t// Convert from polar form\n\ttoBase (oklch) {\n\t\tlet [L, C, h] = oklch;\n\t\tlet a, b;\n\n\t\t// check for NaN hue\n\t\tif (isNaN(h)) {\n\t\t\ta = 0;\n\t\t\tb = 0;\n\t\t}\n\t\telse {\n\t\t\ta = C * Math.cos(h * Math.PI / 180);\n\t\t\tb = C * Math.sin(h * Math.PI / 180);\n\t\t}\n\n\t\treturn [ L, a, b ];\n\t},\n\n\tformats: {\n\t\t\"oklch\": {\n\t\t\tcoords: [\"<percentage> | <number>\", \"<number> | <percentage>[0,1]\", \"<number> | <angle>\"],\n\t\t},\n\t},\n});\n\nlet white = WHITES.D65;\n\nconst ε$2 = 216 / 24389; // 6^3/29^3 == (24/116)^3\nconst κ$1 = 24389 / 27; // 29^3/3^3\nconst [U_PRIME_WHITE, V_PRIME_WHITE] = uv({space: xyz_d65, coords: white});\n\nvar Luv = new ColorSpace({\n\tid: \"luv\",\n\tname: \"Luv\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 100],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t\t// Reference ranges from https://facelessuser.github.io/coloraide/colors/luv/\n\t\tu: {\n\t\t\trefRange: [-215, 215],\n\t\t},\n\t\tv: {\n\t\t\trefRange: [-215, 215],\n\t\t},\n\t},\n\n\twhite: white,\n\tbase: xyz_d65,\n\n\t// Convert D65-adapted XYZ to Luv\n\t// https://en.wikipedia.org/wiki/CIELUV#The_forward_transformation\n\tfromBase (XYZ) {\n\t\tlet xyz = [skipNone(XYZ[0]), skipNone(XYZ[1]), skipNone(XYZ[2])];\n\t\tlet y = xyz[1];\n\n\t\tlet [up, vp] = uv({space: xyz_d65, coords: xyz});\n\n\t\t// Protect against XYZ of [0, 0, 0]\n\t\tif (!Number.isFinite(up) || !Number.isFinite(vp)) {\n\t\t\treturn [0, 0, 0];\n\t\t}\n\n\t\tlet L = y <= ε$2 ? κ$1 * y : 116 * Math.cbrt(y) - 16;\n\t\treturn [\n\t\t\tL,\n\t\t\t13 * L * (up - U_PRIME_WHITE),\n\t\t\t13 * L * (vp - V_PRIME_WHITE),\n\t\t ];\n\t},\n\n\t// Convert Luv to D65-adapted XYZ\n\t// https://en.wikipedia.org/wiki/CIELUV#The_reverse_transformation\n\ttoBase (Luv) {\n\t\tlet [L, u, v] = Luv;\n\n\t\t// Protect against division by zero and NaN Lightness\n\t\tif (L === 0 || isNone(L)) {\n\t\t\treturn [0, 0, 0];\n\t\t}\n\n\t\tu = skipNone(u);\n\t\tv = skipNone(v);\n\n\t\tlet up = (u / (13 * L)) + U_PRIME_WHITE;\n\t\tlet vp = (v / (13 * L)) + V_PRIME_WHITE;\n\n\t\tlet y = L <= 8 ? L / κ$1 : Math.pow((L + 16) / 116, 3);\n\n\t\treturn [\n\t\t\ty * ((9 * up) / (4 * vp)),\n\t\t\ty,\n\t\t\ty * ((12 - 3 * up - 20 * vp) / (4 * vp)),\n\t\t];\n\t},\n\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"--luv\",\n\t\t\tcoords: [\"<number> | <percentage>\", \"<number> | <percentage>[-1,1]\", \"<number> | <percentage>[-1,1]\"],\n\t\t},\n\t},\n});\n\nvar LCHuv = new ColorSpace({\n\tid: \"lchuv\",\n\tname: \"LChuv\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 100],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t\tc: {\n\t\t\trefRange: [0, 220],\n\t\t\tname: \"Chroma\",\n\t\t},\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t},\n\n\tbase: Luv,\n\tfromBase (Luv) {\n\t\t// Convert to polar form\n\t\tlet [L, u, v] = Luv;\n\t\tlet hue;\n\t\tconst ε = 0.02;\n\n\t\tif (Math.abs(u) < ε && Math.abs(v) < ε) {\n\t\t\thue = NaN;\n\t\t}\n\t\telse {\n\t\t\thue = Math.atan2(v, u) * 180 / Math.PI;\n\t\t}\n\n\t\treturn [\n\t\t\tL, // L is still L\n\t\t\tMath.sqrt(u ** 2 + v ** 2), // Chroma\n\t\t\tconstrain(hue), // Hue, in degrees [0 to 360)\n\t\t];\n\t},\n\ttoBase (LCH) {\n\t\t// Convert from polar form\n\t\tlet [Lightness, Chroma, Hue] = LCH;\n\t\t// Clamp any negative Chroma\n\t\tif (Chroma < 0) {\n\t\t\tChroma = 0;\n\t\t}\n\t\t// Deal with NaN Hue\n\t\tif (isNaN(Hue)) {\n\t\t\tHue = 0;\n\t\t}\n\t\treturn [\n\t\t\tLightness, // L is still L\n\t\t\tChroma * Math.cos(Hue * Math.PI / 180), // u\n\t\t\tChroma * Math.sin(Hue * Math.PI / 180), // v\n\t\t];\n\t},\n\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"--lchuv\",\n\t\t\tcoords: [\"<number> | <percentage>\", \"<number> | <percentage>\", \"<number> | <angle>\"],\n\t\t},\n\t},\n});\n\n/*\nAdapted from: https://github.com/hsluv/hsluv-javascript/blob/14b49e6cf9a9137916096b8487a5372626b57ba4/src/hsluv.ts\n\nCopyright (c) 2012-2022 Alexei Boronine\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n\nconst ε$1 = 216 / 24389; // 6^3/29^3 == (24/116)^3\nconst κ = 24389 / 27; // 29^3/3^3\n\nconst m_r0 = fromXYZ_M$3[0][0];\nconst m_r1 = fromXYZ_M$3[0][1];\nconst m_r2 = fromXYZ_M$3[0][2];\nconst m_g0 = fromXYZ_M$3[1][0];\nconst m_g1 = fromXYZ_M$3[1][1];\nconst m_g2 = fromXYZ_M$3[1][2];\nconst m_b0 = fromXYZ_M$3[2][0];\nconst m_b1 = fromXYZ_M$3[2][1];\nconst m_b2 = fromXYZ_M$3[2][2];\n\nfunction distanceFromOriginAngle (slope, intercept, angle) {\n\tconst d = intercept / (Math.sin(angle) - slope * Math.cos(angle));\n\treturn d < 0 ? Infinity : d;\n}\n\nfunction calculateBoundingLines (l) {\n\tconst sub1 = Math.pow(l + 16, 3) / 1560896;\n\tconst sub2 = sub1 > ε$1 ? sub1 : l / κ;\n\tconst s1r = sub2 * (284517 * m_r0 - 94839 * m_r2);\n\tconst s2r = sub2 * (838422 * m_r2 + 769860 * m_r1 + 731718 * m_r0);\n\tconst s3r = sub2 * (632260 * m_r2 - 126452 * m_r1);\n\tconst s1g = sub2 * (284517 * m_g0 - 94839 * m_g2);\n\tconst s2g = sub2 * (838422 * m_g2 + 769860 * m_g1 + 731718 * m_g0);\n\tconst s3g = sub2 * (632260 * m_g2 - 126452 * m_g1);\n\tconst s1b = sub2 * (284517 * m_b0 - 94839 * m_b2);\n\tconst s2b = sub2 * (838422 * m_b2 + 769860 * m_b1 + 731718 * m_b0);\n\tconst s3b = sub2 * (632260 * m_b2 - 126452 * m_b1);\n\n\treturn {\n\t\tr0s: s1r / s3r,\n\t\tr0i: s2r * l / s3r,\n\t\tr1s: s1r / (s3r + 126452),\n\t\tr1i: (s2r - 769860) * l / (s3r + 126452),\n\t\tg0s: s1g / s3g,\n\t\tg0i: s2g * l / s3g,\n\t\tg1s: s1g / (s3g + 126452),\n\t\tg1i: (s2g - 769860) * l / (s3g + 126452),\n\t\tb0s: s1b / s3b,\n\t\tb0i: s2b * l / s3b,\n\t\tb1s: s1b / (s3b + 126452),\n\t\tb1i: (s2b - 769860) * l / (s3b + 126452),\n\t};\n}\n\nfunction calcMaxChromaHsluv (lines, h) {\n\tconst hueRad = h / 360 * Math.PI * 2;\n\tconst r0 = distanceFromOriginAngle(lines.r0s, lines.r0i, hueRad);\n\tconst r1 = distanceFromOriginAngle(lines.r1s, lines.r1i, hueRad);\n\tconst g0 = distanceFromOriginAngle(lines.g0s, lines.g0i, hueRad);\n\tconst g1 = distanceFromOriginAngle(lines.g1s, lines.g1i, hueRad);\n\tconst b0 = distanceFromOriginAngle(lines.b0s, lines.b0i, hueRad);\n\tconst b1 = distanceFromOriginAngle(lines.b1s, lines.b1i, hueRad);\n\n\treturn Math.min(r0, r1, g0, g1, b0, b1);\n}\n\nvar hsluv = new ColorSpace({\n\tid: \"hsluv\",\n\tname: \"HSLuv\",\n\tcoords: {\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t\ts: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Saturation\",\n\t\t},\n\t\tl: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t},\n\n\tbase: LCHuv,\n\tgamutSpace: sRGB,\n\n\t// Convert LCHuv to HSLuv\n\tfromBase (lch) {\n\t\tlet [l, c, h] = [skipNone(lch[0]), skipNone(lch[1]), skipNone(lch[2])];\n\t\tlet s;\n\n\t\tif (l > 99.9999999) {\n\t\t\ts = 0;\n\t\t\tl = 100;\n\t\t}\n\t\telse if (l < 0.00000001) {\n\t\t\ts = 0;\n\t\t\tl = 0;\n\t\t}\n\t\telse {\n\t\t\tlet lines = calculateBoundingLines(l);\n\t\t\tlet max = calcMaxChromaHsluv(lines, h);\n\t\t\ts = c / max * 100;\n\t\t}\n\n\t\treturn [h, s, l];\n\t},\n\n\t// Convert HSLuv to LCHuv\n\ttoBase (hsl) {\n\t\tlet [h, s, l] = [skipNone(hsl[0]), skipNone(hsl[1]), skipNone(hsl[2])];\n\t\tlet c;\n\n\t\tif (l > 99.9999999) {\n\t\t\tl = 100;\n\t\t\tc = 0;\n\t\t}\n\t\telse if (l < 0.00000001) {\n\t\t\tl = 0;\n\t\t\tc = 0;\n\t\t}\n\t\telse {\n\t\t\tlet lines = calculateBoundingLines(l);\n\t\t\tlet max = calcMaxChromaHsluv(lines, h);\n\t\t\tc = max / 100 * s;\n\t\t}\n\n\t\treturn [l, c, h];\n\t},\n\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"--hsluv\",\n\t\t\tcoords: [\"<number> | <angle>\", \"<percentage> | <number>\", \"<percentage> | <number>\"],\n\t\t},\n\t},\n});\n\n/*\nAdapted from: https://github.com/hsluv/hsluv-javascript/blob/14b49e6cf9a9137916096b8487a5372626b57ba4/src/hsluv.ts\n\nCopyright (c) 2012-2022 Alexei Boronine\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n\nfromXYZ_M$3[0][0];\nfromXYZ_M$3[0][1];\nfromXYZ_M$3[0][2];\nfromXYZ_M$3[1][0];\nfromXYZ_M$3[1][1];\nfromXYZ_M$3[1][2];\nfromXYZ_M$3[2][0];\nfromXYZ_M$3[2][1];\nfromXYZ_M$3[2][2];\n\nfunction distanceFromOrigin (slope, intercept) {\n\treturn Math.abs(intercept) / Math.sqrt(Math.pow(slope, 2) + 1);\n}\n\nfunction calcMaxChromaHpluv (lines) {\n\tlet r0 = distanceFromOrigin(lines.r0s, lines.r0i);\n\tlet r1 = distanceFromOrigin(lines.r1s, lines.r1i);\n\tlet g0 = distanceFromOrigin(lines.g0s, lines.g0i);\n\tlet g1 = distanceFromOrigin(lines.g1s, lines.g1i);\n\tlet b0 = distanceFromOrigin(lines.b0s, lines.b0i);\n\tlet b1 = distanceFromOrigin(lines.b1s, lines.b1i);\n\n\treturn Math.min(r0, r1, g0, g1, b0, b1);\n}\n\nvar hpluv = new ColorSpace({\n\tid: \"hpluv\",\n\tname: \"HPLuv\",\n\tcoords: {\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t},\n\t\ts: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Saturation\",\n\t\t},\n\t\tl: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Lightness\",\n\t\t},\n\t},\n\n\tbase: LCHuv,\n\tgamutSpace: \"self\",\n\n\t// Convert LCHuv to HPLuv\n\tfromBase (lch) {\n\t\tlet [l, c, h] = [skipNone(lch[0]), skipNone(lch[1]), skipNone(lch[2])];\n\t\tlet s;\n\n\t\tif (l > 99.9999999) {\n\t\t\ts = 0;\n\t\t\tl = 100;\n\t\t}\n\t\telse if (l < 0.00000001) {\n\t\t\ts = 0;\n\t\t\tl = 0;\n\t\t}\n\t\telse {\n\t\t\tlet lines = calculateBoundingLines(l);\n\t\t\tlet max = calcMaxChromaHpluv(lines);\n\t\t\ts = c / max * 100;\n\t\t}\n\t\treturn [h, s, l];\n\t},\n\n\t// Convert HPLuv to LCHuv\n\ttoBase (hsl) {\n\t\tlet [h, s, l] = [skipNone(hsl[0]), skipNone(hsl[1]), skipNone(hsl[2])];\n\t\tlet c;\n\n\t\tif (l > 99.9999999) {\n\t\t\tl = 100;\n\t\t\tc = 0;\n\t\t}\n\t\telse if (l < 0.00000001) {\n\t\t\tl = 0;\n\t\t\tc = 0;\n\t\t}\n\t\telse {\n\t\t\tlet lines = calculateBoundingLines(l);\n\t\t\tlet max = calcMaxChromaHpluv(lines);\n\t\t\tc = max / 100 * s;\n\t\t}\n\n\t\treturn [l, c, h];\n\t},\n\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"--hpluv\",\n\t\t\tcoords: [\"<number> | <angle>\", \"<percentage> | <number>\", \"<percentage> | <number>\"],\n\t\t},\n\t},\n});\n\nconst Yw = 203;\t// absolute luminance of media white, cd/m²\nconst n = 2610 / (2 ** 14);\nconst ninv = (2 ** 14) / 2610;\nconst m = 2523 / (2 ** 5);\nconst minv = (2 ** 5) / 2523;\nconst c1 = 3424 / (2 ** 12);\nconst c2 = 2413 / (2 ** 7);\nconst c3 = 2392 / (2 ** 7);\n\nvar rec2100Pq = new RGBColorSpace({\n\tid: \"rec2100pq\",\n\tcssId: \"rec2100-pq\",\n\tname: \"REC.2100-PQ\",\n\tbase: REC2020Linear,\n\ttoBase (RGB) {\n\t\t// given PQ encoded component in range [0, 1]\n\t\t// return media-white relative linear-light\n\t\treturn RGB.map(function (val) {\n\t\t\tlet x = ((Math.max(((val ** minv) - c1), 0) / (c2 - (c3 * (val ** minv)))) ** ninv);\n\t\t\treturn (x * 10000 / Yw); \t// luminance relative to diffuse white, [0, 70 or so].\n\t\t});\n\t},\n\tfromBase (RGB) {\n\t\t// given media-white relative linear-light\n\t\t// returnPQ encoded component in range [0, 1]\n\t\treturn RGB.map(function (val) {\n\t\t\tlet x = Math.max(val * Yw / 10000, 0); \t// absolute luminance of peak white is 10,000 cd/m².\n\t\t\tlet num = (c1 + (c2 * (x ** n)));\n\t\t\tlet denom = (1 + (c3 * (x ** n)));\n\n\t\t\treturn ((num / denom) ** m);\n\t\t});\n\t},\n});\n\n// FIXME see https://github.com/LeaVerou/color.js/issues/190\n\nconst a = 0.17883277;\nconst b = 0.28466892; // 1 - (4 * a)\nconst c = 0.55991073; // 0.5 - a * Math.log(4 *a)\n\nconst scale = 3.7743;\t// Place 18% grey at HLG 0.38, so media white at 0.75\n\nvar rec2100Hlg = new RGBColorSpace({\n\tid: \"rec2100hlg\",\n\tcssId: \"rec2100-hlg\",\n\tname: \"REC.2100-HLG\",\n\treferred: \"scene\",\n\n\tbase: REC2020Linear,\n\ttoBase (RGB) {\n\t\t// given HLG encoded component in range [0, 1]\n\t\t// return media-white relative linear-light\n\t\treturn RGB.map(function (val) {\n\t\t\t// first the HLG EOTF\n\t\t\t// ITU-R BT.2390-10 p.30 section\n\t\t\t// 6.3 The hybrid log-gamma electro-optical transfer function (EOTF)\n\t\t\t// Then scale by 3 so media white is 1.0\n\t\t\tif (val <= 0.5) {\n\t\t\t\treturn (val ** 2) / 3 * scale;\n\t\t\t}\n\t\t\treturn ((Math.exp((val - c) / a) + b) / 12) * scale;\n\t\t});\n\t},\n\tfromBase (RGB) {\n\t\t// given media-white relative linear-light\n\t\t// where diffuse white is 1.0,\n\t\t// return HLG encoded component in range [0, 1]\n\t\treturn RGB.map(function (val) {\n\t\t\t// first scale to put linear-light media white at 1/3\n\t\t\tval /= scale;\n\t\t\t// now the HLG OETF\n\t\t\t// ITU-R BT.2390-10 p.23\n\t\t\t// 6.1 The hybrid log-gamma opto-electronic transfer function (OETF)\n\t\t\tif (val <= 1 / 12) {\n\t\t\t\treturn Math.sqrt(3 * val);\n\t\t\t}\n\t\t\treturn a * Math.log(12 * val - b) + c;\n\t\t});\n\t},\n});\n\nconst CATs = {};\n\nhooks.add(\"chromatic-adaptation-start\", env => {\n\tif (env.options.method) {\n\t\tenv.M = adapt(env.W1, env.W2, env.options.method);\n\t}\n});\n\nhooks.add(\"chromatic-adaptation-end\", env => {\n\tif (!env.M) {\n\t\tenv.M = adapt(env.W1, env.W2, env.options.method);\n\t}\n});\n\nfunction defineCAT ({id, toCone_M, fromCone_M}) {\n\t// Use id, toCone_M, fromCone_M like variables\n\tCATs[id] = arguments[0];\n}\n\nfunction adapt (W1, W2, id = \"Bradford\") {\n\t// adapt from a source whitepoint or illuminant W1\n\t// to a destination whitepoint or illuminant W2,\n\t// using the given chromatic adaptation transform (CAT)\n\t// debugger;\n\tlet method = CATs[id];\n\n\tlet [ρs, γs, βs] = multiplyMatrices(method.toCone_M, W1);\n\tlet [ρd, γd, βd] = multiplyMatrices(method.toCone_M, W2);\n\n\t// all practical illuminants have non-zero XYZ so no division by zero can occur below\n\tlet scale = [\n\t\t[ρd / ρs, 0, 0 ],\n\t\t[0, γd / γs, 0 ],\n\t\t[0, 0, βd / βs],\n\t];\n\t// console.log({scale});\n\n\tlet scaled_cone_M = multiplyMatrices(scale, method.toCone_M);\n\tlet adapt_M\t= multiplyMatrices(method.fromCone_M, scaled_cone_M);\n\t// console.log({scaled_cone_M, adapt_M});\n\treturn adapt_M;\n}\n\ndefineCAT({\n\tid: \"von Kries\",\n\ttoCone_M: [\n\t\t[ 0.4002400, 0.7076000, -0.0808100 ],\n\t\t[ -0.2263000, 1.1653200, 0.0457000 ],\n\t\t[ 0.0000000, 0.0000000, 0.9182200 ],\n\t],\n\tfromCone_M: [\n\t\t[ 1.8599363874558397, -1.1293816185800916, 0.21989740959619328 ],\n\t\t[ 0.3611914362417676, 0.6388124632850422, -0.000006370596838649899 ],\n\t\t[ 0, 0, 1.0890636230968613 ],\n\t],\n});\n\ndefineCAT({\n\tid: \"Bradford\",\n\t// Convert an array of XYZ values in the range 0.0 - 1.0\n\t// to cone fundamentals\n\ttoCone_M: [\n\t\t[ 0.8951000, 0.2664000, -0.1614000 ],\n\t\t[ -0.7502000, 1.7135000, 0.0367000 ],\n\t\t[ 0.0389000, -0.0685000, 1.0296000 ],\n\t],\n\t// and back\n\tfromCone_M: [\n\t\t[ 0.9869929054667121, -0.14705425642099013, 0.15996265166373122 ],\n\t\t[ 0.4323052697233945, 0.5183602715367774, 0.049291228212855594 ],\n\t\t[ -0.00852866457517732, 0.04004282165408486, 0.96848669578755 ],\n\t],\n});\n\ndefineCAT({\n\tid: \"CAT02\",\n\t// with complete chromatic adaptation to W2, so D = 1.0\n\ttoCone_M: [\n\t\t[ 0.7328000, 0.4296000, -0.1624000 ],\n\t\t[ -0.7036000, 1.6975000, 0.0061000 ],\n\t\t[ 0.0030000, 0.0136000, 0.9834000 ],\n\t],\n\tfromCone_M: [\n\t\t[ 1.0961238208355142, -0.27886900021828726, 0.18274517938277307 ],\n\t\t[ 0.4543690419753592, 0.4735331543074117, 0.07209780371722911 ],\n\t\t[ -0.009627608738429355, -0.00569803121611342, 1.0153256399545427 ],\n\t],\n});\n\ndefineCAT({\n\tid: \"CAT16\",\n\ttoCone_M: [\n\t\t[ 0.401288, 0.650173, -0.051461 ],\n\t\t[ -0.250268, 1.204414, 0.045854 ],\n\t\t[ -0.002079, 0.048952, 0.953127 ],\n\t],\n\t// the extra precision is needed to avoid roundtripping errors\n\tfromCone_M: [\n\t\t[ 1.862067855087233, -1.0112546305316845, 0.14918677544445172 ],\n\t\t[ 0.3875265432361372, 0.6214474419314753, -0.008973985167612521 ],\n\t\t[ -0.01584149884933386, -0.03412293802851557, 1.0499644368778496 ],\n\t],\n});\n\nObject.assign(WHITES, {\n\t// whitepoint values from ASTM E308-01 with 10nm spacing, 1931 2 degree observer\n\t// all normalized to Y (luminance) = 1.00000\n\t// Illuminant A is a tungsten electric light, giving a very warm, orange light.\n\tA: [1.09850, 1.00000, 0.35585],\n\n\t// Illuminant C was an early approximation to daylight: illuminant A with a blue filter.\n\tC: [0.98074, 1.000000, 1.18232],\n\n\t// The daylight series of illuminants simulate natural daylight.\n\t// The color temperature (in degrees Kelvin/100) ranges from\n\t// cool, overcast daylight (D50) to bright, direct sunlight (D65).\n\tD55: [0.95682, 1.00000, 0.92149],\n\tD75: [0.94972, 1.00000, 1.22638],\n\n\t// Equal-energy illuminant, used in two-stage CAT16\n\tE: [1.00000, 1.00000, 1.00000],\n\n\t// The F series of illuminants represent fluorescent lights\n\tF2: [0.99186, 1.00000, 0.67393],\n\tF7: [0.95041, 1.00000, 1.08747],\n\tF11: [1.00962, 1.00000, 0.64350],\n});\n\n// The ACES whitepoint\n// see TB-2018-001 Derivation of the ACES White Point CIE Chromaticity Coordinates\n// also https://github.com/ampas/aces-dev/blob/master/documents/python/TB-2018-001/aces_wp.py\n// Similar to D60\nWHITES.ACES = [0.32168 / 0.33767, 1.00000, (1.00000 - 0.32168 - 0.33767) / 0.33767];\n\n// convert an array of linear-light ACEScc values to CIE XYZ\nconst toXYZ_M = [\n\t[ 0.6624541811085053, 0.13400420645643313, 0.1561876870049078 ],\n\t[ 0.27222871678091454, 0.6740817658111484, 0.05368951740793705 ],\n\t[ -0.005574649490394108, 0.004060733528982826, 1.0103391003129971 ],\n];\nconst fromXYZ_M = [\n\t[ 1.6410233796943257, -0.32480329418479, -0.23642469523761225 ],\n\t[ -0.6636628587229829, 1.6153315916573379, 0.016756347685530137 ],\n\t[ 0.011721894328375376, -0.008284441996237409, 0.9883948585390215 ],\n];\n\nvar ACEScg = new RGBColorSpace({\n\tid: \"acescg\",\n\tcssId: \"--acescg\",\n\tname: \"ACEScg\",\n\n\t// ACEScg – A scene-referred, linear-light encoding of ACES Data\n\t// https://docs.acescentral.com/specifications/acescg/\n\t// uses the AP1 primaries, see section 4.3.1 Color primaries\n\tcoords: {\n\t\tr: {\n\t\t\trange: [0, 65504],\n\t\t\tname: \"Red\",\n\t\t},\n\t\tg: {\n\t\t\trange: [0, 65504],\n\t\t\tname: \"Green\",\n\t\t},\n\t\tb: {\n\t\t\trange: [0, 65504],\n\t\t\tname: \"Blue\",\n\t\t},\n\t},\n\n\treferred: \"scene\",\n\n\twhite: WHITES.ACES,\n\n\ttoXYZ_M,\n\tfromXYZ_M,\n});\n\n// export default Color;\n\nconst ε = 2 ** -16;\n\n// the smallest value which, in the 32bit IEEE 754 float encoding,\n// decodes as a non-negative value\nconst ACES_min_nonzero = -0.35828683;\n\n// brightest encoded value, decodes to 65504\nconst ACES_cc_max = (Math.log2(65504) + 9.72) / 17.52; // 1.468\n\nvar acescc = new RGBColorSpace({\n\tid: \"acescc\",\n\tcssId: \"--acescc\",\n\tname: \"ACEScc\",\n\t// see S-2014-003 ACEScc – A Logarithmic Encoding of ACES Data\n\t// https://docs.acescentral.com/specifications/acescc/\n\t// uses the AP1 primaries, see section 4.3.1 Color primaries\n\n\t// Appendix A: \"Very small ACES scene referred values below 7 1/4 stops\n\t// below 18% middle gray are encoded as negative ACEScc values.\n\t// These values should be preserved per the encoding in Section 4.4\n\t// so that all positive ACES values are maintained.\"\n\tcoords: {\n\t\tr: {\n\t\t\trange: [ACES_min_nonzero, ACES_cc_max],\n\t\t\tname: \"Red\",\n\t\t},\n\t\tg: {\n\t\t\trange: [ACES_min_nonzero, ACES_cc_max],\n\t\t\tname: \"Green\",\n\t\t},\n\t\tb: {\n\t\t\trange: [ACES_min_nonzero, ACES_cc_max],\n\t\t\tname: \"Blue\",\n\t\t},\n\t},\n\treferred: \"scene\",\n\n\tbase: ACEScg,\n\t// from section 4.4.2 Decoding Function\n\ttoBase (RGB) {\n\t\tconst low = (9.72 - 15) / 17.52; // -0.3014\n\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val <= low) {\n\t\t\t\treturn (2 ** ((val * 17.52) - 9.72) - ε) * 2; // very low values, below -0.3014\n\t\t\t}\n\t\t\telse if (val < ACES_cc_max) {\n\t\t\t\treturn 2 ** ((val * 17.52) - 9.72);\n\t\t\t}\n\t\t\telse { // val >= ACES_cc_max\n\t\t\t\treturn 65504;\n\t\t\t}\n\t\t});\n\t},\n\n\t// Non-linear encoding function from S-2014-003, section 4.4.1 Encoding Function\n\tfromBase (RGB) {\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val <= 0) {\n\t\t\t\treturn (Math.log2(ε) + 9.72) / 17.52; // -0.3584\n\t\t\t}\n\t\t\telse if (val < ε) {\n\t\t\t\treturn (Math.log2(ε + val * 0.5) + 9.72) / 17.52;\n\t\t\t}\n\t\t\telse { // val >= ε\n\t\t\t\treturn (Math.log2(val) + 9.72) / 17.52;\n\t\t\t}\n\t\t});\n\t},\n\t// encoded media white (rgb 1,1,1) => linear [ 222.861, 222.861, 222.861 ]\n\t// encoded media black (rgb 0,0,0) => linear [ 0.0011857, 0.0011857, 0.0011857]\n});\n\nvar spaces = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tA98RGB: a98rgb,\n\tA98RGB_Linear: A98Linear,\n\tACEScc: acescc,\n\tACEScg: ACEScg,\n\tCAM16_JMh: cam16,\n\tHCT: hct,\n\tHPLuv: hpluv,\n\tHSL: HSL,\n\tHSLuv: hsluv,\n\tHSV: HSV,\n\tHWB: hwb,\n\tICTCP: ictcp,\n\tJzCzHz: jzczhz,\n\tJzazbz: Jzazbz,\n\tLCH: lch,\n\tLCHuv: LCHuv,\n\tLab: lab,\n\tLab_D65: lab_d65,\n\tLuv: Luv,\n\tOKLCH: oklch,\n\tOKLab: OKLab,\n\tP3: P3,\n\tP3_Linear: P3Linear,\n\tProPhoto: prophoto,\n\tProPhoto_Linear: ProPhotoLinear,\n\tREC_2020: REC2020,\n\tREC_2020_Linear: REC2020Linear,\n\tREC_2100_HLG: rec2100Hlg,\n\tREC_2100_PQ: rec2100Pq,\n\tXYZ_ABS_D65: XYZ_Abs_D65,\n\tXYZ_D50: XYZ_D50,\n\tXYZ_D65: xyz_d65,\n\tsRGB: sRGB,\n\tsRGB_Linear: sRGBLinear\n});\n\n/**\n * Class that represents a color\n */\nclass Color {\n\t/**\n\t * Creates an instance of Color.\n\t * Signatures:\n\t * - `new Color(stringToParse)`\n\t * - `new Color(otherColor)`\n\t * - `new Color({space, coords, alpha})`\n\t * - `new Color(space, coords, alpha)`\n\t * - `new Color(spaceId, coords, alpha)`\n\t */\n\tconstructor (...args) {\n\t\tlet color;\n\n\t\tif (args.length === 1) {\n\t\t\tcolor = getColor(args[0]);\n\t\t}\n\n\t\tlet space, coords, alpha;\n\n\t\tif (color) {\n\t\t\tspace = color.space || color.spaceId;\n\t\t\tcoords = color.coords;\n\t\t\talpha = color.alpha;\n\t\t}\n\t\telse {\n\t\t\t// default signature new Color(ColorSpace, array [, alpha])\n\t\t\t[space, coords, alpha] = args;\n\t\t}\n\n\t\tObject.defineProperty(this, \"space\", {\n\t\t\tvalue: ColorSpace.get(space),\n\t\t\twritable: false,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true, // see note in https://262.ecma-international.org/8.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n\t\t});\n\n\t\tthis.coords = coords ? coords.slice() : [0, 0, 0];\n\n\t\t// Clamp alpha to [0, 1]\n\t\tthis.alpha = alpha > 1 || alpha === undefined ? 1 : (alpha < 0 ? 0 : alpha);\n\n\t\t// Convert \"NaN\" to NaN\n\t\tfor (let i = 0; i < this.coords.length; i++) {\n\t\t\tif (this.coords[i] === \"NaN\") {\n\t\t\t\tthis.coords[i] = NaN;\n\t\t\t}\n\t\t}\n\n\t\t// Define getters and setters for each coordinate\n\t\tfor (let id in this.space.coords) {\n\t\t\tObject.defineProperty(this, id, {\n\t\t\t\tget: () => this.get(id),\n\t\t\t\tset: value => this.set(id, value),\n\t\t\t});\n\t\t}\n\t}\n\n\tget spaceId () {\n\t\treturn this.space.id;\n\t}\n\n\tclone () {\n\t\treturn new Color(this.space, this.coords, this.alpha);\n\t}\n\n\ttoJSON () {\n\t\treturn {\n\t\t\tspaceId: this.spaceId,\n\t\t\tcoords: this.coords,\n\t\t\talpha: this.alpha,\n\t\t};\n\t}\n\n\tdisplay (...args) {\n\t\tlet ret = display(this, ...args);\n\n\t\t// Convert color object to Color instance\n\t\tret.color = new Color(ret.color);\n\n\t\treturn ret;\n\t}\n\n\t/**\n\t * Get a color from the argument passed\n\t * Basically gets us the same result as new Color(color) but doesn't clone an existing color object\n\t */\n\tstatic get (color, ...args) {\n\t\tif (color instanceof Color) {\n\t\t\treturn color;\n\t\t}\n\n\t\treturn new Color(color, ...args);\n\t}\n\n\tstatic defineFunction (name, code, o = code) {\n\t\tlet {instance = true, returns} = o;\n\n\t\tlet func = function (...args) {\n\t\t\tlet ret = code(...args);\n\n\t\t\tif (returns === \"color\") {\n\t\t\t\tret = Color.get(ret);\n\t\t\t}\n\t\t\telse if (returns === \"function<color>\") {\n\t\t\t\tlet f = ret;\n\t\t\t\tret = function (...args) {\n\t\t\t\t\tlet ret = f(...args);\n\t\t\t\t\treturn Color.get(ret);\n\t\t\t\t};\n\t\t\t\t// Copy any function metadata\n\t\t\t\tObject.assign(ret, f);\n\t\t\t}\n\t\t\telse if (returns === \"array<color>\") {\n\t\t\t\tret = ret.map(c => Color.get(c));\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t};\n\n\t\tif (!(name in Color)) {\n\t\t\tColor[name] = func;\n\t\t}\n\n\t\tif (instance) {\n\t\t\tColor.prototype[name] = function (...args) {\n\t\t\t\treturn func(this, ...args);\n\t\t\t};\n\t\t}\n\t}\n\n\tstatic defineFunctions (o) {\n\t\tfor (let name in o) {\n\t\t\tColor.defineFunction(name, o[name], o[name]);\n\t\t}\n\t}\n\n\tstatic extend (exports) {\n\t\tif (exports.register) {\n\t\t\texports.register(Color);\n\t\t}\n\t\telse {\n\t\t\t// No register method, just add the module's functions\n\t\t\tfor (let name in exports) {\n\t\t\t\tColor.defineFunction(name, exports[name]);\n\t\t\t}\n\t\t}\n\t}\n}\n\nColor.defineFunctions({\n\tget,\n\tgetAll,\n\tset,\n\tsetAll,\n\tto,\n\tequals,\n\tinGamut,\n\ttoGamut,\n\tdistance,\n\ttoString: serialize,\n});\n\nObject.assign(Color, {\n\tutil,\n\thooks,\n\tWHITES,\n\tSpace: ColorSpace,\n\tspaces: ColorSpace.registry,\n\tparse,\n\n\t// Global defaults one may want to configure\n\tdefaults,\n});\n\nfor (let key of Object.keys(spaces)) {\n\tColorSpace.register(spaces[key]);\n}\n\n/**\n * This plugin defines getters and setters for color[spaceId]\n * e.g. color.lch on *any* color gives us the lch coords\n */\n\n// Add space accessors to existing color spaces\nfor (let id in ColorSpace.registry) {\n\taddSpaceAccessors(id, ColorSpace.registry[id]);\n}\n\n// Add space accessors to color spaces not yet created\nhooks.add(\"colorspace-init-end\", space => {\n\taddSpaceAccessors(space.id, space);\n\tspace.aliases?.forEach(alias => {\n\t\taddSpaceAccessors(alias, space);\n\t});\n});\n\nfunction addSpaceAccessors (id, space) {\n\tlet propId = id.replace(/-/g, \"_\");\n\n\tObject.defineProperty(Color.prototype, propId, {\n\t\t// Convert coords to coords in another colorspace and return them\n\t\t// Source colorspace: this.spaceId\n\t\t// Target colorspace: id\n\t\tget () {\n\t\t\tlet ret = this.getAll(id);\n\n\t\t\tif (typeof Proxy === \"undefined\") {\n\t\t\t\t// If proxies are not supported, just return a static array\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Enable color.spaceId.coordName syntax\n\t\t\treturn new Proxy(ret, {\n\t\t\t\thas: (obj, property) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tColorSpace.resolveCoord([space, property]);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (e) {}\n\n\t\t\t\t\treturn Reflect.has(obj, property);\n\t\t\t\t},\n\t\t\t\tget: (obj, property, receiver) => {\n\t\t\t\t\tif (property && typeof property !== \"symbol\" && !(property in obj)) {\n\t\t\t\t\t\tlet {index} = ColorSpace.resolveCoord([space, property]);\n\n\t\t\t\t\t\tif (index >= 0) {\n\t\t\t\t\t\t\treturn obj[index];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Reflect.get(obj, property, receiver);\n\t\t\t\t},\n\t\t\t\tset: (obj, property, value, receiver) => {\n\t\t\t\t\tif (property && typeof property !== \"symbol\" && !(property in obj) || property >= 0) {\n\t\t\t\t\t\tlet {index} = ColorSpace.resolveCoord([space, property]);\n\n\t\t\t\t\t\tif (index >= 0) {\n\t\t\t\t\t\t\tobj[index] = value;\n\n\t\t\t\t\t\t\t// Update color.coords\n\t\t\t\t\t\t\tthis.setAll(id, obj);\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Reflect.set(obj, property, value, receiver);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\t// Convert coords in another colorspace to internal coords and set them\n\t\t// Target colorspace: this.spaceId\n\t\t// Source colorspace: id\n\t\tset (coords) {\n\t\t\tthis.setAll(id, coords);\n\t\t},\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t});\n}\n\n// Import all modules of Color.js\n\nColor.extend(deltaEMethods);\nColor.extend({deltaE});\nObject.assign(Color, {deltaEMethods});\nColor.extend(variations);\nColor.extend({contrast});\nColor.extend(chromaticity);\nColor.extend(luminance);\nColor.extend(interpolation);\nColor.extend(contrastMethods);\n\nexport { Color as default };\n//# sourceMappingURL=color.js.map\n","import type Color from \"colorjs.io\";\n\n// Semantic color names - matches portal-widgets tailwind.config.ts and field-types.ts\nexport const SEMANTIC_COLOR_NAMES = [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"destructive\",\n] as const;\nexport type SemanticColorName = (typeof SEMANTIC_COLOR_NAMES)[number];\n\nexport const FONT_SIZE_KEYS = [\n \"extraSmall\",\n \"small\",\n \"regular\",\n \"large\",\n \"extraLarge\",\n \"giant\",\n] as const;\nexport type FontSizeKey = (typeof FONT_SIZE_KEYS)[number];\n\nexport const FONT_FAMILY_KEYS = [\"header\", \"body\"] as const;\nexport type FontFamilyKey = (typeof FONT_FAMILY_KEYS)[number];\n\nexport const RADIUS_KEYS = [\"small\", \"medium\", \"large\", \"extraLarge\"] as const;\nexport type RadiusKey = (typeof RADIUS_KEYS)[number];\n\n/** Author-time color input (what the user configures) */\nexport interface ThemeColorInput {\n base: Color;\n foreground: Color;\n}\n\n/** Complete theme definition — stored in-memory with Color objects */\nexport interface ThemeDefinition {\n id: string;\n name: string;\n /** Light mode — always fully specified */\n light: Record<SemanticColorName, ThemeColorInput>;\n /**\n * Dark mode — only user-overridden colors.\n * Missing keys are auto-derived from `light` at resolve time.\n */\n dark: Partial<Record<SemanticColorName, Partial<ThemeColorInput>>>;\n fontSizes: Record<FontSizeKey, string>;\n fontFamilies: Record<FontFamilyKey, string>;\n spacing: string;\n radii: Record<RadiusKey, string>;\n /** When true, theme colors are re-derived from brand guidelines on every load */\n syncWithBrandColors?: boolean;\n}\n\n/** Resolved semantic color */\nexport interface ResolvedSemanticColor {\n base: Color;\n foreground: Color;\n}\n\n/** Complete resolved color set for one mode */\nexport type ResolvedColorSet = Record<SemanticColorName, ResolvedSemanticColor>;\n\n/** Fully resolved theme — all colors materialised for both modes */\nexport interface ResolvedTheme {\n id: string;\n name: string;\n light: ResolvedColorSet;\n dark: ResolvedColorSet;\n fontSizes: ThemeDefinition[\"fontSizes\"];\n fontFamilies: ThemeDefinition[\"fontFamilies\"];\n spacing: string;\n radii: ThemeDefinition[\"radii\"];\n}\n\n/** Plain OKLCH triplet for JSON serialisation (no Color dependency) */\nexport interface OklchPlain {\n l: number;\n c: number;\n h: number;\n}\n\n/** Serialised color pair as stored in the backend payload */\nexport interface ThemeColorPlain {\n base: OklchPlain;\n foreground: OklchPlain;\n}\n\n/** Backend payload — plain JSON, no Color objects */\nexport interface ThemePayload {\n [key: string]: unknown;\n id: string;\n name: string;\n light: Record<SemanticColorName, ThemeColorPlain>;\n dark: Partial<\n Record<SemanticColorName, { base?: OklchPlain; foreground?: OklchPlain }>\n >;\n fontSizes: Record<FontSizeKey, string>;\n fontFamilies: Record<FontFamilyKey, string>;\n spacing: string;\n radii: Record<RadiusKey, string>;\n syncWithBrandColors?: boolean;\n}\n","import Color from \"colorjs.io\";\nimport {\n SEMANTIC_COLOR_NAMES,\n type SemanticColorName,\n type ThemeColorInput,\n type ThemeDefinition,\n type ResolvedColorSet,\n type ResolvedTheme,\n} from \"./types\";\n\nconst BARE_HEX_RE = /^[0-9a-fA-F]{6}$/;\n\n/**\n * Attempt to convert any string into a Color using colorjs.io.\n * If the string is exactly 6 hex digits it is assumed to be a bare hex value\n * (e.g. \"3b82f6\") and a \"#\" prefix is added before parsing. Six-letter\n * named colours like \"orange\" or \"maroon\" are left untouched.\n *\n * @returns the parsed Color, or a neutral gray (`oklch(0.5 0 0)`) on failure\n */\nexport function parseColor(value: string): Color {\n if (BARE_HEX_RE.test(value)) {\n value = `#${value}`;\n }\n try {\n return new Color(value);\n } catch (error) {\n console.warn(\"[theme] Failed to parse color:\", value, error);\n return new Color(\"oklch\", [0.5, 0, 0]);\n }\n}\n\n/**\n * Returns either the original foreground or a corrected lightness variant,\n * whichever provides better contrast against `color`.\n * Inversion triggers when the |APCA contrast| is below 50 — APCA is signed\n * (negative for dark-on-light, positive for light-on-dark), so comparing the\n * absolute value avoids flipping dark text that already contrasts well on a\n * medium background.\n */\nexport function getForegroundColor(foreground: Color, color: Color): Color {\n if (foreground.oklch.l == null || color.oklch.l == null) {\n return foreground;\n }\n const contrast = color.contrastAPCA(foreground);\n\n if (Math.abs(contrast) < 50) {\n return new Color(\"oklch\", [\n color.oklch.l < 0.7 ? 0.95 : 0.15,\n foreground.oklch.c || 0,\n foreground.oklch.h || 0,\n ]);\n }\n return foreground;\n}\n\n/**\n * Convenience helper: given a background color string, return a CSS color\n * string for text overlaid on it. Uses APCA contrast to pick between\n * near-black and near-white. Returns `null` when the background cannot be\n * parsed (e.g. a CSS custom property reference like `var(--color-muted)` or\n * a malformed value), so callers can fall back to their theme foreground.\n */\nexport function getContrastingTextColor(background: string): string | null {\n const normalised = BARE_HEX_RE.test(background)\n ? `#${background}`\n : background;\n let bg: Color;\n try {\n bg = new Color(normalised);\n } catch {\n return null;\n }\n const initialFg = new Color(\"oklch\", [0.15, 0, 0]);\n return getForegroundColor(initialFg, bg).toString({ format: \"oklch\" });\n}\n\n// ── Dark Mode Derivation ────────────────────────────────────────────\n//\n// Dark-mode colors are derived from their light counterparts by adjusting\n// OKLCH lightness and optionally scaling chroma. Neutral slots (background,\n// foreground, muted) use fixed lightness values while chromatic slots\n// (primary, secondary, accent, destructive) invert lightness around 0.5.\n\nconst DARK_DERIVATION_CONFIG: Record<\n SemanticColorName,\n {\n baseLightness: number | \"invert\";\n fgLightness: number | \"invert\";\n chromaScale?: number;\n }\n> = {\n background: { baseLightness: 0.15, fgLightness: 0.93 },\n foreground: { baseLightness: 0.93, fgLightness: 0.15 },\n muted: { baseLightness: 0.22, fgLightness: 0.75 },\n primary: { baseLightness: \"invert\", fgLightness: 0.95, chromaScale: 0.9 },\n secondary: { baseLightness: \"invert\", fgLightness: 0.93, chromaScale: 0.85 },\n accent: { baseLightness: \"invert\", fgLightness: 0.95, chromaScale: 0.9 },\n destructive: {\n baseLightness: \"invert\",\n fgLightness: 0.95,\n chromaScale: 0.95,\n },\n};\n\n/** Invert OKLCH lightness (1 - l), clamped to [0.35, 0.75] to avoid extremes. */\nfunction invertLightness(l: number): number {\n const inverted = 1 - l;\n return Math.max(0.35, Math.min(0.75, inverted));\n}\n\n/**\n * Derive a dark-mode ThemeColorInput from its light-mode counterpart.\n */\nexport function deriveDarkVariant(\n name: SemanticColorName,\n light: ThemeColorInput,\n): ThemeColorInput {\n const config = DARK_DERIVATION_CONFIG[name];\n const chromaScale = config.chromaScale ?? 1;\n\n const baseLightness =\n config.baseLightness === \"invert\"\n ? invertLightness(light.base.oklch.l ?? 0)\n : config.baseLightness;\n\n const fgLightness =\n config.fgLightness === \"invert\"\n ? invertLightness(light.foreground.oklch.l ?? 0)\n : config.fgLightness;\n\n return {\n base: new Color(\"oklch\", [\n baseLightness,\n (light.base.oklch.c || 0) * chromaScale,\n light.base.oklch.h || 0,\n ]),\n foreground: new Color(\"oklch\", [\n fgLightness,\n (light.foreground.oklch.c || 0) * chromaScale,\n light.foreground.oklch.h || 0,\n ]),\n };\n}\n\n// ── Dark Mode Merge ─────────────────────────────────────────────────\n\n/**\n * Merge auto-derived dark colors with any user-specified overrides.\n * For each semantic color, if the user has fully overridden both base and\n * foreground those are used; otherwise the missing channels are derived.\n */\nexport function mergeDarkOverrides(\n def: ThemeDefinition,\n): Record<SemanticColorName, ThemeColorInput> {\n const darkColors = {} as Record<SemanticColorName, ThemeColorInput>;\n\n for (const name of SEMANTIC_COLOR_NAMES) {\n const lightInput = def.light[name];\n const darkOverride = def.dark[name];\n\n if (darkOverride?.base && darkOverride?.foreground) {\n darkColors[name] = darkOverride as ThemeColorInput;\n } else if (darkOverride) {\n const base =\n darkOverride.base ?? deriveDarkVariant(name, lightInput).base;\n darkColors[name] = {\n base: base,\n foreground:\n darkOverride.foreground ??\n getForegroundColor(def.light.foreground.base, base),\n };\n } else {\n darkColors[name] = deriveDarkVariant(name, lightInput);\n }\n }\n\n return darkColors;\n}\n\n// ── Theme Resolution ────────────────────────────────────────────────\n\nfunction resolveColorSet(\n colors: Record<SemanticColorName, ThemeColorInput>,\n): ResolvedColorSet {\n const resolved = {} as ResolvedColorSet;\n\n for (const name of SEMANTIC_COLOR_NAMES) {\n const input = colors[name];\n resolved[name] = {\n base: input.base.clone(),\n foreground: input.foreground.clone(),\n };\n }\n\n return resolved;\n}\n\n/**\n * Resolve a ThemeDefinition into a complete ResolvedTheme.\n * Dark mode colors are derived from light where not overridden.\n */\nexport function resolveTheme(def: ThemeDefinition): ResolvedTheme {\n return {\n id: def.id,\n name: def.name,\n light: resolveColorSet(def.light),\n dark: resolveColorSet(mergeDarkOverrides(def)),\n fontSizes: { ...def.fontSizes },\n fontFamilies: { ...def.fontFamilies },\n spacing: def.spacing,\n radii: { ...def.radii },\n };\n}\n","/**\n * Canonical semantic token manifest.\n *\n * Every `--color-*` and `--radius-*` token defined in `styles/ui-primitives.css`\n * must be listed here. Downstream consumers (notably `@fluid-app/theme-engine`)\n * derive their per-theme override maps from this manifest, so adding a token\n * to `ui-primitives.css` without adding it here will cause that token to silently\n * miss merchant theming.\n */\n\nexport type SemanticTokenName =\n | \"background\"\n | \"foreground\"\n | \"card\"\n | \"card-foreground\"\n | \"popover\"\n | \"popover-foreground\"\n | \"primary\"\n | \"primary-foreground\"\n | \"secondary\"\n | \"secondary-foreground\"\n | \"muted\"\n | \"muted-foreground\"\n | \"accent\"\n | \"accent-foreground\"\n | \"destructive\"\n | \"destructive-foreground\"\n | \"border\"\n | \"input\"\n | \"ring\"\n | \"chart-1\"\n | \"chart-2\"\n | \"chart-3\"\n | \"chart-4\"\n | \"chart-5\"\n | \"sidebar\"\n | \"sidebar-foreground\"\n | \"sidebar-primary\"\n | \"sidebar-primary-foreground\"\n | \"sidebar-accent\"\n | \"sidebar-accent-foreground\"\n | \"sidebar-border\"\n | \"sidebar-ring\"\n | \"contrast\";\n\nexport type SemanticRadiusName = \"\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface SemanticTokenManifest {\n colors: readonly SemanticTokenName[];\n radii: readonly SemanticRadiusName[];\n /** Subset that theme-engine merchant config exposes for direct customization. */\n merchantCustomizable: readonly SemanticTokenName[];\n}\n\nexport const TOKEN_MANIFEST: SemanticTokenManifest = {\n colors: [\n \"background\",\n \"foreground\",\n \"card\",\n \"card-foreground\",\n \"popover\",\n \"popover-foreground\",\n \"primary\",\n \"primary-foreground\",\n \"secondary\",\n \"secondary-foreground\",\n \"muted\",\n \"muted-foreground\",\n \"accent\",\n \"accent-foreground\",\n \"destructive\",\n \"destructive-foreground\",\n \"border\",\n \"input\",\n \"ring\",\n \"chart-1\",\n \"chart-2\",\n \"chart-3\",\n \"chart-4\",\n \"chart-5\",\n \"sidebar\",\n \"sidebar-foreground\",\n \"sidebar-primary\",\n \"sidebar-primary-foreground\",\n \"sidebar-accent\",\n \"sidebar-accent-foreground\",\n \"sidebar-border\",\n \"sidebar-ring\",\n \"contrast\",\n ],\n radii: [\"\", \"sm\", \"md\", \"lg\", \"xl\"],\n merchantCustomizable: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"destructive\",\n ],\n};\n","import {\n TOKEN_MANIFEST,\n type SemanticTokenName,\n} from \"@fluid-app/ui-primitives/tokens/manifest\";\nimport { emitTailwindOverrides } from \"./tailwind-overrides\";\nimport {\n SEMANTIC_COLOR_NAMES,\n FONT_SIZE_KEYS,\n FONT_FAMILY_KEYS,\n RADIUS_KEYS,\n type ResolvedColorSet,\n type ResolvedTheme,\n} from \"./types\";\n\nfunction colorToCSS(color: import(\"colorjs.io\").default): string {\n const result = color.toString({ format: \"oklch\" });\n if (result.includes(\"NaN\")) {\n console.warn(\n \"[theme] colorToCSS produced NaN, using neutral fallback:\",\n result,\n );\n return \"oklch(0.5 0 0)\";\n }\n return result;\n}\n\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\n/**\n * Emit --color-{name} and --color-{name}-foreground vars.\n * Uses --color- prefix to match portal-widgets/tailwind.config.ts.\n */\nfunction emitColorVars(colors: ResolvedColorSet): string[] {\n const lines: string[] = [];\n\n for (const name of SEMANTIC_COLOR_NAMES) {\n const color = colors[name];\n lines.push(`--color-${name}: ${colorToCSS(color.base)};`);\n lines.push(`--color-${name}-foreground: ${colorToCSS(color.foreground)};`);\n }\n\n return lines;\n}\n\n/**\n * Format a font family value for CSS output.\n * - If the value starts with \"var(\" (legacy), pass through as-is\n * - If the value already contains a comma (has fallback), pass through as-is\n * - Otherwise, wrap in quotes and append a generic sans-serif fallback\n */\nfunction formatFontFamily(value: string): string {\n if (value.startsWith(\"var(\")) return value;\n if (value.includes(\",\")) return value;\n return `'${value}', sans-serif`;\n}\n\n/**\n * Emit non-color CSS variables (font sizes, families, spacing, radii).\n */\nfunction emitNonColorVars(theme: ResolvedTheme): string[] {\n const lines: string[] = [];\n for (const key of FONT_SIZE_KEYS) {\n lines.push(`--font-size-${camelToKebab(key)}: ${theme.fontSizes[key]};`);\n }\n for (const key of FONT_FAMILY_KEYS) {\n lines.push(`--font-${key}: ${formatFontFamily(theme.fontFamilies[key])};`);\n }\n lines.push(`--spacing: ${theme.spacing};`);\n for (const key of RADIUS_KEYS) {\n lines.push(`--radius-${camelToKebab(key)}: ${theme.radii[key]};`);\n }\n return lines;\n}\n\nconst MERCHANT_CUSTOMIZABLE = new Set<SemanticTokenName>(\n TOKEN_MANIFEST.merchantCustomizable,\n);\n\n/**\n * Names that theme-engine emits via emitColorVars (the merchant-customizable\n * base set) and their derived `-foreground` siblings. Used to skip duplicate\n * emission of `--color-{name}` from the manifest derivation pass.\n *\n * Typed as `Set<string>` because the synthesized `${name}-foreground` strings\n * include `\"background-foreground\"` / `\"foreground-foreground\"`, which are not\n * members of `SemanticTokenName`. Membership checks against the manifest still\n * work because `Set.has(string)` accepts the wider type.\n */\nconst EMITTED_BY_COLOR_VARS: ReadonlySet<string> = new Set<string>([\n ...SEMANTIC_COLOR_NAMES,\n ...SEMANTIC_COLOR_NAMES.map((n) => `${n}-foreground`),\n]);\n\ntype NonCustomizableToken = Exclude<\n SemanticTokenName,\n | \"background\"\n | \"foreground\"\n | \"primary\"\n | \"primary-foreground\"\n | \"secondary\"\n | \"secondary-foreground\"\n | \"accent\"\n | \"accent-foreground\"\n | \"muted\"\n | \"muted-foreground\"\n | \"destructive\"\n | \"destructive-foreground\"\n>;\n\n/**\n * Resolve the alias expression for a non-merchant-customizable token.\n *\n * Returns `null` for tokens that should fall through to the canonical default\n * defined in `ui-primitives.css` (chart palette is intentionally not merchant-themed).\n *\n * The exhaustive switch is the fail-fast guarantee: TypeScript rejects this\n * file if a non-customizable token in the manifest is missing a case here.\n */\nfunction aliasFor(token: NonCustomizableToken): string | null {\n switch (token) {\n case \"card\":\n return \"var(--color-muted)\";\n case \"card-foreground\":\n return \"var(--color-muted-foreground)\";\n case \"popover\":\n return \"var(--color-background)\";\n case \"popover-foreground\":\n return \"var(--color-foreground)\";\n case \"border\":\n return \"color-mix(in oklch, var(--color-background), var(--color-foreground) 15%)\";\n case \"input\":\n return \"var(--color-border)\";\n case \"ring\":\n return \"var(--color-primary)\";\n case \"chart-1\":\n case \"chart-2\":\n case \"chart-3\":\n case \"chart-4\":\n case \"chart-5\":\n return null;\n case \"sidebar\":\n return \"var(--color-muted)\";\n case \"sidebar-foreground\":\n return \"var(--color-muted-foreground)\";\n case \"sidebar-primary\":\n return \"var(--color-primary)\";\n case \"sidebar-primary-foreground\":\n return \"var(--color-primary-foreground)\";\n case \"sidebar-accent\":\n return \"var(--color-accent)\";\n case \"sidebar-accent-foreground\":\n return \"var(--color-accent-foreground)\";\n case \"sidebar-border\":\n return \"var(--color-border)\";\n case \"sidebar-ring\":\n return \"var(--color-primary)\";\n case \"contrast\":\n return \"var(--color-foreground)\";\n }\n}\n\n/**\n * Build the alias block emitted at the top of every `[data-theme]` rule.\n *\n * For each canonical token in `TOKEN_MANIFEST.colors`:\n * - merchant-customizable tokens: `--color-{name}` is emitted by `emitColorVars`\n * from the resolved theme; this function only emits the short-name alias\n * (`--{name}: var(--color-{name})`) for compatibility with consumers that\n * reference short names.\n * - non-customizable tokens: emit both `--color-{name}: <alias>` and the\n * short-name alias, unless `aliasFor` returns null. Returning null is the\n * intentional pass-through signal: ui-primitives.css already maps `--color-{name}`\n * to `var(--{name})` via `@theme inline`, so emitting `--{name}: var(--color-{name})`\n * inside `[data-theme]` would create a circular var() reference and resolve\n * to an invalid value (chart-1..5 would render transparent under any theme).\n *\n * Two static aliases (`--color-background-foreground`, `--color-foreground-foreground`)\n * are not regular `-foreground` siblings; they are emitted explicitly because\n * they swap the bg/fg pair rather than reading from a paired field.\n */\nfunction buildAliasBlock(): string[] {\n const lines: string[] = [\n \"--color-background-foreground: var(--color-foreground);\",\n \"--color-foreground-foreground: var(--color-background);\",\n ];\n\n for (const token of TOKEN_MANIFEST.colors) {\n if (MERCHANT_CUSTOMIZABLE.has(token)) {\n // --color-{name} comes from emitColorVars; just emit the short-name alias.\n lines.push(`--${token}: var(--color-${token});`);\n continue;\n }\n\n if (EMITTED_BY_COLOR_VARS.has(token)) {\n // `${name}-foreground` sibling of the merchant-customizable set —\n // --color-{name}-foreground is emitted by emitColorVars; only the\n // short-name alias is needed here.\n lines.push(`--${token}: var(--color-${token});`);\n continue;\n }\n\n const alias = aliasFor(token as NonCustomizableToken);\n if (alias === null) {\n // Pass-through: ui-primitives.css canonical :root default applies. Emitting\n // either `--color-${token}` or `--${token}` here would create a\n // circular reference with the `@theme inline` mapping.\n continue;\n }\n\n lines.push(`--color-${token}: ${alias};`);\n lines.push(`--${token}: var(--color-${token});`);\n }\n\n return lines;\n}\n\n/**\n * Static alias variables emitted at the top of every theme rule.\n * Derived from the canonical token manifest so new canonical tokens reach\n * merchant theming automatically.\n */\nconst globalCSSOverride = [\n ...buildAliasBlock(),\n \"--radius-sm: var(--radius-small);\",\n \"--radius-md: var(--radius-medium);\",\n \"--radius-lg: var(--radius-large);\",\n \"--radius-xl: var(--radius-extra-large);\",\n \"--text-xs: var(--font-size-extra-small);\",\n \"--text-sm: var(--font-size-small);\",\n \"--text-base: var(--font-size-regular);\",\n \"--text-lg: var(--font-size-large);\",\n \"--text-xl: var(--font-size-extra-large);\",\n \"--text-2xl: var(--font-size-giant);\",\n];\n\n/**\n * Overrides for global tailwindcss for specifically dark mode.\n */\nconst globalDarkCSSOverride = [\n \"--border: color-mix(in oklch, var(--color-background), var(--color-foreground) 15%);\",\n];\n\nexport interface GenerateThemeCSSOptions {\n /** Whether or not to allow prefers-color-scheme to choose the theme mode */\n disableAutoTheme?: boolean;\n /** Whether to emit Tailwind built-in color overrides (default true) */\n mapTailwindColors?: boolean;\n}\n\n/**\n * Generate a complete CSS string for a resolved theme.\n * Outputs 2–3 blocks: light default, dark explicit via `[data-theme-mode=\"dark\"]`,\n * and (unless `disableAutoTheme`) a `prefers-color-scheme: dark` media query block.\n */\nexport function generateThemeCSS(\n theme: ResolvedTheme,\n options: GenerateThemeCSSOptions = {},\n): string {\n const sel = `[data-theme=\"${theme.id}\"]`;\n const tw = options.mapTailwindColors ?? true;\n const blocks: string[] = [];\n\n // Light mode (default)\n blocks.push(`${sel} {`);\n blocks.push(...globalCSSOverride);\n blocks.push(...emitNonColorVars(theme));\n blocks.push(...emitColorVars(theme.light));\n if (tw) blocks.push(...emitTailwindOverrides());\n blocks.push(`}`);\n\n // Dark mode: explicit via attribute\n blocks.push(`${sel}[data-theme-mode=\"dark\"] {`);\n blocks.push(...globalDarkCSSOverride);\n blocks.push(...emitColorVars(theme.dark));\n if (tw) blocks.push(...emitTailwindOverrides());\n blocks.push(`}`);\n\n // Dark mode: auto via system preference\n if (!options.disableAutoTheme) {\n blocks.push(`@media (prefers-color-scheme: dark) {`);\n blocks.push(`${sel}:not([data-theme-mode]) {`);\n blocks.push(...globalDarkCSSOverride);\n blocks.push(...emitColorVars(theme.dark).map((l) => `${l}`));\n if (tw) blocks.push(...emitTailwindOverrides().map((l) => `${l}`));\n blocks.push(`}`);\n blocks.push(`}`);\n }\n\n return blocks.join(\"\\n\");\n}\n","import Color from \"colorjs.io\";\nimport type {\n FontSizeKey,\n FontFamilyKey,\n RadiusKey,\n ThemeDefinition,\n} from \"./types\";\nimport { getForegroundColor } from \"./color-engine\";\n\n// ── Non-color defaults ──────────────────────────────────────────────\n\nexport const DEFAULT_FONT_SIZES: Record<FontSizeKey, string> = {\n extraSmall: \"0.75rem\",\n small: \"0.875rem\",\n regular: \"1rem\",\n large: \"1.125rem\",\n extraLarge: \"1.25rem\",\n giant: \"1.5rem\",\n};\n\nexport const DEFAULT_FONT_FAMILIES: Record<FontFamilyKey, string> = {\n header: \"Inter\",\n body: \"Inter\",\n};\n\nexport const DEFAULT_SPACING = \"0.25rem\";\n\nexport const DEFAULT_RADII: Record<RadiusKey, string> = {\n small: \"0.25rem\",\n medium: \"0.5rem\",\n large: \"0.75rem\",\n extraLarge: \"1rem\",\n};\n\n// ── Default colors (hex) ────────────────────────────────────────────\n\nexport const DEFAULT_COLORS = {\n background: \"#ffffff\",\n foreground: \"#1a1a1a\",\n primary: \"#3b82f6\",\n secondary: \"#6b7280\",\n accent: \"#10b981\",\n muted: \"#f3f4f6\",\n destructive: \"#ef4444\",\n mutedForeground: \"#6b7280\",\n} as const;\n\n// ── Default theme identity ──────────────────────────────────────────\n\nexport const DEFAULT_THEME_ID = \"default\";\nexport const DEFAULT_THEME_NAME = \"Default Theme\";\n\n// ── Factory ─────────────────────────────────────────────────────────\n\n/**\n * Build a fresh ThemeDefinition populated with all defaults.\n * Returns a new object each call because Color instances are mutable — do not cache the result.\n */\nexport function getDefaultThemeDefinition(): ThemeDefinition {\n const bg = new Color(DEFAULT_COLORS.background);\n const fg = new Color(DEFAULT_COLORS.foreground);\n const primary = new Color(DEFAULT_COLORS.primary);\n const secondary = new Color(DEFAULT_COLORS.secondary);\n const accent = new Color(DEFAULT_COLORS.accent);\n const muted = new Color(DEFAULT_COLORS.muted);\n const destructive = new Color(DEFAULT_COLORS.destructive);\n const mutedFg = new Color(DEFAULT_COLORS.mutedForeground);\n\n const darkBg = new Color(\"#0a0a0a\");\n const darkFg = new Color(\"#fafafa\");\n const darkMuted = new Color(\"#171717\");\n const darkMutedForeground = new Color(\"#dddddd\");\n\n return {\n id: DEFAULT_THEME_ID,\n name: DEFAULT_THEME_NAME,\n light: {\n background: { base: bg, foreground: fg },\n foreground: { base: fg, foreground: bg },\n primary: {\n base: primary,\n foreground: getForegroundColor(fg, primary),\n },\n secondary: {\n base: secondary,\n foreground: getForegroundColor(fg, secondary),\n },\n accent: {\n base: accent,\n foreground: getForegroundColor(fg, accent),\n },\n muted: { base: muted, foreground: mutedFg },\n destructive: {\n base: destructive,\n foreground: getForegroundColor(fg, destructive),\n },\n },\n dark: {\n background: { base: darkBg, foreground: darkFg },\n foreground: { base: darkFg, foreground: darkBg },\n muted: { base: darkMuted, foreground: darkMutedForeground },\n },\n fontSizes: { ...DEFAULT_FONT_SIZES },\n fontFamilies: { ...DEFAULT_FONT_FAMILIES },\n spacing: DEFAULT_SPACING,\n radii: { ...DEFAULT_RADII },\n };\n}\n","import Color from \"colorjs.io\";\nimport {\n SEMANTIC_COLOR_NAMES,\n type SemanticColorName,\n type ThemeColorInput,\n type ThemeDefinition,\n type ThemePayload,\n type OklchPlain,\n type FontSizeKey,\n type FontFamilyKey,\n type RadiusKey,\n} from \"./types\";\nimport {\n DEFAULT_FONT_SIZES,\n DEFAULT_FONT_FAMILIES,\n DEFAULT_SPACING,\n DEFAULT_RADII,\n getDefaultThemeDefinition,\n} from \"./defaults\";\n\nfunction colorToPlain(color: Color): OklchPlain {\n const finiteOrZero = (value: number | null | undefined): number =>\n value !== null && value !== undefined && Number.isFinite(value) ? value : 0;\n return {\n l: finiteOrZero(color.oklch.l),\n c: finiteOrZero(color.oklch.c),\n h: finiteOrZero(color.oklch.h),\n };\n}\n\nfunction plainToColor(plain: OklchPlain): Color {\n return new Color(\"oklch\", [plain.l, plain.c, plain.h]);\n}\n\n/**\n * Serialise a ThemeDefinition (with Color objects) to a plain JSON payload\n * suitable for backend storage.\n */\nexport function serialiseTheme(def: ThemeDefinition): ThemePayload {\n const light = {} as ThemePayload[\"light\"];\n for (const name of SEMANTIC_COLOR_NAMES) {\n light[name] = {\n base: colorToPlain(def.light[name].base),\n foreground: colorToPlain(def.light[name].foreground),\n };\n }\n\n const dark: ThemePayload[\"dark\"] = {};\n for (const [name, value] of Object.entries(def.dark)) {\n if (!value) continue;\n dark[name as SemanticColorName] = {\n ...(value.base ? { base: colorToPlain(value.base) } : {}),\n ...(value.foreground\n ? { foreground: colorToPlain(value.foreground) }\n : {}),\n };\n }\n\n return {\n id: def.id,\n name: def.name,\n light,\n dark,\n fontSizes: { ...def.fontSizes },\n fontFamilies: { ...def.fontFamilies },\n spacing: def.spacing,\n radii: { ...def.radii },\n ...(def.syncWithBrandColors ? { syncWithBrandColors: true } : {}),\n };\n}\n\n/**\n * Deserialise a backend payload into a ThemeDefinition with Color objects.\n * Accepts `Record<string, unknown>` because API data is untyped at the boundary.\n * Falls back to default colors for any missing light-mode entries.\n */\nexport function deserialiseTheme(\n payload: Record<string, unknown>,\n): ThemeDefinition {\n const lightRaw = ((payload.light as Record<string, unknown> | undefined) ??\n {}) as Record<string, { base: OklchPlain; foreground: OklchPlain }>;\n const darkRaw = ((payload.dark as Record<string, unknown> | undefined) ??\n {}) as Record<string, { base?: OklchPlain; foreground?: OklchPlain }>;\n\n const defaults = getDefaultThemeDefinition();\n const light = {} as Record<SemanticColorName, ThemeColorInput>;\n for (const name of SEMANTIC_COLOR_NAMES) {\n const entry = lightRaw[name];\n if (entry) {\n light[name] = {\n base: plainToColor(entry.base),\n foreground: plainToColor(entry.foreground),\n };\n } else {\n console.warn(\n `[theme] deserialiseTheme: missing light color \"${name}\", using default`,\n );\n light[name] = defaults.light[name];\n }\n }\n\n const dark: Partial<Record<SemanticColorName, Partial<ThemeColorInput>>> = {};\n for (const [name, value] of Object.entries(darkRaw)) {\n if (!value) continue;\n dark[name as SemanticColorName] = {\n ...(value.base ? { base: plainToColor(value.base) } : {}),\n ...(value.foreground\n ? { foreground: plainToColor(value.foreground) }\n : {}),\n };\n }\n\n return {\n id: payload.id as string,\n name: payload.name as string,\n light,\n dark,\n fontSizes: (payload.fontSizes ?? DEFAULT_FONT_SIZES) as Record<\n FontSizeKey,\n string\n >,\n fontFamilies: (payload.fontFamilies ?? DEFAULT_FONT_FAMILIES) as Record<\n FontFamilyKey,\n string\n >,\n spacing: (payload.spacing as string) ?? DEFAULT_SPACING,\n radii: (payload.radii ?? DEFAULT_RADII) as Record<RadiusKey, string>,\n ...(payload.syncWithBrandColors === true\n ? { syncWithBrandColors: true }\n : {}),\n };\n}\n","/**\n * Theme Transforms\n * Convert raw API theme objects to ThemeDefinition format.\n * Handles both new structured format (OKLCH) and legacy flat format (hex strings).\n */\n\nimport type { ThemeDefinition } from \"./types\";\nimport { deserialiseTheme } from \"./serialisation\";\nimport { parseColor, getForegroundColor } from \"./color-engine\";\nimport {\n DEFAULT_COLORS,\n DEFAULT_FONT_SIZES,\n DEFAULT_FONT_FAMILIES,\n DEFAULT_SPACING,\n DEFAULT_RADII,\n} from \"./defaults\";\n\n/** Shape of a raw theme from the FluidOS API */\nexport interface RawApiTheme {\n id: number;\n config?: Record<string, unknown> | null;\n active?: boolean | null;\n name?: string | null;\n}\n\n/**\n * Check if a theme config uses the new structured format (has a `light` key\n * that is an object) vs the legacy flat format.\n */\nfunction isNewThemeFormat(config: Record<string, unknown>): boolean {\n return config.light != null && typeof config.light === \"object\";\n}\n\n/**\n * Convert a legacy flat config to a ThemeDefinition.\n * Legacy format: { base: \"#fff\", text: \"#000\", primary: \"oklch(0.6 0.2 250)\", ... }\n */\nfunction legacyConfigToDefinition(\n id: number,\n name: string,\n config: Record<string, string>,\n): ThemeDefinition {\n const bg = parseColor(\n config.base ?? config.background ?? DEFAULT_COLORS.background,\n );\n const fg = parseColor(\n config.text ?? config.foreground ?? DEFAULT_COLORS.foreground,\n );\n const primary = parseColor(config.primary ?? DEFAULT_COLORS.primary);\n const secondary = parseColor(config.secondary ?? DEFAULT_COLORS.secondary);\n const accent = parseColor(config.accent ?? DEFAULT_COLORS.accent);\n const muted = parseColor(config.muted ?? DEFAULT_COLORS.muted);\n const destructive = parseColor(\n config.destructive ?? DEFAULT_COLORS.destructive,\n );\n const mutedFg = parseColor(\n config.mutedForeground ?? DEFAULT_COLORS.mutedForeground,\n );\n\n return {\n id: String(id),\n name,\n light: {\n background: { base: bg, foreground: fg },\n foreground: { base: fg, foreground: bg },\n primary: {\n base: primary,\n foreground: getForegroundColor(fg, primary),\n },\n secondary: {\n base: secondary,\n foreground: getForegroundColor(fg, secondary),\n },\n accent: {\n base: accent,\n foreground: getForegroundColor(fg, accent),\n },\n muted: { base: muted, foreground: mutedFg },\n destructive: {\n base: destructive,\n foreground: getForegroundColor(fg, destructive),\n },\n },\n dark: {},\n fontSizes: {\n extraSmall: config.extraSmall ?? DEFAULT_FONT_SIZES.extraSmall,\n small: config.small ?? DEFAULT_FONT_SIZES.small,\n regular: config.regular ?? DEFAULT_FONT_SIZES.regular,\n large: config.large ?? DEFAULT_FONT_SIZES.large,\n extraLarge: config.extraLarge ?? DEFAULT_FONT_SIZES.extraLarge,\n giant: config.giant ?? DEFAULT_FONT_SIZES.giant,\n },\n fontFamilies: {\n header: config.headerFont ?? DEFAULT_FONT_FAMILIES.header,\n body: config.bodyFont ?? DEFAULT_FONT_FAMILIES.body,\n },\n spacing: config.globalSpacing ?? DEFAULT_SPACING,\n radii: {\n small: config.radiusSmall ?? DEFAULT_RADII.small,\n medium: config.radiusMedium ?? DEFAULT_RADII.medium,\n large: config.radiusLarge ?? DEFAULT_RADII.large,\n extraLarge: config.radiusExtraLarge ?? DEFAULT_RADII.extraLarge,\n },\n };\n}\n\n/**\n * Build a ThemeDefinition from a single API theme object.\n * Handles both new structured format and legacy flat format.\n */\nexport function buildThemeDefinition(theme: RawApiTheme): ThemeDefinition {\n const config = (theme.config ?? {}) as Record<string, unknown>;\n\n if (isNewThemeFormat(config)) {\n return deserialiseTheme({\n ...config,\n id: String(theme.id),\n name: theme.name ?? \"Untitled Theme\",\n });\n }\n\n return legacyConfigToDefinition(\n theme.id,\n theme.name ?? \"Untitled Theme\",\n config as Record<string, string>,\n );\n}\n\n/**\n * Transform raw API themes to ThemeDefinition[].\n * Catches and logs errors per theme (graceful degradation).\n */\nexport function transformThemes(themes: RawApiTheme[]): ThemeDefinition[] {\n return themes.flatMap((theme) => {\n try {\n return [buildThemeDefinition(theme)];\n } catch (error) {\n console.error(`[theme] Failed to build theme id=${theme.id}:`, error);\n return [];\n }\n });\n}\n\n/**\n * Get the active theme ID from a list of raw API themes.\n * Falls back to the first theme if none is marked active.\n */\nexport function getActiveThemeId(themes: RawApiTheme[]): string | undefined {\n const active = themes.find((t) => t.active) ?? themes[0];\n return active ? String(active.id) : undefined;\n}\n","/**\n * Transformation utilities for converting Fluid OS API responses\n * into the local file format used by the portal content sync system.\n */\n\nimport type {\n FluidOsNavigationBasic,\n FluidOsNavigationItem,\n FluidOsProfile,\n FluidOsScreen,\n FluidOsTheme,\n} from \"@fluid-app/fluidos-api-client/types\";\nimport { toNumberArray, toStringArray } from \"@fluid-app/fluidos-api-client\";\nimport type {\n PortalNavigation,\n PortalNavigationItem,\n PortalProfile,\n PortalScreen,\n PortalTheme,\n PortalWidgetNode,\n} from \"@fluid-app/portal-definition-schema\";\nimport { buildThemeDefinition, serialiseTheme } from \"@fluid-app/theme-engine\";\nimport { deriveSlug } from \"./mappings\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// API types (aliases for readability)\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ApiScreen = FluidOsScreen;\ntype ApiTheme = FluidOsTheme;\ntype ApiNavigationBasic = FluidOsNavigationBasic;\ntype ApiNavigationItem = FluidOsNavigationItem;\ntype ApiProfile = FluidOsProfile;\n\nfunction toUnvalidatedPortalWidgetNode(value: unknown): PortalWidgetNode {\n return value as PortalWidgetNode;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Local file types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type LocalScreen = PortalScreen;\nexport type LocalTheme = PortalTheme;\nexport type LocalNavigationItem = PortalNavigationItem;\nexport type LocalNavigation = PortalNavigation;\nexport type LocalProfile = PortalProfile;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Screen transformation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Transform an API screen response into the local file format.\n * Strips server-only fields and normalizes `component_tree` to always be an array.\n */\nexport function transformScreen(screen: ApiScreen): LocalScreen {\n const name = screen.name ?? \"\";\n const rawTree = screen.component_tree;\n\n // Normalize component_tree to always be an array\n let componentTree: PortalWidgetNode[];\n if (rawTree == null) {\n componentTree = [];\n } else if (Array.isArray(rawTree)) {\n componentTree = rawTree.map(toUnvalidatedPortalWidgetNode);\n } else {\n componentTree = [toUnvalidatedPortalWidgetNode(rawTree)];\n }\n\n return { name, component_tree: componentTree };\n}\n\n/**\n * Derive a slug for a screen. Screens use the existing `slug` field from the API.\n * Falls back to slugifying the name if no slug exists.\n */\nexport function deriveScreenSlug(\n screen: ApiScreen,\n existingSlugs: Set<string>,\n): string {\n if (screen.slug) {\n // Sanitize: strip path-separator and other unsafe characters before using\n // the API slug as a filesystem path segment.\n const safe = screen.slug.replace(/[^a-z0-9_-]/gi, \"-\");\n if (!existingSlugs.has(safe)) {\n return safe;\n }\n return deriveSlug(safe, existingSlugs);\n }\n return deriveSlug(screen.name ?? \"unnamed\", existingSlugs);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Theme transformation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Transform an API theme response into the local file format.\n * Normalizes both legacy flat and structured API configs to the current\n * structured theme payload.\n */\nexport function transformTheme(theme: ApiTheme): LocalTheme {\n return {\n name: theme.name ?? \"\",\n config: serialiseTheme(buildThemeDefinition(theme)),\n active: theme.active ?? false,\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Navigation transformation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build an ID → slug lookup map by inverting a slug → id mapping.\n */\nexport function buildIdToSlugMap(\n mappings: Record<string, number>,\n): Map<number, string> {\n const map = new Map<number, string>();\n for (const [slug, id] of Object.entries(mappings)) {\n map.set(id, slug);\n }\n return map;\n}\n\n/**\n * Transform API navigation items into local format.\n * Converts `screen_id` to `screen` slug reference. Keeps `id` for sync.\n */\nexport function transformNavigationItems(\n items: ApiNavigationItem[],\n screenIdToSlug: Map<number, string>,\n): LocalNavigationItem[] {\n return items.map((item) => ({\n ...(item.id === undefined ? {} : { id: item.id }),\n icon: item.icon ?? null,\n label: item.label ?? null,\n screen: item.screen_id\n ? (screenIdToSlug.get(item.screen_id) ?? null)\n : null,\n slug: item.slug ?? null,\n source: item.source ?? \"user\",\n position: item.position ?? null,\n parent_id: item.parent_id ?? null,\n children: transformNavigationItems(item.children ?? [], screenIdToSlug),\n }));\n}\n\n/**\n * Transform an API navigation with its items into the local file format.\n */\nexport function transformNavigation(\n nav: ApiNavigationBasic,\n items: ApiNavigationItem[],\n screenIdToSlug: Map<number, string>,\n): LocalNavigation {\n return {\n name: nav.name ?? \"\",\n platform: nav.platform,\n navigation_items: transformNavigationItems(items, screenIdToSlug),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Profile transformation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Typed alias for call-site clarity. */\nexport const buildNavigationIdToSlugMap: (\n mappings: Record<string, number>,\n) => Map<number, string> = buildIdToSlugMap;\n\n/** Typed alias for call-site clarity. */\nexport const buildThemeIdToSlugMap: (\n mappings: Record<string, number>,\n) => Map<number, string> = buildIdToSlugMap;\n\n/**\n * Transform an API profile response into the local file format.\n * Converts navigation_id, mobile_navigation_id, and theme_ids to slug references.\n *\n * TODO (REP-842): Country/rank IDs in profile permissions need to be translated\n * to human-readable names via the main Fluid API. For now, the permission arrays\n * are written as-is with integer IDs.\n */\nexport function transformProfile(\n profile: ApiProfile,\n navIdToSlug: Map<number, string>,\n themeIdToSlug: Map<number, string>,\n): LocalProfile {\n const navigation = profile.navigation\n ? (navIdToSlug.get(profile.navigation.id) ?? null)\n : null;\n\n const mobileNavigation = profile.mobile_navigation\n ? (navIdToSlug.get(profile.mobile_navigation.id) ?? null)\n : null;\n\n const themes = (profile.themes ?? [])\n .map((t) => themeIdToSlug.get(t.id))\n .filter((slug): slug is string => slug != null);\n\n const permissions = profile.permissions ?? {};\n\n return {\n name: profile.name ?? \"\",\n default: profile.default ?? false,\n navigation,\n mobile_navigation: mobileNavigation,\n themes,\n permissions: {\n ranks: toNumberArray(permissions.ranks) ?? [],\n roles: toStringArray(permissions.roles) ?? [],\n platform: toStringArray(permissions.platform) ?? [],\n countries: toNumberArray(permissions.countries) ?? [],\n },\n };\n}\n","export const PORTAL_SCHEMA_VERSION = \"1.5.0\" as const;\n\nexport const PORTAL_SCHEMA_BASE_URL: string = `https://assets.fluid.app/docs/schema/portal/${PORTAL_SCHEMA_VERSION}`;\n\nexport const PORTAL_RESOURCE_KINDS: readonly [\n \"definition\",\n \"screen\",\n \"theme\",\n \"navigation\",\n \"profile\",\n] = [\"definition\", \"screen\", \"theme\", \"navigation\", \"profile\"] as const;\n\nexport type PortalResourceKind = (typeof PORTAL_RESOURCE_KINDS)[number];\n\nexport const PORTAL_SCHEMA_URLS: Readonly<Record<PortalResourceKind, string>> =\n {\n definition: `${PORTAL_SCHEMA_BASE_URL}/definition.schema.json`,\n screen: `${PORTAL_SCHEMA_BASE_URL}/screen.schema.json`,\n theme: `${PORTAL_SCHEMA_BASE_URL}/theme.schema.json`,\n navigation: `${PORTAL_SCHEMA_BASE_URL}/navigation.schema.json`,\n profile: `${PORTAL_SCHEMA_BASE_URL}/profile.schema.json`,\n };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nclass _CodeOrName {\n}\nexports._CodeOrName = _CodeOrName;\nexports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nclass Name extends _CodeOrName {\n constructor(s) {\n super();\n if (!exports.IDENTIFIER.test(s))\n throw new Error(\"CodeGen: name must be a valid identifier\");\n this.str = s;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n return false;\n }\n get names() {\n return { [this.str]: 1 };\n }\n}\nexports.Name = Name;\nclass _Code extends _CodeOrName {\n constructor(code) {\n super();\n this._items = typeof code === \"string\" ? [code] : code;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n if (this._items.length > 1)\n return false;\n const item = this._items[0];\n return item === \"\" || item === '\"\"';\n }\n get str() {\n var _a;\n return ((_a = this._str) !== null && _a !== void 0 ? _a : (this._str = this._items.reduce((s, c) => `${s}${c}`, \"\")));\n }\n get names() {\n var _a;\n return ((_a = this._names) !== null && _a !== void 0 ? _a : (this._names = this._items.reduce((names, c) => {\n if (c instanceof Name)\n names[c.str] = (names[c.str] || 0) + 1;\n return names;\n }, {})));\n }\n}\nexports._Code = _Code;\nexports.nil = new _Code(\"\");\nfunction _(strs, ...args) {\n const code = [strs[0]];\n let i = 0;\n while (i < args.length) {\n addCodeArg(code, args[i]);\n code.push(strs[++i]);\n }\n return new _Code(code);\n}\nexports._ = _;\nconst plus = new _Code(\"+\");\nfunction str(strs, ...args) {\n const expr = [safeStringify(strs[0])];\n let i = 0;\n while (i < args.length) {\n expr.push(plus);\n addCodeArg(expr, args[i]);\n expr.push(plus, safeStringify(strs[++i]));\n }\n optimize(expr);\n return new _Code(expr);\n}\nexports.str = str;\nfunction addCodeArg(code, arg) {\n if (arg instanceof _Code)\n code.push(...arg._items);\n else if (arg instanceof Name)\n code.push(arg);\n else\n code.push(interpolate(arg));\n}\nexports.addCodeArg = addCodeArg;\nfunction optimize(expr) {\n let i = 1;\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1]);\n if (res !== undefined) {\n expr.splice(i - 1, 3, res);\n continue;\n }\n expr[i++] = \"+\";\n }\n i++;\n }\n}\nfunction mergeExprItems(a, b) {\n if (b === '\"\"')\n return a;\n if (a === '\"\"')\n return b;\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"')\n return;\n if (typeof b != \"string\")\n return `${a.slice(0, -1)}${b}\"`;\n if (b[0] === '\"')\n return a.slice(0, -1) + b.slice(1);\n return;\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name))\n return `\"${a}${b.slice(1)}`;\n return;\n}\nfunction strConcat(c1, c2) {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str `${c1}${c2}`;\n}\nexports.strConcat = strConcat;\n// TODO do not allow arrays here\nfunction interpolate(x) {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x);\n}\nfunction stringify(x) {\n return new _Code(safeStringify(x));\n}\nexports.stringify = stringify;\nfunction safeStringify(x) {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\nexports.safeStringify = safeStringify;\nfunction getProperty(key) {\n return typeof key == \"string\" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _ `[${key}]`;\n}\nexports.getProperty = getProperty;\n//Does best effort to format the name properly\nfunction getEsmExportName(key) {\n if (typeof key == \"string\" && exports.IDENTIFIER.test(key)) {\n return new _Code(`${key}`);\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`);\n}\nexports.getEsmExportName = getEsmExportName;\nfunction regexpCode(rx) {\n return new _Code(rx.toString());\n}\nexports.regexpCode = regexpCode;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0;\nconst code_1 = require(\"./code\");\nclass ValueError extends Error {\n constructor(name) {\n super(`CodeGen: \"code\" for ${name} not defined`);\n this.value = name.value;\n }\n}\nvar UsedValueState;\n(function (UsedValueState) {\n UsedValueState[UsedValueState[\"Started\"] = 0] = \"Started\";\n UsedValueState[UsedValueState[\"Completed\"] = 1] = \"Completed\";\n})(UsedValueState || (exports.UsedValueState = UsedValueState = {}));\nexports.varKinds = {\n const: new code_1.Name(\"const\"),\n let: new code_1.Name(\"let\"),\n var: new code_1.Name(\"var\"),\n};\nclass Scope {\n constructor({ prefixes, parent } = {}) {\n this._names = {};\n this._prefixes = prefixes;\n this._parent = parent;\n }\n toName(nameOrPrefix) {\n return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix);\n }\n name(prefix) {\n return new code_1.Name(this._newName(prefix));\n }\n _newName(prefix) {\n const ng = this._names[prefix] || this._nameGroup(prefix);\n return `${prefix}${ng.index++}`;\n }\n _nameGroup(prefix) {\n var _a, _b;\n if (((_b = (_a = this._parent) === null || _a === void 0 ? void 0 : _a._prefixes) === null || _b === void 0 ? void 0 : _b.has(prefix)) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`);\n }\n return (this._names[prefix] = { prefix, index: 0 });\n }\n}\nexports.Scope = Scope;\nclass ValueScopeName extends code_1.Name {\n constructor(prefix, nameStr) {\n super(nameStr);\n this.prefix = prefix;\n }\n setValue(value, { property, itemIndex }) {\n this.value = value;\n this.scopePath = (0, code_1._) `.${new code_1.Name(property)}[${itemIndex}]`;\n }\n}\nexports.ValueScopeName = ValueScopeName;\nconst line = (0, code_1._) `\\n`;\nclass ValueScope extends Scope {\n constructor(opts) {\n super(opts);\n this._values = {};\n this._scope = opts.scope;\n this.opts = { ...opts, _n: opts.lines ? line : code_1.nil };\n }\n get() {\n return this._scope;\n }\n name(prefix) {\n return new ValueScopeName(prefix, this._newName(prefix));\n }\n value(nameOrPrefix, value) {\n var _a;\n if (value.ref === undefined)\n throw new Error(\"CodeGen: ref must be passed in value\");\n const name = this.toName(nameOrPrefix);\n const { prefix } = name;\n const valueKey = (_a = value.key) !== null && _a !== void 0 ? _a : value.ref;\n let vs = this._values[prefix];\n if (vs) {\n const _name = vs.get(valueKey);\n if (_name)\n return _name;\n }\n else {\n vs = this._values[prefix] = new Map();\n }\n vs.set(valueKey, name);\n const s = this._scope[prefix] || (this._scope[prefix] = []);\n const itemIndex = s.length;\n s[itemIndex] = value.ref;\n name.setValue(value, { property: prefix, itemIndex });\n return name;\n }\n getValue(prefix, keyOrRef) {\n const vs = this._values[prefix];\n if (!vs)\n return;\n return vs.get(keyOrRef);\n }\n scopeRefs(scopeName, values = this._values) {\n return this._reduceValues(values, (name) => {\n if (name.scopePath === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return (0, code_1._) `${scopeName}${name.scopePath}`;\n });\n }\n scopeCode(values = this._values, usedValues, getCode) {\n return this._reduceValues(values, (name) => {\n if (name.value === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return name.value.code;\n }, usedValues, getCode);\n }\n _reduceValues(values, valueCode, usedValues = {}, getCode) {\n let code = code_1.nil;\n for (const prefix in values) {\n const vs = values[prefix];\n if (!vs)\n continue;\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map());\n vs.forEach((name) => {\n if (nameSet.has(name))\n return;\n nameSet.set(name, UsedValueState.Started);\n let c = valueCode(name);\n if (c) {\n const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const;\n code = (0, code_1._) `${code}${def} ${name} = ${c};${this.opts._n}`;\n }\n else if ((c = getCode === null || getCode === void 0 ? void 0 : getCode(name))) {\n code = (0, code_1._) `${code}${c}${this.opts._n}`;\n }\n else {\n throw new ValueError(name);\n }\n nameSet.set(name, UsedValueState.Completed);\n });\n }\n return code;\n }\n}\nexports.ValueScope = ValueScope;\n//# sourceMappingURL=scope.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0;\nconst code_1 = require(\"./code\");\nconst scope_1 = require(\"./scope\");\nvar code_2 = require(\"./code\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return code_2._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return code_2.str; } });\nObject.defineProperty(exports, \"strConcat\", { enumerable: true, get: function () { return code_2.strConcat; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return code_2.nil; } });\nObject.defineProperty(exports, \"getProperty\", { enumerable: true, get: function () { return code_2.getProperty; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return code_2.stringify; } });\nObject.defineProperty(exports, \"regexpCode\", { enumerable: true, get: function () { return code_2.regexpCode; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return code_2.Name; } });\nvar scope_2 = require(\"./scope\");\nObject.defineProperty(exports, \"Scope\", { enumerable: true, get: function () { return scope_2.Scope; } });\nObject.defineProperty(exports, \"ValueScope\", { enumerable: true, get: function () { return scope_2.ValueScope; } });\nObject.defineProperty(exports, \"ValueScopeName\", { enumerable: true, get: function () { return scope_2.ValueScopeName; } });\nObject.defineProperty(exports, \"varKinds\", { enumerable: true, get: function () { return scope_2.varKinds; } });\nexports.operators = {\n GT: new code_1._Code(\">\"),\n GTE: new code_1._Code(\">=\"),\n LT: new code_1._Code(\"<\"),\n LTE: new code_1._Code(\"<=\"),\n EQ: new code_1._Code(\"===\"),\n NEQ: new code_1._Code(\"!==\"),\n NOT: new code_1._Code(\"!\"),\n OR: new code_1._Code(\"||\"),\n AND: new code_1._Code(\"&&\"),\n ADD: new code_1._Code(\"+\"),\n};\nclass Node {\n optimizeNodes() {\n return this;\n }\n optimizeNames(_names, _constants) {\n return this;\n }\n}\nclass Def extends Node {\n constructor(varKind, name, rhs) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.rhs = rhs;\n }\n render({ es5, _n }) {\n const varKind = es5 ? scope_1.varKinds.var : this.varKind;\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`;\n return `${varKind} ${this.name}${rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (!names[this.name.str])\n return;\n if (this.rhs)\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};\n }\n}\nclass Assign extends Node {\n constructor(lhs, rhs, sideEffects) {\n super();\n this.lhs = lhs;\n this.rhs = rhs;\n this.sideEffects = sideEffects;\n }\n render({ _n }) {\n return `${this.lhs} = ${this.rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)\n return;\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names };\n return addExprNames(names, this.rhs);\n }\n}\nclass AssignOp extends Assign {\n constructor(lhs, op, rhs, sideEffects) {\n super(lhs, rhs, sideEffects);\n this.op = op;\n }\n render({ _n }) {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n;\n }\n}\nclass Label extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n return `${this.label}:` + _n;\n }\n}\nclass Break extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n const label = this.label ? ` ${this.label}` : \"\";\n return `break${label};` + _n;\n }\n}\nclass Throw extends Node {\n constructor(error) {\n super();\n this.error = error;\n }\n render({ _n }) {\n return `throw ${this.error};` + _n;\n }\n get names() {\n return this.error.names;\n }\n}\nclass AnyCode extends Node {\n constructor(code) {\n super();\n this.code = code;\n }\n render({ _n }) {\n return `${this.code};` + _n;\n }\n optimizeNodes() {\n return `${this.code}` ? this : undefined;\n }\n optimizeNames(names, constants) {\n this.code = optimizeExpr(this.code, names, constants);\n return this;\n }\n get names() {\n return this.code instanceof code_1._CodeOrName ? this.code.names : {};\n }\n}\nclass ParentNode extends Node {\n constructor(nodes = []) {\n super();\n this.nodes = nodes;\n }\n render(opts) {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\");\n }\n optimizeNodes() {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n const n = nodes[i].optimizeNodes();\n if (Array.isArray(n))\n nodes.splice(i, 1, ...n);\n else if (n)\n nodes[i] = n;\n else\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n optimizeNames(names, constants) {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i];\n if (n.optimizeNames(names, constants))\n continue;\n subtractNames(names, n.names);\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n get names() {\n return this.nodes.reduce((names, n) => addNames(names, n.names), {});\n }\n}\nclass BlockNode extends ParentNode {\n render(opts) {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n;\n }\n}\nclass Root extends ParentNode {\n}\nclass Else extends BlockNode {\n}\nElse.kind = \"else\";\nclass If extends BlockNode {\n constructor(condition, nodes) {\n super(nodes);\n this.condition = condition;\n }\n render(opts) {\n let code = `if(${this.condition})` + super.render(opts);\n if (this.else)\n code += \"else \" + this.else.render(opts);\n return code;\n }\n optimizeNodes() {\n super.optimizeNodes();\n const cond = this.condition;\n if (cond === true)\n return this.nodes; // else is ignored here\n let e = this.else;\n if (e) {\n const ns = e.optimizeNodes();\n e = this.else = Array.isArray(ns) ? new Else(ns) : ns;\n }\n if (e) {\n if (cond === false)\n return e instanceof If ? e : e.nodes;\n if (this.nodes.length)\n return this;\n return new If(not(cond), e instanceof If ? [e] : e.nodes);\n }\n if (cond === false || !this.nodes.length)\n return undefined;\n return this;\n }\n optimizeNames(names, constants) {\n var _a;\n this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n if (!(super.optimizeNames(names, constants) || this.else))\n return;\n this.condition = optimizeExpr(this.condition, names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n addExprNames(names, this.condition);\n if (this.else)\n addNames(names, this.else.names);\n return names;\n }\n}\nIf.kind = \"if\";\nclass For extends BlockNode {\n}\nFor.kind = \"for\";\nclass ForLoop extends For {\n constructor(iteration) {\n super();\n this.iteration = iteration;\n }\n render(opts) {\n return `for(${this.iteration})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iteration = optimizeExpr(this.iteration, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iteration.names);\n }\n}\nclass ForRange extends For {\n constructor(varKind, name, from, to) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.from = from;\n this.to = to;\n }\n render(opts) {\n const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind;\n const { name, from, to } = this;\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts);\n }\n get names() {\n const names = addExprNames(super.names, this.from);\n return addExprNames(names, this.to);\n }\n}\nclass ForIter extends For {\n constructor(loop, varKind, name, iterable) {\n super();\n this.loop = loop;\n this.varKind = varKind;\n this.name = name;\n this.iterable = iterable;\n }\n render(opts) {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iterable = optimizeExpr(this.iterable, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iterable.names);\n }\n}\nclass Func extends BlockNode {\n constructor(name, args, async) {\n super();\n this.name = name;\n this.args = args;\n this.async = async;\n }\n render(opts) {\n const _async = this.async ? \"async \" : \"\";\n return `${_async}function ${this.name}(${this.args})` + super.render(opts);\n }\n}\nFunc.kind = \"func\";\nclass Return extends ParentNode {\n render(opts) {\n return \"return \" + super.render(opts);\n }\n}\nReturn.kind = \"return\";\nclass Try extends BlockNode {\n render(opts) {\n let code = \"try\" + super.render(opts);\n if (this.catch)\n code += this.catch.render(opts);\n if (this.finally)\n code += this.finally.render(opts);\n return code;\n }\n optimizeNodes() {\n var _a, _b;\n super.optimizeNodes();\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNodes();\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes();\n return this;\n }\n optimizeNames(names, constants) {\n var _a, _b;\n super.optimizeNames(names, constants);\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n if (this.catch)\n addNames(names, this.catch.names);\n if (this.finally)\n addNames(names, this.finally.names);\n return names;\n }\n}\nclass Catch extends BlockNode {\n constructor(error) {\n super();\n this.error = error;\n }\n render(opts) {\n return `catch(${this.error})` + super.render(opts);\n }\n}\nCatch.kind = \"catch\";\nclass Finally extends BlockNode {\n render(opts) {\n return \"finally\" + super.render(opts);\n }\n}\nFinally.kind = \"finally\";\nclass CodeGen {\n constructor(extScope, opts = {}) {\n this._values = {};\n this._blockStarts = [];\n this._constants = {};\n this.opts = { ...opts, _n: opts.lines ? \"\\n\" : \"\" };\n this._extScope = extScope;\n this._scope = new scope_1.Scope({ parent: extScope });\n this._nodes = [new Root()];\n }\n toString() {\n return this._root.render(this.opts);\n }\n // returns unique name in the internal scope\n name(prefix) {\n return this._scope.name(prefix);\n }\n // reserves unique name in the external scope\n scopeName(prefix) {\n return this._extScope.name(prefix);\n }\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName, value) {\n const name = this._extScope.value(prefixOrName, value);\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set());\n vs.add(name);\n return name;\n }\n getScopeValue(prefix, keyOrRef) {\n return this._extScope.getValue(prefix, keyOrRef);\n }\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName) {\n return this._extScope.scopeRefs(scopeName, this._values);\n }\n scopeCode() {\n return this._extScope.scopeCode(this._values);\n }\n _def(varKind, nameOrPrefix, rhs, constant) {\n const name = this._scope.toName(nameOrPrefix);\n if (rhs !== undefined && constant)\n this._constants[name.str] = rhs;\n this._leafNode(new Def(varKind, name, rhs));\n return name;\n }\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant);\n }\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant);\n }\n // `var` declaration with optional assignment\n var(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant);\n }\n // assignment code\n assign(lhs, rhs, sideEffects) {\n return this._leafNode(new Assign(lhs, rhs, sideEffects));\n }\n // `+=` code\n add(lhs, rhs) {\n return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs));\n }\n // appends passed SafeExpr to code or executes Block\n code(c) {\n if (typeof c == \"function\")\n c();\n else if (c !== code_1.nil)\n this._leafNode(new AnyCode(c));\n return this;\n }\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues) {\n const code = [\"{\"];\n for (const [key, value] of keyValues) {\n if (code.length > 1)\n code.push(\",\");\n code.push(key);\n if (key !== value || this.opts.es5) {\n code.push(\":\");\n (0, code_1.addCodeArg)(code, value);\n }\n }\n code.push(\"}\");\n return new code_1._Code(code);\n }\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition, thenBody, elseBody) {\n this._blockNode(new If(condition));\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf();\n }\n else if (thenBody) {\n this.code(thenBody).endIf();\n }\n else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body');\n }\n return this;\n }\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition) {\n return this._elseNode(new If(condition));\n }\n // `else` clause - only valid after `if` or `else if` clauses\n else() {\n return this._elseNode(new Else());\n }\n // end `if` statement (needed if gen.if was used only with condition)\n endIf() {\n return this._endBlockNode(If, Else);\n }\n _for(node, forBody) {\n this._blockNode(node);\n if (forBody)\n this.code(forBody).endFor();\n return this;\n }\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration, forBody) {\n return this._for(new ForLoop(iteration), forBody);\n }\n // `for` statement for a range of values\n forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) {\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name));\n }\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) {\n const name = this._scope.toName(nameOrPrefix);\n if (this.opts.es5) {\n const arr = iterable instanceof code_1.Name ? iterable : this.var(\"_arr\", iterable);\n return this.forRange(\"_i\", 0, (0, code_1._) `${arr}.length`, (i) => {\n this.var(name, (0, code_1._) `${arr}[${i}]`);\n forBody(name);\n });\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name));\n }\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, (0, code_1._) `Object.keys(${obj})`, forBody);\n }\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name));\n }\n // end `for` loop\n endFor() {\n return this._endBlockNode(For);\n }\n // `label` statement\n label(label) {\n return this._leafNode(new Label(label));\n }\n // `break` statement\n break(label) {\n return this._leafNode(new Break(label));\n }\n // `return` statement\n return(value) {\n const node = new Return();\n this._blockNode(node);\n this.code(value);\n if (node.nodes.length !== 1)\n throw new Error('CodeGen: \"return\" should have one node');\n return this._endBlockNode(Return);\n }\n // `try` statement\n try(tryBody, catchCode, finallyCode) {\n if (!catchCode && !finallyCode)\n throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"');\n const node = new Try();\n this._blockNode(node);\n this.code(tryBody);\n if (catchCode) {\n const error = this.name(\"e\");\n this._currNode = node.catch = new Catch(error);\n catchCode(error);\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally();\n this.code(finallyCode);\n }\n return this._endBlockNode(Catch, Finally);\n }\n // `throw` statement\n throw(error) {\n return this._leafNode(new Throw(error));\n }\n // start self-balancing block\n block(body, nodeCount) {\n this._blockStarts.push(this._nodes.length);\n if (body)\n this.code(body).endBlock(nodeCount);\n return this;\n }\n // end the current self-balancing block\n endBlock(nodeCount) {\n const len = this._blockStarts.pop();\n if (len === undefined)\n throw new Error(\"CodeGen: not in self-balancing block\");\n const toClose = this._nodes.length - len;\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);\n }\n this._nodes.length = len;\n return this;\n }\n // `function` heading (or definition if funcBody is passed)\n func(name, args = code_1.nil, async, funcBody) {\n this._blockNode(new Func(name, args, async));\n if (funcBody)\n this.code(funcBody).endFunc();\n return this;\n }\n // end function definition\n endFunc() {\n return this._endBlockNode(Func);\n }\n optimize(n = 1) {\n while (n-- > 0) {\n this._root.optimizeNodes();\n this._root.optimizeNames(this._root.names, this._constants);\n }\n }\n _leafNode(node) {\n this._currNode.nodes.push(node);\n return this;\n }\n _blockNode(node) {\n this._currNode.nodes.push(node);\n this._nodes.push(node);\n }\n _endBlockNode(N1, N2) {\n const n = this._currNode;\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop();\n return this;\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`);\n }\n _elseNode(node) {\n const n = this._currNode;\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"');\n }\n this._currNode = n.else = node;\n return this;\n }\n get _root() {\n return this._nodes[0];\n }\n get _currNode() {\n const ns = this._nodes;\n return ns[ns.length - 1];\n }\n set _currNode(node) {\n const ns = this._nodes;\n ns[ns.length - 1] = node;\n }\n}\nexports.CodeGen = CodeGen;\nfunction addNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) + (from[n] || 0);\n return names;\n}\nfunction addExprNames(names, from) {\n return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;\n}\nfunction optimizeExpr(expr, names, constants) {\n if (expr instanceof code_1.Name)\n return replaceName(expr);\n if (!canOptimize(expr))\n return expr;\n return new code_1._Code(expr._items.reduce((items, c) => {\n if (c instanceof code_1.Name)\n c = replaceName(c);\n if (c instanceof code_1._Code)\n items.push(...c._items);\n else\n items.push(c);\n return items;\n }, []));\n function replaceName(n) {\n const c = constants[n.str];\n if (c === undefined || names[n.str] !== 1)\n return n;\n delete names[n.str];\n return c;\n }\n function canOptimize(e) {\n return (e instanceof code_1._Code &&\n e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined));\n }\n}\nfunction subtractNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) - (from[n] || 0);\n}\nfunction not(x) {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : (0, code_1._) `!${par(x)}`;\n}\nexports.not = not;\nconst andCode = mappend(exports.operators.AND);\n// boolean AND (&&) expression with the passed arguments\nfunction and(...args) {\n return args.reduce(andCode);\n}\nexports.and = and;\nconst orCode = mappend(exports.operators.OR);\n// boolean OR (||) expression with the passed arguments\nfunction or(...args) {\n return args.reduce(orCode);\n}\nexports.or = or;\nfunction mappend(op) {\n return (x, y) => (x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._) `${par(x)} ${op} ${par(y)}`);\n}\nfunction par(x) {\n return x instanceof code_1.Name ? x : (0, code_1._) `(${x})`;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst code_1 = require(\"./codegen/code\");\n// TODO refactor to use Set\nfunction toHash(arr) {\n const hash = {};\n for (const item of arr)\n hash[item] = true;\n return hash;\n}\nexports.toHash = toHash;\nfunction alwaysValidSchema(it, schema) {\n if (typeof schema == \"boolean\")\n return schema;\n if (Object.keys(schema).length === 0)\n return true;\n checkUnknownRules(it, schema);\n return !schemaHasRules(schema, it.self.RULES.all);\n}\nexports.alwaysValidSchema = alwaysValidSchema;\nfunction checkUnknownRules(it, schema = it.schema) {\n const { opts, self } = it;\n if (!opts.strictSchema)\n return;\n if (typeof schema === \"boolean\")\n return;\n const rules = self.RULES.keywords;\n for (const key in schema) {\n if (!rules[key])\n checkStrictMode(it, `unknown keyword: \"${key}\"`);\n }\n}\nexports.checkUnknownRules = checkUnknownRules;\nfunction schemaHasRules(schema, rules) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (rules[key])\n return true;\n return false;\n}\nexports.schemaHasRules = schemaHasRules;\nfunction schemaHasRulesButRef(schema, RULES) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (key !== \"$ref\" && RULES.all[key])\n return true;\n return false;\n}\nexports.schemaHasRulesButRef = schemaHasRulesButRef;\nfunction schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\")\n return schema;\n if (typeof schema == \"string\")\n return (0, codegen_1._) `${schema}`;\n }\n return (0, codegen_1._) `${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;\n}\nexports.schemaRefOrVal = schemaRefOrVal;\nfunction unescapeFragment(str) {\n return unescapeJsonPointer(decodeURIComponent(str));\n}\nexports.unescapeFragment = unescapeFragment;\nfunction escapeFragment(str) {\n return encodeURIComponent(escapeJsonPointer(str));\n}\nexports.escapeFragment = escapeFragment;\nfunction escapeJsonPointer(str) {\n if (typeof str == \"number\")\n return `${str}`;\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexports.escapeJsonPointer = escapeJsonPointer;\nfunction unescapeJsonPointer(str) {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\nexports.unescapeJsonPointer = unescapeJsonPointer;\nfunction eachItem(xs, f) {\n if (Array.isArray(xs)) {\n for (const x of xs)\n f(x);\n }\n else {\n f(xs);\n }\n}\nexports.eachItem = eachItem;\nfunction makeMergeEvaluated({ mergeNames, mergeToName, mergeValues, resultToName, }) {\n return (gen, from, to, toName) => {\n const res = to === undefined\n ? from\n : to instanceof codegen_1.Name\n ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof codegen_1.Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to);\n return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res;\n };\n}\nexports.mergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => {\n gen.if((0, codegen_1._) `${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._) `${to} || {}`).code((0, codegen_1._) `Object.assign(${to}, ${from})`));\n }),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true);\n }\n else {\n gen.assign(to, (0, codegen_1._) `${to} || {}`);\n setEvaluated(gen, to, from);\n }\n }),\n mergeValues: (from, to) => (from === true ? true : { ...from, ...to }),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._) `${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._) `${to} > ${from} ? ${to} : ${from}`)),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n};\nfunction evaluatedPropsToName(gen, ps) {\n if (ps === true)\n return gen.var(\"props\", true);\n const props = gen.var(\"props\", (0, codegen_1._) `{}`);\n if (ps !== undefined)\n setEvaluated(gen, props, ps);\n return props;\n}\nexports.evaluatedPropsToName = evaluatedPropsToName;\nfunction setEvaluated(gen, props, ps) {\n Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._) `${props}${(0, codegen_1.getProperty)(p)}`, true));\n}\nexports.setEvaluated = setEvaluated;\nconst snippets = {};\nfunction useFunc(gen, f) {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)),\n });\n}\nexports.useFunc = useFunc;\nvar Type;\n(function (Type) {\n Type[Type[\"Num\"] = 0] = \"Num\";\n Type[Type[\"Str\"] = 1] = \"Str\";\n})(Type || (exports.Type = Type = {}));\nfunction getErrorPath(dataProp, dataPropType, jsPropertySyntax) {\n // let path\n if (dataProp instanceof codegen_1.Name) {\n const isNumber = dataPropType === Type.Num;\n return jsPropertySyntax\n ? isNumber\n ? (0, codegen_1._) `\"[\" + ${dataProp} + \"]\"`\n : (0, codegen_1._) `\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? (0, codegen_1._) `\"/\" + ${dataProp}`\n : (0, codegen_1._) `\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")`; // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp);\n}\nexports.getErrorPath = getErrorPath;\nfunction checkStrictMode(it, msg, mode = it.opts.strictSchema) {\n if (!mode)\n return;\n msg = `strict mode: ${msg}`;\n if (mode === true)\n throw new Error(msg);\n it.self.logger.warn(msg);\n}\nexports.checkStrictMode = checkStrictMode;\n//# sourceMappingURL=util.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"./codegen\");\nconst names = {\n // validation function arguments\n data: new codegen_1.Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new codegen_1.Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new codegen_1.Name(\"instancePath\"),\n parentData: new codegen_1.Name(\"parentData\"),\n parentDataProperty: new codegen_1.Name(\"parentDataProperty\"),\n rootData: new codegen_1.Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new codegen_1.Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new codegen_1.Name(\"vErrors\"), // null or array of validation errors\n errors: new codegen_1.Name(\"errors\"), // counter of validation errors\n this: new codegen_1.Name(\"this\"),\n // \"globals\"\n self: new codegen_1.Name(\"self\"),\n scope: new codegen_1.Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new codegen_1.Name(\"json\"),\n jsonPos: new codegen_1.Name(\"jsonPos\"),\n jsonLen: new codegen_1.Name(\"jsonLen\"),\n jsonPart: new codegen_1.Name(\"jsonPart\"),\n};\nexports.default = names;\n//# sourceMappingURL=names.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst util_1 = require(\"./util\");\nconst names_1 = require(\"./names\");\nexports.keywordError = {\n message: ({ keyword }) => (0, codegen_1.str) `must pass \"${keyword}\" keyword validation`,\n};\nexports.keyword$DataError = {\n message: ({ keyword, schemaType }) => schemaType\n ? (0, codegen_1.str) `\"${keyword}\" keyword must be ${schemaType} ($data)`\n : (0, codegen_1.str) `\"${keyword}\" keyword is invalid ($data)`,\n};\nfunction reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) {\n addError(gen, errObj);\n }\n else {\n returnErrors(it, (0, codegen_1._) `[${errObj}]`);\n }\n}\nexports.reportError = reportError;\nfunction reportExtraError(cxt, error = exports.keywordError, errorPaths) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n addError(gen, errObj);\n if (!(compositeRule || allErrors)) {\n returnErrors(it, names_1.default.vErrors);\n }\n}\nexports.reportExtraError = reportExtraError;\nfunction resetErrorsCount(gen, errsCount) {\n gen.assign(names_1.default.errors, errsCount);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._) `${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));\n}\nexports.resetErrorsCount = resetErrorsCount;\nfunction extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) {\n /* istanbul ignore if */\n if (errsCount === undefined)\n throw new Error(\"ajv implementation error\");\n const err = gen.name(\"err\");\n gen.forRange(\"i\", errsCount, names_1.default.errors, (i) => {\n gen.const(err, (0, codegen_1._) `${names_1.default.vErrors}[${i}]`);\n gen.if((0, codegen_1._) `${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._) `${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));\n gen.assign((0, codegen_1._) `${err}.schemaPath`, (0, codegen_1.str) `${it.errSchemaPath}/${keyword}`);\n if (it.opts.verbose) {\n gen.assign((0, codegen_1._) `${err}.schema`, schemaValue);\n gen.assign((0, codegen_1._) `${err}.data`, data);\n }\n });\n}\nexports.extendErrors = extendErrors;\nfunction addError(gen, errObj) {\n const err = gen.const(\"err\", errObj);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._) `[${err}]`), (0, codegen_1._) `${names_1.default.vErrors}.push(${err})`);\n gen.code((0, codegen_1._) `${names_1.default.errors}++`);\n}\nfunction returnErrors(it, errs) {\n const { gen, validateName, schemaEnv } = it;\n if (schemaEnv.$async) {\n gen.throw((0, codegen_1._) `new ${it.ValidationError}(${errs})`);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, errs);\n gen.return(false);\n }\n}\nconst E = {\n keyword: new codegen_1.Name(\"keyword\"),\n schemaPath: new codegen_1.Name(\"schemaPath\"), // also used in JTD errors\n params: new codegen_1.Name(\"params\"),\n propertyName: new codegen_1.Name(\"propertyName\"),\n message: new codegen_1.Name(\"message\"),\n schema: new codegen_1.Name(\"schema\"),\n parentSchema: new codegen_1.Name(\"parentSchema\"),\n};\nfunction errorObjectCode(cxt, error, errorPaths) {\n const { createErrors } = cxt.it;\n if (createErrors === false)\n return (0, codegen_1._) `{}`;\n return errorObject(cxt, error, errorPaths);\n}\nfunction errorObject(cxt, error, errorPaths = {}) {\n const { gen, it } = cxt;\n const keyValues = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ];\n extraErrorProps(cxt, error, keyValues);\n return gen.object(...keyValues);\n}\nfunction errorInstancePath({ errorPath }, { instancePath }) {\n const instPath = instancePath\n ? (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}`\n : errorPath;\n return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];\n}\nfunction errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {\n let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str) `${errSchemaPath}/${keyword}`;\n if (schemaPath) {\n schPath = (0, codegen_1.str) `${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;\n }\n return [E.schemaPath, schPath];\n}\nfunction extraErrorProps(cxt, { params, message }, keyValues) {\n const { keyword, data, schemaValue, it } = cxt;\n const { opts, propertyName, topSchemaRef, schemaPath } = it;\n keyValues.push([E.keyword, keyword], [E.params, typeof params == \"function\" ? params(cxt) : params || (0, codegen_1._) `{}`]);\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message]);\n }\n if (opts.verbose) {\n keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._) `${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);\n }\n if (propertyName)\n keyValues.push([E.propertyName, propertyName]);\n}\n//# sourceMappingURL=errors.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0;\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst boolError = {\n message: \"boolean schema is false\",\n};\nfunction topBoolOrEmptySchema(it) {\n const { gen, schema, validateName } = it;\n if (schema === false) {\n falseSchemaError(it, false);\n }\n else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(names_1.default.data);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, null);\n gen.return(true);\n }\n}\nexports.topBoolOrEmptySchema = topBoolOrEmptySchema;\nfunction boolOrEmptySchema(it, valid) {\n const { gen, schema } = it;\n if (schema === false) {\n gen.var(valid, false); // TODO var\n falseSchemaError(it);\n }\n else {\n gen.var(valid, true); // TODO var\n }\n}\nexports.boolOrEmptySchema = boolOrEmptySchema;\nfunction falseSchemaError(it, overrideAllErrors) {\n const { gen, data } = it;\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n };\n (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors);\n}\n//# sourceMappingURL=boolSchema.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRules = exports.isJSONType = void 0;\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"];\nconst jsonTypes = new Set(_jsonTypes);\nfunction isJSONType(x) {\n return typeof x == \"string\" && jsonTypes.has(x);\n}\nexports.isJSONType = isJSONType;\nfunction getRules() {\n const groups = {\n number: { type: \"number\", rules: [] },\n string: { type: \"string\", rules: [] },\n array: { type: \"array\", rules: [] },\n object: { type: \"object\", rules: [] },\n };\n return {\n types: { ...groups, integer: true, boolean: true, null: true },\n rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object],\n post: { rules: [] },\n all: {},\n keywords: {},\n };\n}\nexports.getRules = getRules;\n//# sourceMappingURL=rules.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0;\nfunction schemaHasRulesForType({ schema, self }, type) {\n const group = self.RULES.types[type];\n return group && group !== true && shouldUseGroup(schema, group);\n}\nexports.schemaHasRulesForType = schemaHasRulesForType;\nfunction shouldUseGroup(schema, group) {\n return group.rules.some((rule) => shouldUseRule(schema, rule));\n}\nexports.shouldUseGroup = shouldUseGroup;\nfunction shouldUseRule(schema, rule) {\n var _a;\n return (schema[rule.keyword] !== undefined ||\n ((_a = rule.definition.implements) === null || _a === void 0 ? void 0 : _a.some((kwd) => schema[kwd] !== undefined)));\n}\nexports.shouldUseRule = shouldUseRule;\n//# sourceMappingURL=applicability.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0;\nconst rules_1 = require(\"../rules\");\nconst applicability_1 = require(\"./applicability\");\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nvar DataType;\n(function (DataType) {\n DataType[DataType[\"Correct\"] = 0] = \"Correct\";\n DataType[DataType[\"Wrong\"] = 1] = \"Wrong\";\n})(DataType || (exports.DataType = DataType = {}));\nfunction getSchemaTypes(schema) {\n const types = getJSONTypes(schema.type);\n const hasNull = types.includes(\"null\");\n if (hasNull) {\n if (schema.nullable === false)\n throw new Error(\"type: null contradicts nullable: false\");\n }\n else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"');\n }\n if (schema.nullable === true)\n types.push(\"null\");\n }\n return types;\n}\nexports.getSchemaTypes = getSchemaTypes;\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction getJSONTypes(ts) {\n const types = Array.isArray(ts) ? ts : ts ? [ts] : [];\n if (types.every(rules_1.isJSONType))\n return types;\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"));\n}\nexports.getJSONTypes = getJSONTypes;\nfunction coerceAndCheckDataType(it, types) {\n const { gen, data, opts } = it;\n const coerceTo = coerceToTypes(types, opts.coerceTypes);\n const checkTypes = types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0]));\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong);\n gen.if(wrongType, () => {\n if (coerceTo.length)\n coerceData(it, types, coerceTo);\n else\n reportTypeError(it);\n });\n }\n return checkTypes;\n}\nexports.coerceAndCheckDataType = coerceAndCheckDataType;\nconst COERCIBLE = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"]);\nfunction coerceToTypes(types, coerceTypes) {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : [];\n}\nfunction coerceData(it, types, coerceTo) {\n const { gen, data, opts } = it;\n const dataType = gen.let(\"dataType\", (0, codegen_1._) `typeof ${data}`);\n const coerced = gen.let(\"coerced\", (0, codegen_1._) `undefined`);\n if (opts.coerceTypes === \"array\") {\n gen.if((0, codegen_1._) `${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen\n .assign(data, (0, codegen_1._) `${data}[0]`)\n .assign(dataType, (0, codegen_1._) `typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data)));\n }\n gen.if((0, codegen_1._) `${coerced} !== undefined`);\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t);\n }\n }\n gen.else();\n reportTypeError(it);\n gen.endIf();\n gen.if((0, codegen_1._) `${coerced} !== undefined`, () => {\n gen.assign(data, coerced);\n assignParentData(it, coerced);\n });\n function coerceSpecificType(t) {\n switch (t) {\n case \"string\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, (0, codegen_1._) `\"\" + ${data}`)\n .elseIf((0, codegen_1._) `${data} === null`)\n .assign(coerced, (0, codegen_1._) `\"\"`);\n return;\n case \"number\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"integer\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"boolean\":\n gen\n .elseIf((0, codegen_1._) `${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf((0, codegen_1._) `${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true);\n return;\n case \"null\":\n gen.elseIf((0, codegen_1._) `${data} === \"\" || ${data} === 0 || ${data} === false`);\n gen.assign(coerced, null);\n return;\n case \"array\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`)\n .assign(coerced, (0, codegen_1._) `[${data}]`);\n }\n }\n}\nfunction assignParentData({ gen, parentData, parentDataProperty }, expr) {\n // TODO use gen.property\n gen.if((0, codegen_1._) `${parentData} !== undefined`, () => gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, expr));\n}\nfunction checkDataType(dataType, data, strictNums, correct = DataType.Correct) {\n const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ;\n let cond;\n switch (dataType) {\n case \"null\":\n return (0, codegen_1._) `${data} ${EQ} null`;\n case \"array\":\n cond = (0, codegen_1._) `Array.isArray(${data})`;\n break;\n case \"object\":\n cond = (0, codegen_1._) `${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`;\n break;\n case \"integer\":\n cond = numCond((0, codegen_1._) `!(${data} % 1) && !isNaN(${data})`);\n break;\n case \"number\":\n cond = numCond();\n break;\n default:\n return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`;\n }\n return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond);\n function numCond(_cond = codegen_1.nil) {\n return (0, codegen_1.and)((0, codegen_1._) `typeof ${data} == \"number\"`, _cond, strictNums ? (0, codegen_1._) `isFinite(${data})` : codegen_1.nil);\n }\n}\nexports.checkDataType = checkDataType;\nfunction checkDataTypes(dataTypes, data, strictNums, correct) {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct);\n }\n let cond;\n const types = (0, util_1.toHash)(dataTypes);\n if (types.array && types.object) {\n const notObj = (0, codegen_1._) `typeof ${data} != \"object\"`;\n cond = types.null ? notObj : (0, codegen_1._) `!${data} || ${notObj}`;\n delete types.null;\n delete types.array;\n delete types.object;\n }\n else {\n cond = codegen_1.nil;\n }\n if (types.number)\n delete types.integer;\n for (const t in types)\n cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct));\n return cond;\n}\nexports.checkDataTypes = checkDataTypes;\nconst typeError = {\n message: ({ schema }) => `must be ${schema}`,\n params: ({ schema, schemaValue }) => typeof schema == \"string\" ? (0, codegen_1._) `{type: ${schema}}` : (0, codegen_1._) `{type: ${schemaValue}}`,\n};\nfunction reportTypeError(it) {\n const cxt = getTypeErrorContext(it);\n (0, errors_1.reportError)(cxt, typeError);\n}\nexports.reportTypeError = reportTypeError;\nfunction getTypeErrorContext(it) {\n const { gen, data, schema } = it;\n const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, \"type\");\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n };\n}\n//# sourceMappingURL=dataType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assignDefaults = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction assignDefaults(it, ty) {\n const { properties, items } = it.schema;\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default);\n }\n }\n else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i) => assignDefault(it, i, sch.default));\n }\n}\nexports.assignDefaults = assignDefaults;\nfunction assignDefault(it, prop, defaultValue) {\n const { gen, compositeRule, data, opts } = it;\n if (defaultValue === undefined)\n return;\n const childData = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(prop)}`;\n if (compositeRule) {\n (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`);\n return;\n }\n let condition = (0, codegen_1._) `${childData} === undefined`;\n if (opts.useDefaults === \"empty\") {\n condition = (0, codegen_1._) `${condition} || ${childData} === null || ${childData} === \"\"`;\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, (0, codegen_1._) `${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);\n}\n//# sourceMappingURL=defaults.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;\nconst codegen_1 = require(\"../compile/codegen\");\nconst util_1 = require(\"../compile/util\");\nconst names_1 = require(\"../compile/names\");\nconst util_2 = require(\"../compile/util\");\nfunction checkReportMissingProp(cxt, prop) {\n const { gen, data, it } = cxt;\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({ missingProperty: (0, codegen_1._) `${prop}` }, true);\n cxt.error();\n });\n}\nexports.checkReportMissingProp = checkReportMissingProp;\nfunction checkMissingProp({ gen, data, it: { opts } }, properties, missing) {\n return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._) `${missing} = ${prop}`)));\n}\nexports.checkMissingProp = checkMissingProp;\nfunction reportMissingProp(cxt, missing) {\n cxt.setParams({ missingProperty: missing }, true);\n cxt.error();\n}\nexports.reportMissingProp = reportMissingProp;\nfunction hasPropFunc(gen) {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: (0, codegen_1._) `Object.prototype.hasOwnProperty`,\n });\n}\nexports.hasPropFunc = hasPropFunc;\nfunction isOwnProperty(gen, data, property) {\n return (0, codegen_1._) `${hasPropFunc(gen)}.call(${data}, ${property})`;\n}\nexports.isOwnProperty = isOwnProperty;\nfunction propertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} !== undefined`;\n return ownProperties ? (0, codegen_1._) `${cond} && ${isOwnProperty(gen, data, property)}` : cond;\n}\nexports.propertyInData = propertyInData;\nfunction noPropertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} === undefined`;\n return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond;\n}\nexports.noPropertyInData = noPropertyInData;\nfunction allSchemaProperties(schemaMap) {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : [];\n}\nexports.allSchemaProperties = allSchemaProperties;\nfunction schemaProperties(it, schemaMap) {\n return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));\n}\nexports.schemaProperties = schemaProperties;\nfunction callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {\n const dataAndSchema = passSchema ? (0, codegen_1._) `${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;\n const valCxt = [\n [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],\n [names_1.default.parentData, it.parentData],\n [names_1.default.parentDataProperty, it.parentDataProperty],\n [names_1.default.rootData, names_1.default.rootData],\n ];\n if (it.opts.dynamicRef)\n valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);\n const args = (0, codegen_1._) `${dataAndSchema}, ${gen.object(...valCxt)}`;\n return context !== codegen_1.nil ? (0, codegen_1._) `${func}.call(${context}, ${args})` : (0, codegen_1._) `${func}(${args})`;\n}\nexports.callValidateCode = callValidateCode;\nconst newRegExp = (0, codegen_1._) `new RegExp`;\nfunction usePattern({ gen, it: { opts } }, pattern) {\n const u = opts.unicodeRegExp ? \"u\" : \"\";\n const { regExp } = opts.code;\n const rx = regExp(pattern, u);\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: (0, codegen_1._) `${regExp.code === \"new RegExp\" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`,\n });\n}\nexports.usePattern = usePattern;\nfunction validateArray(cxt) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true);\n validateItems(() => gen.assign(validArr, false));\n return validArr;\n }\n gen.var(valid, true);\n validateItems(() => gen.break());\n return valid;\n function validateItems(notValid) {\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword,\n dataProp: i,\n dataPropType: util_1.Type.Num,\n }, valid);\n gen.if((0, codegen_1.not)(valid), notValid);\n });\n }\n}\nexports.validateArray = validateArray;\nfunction validateUnion(cxt) {\n const { gen, schema, keyword, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch));\n if (alwaysValid && !it.opts.unevaluated)\n return;\n const valid = gen.let(\"valid\", false);\n const schValid = gen.name(\"_valid\");\n gen.block(() => schema.forEach((_sch, i) => {\n const schCxt = cxt.subschema({\n keyword,\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n gen.assign(valid, (0, codegen_1._) `${valid} || ${schValid}`);\n const merged = cxt.mergeValidEvaluated(schCxt, schValid);\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged)\n gen.if((0, codegen_1.not)(valid));\n }));\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n}\nexports.validateUnion = validateUnion;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst code_1 = require(\"../../vocabularies/code\");\nconst errors_1 = require(\"../errors\");\nfunction macroKeywordCode(cxt, def) {\n const { gen, keyword, schema, parentSchema, it } = cxt;\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it);\n const schemaRef = useKeyword(gen, keyword, macroSchema);\n if (it.opts.validateSchema !== false)\n it.self.validateSchema(macroSchema, true);\n const valid = gen.name(\"valid\");\n cxt.subschema({\n schema: macroSchema,\n schemaPath: codegen_1.nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n }, valid);\n cxt.pass(valid, () => cxt.error(true));\n}\nexports.macroKeywordCode = macroKeywordCode;\nfunction funcKeywordCode(cxt, def) {\n var _a;\n const { gen, keyword, schema, parentSchema, $data, it } = cxt;\n checkAsyncKeyword(it, def);\n const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate;\n const validateRef = useKeyword(gen, keyword, validate);\n const valid = gen.let(\"valid\");\n cxt.block$data(valid, validateKeyword);\n cxt.ok((_a = def.valid) !== null && _a !== void 0 ? _a : valid);\n function validateKeyword() {\n if (def.errors === false) {\n assignValid();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => cxt.error());\n }\n else {\n const ruleErrs = def.async ? validateAsync() : validateSync();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => addErrs(cxt, ruleErrs));\n }\n }\n function validateAsync() {\n const ruleErrs = gen.let(\"ruleErrs\", null);\n gen.try(() => assignValid((0, codegen_1._) `await `), (e) => gen.assign(valid, false).if((0, codegen_1._) `${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._) `${e}.errors`), () => gen.throw(e)));\n return ruleErrs;\n }\n function validateSync() {\n const validateErrs = (0, codegen_1._) `${validateRef}.errors`;\n gen.assign(validateErrs, null);\n assignValid(codegen_1.nil);\n return validateErrs;\n }\n function assignValid(_await = def.async ? (0, codegen_1._) `await ` : codegen_1.nil) {\n const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self;\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false);\n gen.assign(valid, (0, codegen_1._) `${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying);\n }\n function reportErrs(errors) {\n var _a;\n gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== void 0 ? _a : valid), errors);\n }\n}\nexports.funcKeywordCode = funcKeywordCode;\nfunction modifyData(cxt) {\n const { gen, data, it } = cxt;\n gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._) `${it.parentData}[${it.parentDataProperty}]`));\n}\nfunction addErrs(cxt, errs) {\n const { gen } = cxt;\n gen.if((0, codegen_1._) `Array.isArray(${errs})`, () => {\n gen\n .assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`)\n .assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n (0, errors_1.extendErrors)(cxt);\n }, () => cxt.error());\n}\nfunction checkAsyncKeyword({ schemaEnv }, def) {\n if (def.async && !schemaEnv.$async)\n throw new Error(\"async keyword in sync schema\");\n}\nfunction useKeyword(gen, keyword, result) {\n if (result === undefined)\n throw new Error(`keyword \"${keyword}\" failed to compile`);\n return gen.scopeValue(\"keyword\", typeof result == \"function\" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) });\n}\nfunction validSchemaType(schema, schemaType, allowUndefined = false) {\n // TODO add tests\n return (!schemaType.length ||\n schemaType.some((st) => st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")));\n}\nexports.validSchemaType = validSchemaType;\nfunction validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\");\n }\n const deps = def.dependencies;\n if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`);\n }\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword]);\n if (!valid) {\n const msg = `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors);\n if (opts.validateSchema === \"log\")\n self.logger.error(msg);\n else\n throw new Error(msg);\n }\n }\n}\nexports.validateKeywordUsage = validateKeywordUsage;\n//# sourceMappingURL=keyword.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed');\n }\n if (keyword !== undefined) {\n const sch = it.schema[keyword];\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`,\n };\n }\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"');\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n };\n }\n throw new Error('either \"keyword\" or \"schema\" must be passed');\n}\nexports.getSubschema = getSubschema;\nfunction extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed');\n }\n const { gen } = it;\n if (dataProp !== undefined) {\n const { errorPath, dataPathArr, opts } = it;\n const nextData = gen.let(\"data\", (0, codegen_1._) `${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true);\n dataContextProps(nextData);\n subschema.errorPath = (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`;\n subschema.parentDataProperty = (0, codegen_1._) `${dataProp}`;\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty];\n }\n if (data !== undefined) {\n const nextData = data instanceof codegen_1.Name ? data : gen.let(\"data\", data, true); // replaceable if used once?\n dataContextProps(nextData);\n if (propertyName !== undefined)\n subschema.propertyName = propertyName;\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n if (dataTypes)\n subschema.dataTypes = dataTypes;\n function dataContextProps(_nextData) {\n subschema.data = _nextData;\n subschema.dataLevel = it.dataLevel + 1;\n subschema.dataTypes = [];\n it.definedProperties = new Set();\n subschema.parentData = it.data;\n subschema.dataNames = [...it.dataNames, _nextData];\n }\n}\nexports.extendSubschemaData = extendSubschemaData;\nfunction extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) {\n if (compositeRule !== undefined)\n subschema.compositeRule = compositeRule;\n if (createErrors !== undefined)\n subschema.createErrors = createErrors;\n if (allErrors !== undefined)\n subschema.allErrors = allErrors;\n subschema.jtdDiscriminator = jtdDiscriminator; // not inherited\n subschema.jtdMetadata = jtdMetadata; // not inherited\n}\nexports.extendSubschemaMode = extendSubschemaMode;\n//# sourceMappingURL=subschema.js.map","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i<sch.length; i++)\n _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n }\n } else if (key in traverse.propsKeywords) {\n if (sch && typeof sch == 'object') {\n for (var prop in sch)\n _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n }\n } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n }\n }\n post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n }\n}\n\n\nfunction escapeJsonPtr(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = void 0;\nconst util_1 = require(\"./util\");\nconst equal = require(\"fast-deep-equal\");\nconst traverse = require(\"json-schema-traverse\");\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n \"type\",\n \"format\",\n \"pattern\",\n \"maxLength\",\n \"minLength\",\n \"maxProperties\",\n \"minProperties\",\n \"maxItems\",\n \"minItems\",\n \"maximum\",\n \"minimum\",\n \"uniqueItems\",\n \"multipleOf\",\n \"required\",\n \"enum\",\n \"const\",\n]);\nfunction inlineRef(schema, limit = true) {\n if (typeof schema == \"boolean\")\n return true;\n if (limit === true)\n return !hasRef(schema);\n if (!limit)\n return false;\n return countKeys(schema) <= limit;\n}\nexports.inlineRef = inlineRef;\nconst REF_KEYWORDS = new Set([\n \"$ref\",\n \"$recursiveRef\",\n \"$recursiveAnchor\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n]);\nfunction hasRef(schema) {\n for (const key in schema) {\n if (REF_KEYWORDS.has(key))\n return true;\n const sch = schema[key];\n if (Array.isArray(sch) && sch.some(hasRef))\n return true;\n if (typeof sch == \"object\" && hasRef(sch))\n return true;\n }\n return false;\n}\nfunction countKeys(schema) {\n let count = 0;\n for (const key in schema) {\n if (key === \"$ref\")\n return Infinity;\n count++;\n if (SIMPLE_INLINED.has(key))\n continue;\n if (typeof schema[key] == \"object\") {\n (0, util_1.eachItem)(schema[key], (sch) => (count += countKeys(sch)));\n }\n if (count === Infinity)\n return Infinity;\n }\n return count;\n}\nfunction getFullPath(resolver, id = \"\", normalize) {\n if (normalize !== false)\n id = normalizeId(id);\n const p = resolver.parse(id);\n return _getFullPath(resolver, p);\n}\nexports.getFullPath = getFullPath;\nfunction _getFullPath(resolver, p) {\n const serialized = resolver.serialize(p);\n return serialized.split(\"#\")[0] + \"#\";\n}\nexports._getFullPath = _getFullPath;\nconst TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\";\n}\nexports.normalizeId = normalizeId;\nfunction resolveUrl(resolver, baseId, id) {\n id = normalizeId(id);\n return resolver.resolve(baseId, id);\n}\nexports.resolveUrl = resolveUrl;\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i;\nfunction getSchemaRefs(schema, baseId) {\n if (typeof schema == \"boolean\")\n return {};\n const { schemaId, uriResolver } = this.opts;\n const schId = normalizeId(schema[schemaId] || baseId);\n const baseIds = { \"\": schId };\n const pathPrefix = getFullPath(uriResolver, schId, false);\n const localRefs = {};\n const schemaRefs = new Set();\n traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined)\n return;\n const fullPath = pathPrefix + jsonPtr;\n let innerBaseId = baseIds[parentJsonPtr];\n if (typeof sch[schemaId] == \"string\")\n innerBaseId = addRef.call(this, sch[schemaId]);\n addAnchor.call(this, sch.$anchor);\n addAnchor.call(this, sch.$dynamicAnchor);\n baseIds[jsonPtr] = innerBaseId;\n function addRef(ref) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve;\n ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref);\n if (schemaRefs.has(ref))\n throw ambiguos(ref);\n schemaRefs.add(ref);\n let schOrRef = this.refs[ref];\n if (typeof schOrRef == \"string\")\n schOrRef = this.refs[schOrRef];\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref);\n }\n else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref);\n localRefs[ref] = sch;\n }\n else {\n this.refs[ref] = fullPath;\n }\n }\n return ref;\n }\n function addAnchor(anchor) {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor))\n throw new Error(`invalid anchor \"${anchor}\"`);\n addRef.call(this, `#${anchor}`);\n }\n }\n });\n return localRefs;\n function checkAmbiguosRef(sch1, sch2, ref) {\n if (sch2 !== undefined && !equal(sch1, sch2))\n throw ambiguos(ref);\n }\n function ambiguos(ref) {\n return new Error(`reference \"${ref}\" resolves to more than one schema`);\n }\n}\nexports.getSchemaRefs = getSchemaRefs;\n//# sourceMappingURL=resolve.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0;\nconst boolSchema_1 = require(\"./boolSchema\");\nconst dataType_1 = require(\"./dataType\");\nconst applicability_1 = require(\"./applicability\");\nconst dataType_2 = require(\"./dataType\");\nconst defaults_1 = require(\"./defaults\");\nconst keyword_1 = require(\"./keyword\");\nconst subschema_1 = require(\"./subschema\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst resolve_1 = require(\"../resolve\");\nconst util_1 = require(\"../util\");\nconst errors_1 = require(\"../errors\");\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nfunction validateFunctionCode(it) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it);\n return;\n }\n }\n validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it));\n}\nexports.validateFunctionCode = validateFunctionCode;\nfunction validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) {\n if (opts.code.es5) {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => {\n gen.code((0, codegen_1._) `\"use strict\"; ${funcSourceUrl(schema, opts)}`);\n destructureValCxtES5(gen, opts);\n gen.code(body);\n });\n }\n else {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body));\n }\n}\nfunction destructureValCxt(opts) {\n return (0, codegen_1._) `{${names_1.default.instancePath}=\"\", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._) `, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`;\n}\nfunction destructureValCxtES5(gen, opts) {\n gen.if(names_1.default.valCxt, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.instancePath}`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentData}`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);\n gen.var(names_1.default.rootData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.rootData}`);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`);\n }, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `\"\"`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.rootData, names_1.default.data);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `{}`);\n });\n}\nfunction topSchemaObjCode(it) {\n const { schema, opts, gen } = it;\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n checkNoDefault(it);\n gen.let(names_1.default.vErrors, null);\n gen.let(names_1.default.errors, 0);\n if (opts.unevaluated)\n resetEvaluated(it);\n typeAndKeywords(it);\n returnResults(it);\n });\n return;\n}\nfunction resetEvaluated(it) {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const { gen, validateName } = it;\n it.evaluated = gen.const(\"evaluated\", (0, codegen_1._) `${validateName}.evaluated`);\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._) `${it.evaluated}.props`, (0, codegen_1._) `undefined`));\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._) `${it.evaluated}.items`, (0, codegen_1._) `undefined`));\n}\nfunction funcSourceUrl(schema, opts) {\n const schId = typeof schema == \"object\" && schema[opts.schemaId];\n return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._) `/*# sourceURL=${schId} */` : codegen_1.nil;\n}\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it, valid) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid);\n return;\n }\n }\n (0, boolSchema_1.boolOrEmptySchema)(it, valid);\n}\nfunction schemaCxtHasRules({ schema, self }) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (self.RULES.all[key])\n return true;\n return false;\n}\nfunction isSchemaObj(it) {\n return typeof it.schema != \"boolean\";\n}\nfunction subSchemaObjCode(it, valid) {\n const { schema, gen, opts } = it;\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n updateContext(it);\n checkAsyncSchema(it);\n const errsCount = gen.const(\"_errs\", names_1.default.errors);\n typeAndKeywords(it, errsCount);\n // TODO var\n gen.var(valid, (0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n}\nfunction checkKeywords(it) {\n (0, util_1.checkUnknownRules)(it);\n checkRefsAndKeywords(it);\n}\nfunction typeAndKeywords(it, errsCount) {\n if (it.opts.jtd)\n return schemaKeywords(it, [], false, errsCount);\n const types = (0, dataType_1.getSchemaTypes)(it.schema);\n const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types);\n schemaKeywords(it, types, !checkedTypes, errsCount);\n}\nfunction checkRefsAndKeywords(it) {\n const { schema, errSchemaPath, opts, self } = it;\n if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`);\n }\n}\nfunction checkNoDefault(it) {\n const { schema, opts } = it;\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n (0, util_1.checkStrictMode)(it, \"default is ignored in the schema root\");\n }\n}\nfunction updateContext(it) {\n const schId = it.schema[it.opts.schemaId];\n if (schId)\n it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId);\n}\nfunction checkAsyncSchema(it) {\n if (it.schema.$async && !it.schemaEnv.$async)\n throw new Error(\"async schema in sync schema\");\n}\nfunction commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) {\n const msg = schema.$comment;\n if (opts.$comment === true) {\n gen.code((0, codegen_1._) `${names_1.default.self}.logger.log(${msg})`);\n }\n else if (typeof opts.$comment == \"function\") {\n const schemaPath = (0, codegen_1.str) `${errSchemaPath}/$comment`;\n const rootName = gen.scopeValue(\"root\", { ref: schemaEnv.root });\n gen.code((0, codegen_1._) `${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`);\n }\n}\nfunction returnResults(it) {\n const { gen, schemaEnv, validateName, ValidationError, opts } = it;\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if((0, codegen_1._) `${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._) `new ${ValidationError}(${names_1.default.vErrors})`));\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, names_1.default.vErrors);\n if (opts.unevaluated)\n assignEvaluated(it);\n gen.return((0, codegen_1._) `${names_1.default.errors} === 0`);\n }\n}\nfunction assignEvaluated({ gen, evaluated, props, items }) {\n if (props instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.props`, props);\n if (items instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.items`, items);\n}\nfunction schemaKeywords(it, types, typeErrors, errsCount) {\n const { gen, schema, data, allErrors, opts, self } = it;\n const { RULES } = self;\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", RULES.all.$ref.definition)); // TODO typecast\n return;\n }\n if (!opts.jtd)\n checkStrictTypes(it, types);\n gen.block(() => {\n for (const group of RULES.rules)\n groupKeywords(group);\n groupKeywords(RULES.post);\n });\n function groupKeywords(group) {\n if (!(0, applicability_1.shouldUseGroup)(schema, group))\n return;\n if (group.type) {\n gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers));\n iterateKeywords(it, group);\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else();\n (0, dataType_2.reportTypeError)(it);\n }\n gen.endIf();\n }\n else {\n iterateKeywords(it, group);\n }\n // TODO make it \"ok\" call?\n if (!allErrors)\n gen.if((0, codegen_1._) `${names_1.default.errors} === ${errsCount || 0}`);\n }\n}\nfunction iterateKeywords(it, group) {\n const { gen, schema, opts: { useDefaults }, } = it;\n if (useDefaults)\n (0, defaults_1.assignDefaults)(it, group.type);\n gen.block(() => {\n for (const rule of group.rules) {\n if ((0, applicability_1.shouldUseRule)(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type);\n }\n }\n });\n}\nfunction checkStrictTypes(it, types) {\n if (it.schemaEnv.meta || !it.opts.strictTypes)\n return;\n checkContextTypes(it, types);\n if (!it.opts.allowUnionTypes)\n checkMultipleTypes(it, types);\n checkKeywordTypes(it, it.dataTypes);\n}\nfunction checkContextTypes(it, types) {\n if (!types.length)\n return;\n if (!it.dataTypes.length) {\n it.dataTypes = types;\n return;\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`);\n }\n });\n narrowSchemaTypes(it, types);\n}\nfunction checkMultipleTypes(it, ts) {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\");\n }\n}\nfunction checkKeywordTypes(it, ts) {\n const rules = it.self.RULES.all;\n for (const keyword in rules) {\n const rule = rules[keyword];\n if (typeof rule == \"object\" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {\n const { type } = rule.definition;\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`);\n }\n }\n }\n}\nfunction hasApplicableType(schTs, kwdT) {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"));\n}\nfunction includesType(ts, t) {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"));\n}\nfunction narrowSchemaTypes(it, withTypes) {\n const ts = [];\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t))\n ts.push(t);\n else if (withTypes.includes(\"integer\") && t === \"number\")\n ts.push(\"integer\");\n }\n it.dataTypes = ts;\n}\nfunction strictTypesError(it, msg) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n msg += ` at \"${schemaPath}\" (strictTypes)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes);\n}\nclass KeywordCxt {\n constructor(it, def, keyword) {\n (0, keyword_1.validateKeywordUsage)(it, def, keyword);\n this.gen = it.gen;\n this.allErrors = it.allErrors;\n this.keyword = keyword;\n this.data = it.data;\n this.schema = it.schema[keyword];\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data;\n this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data);\n this.schemaType = def.schemaType;\n this.parentSchema = it.schema;\n this.params = {};\n this.it = it;\n this.def = def;\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it));\n }\n else {\n this.schemaCode = this.schemaValue;\n if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`);\n }\n }\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", names_1.default.errors);\n }\n }\n result(condition, successAction, failAction) {\n this.failResult((0, codegen_1.not)(condition), successAction, failAction);\n }\n failResult(condition, successAction, failAction) {\n this.gen.if(condition);\n if (failAction)\n failAction();\n else\n this.error();\n if (successAction) {\n this.gen.else();\n successAction();\n if (this.allErrors)\n this.gen.endIf();\n }\n else {\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n }\n pass(condition, failAction) {\n this.failResult((0, codegen_1.not)(condition), undefined, failAction);\n }\n fail(condition) {\n if (condition === undefined) {\n this.error();\n if (!this.allErrors)\n this.gen.if(false); // this branch will be removed by gen.optimize\n return;\n }\n this.gen.if(condition);\n this.error();\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n fail$data(condition) {\n if (!this.$data)\n return this.fail(condition);\n const { schemaCode } = this;\n this.fail((0, codegen_1._) `${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`);\n }\n error(append, errorParams, errorPaths) {\n if (errorParams) {\n this.setParams(errorParams);\n this._error(append, errorPaths);\n this.setParams({});\n return;\n }\n this._error(append, errorPaths);\n }\n _error(append, errorPaths) {\n ;\n (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths);\n }\n $dataError() {\n (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError);\n }\n reset() {\n if (this.errsCount === undefined)\n throw new Error('add \"trackErrors\" to keyword definition');\n (0, errors_1.resetErrorsCount)(this.gen, this.errsCount);\n }\n ok(cond) {\n if (!this.allErrors)\n this.gen.if(cond);\n }\n setParams(obj, assign) {\n if (assign)\n Object.assign(this.params, obj);\n else\n this.params = obj;\n }\n block$data(valid, codeBlock, $dataValid = codegen_1.nil) {\n this.gen.block(() => {\n this.check$data(valid, $dataValid);\n codeBlock();\n });\n }\n check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) {\n if (!this.$data)\n return;\n const { gen, schemaCode, schemaType, def } = this;\n gen.if((0, codegen_1.or)((0, codegen_1._) `${schemaCode} === undefined`, $dataValid));\n if (valid !== codegen_1.nil)\n gen.assign(valid, true);\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data());\n this.$dataError();\n if (valid !== codegen_1.nil)\n gen.assign(valid, false);\n }\n gen.else();\n }\n invalid$data() {\n const { gen, schemaCode, schemaType, def, it } = this;\n return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema());\n function wrong$DataType() {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof codegen_1.Name))\n throw new Error(\"ajv implementation error\");\n const st = Array.isArray(schemaType) ? schemaType : [schemaType];\n return (0, codegen_1._) `${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`;\n }\n return codegen_1.nil;\n }\n function invalid$DataSchema() {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", { ref: def.validateSchema }); // TODO value.code for standalone\n return (0, codegen_1._) `!${validateSchemaRef}(${schemaCode})`;\n }\n return codegen_1.nil;\n }\n }\n subschema(appl, valid) {\n const subschema = (0, subschema_1.getSubschema)(this.it, appl);\n (0, subschema_1.extendSubschemaData)(subschema, this.it, appl);\n (0, subschema_1.extendSubschemaMode)(subschema, appl);\n const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined };\n subschemaCode(nextContext, valid);\n return nextContext;\n }\n mergeEvaluated(schemaCxt, toName) {\n const { it, gen } = this;\n if (!it.opts.unevaluated)\n return;\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName);\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName);\n }\n }\n mergeValidEvaluated(schemaCxt, valid) {\n const { it, gen } = this;\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name));\n return true;\n }\n }\n}\nexports.KeywordCxt = KeywordCxt;\nfunction keywordCode(it, keyword, def, ruleType) {\n const cxt = new KeywordCxt(it, def, keyword);\n if (\"code\" in def) {\n def.code(cxt, ruleType);\n }\n else if (cxt.$data && def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n else if (\"macro\" in def) {\n (0, keyword_1.macroKeywordCode)(cxt, def);\n }\n else if (def.compile || def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n}\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, { dataLevel, dataNames, dataPathArr }) {\n let jsonPointer;\n let data;\n if ($data === \"\")\n return names_1.default.rootData;\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data))\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n jsonPointer = $data;\n data = names_1.default.rootData;\n }\n else {\n const matches = RELATIVE_JSON_POINTER.exec($data);\n if (!matches)\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n const up = +matches[1];\n jsonPointer = matches[2];\n if (jsonPointer === \"#\") {\n if (up >= dataLevel)\n throw new Error(errorMsg(\"property/index\", up));\n return dataPathArr[dataLevel - up];\n }\n if (up > dataLevel)\n throw new Error(errorMsg(\"data\", up));\n data = dataNames[dataLevel - up];\n if (!jsonPointer)\n return data;\n }\n let expr = data;\n const segments = jsonPointer.split(\"/\");\n for (const segment of segments) {\n if (segment) {\n data = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`;\n expr = (0, codegen_1._) `${expr} && ${data}`;\n }\n }\n return expr;\n function errorMsg(pointerType, up) {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`;\n }\n}\nexports.getData = getData;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ValidationError extends Error {\n constructor(errors) {\n super(\"validation failed\");\n this.errors = errors;\n this.ajv = this.validation = true;\n }\n}\nexports.default = ValidationError;\n//# sourceMappingURL=validation_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst resolve_1 = require(\"./resolve\");\nclass MissingRefError extends Error {\n constructor(resolver, baseId, ref, msg) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`);\n this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref);\n this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef));\n }\n}\nexports.default = MissingRefError;\n//# sourceMappingURL=ref_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst validation_error_1 = require(\"../runtime/validation_error\");\nconst names_1 = require(\"./names\");\nconst resolve_1 = require(\"./resolve\");\nconst util_1 = require(\"./util\");\nconst validate_1 = require(\"./validate\");\nclass SchemaEnv {\n constructor(env) {\n var _a;\n this.refs = {};\n this.dynamicAnchors = {};\n let schema;\n if (typeof env.schema == \"object\")\n schema = env.schema;\n this.schema = env.schema;\n this.schemaId = env.schemaId;\n this.root = env.root || this;\n this.baseId = (_a = env.baseId) !== null && _a !== void 0 ? _a : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || \"$id\"]);\n this.schemaPath = env.schemaPath;\n this.localRefs = env.localRefs;\n this.meta = env.meta;\n this.$async = schema === null || schema === void 0 ? void 0 : schema.$async;\n this.refs = {};\n }\n}\nexports.SchemaEnv = SchemaEnv;\n// let codeSize = 0\n// let nodeCount = 0\n// Compiles schema in SchemaEnv\nfunction compileSchema(sch) {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch);\n if (_sch)\n return _sch;\n const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); // TODO if getFullPath removed 1 tests fails\n const { es5, lines } = this.opts.code;\n const { ownProperties } = this.opts;\n const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n let _ValidationError;\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: validation_error_1.default,\n code: (0, codegen_1._) `require(\"ajv/dist/runtime/validation_error\").default`,\n });\n }\n const validateName = gen.scopeName(\"validate\");\n sch.validateName = validateName;\n const schemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: names_1.default.data,\n parentData: names_1.default.parentData,\n parentDataProperty: names_1.default.parentDataProperty,\n dataNames: [names_1.default.data],\n dataPathArr: [codegen_1.nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set(),\n topSchemaRef: gen.scopeValue(\"schema\", this.opts.code.source === true\n ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) }\n : { ref: sch.schema }),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: codegen_1.nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: (0, codegen_1._) `\"\"`,\n opts: this.opts,\n self: this,\n };\n let sourceCode;\n try {\n this._compilations.add(sch);\n (0, validate_1.validateFunctionCode)(schemaCxt);\n gen.optimize(this.opts.code.optimize);\n // gen.optimize(1)\n const validateCode = gen.toString();\n sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process)\n sourceCode = this.opts.code.process(sourceCode, sch);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);\n const validate = makeValidate(this, this.scope.get());\n this.scope.value(validateName, { ref: validate });\n validate.errors = null;\n validate.schema = sch.schema;\n validate.schemaEnv = sch;\n if (sch.$async)\n validate.$async = true;\n if (this.opts.code.source === true) {\n validate.source = { validateName, validateCode, scopeValues: gen._values };\n }\n if (this.opts.unevaluated) {\n const { props, items } = schemaCxt;\n validate.evaluated = {\n props: props instanceof codegen_1.Name ? undefined : props,\n items: items instanceof codegen_1.Name ? undefined : items,\n dynamicProps: props instanceof codegen_1.Name,\n dynamicItems: items instanceof codegen_1.Name,\n };\n if (validate.source)\n validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated);\n }\n sch.validate = validate;\n return sch;\n }\n catch (e) {\n delete sch.validate;\n delete sch.validateName;\n if (sourceCode)\n this.logger.error(\"Error compiling schema, function code:\", sourceCode);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e;\n }\n finally {\n this._compilations.delete(sch);\n }\n}\nexports.compileSchema = compileSchema;\nfunction resolveRef(root, baseId, ref) {\n var _a;\n ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);\n const schOrFunc = root.refs[ref];\n if (schOrFunc)\n return schOrFunc;\n let _sch = resolve.call(this, root, ref);\n if (_sch === undefined) {\n const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref]; // TODO maybe localRefs should hold SchemaEnv\n const { schemaId } = this.opts;\n if (schema)\n _sch = new SchemaEnv({ schema, schemaId, root, baseId });\n }\n if (_sch === undefined)\n return;\n return (root.refs[ref] = inlineOrCompile.call(this, _sch));\n}\nexports.resolveRef = resolveRef;\nfunction inlineOrCompile(sch) {\n if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs))\n return sch.schema;\n return sch.validate ? sch : compileSchema.call(this, sch);\n}\n// Index of schema compilation in the currently compiled list\nfunction getCompilingSchema(schEnv) {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv))\n return sch;\n }\n}\nexports.getCompilingSchema = getCompilingSchema;\nfunction sameSchemaEnv(s1, s2) {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;\n}\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(root, // information about the root schema for the current schema\nref // reference to resolve\n) {\n let sch;\n while (typeof (sch = this.refs[ref]) == \"string\")\n ref = sch;\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);\n}\n// Resolve schema, its root and baseId\nfunction resolveSchema(root, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\nref // reference to resolve\n) {\n const p = this.opts.uriResolver.parse(ref);\n const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);\n let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined);\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root);\n }\n const id = (0, resolve_1.normalizeId)(refPath);\n const schOrRef = this.refs[id] || this.schemas[id];\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef);\n if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== \"object\")\n return;\n return getJsonPointer.call(this, p, sch);\n }\n if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== \"object\")\n return;\n if (!schOrRef.validate)\n compileSchema.call(this, schOrRef);\n if (id === (0, resolve_1.normalizeId)(ref)) {\n const { schema } = schOrRef;\n const { schemaId } = this.opts;\n const schId = schema[schemaId];\n if (schId)\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n return new SchemaEnv({ schema, schemaId, root, baseId });\n }\n return getJsonPointer.call(this, p, schOrRef);\n}\nexports.resolveSchema = resolveSchema;\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n]);\nfunction getJsonPointer(parsedRef, { baseId, schema, root }) {\n var _a;\n if (((_a = parsedRef.fragment) === null || _a === void 0 ? void 0 : _a[0]) !== \"/\")\n return;\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\")\n return;\n const partSchema = schema[(0, util_1.unescapeFragment)(part)];\n if (partSchema === undefined)\n return;\n schema = partSchema;\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId];\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n }\n }\n let env;\n if (typeof schema != \"boolean\" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) {\n const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref);\n env = resolveSchema.call(this, root, $ref);\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const { schemaId } = this.opts;\n env = env || new SchemaEnv({ schema, schemaId, root, baseId });\n if (env.schema !== env.root.schema)\n return env;\n return undefined;\n}\n//# sourceMappingURL=index.js.map","","'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/**\n * @param {Array<string>} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n let acc = ''\n let code = 0\n let i = 0\n\n for (i = 0; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (code === 48) {\n continue\n }\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n break\n }\n\n for (i += 1; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n }\n return acc\n}\n\n/**\n * @typedef {Object} GetIPV6Result\n * @property {boolean} error - Indicates if there was an error parsing the IPv6 address.\n * @property {string} address - The parsed IPv6 address.\n * @property {string} [zone] - The zone identifier, if present.\n */\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {Array<string>} buffer\n * @returns {boolean}\n */\nfunction consumeIsZone (buffer) {\n buffer.length = 0\n return true\n}\n\n/**\n * @param {Array<string>} buffer\n * @param {Array<string>} address\n * @param {GetIPV6Result} output\n * @returns {boolean}\n */\nfunction consumeHextets (buffer, address, output) {\n if (buffer.length) {\n const hex = stringArrayToHexStripped(buffer)\n if (hex !== '') {\n address.push(hex)\n } else {\n output.error = true\n return false\n }\n buffer.length = 0\n }\n return true\n}\n\n/**\n * @param {string} input\n * @returns {GetIPV6Result}\n */\nfunction getIPV6 (input) {\n let tokenCount = 0\n const output = { error: false, address: '', zone: '' }\n /** @type {Array<string>} */\n const address = []\n /** @type {Array<string>} */\n const buffer = []\n let endipv6Encountered = false\n let endIpv6 = false\n\n let consume = consumeHextets\n\n for (let i = 0; i < input.length; i++) {\n const cursor = input[i]\n if (cursor === '[' || cursor === ']') { continue }\n if (cursor === ':') {\n if (endipv6Encountered === true) {\n endIpv6 = true\n }\n if (!consume(buffer, address, output)) { break }\n if (++tokenCount > 7) {\n // not valid\n output.error = true\n break\n }\n if (i > 0 && input[i - 1] === ':') {\n endipv6Encountered = true\n }\n address.push(':')\n continue\n } else if (cursor === '%') {\n if (!consume(buffer, address, output)) { break }\n // switch to zone detection\n consume = consumeIsZone\n } else {\n buffer.push(cursor)\n continue\n }\n }\n if (buffer.length) {\n if (consume === consumeIsZone) {\n output.zone = buffer.join('')\n } else if (endIpv6) {\n address.push(buffer.join(''))\n } else {\n address.push(stringArrayToHexStripped(buffer))\n }\n }\n output.address = address.join('')\n return output\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n */\n\n/**\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n if (findToken(host, ':') < 2) { return { host, isIPV6: false } }\n const ipv6 = getIPV6(host)\n\n if (!ipv6.error) {\n let newHost = ipv6.address\n let escapedHost = ipv6.address\n if (ipv6.zone) {\n newHost += '%' + ipv6.zone\n escapedHost += '%25' + ipv6.zone\n }\n return { host: newHost, isIPV6: true, escapedHost }\n } else {\n return { host, isIPV6: false }\n }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n let ind = 0\n for (let i = 0; i < str.length; i++) {\n if (str[i] === token) ind++\n }\n return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n let input = path\n const output = []\n let nextSlash = -1\n let len = 0\n\n // eslint-disable-next-line no-cond-assign\n while (len = input.length) {\n if (len === 1) {\n if (input === '.') {\n break\n } else if (input === '/') {\n output.push('/')\n break\n } else {\n output.push(input)\n break\n }\n } else if (len === 2) {\n if (input[0] === '.') {\n if (input[1] === '.') {\n break\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.' || input[1] === '/') {\n output.push('/')\n break\n }\n }\n } else if (len === 3) {\n if (input === '/..') {\n if (output.length !== 0) {\n output.pop()\n }\n output.push('/')\n break\n }\n }\n if (input[0] === '.') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(3)\n continue\n }\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(2)\n continue\n } else if (input[2] === '.') {\n if (input[3] === '/') {\n input = input.slice(3)\n if (output.length !== 0) {\n output.pop()\n }\n continue\n }\n }\n }\n }\n\n // Rule 2E: Move normal path segment to output\n if ((nextSlash = input.indexOf('/', 1)) === -1) {\n output.push(input)\n break\n } else {\n output.push(input.slice(0, nextSlash))\n input = input.slice(nextSlash)\n }\n }\n\n return output.join('')\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {boolean} esc\n * @returns {import('../types/index').URIComponent}\n */\nfunction normalizeComponentEncoding (component, esc) {\n const func = esc !== true ? escape : unescape\n if (component.scheme !== undefined) {\n component.scheme = func(component.scheme)\n }\n if (component.userinfo !== undefined) {\n component.userinfo = func(component.userinfo)\n }\n if (component.host !== undefined) {\n component.host = func(component.host)\n }\n if (component.path !== undefined) {\n component.path = func(component.path)\n }\n if (component.query !== undefined) {\n component.query = func(component.query)\n }\n if (component.fragment !== undefined) {\n component.fragment = func(component.fragment)\n }\n return component\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n const uriTokens = []\n\n if (component.userinfo !== undefined) {\n uriTokens.push(component.userinfo)\n uriTokens.push('@')\n }\n\n if (component.host !== undefined) {\n let host = unescape(component.host)\n if (!isIPv4(host)) {\n const ipV6res = normalizeIPv6(host)\n if (ipV6res.isIPV6 === true) {\n host = `[${ipV6res.escapedHost}]`\n } else {\n host = component.host\n }\n }\n uriTokens.push(host)\n }\n\n if (typeof component.port === 'number' || typeof component.port === 'string') {\n uriTokens.push(':')\n uriTokens.push(String(component.port))\n }\n\n return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n nonSimpleDomain,\n recomposeAuthority,\n normalizeComponentEncoding,\n removeDotSegments,\n isIPv4,\n isUUID,\n normalizeIPv6,\n stringArrayToHexStripped\n}\n","'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-.:;=@]|%[\\da-f]{2})+)/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n 'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n if (wsComponent.secure === true) {\n return true\n } else if (wsComponent.secure === false) {\n return false\n } else if (wsComponent.scheme) {\n return (\n wsComponent.scheme.length === 3 &&\n (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n )\n } else {\n return false\n }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n if (!component.host) {\n component.error = component.error || 'HTTP URIs must have a host.'\n }\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n const secure = String(component.scheme).toLowerCase() === 'https'\n\n // normalize the default port\n if (component.port === (secure ? 443 : 80) || component.port === '') {\n component.port = undefined\n }\n\n // normalize the empty path\n if (!component.path) {\n component.path = '/'\n }\n\n // NOTE: We do not parse query strings for HTTP URIs\n // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n // and not the HTTP spec.\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n wsComponent.secure = wsIsSecure(wsComponent)\n\n // construct resouce name\n wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n wsComponent.path = undefined\n wsComponent.query = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n wsComponent.port = undefined\n }\n\n // ensure scheme matches secure flag\n if (typeof wsComponent.secure === 'boolean') {\n wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n wsComponent.secure = undefined\n }\n\n // reconstruct path from resource name\n if (wsComponent.resourceName) {\n const [path, query] = wsComponent.resourceName.split('?')\n wsComponent.path = (path && path !== '/' ? path : undefined)\n wsComponent.query = query\n wsComponent.resourceName = undefined\n }\n\n // forbid fragment component\n wsComponent.fragment = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n if (!urnComponent.path) {\n urnComponent.error = 'URN can not be parsed'\n return urnComponent\n }\n const matches = urnComponent.path.match(URN_REG)\n if (matches) {\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n urnComponent.nid = matches[1].toLowerCase()\n urnComponent.nss = matches[2]\n const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n urnComponent.path = undefined\n\n if (schemeHandler) {\n urnComponent = schemeHandler.parse(urnComponent, options)\n }\n } else {\n urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n }\n\n return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n if (urnComponent.nid === undefined) {\n throw new Error('URN without nid cannot be serialized')\n }\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n const nid = urnComponent.nid.toLowerCase()\n const urnScheme = `${scheme}:${options.nid || nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n\n if (schemeHandler) {\n urnComponent = schemeHandler.serialize(urnComponent, options)\n }\n\n const uriComponent = urnComponent\n const nss = urnComponent.nss\n uriComponent.path = `${nid || options.nid}:${nss}`\n\n options.skipEscape = true\n return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n const uuidComponent = urnComponent\n uuidComponent.uuid = uuidComponent.nss\n uuidComponent.nss = undefined\n\n if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n }\n\n return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n const urnComponent = uuidComponent\n // normalize UUID\n urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n scheme: 'http',\n domainHost: true,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n scheme: 'https',\n domainHost: http.domainHost,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n scheme: 'ws',\n domainHost: true,\n parse: wsParse,\n serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n scheme: 'wss',\n domainHost: ws.domainHost,\n parse: ws.parse,\n serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n scheme: 'urn',\n parse: urnParse,\n serialize: urnSerialize,\n skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n scheme: 'urn:uuid',\n parse: urnuuidParse,\n serialize: urnuuidSerialize,\n skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record<SchemeName, SchemeHandler>} */ ({\n http,\n https,\n ws,\n wss,\n urn,\n 'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n return (\n scheme && (\n SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n ) ||\n undefined\n}\n\nmodule.exports = {\n wsIsSecure,\n SCHEMES,\n isValidSchemeName,\n getSchemeHandler,\n}\n","'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n if (typeof uri === 'string') {\n uri = /** @type {T} */ (serialize(parse(uri, options), options))\n } else if (typeof uri === 'object') {\n uri = /** @type {T} */ (parse(serialize(uri, options), options))\n }\n return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true)\n schemelessOptions.skipEscape = true\n return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n /** @type {import('./types/index').URIComponent} */\n const target = {}\n if (!skipNormalization) {\n base = parse(serialize(base, options), options) // normalize base component\n relative = parse(serialize(relative, options), options) // normalize relative component\n }\n options = options || {}\n\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (!relative.path) {\n target.path = base.path\n if (relative.query !== undefined) {\n target.query = relative.query\n } else {\n target.query = base.query\n }\n } else {\n if (relative.path[0] === '/') {\n target.path = removeDotSegments(relative.path)\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = '/' + relative.path\n } else if (!base.path) {\n target.path = relative.path\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n }\n target.path = removeDotSegments(target.path)\n }\n target.query = relative.query\n }\n // target.authority = base.authority;\n target.userinfo = base.userinfo\n target.host = base.host\n target.port = base.port\n }\n target.scheme = base.scheme\n }\n\n target.fragment = relative.fragment\n\n return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n if (typeof uriA === 'string') {\n uriA = unescape(uriA)\n uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true })\n } else if (typeof uriA === 'object') {\n uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true })\n }\n\n if (typeof uriB === 'string') {\n uriB = unescape(uriB)\n uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true })\n } else if (typeof uriB === 'object') {\n uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true })\n }\n\n return uriA.toLowerCase() === uriB.toLowerCase()\n}\n\n/**\n * @param {Readonly<import('./types/index').URIComponent>} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n const component = {\n host: cmpts.host,\n scheme: cmpts.scheme,\n userinfo: cmpts.userinfo,\n port: cmpts.port,\n path: cmpts.path,\n query: cmpts.query,\n nid: cmpts.nid,\n nss: cmpts.nss,\n uuid: cmpts.uuid,\n fragment: cmpts.fragment,\n reference: cmpts.reference,\n resourceName: cmpts.resourceName,\n secure: cmpts.secure,\n error: ''\n }\n const options = Object.assign({}, opts)\n const uriTokens = []\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n // perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n if (component.path !== undefined) {\n if (!options.skipEscape) {\n component.path = escape(component.path)\n\n if (component.scheme !== undefined) {\n component.path = component.path.split('%3A').join(':')\n }\n } else {\n component.path = unescape(component.path)\n }\n }\n\n if (options.reference !== 'suffix' && component.scheme) {\n uriTokens.push(component.scheme, ':')\n }\n\n const authority = recomposeAuthority(component)\n if (authority !== undefined) {\n if (options.reference !== 'suffix') {\n uriTokens.push('//')\n }\n\n uriTokens.push(authority)\n\n if (component.path && component.path[0] !== '/') {\n uriTokens.push('/')\n }\n }\n if (component.path !== undefined) {\n let s = component.path\n\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s)\n }\n\n if (\n authority === undefined &&\n s[0] === '/' &&\n s[1] === '/'\n ) {\n // don't allow the path to start with \"//\"\n s = '/%2F' + s.slice(2)\n }\n\n uriTokens.push(s)\n }\n\n if (component.query !== undefined) {\n uriTokens.push('?', component.query)\n }\n\n if (component.fragment !== undefined) {\n uriTokens.push('#', component.fragment)\n }\n return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n const options = Object.assign({}, opts)\n /** @type {import('./types/index').URIComponent} */\n const parsed = {\n scheme: undefined,\n userinfo: undefined,\n host: '',\n port: undefined,\n path: '',\n query: undefined,\n fragment: undefined\n }\n\n let isIP = false\n if (options.reference === 'suffix') {\n if (options.scheme) {\n uri = options.scheme + ':' + uri\n } else {\n uri = '//' + uri\n }\n }\n\n const matches = uri.match(URI_PARSE)\n\n if (matches) {\n // store each component\n parsed.scheme = matches[1]\n parsed.userinfo = matches[3]\n parsed.host = matches[4]\n parsed.port = parseInt(matches[5], 10)\n parsed.path = matches[6] || ''\n parsed.query = matches[7]\n parsed.fragment = matches[8]\n\n // fix port number\n if (isNaN(parsed.port)) {\n parsed.port = matches[5]\n }\n if (parsed.host) {\n const ipv4result = isIPv4(parsed.host)\n if (ipv4result === false) {\n const ipv6result = normalizeIPv6(parsed.host)\n parsed.host = ipv6result.host.toLowerCase()\n isIP = ipv6result.isIPV6\n } else {\n isIP = true\n }\n }\n if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n parsed.reference = 'same-document'\n } else if (parsed.scheme === undefined) {\n parsed.reference = 'relative'\n } else if (parsed.fragment === undefined) {\n parsed.reference = 'absolute'\n } else {\n parsed.reference = 'uri'\n }\n\n // check for reference errors\n if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n // check if scheme can't handle IRIs\n if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n // if host component is a domain name\n if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost)) && isIP === false && nonSimpleDomain(parsed.host)) {\n // convert Unicode IDN -> ASCII IDN\n try {\n parsed.host = URL.domainToASCII(parsed.host.toLowerCase())\n } catch (e) {\n parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n }\n }\n // convert IRI -> URI\n }\n\n if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n if (uri.indexOf('%') !== -1) {\n if (parsed.scheme !== undefined) {\n parsed.scheme = unescape(parsed.scheme)\n }\n if (parsed.host !== undefined) {\n parsed.host = unescape(parsed.host)\n }\n }\n if (parsed.path) {\n parsed.path = escape(unescape(parsed.path))\n }\n if (parsed.fragment) {\n parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment))\n }\n }\n\n // perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(parsed, options)\n }\n } else {\n parsed.error = parsed.error || 'URI can not be parsed.'\n }\n return parsed\n}\n\nconst fastUri = {\n SCHEMES,\n normalize,\n resolve,\n resolveComponent,\n equal,\n serialize,\n parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst uri = require(\"fast-uri\");\nuri.code = 'require(\"ajv/dist/runtime/uri\").default';\nexports.default = uri;\n//# sourceMappingURL=uri.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nconst validation_error_1 = require(\"./runtime/validation_error\");\nconst ref_error_1 = require(\"./compile/ref_error\");\nconst rules_1 = require(\"./compile/rules\");\nconst compile_1 = require(\"./compile\");\nconst codegen_2 = require(\"./compile/codegen\");\nconst resolve_1 = require(\"./compile/resolve\");\nconst dataType_1 = require(\"./compile/validate/dataType\");\nconst util_1 = require(\"./compile/util\");\nconst $dataRefSchema = require(\"./refs/data.json\");\nconst uri_1 = require(\"./runtime/uri\");\nconst defaultRegExp = (str, flags) => new RegExp(str, flags);\ndefaultRegExp.code = \"new RegExp\";\nconst META_IGNORE_OPTIONS = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"];\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n]);\nconst removedOptions = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n};\nconst deprecatedOptions = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n};\nconst MAX_EXPRESSION = 200;\n// eslint-disable-next-line complexity\nfunction requiredOptions(o) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;\n const s = o.strict;\n const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize;\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0;\n const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;\n const uriResolver = (_d = o.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;\n return {\n strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== void 0 ? _e : s) !== null && _f !== void 0 ? _f : true,\n strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== void 0 ? _g : s) !== null && _h !== void 0 ? _h : true,\n strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== void 0 ? _j : s) !== null && _k !== void 0 ? _k : \"log\",\n strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== void 0 ? _l : s) !== null && _m !== void 0 ? _m : \"log\",\n strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== void 0 ? _o : s) !== null && _p !== void 0 ? _p : false,\n code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp },\n loopRequired: (_q = o.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,\n loopEnum: (_r = o.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,\n meta: (_s = o.meta) !== null && _s !== void 0 ? _s : true,\n messages: (_t = o.messages) !== null && _t !== void 0 ? _t : true,\n inlineRefs: (_u = o.inlineRefs) !== null && _u !== void 0 ? _u : true,\n schemaId: (_v = o.schemaId) !== null && _v !== void 0 ? _v : \"$id\",\n addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== void 0 ? _w : true,\n validateSchema: (_x = o.validateSchema) !== null && _x !== void 0 ? _x : true,\n validateFormats: (_y = o.validateFormats) !== null && _y !== void 0 ? _y : true,\n unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== void 0 ? _z : true,\n int32range: (_0 = o.int32range) !== null && _0 !== void 0 ? _0 : true,\n uriResolver: uriResolver,\n };\n}\nclass Ajv {\n constructor(opts = {}) {\n this.schemas = {};\n this.refs = {};\n this.formats = {};\n this._compilations = new Set();\n this._loading = {};\n this._cache = new Map();\n opts = this.opts = { ...opts, ...requiredOptions(opts) };\n const { es5, lines } = this.opts.code;\n this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });\n this.logger = getLogger(opts.logger);\n const formatOpt = opts.validateFormats;\n opts.validateFormats = false;\n this.RULES = (0, rules_1.getRules)();\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\");\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\");\n this._metaOpts = getMetaSchemaOptions.call(this);\n if (opts.formats)\n addInitialFormats.call(this);\n this._addVocabularies();\n this._addDefaultMetaSchema();\n if (opts.keywords)\n addInitialKeywords.call(this, opts.keywords);\n if (typeof opts.meta == \"object\")\n this.addMetaSchema(opts.meta);\n addInitialSchemas.call(this);\n opts.validateFormats = formatOpt;\n }\n _addVocabularies() {\n this.addKeyword(\"$async\");\n }\n _addDefaultMetaSchema() {\n const { $data, meta, schemaId } = this.opts;\n let _dataRefSchema = $dataRefSchema;\n if (schemaId === \"id\") {\n _dataRefSchema = { ...$dataRefSchema };\n _dataRefSchema.id = _dataRefSchema.$id;\n delete _dataRefSchema.$id;\n }\n if (meta && $data)\n this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false);\n }\n defaultMeta() {\n const { meta, schemaId } = this.opts;\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined);\n }\n validate(schemaKeyRef, // key, ref or schema object\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n data // to be validated\n ) {\n let v;\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema(schemaKeyRef);\n if (!v)\n throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`);\n }\n else {\n v = this.compile(schemaKeyRef);\n }\n const valid = v(data);\n if (!(\"$async\" in v))\n this.errors = v.errors;\n return valid;\n }\n compile(schema, _meta) {\n const sch = this._addSchema(schema, _meta);\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n compileAsync(schema, meta) {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\");\n }\n const { loadSchema } = this.opts;\n return runCompileAsync.call(this, schema, meta);\n async function runCompileAsync(_schema, _meta) {\n await loadMetaSchema.call(this, _schema.$schema);\n const sch = this._addSchema(_schema, _meta);\n return sch.validate || _compileAsync.call(this, sch);\n }\n async function loadMetaSchema($ref) {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, { $ref }, true);\n }\n }\n async function _compileAsync(sch) {\n try {\n return this._compileSchemaEnv(sch);\n }\n catch (e) {\n if (!(e instanceof ref_error_1.default))\n throw e;\n checkLoaded.call(this, e);\n await loadMissingSchema.call(this, e.missingSchema);\n return _compileAsync.call(this, sch);\n }\n }\n function checkLoaded({ missingSchema: ref, missingRef }) {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`);\n }\n }\n async function loadMissingSchema(ref) {\n const _schema = await _loadSchema.call(this, ref);\n if (!this.refs[ref])\n await loadMetaSchema.call(this, _schema.$schema);\n if (!this.refs[ref])\n this.addSchema(_schema, ref, meta);\n }\n async function _loadSchema(ref) {\n const p = this._loading[ref];\n if (p)\n return p;\n try {\n return await (this._loading[ref] = loadSchema(ref));\n }\n finally {\n delete this._loading[ref];\n }\n }\n }\n // Adds schema to the instance\n addSchema(schema, // If array is passed, `key` will be ignored\n key, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ) {\n if (Array.isArray(schema)) {\n for (const sch of schema)\n this.addSchema(sch, undefined, _meta, _validateSchema);\n return this;\n }\n let id;\n if (typeof schema === \"object\") {\n const { schemaId } = this.opts;\n id = schema[schemaId];\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`);\n }\n }\n key = (0, resolve_1.normalizeId)(key || id);\n this._checkUnique(key);\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true);\n return this;\n }\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(schema, key, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ) {\n this.addSchema(schema, key, true, _validateSchema);\n return this;\n }\n // Validate schema against its meta-schema\n validateSchema(schema, throwOrLogError) {\n if (typeof schema == \"boolean\")\n return true;\n let $schema;\n $schema = schema.$schema;\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\");\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta();\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\");\n this.errors = null;\n return true;\n }\n const valid = this.validate($schema, schema);\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText();\n if (this.opts.validateSchema === \"log\")\n this.logger.error(message);\n else\n throw new Error(message);\n }\n return valid;\n }\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema(keyRef) {\n let sch;\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\")\n keyRef = sch;\n if (sch === undefined) {\n const { schemaId } = this.opts;\n const root = new compile_1.SchemaEnv({ schema: {}, schemaId });\n sch = compile_1.resolveSchema.call(this, root, keyRef);\n if (!sch)\n return;\n this.refs[keyRef] = sch;\n }\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef) {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef);\n this._removeAllSchemas(this.refs, schemaKeyRef);\n return this;\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas);\n this._removeAllSchemas(this.refs);\n this._cache.clear();\n return this;\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef);\n if (typeof sch == \"object\")\n this._cache.delete(sch.schema);\n delete this.schemas[schemaKeyRef];\n delete this.refs[schemaKeyRef];\n return this;\n }\n case \"object\": {\n const cacheKey = schemaKeyRef;\n this._cache.delete(cacheKey);\n let id = schemaKeyRef[this.opts.schemaId];\n if (id) {\n id = (0, resolve_1.normalizeId)(id);\n delete this.schemas[id];\n delete this.refs[id];\n }\n return this;\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\");\n }\n }\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions) {\n for (const def of definitions)\n this.addKeyword(def);\n return this;\n }\n addKeyword(kwdOrDef, def // deprecated\n ) {\n let keyword;\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef;\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\");\n def.keyword = keyword;\n }\n }\n else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef;\n keyword = def.keyword;\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\");\n }\n }\n else {\n throw new Error(\"invalid addKeywords parameters\");\n }\n checkKeyword.call(this, keyword, def);\n if (!def) {\n (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd));\n return this;\n }\n keywordMetaschema.call(this, def);\n const definition = {\n ...def,\n type: (0, dataType_1.getJSONTypes)(def.type),\n schemaType: (0, dataType_1.getJSONTypes)(def.schemaType),\n };\n (0, util_1.eachItem)(keyword, definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));\n return this;\n }\n getKeyword(keyword) {\n const rule = this.RULES.all[keyword];\n return typeof rule == \"object\" ? rule.definition : !!rule;\n }\n // Remove keyword\n removeKeyword(keyword) {\n // TODO return type should be Ajv\n const { RULES } = this;\n delete RULES.keywords[keyword];\n delete RULES.all[keyword];\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword);\n if (i >= 0)\n group.rules.splice(i, 1);\n }\n return this;\n }\n // Add format\n addFormat(name, format) {\n if (typeof format == \"string\")\n format = new RegExp(format);\n this.formats[name] = format;\n return this;\n }\n errorsText(errors = this.errors, // optional array of validation errors\n { separator = \", \", dataVar = \"data\" } = {} // optional options with properties `separator` and `dataVar`\n ) {\n if (!errors || errors.length === 0)\n return \"No errors\";\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg);\n }\n $dataMetaSchema(metaSchema, keywordsJsonPointers) {\n const rules = this.RULES.all;\n metaSchema = JSON.parse(JSON.stringify(metaSchema));\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1); // first segment is an empty string\n let keywords = metaSchema;\n for (const seg of segments)\n keywords = keywords[seg];\n for (const key in rules) {\n const rule = rules[key];\n if (typeof rule != \"object\")\n continue;\n const { $data } = rule.definition;\n const schema = keywords[key];\n if ($data && schema)\n keywords[key] = schemaOrData(schema);\n }\n }\n return metaSchema;\n }\n _removeAllSchemas(schemas, regex) {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef];\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef];\n }\n else if (sch && !sch.meta) {\n this._cache.delete(sch.schema);\n delete schemas[keyRef];\n }\n }\n }\n }\n _addSchema(schema, meta, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) {\n let id;\n const { schemaId } = this.opts;\n if (typeof schema == \"object\") {\n id = schema[schemaId];\n }\n else {\n if (this.opts.jtd)\n throw new Error(\"schema must be object\");\n else if (typeof schema != \"boolean\")\n throw new Error(\"schema must be object or boolean\");\n }\n let sch = this._cache.get(schema);\n if (sch !== undefined)\n return sch;\n baseId = (0, resolve_1.normalizeId)(id || baseId);\n const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId);\n sch = new compile_1.SchemaEnv({ schema, schemaId, meta, baseId, localRefs });\n this._cache.set(sch.schema, sch);\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId)\n this._checkUnique(baseId);\n this.refs[baseId] = sch;\n }\n if (validateSchema)\n this.validateSchema(schema, true);\n return sch;\n }\n _checkUnique(id) {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`);\n }\n }\n _compileSchemaEnv(sch) {\n if (sch.meta)\n this._compileMetaSchema(sch);\n else\n compile_1.compileSchema.call(this, sch);\n /* istanbul ignore if */\n if (!sch.validate)\n throw new Error(\"ajv implementation error\");\n return sch.validate;\n }\n _compileMetaSchema(sch) {\n const currentOpts = this.opts;\n this.opts = this._metaOpts;\n try {\n compile_1.compileSchema.call(this, sch);\n }\n finally {\n this.opts = currentOpts;\n }\n }\n}\nAjv.ValidationError = validation_error_1.default;\nAjv.MissingRefError = ref_error_1.default;\nexports.default = Ajv;\nfunction checkOptions(checkOpts, options, msg, log = \"error\") {\n for (const key in checkOpts) {\n const opt = key;\n if (opt in options)\n this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`);\n }\n}\nfunction getSchEnv(keyRef) {\n keyRef = (0, resolve_1.normalizeId)(keyRef); // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef];\n}\nfunction addInitialSchemas() {\n const optsSchemas = this.opts.schemas;\n if (!optsSchemas)\n return;\n if (Array.isArray(optsSchemas))\n this.addSchema(optsSchemas);\n else\n for (const key in optsSchemas)\n this.addSchema(optsSchemas[key], key);\n}\nfunction addInitialFormats() {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name];\n if (format)\n this.addFormat(name, format);\n }\n}\nfunction addInitialKeywords(defs) {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs);\n return;\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\");\n for (const keyword in defs) {\n const def = defs[keyword];\n if (!def.keyword)\n def.keyword = keyword;\n this.addKeyword(def);\n }\n}\nfunction getMetaSchemaOptions() {\n const metaOpts = { ...this.opts };\n for (const opt of META_IGNORE_OPTIONS)\n delete metaOpts[opt];\n return metaOpts;\n}\nconst noLogs = { log() { }, warn() { }, error() { } };\nfunction getLogger(logger) {\n if (logger === false)\n return noLogs;\n if (logger === undefined)\n return console;\n if (logger.log && logger.warn && logger.error)\n return logger;\n throw new Error(\"logger must implement log, warn and error methods\");\n}\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;\nfunction checkKeyword(keyword, def) {\n const { RULES } = this;\n (0, util_1.eachItem)(keyword, (kwd) => {\n if (RULES.keywords[kwd])\n throw new Error(`Keyword ${kwd} is already defined`);\n if (!KEYWORD_NAME.test(kwd))\n throw new Error(`Keyword ${kwd} has invalid name`);\n });\n if (!def)\n return;\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function');\n }\n}\nfunction addRule(keyword, definition, dataType) {\n var _a;\n const post = definition === null || definition === void 0 ? void 0 : definition.post;\n if (dataType && post)\n throw new Error('keyword with \"post\" flag cannot have \"type\"');\n const { RULES } = this;\n let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType);\n if (!ruleGroup) {\n ruleGroup = { type: dataType, rules: [] };\n RULES.rules.push(ruleGroup);\n }\n RULES.keywords[keyword] = true;\n if (!definition)\n return;\n const rule = {\n keyword,\n definition: {\n ...definition,\n type: (0, dataType_1.getJSONTypes)(definition.type),\n schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType),\n },\n };\n if (definition.before)\n addBeforeRule.call(this, ruleGroup, rule, definition.before);\n else\n ruleGroup.rules.push(rule);\n RULES.all[keyword] = rule;\n (_a = definition.implements) === null || _a === void 0 ? void 0 : _a.forEach((kwd) => this.addKeyword(kwd));\n}\nfunction addBeforeRule(ruleGroup, rule, before) {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before);\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule);\n }\n else {\n ruleGroup.rules.push(rule);\n this.logger.warn(`rule ${before} is not defined`);\n }\n}\nfunction keywordMetaschema(def) {\n let { metaSchema } = def;\n if (metaSchema === undefined)\n return;\n if (def.$data && this.opts.$data)\n metaSchema = schemaOrData(metaSchema);\n def.validateSchema = this.compile(metaSchema, true);\n}\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n};\nfunction schemaOrData(schema) {\n return { anyOf: [schema, $dataRef] };\n}\n//# sourceMappingURL=core.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst def = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID');\n },\n};\nexports.default = def;\n//# sourceMappingURL=id.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.callRef = exports.getValidate = void 0;\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt) {\n const { gen, schema: $ref, it } = cxt;\n const { baseId, schemaEnv: env, validateName, opts, self } = it;\n const { root } = env;\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId)\n return callRootRef();\n const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref);\n if (schOrEnv === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref);\n if (schOrEnv instanceof compile_1.SchemaEnv)\n return callValidate(schOrEnv);\n return inlineRefSchema(schOrEnv);\n function callRootRef() {\n if (env === root)\n return callRef(cxt, validateName, env, env.$async);\n const rootName = gen.scopeValue(\"root\", { ref: root });\n return callRef(cxt, (0, codegen_1._) `${rootName}.validate`, root, root.$async);\n }\n function callValidate(sch) {\n const v = getValidate(cxt, sch);\n callRef(cxt, v, sch, sch.$async);\n }\n function inlineRefSchema(sch) {\n const schName = gen.scopeValue(\"schema\", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch });\n const valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({\n schema: sch,\n dataTypes: [],\n schemaPath: codegen_1.nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n }, valid);\n cxt.mergeEvaluated(schCxt);\n cxt.ok(valid);\n }\n },\n};\nfunction getValidate(cxt, sch) {\n const { gen } = cxt;\n return sch.validate\n ? gen.scopeValue(\"validate\", { ref: sch.validate })\n : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.validate`;\n}\nexports.getValidate = getValidate;\nfunction callRef(cxt, v, sch, $async) {\n const { gen, it } = cxt;\n const { allErrors, schemaEnv: env, opts } = it;\n const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil;\n if ($async)\n callAsyncRef();\n else\n callSyncRef();\n function callAsyncRef() {\n if (!env.$async)\n throw new Error(\"async schema referenced by sync schema\");\n const valid = gen.let(\"valid\");\n gen.try(() => {\n gen.code((0, codegen_1._) `await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`);\n addEvaluatedFrom(v); // TODO will not work with async, it has to be returned with the result\n if (!allErrors)\n gen.assign(valid, true);\n }, (e) => {\n gen.if((0, codegen_1._) `!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));\n addErrorsFrom(e);\n if (!allErrors)\n gen.assign(valid, false);\n });\n cxt.ok(valid);\n }\n function callSyncRef() {\n cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v));\n }\n function addErrorsFrom(source) {\n const errs = (0, codegen_1._) `${source}.errors`;\n gen.assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); // TODO tagged\n gen.assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n }\n function addEvaluatedFrom(source) {\n var _a;\n if (!it.opts.unevaluated)\n return;\n const schEvaluated = (_a = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a === void 0 ? void 0 : _a.evaluated;\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props);\n }\n }\n else {\n const props = gen.var(\"props\", (0, codegen_1._) `${source}.evaluated.props`);\n it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name);\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items);\n }\n }\n else {\n const items = gen.var(\"items\", (0, codegen_1._) `${source}.evaluated.items`);\n it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name);\n }\n }\n }\n}\nexports.callRef = callRef;\nexports.default = def;\n//# sourceMappingURL=ref.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst id_1 = require(\"./id\");\nconst ref_1 = require(\"./ref\");\nconst core = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n { keyword: \"$comment\" },\n \"definitions\",\n id_1.default,\n ref_1.default,\n];\nexports.default = core;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n maximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n minimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n exclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n exclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n message: ({ keyword, schemaCode }) => (0, codegen_1.str) `must be ${KWDs[keyword].okStr} ${schemaCode}`,\n params: ({ keyword, schemaCode }) => (0, codegen_1._) `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n cxt.fail$data((0, codegen_1._) `${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must be multiple of ${schemaCode}`,\n params: ({ schemaCode }) => (0, codegen_1._) `{multipleOf: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, schemaCode, it } = cxt;\n // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision;\n const res = gen.let(\"res\");\n const invalid = prec\n ? (0, codegen_1._) `Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : (0, codegen_1._) `${res} !== parseInt(${res})`;\n cxt.fail$data((0, codegen_1._) `(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=multipleOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nfunction ucs2length(str) {\n const len = str.length;\n let length = 0;\n let pos = 0;\n let value;\n while (pos < len) {\n length++;\n value = str.charCodeAt(pos++);\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xfc00) === 0xdc00)\n pos++; // low surrogate\n }\n }\n return length;\n}\nexports.default = ucs2length;\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default';\n//# sourceMappingURL=ucs2length.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst ucs2length_1 = require(\"../../runtime/ucs2length\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} characters`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode, it } = cxt;\n const op = keyword === \"maxLength\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n const len = it.opts.unicode === false ? (0, codegen_1._) `${data}.length` : (0, codegen_1._) `${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`;\n cxt.fail$data((0, codegen_1._) `${len} ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitLength.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match pattern \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{pattern: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt) {\n const { data, $data, schema, schemaCode, it } = cxt;\n // TODO regexp should be wrapped in try/catchs\n const u = it.opts.unicodeRegExp ? \"u\" : \"\";\n const regExp = $data ? (0, codegen_1._) `(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema);\n cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=pattern.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} properties`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxProperties\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `Object.keys(${data}).length ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { missingProperty } }) => (0, codegen_1.str) `must have required property '${missingProperty}'`,\n params: ({ params: { missingProperty } }) => (0, codegen_1._) `{missingProperty: ${missingProperty}}`,\n};\nconst def = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, schema, schemaCode, data, $data, it } = cxt;\n const { opts } = it;\n if (!$data && schema.length === 0)\n return;\n const useLoop = schema.length >= opts.loopRequired;\n if (it.allErrors)\n allErrorsMode();\n else\n exitOnErrorMode();\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties;\n const { definedProperties } = cxt.it;\n for (const requiredKey of schema) {\n if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired);\n }\n }\n }\n function allErrorsMode() {\n if (useLoop || $data) {\n cxt.block$data(codegen_1.nil, loopAllRequired);\n }\n else {\n for (const prop of schema) {\n (0, code_1.checkReportMissingProp)(cxt, prop);\n }\n }\n }\n function exitOnErrorMode() {\n const missing = gen.let(\"missing\");\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true);\n cxt.block$data(valid, () => loopUntilMissing(missing, valid));\n cxt.ok(valid);\n }\n else {\n gen.if((0, code_1.checkMissingProp)(cxt, schema, missing));\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n function loopAllRequired() {\n gen.forOf(\"prop\", schemaCode, (prop) => {\n cxt.setParams({ missingProperty: prop });\n gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error());\n });\n }\n function loopUntilMissing(missing, valid) {\n cxt.setParams({ missingProperty: missing });\n gen.forOf(missing, schemaCode, () => {\n gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties));\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error();\n gen.break();\n });\n }, codegen_1.nil);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=required.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} items`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxItems\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `${data}.length ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://github.com/ajv-validator/ajv/issues/889\nconst equal = require(\"fast-deep-equal\");\nequal.code = 'require(\"ajv/dist/runtime/equal\").default';\nexports.default = equal;\n//# sourceMappingURL=equal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dataType_1 = require(\"../../compile/validate/dataType\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: ({ params: { i, j } }) => (0, codegen_1.str) `must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({ params: { i, j } }) => (0, codegen_1._) `{i: ${i}, j: ${j}}`,\n};\nconst def = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;\n if (!$data && !schema)\n return;\n const valid = gen.let(\"valid\");\n const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : [];\n cxt.block$data(valid, validateUniqueItems, (0, codegen_1._) `${schemaCode} === false`);\n cxt.ok(valid);\n function validateUniqueItems() {\n const i = gen.let(\"i\", (0, codegen_1._) `${data}.length`);\n const j = gen.let(\"j\");\n cxt.setParams({ i, j });\n gen.assign(valid, true);\n gen.if((0, codegen_1._) `${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));\n }\n function canOptimize() {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\");\n }\n function loopN(i, j) {\n const item = gen.name(\"item\");\n const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);\n const indices = gen.const(\"indices\", (0, codegen_1._) `{}`);\n gen.for((0, codegen_1._) `;${i}--;`, () => {\n gen.let(item, (0, codegen_1._) `${data}[${i}]`);\n gen.if(wrongType, (0, codegen_1._) `continue`);\n if (itemTypes.length > 1)\n gen.if((0, codegen_1._) `typeof ${item} == \"string\"`, (0, codegen_1._) `${item} += \"_\"`);\n gen\n .if((0, codegen_1._) `typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, (0, codegen_1._) `${indices}[${item}]`);\n cxt.error();\n gen.assign(valid, false).break();\n })\n .code((0, codegen_1._) `${indices}[${item}] = ${i}`);\n });\n }\n function loopN2(i, j) {\n const eql = (0, util_1.useFunc)(gen, equal_1.default);\n const outer = gen.name(\"outer\");\n gen.label(outer).for((0, codegen_1._) `;${i}--;`, () => gen.for((0, codegen_1._) `${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._) `${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error();\n gen.assign(valid, false).break(outer);\n })));\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=uniqueItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: \"must be equal to constant\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValue: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schemaCode, schema } = cxt;\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data((0, codegen_1._) `!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`);\n }\n else {\n cxt.fail((0, codegen_1._) `${schema} !== ${data}`);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=const.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: \"must be equal to one of the allowed values\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n if (!$data && schema.length === 0)\n throw new Error(\"enum must have non-empty array\");\n const useLoop = schema.length >= it.opts.loopEnum;\n let eql;\n const getEql = () => (eql !== null && eql !== void 0 ? eql : (eql = (0, util_1.useFunc)(gen, equal_1.default)));\n let valid;\n if (useLoop || $data) {\n valid = gen.let(\"valid\");\n cxt.block$data(valid, loopEnum);\n }\n else {\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const vSchema = gen.const(\"vSchema\", schemaCode);\n valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i)));\n }\n cxt.pass(valid);\n function loopEnum() {\n gen.assign(valid, false);\n gen.forOf(\"v\", schemaCode, (v) => gen.if((0, codegen_1._) `${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()));\n }\n function equalCode(vSchema, i) {\n const sch = schema[i];\n return typeof sch === \"object\" && sch !== null\n ? (0, codegen_1._) `${getEql()}(${data}, ${vSchema}[${i}])`\n : (0, codegen_1._) `${data} === ${sch}`;\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=enum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst limitNumber_1 = require(\"./limitNumber\");\nconst multipleOf_1 = require(\"./multipleOf\");\nconst limitLength_1 = require(\"./limitLength\");\nconst pattern_1 = require(\"./pattern\");\nconst limitProperties_1 = require(\"./limitProperties\");\nconst required_1 = require(\"./required\");\nconst limitItems_1 = require(\"./limitItems\");\nconst uniqueItems_1 = require(\"./uniqueItems\");\nconst const_1 = require(\"./const\");\nconst enum_1 = require(\"./enum\");\nconst validation = [\n // number\n limitNumber_1.default,\n multipleOf_1.default,\n // string\n limitLength_1.default,\n pattern_1.default,\n // object\n limitProperties_1.default,\n required_1.default,\n // array\n limitItems_1.default,\n uniqueItems_1.default,\n // any\n { keyword: \"type\", schemaType: [\"string\", \"array\"] },\n { keyword: \"nullable\", schemaType: \"boolean\" },\n const_1.default,\n enum_1.default,\n];\nexports.default = validation;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateAdditionalItems = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"additionalItems\",\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { parentSchema, it } = cxt;\n const { items } = parentSchema;\n if (!Array.isArray(items)) {\n (0, util_1.checkStrictMode)(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas');\n return;\n }\n validateAdditionalItems(cxt, items);\n },\n};\nfunction validateAdditionalItems(cxt, items) {\n const { gen, schema, data, keyword, it } = cxt;\n it.items = true;\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n if (schema === false) {\n cxt.setParams({ len: items.length });\n cxt.pass((0, codegen_1._) `${len} <= ${items.length}`);\n }\n else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items.length}`); // TODO var\n gen.if((0, codegen_1.not)(valid), () => validateItems(valid));\n cxt.ok(valid);\n }\n function validateItems(valid) {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid);\n if (!it.allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n });\n }\n}\nexports.validateAdditionalItems = validateAdditionalItems;\nexports.default = def;\n//# sourceMappingURL=additionalItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateTuple = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt) {\n const { schema, it } = cxt;\n if (Array.isArray(schema))\n return validateTuple(cxt, \"additionalItems\", schema);\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nfunction validateTuple(cxt, extraItems, schArr = cxt.schema) {\n const { gen, parentSchema, data, keyword, it } = cxt;\n checkStrictTuple(parentSchema);\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items);\n }\n const valid = gen.name(\"valid\");\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n schArr.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n gen.if((0, codegen_1._) `${len} > ${i}`, () => cxt.subschema({\n keyword,\n schemaProp: i,\n dataProp: i,\n }, valid));\n cxt.ok(valid);\n });\n function checkStrictTuple(sch) {\n const { opts, errSchemaPath } = it;\n const l = schArr.length;\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false);\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`;\n (0, util_1.checkStrictMode)(it, msg, opts.strictTuples);\n }\n }\n}\nexports.validateTuple = validateTuple;\nexports.default = def;\n//# sourceMappingURL=items.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst items_1 = require(\"./items\");\nconst def = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => (0, items_1.validateTuple)(cxt, \"items\"),\n};\nexports.default = def;\n//# sourceMappingURL=prefixItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst additionalItems_1 = require(\"./additionalItems\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { schema, parentSchema, it } = cxt;\n const { prefixItems } = parentSchema;\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n if (prefixItems)\n (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems);\n else\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nexports.default = def;\n//# sourceMappingURL=items2020.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { min, max } }) => max === undefined\n ? (0, codegen_1.str) `must contain at least ${min} valid item(s)`\n : (0, codegen_1.str) `must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._) `{minContains: ${min}}` : (0, codegen_1._) `{minContains: ${min}, maxContains: ${max}}`,\n};\nconst def = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n let min;\n let max;\n const { minContains, maxContains } = parentSchema;\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains;\n max = maxContains;\n }\n else {\n min = 1;\n }\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n cxt.setParams({ min, max });\n if (max === undefined && min === 0) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`);\n return;\n }\n if (max !== undefined && min > max) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" > \"maxContains\" is always invalid`);\n cxt.fail();\n return;\n }\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n let cond = (0, codegen_1._) `${len} >= ${min}`;\n if (max !== undefined)\n cond = (0, codegen_1._) `${cond} && ${len} <= ${max}`;\n cxt.pass(cond);\n return;\n }\n it.items = true;\n const valid = gen.name(\"valid\");\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()));\n }\n else if (min === 0) {\n gen.let(valid, true);\n if (max !== undefined)\n gen.if((0, codegen_1._) `${data}.length > 0`, validateItemsWithCount);\n }\n else {\n gen.let(valid, false);\n validateItemsWithCount();\n }\n cxt.result(valid, () => cxt.reset());\n function validateItemsWithCount() {\n const schValid = gen.name(\"_valid\");\n const count = gen.let(\"count\", 0);\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)));\n }\n function validateItems(_valid, block) {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword: \"contains\",\n dataProp: i,\n dataPropType: util_1.Type.Num,\n compositeRule: true,\n }, _valid);\n block();\n });\n }\n function checkLimits(count) {\n gen.code((0, codegen_1._) `${count}++`);\n if (max === undefined) {\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true).break());\n }\n else {\n gen.if((0, codegen_1._) `${count} > ${max}`, () => gen.assign(valid, false).break());\n if (min === 1)\n gen.assign(valid, true);\n else\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true));\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=contains.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nexports.error = {\n message: ({ params: { property, depsCount, deps } }) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\";\n return (0, codegen_1.str) `must have ${property_ies} ${deps} when property ${property} is present`;\n },\n params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._) `{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n};\nconst def = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error: exports.error,\n code(cxt) {\n const [propDeps, schDeps] = splitDependencies(cxt);\n validatePropertyDeps(cxt, propDeps);\n validateSchemaDeps(cxt, schDeps);\n },\n};\nfunction splitDependencies({ schema }) {\n const propertyDeps = {};\n const schemaDeps = {};\n for (const key in schema) {\n if (key === \"__proto__\")\n continue;\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps;\n deps[key] = schema[key];\n }\n return [propertyDeps, schemaDeps];\n}\nfunction validatePropertyDeps(cxt, propertyDeps = cxt.schema) {\n const { gen, data, it } = cxt;\n if (Object.keys(propertyDeps).length === 0)\n return;\n const missing = gen.let(\"missing\");\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop];\n if (deps.length === 0)\n continue;\n const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties);\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n });\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n (0, code_1.checkReportMissingProp)(cxt, depProp);\n }\n });\n }\n else {\n gen.if((0, codegen_1._) `${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`);\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n}\nexports.validatePropertyDeps = validatePropertyDeps;\nfunction validateSchemaDeps(cxt, schemaDeps = cxt.schema) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n for (const prop in schemaDeps) {\n if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop]))\n continue;\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => {\n const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid);\n cxt.mergeValidEvaluated(schCxt, valid);\n }, () => gen.var(valid, true) // TODO var\n );\n cxt.ok(valid);\n }\n}\nexports.validateSchemaDeps = validateSchemaDeps;\nexports.default = def;\n//# sourceMappingURL=dependencies.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"property name must be valid\",\n params: ({ params }) => (0, codegen_1._) `{propertyName: ${params.propertyName}}`,\n};\nconst def = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt) {\n const { gen, schema, data, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n const valid = gen.name(\"valid\");\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({ propertyName: key });\n cxt.subschema({\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n }, valid);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error(true);\n if (!it.allErrors)\n gen.break();\n });\n });\n cxt.ok(valid);\n },\n};\nexports.default = def;\n//# sourceMappingURL=propertyNames.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"must NOT have additional properties\",\n params: ({ params }) => (0, codegen_1._) `{additionalProperty: ${params.additionalProperty}}`,\n};\nconst def = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, errsCount, it } = cxt;\n /* istanbul ignore if */\n if (!errsCount)\n throw new Error(\"ajv implementation error\");\n const { allErrors, opts } = it;\n it.props = true;\n if (opts.removeAdditional !== \"all\" && (0, util_1.alwaysValidSchema)(it, schema))\n return;\n const props = (0, code_1.allSchemaProperties)(parentSchema.properties);\n const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties);\n checkAdditionalProperties();\n cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n function checkAdditionalProperties() {\n gen.forIn(\"key\", data, (key) => {\n if (!props.length && !patProps.length)\n additionalPropertyCode(key);\n else\n gen.if(isAdditional(key), () => additionalPropertyCode(key));\n });\n }\n function isAdditional(key) {\n let definedProp;\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, \"properties\");\n definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);\n }\n else if (props.length) {\n definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._) `${key} === ${p}`));\n }\n else {\n definedProp = codegen_1.nil;\n }\n if (patProps.length) {\n definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._) `${(0, code_1.usePattern)(cxt, p)}.test(${key})`));\n }\n return (0, codegen_1.not)(definedProp);\n }\n function deleteAdditional(key) {\n gen.code((0, codegen_1._) `delete ${data}[${key}]`);\n }\n function additionalPropertyCode(key) {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key);\n return;\n }\n if (schema === false) {\n cxt.setParams({ additionalProperty: key });\n cxt.error();\n if (!allErrors)\n gen.break();\n return;\n }\n if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.name(\"valid\");\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.reset();\n deleteAdditional(key);\n });\n }\n else {\n applyAdditionalSchema(key, valid);\n if (!allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n }\n }\n function applyAdditionalSchema(key, valid, errors) {\n const subschema = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: util_1.Type.Str,\n };\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n });\n }\n cxt.subschema(subschema, valid);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=additionalProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_1 = require(\"../../compile/validate\");\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst def = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, \"additionalProperties\"));\n }\n const allProps = (0, code_1.allSchemaProperties)(schema);\n for (const prop of allProps) {\n it.definedProperties.add(prop);\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);\n }\n const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));\n if (properties.length === 0)\n return;\n const valid = gen.name(\"valid\");\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop);\n }\n else {\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties));\n applyPropertySchema(prop);\n if (!it.allErrors)\n gen.else().var(valid, true);\n gen.endIf();\n }\n cxt.it.definedProperties.add(prop);\n cxt.ok(valid);\n }\n function hasDefault(prop) {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;\n }\n function applyPropertySchema(prop) {\n cxt.subschema({\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n }, valid);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=properties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst util_2 = require(\"../../compile/util\");\nconst def = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, data, parentSchema, it } = cxt;\n const { opts } = it;\n const patterns = (0, code_1.allSchemaProperties)(schema);\n const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));\n if (patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))) {\n return;\n }\n const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties;\n const valid = gen.name(\"valid\");\n if (it.props !== true && !(it.props instanceof codegen_1.Name)) {\n it.props = (0, util_2.evaluatedPropsToName)(gen, it.props);\n }\n const { props } = it;\n validatePatternProperties();\n function validatePatternProperties() {\n for (const pat of patterns) {\n if (checkProperties)\n checkMatchingProperties(pat);\n if (it.allErrors) {\n validateProperties(pat);\n }\n else {\n gen.var(valid, true); // TODO var\n validateProperties(pat);\n gen.if(valid);\n }\n }\n }\n function checkMatchingProperties(pat) {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`);\n }\n }\n }\n function validateProperties(pat) {\n gen.forIn(\"key\", data, (key) => {\n gen.if((0, codegen_1._) `${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat);\n if (!alwaysValid) {\n cxt.subschema({\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: util_2.Type.Str,\n }, valid);\n }\n if (it.opts.unevaluated && props !== true) {\n gen.assign((0, codegen_1._) `${props}[${key}]`, true);\n }\n else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n });\n });\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=patternProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt) {\n const { gen, schema, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n cxt.fail();\n return;\n }\n const valid = gen.name(\"valid\");\n cxt.subschema({\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, valid);\n cxt.failResult(valid, () => cxt.reset(), () => cxt.error());\n },\n error: { message: \"must NOT be valid\" },\n};\nexports.default = def;\n//# sourceMappingURL=not.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst def = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: code_1.validateUnion,\n error: { message: \"must match a schema in anyOf\" },\n};\nexports.default = def;\n//# sourceMappingURL=anyOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"must match exactly one schema in oneOf\",\n params: ({ params }) => (0, codegen_1._) `{passingSchemas: ${params.passing}}`,\n};\nconst def = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n if (it.opts.discriminator && parentSchema.discriminator)\n return;\n const schArr = schema;\n const valid = gen.let(\"valid\", false);\n const passing = gen.let(\"passing\", null);\n const schValid = gen.name(\"_valid\");\n cxt.setParams({ passing });\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n gen.block(validateOneOf);\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n function validateOneOf() {\n schArr.forEach((sch, i) => {\n let schCxt;\n if ((0, util_1.alwaysValidSchema)(it, sch)) {\n gen.var(schValid, true);\n }\n else {\n schCxt = cxt.subschema({\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n }\n if (i > 0) {\n gen\n .if((0, codegen_1._) `${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, (0, codegen_1._) `[${passing}, ${i}]`)\n .else();\n }\n gen.if(schValid, () => {\n gen.assign(valid, true);\n gen.assign(passing, i);\n if (schCxt)\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n });\n });\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=oneOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt) {\n const { gen, schema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const valid = gen.name(\"valid\");\n schema.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n const schCxt = cxt.subschema({ keyword: \"allOf\", schemaProp: i }, valid);\n cxt.ok(valid);\n cxt.mergeEvaluated(schCxt);\n });\n },\n};\nexports.default = def;\n//# sourceMappingURL=allOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params }) => (0, codegen_1.str) `must match \"${params.ifClause}\" schema`,\n params: ({ params }) => (0, codegen_1._) `{failingKeyword: ${params.ifClause}}`,\n};\nconst def = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, parentSchema, it } = cxt;\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n (0, util_1.checkStrictMode)(it, '\"if\" without \"then\" and \"else\" is ignored');\n }\n const hasThen = hasSchema(it, \"then\");\n const hasElse = hasSchema(it, \"else\");\n if (!hasThen && !hasElse)\n return;\n const valid = gen.let(\"valid\", true);\n const schValid = gen.name(\"_valid\");\n validateIf();\n cxt.reset();\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\");\n cxt.setParams({ ifClause });\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause));\n }\n else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"));\n }\n else {\n gen.if((0, codegen_1.not)(schValid), validateClause(\"else\"));\n }\n cxt.pass(valid, () => cxt.error(true));\n function validateIf() {\n const schCxt = cxt.subschema({\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, schValid);\n cxt.mergeEvaluated(schCxt);\n }\n function validateClause(keyword, ifClause) {\n return () => {\n const schCxt = cxt.subschema({ keyword }, schValid);\n gen.assign(valid, schValid);\n cxt.mergeValidEvaluated(schCxt, valid);\n if (ifClause)\n gen.assign(ifClause, (0, codegen_1._) `${keyword}`);\n else\n cxt.setParams({ ifClause: keyword });\n };\n }\n },\n};\nfunction hasSchema(it, keyword) {\n const schema = it.schema[keyword];\n return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema);\n}\nexports.default = def;\n//# sourceMappingURL=if.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({ keyword, parentSchema, it }) {\n if (parentSchema.if === undefined)\n (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"if\" is ignored`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=thenElse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst additionalItems_1 = require(\"./additionalItems\");\nconst prefixItems_1 = require(\"./prefixItems\");\nconst items_1 = require(\"./items\");\nconst items2020_1 = require(\"./items2020\");\nconst contains_1 = require(\"./contains\");\nconst dependencies_1 = require(\"./dependencies\");\nconst propertyNames_1 = require(\"./propertyNames\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst properties_1 = require(\"./properties\");\nconst patternProperties_1 = require(\"./patternProperties\");\nconst not_1 = require(\"./not\");\nconst anyOf_1 = require(\"./anyOf\");\nconst oneOf_1 = require(\"./oneOf\");\nconst allOf_1 = require(\"./allOf\");\nconst if_1 = require(\"./if\");\nconst thenElse_1 = require(\"./thenElse\");\nfunction getApplicator(draft2020 = false) {\n const applicator = [\n // any\n not_1.default,\n anyOf_1.default,\n oneOf_1.default,\n allOf_1.default,\n if_1.default,\n thenElse_1.default,\n // object\n propertyNames_1.default,\n additionalProperties_1.default,\n dependencies_1.default,\n properties_1.default,\n patternProperties_1.default,\n ];\n // array\n if (draft2020)\n applicator.push(prefixItems_1.default, items2020_1.default);\n else\n applicator.push(additionalItems_1.default, items_1.default);\n applicator.push(contains_1.default);\n return applicator;\n}\nexports.default = getApplicator;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dynamicAnchor = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst ref_1 = require(\"../core/ref\");\nconst def = {\n keyword: \"$dynamicAnchor\",\n schemaType: \"string\",\n code: (cxt) => dynamicAnchor(cxt, cxt.schema),\n};\nfunction dynamicAnchor(cxt, anchor) {\n const { gen, it } = cxt;\n it.schemaEnv.root.dynamicAnchors[anchor] = true;\n const v = (0, codegen_1._) `${names_1.default.dynamicAnchors}${(0, codegen_1.getProperty)(anchor)}`;\n const validate = it.errSchemaPath === \"#\" ? it.validateName : _getValidate(cxt);\n gen.if((0, codegen_1._) `!${v}`, () => gen.assign(v, validate));\n}\nexports.dynamicAnchor = dynamicAnchor;\nfunction _getValidate(cxt) {\n const { schemaEnv, schema, self } = cxt.it;\n const { root, baseId, localRefs, meta } = schemaEnv.root;\n const { schemaId } = self.opts;\n const sch = new compile_1.SchemaEnv({ schema, schemaId, root, baseId, localRefs, meta });\n compile_1.compileSchema.call(self, sch);\n return (0, ref_1.getValidate)(cxt, sch);\n}\nexports.default = def;\n//# sourceMappingURL=dynamicAnchor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dynamicRef = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst ref_1 = require(\"../core/ref\");\nconst def = {\n keyword: \"$dynamicRef\",\n schemaType: \"string\",\n code: (cxt) => dynamicRef(cxt, cxt.schema),\n};\nfunction dynamicRef(cxt, ref) {\n const { gen, keyword, it } = cxt;\n if (ref[0] !== \"#\")\n throw new Error(`\"${keyword}\" only supports hash fragment reference`);\n const anchor = ref.slice(1);\n if (it.allErrors) {\n _dynamicRef();\n }\n else {\n const valid = gen.let(\"valid\", false);\n _dynamicRef(valid);\n cxt.ok(valid);\n }\n function _dynamicRef(valid) {\n // TODO the assumption here is that `recursiveRef: #` always points to the root\n // of the schema object, which is not correct, because there may be $id that\n // makes # point to it, and the target schema may not contain dynamic/recursiveAnchor.\n // Because of that 2 tests in recursiveRef.json fail.\n // This is a similar problem to #815 (`$id` doesn't alter resolution scope for `{ \"$ref\": \"#\" }`).\n // (This problem is not tested in JSON-Schema-Test-Suite)\n if (it.schemaEnv.root.dynamicAnchors[anchor]) {\n const v = gen.let(\"_v\", (0, codegen_1._) `${names_1.default.dynamicAnchors}${(0, codegen_1.getProperty)(anchor)}`);\n gen.if(v, _callRef(v, valid), _callRef(it.validateName, valid));\n }\n else {\n _callRef(it.validateName, valid)();\n }\n }\n function _callRef(validate, valid) {\n return valid\n ? () => gen.block(() => {\n (0, ref_1.callRef)(cxt, validate);\n gen.let(valid, true);\n })\n : () => (0, ref_1.callRef)(cxt, validate);\n }\n}\nexports.dynamicRef = dynamicRef;\nexports.default = def;\n//# sourceMappingURL=dynamicRef.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dynamicAnchor_1 = require(\"./dynamicAnchor\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"$recursiveAnchor\",\n schemaType: \"boolean\",\n code(cxt) {\n if (cxt.schema)\n (0, dynamicAnchor_1.dynamicAnchor)(cxt, \"\");\n else\n (0, util_1.checkStrictMode)(cxt.it, \"$recursiveAnchor: false is ignored\");\n },\n};\nexports.default = def;\n//# sourceMappingURL=recursiveAnchor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dynamicRef_1 = require(\"./dynamicRef\");\nconst def = {\n keyword: \"$recursiveRef\",\n schemaType: \"string\",\n code: (cxt) => (0, dynamicRef_1.dynamicRef)(cxt, cxt.schema),\n};\nexports.default = def;\n//# sourceMappingURL=recursiveRef.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dynamicAnchor_1 = require(\"./dynamicAnchor\");\nconst dynamicRef_1 = require(\"./dynamicRef\");\nconst recursiveAnchor_1 = require(\"./recursiveAnchor\");\nconst recursiveRef_1 = require(\"./recursiveRef\");\nconst dynamic = [dynamicAnchor_1.default, dynamicRef_1.default, recursiveAnchor_1.default, recursiveRef_1.default];\nexports.default = dynamic;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dependencies_1 = require(\"../applicator/dependencies\");\nconst def = {\n keyword: \"dependentRequired\",\n type: \"object\",\n schemaType: \"object\",\n error: dependencies_1.error,\n code: (cxt) => (0, dependencies_1.validatePropertyDeps)(cxt),\n};\nexports.default = def;\n//# sourceMappingURL=dependentRequired.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dependencies_1 = require(\"./dependencies\");\nconst def = {\n keyword: \"dependentSchemas\",\n type: \"object\",\n schemaType: \"object\",\n code: (cxt) => (0, dependencies_1.validateSchemaDeps)(cxt),\n};\nexports.default = def;\n//# sourceMappingURL=dependentSchemas.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: [\"maxContains\", \"minContains\"],\n type: \"array\",\n schemaType: \"number\",\n code({ keyword, parentSchema, it }) {\n if (parentSchema.contains === undefined) {\n (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"contains\" is ignored`);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitContains.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dependentRequired_1 = require(\"./validation/dependentRequired\");\nconst dependentSchemas_1 = require(\"./applicator/dependentSchemas\");\nconst limitContains_1 = require(\"./validation/limitContains\");\nconst next = [dependentRequired_1.default, dependentSchemas_1.default, limitContains_1.default];\nexports.default = next;\n//# sourceMappingURL=next.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst names_1 = require(\"../../compile/names\");\nconst error = {\n message: \"must NOT have unevaluated properties\",\n params: ({ params }) => (0, codegen_1._) `{unevaluatedProperty: ${params.unevaluatedProperty}}`,\n};\nconst def = {\n keyword: \"unevaluatedProperties\",\n type: \"object\",\n schemaType: [\"boolean\", \"object\"],\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, data, errsCount, it } = cxt;\n /* istanbul ignore if */\n if (!errsCount)\n throw new Error(\"ajv implementation error\");\n const { allErrors, props } = it;\n if (props instanceof codegen_1.Name) {\n gen.if((0, codegen_1._) `${props} !== true`, () => gen.forIn(\"key\", data, (key) => gen.if(unevaluatedDynamic(props, key), () => unevaluatedPropCode(key))));\n }\n else if (props !== true) {\n gen.forIn(\"key\", data, (key) => props === undefined\n ? unevaluatedPropCode(key)\n : gen.if(unevaluatedStatic(props, key), () => unevaluatedPropCode(key)));\n }\n it.props = true;\n cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n function unevaluatedPropCode(key) {\n if (schema === false) {\n cxt.setParams({ unevaluatedProperty: key });\n cxt.error();\n if (!allErrors)\n gen.break();\n return;\n }\n if (!(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.name(\"valid\");\n cxt.subschema({\n keyword: \"unevaluatedProperties\",\n dataProp: key,\n dataPropType: util_1.Type.Str,\n }, valid);\n if (!allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n }\n function unevaluatedDynamic(evaluatedProps, key) {\n return (0, codegen_1._) `!${evaluatedProps} || !${evaluatedProps}[${key}]`;\n }\n function unevaluatedStatic(evaluatedProps, key) {\n const ps = [];\n for (const p in evaluatedProps) {\n if (evaluatedProps[p] === true)\n ps.push((0, codegen_1._) `${key} !== ${p}`);\n }\n return (0, codegen_1.and)(...ps);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=unevaluatedProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"unevaluatedItems\",\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n error,\n code(cxt) {\n const { gen, schema, data, it } = cxt;\n const items = it.items || 0;\n if (items === true)\n return;\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n if (schema === false) {\n cxt.setParams({ len: items });\n cxt.fail((0, codegen_1._) `${len} > ${items}`);\n }\n else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items}`);\n gen.if((0, codegen_1.not)(valid), () => validateItems(valid, items));\n cxt.ok(valid);\n }\n it.items = true;\n function validateItems(valid, from) {\n gen.forRange(\"i\", from, len, (i) => {\n cxt.subschema({ keyword: \"unevaluatedItems\", dataProp: i, dataPropType: util_1.Type.Num }, valid);\n if (!it.allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n });\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=unevaluatedItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst unevaluatedProperties_1 = require(\"./unevaluatedProperties\");\nconst unevaluatedItems_1 = require(\"./unevaluatedItems\");\nconst unevaluated = [unevaluatedProperties_1.default, unevaluatedItems_1.default];\nexports.default = unevaluated;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match format \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{format: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt, ruleType) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n const { opts, errSchemaPath, schemaEnv, self } = it;\n if (!opts.validateFormats)\n return;\n if ($data)\n validate$DataFormat();\n else\n validateFormat();\n function validate$DataFormat() {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n });\n const fDef = gen.const(\"fDef\", (0, codegen_1._) `${fmts}[${schemaCode}]`);\n const fType = gen.let(\"fType\");\n const format = gen.let(\"format\");\n // TODO simplify\n gen.if((0, codegen_1._) `typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._) `${fDef}.type || \"string\"`).assign(format, (0, codegen_1._) `${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._) `\"string\"`).assign(format, fDef));\n cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt()));\n function unknownFmt() {\n if (opts.strictSchema === false)\n return codegen_1.nil;\n return (0, codegen_1._) `${schemaCode} && !${format}`;\n }\n function invalidFmt() {\n const callFormat = schemaEnv.$async\n ? (0, codegen_1._) `(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : (0, codegen_1._) `${format}(${data})`;\n const validData = (0, codegen_1._) `(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`;\n return (0, codegen_1._) `${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`;\n }\n }\n function validateFormat() {\n const formatDef = self.formats[schema];\n if (!formatDef) {\n unknownFormat();\n return;\n }\n if (formatDef === true)\n return;\n const [fmtType, format, fmtRef] = getFormat(formatDef);\n if (fmtType === ruleType)\n cxt.pass(validCondition());\n function unknownFormat() {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg());\n return;\n }\n throw new Error(unknownMsg());\n function unknownMsg() {\n return `unknown format \"${schema}\" ignored in schema at path \"${errSchemaPath}\"`;\n }\n }\n function getFormat(fmtDef) {\n const code = fmtDef instanceof RegExp\n ? (0, codegen_1.regexpCode)(fmtDef)\n : opts.code.formats\n ? (0, codegen_1._) `${opts.code.formats}${(0, codegen_1.getProperty)(schema)}`\n : undefined;\n const fmt = gen.scopeValue(\"formats\", { key: schema, ref: fmtDef, code });\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, (0, codegen_1._) `${fmt}.validate`];\n }\n return [\"string\", fmtDef, fmt];\n }\n function validCondition() {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async)\n throw new Error(\"async format in sync schema\");\n return (0, codegen_1._) `await ${fmtRef}(${data})`;\n }\n return typeof format == \"function\" ? (0, codegen_1._) `${fmtRef}(${data})` : (0, codegen_1._) `${fmtRef}.test(${data})`;\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst format_1 = require(\"./format\");\nconst format = [format_1.default];\nexports.default = format;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.contentVocabulary = exports.metadataVocabulary = void 0;\nexports.metadataVocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n];\nexports.contentVocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n];\n//# sourceMappingURL=metadata.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"./core\");\nconst validation_1 = require(\"./validation\");\nconst applicator_1 = require(\"./applicator\");\nconst dynamic_1 = require(\"./dynamic\");\nconst next_1 = require(\"./next\");\nconst unevaluated_1 = require(\"./unevaluated\");\nconst format_1 = require(\"./format\");\nconst metadata_1 = require(\"./metadata\");\nconst draft2020Vocabularies = [\n dynamic_1.default,\n core_1.default,\n validation_1.default,\n (0, applicator_1.default)(true),\n format_1.default,\n metadata_1.metadataVocabulary,\n metadata_1.contentVocabulary,\n next_1.default,\n unevaluated_1.default,\n];\nexports.default = draft2020Vocabularies;\n//# sourceMappingURL=draft2020.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DiscrError = void 0;\nvar DiscrError;\n(function (DiscrError) {\n DiscrError[\"Tag\"] = \"tag\";\n DiscrError[\"Mapping\"] = \"mapping\";\n})(DiscrError || (exports.DiscrError = DiscrError = {}));\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst types_1 = require(\"../discriminator/types\");\nconst compile_1 = require(\"../../compile\");\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._) `{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n};\nconst def = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt) {\n const { gen, data, schema, parentSchema, it } = cxt;\n const { oneOf } = parentSchema;\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\");\n }\n const tagName = schema.propertyName;\n if (typeof tagName != \"string\")\n throw new Error(\"discriminator: requires propertyName\");\n if (schema.mapping)\n throw new Error(\"discriminator: mapping is not supported\");\n if (!oneOf)\n throw new Error(\"discriminator: requires oneOf keyword\");\n const valid = gen.let(\"valid\", false);\n const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(tagName)}`);\n gen.if((0, codegen_1._) `typeof ${tag} == \"string\"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName }));\n cxt.ok(valid);\n function validateMapping() {\n const mapping = getMapping();\n gen.if(false);\n for (const tagValue in mapping) {\n gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n gen.assign(valid, applyTagSchema(mapping[tagValue]));\n }\n gen.else();\n cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName });\n gen.endIf();\n }\n function applyTagSchema(schemaProp) {\n const _valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({ keyword: \"oneOf\", schemaProp }, _valid);\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n return _valid;\n }\n function getMapping() {\n var _a;\n const oneOfMapping = {};\n const topRequired = hasRequired(parentSchema);\n let tagRequired = true;\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i];\n if ((sch === null || sch === void 0 ? void 0 : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) {\n const ref = sch.$ref;\n sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref);\n if (sch instanceof compile_1.SchemaEnv)\n sch = sch.schema;\n if (sch === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref);\n }\n const propSch = (_a = sch === null || sch === void 0 ? void 0 : sch.properties) === null || _a === void 0 ? void 0 : _a[tagName];\n if (typeof propSch != \"object\") {\n throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`);\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch));\n addMappings(propSch, i);\n }\n if (!tagRequired)\n throw new Error(`discriminator: \"${tagName}\" must be required`);\n return oneOfMapping;\n function hasRequired({ required }) {\n return Array.isArray(required) && required.includes(tagName);\n }\n function addMappings(sch, i) {\n if (sch.const) {\n addMapping(sch.const, i);\n }\n else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i);\n }\n }\n else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`);\n }\n }\n function addMapping(tagValue, i) {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`);\n }\n oneOfMapping[tagValue] = i;\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=index.js.map","","","","","","","","","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst metaSchema = require(\"./schema.json\");\nconst applicator = require(\"./meta/applicator.json\");\nconst unevaluated = require(\"./meta/unevaluated.json\");\nconst content = require(\"./meta/content.json\");\nconst core = require(\"./meta/core.json\");\nconst format = require(\"./meta/format-annotation.json\");\nconst metadata = require(\"./meta/meta-data.json\");\nconst validation = require(\"./meta/validation.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nfunction addMetaSchema2020($data) {\n ;\n [\n metaSchema,\n applicator,\n unevaluated,\n content,\n core,\n with$data(this, format),\n metadata,\n with$data(this, validation),\n ].forEach((sch) => this.addMetaSchema(sch, undefined, false));\n return this;\n function with$data(ajv, sch) {\n return $data ? ajv.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch;\n }\n}\nexports.default = addMetaSchema2020;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv2020 = void 0;\nconst core_1 = require(\"./core\");\nconst draft2020_1 = require(\"./vocabularies/draft2020\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst json_schema_2020_12_1 = require(\"./refs/json-schema-2020-12\");\nconst META_SCHEMA_ID = \"https://json-schema.org/draft/2020-12/schema\";\nclass Ajv2020 extends core_1.default {\n constructor(opts = {}) {\n super({\n ...opts,\n dynamicRef: true,\n next: true,\n unevaluated: true,\n });\n }\n _addVocabularies() {\n super._addVocabularies();\n draft2020_1.default.forEach((v) => this.addVocabulary(v));\n if (this.opts.discriminator)\n this.addKeyword(discriminator_1.default);\n }\n _addDefaultMetaSchema() {\n super._addDefaultMetaSchema();\n const { $data, meta } = this.opts;\n if (!meta)\n return;\n json_schema_2020_12_1.default.call(this, $data);\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n }\n defaultMeta() {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n }\n}\nexports.Ajv2020 = Ajv2020;\nmodule.exports = exports = Ajv2020;\nmodule.exports.Ajv2020 = Ajv2020;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv2020;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=2020.js.map","// Generated by scripts/generate.ts. Do not edit.\n\nexport const generatedSchemas: Readonly<Record<string, object>> = {\n \"data-source\": {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n title: \"Fluid Portal Data Source\",\n examples: [\n {\n sources: [\n {\n type: \"custom\",\n selectedItems: [],\n targetProps: [\"items\"],\n },\n ],\n },\n ],\n type: \"object\",\n properties: {\n sources: {\n type: \"array\",\n items: {\n $ref: \"#/$defs/source\",\n },\n description: \"Ordered data sources evaluated for this widget.\",\n },\n loading: {\n type: \"object\",\n properties: {\n showSkeleton: {\n type: \"boolean\",\n description: \"Whether the host displays a loading skeleton.\",\n },\n },\n additionalProperties: false,\n description: \"Presentation options used while data is loading.\",\n },\n error: {\n type: \"object\",\n properties: {\n fallback: {\n $ref: \"#/$defs/jsonObject\",\n description:\n \"JSON props applied when every data-source attempt fails.\",\n },\n retryCount: {\n type: \"integer\",\n minimum: 0,\n description: \"Number of retries after the initial failed request.\",\n },\n retryDelay: {\n type: \"number\",\n minimum: 0,\n description: \"Delay in milliseconds between request attempts.\",\n },\n },\n additionalProperties: false,\n description: \"Fallback and retry behavior for failed data loading.\",\n },\n },\n required: [\"sources\"],\n additionalProperties: false,\n $defs: {\n jsonValue: {\n anyOf: [\n {\n type: \"null\",\n },\n {\n type: \"boolean\",\n },\n {\n type: \"number\",\n },\n {\n type: \"string\",\n },\n {\n type: \"array\",\n items: {\n $ref: \"#/$defs/jsonValue\",\n },\n },\n {\n type: \"object\",\n additionalProperties: {\n $ref: \"#/$defs/jsonValue\",\n },\n },\n ],\n },\n jsonObject: {\n type: \"object\",\n additionalProperties: {\n $ref: \"#/$defs/jsonValue\",\n },\n },\n selectedItem: {\n type: \"object\",\n properties: {\n id: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"number\",\n },\n ],\n description: \"Stable identifier of the selected Fluid item.\",\n },\n shareableType: {\n enum: [\"Medium\", \"Page\", \"EnrollmentPack\", \"Library\", \"Product\"],\n description:\n \"Fluid resource kind represented by the selected item.\",\n },\n cachedData: {\n type: \"object\",\n properties: {\n title: {\n type: \"string\",\n description: \"Cached display title.\",\n },\n imageUrl: {\n type: \"string\",\n description: \"Cached display image URL.\",\n },\n kind: {\n type: \"string\",\n description: \"Cached media or resource subtype.\",\n },\n },\n additionalProperties: false,\n description:\n \"Display data cached with the selection for authoring.\",\n },\n widgetConfig: {\n $ref: \"#/$defs/jsonObject\",\n description:\n \"Widget-specific JSON configuration for the selected item.\",\n },\n },\n required: [\"id\", \"shareableType\"],\n additionalProperties: false,\n },\n source: {\n oneOf: [\n {\n type: \"object\",\n properties: {\n type: {\n const: \"api\",\n description: \"Data-source strategy discriminator.\",\n },\n presetId: {\n type: \"string\",\n description: \"Registered Fluid API preset identifier.\",\n },\n endpoint: {\n type: \"string\",\n description: \"HTTP endpoint used by this API data source.\",\n },\n method: {\n enum: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n description: \"HTTP method used by this API data source.\",\n },\n headers: {\n type: \"object\",\n additionalProperties: {\n type: \"string\",\n },\n description:\n \"Static HTTP headers sent by this API data source.\",\n },\n body: {\n $ref: \"#/$defs/jsonValue\",\n description: \"JSON request body sent by this API data source.\",\n },\n resultPath: {\n type: \"string\",\n description:\n \"Dot-separated path that selects data from the response.\",\n },\n targetProps: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n description:\n \"Widget prop keys populated from the resolved result.\",\n },\n transform: {\n type: \"string\",\n description:\n \"Registered result transform applied before prop mapping.\",\n },\n variables: {\n type: \"object\",\n additionalProperties: {\n type: \"string\",\n },\n description:\n \"Template variables substituted into request configuration.\",\n },\n refreshInterval: {\n type: \"number\",\n minimum: 0,\n description:\n \"Automatic refresh interval in milliseconds; zero disables refresh.\",\n },\n },\n required: [\"type\", \"endpoint\", \"targetProps\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n type: {\n const: \"custom\",\n description: \"Data-source strategy discriminator.\",\n },\n selectedItems: {\n type: \"array\",\n items: {\n $ref: \"#/$defs/selectedItem\",\n },\n description: \"Author-selected Fluid resources.\",\n },\n targetProps: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n description:\n \"Widget prop keys populated from the selected resources.\",\n },\n transform: {\n type: \"string\",\n description:\n \"Registered result transform applied before prop mapping.\",\n },\n refreshInterval: {\n type: \"number\",\n minimum: 0,\n description:\n \"Automatic refresh interval in milliseconds; zero disables refresh.\",\n },\n },\n required: [\"type\", \"selectedItems\", \"targetProps\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n type: {\n const: \"static\",\n description: \"Data-source strategy discriminator.\",\n },\n staticType: {\n enum: [\"collections\", \"categories\", \"tags\"],\n description: \"Static Fluid collection kind to resolve.\",\n },\n selectedId: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"number\",\n },\n ],\n description: \"Identifier of the selected static collection.\",\n },\n cachedData: {\n type: \"object\",\n properties: {\n title: {\n type: \"string\",\n description:\n \"Cached display title for the selected collection.\",\n },\n imageUrl: {\n type: \"string\",\n description:\n \"Cached display image URL for the selected collection.\",\n },\n },\n additionalProperties: false,\n description:\n \"Display data cached with the selected collection.\",\n },\n targetProps: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n description:\n \"Widget prop keys populated from the selected collection.\",\n },\n transform: {\n type: \"string\",\n description:\n \"Registered result transform applied before prop mapping.\",\n },\n refreshInterval: {\n type: \"number\",\n minimum: 0,\n description:\n \"Automatic refresh interval in milliseconds; zero disables refresh.\",\n },\n },\n required: [\"type\", \"staticType\", \"selectedId\", \"targetProps\"],\n additionalProperties: false,\n },\n ],\n },\n },\n description:\n \"Authoritative schema for a Fluid portal data-source resource.\",\n },\n \"theme-config\": {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://assets.fluid.app/docs/schema/portal/1.5.0/theme-config.schema.json\",\n title: \"Fluid Portal Structured Theme Configuration\",\n examples: [\n {\n id: \"default\",\n name: \"Default\",\n light: {\n background: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n foreground: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n primary: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n secondary: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n accent: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n muted: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n destructive: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n },\n dark: {},\n fontSizes: {\n extraSmall: \"0.75rem\",\n small: \"0.875rem\",\n regular: \"1rem\",\n large: \"1.125rem\",\n extraLarge: \"1.25rem\",\n giant: \"1.5rem\",\n },\n fontFamilies: {\n header: \"Inter\",\n body: \"Inter\",\n },\n spacing: \"0.25rem\",\n radii: {\n small: \"0.25rem\",\n medium: \"0.5rem\",\n large: \"0.75rem\",\n extraLarge: \"1rem\",\n },\n },\n ],\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n description: \"Stable identifier of the structured theme configuration.\",\n },\n name: {\n type: \"string\",\n description:\n \"Human-readable name of the structured theme configuration.\",\n },\n light: {\n type: \"object\",\n properties: {\n background: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Foreground OKLCH color for this semantic role.\",\n },\n },\n required: [\"base\", \"foreground\"],\n additionalProperties: false,\n description: \"Light-mode background semantic color pair.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Foreground OKLCH color for this semantic role.\",\n },\n },\n required: [\"base\", \"foreground\"],\n additionalProperties: false,\n description: \"Light-mode foreground semantic color pair.\",\n },\n primary: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Foreground OKLCH color for this semantic role.\",\n },\n },\n required: [\"base\", \"foreground\"],\n additionalProperties: false,\n description: \"Light-mode primary semantic color pair.\",\n },\n secondary: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Foreground OKLCH color for this semantic role.\",\n },\n },\n required: [\"base\", \"foreground\"],\n additionalProperties: false,\n description: \"Light-mode secondary semantic color pair.\",\n },\n accent: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Foreground OKLCH color for this semantic role.\",\n },\n },\n required: [\"base\", \"foreground\"],\n additionalProperties: false,\n description: \"Light-mode accent semantic color pair.\",\n },\n muted: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Foreground OKLCH color for this semantic role.\",\n },\n },\n required: [\"base\", \"foreground\"],\n additionalProperties: false,\n description: \"Light-mode muted semantic color pair.\",\n },\n destructive: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description: \"Foreground OKLCH color for this semantic role.\",\n },\n },\n required: [\"base\", \"foreground\"],\n additionalProperties: false,\n description: \"Light-mode destructive semantic color pair.\",\n },\n },\n required: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"destructive\",\n ],\n additionalProperties: false,\n description: \"Required semantic color pairs for light mode.\",\n },\n dark: {\n type: \"object\",\n properties: {\n background: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode foreground OKLCH color for this semantic role.\",\n },\n },\n additionalProperties: false,\n description: \"Dark-mode background semantic color override.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode foreground OKLCH color for this semantic role.\",\n },\n },\n additionalProperties: false,\n description: \"Dark-mode foreground semantic color override.\",\n },\n primary: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode foreground OKLCH color for this semantic role.\",\n },\n },\n additionalProperties: false,\n description: \"Dark-mode primary semantic color override.\",\n },\n secondary: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode foreground OKLCH color for this semantic role.\",\n },\n },\n additionalProperties: false,\n description: \"Dark-mode secondary semantic color override.\",\n },\n accent: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode foreground OKLCH color for this semantic role.\",\n },\n },\n additionalProperties: false,\n description: \"Dark-mode accent semantic color override.\",\n },\n muted: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode foreground OKLCH color for this semantic role.\",\n },\n },\n additionalProperties: false,\n description: \"Dark-mode muted semantic color override.\",\n },\n destructive: {\n type: \"object\",\n properties: {\n base: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode base OKLCH color for this semantic role.\",\n },\n foreground: {\n type: \"object\",\n properties: {\n l: {\n type: \"number\",\n description: \"OKLCH lightness component.\",\n },\n c: {\n type: \"number\",\n description: \"OKLCH chroma component.\",\n },\n h: {\n type: \"number\",\n description: \"OKLCH hue component in degrees.\",\n },\n },\n required: [\"l\", \"c\", \"h\"],\n additionalProperties: false,\n description:\n \"Optional dark-mode foreground OKLCH color for this semantic role.\",\n },\n },\n additionalProperties: false,\n description: \"Dark-mode destructive semantic color override.\",\n },\n },\n additionalProperties: false,\n description: \"Optional semantic color overrides for dark mode.\",\n },\n fontSizes: {\n type: \"object\",\n properties: {\n extraSmall: {\n type: \"string\",\n description: \"Extra-small font-size token.\",\n },\n small: {\n type: \"string\",\n description: \"Small font-size token.\",\n },\n regular: {\n type: \"string\",\n description: \"Regular body font-size token.\",\n },\n large: {\n type: \"string\",\n description: \"Large font-size token.\",\n },\n extraLarge: {\n type: \"string\",\n description: \"Extra-large font-size token.\",\n },\n giant: {\n type: \"string\",\n description: \"Largest display font-size token.\",\n },\n },\n required: [\n \"extraSmall\",\n \"small\",\n \"regular\",\n \"large\",\n \"extraLarge\",\n \"giant\",\n ],\n additionalProperties: false,\n description: \"Named font-size tokens used by portal components.\",\n },\n fontFamilies: {\n type: \"object\",\n properties: {\n header: {\n type: \"string\",\n description: \"Font family used for headings.\",\n },\n body: {\n type: \"string\",\n description: \"Font family used for body copy.\",\n },\n },\n required: [\"header\", \"body\"],\n additionalProperties: false,\n description: \"Header and body font-family tokens.\",\n },\n spacing: {\n type: \"string\",\n description: \"Base spacing token used to derive layout gaps.\",\n },\n radii: {\n type: \"object\",\n properties: {\n small: {\n type: \"string\",\n description: \"Small border-radius token.\",\n },\n medium: {\n type: \"string\",\n description: \"Medium border-radius token.\",\n },\n large: {\n type: \"string\",\n description: \"Large border-radius token.\",\n },\n extraLarge: {\n type: \"string\",\n description: \"Extra-large border-radius token.\",\n },\n },\n required: [\"small\", \"medium\", \"large\", \"extraLarge\"],\n additionalProperties: false,\n description: \"Named border-radius tokens used by portal components.\",\n },\n syncWithBrandColors: {\n type: \"boolean\",\n description: \"Whether Fluid brand colors update semantic colors.\",\n },\n },\n required: [\n \"id\",\n \"name\",\n \"light\",\n \"dark\",\n \"fontSizes\",\n \"fontFamilies\",\n \"spacing\",\n \"radii\",\n ],\n additionalProperties: false,\n description:\n \"Authoritative schema for Fluid portal structured theme configuration.\",\n },\n widget: {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://assets.fluid.app/docs/schema/portal/1.5.0/widget.schema.json\",\n title: \"Fluid Portal Widget Node\",\n examples: [\n {\n id: \"welcome\",\n type: \"TextWidget\",\n props: {\n title: \"Welcome\",\n description: \"Start here\",\n },\n },\n ],\n $ref: \"#/$defs/widgetNode\",\n $defs: {\n jsonValue: {\n anyOf: [\n {\n type: \"null\",\n },\n {\n type: \"boolean\",\n },\n {\n type: \"number\",\n },\n {\n type: \"string\",\n },\n {\n type: \"array\",\n items: {\n $ref: \"#/$defs/jsonValue\",\n },\n },\n {\n type: \"object\",\n additionalProperties: {\n $ref: \"#/$defs/jsonValue\",\n },\n },\n ],\n },\n jsonObject: {\n type: \"object\",\n additionalProperties: {\n $ref: \"#/$defs/jsonValue\",\n },\n },\n colorOption: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n },\n shareableItem: {\n type: \"object\",\n properties: {\n id: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"number\",\n },\n ],\n description: \"Stable identifier of the Fluid resource.\",\n },\n title: {\n type: [\"string\", \"null\"],\n description: \"Display title supplied with the Fluid resource.\",\n },\n image_url: {\n type: [\"string\", \"null\"],\n description:\n \"Legacy snake-case image URL supplied with the resource.\",\n },\n imageUrl: {\n type: [\"string\", \"null\"],\n description: \"Image URL supplied with the Fluid resource.\",\n },\n kind: {\n type: [\"string\", \"null\"],\n description:\n \"Media or resource subtype supplied with the Fluid resource.\",\n },\n type: {\n type: [\"string\", \"null\"],\n description: \"Resource type supplied with the Fluid resource.\",\n },\n shareableType: {\n type: [\"string\", \"null\"],\n description: \"Fluid shareable type supplied with the resource.\",\n },\n share_link: {\n type: [\"string\", \"null\"],\n description: \"Public share URL supplied with the Fluid resource.\",\n },\n videoUrl: {\n type: \"string\",\n description: \"Video URL supplied with the Fluid resource.\",\n },\n price: {\n type: [\"string\", \"number\", \"null\"],\n description: \"Raw string or numeric product price.\",\n },\n display_price: {\n type: [\"string\", \"null\"],\n description: \"Formatted product price.\",\n },\n },\n required: [\"id\"],\n additionalProperties: {\n $ref: \"#/$defs/jsonValue\",\n },\n },\n shareableItemOrUrl: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"null\",\n },\n {\n $ref: \"#/$defs/shareableItem\",\n },\n ],\n },\n widgetNode: {\n oneOf: [\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"AlertWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description: \"Enable the title displayed above the text\",\n default: true,\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"The title\",\n default: \"Heads up!\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the title\",\n default: \"xl\",\n },\n titleFontWeight: {\n enum: [\"normal\", \"medium\", \"semibold\", \"bold\"],\n title: \"Title Font Weight\",\n description: \"Font weight for the title\",\n default: \"bold\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"The color of the title\",\n default: \"foreground\",\n },\n titleAlignment: {\n enum: [\"left\", \"center\", \"right\"],\n title: \"Alignment\",\n description: \"Text alignment for the title\",\n default: \"left\",\n },\n description: {\n type: \"string\",\n title: \"Description\",\n description: \"The text message\",\n default:\n \"You can add components and dependencies to your app using the cli.\",\n },\n descriptionFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Description Font Size\",\n description: \"Font size for the text\",\n default: \"md\",\n },\n descriptionFontWeight: {\n enum: [\"normal\", \"medium\", \"semibold\", \"bold\"],\n title: \"Description Font Weight\",\n description: \"Font weight for the text\",\n default: \"normal\",\n },\n descriptionColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Description Color\",\n description: \"The color of the text\",\n default: \"foreground\",\n },\n descriptionAlignment: {\n enum: [\"left\", \"center\", \"right\"],\n title: \"Alignment\",\n description: \"Text alignment for the description\",\n default: \"left\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the text container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"The padding of the text container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"The border radius of the text container\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"The border width of the text container\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"The border color of the text container\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"AnnouncementWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"The announcement headline\",\n default: \"Announcement\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the title\",\n default: \"lg\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"The color of the title\",\n default: \"foreground\",\n },\n message: {\n type: \"string\",\n title: \"Message\",\n description: \"Optional supporting text\",\n default: \"\",\n },\n messageColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Message Color\",\n description:\n \"The color of the message — kept readable on the background\",\n default: \"muted\",\n },\n ctaText: {\n type: \"string\",\n title: \"Button Text\",\n description:\n \"Optional call-to-action link label (leave blank to hide)\",\n default: \"\",\n },\n ctaHref: {\n type: \"string\",\n title: \"Button Link\",\n description: \"Where the call-to-action link goes\",\n default: \"\",\n },\n tone: {\n enum: [\"promo\", \"info\", \"success\", \"warning\", \"neutral\"],\n title: \"Tone\",\n description:\n \"Picks the leading icon that frames the message\",\n default: \"promo\",\n },\n showIcon: {\n type: \"boolean\",\n title: \"Show Icon\",\n description: \"Show the leading tone icon\",\n default: true,\n },\n showAccentBar: {\n type: \"boolean\",\n title: \"Show Accent Bar\",\n description:\n \"Show the colored accent stripe (left-aligned only)\",\n default: true,\n },\n accentColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Accent Color\",\n description: \"Icon, accent stripe and call-to-action color\",\n default: \"primary\",\n },\n alignment: {\n enum: [\"left\", \"center\", \"right\"],\n title: \"Alignment\",\n description: \"Text alignment\",\n default: \"left\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the announcement banner\",\n default: {\n type: \"solid\",\n color: \"muted\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"The padding of the banner\",\n default: 6,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"The border radius of the banner\",\n default: \"lg\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Width of the banner border\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Color of the banner border\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"BulletListWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description: \"Enable the title displayed above the list\",\n default: true,\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"The title\",\n default: \"List\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the title\",\n default: \"lg\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"The color of the title\",\n default: \"foreground\",\n },\n listType: {\n enum: [\"unordered\", \"ordered\"],\n title: \"List Type\",\n description: \"Ordered (numbered) or unordered (bullets)\",\n default: \"unordered\",\n },\n items: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n title: \"List Items\",\n description: \"Add or remove list items\",\n default: [\"Item 1\", \"Item 2\", \"Item 3\"],\n },\n itemFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Item Font Size\",\n description: \"Font size for list items\",\n default: \"md\",\n },\n itemColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Item Color\",\n description: \"The color of list items\",\n default: \"foreground\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the list container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"The padding of the list container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"The border radius of the list container\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n gapSize: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"],\n title: \"Item Gap\",\n description: \"Gap between list items\",\n default: \"sm\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"CalendarWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description:\n \"Enable the title displayed above the calendar\",\n default: true,\n },\n titleText: {\n type: \"string\",\n title: \"Title\",\n description: \"Title text displayed above the calendar\",\n default: \"Calendar\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the widget title\",\n default: \"xl\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the widget title\",\n default: \"foreground\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the calendar container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description: \"Default text color for calendar content\",\n default: \"foreground\",\n },\n accentColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Accent Color\",\n description:\n \"Drives today highlight, event dots, Today pill, and selected day\",\n default: \"primary\",\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding around the calendar container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the calendar container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the calendar container\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the calendar container\",\n default: \"muted\",\n },\n showYearEyebrow: {\n type: \"boolean\",\n title: \"Year Eyebrow\",\n description:\n \"Small uppercase year label above the month (e.g. '2026 / November').\",\n default: true,\n },\n showTodayButton: {\n type: \"boolean\",\n title: \"Today Button\",\n description:\n \"Show a 'Today' pill when viewing a different month.\",\n default: true,\n },\n showEventDensity: {\n type: \"boolean\",\n title: \"Event Density Dots\",\n description:\n \"Show 1–3 dots per day based on event count (off = single dot).\",\n default: true,\n },\n weekendDim: {\n type: \"boolean\",\n title: \"Dim Weekends\",\n description:\n \"Subtly dim the Sun/Sat day-of-week headers for visual rhythm.\",\n default: true,\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"CardWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n headerEnabled: {\n type: \"boolean\",\n title: \"Show Header\",\n description: \"Toggle header visibility\",\n default: true,\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"Card title text\",\n default: \"Card Title\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the title\",\n default: \"lg\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the title\",\n default: \"foreground\",\n },\n headerBackground: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Header Background\",\n description: \"Background color for the header\",\n default: \"transparent\",\n },\n footerEnabled: {\n type: \"boolean\",\n title: \"Show Footer\",\n description: \"Toggle footer visibility\",\n default: false,\n },\n footerContent: {\n type: \"string\",\n title: \"Footer Text\",\n description: \"Footer content text\",\n default: \"\",\n },\n footerColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Footer Color\",\n description: \"Color for the footer text\",\n default: \"muted\",\n },\n footerBackground: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Footer Background\",\n description: \"Background color for the footer\",\n default: \"transparent\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the card\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Card padding\",\n default: 6,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Card border radius\",\n default: \"xl\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Card border width\",\n default: \"thin\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Card border color\",\n default: \"muted\",\n },\n gapSize: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"],\n title: \"Gap\",\n description: \"Gap between child widgets\",\n default: \"md\",\n },\n children: {\n type: \"array\",\n description:\n \"Child widget nodes rendered inside this container.\",\n items: {\n anyOf: [\n {\n $ref: \"#/$defs/widgetNode\",\n },\n {\n type: \"null\",\n },\n ],\n },\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"CarouselWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n editorialFrame: {\n type: \"boolean\",\n title: \"Editorial Frame\",\n description:\n \"Premium dark canvas with layered shadow and gradient stack. Turn off for a classic transparent carousel.\",\n default: true,\n },\n frameColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Frame Color\",\n description:\n \"Surface color of the carousel canvas. Drives the frame and gradient overlay.\",\n default: \"foreground\",\n },\n headerSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Header Font Size\",\n description: \"Font size for the slide header\",\n default: \"xl\",\n },\n headerColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Header Color\",\n description:\n \"Headline color. Also drives eyebrow, controls and progress bar.\",\n default: \"background\",\n },\n textSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Text Font Size\",\n description: \"Font size for the slide text\",\n default: \"md\",\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description: \"Color variant for the slide text\",\n default: \"background\",\n },\n align: {\n type: \"object\",\n properties: {\n vertical: {\n enum: [\"top\", \"center\", \"bottom\"],\n description:\n \"Vertical alignment within the widget container.\",\n },\n horizontal: {\n enum: [\"left\", \"center\", \"right\"],\n description:\n \"Horizontal alignment within the widget container.\",\n },\n },\n additionalProperties: false,\n title: \"Alignment\",\n description: \"Alignment of the carousel content\",\n default: {\n vertical: \"bottom\",\n horizontal: \"left\",\n },\n },\n textWidth: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|rem|%)$\",\n title: \"Content Width\",\n description: \"Maximum width for slide content\",\n default: \"620px\",\n },\n carouselHeight: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|vh|rem)$\",\n title: \"Carousel Height\",\n description: \"Height of the carousel\",\n default: \"400px\",\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Rounded corners for the carousel\",\n default: \"xl\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the carousel container\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the carousel container\",\n default: \"muted\",\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Inner padding around slide content\",\n default: 8,\n },\n overlayEnabled: {\n type: \"boolean\",\n title: \"Enable Overlay\",\n description: \"Add background overlay to slide content\",\n default: true,\n },\n overlayType: {\n enum: [\"solid\", \"gradient\"],\n title: \"Overlay Type\",\n description:\n \"Overlay style (only applies when editorial frame is off)\",\n default: \"gradient\",\n },\n overlayIntensity: {\n type: \"number\",\n minimum: 0,\n maximum: 100,\n multipleOf: 5,\n title: \"Overlay Intensity\",\n description: \"Opacity of the overlay (0-100)\",\n default: 70,\n },\n showButton: {\n type: \"boolean\",\n title: \"Show Primary Button\",\n description:\n \"Global show/hide for all slide CTAs. Per-slide button content is set on each item under the Data tab (custom sources only).\",\n default: true,\n },\n buttonColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Button Color\",\n description: \"Color variant for the slide button\",\n default: \"background\",\n },\n buttonSize: {\n enum: [\"sm\", \"default\", \"lg\", \"xl\"],\n title: \"Button Size\",\n description: \"Size of the slide button\",\n default: \"default\",\n },\n enableAutoScroll: {\n type: \"boolean\",\n title: \"Enable Auto-Scroll\",\n description:\n \"Automatically advance to the next slide. Progress bar fills at this rate and pauses on hover.\",\n default: false,\n },\n autoScrollInterval: {\n type: \"number\",\n minimum: 1000,\n maximum: 15000,\n multipleOf: 500,\n title: \"Auto-Scroll Interval (ms)\",\n description: \"Time between automatic slide transitions\",\n default: 6500,\n },\n slides: {\n $ref: \"#/$defs/jsonValue\",\n description:\n \"Slides rendered by the carousel, usually supplied by a data source.\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"CatchUpWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description:\n \"Enable the title displayed above the catch ups\",\n default: true,\n },\n titleText: {\n type: \"string\",\n title: \"Title\",\n description: \"Title text displayed above the catch ups\",\n default: \"Catch Ups\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the widget title\",\n default: \"xl\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the widget title\",\n default: \"foreground\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description: \"Default text color for catch up items\",\n default: \"foreground\",\n },\n accentColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Accent Color\",\n description: \"Color used for count display and icons\",\n default: \"primary\",\n },\n maxItems: {\n type: \"number\",\n minimum: 1,\n maximum: 10,\n title: \"Max Items\",\n description: \"Maximum number of catch ups to display\",\n default: 5,\n },\n contactScreenSlug: {\n type: \"string\",\n title: \"Contacts Screen\",\n description:\n \"Screen to open when a catch-up targets a contact (e.g. reply, message).\",\n default: \"contacts\",\n },\n messagingScreenSlug: {\n type: \"string\",\n title: \"Messaging Screen\",\n description:\n \"Screen to open when a catch-up targets a conversation.\",\n default: \"messages\",\n },\n shopScreenSlug: {\n type: \"string\",\n title: \"Shop Screen\",\n description:\n \"Screen to open when a catch-up targets a product.\",\n default: \"shop\",\n },\n shareablesScreenSlug: {\n type: \"string\",\n title: \"Media Screen\",\n description:\n \"Screen to open when a catch-up targets media.\",\n default: \"share\",\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding around the container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"ChartWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description: \"Enable the title displayed above the chart\",\n default: true,\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"The chart title\",\n default: \"Chart Widget\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the chart title\",\n default: \"lg\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the chart title\",\n default: \"foreground\",\n },\n description: {\n type: \"string\",\n title: \"Description\",\n description: \"The chart description\",\n default: \"Displaying sample data\",\n },\n descriptionFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Description Font Size\",\n description: \"Font size for the chart description\",\n default: \"md\",\n },\n descriptionColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Description Color\",\n description: \"Color for the chart description\",\n default: \"foreground\",\n },\n chartType: {\n enum: [\"bar\", \"line\", \"area\", \"pie\"],\n title: \"Chart Type\",\n description: \"Type of chart to display\",\n default: \"bar\",\n },\n showLegend: {\n type: \"boolean\",\n title: \"Show Legend\",\n description: \"Display chart legend\",\n default: false,\n },\n showTooltip: {\n type: \"boolean\",\n title: \"Show Tooltip\",\n description: \"Display tooltip on hover\",\n default: true,\n },\n showGrid: {\n type: \"boolean\",\n title: \"Show Grid\",\n description: \"Display background grid lines\",\n default: true,\n },\n width: {\n type: \"string\",\n title: \"Width\",\n description:\n \"Width of the chart container (CSS value, e.g., 100%, 600px)\",\n default: \"100%\",\n },\n height: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|vh|rem)$\",\n title: \"Height\",\n description: \"Height of the chart\",\n default: \"300px\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the chart container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding for the chart container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the chart container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n dataKey: {\n enum: [\"value\"],\n title: \"Data Key\",\n description: \"Key in the data to use for chart values\",\n default: \"value\",\n },\n xAxisKey: {\n enum: [\"name\"],\n title: \"X-Axis Key\",\n description: \"Key in the data to use for X-axis labels\",\n default: \"name\",\n },\n data: {\n $ref: \"#/$defs/jsonValue\",\n description:\n \"Records plotted by the chart, usually supplied by a data source.\",\n },\n chartConfig: {\n $ref: \"#/$defs/jsonValue\",\n description:\n \"Series labels, colors, and value mappings for the chart data.\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"ContainerWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n gapSize: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"],\n title: \"Gap\",\n description: \"Gap between widgets\",\n default: \"md\",\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding for the container\",\n default: 4,\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n children: {\n type: \"array\",\n description:\n \"Child widget nodes rendered inside this container.\",\n items: {\n anyOf: [\n {\n $ref: \"#/$defs/widgetNode\",\n },\n {\n type: \"null\",\n },\n ],\n },\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"EmbedWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n url: {\n type: \"string\",\n title: \"URL\",\n description: \"The URL of the external site to embed\",\n default: \"\",\n },\n title: {\n type: \"string\",\n title: \"Screen Reader Label\",\n description:\n \"Describes the embed for screen readers and assistive tech. Not visible on the page.\",\n default: \"Embedded Content\",\n },\n displayMode: {\n enum: [\"inline\", \"cover\"],\n title: \"Display Mode\",\n description:\n \"Inline: iframe renders directly. Cover: shows a card that opens the embed in a full-screen modal.\",\n default: \"inline\",\n },\n coverResource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n title: \"Cover Image\",\n description:\n \"Select the image shown before the embed opens\",\n },\n coverUseCustomUrl: {\n type: \"boolean\",\n title: \"Use Custom URL\",\n description:\n \"Enter a custom image URL instead of selecting media\",\n default: false,\n },\n coverImageUrl: {\n type: \"string\",\n title: \"Cover Image URL\",\n description: \"Direct URL to the cover image\",\n default: \"\",\n },\n coverHeight: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|vh|rem)$\",\n title: \"Cover Height\",\n description: \"Height of the cover image area\",\n default: \"320px\",\n },\n coverShowHeader: {\n type: \"boolean\",\n title: \"Show Card Header\",\n description:\n \"Show the header with icon, title, and action buttons\",\n default: true,\n },\n coverHeaderIcon: {\n enum: [\n \"GraduationCap\",\n \"Video\",\n \"BookOpen\",\n \"Globe\",\n \"User\",\n \"Star\",\n \"Heart\",\n \"Trophy\",\n \"Sparkles\",\n \"Zap\",\n \"Gift\",\n \"ShoppingBag\",\n \"Bell\",\n \"Calendar\",\n \"Bookmark\",\n ],\n title: \"Header Icon\",\n description:\n \"Icon displayed in the colored badge on the left\",\n default: \"GraduationCap\",\n },\n coverHeaderIconColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Icon Badge Color\",\n description: \"Background color of the icon badge\",\n default: \"primary\",\n },\n coverTitle: {\n type: \"string\",\n title: \"Header Title\",\n description:\n \"Title shown in the card header and modal (falls back to the widget Title if empty). Available even when the card header is hidden so the modal still has a meaningful title.\",\n default: \"\",\n },\n coverMeta: {\n type: \"string\",\n title: \"Meta Text\",\n description:\n \"Small uppercase meta line below the title (e.g. 'APR 16 · COACHING THE HOSTESS')\",\n default: \"\",\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the embed container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n fullScreen: {\n type: \"boolean\",\n title: \"Full Screen\",\n description:\n \"Inline mode: fill the available space instead of a fixed height\",\n default: false,\n },\n height: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|vh|rem)$\",\n title: \"Height\",\n description: \"Height of the inline embed iframe\",\n default: \"400px\",\n },\n allowFullscreen: {\n type: \"boolean\",\n title: \"Allow Fullscreen\",\n description:\n \"Allow embedded video/content to use fullscreen mode and show the inline expand control when available\",\n default: true,\n },\n loading: {\n enum: [\"lazy\", \"eager\"],\n title: \"Loading\",\n description:\n \"When to load the embedded content (inline mode only)\",\n default: \"lazy\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"ImageWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n title: \"Select Image\",\n description: \"Browse and select an image\",\n },\n useCustomUrl: {\n type: \"boolean\",\n title: \"Use Custom URL\",\n description:\n \"Enter a custom image URL instead of selecting media\",\n default: false,\n },\n src: {\n type: \"string\",\n title: \"Image URL\",\n description: \"The source URL of the image\",\n default:\n \"https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800&auto=format&fit=crop\",\n },\n alt: {\n type: \"string\",\n title: \"Alt Text\",\n description:\n \"Alternative text for the image (for accessibility)\",\n default: \"Placeholder image\",\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n verticalSizing: {\n enum: [\"auto\", \"fixed\"],\n title: \"Vertical Sizing\",\n description: \"How the image height is determined\",\n default: \"auto\",\n },\n fixedHeight: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|vh|rem)$\",\n title: \"Height\",\n description: \"Fixed height of the image container\",\n default: \"200px\",\n },\n displayFit: {\n enum: [\"cover\", \"contain\"],\n title: \"Display Fit\",\n description: \"How the image fills its container\",\n default: \"cover\",\n },\n focusPoint: {\n type: \"string\",\n title: \"Focus Point\",\n description:\n \"The focal point of the image within its container\",\n default: \"center\",\n },\n linkType: {\n enum: [\"url\", \"screen\", \"share\"],\n title: \"Link Type\",\n description:\n \"Choose whether this link opens a URL, screen, or share action\",\n default: \"url\",\n },\n href: {\n type: \"string\",\n title: \"URL\",\n description: \"The destination URL\",\n default: \"\",\n },\n openInNewTab: {\n type: \"boolean\",\n title: \"Open in New Tab\",\n description: \"Whether to open the link in a new tab\",\n default: true,\n },\n screenSlug: {\n type: \"string\",\n title: \"Screen\",\n description: \"Select a screen to navigate to\",\n },\n shareSource: {\n enum: [\"resource\", \"url\"],\n title: \"Share Source\",\n description:\n \"Choose whether the share action uses a resource or URL\",\n default: \"resource\",\n },\n shareResource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n title: \"Shareable Content\",\n description: \"Select content to share\",\n },\n shareUrl: {\n type: \"string\",\n title: \"Share URL\",\n description: \"The URL to share\",\n default: \"\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"LayoutWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n sectionLayout: {\n enum: [\n \"single-column\",\n \"2c-equal\",\n \"2c-left-wider\",\n \"2c-right-wider\",\n \"2c-left-narrow\",\n \"2c-right-narrow\",\n \"3c-equal\",\n \"3c-middle-wider\",\n ],\n title: \"Layout Type\",\n description: \"Column layout configuration\",\n default: \"single-column\",\n },\n gapSize: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"],\n title: \"Gap\",\n description: \"Gap between columns and widgets\",\n default: \"md\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the layout container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding for the layout container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the layout container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n children: {\n type: \"array\",\n description:\n \"Child widget nodes rendered inside this container.\",\n items: {\n anyOf: [\n {\n $ref: \"#/$defs/widgetNode\",\n },\n {\n type: \"null\",\n },\n ],\n },\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"LinkWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n linkType: {\n enum: [\"url\", \"screen\", \"share\"],\n title: \"Link Type\",\n description:\n \"Choose whether this button opens a URL, screen, or share action\",\n default: \"url\",\n },\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The button label text\",\n default: \"Click Here\",\n },\n href: {\n type: \"string\",\n title: \"URL\",\n description: \"The destination URL\",\n default: \"\",\n },\n openInNewTab: {\n type: \"boolean\",\n title: \"Open in New Tab\",\n description: \"Whether to open the link in a new tab\",\n default: true,\n },\n screenSlug: {\n type: \"string\",\n title: \"Screen\",\n description: \"Select a screen to navigate to\",\n },\n shareSource: {\n enum: [\"resource\", \"url\"],\n title: \"Share Source\",\n description:\n \"Choose whether the share action uses a resource or URL\",\n default: \"resource\",\n },\n shareResource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n title: \"Shareable Content\",\n description: \"Select content to share\",\n },\n shareUrl: {\n type: \"string\",\n title: \"Share URL\",\n description: \"The URL to share\",\n default: \"\",\n },\n variant: {\n enum: [\n \"default\",\n \"outline\",\n \"secondary\",\n \"ghost\",\n \"destructive\",\n ],\n title: \"Variant\",\n description: \"The visual style of the button\",\n default: \"default\",\n },\n size: {\n enum: [\"sm\", \"default\", \"lg\", \"xl\"],\n title: \"Size\",\n description: \"The size of the button\",\n default: \"default\",\n },\n fontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Text Size\",\n description: \"The font size of the button text\",\n default: \"sm\",\n },\n underline: {\n type: \"boolean\",\n title: \"Underline\",\n description: \"Underline the button text\",\n default: false,\n },\n alignment: {\n enum: [\"left\", \"center\", \"right\"],\n title: \"Alignment\",\n description: \"Horizontal alignment of the button\",\n default: \"center\",\n },\n fullWidth: {\n type: \"boolean\",\n title: \"Full Width\",\n description:\n \"Makes the button stretch to full container width\",\n default: false,\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Outer container padding\",\n default: 0,\n },\n borderRadiusTL: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description:\n \"Corner radius of the link button (borderRadiusTL corner).\",\n default: \"md\",\n },\n borderRadiusTR: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description:\n \"Corner radius of the link button (borderRadiusTR corner).\",\n default: \"md\",\n },\n borderRadiusBL: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description:\n \"Corner radius of the link button (borderRadiusBL corner).\",\n default: \"md\",\n },\n borderRadiusBR: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description:\n \"Corner radius of the link button (borderRadiusBR corner).\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"ListWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description: \"Enable the title displayed above the list\",\n default: true,\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"Header text for the list\",\n default: \"List\",\n },\n titleSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Size of the list title\",\n default: \"xl\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the list title\",\n default: \"foreground\",\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding inside the container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Rounded corners for the container and images\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"],\n title: \"Gap\",\n description: \"Spacing between items\",\n default: \"md\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background color or image for the widget\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n listType: {\n enum: [\"unordered\", \"ordered\"],\n title: \"List Type\",\n description: \"Type of list layout\",\n default: \"unordered\",\n },\n maxItems: {\n type: \"number\",\n minimum: 1,\n maximum: 100,\n multipleOf: 1,\n title: \"Max Items\",\n description: \"Maximum number of items to display\",\n default: 12,\n },\n imageAspectRatio: {\n enum: [\"square\", \"landscape\", \"portrait\"],\n title: \"Image Aspect Ratio\",\n description:\n \"Aspect ratio for item images (unordered list — ordered layouts use a fixed ratio per axis)\",\n default: \"square\",\n },\n showBadge: {\n type: \"boolean\",\n title: \"Show Discount Badge\",\n description: \"Display discount badge on images\",\n default: true,\n },\n showMetaText: {\n type: \"boolean\",\n title: \"Show QV/CV Text\",\n description: \"Display QV and CV values\",\n default: true,\n },\n columns: {\n type: \"number\",\n minimum: 1,\n maximum: 6,\n multipleOf: 1,\n title: \"Grid Columns\",\n description:\n \"Number of columns in the grid (unordered list only)\",\n default: 3,\n },\n scrollAxis: {\n enum: [\"horizontal\", \"vertical\"],\n title: \"Scroll Direction\",\n description: \"Direction for ordered list scrolling\",\n default: \"horizontal\",\n },\n numberColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Number Color\",\n description: \"Color for ordered list numbers\",\n default: \"primary\",\n },\n numberSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Number Font Size\",\n description:\n \"Size of ordered list numbers (vertical scroll only — horizontal uses a fixed editorial size)\",\n default: \"2xl\",\n },\n itemTitleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Item Title Color\",\n description: \"Color for item titles\",\n default: \"foreground\",\n },\n itemTitleSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Item Title Font Size\",\n description: \"Size of item titles\",\n default: \"sm\",\n },\n descriptionColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Description Color\",\n description: \"Color for descriptions\",\n default: \"foreground\",\n },\n descriptionSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Description Font Size\",\n description: \"Size of descriptions\",\n default: \"sm\",\n },\n priceColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Price Color\",\n description: \"Color for prices\",\n default: \"foreground\",\n },\n priceSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Price Font Size\",\n description: \"Size of prices\",\n default: \"md\",\n },\n originalPriceColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Original Price Color\",\n description: \"Color for crossed-out original prices\",\n default: \"foreground\",\n },\n metaTextColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Meta Text Color\",\n description: \"Color for QV/CV text\",\n default: \"foreground\",\n },\n metaTextSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Meta Text Font Size\",\n description: \"Size of QV/CV text\",\n default: \"xs\",\n },\n showFeaturedSection: {\n type: \"boolean\",\n title: \"Show Featured Section\",\n description: \"Display a featured content section\",\n default: false,\n },\n featuredAsset: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n title: \"Featured Asset\",\n description:\n \"Select a single image or video resource for the featured section\",\n },\n featuredTitle: {\n type: \"string\",\n title: \"Featured Title\",\n description: \"Title for featured section\",\n },\n featuredSubtitle: {\n type: \"string\",\n title: \"Featured Subtitle\",\n description: \"Subtitle for featured section\",\n },\n featuredButtonText: {\n type: \"string\",\n title: \"Featured Button Text\",\n description: \"Text for featured section button\",\n },\n featuredButtonUrl: {\n type: \"string\",\n title: \"Featured Button URL\",\n description: \"URL for featured section button\",\n },\n featuredSubtitleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Featured Subtitle Color\",\n description: \"Color for featured subtitle\",\n default: \"background\",\n },\n featuredSubtitleSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Featured Subtitle Font Size\",\n description: \"Size of featured subtitle\",\n default: \"md\",\n },\n items: {\n $ref: \"#/$defs/jsonValue\",\n description:\n \"Items rendered by the list, usually supplied by a data source.\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"MySiteWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n showPreview: {\n type: \"boolean\",\n title: \"Show Site Preview\",\n description:\n \"Show the live iframe preview of the storefront\",\n default: true,\n },\n showAnalytics: {\n type: \"boolean\",\n title: \"Show Stats\",\n description: \"Visitors and Leads grid in the footer\",\n default: true,\n },\n showLiveBadge: {\n type: \"boolean\",\n title: \"Show LIVE Badge\",\n description: \"Small 'Live' chip in the preview corner\",\n default: true,\n },\n showQR: {\n type: \"boolean\",\n title: \"Show QR Code\",\n description: \"Show a scannable QR code in the card footer\",\n default: true,\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the widget container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description:\n \"Primary text, hairline, and neutral chip color\",\n default: \"foreground\",\n },\n accentColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Accent Color\",\n description:\n \"Drives the Live dot, conversion ring, and Visit CTA\",\n default: \"primary\",\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Corner radius for the widget and inner chips\",\n default: \"xl\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"NestedWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n title: \"Primary Media\",\n description:\n \"Select the primary media displayed in the large panel\",\n },\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description:\n \"Enable the title displayed over the primary media\",\n default: true,\n },\n titleText: {\n type: \"string\",\n title: \"Title\",\n description: \"Main title displayed over the primary media\",\n default: \"Featured Collection\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the widget title\",\n default: \"xl\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the widget title\",\n default: \"background\",\n },\n primaryMediaHeight: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|vh|rem)$\",\n title: \"Primary Media Height\",\n description: \"Height of the primary media container\",\n default: \"400px\",\n },\n titleAlignment: {\n type: \"object\",\n properties: {\n vertical: {\n enum: [\"top\", \"center\", \"bottom\"],\n description:\n \"Vertical alignment within the widget container.\",\n },\n horizontal: {\n enum: [\"left\", \"center\", \"right\"],\n description:\n \"Horizontal alignment within the widget container.\",\n },\n },\n additionalProperties: false,\n title: \"Content Alignment\",\n description:\n \"Alignment of the content inside the primary media\",\n default: {\n horizontal: \"left\",\n vertical: \"bottom\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding used throughout the widget\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Rounded corners for the widget\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n overlayEnabled: {\n type: \"boolean\",\n title: \"Enable Overlay\",\n description:\n \"Add a dark overlay to the primary media for better text readability\",\n default: true,\n },\n overlayType: {\n enum: [\"solid\", \"gradient\"],\n title: \"Overlay Type\",\n description: \"Type of overlay effect\",\n default: \"gradient\",\n },\n overlayIntensity: {\n type: \"number\",\n minimum: 0,\n maximum: 100,\n multipleOf: 5,\n title: \"Overlay Intensity\",\n description: \"Opacity of the overlay (0-100)\",\n default: 50,\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"],\n title: \"Gap\",\n description: \"Gap between nested media items\",\n default: \"md\",\n },\n nestedTextColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Nested Text Color\",\n description: \"Color for nested media labels\",\n default: \"foreground\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background color for nested media container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n shareables: {\n $ref: \"#/$defs/jsonValue\",\n description:\n \"Shareable records rendered in the nested content region.\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"PointsWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Show Title\",\n description: \"Toggle title visibility\",\n default: true,\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description:\n \"Title text displayed above the balance. Leave blank to use the company's configured points label.\",\n default: \"\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the title\",\n default: \"md\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the title\",\n default: \"foreground\",\n },\n balanceColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Balance Color\",\n description: \"Color for the points balance number\",\n default: \"primary\",\n },\n historyEnabled: {\n type: \"boolean\",\n title: \"Show History\",\n description:\n \"Show a collapsible history dropdown below the balance\",\n default: true,\n },\n historyTitle: {\n type: \"string\",\n title: \"History Title\",\n description: \"Title for the history dropdown\",\n default: \"History\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the widget\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description: \"Default text color\",\n default: \"foreground\",\n },\n accentColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Accent Color\",\n description: \"Color for positive points amounts\",\n default: \"primary\",\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Widget padding\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Widget border radius\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Widget border width\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Widget border color\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"QuoteWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n quotes: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n quote: {\n type: \"string\",\n description: \"The quote text shown in the widget.\",\n },\n attribution: {\n type: \"string\",\n description:\n \"Name of the person the quote is attributed to.\",\n },\n role: {\n type: \"string\",\n description:\n \"Role or title shown beneath the attribution name.\",\n },\n },\n required: [\"quote\"],\n additionalProperties: false,\n },\n title: \"Quotes\",\n description:\n \"One or many quotes. Add more to rotate between them.\",\n default: [\n {\n quote: \"Add an inspiring quote here.\",\n },\n ],\n },\n rotation: {\n enum: [\"carousel\", \"daily\"],\n title: \"Rotation\",\n description:\n \"With multiple quotes: auto-scroll carousel, or one per day (quote of the day)\",\n default: \"carousel\",\n },\n autoScrollInterval: {\n type: \"number\",\n minimum: 1500,\n maximum: 30000,\n title: \"Auto-Scroll Interval (ms)\",\n description: \"How long each quote shows before advancing\",\n default: 6500,\n },\n showArrows: {\n type: \"boolean\",\n title: \"Show Arrows\",\n description: \"Show previous / next arrows\",\n default: true,\n },\n showDots: {\n type: \"boolean\",\n title: \"Show Dots\",\n description: \"Show the position dots\",\n default: true,\n },\n quoteFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Quote Font Size\",\n description: \"Font size for the quote\",\n default: \"xl\",\n },\n quoteColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Quote Color\",\n description: \"The color of the quote text\",\n default: \"foreground\",\n },\n attributionColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Attribution Color\",\n description:\n \"The color of the name and role — keep it readable on the background\",\n default: \"foreground\",\n },\n accentColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Accent Color\",\n description:\n \"Quote mark, attribution rule, arrows and active dot\",\n default: \"primary\",\n },\n alignment: {\n enum: [\"left\", \"center\", \"right\"],\n title: \"Alignment\",\n description: \"Text alignment\",\n default: \"left\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the quote container\",\n default: {\n type: \"solid\",\n color: \"muted\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"The padding of the quote container\",\n default: 8,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"The border radius of the quote container\",\n default: \"lg\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Width of the container border\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Color of the container border\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"QuickLinksWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Show Title\",\n description: \"Small heading shown above the link list\",\n default: true,\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"Heading shown above the links\",\n default: \"Quick Links\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the widget title\",\n default: \"md\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the widget title\",\n default: \"foreground\",\n },\n link1Label: {\n type: \"string\",\n title: \"Label\",\n description: \"Text shown on the link\",\n default: \"Profile\",\n },\n link1Url: {\n type: \"string\",\n title: \"URL\",\n description:\n \"Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path.\",\n default: \"#\",\n },\n link1Icon: {\n enum: [\n \"Link\",\n \"User\",\n \"Share2\",\n \"ShoppingBag\",\n \"Video\",\n \"Mail\",\n \"MessageCircle\",\n \"Globe\",\n \"Calendar\",\n \"Bell\",\n \"Heart\",\n \"Star\",\n \"Zap\",\n \"Gift\",\n \"Phone\",\n \"MapPin\",\n \"Play\",\n \"Package\",\n \"ExternalLink\",\n \"Bookmark\",\n \"Trophy\",\n \"Sparkles\",\n ],\n title: \"Icon\",\n description: \"Icon displayed in the colored badge\",\n default: \"User\",\n },\n link1Color: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Badge Color\",\n description: \"Color of the icon badge\",\n default: \"primary\",\n },\n link2Enabled: {\n type: \"boolean\",\n title: \"Show Link 2\",\n description: \"Display link slot 2\",\n default: true,\n },\n link2Label: {\n type: \"string\",\n title: \"Label\",\n description: \"Text shown on the link\",\n default: \"Social\",\n },\n link2Url: {\n type: \"string\",\n title: \"URL\",\n description:\n \"Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path.\",\n default: \"#\",\n },\n link2Icon: {\n enum: [\n \"Link\",\n \"User\",\n \"Share2\",\n \"ShoppingBag\",\n \"Video\",\n \"Mail\",\n \"MessageCircle\",\n \"Globe\",\n \"Calendar\",\n \"Bell\",\n \"Heart\",\n \"Star\",\n \"Zap\",\n \"Gift\",\n \"Phone\",\n \"MapPin\",\n \"Play\",\n \"Package\",\n \"ExternalLink\",\n \"Bookmark\",\n \"Trophy\",\n \"Sparkles\",\n ],\n title: \"Icon\",\n description: \"Icon displayed in the colored badge\",\n default: \"Share2\",\n },\n link2Color: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Badge Color\",\n description: \"Color of the icon badge\",\n default: \"accent\",\n },\n link3Enabled: {\n type: \"boolean\",\n title: \"Show Link 3\",\n description: \"Display link slot 3\",\n default: true,\n },\n link3Label: {\n type: \"string\",\n title: \"Label\",\n description: \"Text shown on the link\",\n default: \"Product Links\",\n },\n link3Url: {\n type: \"string\",\n title: \"URL\",\n description:\n \"Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path.\",\n default: \"#\",\n },\n link3Icon: {\n enum: [\n \"Link\",\n \"User\",\n \"Share2\",\n \"ShoppingBag\",\n \"Video\",\n \"Mail\",\n \"MessageCircle\",\n \"Globe\",\n \"Calendar\",\n \"Bell\",\n \"Heart\",\n \"Star\",\n \"Zap\",\n \"Gift\",\n \"Phone\",\n \"MapPin\",\n \"Play\",\n \"Package\",\n \"ExternalLink\",\n \"Bookmark\",\n \"Trophy\",\n \"Sparkles\",\n ],\n title: \"Icon\",\n description: \"Icon displayed in the colored badge\",\n default: \"ShoppingBag\",\n },\n link3Color: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Badge Color\",\n description: \"Color of the icon badge\",\n default: \"secondary\",\n },\n link4Enabled: {\n type: \"boolean\",\n title: \"Show Link 4\",\n description: \"Display link slot 4\",\n default: true,\n },\n link4Label: {\n type: \"string\",\n title: \"Label\",\n description: \"Text shown on the link\",\n default: \"Video\",\n },\n link4Url: {\n type: \"string\",\n title: \"URL\",\n description:\n \"Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path.\",\n default: \"#\",\n },\n link4Icon: {\n enum: [\n \"Link\",\n \"User\",\n \"Share2\",\n \"ShoppingBag\",\n \"Video\",\n \"Mail\",\n \"MessageCircle\",\n \"Globe\",\n \"Calendar\",\n \"Bell\",\n \"Heart\",\n \"Star\",\n \"Zap\",\n \"Gift\",\n \"Phone\",\n \"MapPin\",\n \"Play\",\n \"Package\",\n \"ExternalLink\",\n \"Bookmark\",\n \"Trophy\",\n \"Sparkles\",\n ],\n title: \"Icon\",\n description: \"Icon displayed in the colored badge\",\n default: \"Video\",\n },\n link4Color: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Badge Color\",\n description: \"Color of the icon badge\",\n default: \"destructive\",\n },\n link5Enabled: {\n type: \"boolean\",\n title: \"Show Link 5\",\n description: \"Display link slot 5\",\n default: false,\n },\n link5Label: {\n type: \"string\",\n title: \"Label\",\n description: \"Text shown on the link\",\n default: \"\",\n },\n link5Url: {\n type: \"string\",\n title: \"URL\",\n description:\n \"Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path.\",\n default: \"#\",\n },\n link5Icon: {\n enum: [\n \"Link\",\n \"User\",\n \"Share2\",\n \"ShoppingBag\",\n \"Video\",\n \"Mail\",\n \"MessageCircle\",\n \"Globe\",\n \"Calendar\",\n \"Bell\",\n \"Heart\",\n \"Star\",\n \"Zap\",\n \"Gift\",\n \"Phone\",\n \"MapPin\",\n \"Play\",\n \"Package\",\n \"ExternalLink\",\n \"Bookmark\",\n \"Trophy\",\n \"Sparkles\",\n ],\n title: \"Icon\",\n description: \"Icon displayed in the colored badge\",\n default: \"Link\",\n },\n link5Color: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Badge Color\",\n description: \"Color of the icon badge\",\n default: \"primary\",\n },\n link6Enabled: {\n type: \"boolean\",\n title: \"Show Link 6\",\n description: \"Display link slot 6\",\n default: false,\n },\n link6Label: {\n type: \"string\",\n title: \"Label\",\n description: \"Text shown on the link\",\n default: \"\",\n },\n link6Url: {\n type: \"string\",\n title: \"URL\",\n description:\n \"Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path.\",\n default: \"#\",\n },\n link6Icon: {\n enum: [\n \"Link\",\n \"User\",\n \"Share2\",\n \"ShoppingBag\",\n \"Video\",\n \"Mail\",\n \"MessageCircle\",\n \"Globe\",\n \"Calendar\",\n \"Bell\",\n \"Heart\",\n \"Star\",\n \"Zap\",\n \"Gift\",\n \"Phone\",\n \"MapPin\",\n \"Play\",\n \"Package\",\n \"ExternalLink\",\n \"Bookmark\",\n \"Trophy\",\n \"Sparkles\",\n ],\n title: \"Icon\",\n description: \"Icon displayed in the colored badge\",\n default: \"Link\",\n },\n link6Color: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Badge Color\",\n description: \"Color of the icon badge\",\n default: \"accent\",\n },\n link7Enabled: {\n type: \"boolean\",\n title: \"Show Link 7\",\n description: \"Display link slot 7\",\n default: false,\n },\n link7Label: {\n type: \"string\",\n title: \"Label\",\n description: \"Text shown on the link\",\n default: \"\",\n },\n link7Url: {\n type: \"string\",\n title: \"URL\",\n description:\n \"Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path.\",\n default: \"#\",\n },\n link7Icon: {\n enum: [\n \"Link\",\n \"User\",\n \"Share2\",\n \"ShoppingBag\",\n \"Video\",\n \"Mail\",\n \"MessageCircle\",\n \"Globe\",\n \"Calendar\",\n \"Bell\",\n \"Heart\",\n \"Star\",\n \"Zap\",\n \"Gift\",\n \"Phone\",\n \"MapPin\",\n \"Play\",\n \"Package\",\n \"ExternalLink\",\n \"Bookmark\",\n \"Trophy\",\n \"Sparkles\",\n ],\n title: \"Icon\",\n description: \"Icon displayed in the colored badge\",\n default: \"Link\",\n },\n link7Color: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Badge Color\",\n description: \"Color of the icon badge\",\n default: \"secondary\",\n },\n link8Enabled: {\n type: \"boolean\",\n title: \"Show Link 8\",\n description: \"Display link slot 8\",\n default: false,\n },\n link8Label: {\n type: \"string\",\n title: \"Label\",\n description: \"Text shown on the link\",\n default: \"\",\n },\n link8Url: {\n type: \"string\",\n title: \"URL\",\n description:\n \"Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path.\",\n default: \"#\",\n },\n link8Icon: {\n enum: [\n \"Link\",\n \"User\",\n \"Share2\",\n \"ShoppingBag\",\n \"Video\",\n \"Mail\",\n \"MessageCircle\",\n \"Globe\",\n \"Calendar\",\n \"Bell\",\n \"Heart\",\n \"Star\",\n \"Zap\",\n \"Gift\",\n \"Phone\",\n \"MapPin\",\n \"Play\",\n \"Package\",\n \"ExternalLink\",\n \"Bookmark\",\n \"Trophy\",\n \"Sparkles\",\n ],\n title: \"Icon\",\n description: \"Icon displayed in the colored badge\",\n default: \"Link\",\n },\n link8Color: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Badge Color\",\n description: \"Color of the icon badge\",\n default: \"destructive\",\n },\n layout: {\n enum: [\"cards\", \"list\"],\n title: \"Layout\",\n description:\n \"Cards: separated tiles. List: grouped rows with dividers.\",\n default: \"cards\",\n },\n iconRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Icon Corner Radius\",\n description: \"Corner radius for the colored icon badge\",\n default: \"lg\",\n },\n showChevron: {\n type: \"boolean\",\n title: \"Show Chevron\",\n description:\n \"Right-aligned chevron indicating each row is a link\",\n default: true,\n },\n openInNewTab: {\n type: \"boolean\",\n title: \"Open in New Tab\",\n description:\n \"Open links in a new tab instead of the same window\",\n default: false,\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the widget container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description:\n \"Label + chevron color, and the base for row backgrounds (via opacity)\",\n default: \"foreground\",\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding around the widget\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description:\n \"Widget border radius (also drives row corners in cards layout)\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Widget border width\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Widget border color\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"QuickShareWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n shareableResource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n title: \"Shareable Content\",\n description:\n \"Select the content to generate a share link for\",\n },\n titleEnabled: {\n type: \"boolean\",\n title: \"Show Title\",\n description: \"Display a title on the hero\",\n default: true,\n },\n titleText: {\n type: \"string\",\n title: \"Title\",\n description:\n \"Custom title text (defaults to the resource title if empty)\",\n default: \"\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the title\",\n default: \"2xl\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the title\",\n default: \"background\",\n },\n showResourceType: {\n type: \"boolean\",\n title: \"Show Resource Type Pill\",\n description:\n \"Display a small type eyebrow chip (Product · Page · Media…)\",\n default: true,\n },\n showShareActions: {\n type: \"boolean\",\n title: \"Show Share Actions\",\n description:\n \"Show Email, Text, and native Share buttons under the link chip\",\n default: true,\n },\n showDomainPrefix: {\n type: \"boolean\",\n title: \"Show Domain Prefix\",\n description:\n \"Include the domain in the link chip (dimmed) with the path emphasized\",\n default: true,\n },\n showBuyButton: {\n type: \"boolean\",\n title: \"Show Buy Button\",\n description:\n \"Display the Buy button (only shown for Product resources)\",\n default: false,\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description:\n \"Default text color for widget content (over the hero)\",\n default: \"background\",\n },\n accentColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Accent Color\",\n description:\n \"Drives the price chip, primary button, and copy-success flash\",\n default: \"primary\",\n },\n overlayEnabled: {\n type: \"boolean\",\n title: \"Enable Overlay\",\n description:\n \"Add editorial gradient stack for legibility over the hero\",\n default: true,\n },\n overlayType: {\n enum: [\"gradient\", \"solid\"],\n title: \"Overlay Type\",\n description:\n \"Gradient only (recommended) or gradient + solid wash (heavier)\",\n default: \"gradient\",\n },\n overlayIntensity: {\n type: \"number\",\n minimum: 0,\n maximum: 100,\n multipleOf: 5,\n title: \"Overlay Intensity\",\n description: \"Opacity of the overlay (0-100)\",\n default: 70,\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding around the widget content\",\n default: 6,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the widget container\",\n default: \"xl\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget container\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget container\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"RecentActivityWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description: \"Display the title and eyebrow above the feed\",\n default: true,\n },\n titleText: {\n type: \"string\",\n title: \"Title\",\n description: \"Title text displayed above the activity feed\",\n default: \"Activity\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the widget title\",\n default: \"xl\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the widget title\",\n default: \"foreground\",\n },\n showEyebrow: {\n type: \"boolean\",\n title: \"Show 'RECENT' Eyebrow\",\n description: \"Small uppercase label above the title\",\n default: true,\n },\n showCountChip: {\n type: \"boolean\",\n title: \"Show Updates Count Chip\",\n description:\n \"Accent pill next to the title showing how many updates\",\n default: true,\n },\n maxItemsToShow: {\n type: \"number\",\n minimum: 1,\n maximum: 20,\n multipleOf: 1,\n title: \"Max Items\",\n description: \"Maximum number of activity items to display\",\n default: 6,\n },\n showRelativeTime: {\n type: \"boolean\",\n title: \"Relative Timestamps\",\n description:\n \"Show 'now / 2m / 1h / 3d' instead of absolute times\",\n default: true,\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the widget container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description: \"Default text color for activity content\",\n default: \"foreground\",\n },\n accentColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Accent Color\",\n description:\n \"Drives the count chip, type badge, initials avatar, and empty-state icon\",\n default: \"primary\",\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding around the widget container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the widget container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget container\",\n default: \"thin\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget container\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"SeparatorWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n orientation: {\n enum: [\"horizontal\", \"vertical\"],\n title: \"Orientation\",\n description: \"Direction of the separator line\",\n default: \"horizontal\",\n },\n color: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Color\",\n description: \"Color of the separator line\",\n default: \"muted\",\n },\n thickness: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px)$\",\n title: \"Thickness\",\n description: \"Thickness of the separator line\",\n default: \"1px\",\n },\n width: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:%)$\",\n title: \"Width\",\n description: \"Width of the separator\",\n default: \"100%\",\n },\n marginTop: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Margin Top\",\n description: \"Space above the separator\",\n default: 4,\n },\n marginBottom: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Margin Bottom\",\n description: \"Space below the separator\",\n default: 4,\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"ShopWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description: \"Enable the heading shown above the grid\",\n default: true,\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"Heading text shown above the grid\",\n default: \"\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color of the heading text\",\n default: \"foreground\",\n },\n showSearch: {\n type: \"boolean\",\n title: \"Show Search\",\n description: \"Display the search input above the grid\",\n default: true,\n },\n showSort: {\n type: \"boolean\",\n title: \"Show Sort\",\n description: \"Display the sort menu above the grid\",\n default: true,\n },\n columns: {\n enum: [2, 3, 4, 5, 6],\n title: \"Columns (desktop)\",\n description:\n \"Max columns at the largest breakpoint. Narrow widgets show 2 columns; wider containers scale up smoothly to the chosen maximum.\",\n default: 4,\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Container background\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Inner spacing around the grid\",\n default: 6,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Container corner radius\",\n default: \"lg\",\n },\n cardBackground: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Card Background\",\n description:\n \"Override the card background color. Leave unset to use the theme's card color.\",\n },\n cardTextColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Card Text\",\n description:\n \"Override title + price color inside each card. Leave unset to use the theme's foreground color.\",\n },\n useDataSource: {\n type: \"boolean\",\n title: \"Use Data Source\",\n description:\n \"Off shows all products from the catalog. On replaces the catalog with a data source — disables search and sort.\",\n default: false,\n },\n pageSize: {\n type: \"number\",\n title: \"Products to show\",\n description:\n \"Up to 10 acts as a hard cap. Above 10 the grid switches to infinite scroll (products load in batches of 10 as you scroll).\",\n default: 25,\n },\n products: {\n $ref: \"#/$defs/jsonValue\",\n description:\n \"Products rendered in the shop grid, usually supplied by a data source.\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"SpacerWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n customHeight: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|vh|rem)$\",\n title: \"Height\",\n description: \"Height of the spacer\",\n default: \"128px\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"TableWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description: \"Enable the title displayed above the table\",\n default: true,\n },\n titleText: {\n type: \"string\",\n title: \"Title\",\n description: \"Title text displayed above the table\",\n default: \"Products\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the widget title\",\n default: \"xl\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the widget title\",\n default: \"foreground\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the table container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n alternatingColorEnabled: {\n type: \"boolean\",\n title: \"Enable Alternating Colors\",\n description: \"Enable alternating colors for table rows\",\n default: true,\n },\n headerBackgroundColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Header Background\",\n description: \"Background color for the table header\",\n default: \"muted\",\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description: \"Default text color for table content\",\n default: \"foreground\",\n },\n headerTextColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Header Text Color\",\n description: \"Text color for the table header\",\n default: \"foreground\",\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding around the table container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the table container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n filterEnabled: {\n type: \"boolean\",\n title: \"Enable Filters\",\n description: \"Show global search and column filters\",\n default: true,\n },\n sortingEnabled: {\n type: \"boolean\",\n title: \"Enable Sorting\",\n description: \"Allow sorting by clicking column headers\",\n default: true,\n },\n paginationEnabled: {\n type: \"boolean\",\n title: \"Enable Pagination\",\n description: \"Split data into pages\",\n default: true,\n },\n maxRowsPerPage: {\n type: \"number\",\n minimum: 1,\n maximum: 50,\n multipleOf: 1,\n title: \"Max Rows Per Page\",\n description: \"Maximum number of rows to display per page\",\n default: 5,\n },\n data: {\n $ref: \"#/$defs/jsonValue\",\n description:\n \"Rows rendered by the table, usually supplied by a data source.\",\n },\n columns: {\n $ref: \"#/$defs/jsonValue\",\n description:\n \"Column definitions used to label and read values from each row.\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"TextWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description: \"Enable the title displayed above the text\",\n default: true,\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"The title\",\n default: \"Heads up!\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the title\",\n default: \"xl\",\n },\n titleFontWeight: {\n enum: [\"normal\", \"medium\", \"semibold\", \"bold\"],\n title: \"Title Font Weight\",\n description: \"Font weight for the title\",\n default: \"bold\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"The color of the title\",\n default: \"foreground\",\n },\n titleAlignment: {\n enum: [\"left\", \"center\", \"right\"],\n title: \"Alignment\",\n description: \"Text alignment for the title\",\n default: \"left\",\n },\n description: {\n type: \"string\",\n title: \"Description\",\n description: \"The text message\",\n default:\n \"You can add components and dependencies to your app using the cli.\",\n },\n descriptionFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Description Font Size\",\n description: \"Font size for the text\",\n default: \"md\",\n },\n descriptionFontWeight: {\n enum: [\"normal\", \"medium\", \"semibold\", \"bold\"],\n title: \"Description Font Weight\",\n description: \"Font weight for the text\",\n default: \"normal\",\n },\n descriptionColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Description Color\",\n description: \"The color of the text\",\n default: \"foreground\",\n },\n descriptionAlignment: {\n enum: [\"left\", \"center\", \"right\"],\n title: \"Alignment\",\n description: \"Text alignment for the description\",\n default: \"left\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the text container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"The padding of the text container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"The border radius of the text container\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"The border width of the text container\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"The border color of the text container\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"ToDoWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n titleEnabled: {\n type: \"boolean\",\n title: \"Widget Title\",\n description:\n \"Enable the title displayed above the todo list\",\n default: true,\n },\n titleText: {\n type: \"string\",\n title: \"Title\",\n description: \"Title text displayed above the todo list\",\n default: \"To-Do\",\n },\n titleFontSize: {\n enum: [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"],\n title: \"Title Font Size\",\n description: \"Font size for the widget title\",\n default: \"xl\",\n },\n titleColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Title Color\",\n description: \"Color for the widget title\",\n default: \"foreground\",\n },\n background: {\n anyOf: [\n {\n type: \"string\",\n },\n {\n type: \"object\",\n properties: {\n type: {\n enum: [\"solid\", \"image\"],\n description: \"Background strategy discriminator.\",\n },\n color: {\n $ref: \"#/$defs/colorOption\",\n description:\n \"Semantic color used by a solid background.\",\n },\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n description:\n \"Fluid resource or public URL used by an image background.\",\n },\n },\n required: [\"type\"],\n additionalProperties: false,\n },\n ],\n title: \"Background\",\n description: \"Background for the widget container\",\n default: {\n type: \"solid\",\n color: \"background\",\n },\n },\n textColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Text Color\",\n description: \"Default text color for todo items\",\n default: \"foreground\",\n },\n accentColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Accent Color\",\n description: \"Color used for count badge and icon\",\n default: \"primary\",\n },\n maxItems: {\n type: \"number\",\n minimum: 1,\n maximum: 20,\n multipleOf: 1,\n title: \"Max Items\",\n description: \"Maximum number of todo items to display\",\n default: 5,\n },\n padding: {\n enum: [0, 2, 4, 6, 8, 10],\n title: \"Padding\",\n description: \"Padding around the widget container\",\n default: 4,\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the widget container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n const: \"VideoWidget\",\n description: \"Registered widget type.\",\n },\n props: {\n type: \"object\",\n properties: {\n resource: {\n $ref: \"#/$defs/shareableItemOrUrl\",\n title: \"Select Video\",\n description: \"Browse and select a video\",\n },\n useCustomUrl: {\n type: \"boolean\",\n title: \"Use Custom URL\",\n description:\n \"Enter a custom video URL instead of selecting media.\",\n default: false,\n },\n src: {\n type: \"string\",\n title: \"Video URL\",\n description:\n \"Direct video URL for inline mode. Card mode supports YouTube, Vimeo, and direct video URLs.\",\n default: \"\",\n },\n poster: {\n type: \"string\",\n title: \"Poster Image URL\",\n description:\n \"Thumbnail shown before play. Card mode can auto-derive YouTube thumbnails; add a poster for Vimeo URLs.\",\n default: \"\",\n },\n displayMode: {\n enum: [\"inline\", \"card\"],\n title: \"Display Mode\",\n description:\n \"Inline: native player embedded in the page. Card: premium thumbnail that opens a modal.\",\n default: \"inline\",\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description:\n \"Headline on the card thumbnail (card mode only).\",\n default: \"\",\n },\n tagline: {\n type: \"string\",\n title: \"Tagline\",\n description: \"Short body line under the title.\",\n default: \"\",\n },\n eyebrow: {\n type: \"string\",\n title: \"Eyebrow\",\n description:\n \"Small label above the card (e.g. 'Training · Fluid Academy').\",\n default: \"\",\n },\n tag: {\n type: \"string\",\n title: \"Tag\",\n description: \"Optional pill label.\",\n default: \"\",\n },\n duration: {\n type: \"string\",\n title: \"Duration\",\n description:\n \"Runtime (e.g. '4:52' or '1:09:30'). Shown as a chip.\",\n default: \"\",\n },\n author: {\n type: \"string\",\n title: \"Author / Instructor\",\n description: \"Meta line author.\",\n default: \"\",\n },\n date: {\n type: \"string\",\n title: \"Date\",\n description: \"Meta line date (e.g. 'Apr 12').\",\n default: \"\",\n },\n editorialFrame: {\n type: \"boolean\",\n title: \"Editorial Frame\",\n description:\n \"Premium dark canvas with layered shadow and dual gradient overlays.\",\n default: true,\n },\n frameColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Frame Color\",\n description: \"Surface color for the card and modal.\",\n default: \"foreground\",\n },\n showFullscreenPill: {\n type: \"boolean\",\n title: \"Show Fullscreen Pill\",\n description:\n \"Show the 'Full screen' hover hint on the card.\",\n default: true,\n },\n primaryCtaText: {\n type: \"string\",\n title: \"Primary CTA Text\",\n description:\n \"Primary button in the modal footer (optional).\",\n default: \"\",\n },\n primaryCtaLink: {\n type: \"string\",\n title: \"Primary CTA Link\",\n description: \"URL for the primary CTA.\",\n default: \"\",\n },\n secondaryCtaText: {\n type: \"string\",\n title: \"Secondary CTA Text\",\n description:\n \"Secondary (ghost) button in the modal footer (optional).\",\n default: \"\",\n },\n secondaryCtaLink: {\n type: \"string\",\n title: \"Secondary CTA Link\",\n description: \"URL for the secondary CTA.\",\n default: \"\",\n },\n borderRadius: {\n enum: [\"none\", \"sm\", \"md\", \"lg\", \"xl\", \"full\"],\n title: \"Border Radius\",\n description: \"Border radius for the video container\",\n default: \"md\",\n },\n borderWidth: {\n enum: [\"none\", \"thin\", \"medium\", \"thick\"],\n title: \"Border Width\",\n description: \"Border width for the widget\",\n default: \"none\",\n },\n borderColor: {\n enum: [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"border\",\n \"destructive\",\n \"transparent\",\n ],\n title: \"Border Color\",\n description: \"Border color for the widget\",\n default: \"muted\",\n },\n verticalSizing: {\n enum: [\"auto\", \"fixed\"],\n title: \"Vertical Sizing\",\n description:\n \"How the video height is determined (inline mode only)\",\n default: \"auto\",\n },\n fixedHeight: {\n type: \"string\",\n pattern: \"^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|vh|rem)$\",\n title: \"Height\",\n description: \"Fixed height of the video container\",\n default: \"200px\",\n },\n displayFit: {\n enum: [\"cover\", \"contain\"],\n title: \"Display Fit\",\n description: \"How the video fills its container\",\n default: \"cover\",\n },\n focusPoint: {\n type: \"string\",\n title: \"Focus Point\",\n description:\n \"The focal point of the video within its container\",\n default: \"center\",\n },\n controls: {\n type: \"boolean\",\n title: \"Show Controls\",\n description:\n \"Display video playback controls (inline mode only — card mode always shows controls in the modal).\",\n default: true,\n },\n autoplay: {\n type: \"boolean\",\n title: \"Autoplay\",\n description: \"Automatically start playing the video\",\n default: false,\n },\n loop: {\n type: \"boolean\",\n title: \"Loop\",\n description: \"Repeat the video when it ends\",\n default: false,\n },\n muted: {\n type: \"boolean\",\n title: \"Muted\",\n description: \"Start with audio muted\",\n default: true,\n },\n },\n additionalProperties: false,\n description: \"Properties accepted by the registered widget.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Stable widget-node identifier within this screen.\",\n },\n type: {\n type: \"string\",\n pattern:\n \"^(?:company|droplet)(?:\\\\.[A-Za-z0-9][A-Za-z0-9_~-]*){2,}$\",\n description:\n \"Namespaced company or Droplet package and widget type.\",\n },\n props: {\n type: \"object\",\n additionalProperties: {\n $ref: \"#/$defs/jsonValue\",\n },\n description: \"Package-defined serializable widget properties.\",\n },\n dataSource: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/data-source.schema.json\",\n description:\n \"Optional data-source configuration that populates widget props.\",\n },\n columnIndex: {\n type: \"integer\",\n minimum: 0,\n description:\n \"Zero-based parent layout column containing this widget.\",\n },\n capabilityGrants: {\n type: \"object\",\n additionalProperties: {\n type: \"object\",\n properties: {\n packageId: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Canonical package identifier approved for the capability.\",\n },\n packageVersion: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Exact package version approved for the capability.\",\n },\n capabilityVersion: {\n type: \"string\",\n pattern: \"\\\\S\",\n description:\n \"Exact capability contract version approved.\",\n },\n },\n required: [\n \"packageId\",\n \"packageVersion\",\n \"capabilityVersion\",\n ],\n additionalProperties: false,\n },\n description:\n \"Placement-specific consent grants keyed by capability.\",\n },\n },\n required: [\"id\", \"type\", \"props\"],\n additionalProperties: false,\n },\n ],\n },\n },\n description: \"Authoritative schema for a Fluid portal widget resource.\",\n },\n definition: {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://assets.fluid.app/docs/schema/portal/1.5.0/definition.schema.json\",\n title: \"Fluid Portal Definition\",\n examples: [\n {\n name: \"Partner Portal\",\n },\n ],\n type: \"object\",\n properties: {\n $schema: {\n type: \"string\",\n pattern:\n \"^https://assets\\\\.fluid\\\\.app/docs/schema/portal/(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)(?:-[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?(?:\\\\+[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?/definition\\\\.schema\\\\.json$\",\n description: \"Versioned schema URL used by editors and validators.\",\n },\n name: {\n type: \"string\",\n description: \"Human-readable portal definition name.\",\n },\n },\n required: [\"name\"],\n additionalProperties: false,\n description: \"Authoritative schema for a Fluid portal definition resource.\",\n },\n screen: {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://assets.fluid.app/docs/schema/portal/1.5.0/screen.schema.json\",\n title: \"Fluid Portal Screen\",\n examples: [\n {\n name: \"home\",\n component_tree: [],\n },\n ],\n type: \"object\",\n properties: {\n $schema: {\n type: \"string\",\n pattern:\n \"^https://assets\\\\.fluid\\\\.app/docs/schema/portal/(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)(?:-[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?(?:\\\\+[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?/screen\\\\.schema\\\\.json$\",\n description: \"Versioned schema URL used by editors and validators.\",\n },\n name: {\n type: \"string\",\n description:\n \"Human-readable screen name; the file name is the resource slug.\",\n },\n component_tree: {\n type: \"array\",\n maxItems: 1,\n items: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/widget.schema.json\",\n },\n description: \"Zero or one root widget nodes for this screen.\",\n },\n },\n required: [\"name\", \"component_tree\"],\n additionalProperties: false,\n description: \"Authoritative schema for a Fluid portal screen resource.\",\n },\n theme: {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://assets.fluid.app/docs/schema/portal/1.5.0/theme.schema.json\",\n title: \"Fluid Portal Theme\",\n examples: [\n {\n name: \"Default\",\n config: {\n id: \"default\",\n name: \"Default\",\n light: {\n background: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n foreground: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n primary: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n secondary: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n accent: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n muted: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n destructive: {\n base: {\n l: 0.55,\n c: 0.16,\n h: 250,\n },\n foreground: {\n l: 0.98,\n c: 0.01,\n h: 250,\n },\n },\n },\n dark: {},\n fontSizes: {\n extraSmall: \"0.75rem\",\n small: \"0.875rem\",\n regular: \"1rem\",\n large: \"1.125rem\",\n extraLarge: \"1.25rem\",\n giant: \"1.5rem\",\n },\n fontFamilies: {\n header: \"Inter\",\n body: \"Inter\",\n },\n spacing: \"0.25rem\",\n radii: {\n small: \"0.25rem\",\n medium: \"0.5rem\",\n large: \"0.75rem\",\n extraLarge: \"1rem\",\n },\n },\n active: true,\n },\n ],\n type: \"object\",\n properties: {\n $schema: {\n type: \"string\",\n pattern:\n \"^https://assets\\\\.fluid\\\\.app/docs/schema/portal/(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)(?:-[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?(?:\\\\+[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?/theme\\\\.schema\\\\.json$\",\n description: \"Versioned schema URL used by editors and validators.\",\n },\n name: {\n type: \"string\",\n description: \"Human-readable theme name referenced by profiles.\",\n },\n config: {\n $ref: \"https://assets.fluid.app/docs/schema/portal/1.5.0/theme-config.schema.json\",\n description: \"Complete structured theme token configuration.\",\n },\n active: {\n type: \"boolean\",\n description:\n \"Whether this theme is available as an active portal theme.\",\n },\n },\n required: [\"name\", \"config\", \"active\"],\n additionalProperties: false,\n description: \"Authoritative schema for a Fluid portal theme resource.\",\n },\n navigation: {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://assets.fluid.app/docs/schema/portal/1.5.0/navigation.schema.json\",\n title: \"Fluid Portal Navigation\",\n examples: [\n {\n name: \"Primary\",\n platform: \"web\",\n navigation_items: [],\n },\n ],\n type: \"object\",\n properties: {\n $schema: {\n type: \"string\",\n pattern:\n \"^https://assets\\\\.fluid\\\\.app/docs/schema/portal/(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)(?:-[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?(?:\\\\+[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?/navigation\\\\.schema\\\\.json$\",\n description: \"Versioned schema URL used by editors and validators.\",\n },\n name: {\n type: \"string\",\n description: \"Human-readable navigation name referenced by profiles.\",\n },\n platform: {\n enum: [\"web\", \"mobile\"],\n description: \"Portal platform where this navigation is used.\",\n },\n navigation_items: {\n type: \"array\",\n items: {\n $ref: \"#/$defs/navigationItem\",\n },\n description: \"Ordered top-level navigation entries.\",\n },\n },\n required: [\"name\", \"platform\", \"navigation_items\"],\n additionalProperties: false,\n $defs: {\n navigationItem: {\n type: \"object\",\n properties: {\n id: {\n type: \"integer\",\n description:\n \"Remote navigation-item identifier when one has been assigned.\",\n },\n icon: {\n type: [\"string\", \"null\"],\n description: \"Icon identifier displayed with this navigation item.\",\n },\n label: {\n type: [\"string\", \"null\"],\n description: \"Text displayed for this navigation item.\",\n },\n screen: {\n type: [\"string\", \"null\"],\n description: \"Screen resource slug opened by this navigation item.\",\n },\n slug: {\n type: [\"string\", \"null\"],\n description: \"Stable navigation-item slug.\",\n },\n source: {\n type: \"string\",\n description:\n \"Origin classification used by Fluid navigation management.\",\n },\n position: {\n type: [\"integer\", \"null\"],\n description: \"Zero-based or backend-assigned item order.\",\n },\n parent_id: {\n type: [\"integer\", \"null\"],\n description:\n \"Remote identifier of the parent item, or null at the root.\",\n },\n children: {\n type: \"array\",\n items: {\n $ref: \"#/$defs/navigationItem\",\n },\n description: \"Ordered nested navigation items.\",\n },\n },\n required: [\n \"icon\",\n \"label\",\n \"screen\",\n \"slug\",\n \"source\",\n \"position\",\n \"parent_id\",\n \"children\",\n ],\n additionalProperties: false,\n },\n },\n description: \"Authoritative schema for a Fluid portal navigation resource.\",\n },\n profile: {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://assets.fluid.app/docs/schema/portal/1.5.0/profile.schema.json\",\n title: \"Fluid Portal Profile\",\n examples: [\n {\n name: \"Everyone\",\n default: true,\n navigation: \"primary\",\n mobile_navigation: null,\n themes: [\"default\"],\n permissions: {\n ranks: [],\n roles: [],\n platform: [],\n countries: [],\n },\n },\n ],\n type: \"object\",\n properties: {\n $schema: {\n type: \"string\",\n pattern:\n \"^https://assets\\\\.fluid\\\\.app/docs/schema/portal/(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)\\\\.(?:0|[1-9]\\\\d*)(?:-[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?(?:\\\\+[0-9A-Za-z-]+(?:\\\\.[0-9A-Za-z-]+)*)?/profile\\\\.schema\\\\.json$\",\n description: \"Versioned schema URL used by editors and validators.\",\n },\n name: {\n type: \"string\",\n description: \"Human-readable portal profile name.\",\n },\n default: {\n type: \"boolean\",\n description:\n \"Whether this is the fallback profile for unmatched members.\",\n },\n navigation: {\n type: [\"string\", \"null\"],\n description:\n \"Web navigation resource slug, or null when none is assigned.\",\n },\n mobile_navigation: {\n type: [\"string\", \"null\"],\n description:\n \"Mobile navigation resource slug, or null when none is assigned.\",\n },\n themes: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n description: \"Theme resource slugs available to this profile.\",\n },\n permissions: {\n type: \"object\",\n properties: {\n ranks: {\n type: \"array\",\n items: {\n type: \"integer\",\n },\n description:\n \"Allowed numeric member ranks; empty means no rank restriction.\",\n },\n roles: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n description:\n \"Allowed member roles; empty means no role restriction.\",\n },\n platform: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n description:\n \"Allowed member platforms; empty means no platform restriction.\",\n },\n countries: {\n type: \"array\",\n items: {\n type: \"integer\",\n },\n description:\n \"Allowed numeric country identifiers; empty means no country restriction.\",\n },\n },\n required: [\"ranks\", \"roles\", \"platform\", \"countries\"],\n additionalProperties: false,\n description: \"Member attributes that determine profile eligibility.\",\n },\n },\n required: [\n \"name\",\n \"default\",\n \"navigation\",\n \"mobile_navigation\",\n \"themes\",\n \"permissions\",\n ],\n additionalProperties: false,\n description: \"Authoritative schema for a Fluid portal profile resource.\",\n },\n};\n","import Ajv2020, {\n type AnySchemaObject,\n type ErrorObject,\n type ValidateFunction,\n} from \"ajv/dist/2020.js\";\n\nimport {\n PORTAL_RESOURCE_KINDS,\n PORTAL_SCHEMA_URLS,\n type PortalResourceKind,\n} from \"./constants\";\nimport { generatedSchemas } from \"./generated/schemas\";\nimport type { PortalResourceByKind } from \"./generated/types\";\n\nexport interface PortalSchemaIssue {\n readonly path: string;\n readonly code: string;\n readonly message: string;\n}\n\nexport type PortalSchemaValidationResult<T> =\n | { readonly success: true; readonly data: T }\n | { readonly success: false; readonly issues: readonly PortalSchemaIssue[] };\n\nconst ajv = new Ajv2020({\n allErrors: true,\n allowUnionTypes: true,\n strict: true,\n coerceTypes: false,\n removeAdditional: false,\n useDefaults: false,\n});\n\nfor (const schema of Object.values(generatedSchemas)) {\n ajv.addSchema(schema as AnySchemaObject);\n}\n\nconst validators = Object.fromEntries(\n PORTAL_RESOURCE_KINDS.map((kind) => {\n const validator = ajv.getSchema(PORTAL_SCHEMA_URLS[kind]);\n if (!validator) {\n throw new Error(`No generated validator for portal ${kind}`);\n }\n return [kind, validator];\n }),\n) as Record<PortalResourceKind, ValidateFunction>;\n\nfunction pointerToPath(pointer: string): string {\n if (pointer === \"\") return \"$\";\n return pointer\n .split(\"/\")\n .slice(1)\n .reduce((path, segment) => {\n const decoded = segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n return /^\\d+$/.test(decoded)\n ? `${path}[${decoded}]`\n : `${path}.${decoded}`;\n }, \"$\");\n}\n\nfunction issuePath(error: ErrorObject): string {\n const base = pointerToPath(error.instancePath);\n if (error.keyword === \"required\") {\n const property = (error.params as { missingProperty?: unknown })\n .missingProperty;\n return typeof property === \"string\" ? `${base}.${property}` : base;\n }\n if (error.keyword === \"additionalProperties\") {\n const property = (error.params as { additionalProperty?: unknown })\n .additionalProperty;\n return typeof property === \"string\" ? `${base}.${property}` : base;\n }\n return base;\n}\n\nfunction issueMessage(error: ErrorObject): string {\n if (error.keyword === \"required\") return \"is required\";\n if (error.keyword === \"additionalProperties\") {\n return \"is not allowed by the canonical portal schema\";\n }\n if (error.keyword === \"maxItems\") {\n return `must contain at most ${String(error.params.limit)} item`;\n }\n if (error.keyword === \"pattern\" && error.instancePath.endsWith(\"/id\")) {\n return \"must contain at least one non-whitespace character\";\n }\n return error.message ?? `failed ${error.keyword} validation`;\n}\n\nfunction formatIssues(\n errors: readonly ErrorObject[] | null | undefined,\n): PortalSchemaIssue[] {\n if (!errors) return [];\n const seen = new Set<string>();\n const issues: PortalSchemaIssue[] = [];\n\n for (const error of errors) {\n if (error.keyword === \"oneOf\" || error.keyword === \"anyOf\") continue;\n const issue = {\n path: issuePath(error),\n code: error.keyword,\n message: issueMessage(error),\n };\n const key = `${issue.path}\\0${issue.code}\\0${issue.message}`;\n if (!seen.has(key)) {\n seen.add(key);\n issues.push(issue);\n }\n }\n\n return issues.length > 0\n ? issues\n : errors.map((error) => ({\n path: issuePath(error),\n code: error.keyword,\n message: issueMessage(error),\n }));\n}\n\nexport function validatePortalResource<K extends PortalResourceKind>(\n kind: K,\n value: unknown,\n): PortalSchemaValidationResult<PortalResourceByKind[K]> {\n const validator = validators[kind];\n if (validator(value)) {\n return { success: true, data: value as PortalResourceByKind[K] };\n }\n return { success: false, issues: formatIssues(validator.errors) };\n}\n\nexport function assertPortalResource<K extends PortalResourceKind>(\n kind: K,\n value: unknown,\n): asserts value is PortalResourceByKind[K] {\n const result = validatePortalResource(kind, value);\n if (result.success) return;\n const details = result.issues\n .map((issue) => `${issue.path} ${issue.message}`)\n .join(\"; \");\n throw new Error(`Invalid portal ${kind}: ${details}`);\n}\n","import {\n PORTAL_SCHEMA_URLS,\n validatePortalResource,\n type PortalResourceByKind,\n type PortalResourceKind,\n} from \"@fluid-app/portal-definition-schema\";\n\nexport function preparePortalResourceForWrite<K extends PortalResourceKind>(\n resourceKind: K,\n relativePath: string,\n data: PortalResourceByKind[K],\n): PortalResourceByKind[K] {\n const { $schema: _existingSchema, ...resource } = data;\n const stamped = {\n $schema: PORTAL_SCHEMA_URLS[resourceKind],\n ...resource,\n };\n const validation = validatePortalResource(resourceKind, stamped);\n if (validation.success) return validation.data;\n\n const details = validation.issues\n .map((issue) => `${issue.path} ${issue.message}`)\n .join(\"; \");\n throw new Error(`Cannot write invalid ${relativePath}: ${details}`);\n}\n","/**\n * `fluid portal pull` command\n *\n * Pulls a Fluid OS definition's resources (screens, themes, navigations,\n * profiles) from the API and writes them to the local `portal/` directory\n * as JSON files, along with `.portal-sync/` metadata for push diffing.\n */\n\nimport { Command } from \"commander\";\nimport { resolveDefinition } from \"./pull-definition.js\";\nimport { getAuthToken, getActiveProfile } from \"@fluid-app/fluid-cli\";\nimport type {\n FluidOsDefinitionBasic,\n FluidOsNavigationItem,\n} from \"@fluid-app/fluidos-api-client/types\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport pLimit from \"p-limit\";\nimport type {\n PortalResourceByKind,\n PortalResourceKind,\n} from \"@fluid-app/portal-definition-schema\";\nimport { join } from \"node:path\";\nimport { mkdir, writeFile, rm, rename } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport prompts from \"prompts\";\nimport {\n createFluidOsClient,\n fluidOsApi,\n type FluidOsClient,\n} from \"../api/fluidos.js\";\n\nimport { deriveSlug, writeMappings } from \"../utils/mappings.js\";\nimport type { PortalMappings } from \"../utils/mappings.js\";\nimport {\n readSnapshot,\n diffAgainstSnapshot,\n buildSnapshot,\n writeSnapshot,\n} from \"../utils/snapshot.js\";\nimport {\n transformScreen,\n deriveScreenSlug,\n transformTheme,\n transformNavigation,\n transformProfile,\n buildIdToSlugMap,\n buildNavigationIdToSlugMap,\n buildThemeIdToSlugMap,\n} from \"../utils/transform.js\";\nimport { preparePortalResourceForWrite } from \"../utils/portal-schema.js\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ApiDefinitionBasic = FluidOsDefinitionBasic;\n\ninterface PullOptions {\n app?: string;\n /** Definition id. Same reason `clone` has one: names repeat, and a\n * name lookup silently takes the first match. */\n id?: string;\n force?: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst PORTAL_DIR = \"portal\";\nconst PORTAL_SYNC_DIR = \".portal-sync\";\nconst PAGE_LIMIT = 500;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create an authenticated FluidOS client using the stored CLI profile.\n */\nfunction createClient(): FluidOsClient {\n const token = getAuthToken();\n if (!token) {\n const profile = getActiveProfile();\n if (!profile) {\n throw new Error(\n \"Not logged in. Run \" + chalk.cyan(\"fluid login\") + \" first.\",\n );\n }\n throw new Error(\n \"No auth token found for profile \" +\n chalk.cyan(profile.name) +\n \". Run \" +\n chalk.cyan(\"fluid login\") +\n \" to re-authenticate.\",\n );\n }\n\n const baseUrl = process.env[\"FLUID_API_BASE\"] ?? \"https://api.fluid.app\";\n\n return createFluidOsClient({\n baseUrl,\n token,\n });\n}\n\n/**\n * Select a definition interactively or by name.\n */\nasync function fetchAllDefinitions(\n client: FluidOsClient,\n): Promise<ApiDefinitionBasic[]> {\n const all: ApiDefinitionBasic[] = [];\n let page = 1;\n\n while (true) {\n const response = await fluidOsApi.listDefinitions(client, {\n page,\n per_page: PAGE_LIMIT,\n });\n const batch = response.definitions ?? [];\n all.push(...batch);\n\n const totalPages = response.meta?.total_pages ?? 1;\n if (page >= totalPages || batch.length === 0) break;\n page++;\n }\n\n return all;\n}\n\nasync function selectDefinition(\n client: FluidOsClient,\n appName?: string,\n rawDefinitionId?: string,\n): Promise<ApiDefinitionBasic> {\n const definitions = await fetchAllDefinitions(client);\n\n if (definitions.length === 0) {\n throw new Error(\n \"No Fluid OS definitions found. Create one in the admin dashboard first.\",\n );\n }\n\n const resolved = resolveDefinition(definitions, appName, rawDefinitionId);\n if (resolved) return resolved;\n\n // Interactive selector\n const { definitionId } = await prompts({\n type: \"select\",\n name: \"definitionId\",\n message: \"Select a Fluid OS definition to pull\",\n choices: definitions.map((d) => ({\n title: d.name ?? \"(unnamed)\",\n value: d.id,\n })),\n });\n\n if (definitionId == null) {\n throw new Error(\"No definition selected.\");\n }\n\n const selected = definitions.find((d) => d.id === definitionId);\n if (!selected) {\n throw new Error(\"Selected definition not found.\");\n }\n\n return selected;\n}\n\n/**\n * Check for definition switching conflicts.\n * Returns true if it's safe to proceed.\n */\nasync function checkDefinitionSwitch(\n cwd: string,\n newDefinitionId: number,\n newDefinitionName: string,\n force: boolean,\n): Promise<boolean> {\n const portalDir = join(cwd, PORTAL_DIR);\n const portalSyncDir = join(cwd, PORTAL_SYNC_DIR);\n\n // No existing portal directory — always safe\n if (!existsSync(portalDir)) {\n return true;\n }\n\n // Read existing snapshot to see what definition was pulled\n const snapshot = await readSnapshot(portalSyncDir);\n if (!snapshot) {\n // No snapshot means no prior pull — safe to overwrite\n return true;\n }\n\n // Same definition — this is a refresh\n if (snapshot.definition_id === newDefinitionId) {\n return true;\n }\n\n // Different definition — check for local changes\n const diff = await diffAgainstSnapshot(portalDir, snapshot);\n const hasChanges =\n diff.new.length > 0 || diff.changed.length > 0 || diff.deleted.length > 0;\n\n if (hasChanges && !force) {\n console.log();\n console.log(\n chalk.yellow(\"Warning:\") +\n \" Switching from \" +\n chalk.cyan(snapshot.definition) +\n \" to \" +\n chalk.cyan(newDefinitionName) +\n \" with unpushed local changes.\",\n );\n console.log();\n console.log(\" Modified: \" + diff.changed.length + \" file(s)\");\n console.log(\" New: \" + diff.new.length + \" file(s)\");\n console.log(\" Deleted: \" + diff.deleted.length + \" file(s)\");\n console.log();\n console.log(\n \"Use \" +\n chalk.cyan(\"--force\") +\n \" to discard local changes and switch definitions.\",\n );\n return false;\n }\n\n return true;\n}\n\n/**\n * Write a JSON file to the portal directory, creating subdirectories as needed.\n */\nasync function writePortalFile<K extends PortalResourceKind>(\n portalDir: string,\n resourceKind: K,\n relativePath: string,\n data: PortalResourceByKind[K],\n): Promise<void> {\n const resource = preparePortalResourceForWrite(\n resourceKind,\n relativePath,\n data,\n );\n const filePath = join(portalDir, relativePath);\n const dir = join(filePath, \"..\");\n await mkdir(dir, { recursive: true });\n await writeFile(filePath, JSON.stringify(resource, null, 2) + \"\\n\", \"utf-8\");\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Command\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const pullCommand: Command = new Command(\"pull\")\n .description(\n \"Pull a Fluid OS definition's resources to the local portal/ directory\",\n )\n .option(\"--app <name>\", \"Definition name (skips interactive selector)\")\n .option(\"--id <id>\", \"Definition id (avoids ambiguity when names repeat)\")\n .option(\"--force\", \"Overwrite local changes when switching definitions\")\n .action(async (options: PullOptions) => {\n const cwd = process.cwd();\n\n console.log();\n console.log(chalk.blue.bold(\"Fluid Portal Pull\"));\n console.log();\n\n // ── Authenticate ──────────────────────────────────────────────────\n const spinner = ora();\n spinner.start(\"Authenticating...\");\n\n let client: FluidOsClient;\n try {\n client = createClient();\n spinner.succeed(\"Authenticated\");\n } catch (err) {\n spinner.fail(\"Authentication failed\");\n console.log();\n console.log(\n chalk.red(\"Error:\") +\n \" \" +\n (err instanceof Error ? err.message : String(err)),\n );\n console.log();\n process.exit(1);\n }\n\n // ── Select definition ─────────────────────────────────────────────\n let definition: ApiDefinitionBasic;\n try {\n definition = await selectDefinition(client, options.app, options.id);\n } catch (err) {\n console.log();\n console.log(\n chalk.red(\"Error:\") +\n \" \" +\n (err instanceof Error ? err.message : String(err)),\n );\n console.log();\n process.exit(1);\n }\n\n const definitionId = definition.id;\n const definitionName = definition.name ?? \"(unnamed)\";\n\n console.log(\n chalk.gray(\"Definition: \") +\n chalk.white(definitionName) +\n chalk.gray(` (ID: ${definitionId})`),\n );\n console.log();\n\n // ── Check definition switch ───────────────────────────────────────\n let canProceed: boolean;\n try {\n canProceed = await checkDefinitionSwitch(\n cwd,\n definitionId,\n definitionName,\n options.force ?? false,\n );\n } catch (err) {\n console.log();\n console.log(\n chalk.red(\"Error:\") +\n \" \" +\n (err instanceof Error ? err.message : String(err)),\n );\n console.log();\n process.exit(1);\n }\n if (!canProceed) {\n process.exit(1);\n }\n\n // ── Fetch all resources in parallel ───────────────────────────────\n spinner.start(\"Fetching resources...\");\n\n let screenBasics: NonNullable<\n Awaited<ReturnType<typeof fluidOsApi.listScreens>>[\"screens\"]\n >;\n let themes: NonNullable<\n Awaited<ReturnType<typeof fluidOsApi.listThemes>>[\"themes\"]\n >;\n let navigations: NonNullable<\n Awaited<ReturnType<typeof fluidOsApi.listNavigations>>[\"navigations\"]\n >;\n let profiles: NonNullable<\n Awaited<ReturnType<typeof fluidOsApi.listProfiles>>[\"profiles\"]\n >;\n let screens: NonNullable<\n Awaited<ReturnType<typeof fluidOsApi.getScreen>>[\"screen\"]\n >[];\n const navigationItemsMap = new Map<number, FluidOsNavigationItem[]>();\n\n try {\n const [\n screensResponse,\n themesResponse,\n navigationsResponse,\n profilesResponse,\n ] = await Promise.all([\n fluidOsApi.listScreens(client, definitionId, {\n per_page: PAGE_LIMIT,\n }),\n fluidOsApi.listThemes(client, definitionId, {\n per_page: PAGE_LIMIT,\n }),\n fluidOsApi.listNavigations(client, definitionId, {\n per_page: PAGE_LIMIT,\n }),\n fluidOsApi.listProfiles(client, definitionId, {\n per_page: PAGE_LIMIT,\n }),\n ]);\n\n screenBasics = screensResponse.screens ?? [];\n themes = themesResponse.themes ?? [];\n navigations = navigationsResponse.navigations ?? [];\n profiles = profilesResponse.profiles ?? [];\n\n // Warn if any list hits the page limit\n if (screenBasics.length === PAGE_LIMIT) {\n console.warn(\n chalk.yellow(\n `Warning: screen count hit the ${PAGE_LIMIT}-item limit; some screens may be missing.`,\n ),\n );\n }\n if (themes.length === PAGE_LIMIT) {\n console.warn(\n chalk.yellow(\n `Warning: theme count hit the ${PAGE_LIMIT}-item limit; some themes may be missing.`,\n ),\n );\n }\n if (navigations.length === PAGE_LIMIT) {\n console.warn(\n chalk.yellow(\n `Warning: navigation count hit the ${PAGE_LIMIT}-item limit; some navigations may be missing.`,\n ),\n );\n }\n if (profiles.length === PAGE_LIMIT) {\n console.warn(\n chalk.yellow(\n `Warning: profile count hit the ${PAGE_LIMIT}-item limit; some profiles may be missing.`,\n ),\n );\n }\n\n spinner.text = \"Fetching screen details...\";\n\n // Limit concurrency to avoid hitting API rate limits\n const limit = pLimit(\n process.env[\"FLUID_BACKGROUND_SYNC\"] === \"1\" ? 1 : 10,\n );\n\n // Fetch full screen details (list endpoint doesn't include component_tree)\n screens = await Promise.all(\n screenBasics.map((s) =>\n limit(async () => {\n const res = await fluidOsApi.getScreen(client, definitionId, s.id);\n if (!res.screen) {\n throw new Error(`Failed to fetch details for screen ID ${s.id}`);\n }\n return res.screen;\n }),\n ),\n );\n\n // Fetch navigation items for each navigation.\n // NOTE: The list FluidOS navigation items endpoint does not support\n // pagination query parameters (per_page/page). Navigation items are\n // returned as a nested tree structure and are not paginated.\n spinner.text = \"Fetching navigation items...\";\n await Promise.all(\n navigations.map((nav) =>\n limit(async () => {\n const res = await fluidOsApi.listNavigationItems(\n client,\n definitionId,\n nav.id,\n );\n navigationItemsMap.set(nav.id, res.navigation_items ?? []);\n }),\n ),\n );\n\n spinner.succeed(\n `Fetched ${screens.length} screen(s), ${themes.length} theme(s), ${navigations.length} navigation(s), ${profiles.length} profile(s)`,\n );\n } catch (err) {\n spinner.fail(\"Failed to fetch resources\");\n console.log();\n console.log(\n chalk.red(\"Error:\") +\n \" \" +\n (err instanceof Error ? err.message : String(err)),\n );\n console.log();\n process.exit(1);\n }\n\n // ── Build slug mappings ───────────────────────────────────────────\n spinner.start(\"Transforming resources...\");\n\n // Screen mappings: use existing slug field when available\n const screenSlugs = new Set<string>();\n const screenMappings: Record<string, number> = {};\n for (const screen of screens) {\n const slug = deriveScreenSlug(screen, screenSlugs);\n screenSlugs.add(slug);\n screenMappings[slug] = screen.id;\n }\n\n // Theme mappings: slugify from name\n const themeSlugs = new Set<string>();\n const themeMappings: Record<string, number> = {};\n for (const theme of themes) {\n const slug = deriveSlug(theme.name ?? \"unnamed\", themeSlugs);\n themeSlugs.add(slug);\n themeMappings[slug] = theme.id;\n }\n\n // Navigation mappings: slugify from name\n const navSlugs = new Set<string>();\n const navMappings: Record<string, number> = {};\n for (const nav of navigations) {\n const slug = deriveSlug(nav.name ?? \"unnamed\", navSlugs);\n navSlugs.add(slug);\n navMappings[slug] = nav.id;\n }\n\n // Profile mappings: slugify from name\n const profileSlugs = new Set<string>();\n const profileMappings: Record<string, number> = {};\n for (const profile of profiles) {\n const slug = deriveSlug(profile.name ?? \"unnamed\", profileSlugs);\n profileSlugs.add(slug);\n profileMappings[slug] = profile.id;\n }\n\n // Build reverse-lookup maps for ID → slug references\n const screenIdToSlug = buildIdToSlugMap(screenMappings);\n const navIdToSlug = buildNavigationIdToSlugMap(navMappings);\n const themeIdToSlug = buildThemeIdToSlugMap(themeMappings);\n const profileIdToSlug = buildIdToSlugMap(profileMappings);\n\n spinner.succeed(\"Resources transformed\");\n\n // ── Clean and write files ─────────────────────────────────────────\n spinner.start(\"Writing files...\");\n\n const portalDir = join(cwd, PORTAL_DIR);\n const portalSyncDir = join(cwd, PORTAL_SYNC_DIR);\n\n // Write to a temporary directory first, then atomically swap into place.\n // This ensures the existing portal/ directory is only removed once all\n // new content has been successfully written.\n const tmpPortalDir = portalDir + \".tmp\";\n\n try {\n // Clean up any leftover temp directory from a previous failed run\n if (existsSync(tmpPortalDir)) {\n await rm(tmpPortalDir, { recursive: true });\n }\n await mkdir(tmpPortalDir, { recursive: true });\n\n // Write definition.json\n await writePortalFile(tmpPortalDir, \"definition\", \"definition.json\", {\n name: definitionName,\n });\n\n // Write screens\n for (const screen of screens) {\n const slug = screenIdToSlug.get(screen.id)!;\n const local = transformScreen(screen);\n await writePortalFile(\n tmpPortalDir,\n \"screen\",\n `screens/${slug}.json`,\n local,\n );\n }\n\n // Write themes\n for (const theme of themes) {\n const slug = themeIdToSlug.get(theme.id)!;\n const local = transformTheme(theme);\n await writePortalFile(\n tmpPortalDir,\n \"theme\",\n `themes/${slug}.json`,\n local,\n );\n }\n\n // Write navigations\n for (const nav of navigations) {\n const slug = navIdToSlug.get(nav.id)!;\n const items = navigationItemsMap.get(nav.id) ?? [];\n const local = transformNavigation(nav, items, screenIdToSlug);\n await writePortalFile(\n tmpPortalDir,\n \"navigation\",\n `navigations/${slug}.json`,\n local,\n );\n }\n\n // Write profiles\n for (const profile of profiles) {\n const slug = profileIdToSlug.get(profile.id);\n if (slug) {\n const local = transformProfile(profile, navIdToSlug, themeIdToSlug);\n await writePortalFile(\n tmpPortalDir,\n \"profile\",\n `profiles/${slug}.json`,\n local,\n );\n }\n }\n\n // Atomic swap: remove old directory, rename temp into place\n if (existsSync(portalDir)) {\n await rm(portalDir, { recursive: true });\n }\n await rename(tmpPortalDir, portalDir);\n } catch (err) {\n // Clean up temp directory on failure\n if (existsSync(tmpPortalDir)) {\n await rm(tmpPortalDir, { recursive: true }).catch(() => {});\n }\n spinner.fail(\"Failed to write files\");\n console.log();\n console.log(\n chalk.red(\"Error:\") +\n \" \" +\n (err instanceof Error ? err.message : String(err)),\n );\n console.log();\n process.exit(1);\n }\n\n // ── Write metadata (mappings + snapshot) ────────────────────────────\n // Separated from the file-write block so that a metadata failure does\n // not incorrectly report total failure when portal files are already\n // on disk after the atomic swap.\n try {\n const mappings: PortalMappings = {\n definition: { name: definitionName, id: definitionId },\n screens: screenMappings,\n themes: themeMappings,\n navigations: navMappings,\n profiles: profileMappings,\n countries: {},\n ranks: {},\n };\n await writeMappings(portalSyncDir, mappings);\n\n const snapshot = await buildSnapshot(\n portalDir,\n definitionName,\n definitionId,\n );\n await writeSnapshot(portalSyncDir, snapshot);\n\n spinner.succeed(\"Files written\");\n } catch (err) {\n spinner.warn(\"Files written (metadata sync failed)\");\n console.log();\n console.log(\n chalk.yellow(\"Warning:\") +\n \" Portal files were written successfully, but metadata sync failed.\" +\n \" Run \" +\n chalk.cyan(\"fluid portal pull\") +\n \" again to regenerate metadata.\",\n );\n console.log(\n chalk.gray(\" Detail: \") +\n (err instanceof Error ? err.message : String(err)),\n );\n console.log();\n }\n\n // ── Summary ───────────────────────────────────────────────────────\n console.log();\n console.log(chalk.green.bold(\"Pull complete!\"));\n console.log();\n console.log(chalk.gray(\" portal/definition.json\"));\n console.log(\n chalk.gray(` portal/screens/ `) +\n chalk.white(`${screens.length} file(s)`),\n );\n console.log(\n chalk.gray(` portal/themes/ `) +\n chalk.white(`${themes.length} file(s)`),\n );\n console.log(\n chalk.gray(` portal/navigations/ `) +\n chalk.white(`${navigations.length} file(s)`),\n );\n console.log(\n chalk.gray(` portal/profiles/ `) +\n chalk.white(`${profiles.length} file(s)`),\n );\n console.log(\n chalk.gray(` .portal-sync/ `) +\n chalk.white(\"mappings.json + snapshot.json\"),\n );\n console.log();\n });\n"],"x_google_ignoreList":[18,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115],"mappings":"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c;IACZ,MAAM;IACN,YAAY;KACV,IAAI;MACF,OAAO,CACL,EACE,MAAM,UACP,EACD,EACE,MAAM,UACP,CACF;MACD,aAAa;MACd;KACD,eAAe;MACb,MAAM;OAAC;OAAU;OAAQ;OAAkB;OAAW;OAAU;MAChE,aACE;MACH;KACD,YAAY;MACV,MAAM;MACN,YAAY;OACV,OAAO;QACL,MAAM;QACN,aAAa;QACd;OACD,UAAU;QACR,MAAM;QACN,aAAa;QACd;OACD,MAAM;QACJ,MAAM;QACN,aAAa;QACd;OACF;MACD,sBAAsB;MACtB,aACE;MACH;KACD,cAAc;MACZ,MAAM;MACN,aACE;MACH;KACF;IACD,UAAU,CAAC,MAAM,gBAAgB;IACjC,sBAAsB;IACvB;GACD,QAAQ,EACN,OAAO;IACL;KACE,MAAM;KACN,YAAY;MACV,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,UAAU;OACR,MAAM;OACN,aAAa;OACd;MACD,UAAU;OACR,MAAM;OACN,aAAa;OACd;MACD,QAAQ;OACN,MAAM;QAAC;QAAO;QAAQ;QAAO;QAAS;OACtC,aAAa;OACd;MACD,SAAS;OACP,MAAM;OACN,sBAAsB,EACpB,MAAM,UACP;OACD,aACE;OACH;MACD,MAAM;OACJ,MAAM;OACN,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,OAAO,EACL,MAAM,UACP;OACD,aACE;OACH;MACD,WAAW;OACT,MAAM;OACN,aACE;OACH;MACD,WAAW;OACT,MAAM;OACN,sBAAsB,EACpB,MAAM,UACP;OACD,aACE;OACH;MACD,iBAAiB;OACf,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAQ;MAAY;MAAc;KAC7C,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,eAAe;OACb,MAAM;OACN,OAAO,EACL,MAAM,wBACP;OACD,aAAa;OACd;MACD,aAAa;OACX,MAAM;OACN,OAAO,EACL,MAAM,UACP;OACD,aACE;OACH;MACD,WAAW;OACT,MAAM;OACN,aACE;OACH;MACD,iBAAiB;OACf,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAQ;MAAiB;MAAc;KAClD,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,YAAY;OACV,MAAM;QAAC;QAAe;QAAc;QAAO;OAC3C,aAAa;OACd;MACD,YAAY;OACV,OAAO,CACL,EACE,MAAM,UACP,EACD,EACE,MAAM,UACP,CACF;OACD,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,YAAY;QACV,OAAO;SACL,MAAM;SACN,aACE;SACH;QACD,UAAU;SACR,MAAM;SACN,aACE;SACH;QACF;OACD,sBAAsB;OACtB,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,OAAO,EACL,MAAM,UACP;OACD,aACE;OACH;MACD,WAAW;OACT,MAAM;OACN,aACE;OACH;MACD,iBAAiB;OACf,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAQ;MAAc;MAAc;MAAc;KAC7D,sBAAsB;KACvB;IACF,EACF;GACF;EACD,aACE;EACH;CACD,gBAAgB;EACd,SAAS;EACT,KAAK;EACL,OAAO;EACP,UAAU,CACR;GACE,IAAI;GACJ,MAAM;GACN,OAAO;IACL,YAAY;KACV,MAAM;MACJ,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACD,YAAY;MACV,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACF;IACD,YAAY;KACV,MAAM;MACJ,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACD,YAAY;MACV,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACF;IACD,SAAS;KACP,MAAM;MACJ,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACD,YAAY;MACV,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACF;IACD,WAAW;KACT,MAAM;MACJ,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACD,YAAY;MACV,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACF;IACD,QAAQ;KACN,MAAM;MACJ,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACD,YAAY;MACV,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACF;IACD,OAAO;KACL,MAAM;MACJ,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACD,YAAY;MACV,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACF;IACD,aAAa;KACX,MAAM;MACJ,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACD,YAAY;MACV,GAAG;MACH,GAAG;MACH,GAAG;MACJ;KACF;IACF;GACD,MAAM,EAAE;GACR,WAAW;IACT,YAAY;IACZ,OAAO;IACP,SAAS;IACT,OAAO;IACP,YAAY;IACZ,OAAO;IACR;GACD,cAAc;IACZ,QAAQ;IACR,MAAM;IACP;GACD,SAAS;GACT,OAAO;IACL,OAAO;IACP,QAAQ;IACR,OAAO;IACP,YAAY;IACb;GACF,CACF;EACD,MAAM;EACN,YAAY;GACV,IAAI;IACF,MAAM;IACN,aAAa;IACd;GACD,MAAM;IACJ,MAAM;IACN,aACE;IACH;GACD,OAAO;IACL,MAAM;IACN,YAAY;KACV,YAAY;MACV,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACF;MACD,UAAU,CAAC,QAAQ,aAAa;MAChC,sBAAsB;MACtB,aAAa;MACd;KACD,YAAY;MACV,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACF;MACD,UAAU,CAAC,QAAQ,aAAa;MAChC,sBAAsB;MACtB,aAAa;MACd;KACD,SAAS;MACP,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACF;MACD,UAAU,CAAC,QAAQ,aAAa;MAChC,sBAAsB;MACtB,aAAa;MACd;KACD,WAAW;MACT,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACF;MACD,UAAU,CAAC,QAAQ,aAAa;MAChC,sBAAsB;MACtB,aAAa;MACd;KACD,QAAQ;MACN,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACF;MACD,UAAU,CAAC,QAAQ,aAAa;MAChC,sBAAsB;MACtB,aAAa;MACd;KACD,OAAO;MACL,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACF;MACD,UAAU,CAAC,QAAQ,aAAa;MAChC,sBAAsB;MACtB,aAAa;MACd;KACD,aAAa;MACX,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aAAa;QACd;OACF;MACD,UAAU,CAAC,QAAQ,aAAa;MAChC,sBAAsB;MACtB,aAAa;MACd;KACF;IACD,UAAU;KACR;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACD,sBAAsB;IACtB,aAAa;IACd;GACD,MAAM;IACJ,MAAM;IACN,YAAY;KACV,YAAY;MACV,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACF;MACD,sBAAsB;MACtB,aAAa;MACd;KACD,YAAY;MACV,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACF;MACD,sBAAsB;MACtB,aAAa;MACd;KACD,SAAS;MACP,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACF;MACD,sBAAsB;MACtB,aAAa;MACd;KACD,WAAW;MACT,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACF;MACD,sBAAsB;MACtB,aAAa;MACd;KACD,QAAQ;MACN,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACF;MACD,sBAAsB;MACtB,aAAa;MACd;KACD,OAAO;MACL,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACF;MACD,sBAAsB;MACtB,aAAa;MACd;KACD,aAAa;MACX,MAAM;MACN,YAAY;OACV,MAAM;QACJ,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACD,YAAY;QACV,MAAM;QACN,YAAY;SACV,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACD,GAAG;UACD,MAAM;UACN,aAAa;UACd;SACF;QACD,UAAU;SAAC;SAAK;SAAK;SAAI;QACzB,sBAAsB;QACtB,aACE;QACH;OACF;MACD,sBAAsB;MACtB,aAAa;MACd;KACF;IACD,sBAAsB;IACtB,aAAa;IACd;GACD,WAAW;IACT,MAAM;IACN,YAAY;KACV,YAAY;MACV,MAAM;MACN,aAAa;MACd;KACD,OAAO;MACL,MAAM;MACN,aAAa;MACd;KACD,SAAS;MACP,MAAM;MACN,aAAa;MACd;KACD,OAAO;MACL,MAAM;MACN,aAAa;MACd;KACD,YAAY;MACV,MAAM;MACN,aAAa;MACd;KACD,OAAO;MACL,MAAM;MACN,aAAa;MACd;KACF;IACD,UAAU;KACR;KACA;KACA;KACA;KACA;KACA;KACD;IACD,sBAAsB;IACtB,aAAa;IACd;GACD,cAAc;IACZ,MAAM;IACN,YAAY;KACV,QAAQ;MACN,MAAM;MACN,aAAa;MACd;KACD,MAAM;MACJ,MAAM;MACN,aAAa;MACd;KACF;IACD,UAAU,CAAC,UAAU,OAAO;IAC5B,sBAAsB;IACtB,aAAa;IACd;GACD,SAAS;IACP,MAAM;IACN,aAAa;IACd;GACD,OAAO;IACL,MAAM;IACN,YAAY;KACV,OAAO;MACL,MAAM;MACN,aAAa;MACd;KACD,QAAQ;MACN,MAAM;MACN,aAAa;MACd;KACD,OAAO;MACL,MAAM;MACN,aAAa;MACd;KACD,YAAY;MACV,MAAM;MACN,aAAa;MACd;KACF;IACD,UAAU;KAAC;KAAS;KAAU;KAAS;KAAa;IACpD,sBAAsB;IACtB,aAAa;IACd;GACD,qBAAqB;IACnB,MAAM;IACN,aAAa;IACd;GACF;EACD,UAAU;GACR;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,sBAAsB;EACtB,aACE;EACH;CACD,QAAQ;EACN,SAAS;EACT,KAAK;EACL,OAAO;EACP,UAAU,CACR;GACE,IAAI;GACJ,MAAM;GACN,OAAO;IACL,OAAO;IACP,aAAa;IACd;GACF,CACF;EACD,MAAM;EACN,OAAO;GACL,WAAW,EACT,OAAO;IACL,EACE,MAAM,QACP;IACD,EACE,MAAM,WACP;IACD,EACE,MAAM,UACP;IACD,EACE,MAAM,UACP;IACD;KACE,MAAM;KACN,OAAO,EACL,MAAM,qBACP;KACF;IACD;KACE,MAAM;KACN,sBAAsB,EACpB,MAAM,qBACP;KACF;IACF,EACF;GACD,YAAY;IACV,MAAM;IACN,sBAAsB,EACpB,MAAM,qBACP;IACF;GACD,aAAa,EACX,MAAM;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD,EACF;GACD,eAAe;IACb,MAAM;IACN,YAAY;KACV,IAAI;MACF,OAAO,CACL,EACE,MAAM,UACP,EACD,EACE,MAAM,UACP,CACF;MACD,aAAa;MACd;KACD,OAAO;MACL,MAAM,CAAC,UAAU,OAAO;MACxB,aAAa;MACd;KACD,WAAW;MACT,MAAM,CAAC,UAAU,OAAO;MACxB,aACE;MACH;KACD,UAAU;MACR,MAAM,CAAC,UAAU,OAAO;MACxB,aAAa;MACd;KACD,MAAM;MACJ,MAAM,CAAC,UAAU,OAAO;MACxB,aACE;MACH;KACD,MAAM;MACJ,MAAM,CAAC,UAAU,OAAO;MACxB,aAAa;MACd;KACD,eAAe;MACb,MAAM,CAAC,UAAU,OAAO;MACxB,aAAa;MACd;KACD,YAAY;MACV,MAAM,CAAC,UAAU,OAAO;MACxB,aAAa;MACd;KACD,UAAU;MACR,MAAM;MACN,aAAa;MACd;KACD,OAAO;MACL,MAAM;OAAC;OAAU;OAAU;OAAO;MAClC,aAAa;MACd;KACD,eAAe;MACb,MAAM,CAAC,UAAU,OAAO;MACxB,aAAa;MACd;KACF;IACD,UAAU,CAAC,KAAK;IAChB,sBAAsB,EACpB,MAAM,qBACP;IACF;GACD,oBAAoB,EAClB,OAAO;IACL,EACE,MAAM,UACP;IACD,EACE,MAAM,QACP;IACD,EACE,MAAM,yBACP;IACF,EACF;GACD,YAAY,EACV,OAAO;IACL;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;UAAC;UAAU;UAAU;UAAY;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;UAAC;UAAQ;UAAU;UAAQ;SACjC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;SACN,OAAO;SACP,aAAa;SACb,SACE;SACH;QACD,qBAAqB;SACnB,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,uBAAuB;SACrB,MAAM;UAAC;UAAU;UAAU;UAAY;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,sBAAsB;SACpB,MAAM;UAAC;UAAQ;UAAU;UAAQ;SACjC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACd;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,OAAO;SACL,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,SAAS;SACP,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,SAAS;SACP,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,MAAM;SACJ,MAAM;UAAC;UAAS;UAAQ;UAAW;UAAW;UAAU;SACxD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;UAAC;UAAQ;UAAU;UAAQ;SACjC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM,CAAC,aAAa,UAAU;SAC9B,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO,EACL,MAAM,UACP;SACD,OAAO;SACP,aAAa;SACb,SAAS;UAAC;UAAU;UAAU;UAAS;SACxC;QACD,cAAc;SACZ,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACd;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAK;SAC5C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,eAAe;SACb,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAK;SAC5C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,aACE;SACF,OAAO,EACL,OAAO,CACL,EACE,MAAM,sBACP,EACD,EACE,MAAM,QACP,CACF,EACF;SACF;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,YAAY;SACV,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,UAAU;SACR,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,YAAY;UACV,UAAU;WACR,MAAM;YAAC;YAAO;YAAU;YAAS;WACjC,aACE;WACH;UACD,YAAY;WACV,MAAM;YAAC;YAAQ;YAAU;YAAQ;WACjC,aACE;WACH;UACF;SACD,sBAAsB;SACtB,OAAO;SACP,aAAa;SACb,SAAS;UACP,UAAU;UACV,YAAY;UACb;SACF;QACD,WAAW;SACT,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM,CAAC,SAAS,WAAW;SAC3B,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,SAAS;SACT,SAAS;SACT,YAAY;SACZ,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UAAC;UAAM;UAAW;UAAM;UAAK;SACnC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,oBAAoB;SAClB,MAAM;SACN,SAAS;SACT,SAAS;SACT,YAAY;SACZ,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,QAAQ;SACN,MAAM;SACN,aACE;SACH;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,SAAS;SACT,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,mBAAmB;SACjB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,qBAAqB;SACnB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,sBAAsB;SACpB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,qBAAqB;SACnB,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;UAAC;UAAO;UAAQ;UAAQ;UAAM;SACpC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,QAAQ;SACN,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM,CAAC,QAAQ;SACf,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM,CAAC,OAAO;SACd,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,MAAM;SACJ,MAAM;SACN,aACE;SACH;QACD,aAAa;SACX,MAAM;SACN,aACE;SACH;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,SAAS;SACP,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAK;SAC5C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,UAAU;SACR,MAAM;SACN,aACE;SACF,OAAO,EACL,OAAO,CACL,EACE,MAAM,sBACP,EACD,EACE,MAAM,QACP,CACF,EACF;SACF;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,KAAK;SACH,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM,CAAC,UAAU,QAAQ;SACzB,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aACE;SACH;QACD,mBAAmB;SACjB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,sBAAsB;SACpB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,QAAQ;SACN,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,SAAS;SACP,MAAM,CAAC,QAAQ,QAAQ;SACvB,OAAO;SACP,aACE;SACF,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,UAAU;SACR,MAAM;SACN,OAAO;SACP,aAAa;SACd;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,KAAK;SACH,MAAM;SACN,OAAO;SACP,aAAa;SACb,SACE;SACH;QACD,KAAK;SACH,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM,CAAC,QAAQ,QAAQ;SACvB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM,CAAC,SAAS,UAAU;SAC1B,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,UAAU;SACR,MAAM;UAAC;UAAO;UAAU;UAAQ;SAChC,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,MAAM;SACJ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACd;QACD,aAAa;SACX,MAAM,CAAC,YAAY,MAAM;SACzB,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aAAa;SACd;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,eAAe;SACb,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAK;SAC5C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,aACE;SACF,OAAO,EACL,OAAO,CACL,EACE,MAAM,sBACP,EACD,EACE,MAAM,QACP,CACF,EACF;SACF;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,a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Cb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,KAAK;SACH,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAK;SAC5C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,UAAU;SACR,MAAM,CAAC,aAAa,UAAU;SAC9B,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,SAAS;SACT,SAAS;SACT,YAAY;SACZ,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;UAAC;UAAU;UAAa;UAAW;SACzC,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;SACN,SAAS;SACT,SAAS;SACT,YAAY;SACZ,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,YAAY;SACV,MAAM,CAAC,cAAc,WAAW;SAChC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,oBAAoB;SAClB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,qBAAqB;SACnB,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aACE;SACH;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aAAa;SACd;QACD,kBAAkB;SAChB,MAAM;SACN,OAAO;SACP,aAAa;SACd;QACD,oBAAoB;SAClB,MAAM;SACN,OAAO;SACP,aAAa;SACd;QACD,mBAAmB;SACjB,MAAM;SACN,OAAO;SACP,aAAa;SACd;QACD,uBAAuB;SACrB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,sBAAsB;SACpB,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,aACE;SACH;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,aAAa;SACX,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,QAAQ;SACN,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACH;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,oBAAoB;SAClB,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,YAAY;UACV,UAAU;WACR,MAAM;YAAC;YAAO;YAAU;YAAS;WACjC,aACE;WACH;UACD,YAAY;WACV,MAAM;YAAC;YAAQ;YAAU;YAAQ;WACjC,aACE;WACH;UACF;SACD,sBAAsB;SACtB,OAAO;SACP,aACE;SACF,SAAS;UACP,YAAY;UACZ,UAAU;UACX;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM,CAAC,SAAS,WAAW;SAC3B,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,SAAS;SACT,SAAS;SACT,YAAY;SACZ,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,KAAK;SACH,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAK;SAC5C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,YAAY;SACV,MAAM;SACN,aACE;SACH;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,QAAQ;SACN,MAAM;SACN,OAAO;UACL,MAAM;UACN,YAAY;WACV,OAAO;YACL,MAAM;YACN,aAAa;YACd;WACD,aAAa;YACX,MAAM;YACN,aACE;YACH;WACD,MAAM;YACJ,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,QAAQ;UACnB,sBAAsB;UACvB;SACD,OAAO;SACP,aACE;SACF,SAAS,CACP,EACE,OAAO,gCACR,CACF;SACF;QACD,UAAU;SACR,MAAM,CAAC,YAAY,QAAQ;SAC3B,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,oBAAoB;SAClB,MAAM;SACN,SAAS;SACT,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UAAC;UAAQ;UAAU;UAAQ;SACjC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,QAAQ;SACN,MAAM,CAAC,SAAS,OAAO;SACvB,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,YAAY;SACV,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,mBAAmB;SACjB,MAAM;SACN,OAAO;SACP,aACE;SACH;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM,CAAC,YAAY,QAAQ;SAC3B,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,SAAS;SACT,SAAS;SACT,YAAY;SACZ,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,SAAS;SACT,SAAS;SACT,YAAY;SACZ,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,aAAa;SACX,MAAM,CAAC,cAAc,WAAW;SAChC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAE;SACrB,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACH;QACD,eAAe;SACb,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aACE;SACH;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,aACE;SACH;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY,EACV,cAAc;QACZ,MAAM;QACN,SAAS;QACT,OAAO;QACP,aAAa;QACb,SAAS;QACV,EACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,yBAAyB;SACvB,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,uBAAuB;SACrB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,mBAAmB;SACjB,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,SAAS;SACT,SAAS;SACT,YAAY;SACZ,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,MAAM;SACJ,MAAM;SACN,aACE;SACH;QACD,SAAS;SACP,MAAM;SACN,aACE;SACH;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,iBAAiB;SACf,MAAM;UAAC;UAAU;UAAU;UAAY;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;UAAC;UAAQ;UAAU;UAAQ;SACjC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;SACN,OAAO;SACP,aAAa;SACb,SACE;SACH;QACD,qBAAqB;SACnB,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,uBAAuB;SACrB,MAAM;UAAC;UAAU;UAAU;UAAY;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,sBAAsB;SACpB,MAAM;UAAC;UAAQ;UAAU;UAAQ;SACjC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACd;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,WAAW;SACT,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,eAAe;SACb,MAAM;UAAC;UAAO;UAAM;UAAM;UAAM;UAAM;UAAK;SAC3C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,OAAO,CACL,EACE,MAAM,UACP,EACD;UACE,MAAM;UACN,YAAY;WACV,MAAM;YACJ,MAAM,CAAC,SAAS,QAAQ;YACxB,aAAa;YACd;WACD,OAAO;YACL,MAAM;YACN,aACE;YACH;WACD,UAAU;YACR,MAAM;YACN,aACE;YACH;WACF;UACD,UAAU,CAAC,OAAO;UAClB,sBAAsB;UACvB,CACF;SACD,OAAO;SACP,aAAa;SACb,SAAS;UACP,MAAM;UACN,OAAO;UACR;SACF;QACD,WAAW;SACT,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,SAAS;SACT,SAAS;SACT,YAAY;SACZ,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;UAAC;UAAG;UAAG;UAAG;UAAG;UAAG;UAAG;SACzB,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,OAAO;OACP,aAAa;OACd;MACD,OAAO;OACL,MAAM;OACN,YAAY;QACV,UAAU;SACR,MAAM;SACN,OAAO;SACP,aAAa;SACd;QACD,cAAc;SACZ,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,KAAK;SACH,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,QAAQ;SACN,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM,CAAC,UAAU,OAAO;SACxB,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,SAAS;SACP,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,SAAS;SACP,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,KAAK;SACH,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,QAAQ;SACN,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,MAAM;SACJ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,YAAY;SACV,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,oBAAoB;SAClB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,gBAAgB;SACd,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,kBAAkB;SAChB,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,cAAc;SACZ,MAAM;UAAC;UAAQ;UAAM;UAAM;UAAM;UAAM;UAAO;SAC9C,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UAAC;UAAQ;UAAQ;UAAU;UAAQ;SACzC,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,aAAa;SACX,MAAM;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACD,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,gBAAgB;SACd,MAAM,CAAC,QAAQ,QAAQ;SACvB,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,aAAa;SACX,MAAM;SACN,SAAS;SACT,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM,CAAC,SAAS,UAAU;SAC1B,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,YAAY;SACV,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aACE;SACF,SAAS;SACV;QACD,UAAU;SACR,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,MAAM;SACJ,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACD,OAAO;SACL,MAAM;SACN,OAAO;SACP,aAAa;SACb,SAAS;SACV;QACF;OACD,sBAAsB;OACtB,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACD;KACE,MAAM;KACN,YAAY;MACV,IAAI;OACF,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,MAAM;OACJ,MAAM;OACN,SACE;OACF,aACE;OACH;MACD,OAAO;OACL,MAAM;OACN,sBAAsB,EACpB,MAAM,qBACP;OACD,aAAa;OACd;MACD,YAAY;OACV,MAAM;OACN,aACE;OACH;MACD,aAAa;OACX,MAAM;OACN,SAAS;OACT,aACE;OACH;MACD,kBAAkB;OAChB,MAAM;OACN,sBAAsB;QACpB,MAAM;QACN,YAAY;SACV,WAAW;UACT,MAAM;UACN,SAAS;UACT,aACE;UACH;SACD,gBAAgB;UACd,MAAM;UACN,SAAS;UACT,aACE;UACH;SACD,mBAAmB;UACjB,MAAM;UACN,SAAS;UACT,aACE;UACH;SACF;QACD,UAAU;SACR;SACA;SACA;SACD;QACD,sBAAsB;QACvB;OACD,aACE;OACH;MACF;KACD,UAAU;MAAC;MAAM;MAAQ;MAAQ;KACjC,sBAAsB;KACvB;IACF,EACF;GACF;EACD,aAAa;EACd;CACD,YAAY;EACV,SAAS;EACT,KAAK;EACL,OAAO;EACP,UAAU,CACR,EACE,MAAM,kBACP,CACF;EACD,MAAM;EACN,YAAY;GACV,SAAS;IACP,MAAM;IACN,SACE;IACF,aAAa;IACd;GACD,MAAM;IACJ,MAAM;IACN,aAAa;IACd;GACF;EACD,UAAU,CAAC,OAAO;EAClB,sBAAsB;EACtB,aAAa;EACd;CACD,QAAQ;EACN,SAAS;EACT,KAAK;EACL,OAAO;EACP,UAAU,CACR;GACE,MAAM;GACN,gBAAgB,EAAE;GACnB,CACF;EACD,MAAM;EACN,YAAY;GACV,SAAS;IACP,MAAM;IACN,SACE;IACF,aAAa;IACd;GACD,MAAM;IACJ,MAAM;IACN,aACE;IACH;GACD,gBAAgB;IACd,MAAM;IACN,UAAU;IACV,OAAO,EACL,MAAM,wEACP;IACD,aAAa;IACd;GACF;EACD,UAAU,CAAC,QAAQ,iBAAiB;EACpC,sBAAsB;EACtB,aAAa;EACd;CACD,OAAO;EACL,SAAS;EACT,KAAK;EACL,OAAO;EACP,UAAU,CACR;GACE,MAAM;GACN,QAAQ;IACN,IAAI;IACJ,MAAM;IACN,OAAO;KACL,YAAY;MACV,MAAM;OACJ,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACD,YAAY;OACV,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACF;KACD,YAAY;MACV,MAAM;OACJ,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACD,YAAY;OACV,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACF;KACD,SAAS;MACP,MAAM;OACJ,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACD,YAAY;OACV,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACF;KACD,WAAW;MACT,MAAM;OACJ,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACD,YAAY;OACV,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACF;KACD,QAAQ;MACN,MAAM;OACJ,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACD,YAAY;OACV,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACF;KACD,OAAO;MACL,MAAM;OACJ,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACD,YAAY;OACV,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACF;KACD,aAAa;MACX,MAAM;OACJ,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACD,YAAY;OACV,GAAG;OACH,GAAG;OACH,GAAG;OACJ;MACF;KACF;IACD,MAAM,EAAE;IACR,WAAW;KACT,YAAY;KACZ,OAAO;KACP,SAAS;KACT,OAAO;KACP,YAAY;KACZ,OAAO;KACR;IACD,cAAc;KACZ,QAAQ;KACR,MAAM;KACP;IACD,SAAS;IACT,OAAO;KACL,OAAO;KACP,QAAQ;KACR,OAAO;KACP,YAAY;KACb;IACF;GACD,QAAQ;GACT,CACF;EACD,MAAM;EACN,YAAY;GACV,SAAS;IACP,MAAM;IACN,SACE;IACF,aAAa;IACd;GACD,MAAM;IACJ,MAAM;IACN,aAAa;IACd;GACD,QAAQ;IACN,MAAM;IACN,aAAa;IACd;GACD,QAAQ;IACN,MAAM;IACN,aACE;IACH;GACF;EACD,UAAU;GAAC;GAAQ;GAAU;GAAS;EACtC,sBAAsB;EACtB,aAAa;EACd;CACD,YAAY;EACV,SAAS;EACT,KAAK;EACL,OAAO;EACP,UAAU,CACR;GACE,MAAM;GACN,UAAU;GACV,kBAAkB,EAAE;GACrB,CACF;EACD,MAAM;EACN,YAAY;GACV,SAAS;IACP,MAAM;IACN,SACE;IACF,aAAa;IACd;GACD,MAAM;IACJ,MAAM;IACN,aAAa;IACd;GACD,UAAU;IACR,MAAM,CAAC,OAAO,SAAS;IACvB,aAAa;IACd;GACD,kBAAkB;IAChB,MAAM;IACN,OAAO,EACL,MAAM,0BACP;IACD,aAAa;IACd;GACF;EACD,UAAU;GAAC;GAAQ;GAAY;GAAmB;EAClD,sBAAsB;EACtB,OAAO,EACL,gBAAgB;GACd,MAAM;GACN,YAAY;IACV,IAAI;KACF,MAAM;KACN,aACE;KACH;IACD,MAAM;KACJ,MAAM,CAAC,UAAU,OAAO;KACxB,aAAa;KACd;IACD,OAAO;KACL,MAAM,CAAC,UAAU,OAAO;KACxB,aAAa;KACd;IACD,QAAQ;KACN,MAAM,CAAC,UAAU,OAAO;KACxB,aAAa;KACd;IACD,MAAM;KACJ,MAAM,CAAC,UAAU,OAAO;KACxB,aAAa;KACd;IACD,QAAQ;KACN,MAAM;KACN,aACE;KACH;IACD,UAAU;KACR,MAAM,CAAC,WAAW,OAAO;KACzB,aAAa;KACd;IACD,WAAW;KACT,MAAM,CAAC,WAAW,OAAO;KACzB,aACE;KACH;IACD,UAAU;KACR,MAAM;KACN,OAAO,EACL,MAAM,0BACP;KACD,aAAa;KACd;IACF;GACD,UAAU;IACR;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD;GACD,sBAAsB;GACvB,EACF;EACD,aAAa;EACd;CACD,SAAS;EACP,SAAS;EACT,KAAK;EACL,OAAO;EACP,UAAU,CACR;GACE,MAAM;GACN,SAAS;GACT,YAAY;GACZ,mBAAmB;GACnB,QAAQ,CAAC,UAAU;GACnB,aAAa;IACX,OAAO,EAAE;IACT,OAAO,EAAE;IACT,UAAU,EAAE;IACZ,WAAW,EAAE;IACd;GACF,CACF;EACD,MAAM;EACN,YAAY;GACV,SAAS;IACP,MAAM;IACN,SACE;IACF,aAAa;IACd;GACD,MAAM;IACJ,MAAM;IACN,aAAa;IACd;GACD,SAAS;IACP,MAAM;IACN,aACE;IACH;GACD,YAAY;IACV,MAAM,CAAC,UAAU,OAAO;IACxB,aACE;IACH;GACD,mBAAmB;IACjB,MAAM,CAAC,UAAU,OAAO;IACxB,aACE;IACH;GACD,QAAQ;IACN,MAAM;IACN,OAAO,EACL,MAAM,UACP;IACD,aAAa;IACd;G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"}
|