[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/js/dist/ -> theme.js (source)

   1  (function() {
   2  "use strict";
   3  var wp;
   4  (wp ||= {}).theme = (() => {
   5    var __create = Object.create;
   6    var __defProp = Object.defineProperty;
   7    var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
   8    var __getOwnPropNames = Object.getOwnPropertyNames;
   9    var __getProtoOf = Object.getPrototypeOf;
  10    var __hasOwnProp = Object.prototype.hasOwnProperty;
  11    var __commonJS = (cb, mod) => function __require() {
  12      return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
  13    };
  14    var __export = (target, all) => {
  15      for (var name in all)
  16        __defProp(target, name, { get: all[name], enumerable: true });
  17    };
  18    var __copyProps = (to2, from, except, desc) => {
  19      if (from && typeof from === "object" || typeof from === "function") {
  20        for (let key of __getOwnPropNames(from))
  21          if (!__hasOwnProp.call(to2, key) && key !== except)
  22            __defProp(to2, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  23      }
  24      return to2;
  25    };
  26    var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  27      // If the importer is in node compatibility mode or this is not an ESM
  28      // file that has been converted to a CommonJS file using a Babel-
  29      // compatible transform (i.e. "__esModule" has not been set), then set
  30      // "default" to the CommonJS "module.exports" for node compatibility.
  31      isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  32      mod
  33    ));
  34    var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
  35  
  36    // package-external:@wordpress/deprecated
  37    var require_deprecated = __commonJS({
  38      "package-external:@wordpress/deprecated"(exports, module) {
  39        module.exports = window.wp.deprecated;
  40      }
  41    });
  42  
  43    // package-external:@wordpress/private-apis
  44    var require_private_apis = __commonJS({
  45      "package-external:@wordpress/private-apis"(exports, module) {
  46        module.exports = window.wp.privateApis;
  47      }
  48    });
  49  
  50    // package-external:@wordpress/element
  51    var require_element = __commonJS({
  52      "package-external:@wordpress/element"(exports, module) {
  53        module.exports = window.wp.element;
  54      }
  55    });
  56  
  57    // package-external:@wordpress/compose
  58    var require_compose = __commonJS({
  59      "package-external:@wordpress/compose"(exports, module) {
  60        module.exports = window.wp.compose;
  61      }
  62    });
  63  
  64    // vendor-external:react/jsx-runtime
  65    var require_jsx_runtime = __commonJS({
  66      "vendor-external:react/jsx-runtime"(exports, module) {
  67        module.exports = window.ReactJSXRuntime;
  68      }
  69    });
  70  
  71    // packages/theme/build-module/index.mjs
  72    var index_exports = {};
  73    __export(index_exports, {
  74      ThemeProvider: () => ThemeProvider,
  75      privateApis: () => privateApis
  76    });
  77  
  78    // packages/theme/build-module/private-apis.mjs
  79    var import_deprecated = __toESM(require_deprecated(), 1);
  80  
  81    // packages/theme/build-module/lock-unlock.mjs
  82    var import_private_apis = __toESM(require_private_apis(), 1);
  83    var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
  84      "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
  85      "@wordpress/theme"
  86    );
  87  
  88    // packages/theme/build-module/theme-provider.mjs
  89    var import_element3 = __toESM(require_element(), 1);
  90    var import_compose = __toESM(require_compose(), 1);
  91  
  92    // packages/theme/build-module/context.mjs
  93    var import_element = __toESM(require_element(), 1);
  94    var ThemeContext = (0, import_element.createContext)({
  95      resolvedSettings: {
  96        color: {},
  97        cursor: void 0,
  98        cornerRadius: void 0
  99      }
 100    });
 101  
 102    // packages/theme/node_modules/colorjs.io/src/multiply-matrices.js
 103    function dot3(a, b2) {
 104      return a[0] * b2[0] + a[1] * b2[1] + a[2] * b2[2];
 105    }
 106    function multiply_v3_m3x3(input, matrix, out = [0, 0, 0]) {
 107      const x = dot3(input, matrix[0]);
 108      const y = dot3(input, matrix[1]);
 109      const z = dot3(input, matrix[2]);
 110      out[0] = x;
 111      out[1] = y;
 112      out[2] = z;
 113      return out;
 114    }
 115  
 116    // packages/theme/node_modules/colorjs.io/src/util.js
 117    function isString(str) {
 118      return type(str) === "string";
 119    }
 120    function type(o) {
 121      let str = Object.prototype.toString.call(o);
 122      return (str.match(/^\[object\s+(.*?)\]$/)[1] || "").toLowerCase();
 123    }
 124    function serializeNumber(n2, { precision = 16, unit }) {
 125      if (isNone(n2)) {
 126        return "none";
 127      }
 128      n2 = +toPrecision(n2, precision);
 129      return n2 + (unit ?? "");
 130    }
 131    function isNone(n2) {
 132      return n2 === null;
 133    }
 134    function toPrecision(n2, precision) {
 135      if (n2 === 0) {
 136        return 0;
 137      }
 138      let integer = ~~n2;
 139      let digits = 0;
 140      if (integer && precision) {
 141        digits = ~~Math.log10(Math.abs(integer)) + 1;
 142      }
 143      const multiplier = 10 ** (precision - digits);
 144      return Math.floor(n2 * multiplier + 0.5) / multiplier;
 145    }
 146    function interpolate(start, end, p3) {
 147      if (isNone(start) || isNaN(start)) {
 148        return end;
 149      }
 150      if (isNone(end) || isNaN(end)) {
 151        return start;
 152      }
 153      return start + (end - start) * p3;
 154    }
 155    function interpolateInv(start, end, value) {
 156      return (value - start) / (end - start);
 157    }
 158    function mapRange(from, to2, value) {
 159      if (!from || !to2 || from === to2 || from[0] === to2[0] && from[1] === to2[1] || isNaN(value) || value === null) {
 160        return value;
 161      }
 162      return interpolate(to2[0], to2[1], interpolateInv(from[0], from[1], value));
 163    }
 164    function clamp(min, val, max) {
 165      return Math.max(Math.min(max, val), min);
 166    }
 167    function copySign(to2, from) {
 168      return Math.sign(to2) === Math.sign(from) ? to2 : -to2;
 169    }
 170    function spow(base, exp2) {
 171      return copySign(Math.abs(base) ** exp2, base);
 172    }
 173    function zdiv(n2, d2) {
 174      return d2 === 0 ? 0 : n2 / d2;
 175    }
 176    function bisectLeft(arr, value, lo = 0, hi = arr.length) {
 177      while (lo < hi) {
 178        const mid = lo + hi >> 1;
 179        if (arr[mid] < value) {
 180          lo = mid + 1;
 181        } else {
 182          hi = mid;
 183        }
 184      }
 185      return lo;
 186    }
 187    function isInstance(arg, constructor) {
 188      if (arg instanceof constructor) {
 189        return true;
 190      }
 191      const targetName = constructor.name;
 192      while (arg) {
 193        const proto = Object.getPrototypeOf(arg);
 194        const constructorName = proto?.constructor?.name;
 195        if (constructorName === targetName) {
 196          return true;
 197        }
 198        if (!constructorName || constructorName === "Object") {
 199          return false;
 200        }
 201        arg = proto;
 202      }
 203      return false;
 204    }
 205  
 206    // packages/theme/node_modules/colorjs.io/src/Type.js
 207    var Type = class {
 208      // Class properties - declared here so that type inference works
 209      type;
 210      coordMeta;
 211      coordRange;
 212      /** @type {[number, number]} */
 213      range;
 214      /**
 215       * @param {any} type
 216       * @param {import("./types.js").CoordMeta} coordMeta
 217       */
 218      constructor(type2, coordMeta) {
 219        if (typeof type2 === "object") {
 220          this.coordMeta = type2;
 221        }
 222        if (coordMeta) {
 223          this.coordMeta = coordMeta;
 224          this.coordRange = coordMeta.range ?? coordMeta.refRange;
 225        }
 226        if (typeof type2 === "string") {
 227          let params = type2.trim().match(/^(?<type><[a-z]+>)(\[(?<min>-?[.\d]+),\s*(?<max>-?[.\d]+)\])?$/);
 228          if (!params) {
 229            throw new TypeError(`Cannot parse $type2} as a type definition.`);
 230          }
 231          this.type = params.groups.type;
 232          let { min, max } = params.groups;
 233          if (min || max) {
 234            this.range = [+min, +max];
 235          }
 236        }
 237      }
 238      /** @returns {[number, number]} */
 239      get computedRange() {
 240        if (this.range) {
 241          return this.range;
 242        }
 243        if (this.type === "<percentage>") {
 244          return this.percentageRange();
 245        } else if (this.type === "<angle>") {
 246          return [0, 360];
 247        }
 248        return null;
 249      }
 250      get unit() {
 251        if (this.type === "<percentage>") {
 252          return "%";
 253        } else if (this.type === "<angle>") {
 254          return "deg";
 255        }
 256        return "";
 257      }
 258      /**
 259       * Map a number to the internal representation
 260       * @param {number} number
 261       */
 262      resolve(number) {
 263        if (this.type === "<angle>") {
 264          return number;
 265        }
 266        let fromRange = this.computedRange;
 267        let toRange = this.coordRange;
 268        if (this.type === "<percentage>") {
 269          toRange ??= this.percentageRange();
 270        }
 271        return mapRange(fromRange, toRange, number);
 272      }
 273      /**
 274       * Serialize a number from the internal representation to a string
 275       * @param {number} number
 276       * @param {number} [precision]
 277       */
 278      serialize(number, precision) {
 279        let toRange = this.type === "<percentage>" ? this.percentageRange(100) : this.computedRange;
 280        let unit = this.unit;
 281        number = mapRange(this.coordRange, toRange, number);
 282        return serializeNumber(number, { unit, precision });
 283      }
 284      toString() {
 285        let ret = this.type;
 286        if (this.range) {
 287          let [min = "", max = ""] = this.range;
 288          ret += `[$min},$max}]`;
 289        }
 290        return ret;
 291      }
 292      /**
 293       * Returns a percentage range for values of this type
 294       * @param {number} scale
 295       * @returns {[number, number]}
 296       */
 297      percentageRange(scale = 1) {
 298        let range;
 299        if (this.coordMeta && this.coordMeta.range || this.coordRange && this.coordRange[0] >= 0) {
 300          range = [0, 1];
 301        } else {
 302          range = [-1, 1];
 303        }
 304        return [range[0] * scale, range[1] * scale];
 305      }
 306      static get(type2, coordMeta) {
 307        if (isInstance(type2, this)) {
 308          return type2;
 309        }
 310        return new this(type2, coordMeta);
 311      }
 312    };
 313  
 314    // packages/theme/node_modules/colorjs.io/src/Format.js
 315    var instance = /* @__PURE__ */ Symbol("instance");
 316    var Format = class _Format {
 317      // Class properties - declared here so that type inference works
 318      type;
 319      name;
 320      spaceCoords;
 321      /** @type {Type[][]} */
 322      coords;
 323      /** @type {string | undefined} */
 324      id;
 325      /** @type {boolean | undefined} */
 326      alpha;
 327      /**
 328       * @param {FormatInterface} format
 329       * @param {ColorSpace} space
 330       */
 331      constructor(format, space = format.space) {
 332        format[instance] = this;
 333        this.type = "function";
 334        this.name = "color";
 335        Object.assign(this, format);
 336        this.space = space;
 337        if (this.type === "custom") {
 338          return;
 339        }
 340        this.spaceCoords = Object.values(space.coords);
 341        if (!this.coords) {
 342          this.coords = this.spaceCoords.map((coordMeta) => {
 343            let ret = ["<number>", "<percentage>"];
 344            if (coordMeta.type === "angle") {
 345              ret.push("<angle>");
 346            }
 347            return ret;
 348          });
 349        }
 350        this.coords = this.coords.map(
 351          /** @param {string | string[] | Type[]} types */
 352          (types, i) => {
 353            let coordMeta = this.spaceCoords[i];
 354            if (typeof types === "string") {
 355              types = types.trim().split(/\s*\|\s*/);
 356            }
 357            return types.map((type2) => Type.get(type2, coordMeta));
 358          }
 359        );
 360      }
 361      /**
 362       * @param {Coords} coords
 363       * @param {number} precision
 364       * @param {Type[]} types
 365       */
 366      serializeCoords(coords, precision, types) {
 367        types = coords.map((_, i) => Type.get(types?.[i] ?? this.coords[i][0], this.spaceCoords[i]));
 368        return coords.map((c, i) => types[i].serialize(c, precision));
 369      }
 370      /**
 371       * Validates the coordinates of a color against a format's coord grammar and
 372       * maps the coordinates to the range or refRange of the coordinates.
 373       * @param {Coords} coords
 374       * @param {[string, string, string]} types
 375       */
 376      coerceCoords(coords, types) {
 377        return Object.entries(this.space.coords).map(([id, coordMeta], i) => {
 378          let arg = coords[i];
 379          if (isNone(arg) || isNaN(arg)) {
 380            return arg;
 381          }
 382          let providedType = types[i];
 383          let type2 = this.coords[i].find((c) => c.type == providedType);
 384          if (!type2) {
 385            let coordName = coordMeta.name || id;
 386            throw new TypeError(
 387              `$providedType ?? /** @type {any} */
 388              arg?.raw ?? arg} not allowed for $coordName} in $this.name}()`
 389            );
 390          }
 391          arg = type2.resolve(arg);
 392          if (type2.range) {
 393            types[i] = type2.toString();
 394          }
 395          return arg;
 396        });
 397      }
 398      /**
 399       * @returns {boolean | Required<FormatInterface>["serialize"]}
 400       */
 401      canSerialize() {
 402        return this.type === "function" || /** @type {any} */
 403        this.serialize;
 404      }
 405      /**
 406       * @param {string} str
 407       * @returns {(import("./types.js").ColorConstructor) | undefined | null}
 408       */
 409      parse(str) {
 410        return null;
 411      }
 412      /**
 413       * @param {Format | FormatInterface} format
 414       * @param {RemoveFirstElement<ConstructorParameters<typeof Format>>} args
 415       * @returns {Format}
 416       */
 417      static get(format, ...args) {
 418        if (!format || isInstance(format, this)) {
 419          return (
 420            /** @type {Format} */
 421            format
 422          );
 423        }
 424        if (format[instance]) {
 425          return format[instance];
 426        }
 427        return new _Format(format, ...args);
 428      }
 429    };
 430  
 431    // packages/theme/node_modules/colorjs.io/src/hooks.js
 432    var Hooks = class {
 433      add(name, callback, first) {
 434        if (typeof arguments[0] != "string") {
 435          for (var name in arguments[0]) {
 436            this.add(name, arguments[0][name], arguments[1]);
 437          }
 438          return;
 439        }
 440        (Array.isArray(name) ? name : [name]).forEach(function(name2) {
 441          this[name2] = this[name2] || [];
 442          if (callback) {
 443            this[name2][first ? "unshift" : "push"](callback);
 444          }
 445        }, this);
 446      }
 447      run(name, env) {
 448        this[name] = this[name] || [];
 449        this[name].forEach(function(callback) {
 450          callback.call(env && env.context ? env.context : env, env);
 451        });
 452      }
 453    };
 454    var hooks = new Hooks();
 455    var hooks_default = hooks;
 456  
 457    // packages/theme/node_modules/colorjs.io/src/adapt.js
 458    var WHITES = {
 459      // for compatibility, the four-digit chromaticity-derived ones everyone else uses
 460      D50: [0.3457 / 0.3585, 1, (1 - 0.3457 - 0.3585) / 0.3585],
 461      D65: [0.3127 / 0.329, 1, (1 - 0.3127 - 0.329) / 0.329]
 462    };
 463    function getWhite(name) {
 464      if (Array.isArray(name)) {
 465        return name;
 466      }
 467      return WHITES[name];
 468    }
 469    function adapt(W1, W2, XYZ, options = {}) {
 470      W1 = getWhite(W1);
 471      W2 = getWhite(W2);
 472      if (!W1 || !W2) {
 473        throw new TypeError(
 474          `Missing white point to convert ${!W1 ? "from" : ""}${!W1 && !W2 ? "/" : ""}${!W2 ? "to" : ""}`
 475        );
 476      }
 477      if (W1 === W2) {
 478        return XYZ;
 479      }
 480      let env = { W1, W2, XYZ, options };
 481      hooks_default.run("chromatic-adaptation-start", env);
 482      if (!env.M) {
 483        if (env.W1 === WHITES.D65 && env.W2 === WHITES.D50) {
 484          env.M = [
 485            [1.0479297925449969, 0.022946870601609652, -0.05019226628920524],
 486            [0.02962780877005599, 0.9904344267538799, -0.017073799063418826],
 487            [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371]
 488          ];
 489        } else if (env.W1 === WHITES.D50 && env.W2 === WHITES.D65) {
 490          env.M = [
 491            [0.955473421488075, -0.02309845494876471, 0.06325924320057072],
 492            [-0.0283697093338637, 1.0099953980813041, 0.021041441191917323],
 493            [0.012314014864481998, -0.020507649298898964, 1.330365926242124]
 494          ];
 495        }
 496      }
 497      hooks_default.run("chromatic-adaptation-end", env);
 498      if (env.M) {
 499        return multiply_v3_m3x3(env.XYZ, env.M);
 500      } else {
 501        throw new TypeError("Only Bradford CAT with white points D50 and D65 supported for now.");
 502      }
 503    }
 504  
 505    // packages/theme/node_modules/colorjs.io/src/defaults.js
 506    var defaults_default = {
 507      gamut_mapping: "css",
 508      precision: 5,
 509      deltaE: "76",
 510      // Default deltaE method
 511      verbose: globalThis?.process?.env?.NODE_ENV?.toLowerCase() !== "test",
 512      warn: function warn(msg) {
 513        if (this.verbose) {
 514          globalThis?.console?.warn?.(msg);
 515        }
 516      }
 517    };
 518  
 519    // packages/theme/node_modules/colorjs.io/src/parse.js
 520    function parse(str, options) {
 521      let env = {
 522        str: String(str)?.trim(),
 523        options
 524      };
 525      hooks_default.run("parse-start", env);
 526      if (env.color) {
 527        return env.color;
 528      }
 529      env.parsed = parseFunction(env.str);
 530      let ret;
 531      let meta = env.options ? env.options.parseMeta ?? env.options.meta : null;
 532      if (env.parsed) {
 533        let name = env.parsed.name;
 534        let format;
 535        let space;
 536        let coords = env.parsed.args;
 537        let types = coords.map((c, i) => env.parsed.argMeta[i]?.type);
 538        if (name === "color") {
 539          let id = coords.shift();
 540          types.shift();
 541          let alternateId = id.startsWith("--") ? id.substring(2) : `--$id}`;
 542          let ids = [id, alternateId];
 543          format = ColorSpace.findFormat({ name, id: ids, type: "function" });
 544          if (!format) {
 545            let didYouMean;
 546            let registryId = id in ColorSpace.registry ? id : alternateId;
 547            if (registryId in ColorSpace.registry) {
 548              let cssId = ColorSpace.registry[registryId].formats?.color?.id;
 549              if (cssId) {
 550                let altColor = str.replace("color(" + id, "color(" + cssId);
 551                didYouMean = `Did you mean $altColor}?`;
 552              }
 553            }
 554            throw new TypeError(
 555              `Cannot parse $env.str}. ` + (didYouMean ?? "Missing a plugin?")
 556            );
 557          }
 558          space = format.space;
 559          if (format.id.startsWith("--") && !id.startsWith("--")) {
 560            defaults_default.warn(
 561              `$space.name} is a non-standard space and not currently supported in the CSS spec. Use prefixed color($format.id}) instead of color($id}).`
 562            );
 563          }
 564          if (id.startsWith("--") && !format.id.startsWith("--")) {
 565            defaults_default.warn(
 566              `$space.name} is a standard space and supported in the CSS spec. Use color($format.id}) instead of prefixed color($id}).`
 567            );
 568          }
 569        } else {
 570          format = ColorSpace.findFormat({ name, type: "function" });
 571          space = format.space;
 572        }
 573        if (meta) {
 574          Object.assign(meta, {
 575            format,
 576            formatId: format.name,
 577            types,
 578            commas: env.parsed.commas
 579          });
 580        }
 581        let alpha = 1;
 582        if (env.parsed.lastAlpha) {
 583          alpha = env.parsed.args.pop();
 584          if (meta) {
 585            meta.alphaType = types.pop();
 586          }
 587        }
 588        let coordCount = format.coords.length;
 589        if (coords.length !== coordCount) {
 590          throw new TypeError(
 591            `Expected $coordCount} coordinates for $space.id} in $env.str}), got $coords.length}`
 592          );
 593        }
 594        coords = format.coerceCoords(coords, types);
 595        ret = { spaceId: space.id, coords, alpha };
 596      } else {
 597        spaceloop: for (let space of ColorSpace.all) {
 598          for (let formatId in space.formats) {
 599            let format = space.formats[formatId];
 600            if (format.type !== "custom") {
 601              continue;
 602            }
 603            if (format.test && !format.test(env.str)) {
 604              continue;
 605            }
 606            let formatObject = space.getFormat(format);
 607            let color = formatObject.parse(env.str);
 608            if (color) {
 609              if (meta) {
 610                Object.assign(meta, { format: formatObject, formatId });
 611              }
 612              ret = color;
 613              break spaceloop;
 614            }
 615          }
 616        }
 617      }
 618      if (!ret) {
 619        throw new TypeError(`Could not parse $str} as a color. Missing a plugin?`);
 620      }
 621      ret.alpha = isNone(ret.alpha) ? ret.alpha : ret.alpha === void 0 ? 1 : clamp(0, ret.alpha, 1);
 622      return ret;
 623    }
 624    var units = {
 625      "%": 0.01,
 626      deg: 1,
 627      grad: 0.9,
 628      rad: 180 / Math.PI,
 629      turn: 360
 630    };
 631    var regex = {
 632      // Need to list calc(NaN) explicitly as otherwise its ending paren would terminate the function call
 633      function: /^([a-z]+)\(((?:calc\(NaN\)|.)+?)\)$/i,
 634      number: /^([-+]?(?:[0-9]*\.)?[0-9]+(e[-+]?[0-9]+)?)$/i,
 635      unitValue: RegExp(`($Object.keys(units).join("|")})$`),
 636      // NOTE The -+ are not just for prefix, but also for idents, and e+N notation!
 637      singleArgument: /\/?\s*(none|NaN|calc\(NaN\)|[-+\w.]+(?:%|deg|g?rad|turn)?)/g
 638    };
 639    function parseArgument(rawArg) {
 640      let meta = {};
 641      let unit = rawArg.match(regex.unitValue)?.[0];
 642      let value = meta.raw = rawArg;
 643      if (unit) {
 644        meta.type = unit === "%" ? "<percentage>" : "<angle>";
 645        meta.unit = unit;
 646        meta.unitless = Number(value.slice(0, -unit.length));
 647        value = meta.unitless * units[unit];
 648      } else if (regex.number.test(value)) {
 649        value = Number(value);
 650        meta.type = "<number>";
 651      } else if (value === "none") {
 652        value = null;
 653      } else if (value === "NaN" || value === "calc(NaN)") {
 654        value = NaN;
 655        meta.type = "<number>";
 656      } else {
 657        meta.type = "<ident>";
 658      }
 659      return { value: (
 660        /** @type {number} */
 661        value
 662      ), meta: (
 663        /** @type {ArgumentMeta} */
 664        meta
 665      ) };
 666    }
 667    function parseFunction(str) {
 668      if (!str) {
 669        return;
 670      }
 671      str = str.trim();
 672      let parts = str.match(regex.function);
 673      if (parts) {
 674        let args = [];
 675        let argMeta = [];
 676        let lastAlpha = false;
 677        let name = parts[1].toLowerCase();
 678        let separators = parts[2].replace(regex.singleArgument, ($0, rawArg) => {
 679          let { value, meta } = parseArgument(rawArg);
 680          if (
 681            // If there's a slash here, it's modern syntax
 682            $0.startsWith("/") || // If there's still elements to process after there's already 3 in `args` (and the we're not dealing with "color()"), it's likely to be a legacy color like "hsl(0, 0%, 0%, 0.5)"
 683            name !== "color" && args.length === 3
 684          ) {
 685            lastAlpha = true;
 686          }
 687          args.push(value);
 688          argMeta.push(meta);
 689          return "";
 690        });
 691        return {
 692          name,
 693          args,
 694          argMeta,
 695          lastAlpha,
 696          commas: separators.includes(","),
 697          rawName: parts[1],
 698          rawArgs: parts[2]
 699        };
 700      }
 701    }
 702  
 703    // packages/theme/node_modules/colorjs.io/src/getColor.js
 704    function getColor(color, options) {
 705      if (Array.isArray(color)) {
 706        return color.map((c) => getColor(c, options));
 707      }
 708      if (!color) {
 709        throw new TypeError("Empty color reference");
 710      }
 711      if (isString(color)) {
 712        color = parse(color, options);
 713      }
 714      let space = color.space || color.spaceId;
 715      if (typeof space === "string") {
 716        color.space = ColorSpace.get(space);
 717      }
 718      if (color.alpha === void 0) {
 719        color.alpha = 1;
 720      }
 721      return color;
 722    }
 723  
 724    // packages/theme/node_modules/colorjs.io/src/ColorSpace.js
 725    var \u03B5 = 75e-6;
 726    var ColorSpace = class _ColorSpace {
 727      constructor(options) {
 728        this.id = options.id;
 729        this.name = options.name;
 730        this.base = options.base ? _ColorSpace.get(options.base) : null;
 731        this.aliases = options.aliases;
 732        this.displaySpaces = options.displaySpaces?.map((space) => _ColorSpace.get(space));
 733        this.bases = [];
 734        for (let base = this.base; base; base = base.base) {
 735          this.bases.push(base);
 736        }
 737        if (options.rgbGamut) {
 738          this.rgbGamut = options.rgbGamut;
 739        }
 740        if (options.linearGamut) {
 741          this.linearGamut = options.linearGamut;
 742        }
 743        if (this.base) {
 744          if (options.fromBase) {
 745            this.fromBase = options.fromBase;
 746          }
 747          if (options.toBase) {
 748            this.toBase = options.toBase;
 749          }
 750        }
 751        let coords = options.coords ?? this.base.coords;
 752        for (let name in coords) {
 753          if (!("name" in coords[name])) {
 754            coords[name].name = name;
 755          }
 756        }
 757        this.coords = coords;
 758        let white4 = options.white ?? this.base.white ?? "D65";
 759        this.white = getWhite(white4);
 760        this.formats = options.formats ?? {};
 761        for (let name in this.formats) {
 762          let format = this.formats[name];
 763          format.type ||= "function";
 764          format.name ||= name;
 765        }
 766        if (!this.formats.color?.id) {
 767          this.formats.color = {
 768            ...this.formats.color ?? {},
 769            id: options.cssId || this.id
 770          };
 771        }
 772        if (options.gamutSpace) {
 773          this.gamutSpace = options.gamutSpace === "self" ? this : _ColorSpace.get(options.gamutSpace);
 774        } else {
 775          if (this.isPolar) {
 776            this.gamutSpace = this.base;
 777          } else {
 778            this.gamutSpace = this;
 779          }
 780        }
 781        if (this.gamutSpace.isUnbounded) {
 782          this.inGamut = (coords2, options2) => {
 783            return true;
 784          };
 785        }
 786        this.M = options.M ?? {};
 787        this.referred = options.referred;
 788        Object.defineProperty(this, "path", {
 789          value: getPath(this).reverse(),
 790          writable: false,
 791          enumerable: true,
 792          configurable: true
 793        });
 794        hooks_default.run("colorspace-init-end", this);
 795      }
 796      inGamut(coords, { epsilon = \u03B5 } = {}) {
 797        if (!this.equals(this.gamutSpace)) {
 798          coords = this.to(this.gamutSpace, coords);
 799          return this.gamutSpace.inGamut(coords, { epsilon });
 800        }
 801        let coordMeta = Object.values(this.coords);
 802        return coords.every((c, i) => {
 803          let meta = coordMeta[i];
 804          if (meta.type !== "angle" && meta.range) {
 805            if (isNone(c)) {
 806              return true;
 807            }
 808            let [min, max] = meta.range;
 809            return (min === void 0 || c >= min - epsilon) && (max === void 0 || c <= max + epsilon);
 810          }
 811          return true;
 812        });
 813      }
 814      get isUnbounded() {
 815        return Object.values(this.coords).every((coord) => !("range" in coord));
 816      }
 817      get cssId() {
 818        return this.formats?.color?.id || this.id;
 819      }
 820      /**
 821       * The id of this space's hue coordinate, or null if the space is not polar
 822       * @returns {string | null}
 823       */
 824      get hueId() {
 825        for (let id in this.coords) {
 826          if (this.coords[id].type === "angle") {
 827            return id;
 828          }
 829        }
 830        return null;
 831      }
 832      /**
 833       * The index of this space's hue coordinate within its coords array, or -1 if the space is not polar
 834       * @returns {number}
 835       */
 836      get hueIndex() {
 837        return Object.keys(this.coords).findIndex((id) => this.coords[id].type === "angle");
 838      }
 839      get isPolar() {
 840        return this.hueId !== null;
 841      }
 842      /**
 843       * Lookup a format in this color space
 844       * @param {string | object | Format} format - Format id if string. If object, it's converted to a `Format` object and returned.
 845       * @returns {Format}
 846       */
 847      getFormat(format) {
 848        if (!format) {
 849          return null;
 850        }
 851        if (format === "default") {
 852          format = Object.values(this.formats)[0];
 853        } else if (typeof format === "string") {
 854          format = this.formats[format];
 855        }
 856        let ret = Format.get(format, this);
 857        if (ret !== format && format.name in this.formats) {
 858          this.formats[format.name] = ret;
 859        }
 860        return ret;
 861      }
 862      /**
 863       * Check if this color space is the same as another color space reference.
 864       * Allows proxying color space objects and comparing color spaces with ids.
 865       * @param {string | ColorSpace} space ColorSpace object or id to compare to
 866       * @returns {boolean}
 867       */
 868      equals(space) {
 869        if (!space) {
 870          return false;
 871        }
 872        return this === space || this.id === space || this.id === space.id;
 873      }
 874      to(space, coords) {
 875        if (arguments.length === 1) {
 876          const color = getColor(space);
 877          [space, coords] = [color.space, color.coords];
 878        }
 879        space = _ColorSpace.get(space);
 880        if (this.equals(space)) {
 881          return coords;
 882        }
 883        coords = coords.map((c) => isNone(c) ? 0 : c);
 884        let myPath = this.path;
 885        let otherPath = space.path;
 886        let connectionSpace, connectionSpaceIndex;
 887        for (let i = 0; i < myPath.length; i++) {
 888          if (myPath[i].equals(otherPath[i])) {
 889            connectionSpace = myPath[i];
 890            connectionSpaceIndex = i;
 891          } else {
 892            break;
 893          }
 894        }
 895        if (!connectionSpace) {
 896          throw new Error(
 897            `Cannot convert between color spaces $this} and $space}: no connection space was found`
 898          );
 899        }
 900        for (let i = myPath.length - 1; i > connectionSpaceIndex; i--) {
 901          coords = myPath[i].toBase(coords);
 902        }
 903        for (let i = connectionSpaceIndex + 1; i < otherPath.length; i++) {
 904          coords = otherPath[i].fromBase(coords);
 905        }
 906        return coords;
 907      }
 908      from(space, coords) {
 909        if (arguments.length === 1) {
 910          const color = getColor(space);
 911          [space, coords] = [color.space, color.coords];
 912        }
 913        space = _ColorSpace.get(space);
 914        return space.to(this, coords);
 915      }
 916      toString() {
 917        return `$this.name} ($this.id})`;
 918      }
 919      getMinCoords() {
 920        let ret = [];
 921        for (let id in this.coords) {
 922          let meta = this.coords[id];
 923          let range = meta.range || meta.refRange;
 924          ret.push(range?.min ?? 0);
 925        }
 926        return ret;
 927      }
 928      static registry = {};
 929      // Returns array of unique color spaces
 930      static get all() {
 931        return [...new Set(Object.values(_ColorSpace.registry))];
 932      }
 933      static register(id, space) {
 934        if (arguments.length === 1) {
 935          space = arguments[0];
 936          id = space.id;
 937        }
 938        space = this.get(space);
 939        if (this.registry[id] && this.registry[id] !== space) {
 940          throw new Error(`Duplicate color space registration: '$id}'`);
 941        }
 942        this.registry[id] = space;
 943        if (arguments.length === 1 && space.aliases) {
 944          for (let alias of space.aliases) {
 945            this.register(alias, space);
 946          }
 947        }
 948        return space;
 949      }
 950      /**
 951       * Lookup ColorSpace object by name
 952       * @param {ColorSpace | string} name
 953       */
 954      static get(space, ...alternatives) {
 955        if (!space || isInstance(space, this)) {
 956          return space;
 957        }
 958        let argType = type(space);
 959        if (argType === "string") {
 960          let ret = _ColorSpace.registry[space.toLowerCase()];
 961          if (!ret) {
 962            throw new TypeError(`No color space found with id = "$space}"`);
 963          }
 964          return ret;
 965        }
 966        if (alternatives.length) {
 967          return _ColorSpace.get(...alternatives);
 968        }
 969        throw new TypeError(`$space} is not a valid color space`);
 970      }
 971      /**
 972       * Look up all color spaces for a format that matches certain criteria
 973       * @param {object | string} filters
 974       * @param {Array<ColorSpace>} [spaces=ColorSpace.all]
 975       * @returns {Format | null}
 976       */
 977      static findFormat(filters, spaces = _ColorSpace.all) {
 978        if (!filters) {
 979          return null;
 980        }
 981        if (typeof filters === "string") {
 982          filters = { name: filters };
 983        }
 984        for (let space of spaces) {
 985          for (let [name, format] of Object.entries(space.formats)) {
 986            format.name ??= name;
 987            format.type ??= "function";
 988            let matches = (!filters.name || format.name === filters.name) && (!filters.type || format.type === filters.type);
 989            if (filters.id) {
 990              let ids = format.ids || [format.id];
 991              let filterIds = Array.isArray(filters.id) ? filters.id : [filters.id];
 992              matches &&= filterIds.some((id) => ids.includes(id));
 993            }
 994            if (matches) {
 995              let ret = Format.get(format, space);
 996              if (ret !== format) {
 997                space.formats[format.name] = ret;
 998              }
 999              return ret;
1000            }
1001          }
1002        }
1003        return null;
1004      }
1005      /**
1006       * Get metadata about a coordinate of a color space
1007       *
1008       * @static
1009       * @param {Array | string} ref
1010       * @param {ColorSpace | string} [workingSpace]
1011       * @return {Object}
1012       */
1013      static resolveCoord(ref, workingSpace) {
1014        let coordType = type(ref);
1015        let space, coord;
1016        if (coordType === "string") {
1017          if (ref.includes(".")) {
1018            [space, coord] = ref.split(".");
1019          } else {
1020            [space, coord] = [, ref];
1021          }
1022        } else if (Array.isArray(ref)) {
1023          [space, coord] = ref;
1024        } else {
1025          space = ref.space;
1026          coord = ref.coordId;
1027        }
1028        space = _ColorSpace.get(space);
1029        if (!space) {
1030          space = workingSpace;
1031        }
1032        if (!space) {
1033          throw new TypeError(
1034            `Cannot resolve coordinate reference $ref}: No color space specified and relative references are not allowed here`
1035          );
1036        }
1037        coordType = type(coord);
1038        if (coordType === "number" || coordType === "string" && coord >= 0) {
1039          let meta = Object.entries(space.coords)[coord];
1040          if (meta) {
1041            return { space, id: meta[0], index: coord, ...meta[1] };
1042          }
1043        }
1044        space = _ColorSpace.get(space);
1045        let normalizedCoord = coord.toLowerCase();
1046        let i = 0;
1047        for (let id in space.coords) {
1048          let meta = space.coords[id];
1049          if (id.toLowerCase() === normalizedCoord || meta.name?.toLowerCase() === normalizedCoord) {
1050            return { space, id, index: i, ...meta };
1051          }
1052          i++;
1053        }
1054        throw new TypeError(
1055          `No "$coord}" coordinate found in $space.name}. Its coordinates are: $Object.keys(space.coords).join(", ")}`
1056        );
1057      }
1058      static DEFAULT_FORMAT = {
1059        type: "functions",
1060        name: "color"
1061      };
1062    };
1063    function getPath(space) {
1064      let ret = [space];
1065      for (let s = space; s = s.base; ) {
1066        ret.push(s);
1067      }
1068      return ret;
1069    }
1070  
1071    // packages/theme/node_modules/colorjs.io/src/spaces/xyz-d65.js
1072    var xyz_d65_default = new ColorSpace({
1073      id: "xyz-d65",
1074      name: "XYZ D65",
1075      coords: {
1076        x: {
1077          refRange: [0, 1],
1078          name: "X"
1079        },
1080        y: {
1081          refRange: [0, 1],
1082          name: "Y"
1083        },
1084        z: {
1085          refRange: [0, 1],
1086          name: "Z"
1087        }
1088      },
1089      white: "D65",
1090      formats: {
1091        color: {
1092          ids: ["xyz-d65", "xyz"]
1093        }
1094      },
1095      aliases: ["xyz"]
1096    });
1097  
1098    // packages/theme/node_modules/colorjs.io/src/RGBColorSpace.js
1099    var RGBColorSpace = class extends ColorSpace {
1100      /**
1101       * Creates a new RGB ColorSpace.
1102       * If coords are not specified, they will use the default RGB coords.
1103       * Instead of `fromBase()` and `toBase()` functions,
1104       * you can specify to/from XYZ matrices and have the default `toBase()` and `fromBase()`
1105       * methods use them via `this.M.toXYZ` and `this.M.fromXYZ`.
1106       * @param {RGBOptions} options
1107       */
1108      constructor(options) {
1109        if (!options.coords) {
1110          options.coords = {
1111            r: {
1112              range: [0, 1],
1113              name: "Red"
1114            },
1115            g: {
1116              range: [0, 1],
1117              name: "Green"
1118            },
1119            b: {
1120              range: [0, 1],
1121              name: "Blue"
1122            }
1123          };
1124        }
1125        if (!options.base) {
1126          options.base = xyz_d65_default;
1127        }
1128        let toXYZ2 = options.toXYZ_M ?? options.M?.toXYZ;
1129        let fromXYZ2 = options.fromXYZ_M ?? options.M?.fromXYZ;
1130        options.referred ??= "display";
1131        super(options);
1132        if (toXYZ2 && fromXYZ2) {
1133          this.M.toXYZ = toXYZ2;
1134          this.M.fromXYZ = fromXYZ2;
1135        }
1136      }
1137      toBase(rgb) {
1138        let xyz = multiply_v3_m3x3(rgb, this.M.toXYZ);
1139        if (this.white !== this.base.white) {
1140          xyz = adapt(this.white, this.base.white, xyz);
1141        }
1142        return xyz;
1143      }
1144      fromBase(xyz) {
1145        xyz = adapt(this.base.white, this.white, xyz);
1146        return multiply_v3_m3x3(xyz, this.M.fromXYZ);
1147      }
1148    };
1149  
1150    // packages/theme/node_modules/colorjs.io/src/spaces/xyz-d50.js
1151    var xyz_d50_default = new ColorSpace({
1152      id: "xyz-d50",
1153      name: "XYZ D50",
1154      white: "D50",
1155      base: xyz_d65_default,
1156      fromBase: (coords) => adapt(xyz_d65_default.white, "D50", coords),
1157      toBase: (coords) => adapt("D50", xyz_d65_default.white, coords)
1158    });
1159  
1160    // packages/theme/node_modules/colorjs.io/src/spaces/lab.js
1161    var \u03B52 = 216 / 24389;
1162    var \u03B53 = 24 / 116;
1163    var \u03BA = 24389 / 27;
1164    var white = WHITES.D50;
1165    var lab_default = new ColorSpace({
1166      id: "lab",
1167      name: "Lab",
1168      coords: {
1169        l: {
1170          refRange: [0, 100],
1171          name: "Lightness"
1172        },
1173        a: {
1174          refRange: [-125, 125]
1175        },
1176        b: {
1177          refRange: [-125, 125]
1178        }
1179      },
1180      // Assuming XYZ is relative to D50, convert to CIE Lab
1181      // from CIE standard, which now defines these as a rational fraction
1182      white,
1183      base: xyz_d50_default,
1184      // Convert D50-adapted XYX to Lab
1185      // CIE 15.3:2004 section 8.2.1.1
1186      fromBase(XYZ) {
1187        let xyz = XYZ.map((value, i) => value / white[i]);
1188        let f = xyz.map((value) => value > \u03B52 ? Math.cbrt(value) : (\u03BA * value + 16) / 116);
1189        let L = 116 * f[1] - 16;
1190        let a = 500 * (f[0] - f[1]);
1191        let b2 = 200 * (f[1] - f[2]);
1192        return [L, a, b2];
1193      },
1194      // Convert Lab to D50-adapted XYZ
1195      // Same result as CIE 15.3:2004 Appendix D although the derivation is different
1196      // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
1197      toBase(Lab) {
1198        let [L, a, b2] = Lab;
1199        let f = [];
1200        f[1] = (L + 16) / 116;
1201        f[0] = a / 500 + f[1];
1202        f[2] = f[1] - b2 / 200;
1203        let xyz = [
1204          f[0] > \u03B53 ? Math.pow(f[0], 3) : (116 * f[0] - 16) / \u03BA,
1205          Lab[0] > 8 ? Math.pow((Lab[0] + 16) / 116, 3) : Lab[0] / \u03BA,
1206          f[2] > \u03B53 ? Math.pow(f[2], 3) : (116 * f[2] - 16) / \u03BA
1207        ];
1208        return xyz.map((value, i) => value * white[i]);
1209      },
1210      formats: {
1211        lab: {
1212          coords: [
1213            "<percentage> | <number>",
1214            "<number> | <percentage>",
1215            "<number> | <percentage>"
1216          ]
1217        }
1218      }
1219    });
1220  
1221    // packages/theme/node_modules/colorjs.io/src/angles.js
1222    function constrain(angle) {
1223      if (typeof angle !== "number") {
1224        return angle;
1225      }
1226      return (angle % 360 + 360) % 360;
1227    }
1228  
1229    // packages/theme/node_modules/colorjs.io/src/spaces/lch.js
1230    var lch_default = new ColorSpace({
1231      id: "lch",
1232      name: "LCH",
1233      coords: {
1234        l: {
1235          refRange: [0, 100],
1236          name: "Lightness"
1237        },
1238        c: {
1239          refRange: [0, 150],
1240          name: "Chroma"
1241        },
1242        h: {
1243          refRange: [0, 360],
1244          type: "angle",
1245          name: "Hue"
1246        }
1247      },
1248      base: lab_default,
1249      fromBase(Lab) {
1250        if (this.\u03B5 === void 0) {
1251          let range = Object.values(this.base.coords)[1].refRange;
1252          let extent = range[1] - range[0];
1253          this.\u03B5 = extent / 1e5;
1254        }
1255        let [L, a, b2] = Lab;
1256        let isAchromatic = Math.abs(a) < this.\u03B5 && Math.abs(b2) < this.\u03B5;
1257        let h = isAchromatic ? null : constrain(Math.atan2(b2, a) * 180 / Math.PI);
1258        let C = isAchromatic ? 0 : Math.sqrt(a ** 2 + b2 ** 2);
1259        return [L, C, h];
1260      },
1261      toBase(lch) {
1262        let [L, C, h] = lch;
1263        let a = null, b2 = null;
1264        if (!isNone(h)) {
1265          C = C < 0 ? 0 : C;
1266          a = C * Math.cos(h * Math.PI / 180);
1267          b2 = C * Math.sin(h * Math.PI / 180);
1268        }
1269        return [L, a, b2];
1270      },
1271      formats: {
1272        lch: {
1273          coords: ["<percentage> | <number>", "<number> | <percentage>", "<number> | <angle>"]
1274        }
1275      }
1276    });
1277  
1278    // packages/theme/node_modules/colorjs.io/src/deltaE/deltaE2000.js
1279    var Gfactor = 25 ** 7;
1280    var \u03C0 = Math.PI;
1281    var r2d = 180 / \u03C0;
1282    var d2r = \u03C0 / 180;
1283    function pow7(x) {
1284      const x2 = x * x;
1285      const x7 = x2 * x2 * x2 * x;
1286      return x7;
1287    }
1288    function deltaE2000_default(color, sample, { kL = 1, kC = 1, kH = 1 } = {}) {
1289      [color, sample] = getColor([color, sample]);
1290      let [L1, a1, b1] = lab_default.from(color);
1291      let C1 = lch_default.from(lab_default, [L1, a1, b1])[1];
1292      let [L2, a2, b2] = lab_default.from(sample);
1293      let C2 = lch_default.from(lab_default, [L2, a2, b2])[1];
1294      if (C1 < 0) {
1295        C1 = 0;
1296      }
1297      if (C2 < 0) {
1298        C2 = 0;
1299      }
1300      let Cbar = (C1 + C2) / 2;
1301      let C7 = pow7(Cbar);
1302      let G = 0.5 * (1 - Math.sqrt(C7 / (C7 + Gfactor)));
1303      let adash1 = (1 + G) * a1;
1304      let adash2 = (1 + G) * a2;
1305      let Cdash1 = Math.sqrt(adash1 ** 2 + b1 ** 2);
1306      let Cdash2 = Math.sqrt(adash2 ** 2 + b2 ** 2);
1307      let h1 = adash1 === 0 && b1 === 0 ? 0 : Math.atan2(b1, adash1);
1308      let h2 = adash2 === 0 && b2 === 0 ? 0 : Math.atan2(b2, adash2);
1309      if (h1 < 0) {
1310        h1 += 2 * \u03C0;
1311      }
1312      if (h2 < 0) {
1313        h2 += 2 * \u03C0;
1314      }
1315      h1 *= r2d;
1316      h2 *= r2d;
1317      let \u0394L = L2 - L1;
1318      let \u0394C = Cdash2 - Cdash1;
1319      let hdiff = h2 - h1;
1320      let hsum = h1 + h2;
1321      let habs = Math.abs(hdiff);
1322      let \u0394h;
1323      if (Cdash1 * Cdash2 === 0) {
1324        \u0394h = 0;
1325      } else if (habs <= 180) {
1326        \u0394h = hdiff;
1327      } else if (hdiff > 180) {
1328        \u0394h = hdiff - 360;
1329      } else if (hdiff < -180) {
1330        \u0394h = hdiff + 360;
1331      } else {
1332        defaults_default.warn("the unthinkable has happened");
1333      }
1334      let \u0394H = 2 * Math.sqrt(Cdash2 * Cdash1) * Math.sin(\u0394h * d2r / 2);
1335      let Ldash = (L1 + L2) / 2;
1336      let Cdash = (Cdash1 + Cdash2) / 2;
1337      let Cdash7 = pow7(Cdash);
1338      let hdash;
1339      if (Cdash1 * Cdash2 === 0) {
1340        hdash = hsum;
1341      } else if (habs <= 180) {
1342        hdash = hsum / 2;
1343      } else if (hsum < 360) {
1344        hdash = (hsum + 360) / 2;
1345      } else {
1346        hdash = (hsum - 360) / 2;
1347      }
1348      let lsq = (Ldash - 50) ** 2;
1349      let SL = 1 + 0.015 * lsq / Math.sqrt(20 + lsq);
1350      let SC = 1 + 0.045 * Cdash;
1351      let T = 1;
1352      T -= 0.17 * Math.cos((hdash - 30) * d2r);
1353      T += 0.24 * Math.cos(2 * hdash * d2r);
1354      T += 0.32 * Math.cos((3 * hdash + 6) * d2r);
1355      T -= 0.2 * Math.cos((4 * hdash - 63) * d2r);
1356      let SH = 1 + 0.015 * Cdash * T;
1357      let \u0394\u03B8 = 30 * Math.exp(-1 * ((hdash - 275) / 25) ** 2);
1358      let RC = 2 * Math.sqrt(Cdash7 / (Cdash7 + Gfactor));
1359      let RT = -1 * Math.sin(2 * \u0394\u03B8 * d2r) * RC;
1360      let dE = (\u0394L / (kL * SL)) ** 2;
1361      dE += (\u0394C / (kC * SC)) ** 2;
1362      dE += (\u0394H / (kH * SH)) ** 2;
1363      dE += RT * (\u0394C / (kC * SC)) * (\u0394H / (kH * SH));
1364      return Math.sqrt(dE);
1365    }
1366  
1367    // packages/theme/node_modules/colorjs.io/src/spaces/oklab.js
1368    var M = {
1369      XYZtoLMS: [
1370        [0.819022437996703, 0.3619062600528904, -0.1288737815209879],
1371        [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],
1372        [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]
1373      ],
1374      // inverse of XYZtoLMS
1375      LMStoXYZ: [
1376        [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],
1377        [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],
1378        [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]
1379      ],
1380      LMStoLab: [
1381        [0.210454268309314, 0.7936177747023054, -0.0040720430116193],
1382        [1.9779985324311684, -2.42859224204858, 0.450593709617411],
1383        [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]
1384      ],
1385      // LMStoLab inverted
1386      LabtoLMS: [
1387        [1, 0.3963377773761749, 0.2158037573099136],
1388        [1, -0.1055613458156586, -0.0638541728258133],
1389        [1, -0.0894841775298119, -1.2914855480194092]
1390      ]
1391    };
1392    var oklab_default = new ColorSpace({
1393      id: "oklab",
1394      name: "Oklab",
1395      coords: {
1396        l: {
1397          refRange: [0, 1],
1398          name: "Lightness"
1399        },
1400        a: {
1401          refRange: [-0.4, 0.4]
1402        },
1403        b: {
1404          refRange: [-0.4, 0.4]
1405        }
1406      },
1407      // Note that XYZ is relative to D65
1408      white: "D65",
1409      base: xyz_d65_default,
1410      M,
1411      fromBase(XYZ) {
1412        let LMS = multiply_v3_m3x3(XYZ, M.XYZtoLMS);
1413        LMS[0] = Math.cbrt(LMS[0]);
1414        LMS[1] = Math.cbrt(LMS[1]);
1415        LMS[2] = Math.cbrt(LMS[2]);
1416        return multiply_v3_m3x3(LMS, M.LMStoLab, LMS);
1417      },
1418      toBase(OKLab) {
1419        let LMSg = multiply_v3_m3x3(OKLab, M.LabtoLMS);
1420        LMSg[0] = LMSg[0] ** 3;
1421        LMSg[1] = LMSg[1] ** 3;
1422        LMSg[2] = LMSg[2] ** 3;
1423        return multiply_v3_m3x3(LMSg, M.LMStoXYZ, LMSg);
1424      },
1425      formats: {
1426        oklab: {
1427          coords: [
1428            "<percentage> | <number>",
1429            "<number> | <percentage>",
1430            "<number> | <percentage>"
1431          ]
1432        }
1433      }
1434    });
1435  
1436    // packages/theme/node_modules/colorjs.io/src/deltaE/deltaEOK.js
1437    function deltaEOK_default(color, sample) {
1438      [color, sample] = getColor([color, sample]);
1439      let [L1, a1, b1] = oklab_default.from(color);
1440      let [L2, a2, b2] = oklab_default.from(sample);
1441      let \u0394L = L1 - L2;
1442      let \u0394a = a1 - a2;
1443      let \u0394b = b1 - b2;
1444      return Math.sqrt(\u0394L ** 2 + \u0394a ** 2 + \u0394b ** 2);
1445    }
1446  
1447    // packages/theme/node_modules/colorjs.io/src/inGamut.js
1448    var \u03B54 = 75e-6;
1449    function inGamut(color, space, { epsilon = \u03B54 } = {}) {
1450      color = getColor(color);
1451      if (!space) {
1452        space = color.space;
1453      }
1454      space = ColorSpace.get(space);
1455      let coords = color.coords;
1456      if (space !== color.space) {
1457        coords = space.from(color);
1458      }
1459      return space.inGamut(coords, { epsilon });
1460    }
1461  
1462    // packages/theme/node_modules/colorjs.io/src/to.js
1463    function to(color, space, { inGamut: inGamut2 } = {}) {
1464      color = getColor(color);
1465      space = ColorSpace.get(space);
1466      let coords = space.from(color);
1467      let ret = { space, coords, alpha: color.alpha };
1468      if (inGamut2) {
1469        ret = toGamut(ret, inGamut2 === true ? void 0 : inGamut2);
1470      }
1471      return ret;
1472    }
1473    to.returns = "color";
1474  
1475    // packages/theme/node_modules/colorjs.io/src/getAll.js
1476    function getAll(color, options) {
1477      color = getColor(color);
1478      let space = ColorSpace.get(options, options?.space);
1479      let precision = options?.precision;
1480      let coords;
1481      if (!space || color.space.equals(space)) {
1482        coords = color.coords.slice();
1483      } else {
1484        coords = space.from(color);
1485      }
1486      return precision === void 0 ? coords : coords.map((coord) => toPrecision(coord, precision));
1487    }
1488  
1489    // packages/theme/node_modules/colorjs.io/src/get.js
1490    function get(color, prop) {
1491      color = getColor(color);
1492      if (prop === "alpha") {
1493        return color.alpha ?? 1;
1494      }
1495      let { space, index } = ColorSpace.resolveCoord(prop, color.space);
1496      let coords = getAll(color, space);
1497      return coords[index];
1498    }
1499  
1500    // packages/theme/node_modules/colorjs.io/src/spaces/oklch.js
1501    var oklch_default = new ColorSpace({
1502      id: "oklch",
1503      name: "OkLCh",
1504      coords: {
1505        l: {
1506          refRange: [0, 1],
1507          name: "Lightness"
1508        },
1509        c: {
1510          refRange: [0, 0.4],
1511          name: "Chroma"
1512        },
1513        h: {
1514          refRange: [0, 360],
1515          type: "angle",
1516          name: "Hue"
1517        }
1518      },
1519      white: "D65",
1520      base: oklab_default,
1521      fromBase: lch_default.fromBase,
1522      toBase: lch_default.toBase,
1523      formats: {
1524        oklch: {
1525          coords: ["<percentage> | <number>", "<number> | <percentage>", "<number> | <angle>"]
1526        }
1527      }
1528    });
1529  
1530    // packages/theme/node_modules/colorjs.io/src/setAll.js
1531    function setAll(color, space, coords, alpha) {
1532      color = getColor(color);
1533      if (Array.isArray(space)) {
1534        [space, coords, alpha] = [color.space, space, coords];
1535      }
1536      space = ColorSpace.get(space);
1537      color.coords = space === color.space ? coords.slice() : space.to(color.space, coords);
1538      if (alpha !== void 0) {
1539        color.alpha = alpha;
1540      }
1541      return color;
1542    }
1543    setAll.returns = "color";
1544  
1545    // packages/theme/node_modules/colorjs.io/src/set.js
1546    function set(color, prop, value) {
1547      color = getColor(color);
1548      if (arguments.length === 2 && type(arguments[1]) === "object") {
1549        let object = arguments[1];
1550        for (let p3 in object) {
1551          set(color, p3, object[p3]);
1552        }
1553      } else {
1554        if (typeof value === "function") {
1555          value = value(get(color, prop));
1556        }
1557        if (prop === "alpha") {
1558          color.alpha = value;
1559        } else {
1560          let { space, index } = ColorSpace.resolveCoord(prop, color.space);
1561          let coords = getAll(color, space);
1562          coords[index] = value;
1563          setAll(color, space, coords);
1564        }
1565      }
1566      return color;
1567    }
1568    set.returns = "color";
1569  
1570    // packages/theme/node_modules/colorjs.io/src/clone.js
1571    function clone(color) {
1572      return {
1573        space: color.space,
1574        coords: (
1575          /** @type {Coords} */
1576          color.coords.slice()
1577        ),
1578        alpha: color.alpha
1579      };
1580    }
1581  
1582    // packages/theme/node_modules/colorjs.io/src/distance.js
1583    function distance(color1, color2, space = "lab") {
1584      space = ColorSpace.get(space);
1585      let coords1 = space.from(color1);
1586      let coords2 = space.from(color2);
1587      return Math.sqrt(
1588        coords1.reduce((acc, c13, i) => {
1589          let c23 = coords2[i];
1590          if (isNone(c13) || isNone(c23)) {
1591            return acc;
1592          }
1593          return acc + (c23 - c13) ** 2;
1594        }, 0)
1595      );
1596    }
1597  
1598    // packages/theme/node_modules/colorjs.io/src/deltaE/deltaE76.js
1599    function deltaE76(color, sample) {
1600      return distance(color, sample, "lab");
1601    }
1602  
1603    // packages/theme/node_modules/colorjs.io/src/deltaE/deltaECMC.js
1604    var \u03C02 = Math.PI;
1605    var d2r2 = \u03C02 / 180;
1606    function deltaECMC_default(color, sample, { l = 2, c = 1 } = {}) {
1607      [color, sample] = getColor([color, sample]);
1608      let [L1, a1, b1] = lab_default.from(color);
1609      let [, C1, H1] = lch_default.from(lab_default, [L1, a1, b1]);
1610      let [L2, a2, b2] = lab_default.from(sample);
1611      let C2 = lch_default.from(lab_default, [L2, a2, b2])[1];
1612      if (C1 < 0) {
1613        C1 = 0;
1614      }
1615      if (C2 < 0) {
1616        C2 = 0;
1617      }
1618      let \u0394L = L1 - L2;
1619      let \u0394C = C1 - C2;
1620      let \u0394a = a1 - a2;
1621      let \u0394b = b1 - b2;
1622      let H2 = \u0394a ** 2 + \u0394b ** 2 - \u0394C ** 2;
1623      let SL = 0.511;
1624      if (L1 >= 16) {
1625        SL = 0.040975 * L1 / (1 + 0.01765 * L1);
1626      }
1627      let SC = 0.0638 * C1 / (1 + 0.0131 * C1) + 0.638;
1628      let T;
1629      if (isNone(H1)) {
1630        H1 = 0;
1631      }
1632      if (H1 >= 164 && H1 <= 345) {
1633        T = 0.56 + Math.abs(0.2 * Math.cos((H1 + 168) * d2r2));
1634      } else {
1635        T = 0.36 + Math.abs(0.4 * Math.cos((H1 + 35) * d2r2));
1636      }
1637      let C4 = Math.pow(C1, 4);
1638      let F = Math.sqrt(C4 / (C4 + 1900));
1639      let SH = SC * (F * T + 1 - F);
1640      let dE = (\u0394L / (l * SL)) ** 2;
1641      dE += (\u0394C / (c * SC)) ** 2;
1642      dE += H2 / SH ** 2;
1643      return Math.sqrt(dE);
1644    }
1645  
1646    // packages/theme/node_modules/colorjs.io/src/spaces/xyz-abs-d65.js
1647    var Yw = 203;
1648    var xyz_abs_d65_default = new ColorSpace({
1649      // Absolute CIE XYZ, with a D65 whitepoint,
1650      // as used in most HDR colorspaces as a starting point.
1651      // SDR spaces are converted per BT.2048
1652      // so that diffuse, media white is 203 cd/m²
1653      id: "xyz-abs-d65",
1654      cssId: "--xyz-abs-d65",
1655      name: "Absolute XYZ D65",
1656      coords: {
1657        x: {
1658          refRange: [0, 9504.7],
1659          name: "Xa"
1660        },
1661        y: {
1662          refRange: [0, 1e4],
1663          name: "Ya"
1664        },
1665        z: {
1666          refRange: [0, 10888.3],
1667          name: "Za"
1668        }
1669      },
1670      base: xyz_d65_default,
1671      fromBase(XYZ) {
1672        return XYZ.map((v) => v * Yw);
1673      },
1674      toBase(AbsXYZ) {
1675        return AbsXYZ.map((v) => v / Yw);
1676      }
1677    });
1678  
1679    // packages/theme/node_modules/colorjs.io/src/spaces/jzazbz.js
1680    var b = 1.15;
1681    var g = 0.66;
1682    var n = 2610 / 2 ** 14;
1683    var ninv = 2 ** 14 / 2610;
1684    var c1 = 3424 / 2 ** 12;
1685    var c2 = 2413 / 2 ** 7;
1686    var c3 = 2392 / 2 ** 7;
1687    var p = 1.7 * 2523 / 2 ** 5;
1688    var pinv = 2 ** 5 / (1.7 * 2523);
1689    var d = -0.56;
1690    var d0 = 16295499532821565e-27;
1691    var M2 = {
1692      XYZtoCone: [
1693        [0.41478972, 0.579999, 0.014648],
1694        [-0.20151, 1.120649, 0.0531008],
1695        [-0.0166008, 0.2648, 0.6684799]
1696      ],
1697      // XYZtoCone inverted
1698      ConetoXYZ: [
1699        [1.9242264357876067, -1.0047923125953657, 0.037651404030618],
1700        [0.35031676209499907, 0.7264811939316552, -0.06538442294808501],
1701        [-0.09098281098284752, -0.3127282905230739, 1.5227665613052603]
1702      ],
1703      ConetoIab: [
1704        [0.5, 0.5, 0],
1705        [3.524, -4.066708, 0.542708],
1706        [0.199076, 1.096799, -1.295875]
1707      ],
1708      // ConetoIab inverted
1709      IabtoCone: [
1710        [1, 0.13860504327153927, 0.05804731615611883],
1711        [1, -0.1386050432715393, -0.058047316156118904],
1712        [1, -0.09601924202631895, -0.811891896056039]
1713      ]
1714    };
1715    var jzazbz_default = new ColorSpace({
1716      id: "jzazbz",
1717      name: "Jzazbz",
1718      coords: {
1719        jz: {
1720          refRange: [0, 1],
1721          name: "Jz"
1722        },
1723        az: {
1724          refRange: [-0.21, 0.21]
1725        },
1726        bz: {
1727          refRange: [-0.21, 0.21]
1728        }
1729      },
1730      base: xyz_abs_d65_default,
1731      M: M2,
1732      fromBase(XYZ) {
1733        let [Xa, Ya, Za] = XYZ;
1734        let Xm = b * Xa - (b - 1) * Za;
1735        let Ym = g * Ya - (g - 1) * Xa;
1736        let LMS = multiply_v3_m3x3([Xm, Ym, Za], M2.XYZtoCone);
1737        let PQLMS = (
1738          /** @type {Vector3} } */
1739          LMS.map(function(val) {
1740            let num = c1 + c2 * spow(val / 1e4, n);
1741            let denom = 1 + c3 * spow(val / 1e4, n);
1742            return spow(num / denom, p);
1743          })
1744        );
1745        let [Iz, az, bz] = multiply_v3_m3x3(PQLMS, M2.ConetoIab);
1746        let Jz = (1 + d) * Iz / (1 + d * Iz) - d0;
1747        return [Jz, az, bz];
1748      },
1749      toBase(Jzazbz) {
1750        let [Jz, az, bz] = Jzazbz;
1751        let Iz = (Jz + d0) / (1 + d - d * (Jz + d0));
1752        let PQLMS = multiply_v3_m3x3([Iz, az, bz], M2.IabtoCone);
1753        let LMS = (
1754          /** @type {Vector3} } */
1755          PQLMS.map(function(val) {
1756            let num = c1 - spow(val, pinv);
1757            let denom = c3 * spow(val, pinv) - c2;
1758            let x = 1e4 * spow(num / denom, ninv);
1759            return x;
1760          })
1761        );
1762        let [Xm, Ym, Za] = multiply_v3_m3x3(LMS, M2.ConetoXYZ);
1763        let Xa = (Xm + (b - 1) * Za) / b;
1764        let Ya = (Ym + (g - 1) * Xa) / g;
1765        return [Xa, Ya, Za];
1766      },
1767      formats: {
1768        // https://drafts.csswg.org/css-color-hdr/#Jzazbz
1769        jzazbz: {
1770          coords: [
1771            "<percentage> | <number>",
1772            "<number> | <percentage>",
1773            "<number> | <percentage>"
1774          ]
1775        }
1776      }
1777    });
1778  
1779    // packages/theme/node_modules/colorjs.io/src/spaces/jzczhz.js
1780    var jzczhz_default = new ColorSpace({
1781      id: "jzczhz",
1782      name: "JzCzHz",
1783      coords: {
1784        jz: {
1785          refRange: [0, 1],
1786          name: "Jz"
1787        },
1788        cz: {
1789          refRange: [0, 0.26],
1790          name: "Chroma"
1791        },
1792        hz: {
1793          refRange: [0, 360],
1794          type: "angle",
1795          name: "Hue"
1796        }
1797      },
1798      base: jzazbz_default,
1799      fromBase: lch_default.fromBase,
1800      toBase: lch_default.toBase,
1801      formats: {
1802        // https://drafts.csswg.org/css-color-hdr/#JzCzhz
1803        jzczhz: {
1804          coords: ["<percentage> | <number>", "<number> | <percentage>", "<number> | <angle>"]
1805        }
1806      }
1807    });
1808  
1809    // packages/theme/node_modules/colorjs.io/src/deltaE/deltaEJz.js
1810    function deltaEJz_default(color, sample) {
1811      [color, sample] = getColor([color, sample]);
1812      let [Jz1, Cz1, Hz1] = jzczhz_default.from(color);
1813      let [Jz2, Cz2, Hz2] = jzczhz_default.from(sample);
1814      let \u0394J = Jz1 - Jz2;
1815      let \u0394C = Cz1 - Cz2;
1816      if (isNone(Hz1) && isNone(Hz2)) {
1817        Hz1 = 0;
1818        Hz2 = 0;
1819      } else if (isNone(Hz1)) {
1820        Hz1 = Hz2;
1821      } else if (isNone(Hz2)) {
1822        Hz2 = Hz1;
1823      }
1824      let \u0394h = Hz1 - Hz2;
1825      let \u0394H = 2 * Math.sqrt(Cz1 * Cz2) * Math.sin(\u0394h / 2 * (Math.PI / 180));
1826      return Math.sqrt(\u0394J ** 2 + \u0394C ** 2 + \u0394H ** 2);
1827    }
1828  
1829    // packages/theme/node_modules/colorjs.io/src/spaces/ictcp.js
1830    var c12 = 3424 / 4096;
1831    var c22 = 2413 / 128;
1832    var c32 = 2392 / 128;
1833    var m1 = 2610 / 16384;
1834    var m2 = 2523 / 32;
1835    var im1 = 16384 / 2610;
1836    var im2 = 32 / 2523;
1837    var M3 = {
1838      // includes the 4% crosstalk components, from the Dolby "What is ICtCp" paper
1839      XYZtoLMS: [
1840        [0.3592832590121217, 0.6976051147779502, -0.035891593232029],
1841        [-0.1920808463704993, 1.100476797037432, 0.0753748658519118],
1842        [0.0070797844607479, 0.0748396662186362, 0.8433265453898765]
1843      ],
1844      // includes the Ebner LMS coefficients, the rotation,
1845      // and the scaling to the [-0.5,0.5] range
1846      LMStoIPT: [
1847        [2048 / 4096, 2048 / 4096, 0],
1848        [6610 / 4096, -13613 / 4096, 7003 / 4096],
1849        [17933 / 4096, -17390 / 4096, -543 / 4096]
1850      ],
1851      // inverted matrices, calculated from the above
1852      IPTtoLMS: [
1853        [0.9999999999999998, 0.0086090370379328, 0.111029625003026],
1854        [0.9999999999999998, -0.0086090370379328, -0.1110296250030259],
1855        [0.9999999999999998, 0.5600313357106791, -0.3206271749873188]
1856      ],
1857      LMStoXYZ: [
1858        [2.0701522183894223, -1.3263473389671563, 0.2066510476294053],
1859        [0.3647385209748072, 0.6805660249472273, -0.0453045459220347],
1860        [-0.0497472075358123, -0.0492609666966131, 1.1880659249923042]
1861      ]
1862    };
1863    var ictcp_default = new ColorSpace({
1864      id: "ictcp",
1865      name: "ICTCP",
1866      // From BT.2100-2 page 7:
1867      // During production, signal values are expected to exceed the
1868      // range E′ = [0.0 : 1.0]. This provides processing headroom and avoids
1869      // signal degradation during cascaded processing. Such values of E′,
1870      // below 0.0 or exceeding 1.0, should not be clipped during production
1871      // and exchange.
1872      // Values below 0.0 should not be clipped in reference displays (even
1873      // though they represent “negative” light) to allow the black level of
1874      // the signal (LB) to be properly set using test signals known as “PLUGE”
1875      coords: {
1876        i: {
1877          refRange: [0, 1],
1878          // Constant luminance,
1879          name: "I"
1880        },
1881        ct: {
1882          refRange: [-0.5, 0.5],
1883          // Full BT.2020 gamut in range [-0.5, 0.5]
1884          name: "CT"
1885        },
1886        cp: {
1887          refRange: [-0.5, 0.5],
1888          name: "CP"
1889        }
1890      },
1891      base: xyz_abs_d65_default,
1892      M: M3,
1893      fromBase(XYZ) {
1894        let LMS = multiply_v3_m3x3(XYZ, M3.XYZtoLMS);
1895        return LMStoICtCp(LMS);
1896      },
1897      toBase(ICtCp) {
1898        let LMS = ICtCptoLMS(ICtCp);
1899        return multiply_v3_m3x3(LMS, M3.LMStoXYZ);
1900      },
1901      formats: {
1902        ictcp: {
1903          coords: [
1904            "<percentage> | <number>",
1905            "<number> | <percentage>",
1906            "<number> | <percentage>"
1907          ]
1908        }
1909      }
1910    });
1911    function LMStoICtCp(LMS) {
1912      let PQLMS = (
1913        /** @type {Vector3} */
1914        LMS.map(function(val) {
1915          let num = c12 + c22 * (val / 1e4) ** m1;
1916          let denom = 1 + c32 * (val / 1e4) ** m1;
1917          return (num / denom) ** m2;
1918        })
1919      );
1920      return multiply_v3_m3x3(PQLMS, M3.LMStoIPT);
1921    }
1922    function ICtCptoLMS(ICtCp) {
1923      let PQLMS = multiply_v3_m3x3(ICtCp, M3.IPTtoLMS);
1924      let LMS = (
1925        /** @type {Vector3} */
1926        PQLMS.map(function(val) {
1927          let num = Math.max(val ** im2 - c12, 0);
1928          let denom = c22 - c32 * val ** im2;
1929          return 1e4 * (num / denom) ** im1;
1930        })
1931      );
1932      return LMS;
1933    }
1934  
1935    // packages/theme/node_modules/colorjs.io/src/deltaE/deltaEITP.js
1936    function deltaEITP_default(color, sample) {
1937      [color, sample] = getColor([color, sample]);
1938      let [I1, T1, P1] = ictcp_default.from(color);
1939      let [I2, T2, P2] = ictcp_default.from(sample);
1940      return 720 * Math.sqrt((I1 - I2) ** 2 + 0.25 * (T1 - T2) ** 2 + (P1 - P2) ** 2);
1941    }
1942  
1943    // packages/theme/node_modules/colorjs.io/src/deltaE/deltaEOK2.js
1944    function deltaEOK2_default(color, sample) {
1945      [color, sample] = getColor([color, sample]);
1946      let abscale = 2;
1947      let [L1, a1, b1] = oklab_default.from(color);
1948      let [L2, a2, b2] = oklab_default.from(sample);
1949      let \u0394L = L1 - L2;
1950      let \u0394a = abscale * (a1 - a2);
1951      let \u0394b = abscale * (b1 - b2);
1952      return Math.sqrt(\u0394L ** 2 + \u0394a ** 2 + \u0394b ** 2);
1953    }
1954  
1955    // packages/theme/node_modules/colorjs.io/src/spaces/cam16.js
1956    var white2 = WHITES.D65;
1957    var adaptedCoef = 0.42;
1958    var adaptedCoefInv = 1 / adaptedCoef;
1959    var tau = 2 * Math.PI;
1960    var M4 = {
1961      cat16: [
1962        [0.401288, 0.650173, -0.051461],
1963        [-0.250268, 1.204414, 0.045854],
1964        [-2079e-6, 0.048952, 0.953127]
1965      ],
1966      cat16Inv: [
1967        [1.8620678550872327, -1.0112546305316843, 0.14918677544445175],
1968        [0.38752654323613717, 0.6214474419314753, -0.008973985167612518],
1969        [-0.015841498849333856, -0.03412293802851557, 1.0499644368778496]
1970      ],
1971      m1: [
1972        [460, 451, 288],
1973        [460, -891, -261],
1974        [460, -220, -6300]
1975      ]
1976    };
1977    var surroundMap = {
1978      dark: [0.8, 0.525, 0.8],
1979      dim: [0.9, 0.59, 0.9],
1980      average: [1, 0.69, 1]
1981    };
1982    var hueQuadMap = {
1983      // Red, Yellow, Green, Blue, Red
1984      h: [20.14, 90, 164.25, 237.53, 380.14],
1985      e: [0.8, 0.7, 1, 1.2, 0.8],
1986      H: [0, 100, 200, 300, 400]
1987    };
1988    var rad2deg = 180 / Math.PI;
1989    var deg2rad = Math.PI / 180;
1990    function adapt2(coords, fl) {
1991      const temp = (
1992        /** @type {[number, number, number]} */
1993        coords.map((c) => {
1994          const x = spow(fl * Math.abs(c) * 0.01, adaptedCoef);
1995          return 400 * copySign(x, c) / (x + 27.13);
1996        })
1997      );
1998      return temp;
1999    }
2000    function unadapt(adapted, fl) {
2001      const constant = 100 / fl * 27.13 ** adaptedCoefInv;
2002      return (
2003        /** @type {[number, number, number]} */
2004        adapted.map((c) => {
2005          const cabs = Math.abs(c);
2006          return copySign(constant * spow(cabs / (400 - cabs), adaptedCoefInv), c);
2007        })
2008      );
2009    }
2010    function hueQuadrature(h) {
2011      let hp = constrain(h);
2012      if (hp <= hueQuadMap.h[0]) {
2013        hp += 360;
2014      }
2015      const i = bisectLeft(hueQuadMap.h, hp) - 1;
2016      const [hi, hii] = hueQuadMap.h.slice(i, i + 2);
2017      const [ei, eii] = hueQuadMap.e.slice(i, i + 2);
2018      const Hi = hueQuadMap.H[i];
2019      const t = (hp - hi) / ei;
2020      return Hi + 100 * t / (t + (hii - hp) / eii);
2021    }
2022    function invHueQuadrature(H) {
2023      let Hp = (H % 400 + 400) % 400;
2024      const i = Math.floor(0.01 * Hp);
2025      Hp = Hp % 100;
2026      const [hi, hii] = hueQuadMap.h.slice(i, i + 2);
2027      const [ei, eii] = hueQuadMap.e.slice(i, i + 2);
2028      return constrain((Hp * (eii * hi - ei * hii) - 100 * hi * eii) / (Hp * (eii - ei) - 100 * eii));
2029    }
2030    function environment(refWhite, adaptingLuminance, backgroundLuminance, surround, discounting) {
2031      const env = {};
2032      env.discounting = discounting;
2033      env.refWhite = refWhite;
2034      env.surround = surround;
2035      const xyzW = (
2036        /** @type {Vector3} */
2037        refWhite.map((c) => {
2038          return c * 100;
2039        })
2040      );
2041      env.la = adaptingLuminance;
2042      env.yb = backgroundLuminance;
2043      const yw = xyzW[1];
2044      const rgbW = multiply_v3_m3x3(xyzW, M4.cat16);
2045      let values = surroundMap[env.surround];
2046      const f = values[0];
2047      env.c = values[1];
2048      env.nc = values[2];
2049      const k = 1 / (5 * env.la + 1);
2050      const k4 = k ** 4;
2051      env.fl = k4 * env.la + 0.1 * (1 - k4) * (1 - k4) * Math.cbrt(5 * env.la);
2052      env.flRoot = env.fl ** 0.25;
2053      env.n = env.yb / yw;
2054      env.z = 1.48 + Math.sqrt(env.n);
2055      env.nbb = 0.725 * env.n ** -0.2;
2056      env.ncb = env.nbb;
2057      const d2 = discounting ? 1 : Math.max(Math.min(f * (1 - 1 / 3.6 * Math.exp((-env.la - 42) / 92)), 1), 0);
2058      env.dRgb = /** @type {[number, number, number]} */
2059      rgbW.map((c) => {
2060        return interpolate(1, yw / c, d2);
2061      });
2062      env.dRgbInv = /** @type {[number, number, number]} */
2063      env.dRgb.map((c) => {
2064        return 1 / c;
2065      });
2066      const rgbCW = (
2067        /** @type {[number, number, number]} */
2068        rgbW.map((c, i) => {
2069          return c * env.dRgb[i];
2070        })
2071      );
2072      const rgbAW = adapt2(rgbCW, env.fl);
2073      env.aW = env.nbb * (2 * rgbAW[0] + rgbAW[1] + 0.05 * rgbAW[2]);
2074      return env;
2075    }
2076    var viewingConditions = environment(white2, 64 / Math.PI * 0.2, 20, "average", false);
2077    function fromCam16(cam16, env) {
2078      if (!(cam16.J !== void 0 ^ cam16.Q !== void 0)) {
2079        throw new Error("Conversion requires one and only one: 'J' or 'Q'");
2080      }
2081      if (!(cam16.C !== void 0 ^ cam16.M !== void 0 ^ cam16.s !== void 0)) {
2082        throw new Error("Conversion requires one and only one: 'C', 'M' or 's'");
2083      }
2084      if (!(cam16.h !== void 0 ^ cam16.H !== void 0)) {
2085        throw new Error("Conversion requires one and only one: 'h' or 'H'");
2086      }
2087      if (cam16.J === 0 || cam16.Q === 0) {
2088        return [0, 0, 0];
2089      }
2090      let hRad = 0;
2091      if (cam16.h !== void 0) {
2092        hRad = constrain(cam16.h) * deg2rad;
2093      } else {
2094        hRad = invHueQuadrature(cam16.H) * deg2rad;
2095      }
2096      const cosh = Math.cos(hRad);
2097      const sinh = Math.sin(hRad);
2098      let Jroot = 0;
2099      if (cam16.J !== void 0) {
2100        Jroot = spow(cam16.J, 1 / 2) * 0.1;
2101      } else if (cam16.Q !== void 0) {
2102        Jroot = 0.25 * env.c * cam16.Q / ((env.aW + 4) * env.flRoot);
2103      }
2104      let alpha = 0;
2105      if (cam16.C !== void 0) {
2106        alpha = cam16.C / Jroot;
2107      } else if (cam16.M !== void 0) {
2108        alpha = cam16.M / env.flRoot / Jroot;
2109      } else if (cam16.s !== void 0) {
2110        alpha = 4e-4 * cam16.s ** 2 * (env.aW + 4) / env.c;
2111      }
2112      const t = spow(alpha * Math.pow(1.64 - Math.pow(0.29, env.n), -0.73), 10 / 9);
2113      const et = 0.25 * (Math.cos(hRad + 2) + 3.8);
2114      const A = env.aW * spow(Jroot, 2 / env.c / env.z);
2115      const p1 = 5e4 / 13 * env.nc * env.ncb * et;
2116      const p22 = A / env.nbb;
2117      const r = 23 * (p22 + 0.305) * zdiv(t, 23 * p1 + t * (11 * cosh + 108 * sinh));
2118      const a = r * cosh;
2119      const b2 = r * sinh;
2120      const rgb_c = unadapt(
2121        /** @type {Vector3} */
2122        multiply_v3_m3x3([p22, a, b2], M4.m1).map((c) => {
2123          return c * 1 / 1403;
2124        }),
2125        env.fl
2126      );
2127      return (
2128        /** @type {Vector3} */
2129        multiply_v3_m3x3(
2130          /** @type {Vector3} */
2131          rgb_c.map((c, i) => {
2132            return c * env.dRgbInv[i];
2133          }),
2134          M4.cat16Inv
2135        ).map((c) => {
2136          return c / 100;
2137        })
2138      );
2139    }
2140    function toCam16(xyzd65, env) {
2141      const xyz100 = (
2142        /** @type {Vector3} */
2143        xyzd65.map((c) => {
2144          return c * 100;
2145        })
2146      );
2147      const rgbA = adapt2(
2148        /** @type {[number, number, number]} */
2149        multiply_v3_m3x3(xyz100, M4.cat16).map((c, i) => {
2150          return c * env.dRgb[i];
2151        }),
2152        env.fl
2153      );
2154      const a = rgbA[0] + (-12 * rgbA[1] + rgbA[2]) / 11;
2155      const b2 = (rgbA[0] + rgbA[1] - 2 * rgbA[2]) / 9;
2156      const hRad = (Math.atan2(b2, a) % tau + tau) % tau;
2157      const et = 0.25 * (Math.cos(hRad + 2) + 3.8);
2158      const t = 5e4 / 13 * env.nc * env.ncb * zdiv(et * Math.sqrt(a ** 2 + b2 ** 2), rgbA[0] + rgbA[1] + 1.05 * rgbA[2] + 0.305);
2159      const alpha = spow(t, 0.9) * Math.pow(1.64 - Math.pow(0.29, env.n), 0.73);
2160      const A = env.nbb * (2 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]);
2161      const Jroot = spow(A / env.aW, 0.5 * env.c * env.z);
2162      const J = 100 * spow(Jroot, 2);
2163      const Q = 4 / env.c * Jroot * (env.aW + 4) * env.flRoot;
2164      const C = alpha * Jroot;
2165      const colorfulness = C * env.flRoot;
2166      const h = constrain(hRad * rad2deg);
2167      const H = hueQuadrature(h);
2168      const s = 50 * spow(env.c * alpha / (env.aW + 4), 1 / 2);
2169      return { J, C, h, s, Q, M: colorfulness, H };
2170    }
2171    var cam16_default = new ColorSpace({
2172      id: "cam16-jmh",
2173      cssId: "--cam16-jmh",
2174      name: "CAM16-JMh",
2175      coords: {
2176        j: {
2177          refRange: [0, 100],
2178          name: "J"
2179        },
2180        m: {
2181          refRange: [0, 105],
2182          name: "Colorfulness"
2183        },
2184        h: {
2185          refRange: [0, 360],
2186          type: "angle",
2187          name: "Hue"
2188        }
2189      },
2190      base: xyz_d65_default,
2191      M: M4,
2192      fromBase(xyz) {
2193        if (this.\u03B5 === void 0) {
2194          this.\u03B5 = Object.values(this.coords)[1].refRange[1] / 1e5;
2195        }
2196        const cam16 = toCam16(xyz, viewingConditions);
2197        const isAchromatic = Math.abs(cam16.M) < this.\u03B5;
2198        return [cam16.J, isAchromatic ? 0 : cam16.M, isAchromatic ? null : cam16.h];
2199      },
2200      toBase(cam16) {
2201        return fromCam16({ J: cam16[0], M: cam16[1], h: cam16[2] }, viewingConditions);
2202      }
2203    });
2204  
2205    // packages/theme/node_modules/colorjs.io/src/spaces/hct.js
2206    var white3 = WHITES.D65;
2207    var \u03B55 = 216 / 24389;
2208    var \u03BA2 = 24389 / 27;
2209    function toLstar(y) {
2210      const fy = y > \u03B55 ? Math.cbrt(y) : (\u03BA2 * y + 16) / 116;
2211      return 116 * fy - 16;
2212    }
2213    function fromLstar(lstar) {
2214      return lstar > 8 ? Math.pow((lstar + 16) / 116, 3) : lstar / \u03BA2;
2215    }
2216    function fromHct(coords, env) {
2217      let [h, c, t] = coords;
2218      let xyz = [];
2219      let j = 0;
2220      if (t === 0) {
2221        return [0, 0, 0];
2222      }
2223      let y = fromLstar(t);
2224      if (t > 0) {
2225        j = 0.00379058511492914 * t ** 2 + 0.608983189401032 * t + 0.9155088574762233;
2226      } else {
2227        j = 9514440756550361e-21 * t ** 2 + 0.08693057439788597 * t - 21.928975842194614;
2228      }
2229      const threshold = 2e-12;
2230      const max_attempts = 15;
2231      let attempt = 0;
2232      let last = Infinity;
2233      let best = [0, 0, 0];
2234      while (attempt <= max_attempts) {
2235        xyz = fromCam16({ J: j, C: c, h }, env);
2236        const delta = Math.abs(xyz[1] - y);
2237        if (delta < last) {
2238          if (delta <= threshold) {
2239            return xyz;
2240          }
2241          best = xyz;
2242          last = delta;
2243        }
2244        j = j - (xyz[1] - y) * j / (2 * xyz[1]);
2245        attempt += 1;
2246      }
2247      return best;
2248    }
2249    function toHct(xyz, env) {
2250      const t = toLstar(xyz[1]);
2251      if (t === 0) {
2252        return [0, 0, 0];
2253      }
2254      const cam16 = toCam16(xyz, viewingConditions2);
2255      return [constrain(cam16.h), cam16.C, t];
2256    }
2257    var viewingConditions2 = environment(
2258      white3,
2259      200 / Math.PI * fromLstar(50),
2260      fromLstar(50) * 100,
2261      "average",
2262      false
2263    );
2264    var hct_default = new ColorSpace({
2265      id: "hct",
2266      name: "HCT",
2267      coords: {
2268        h: {
2269          refRange: [0, 360],
2270          type: "angle",
2271          name: "Hue"
2272        },
2273        c: {
2274          refRange: [0, 145],
2275          name: "Colorfulness"
2276        },
2277        t: {
2278          refRange: [0, 100],
2279          name: "Tone"
2280        }
2281      },
2282      base: xyz_d65_default,
2283      fromBase(xyz) {
2284        if (this.\u03B5 === void 0) {
2285          this.\u03B5 = Object.values(this.coords)[1].refRange[1] / 1e5;
2286        }
2287        let hct = toHct(xyz, viewingConditions2);
2288        if (hct[1] < this.\u03B5) {
2289          hct[1] = 0;
2290          hct[0] = null;
2291        }
2292        return hct;
2293      },
2294      toBase(hct) {
2295        return fromHct(hct, viewingConditions2);
2296      },
2297      formats: {
2298        color: {
2299          id: "--hct",
2300          coords: ["<number> | <angle>", "<percentage> | <number>", "<percentage> | <number>"]
2301        }
2302      }
2303    });
2304  
2305    // packages/theme/node_modules/colorjs.io/src/deltaE/deltaEHCT.js
2306    var rad2deg2 = 180 / Math.PI;
2307    var deg2rad2 = Math.PI / 180;
2308    var ucsCoeff = [1, 7e-3, 0.0228];
2309    function convertUcsAb(coords) {
2310      if (coords[1] < 0) {
2311        coords = hct_default.fromBase(hct_default.toBase(coords));
2312      }
2313      const M7 = Math.log(Math.max(1 + ucsCoeff[2] * coords[1] * viewingConditions2.flRoot, 1)) / ucsCoeff[2];
2314      const hrad = coords[0] * deg2rad2;
2315      const a = M7 * Math.cos(hrad);
2316      const b2 = M7 * Math.sin(hrad);
2317      return [coords[2], a, b2];
2318    }
2319    function deltaEHCT_default(color, sample) {
2320      [color, sample] = getColor([color, sample]);
2321      let [t1, a1, b1] = convertUcsAb(hct_default.from(color));
2322      let [t2, a2, b2] = convertUcsAb(hct_default.from(sample));
2323      return Math.sqrt((t1 - t2) ** 2 + (a1 - a2) ** 2 + (b1 - b2) ** 2);
2324    }
2325  
2326    // packages/theme/node_modules/colorjs.io/src/spaces/helmlab.js
2327    var { cos, sin, sqrt, atan2, exp, abs, pow, PI } = Math;
2328    var CAT_TO_HELM = [
2329      [1.000042977349746, 20718877053183e-18, -4361018085669474e-20],
2330      [26946201090235744e-21, 0.9999906145080147, -14898828405401079e-21],
2331      [-7941753620756204e-21, 12875204405137254e-21, 0.9997859822609763]
2332    ];
2333    var CAT_FROM_HELM = [
2334      [0.9999570254019492, -2071874272730964e-20, 4361733292468361e-20],
2335      [-2694517763358666e-20, 1.000009385946497, 1490098223546482e-20],
2336      [7943459292954202e-21, -1287824596735154e-20, 1.000214063706999]
2337    ];
2338    var M1 = [
2339      [0.7212986433113499, 0.45344826541531813, -0.19288975751942616],
2340      [-0.788211869495579, 1.795241376757236, 0.0876172451181785],
2341      [-0.0917700599912156, 0.45765588659459255, 1.2922045513917677]
2342    ];
2343    var M1_INV = [
2344      [1.065107295808859, -0.3150044075301121, 0.1803492381741039],
2345      [0.4721107713837796, 0.4271995765962455, 0.04150680489380985],
2346      [-0.09156391926309541, -0.1736709363194979, 0.7719790382558294]
2347    ];
2348    var GAMMA = [0.47229813098762524, 0.5149184096354483, 0.5113233386366979];
2349    var INV_GAMMA = [2.1173067060606283, 1.9420552485353544, 1.9557096741686448];
2350    var M22 = [
2351      [-0.26355622180094096, 0.4168322883703174, 0.4926763141656403],
2352      [1.8897570508777322, -3.1212232034205774, 1.0421666921060384],
2353      [0.3585108617962056, 1.7694028193790368, -1.4120626067695372]
2354    ];
2355    var M2_INV = [
2356      [0.9183897822815021, 0.5232051237088666, 0.7065804598090856],
2357      [1.0899090574433026, 0.07005324849041904, 0.4319776874787044],
2358      [1.598895729264209, 0.22061850068770233, 0.012506037355220951]
2359    ];
2360    var M5 = { CAT_TO_HELM, CAT_FROM_HELM, M1, M1_INV, M2: M22, M2_INV };
2361    var hue_cos1 = -0.02833024015436984;
2362    var hue_sin1 = -0.21131429516166544;
2363    var hue_cos2 = 0.2189784817615645;
2364    var hue_sin2 = -0.06871898981942523;
2365    var hue_cos3 = 0.005506053349515315;
2366    var hue_sin3 = -0.0641329861299175;
2367    var hue_cos4 = -0.053592461436994296;
2368    var hue_sin4 = -0.00954137464208059;
2369    var hk_weight = 0.2676231133101982;
2370    var hk_power = 0.8934892185255707;
2371    var hk_hue_mod = 0.7173169828841472;
2372    var hk_sin1 = 0.6915224124600773;
2373    var hk_cos2 = 0.48647127559605596;
2374    var hk_sin2 = 0.9853124591201782;
2375    var L_corr_p1 = 0.5385456675962418;
2376    var L_corr_p2 = 0.12508858146241716;
2377    var L_corr_p3 = 0.6768950256217603;
2378    var Lh_cos1 = -0.4963251525324449;
2379    var Lh_sin1 = -0.09564696283240552;
2380    var lp_dark = -0.029053748937210654;
2381    var lp_dark_hcos = 1.3346761652952872;
2382    var lp_dark_hsin = -0.1698908144723919;
2383    var cs_cos1 = -0.195370576218515;
2384    var cs_sin1 = 0.5330819227283227;
2385    var cs_cos2 = 0.08863325582067766;
2386    var cs_sin2 = 0.9365540137751136;
2387    var cs_cos3 = 0.13789738139719568;
2388    var cs_sin3 = 0.061650260197979936;
2389    var cs_cos4 = 0.0641970862504494;
2390    var cs_sin4 = -0.027401052793571013;
2391    var cp_cos1 = -0.09900209889026965;
2392    var cp_sin1 = 0.059635520647228726;
2393    var cp_cos2 = -0.013586499967803128;
2394    var cp_sin2 = 0.2253393118474472;
2395    var lc1 = -1.5239477450767043;
2396    var lc2 = -1.751157310240011;
2397    var hlc_cos1 = -0.43576378069144767;
2398    var hlc_sin1 = 1.060094063845983;
2399    var hlc_cos2 = 0.47931193034584496;
2400    var hlc_sin2 = -0.2622579649434462;
2401    var hl_cos1 = 0.13610794232685908;
2402    var hl_sin1 = 0.1168702235362288;
2403    var hl_cos2 = -0.01617739641422492;
2404    var hl_sin2 = 0.038145638815030566;
2405    var PHI = -28.2 * PI / 180;
2406    var ROT_COS = cos(PHI);
2407    var ROT_SIN = sin(PHI);
2408    function hueDelta(h) {
2409      return hue_cos1 * cos(h) + hue_sin1 * sin(h) + hue_cos2 * cos(2 * h) + hue_sin2 * sin(2 * h) + hue_cos3 * cos(3 * h) + hue_sin3 * sin(3 * h) + hue_cos4 * cos(4 * h) + hue_sin4 * sin(4 * h);
2410    }
2411    function hueDeltaDeriv(h) {
2412      return -hue_cos1 * sin(h) + hue_sin1 * cos(h) + -2 * hue_cos2 * sin(2 * h) + 2 * hue_sin2 * cos(2 * h) + -3 * hue_cos3 * sin(3 * h) + 3 * hue_sin3 * cos(3 * h) + -4 * hue_cos4 * sin(4 * h) + 4 * hue_sin4 * cos(4 * h);
2413    }
2414    function chromaScaleH(h) {
2415      let logS = cs_cos1 * cos(h) + cs_sin1 * sin(h) + cs_cos2 * cos(2 * h) + cs_sin2 * sin(2 * h) + cs_cos3 * cos(3 * h) + cs_sin3 * sin(3 * h) + cs_cos4 * cos(4 * h) + cs_sin4 * sin(4 * h);
2416      return exp(logS);
2417    }
2418    function lChromaScale(L) {
2419      let dL = L - 0.5;
2420      return exp(clamp(-30, lc1 * dL + lc2 * dL * dL, 30));
2421    }
2422    function hlcScale(h, L) {
2423      let hueFactor = hlc_cos1 * cos(h) + hlc_sin1 * sin(h) + hlc_cos2 * cos(2 * h) + hlc_sin2 * sin(2 * h);
2424      return exp(clamp(-30, (L - 0.5) * hueFactor, 30));
2425    }
2426    function hueLightnessScale(h) {
2427      let logS = hl_cos1 * cos(h) + hl_sin1 * sin(h) + hl_cos2 * cos(2 * h) + hl_sin2 * sin(2 * h);
2428      return exp(logS);
2429    }
2430    function chromaPowerH(h) {
2431      return 1 + cp_cos1 * cos(h) + cp_sin1 * sin(h) + cp_cos2 * cos(2 * h) + cp_sin2 * sin(2 * h);
2432    }
2433    function lCorrectFwd(L, h) {
2434      let t = L * (1 - L);
2435      let result = L + L_corr_p1 * t + L_corr_p2 * t * (0.5 - L) + L_corr_p3 * t * t;
2436      result += t * (Lh_cos1 * cos(h) + Lh_sin1 * sin(h));
2437      return result;
2438    }
2439    function lCorrectInv(L1, h) {
2440      let Lh = Lh_cos1 * cos(h) + Lh_sin1 * sin(h);
2441      let L = L1;
2442      for (let i = 0; i < 15; i++) {
2443        let t = L * (1 - L);
2444        let dt = 1 - 2 * L;
2445        let f = L + (L_corr_p1 + Lh) * t + L_corr_p2 * t * (0.5 - L) + L_corr_p3 * t * t - L1;
2446        let dfdL = 1 + (L_corr_p1 + Lh) * dt + L_corr_p2 * (dt * (0.5 - L) - t) + L_corr_p3 * 2 * t * dt;
2447        if (abs(dfdL) < 1e-10) {
2448          dfdL = 1;
2449        }
2450        L -= f / dfdL;
2451      }
2452      return L;
2453    }
2454    function darkLFwd(L, h) {
2455      let coeff = lp_dark + lp_dark_hcos * cos(h) + lp_dark_hsin * sin(h);
2456      let oml = L < 1 ? 1 - L : 0;
2457      let g2 = coeff * L * oml * oml;
2458      return L * exp(clamp(-30, g2, 30));
2459    }
2460    function darkLInv(Ln, h) {
2461      let coeff = lp_dark + lp_dark_hcos * cos(h) + lp_dark_hsin * sin(h);
2462      let L = Ln;
2463      for (let i = 0; i < 12; i++) {
2464        let oml = L < 1 ? 1 - L : 0;
2465        let g2 = coeff * L * oml * oml;
2466        let eg = exp(clamp(-30, g2, 30));
2467        let f = L * eg - Ln;
2468        let gp = coeff * oml * (1 - 3 * L);
2469        let fp = eg * (1 + L * gp);
2470        if (abs(fp) < 1e-10) {
2471          fp = 1;
2472        }
2473        L -= f / fp;
2474      }
2475      return L;
2476    }
2477    var fromXYZ = function(xyz) {
2478      let adapted = multiply_v3_m3x3(xyz, M5.CAT_TO_HELM);
2479      let [lms0, lms1, lms2] = multiply_v3_m3x3(adapted, M5.M1);
2480      let c0 = spow(lms0, GAMMA[0]);
2481      let c13 = spow(lms1, GAMMA[1]);
2482      let c23 = spow(lms2, GAMMA[2]);
2483      let [L, a, b2] = multiply_v3_m3x3([c0, c13, c23], M5.M2);
2484      let h = atan2(b2, a);
2485      let C = sqrt(a * a + b2 * b2);
2486      let delta = hueDelta(h);
2487      let hNew = h + delta;
2488      a = C * cos(hNew);
2489      b2 = C * sin(hNew);
2490      let Cr = sqrt(a * a + b2 * b2);
2491      let hkBoost = hk_weight * pow(Cr, clamp(0.01, hk_power, 10));
2492      let hr = atan2(b2, a);
2493      let factor = 1 + hk_hue_mod * cos(hr) + hk_sin1 * sin(hr) + hk_cos2 * cos(2 * hr) + hk_sin2 * sin(2 * hr);
2494      L += hkBoost * factor;
2495      h = atan2(b2, a);
2496      L = lCorrectFwd(L, h);
2497      h = atan2(b2, a);
2498      L = darkLFwd(L, h);
2499      h = atan2(b2, a);
2500      let cs = chromaScaleH(h);
2501      a *= cs;
2502      b2 *= cs;
2503      h = atan2(b2, a);
2504      C = sqrt(a * a + b2 * b2);
2505      let p3 = chromaPowerH(h);
2506      let Cn = C > 0 ? pow(C, p3) : 0;
2507      a = Cn * cos(h);
2508      b2 = Cn * sin(h);
2509      let T = lChromaScale(L);
2510      a *= T;
2511      b2 *= T;
2512      h = atan2(b2, a);
2513      let hlcS = hlcScale(h, L);
2514      a *= hlcS;
2515      b2 *= hlcS;
2516      h = atan2(b2, a);
2517      L *= hueLightnessScale(h);
2518      let aRot = a * ROT_COS - b2 * ROT_SIN;
2519      let bRot = a * ROT_SIN + b2 * ROT_COS;
2520      return [L, aRot, bRot];
2521    };
2522    var toXYZ = function(lab) {
2523      let [L, a, b2] = lab;
2524      let aUn = a * ROT_COS + b2 * ROT_SIN;
2525      let bUn = -a * ROT_SIN + b2 * ROT_COS;
2526      a = aUn;
2527      b2 = bUn;
2528      let h = atan2(b2, a);
2529      L /= hueLightnessScale(h);
2530      h = atan2(b2, a);
2531      let hlcS = hlcScale(h, L);
2532      a /= hlcS;
2533      b2 /= hlcS;
2534      let T = lChromaScale(L);
2535      a /= T;
2536      b2 /= T;
2537      h = atan2(b2, a);
2538      let C = sqrt(a * a + b2 * b2);
2539      let p3 = chromaPowerH(h);
2540      let Co = C > 0 ? pow(C, 1 / p3) : 0;
2541      a = Co * cos(h);
2542      b2 = Co * sin(h);
2543      h = atan2(b2, a);
2544      let cs = chromaScaleH(h);
2545      a /= cs;
2546      b2 /= cs;
2547      h = atan2(b2, a);
2548      L = darkLInv(L, h);
2549      h = atan2(b2, a);
2550      L = lCorrectInv(L, h);
2551      let Cr = sqrt(a * a + b2 * b2);
2552      let hkBoost = hk_weight * pow(Cr, clamp(0.01, hk_power, 10));
2553      let hr = atan2(b2, a);
2554      let factor = 1 + hk_hue_mod * cos(hr) + hk_sin1 * sin(hr) + hk_cos2 * cos(2 * hr) + hk_sin2 * sin(2 * hr);
2555      L -= hkBoost * factor;
2556      let hOut = atan2(b2, a);
2557      C = sqrt(a * a + b2 * b2);
2558      let hRaw = hOut;
2559      for (let i = 0; i < 8; i++) {
2560        let f = hRaw + hueDelta(hRaw) - hOut;
2561        let fp = 1 + hueDeltaDeriv(hRaw);
2562        if (abs(fp) < 1e-10) {
2563          fp = 1;
2564        }
2565        hRaw -= f / fp;
2566      }
2567      a = C * cos(hRaw);
2568      b2 = C * sin(hRaw);
2569      let [lc0, lc12, lc22] = multiply_v3_m3x3([L, a, b2], M5.M2_INV);
2570      let l0 = spow(lc0, INV_GAMMA[0]);
2571      let l1 = spow(lc12, INV_GAMMA[1]);
2572      let l2 = spow(lc22, INV_GAMMA[2]);
2573      let xyz = multiply_v3_m3x3([l0, l1, l2], M5.M1_INV);
2574      return multiply_v3_m3x3(xyz, M5.CAT_FROM_HELM);
2575    };
2576    var helmlab_default = new ColorSpace({
2577      id: "helmlab-metric",
2578      name: "Helmlab MetricSpace",
2579      cssId: "--helmlab-metric",
2580      coords: {
2581        l: {
2582          refRange: [0, 1.6],
2583          name: "Lightness"
2584        },
2585        a: {
2586          refRange: [-1.5, 1.5]
2587        },
2588        b: {
2589          refRange: [-1.5, 1.5]
2590        }
2591      },
2592      white: "D65",
2593      base: xyz_d65_default,
2594      M: M5,
2595      fromBase(xyz) {
2596        return fromXYZ(xyz);
2597      },
2598      toBase(lab) {
2599        return toXYZ(lab);
2600      }
2601    });
2602  
2603    // packages/theme/node_modules/colorjs.io/src/deltaE/deltaEHelmlab.js
2604    var sl = -0.9155125151657894;
2605    var sc = 2.9268353744941558;
2606    var wC = 3.966003089807536;
2607    var p2 = 1.9737081170404969;
2608    var compress = 52.473130649294724;
2609    var q = 0.47897301074925214;
2610    function deltaEHelmlab_default(color, sample) {
2611      [color, sample] = getColor([color, sample]);
2612      let [L1, a1, b1] = helmlab_default.from(color);
2613      let [L2, a2, b2] = helmlab_default.from(sample);
2614      let \u0394L = L1 - L2;
2615      let \u0394a = a1 - a2;
2616      let \u0394b = b1 - b2;
2617      let Lavg = (L1 + L2) * 0.5;
2618      let SL = 1 + sl * (Lavg - 0.5) ** 2;
2619      let C1 = Math.sqrt(a1 ** 2 + b1 ** 2);
2620      let C2 = Math.sqrt(a2 ** 2 + b2 ** 2);
2621      let Cavg = (C1 + C2) * 0.5;
2622      let SC = 1 + sc * Cavg;
2623      let raw = (\u0394L ** 2 / SL ** 2 + wC * (\u0394a ** 2 + \u0394b ** 2) / SC ** 2) ** (p2 / 2);
2624      let compressed = raw / (1 + compress * raw);
2625      return compressed ** q;
2626    }
2627  
2628    // packages/theme/node_modules/colorjs.io/src/deltaE/index.js
2629    var deltaE_default = {
2630      deltaE76,
2631      deltaECMC: deltaECMC_default,
2632      deltaE2000: deltaE2000_default,
2633      deltaEJz: deltaEJz_default,
2634      deltaEITP: deltaEITP_default,
2635      deltaEOK: deltaEOK_default,
2636      deltaEOK2: deltaEOK2_default,
2637      deltaEHCT: deltaEHCT_default,
2638      deltaEHelmlab: deltaEHelmlab_default
2639    };
2640  
2641    // packages/theme/node_modules/colorjs.io/src/toGamut.js
2642    function calcEpsilon(jnd) {
2643      const order = !jnd ? 0 : Math.floor(Math.log10(Math.abs(jnd)));
2644      return Math.max(parseFloat(`1e$order - 2}`), 1e-6);
2645    }
2646    var GMAPPRESET = {
2647      hct: {
2648        method: "hct.c",
2649        jnd: 2,
2650        deltaEMethod: "hct",
2651        blackWhiteClamp: {}
2652      },
2653      "hct-tonal": {
2654        method: "hct.c",
2655        jnd: 0,
2656        deltaEMethod: "hct",
2657        blackWhiteClamp: { channel: "hct.t", min: 0, max: 100 }
2658      }
2659    };
2660    function toGamut(color, {
2661      method = defaults_default.gamut_mapping,
2662      space = void 0,
2663      deltaEMethod = "",
2664      jnd = 2,
2665      blackWhiteClamp = void 0
2666    } = {}) {
2667      color = getColor(color);
2668      if (isString(arguments[1])) {
2669        space = arguments[1];
2670      } else if (!space) {
2671        space = color.space;
2672      }
2673      space = ColorSpace.get(space);
2674      if (inGamut(color, space, { epsilon: 0 })) {
2675        return (
2676          /** @type {PlainColorObject} */
2677          color
2678        );
2679      }
2680      let spaceColor;
2681      if (method === "css") {
2682        spaceColor = toGamutCSS(color, { space });
2683      } else if (method === "raytrace") {
2684        spaceColor = toGamutRayTrace(color, { space });
2685      } else {
2686        if (method !== "clip") {
2687          if (Object.prototype.hasOwnProperty.call(GMAPPRESET, method)) {
2688            ({ method, jnd, deltaEMethod, blackWhiteClamp } = GMAPPRESET[method]);
2689          }
2690          let de = deltaE2000_default;
2691          if (deltaEMethod !== "") {
2692            for (let m in deltaE_default) {
2693              if ("deltae" + deltaEMethod.toLowerCase() === m.toLowerCase()) {
2694                de = deltaE_default[m];
2695                break;
2696              }
2697            }
2698          }
2699          if (jnd === 0) {
2700            jnd = 1e-16;
2701          }
2702          let clipped = toGamut(to(color, space), { method: "clip", space });
2703          if (de(color, clipped) > jnd) {
2704            if (blackWhiteClamp && Object.keys(blackWhiteClamp).length === 3) {
2705              let channelMeta = ColorSpace.resolveCoord(blackWhiteClamp.channel);
2706              let channel = get(to(color, channelMeta.space), channelMeta.id);
2707              if (isNone(channel)) {
2708                channel = 0;
2709              }
2710              if (channel >= blackWhiteClamp.max) {
2711                return to({ space: "xyz-d65", coords: WHITES["D65"] }, color.space);
2712              } else if (channel <= blackWhiteClamp.min) {
2713                return to({ space: "xyz-d65", coords: [0, 0, 0] }, color.space);
2714              }
2715            }
2716            let coordMeta = ColorSpace.resolveCoord(method);
2717            let mapSpace = coordMeta.space;
2718            let coordId = coordMeta.id;
2719            let mappedColor = to(color, mapSpace);
2720            mappedColor.coords.forEach((c, i) => {
2721              if (isNone(c)) {
2722                mappedColor.coords[i] = 0;
2723              }
2724            });
2725            let bounds = coordMeta.range || coordMeta.refRange;
2726            let min = bounds[0];
2727            let \u03B56 = calcEpsilon(jnd);
2728            let low = min;
2729            let high = get(mappedColor, coordId);
2730            while (high - low > \u03B56) {
2731              let clipped2 = clone(mappedColor);
2732              clipped2 = toGamut(clipped2, { space, method: "clip" });
2733              let deltaE = de(mappedColor, clipped2);
2734              if (deltaE - jnd < \u03B56) {
2735                low = get(mappedColor, coordId);
2736              } else {
2737                high = get(mappedColor, coordId);
2738              }
2739              set(mappedColor, coordId, (low + high) / 2);
2740            }
2741            spaceColor = to(mappedColor, space);
2742          } else {
2743            spaceColor = clipped;
2744          }
2745        } else {
2746          spaceColor = to(color, space);
2747        }
2748        if (method === "clip" || // Dumb coord clipping
2749        // finish off smarter gamut mapping with clip to get rid of ε, see #17
2750        !inGamut(spaceColor, space, { epsilon: 0 })) {
2751          let bounds = Object.values(space.coords).map((c) => c.range || []);
2752          spaceColor.coords = /** @type {[number, number, number]} */
2753          spaceColor.coords.map((c, i) => {
2754            let [min, max] = bounds[i];
2755            if (min !== void 0) {
2756              c = Math.max(min, c);
2757            }
2758            if (max !== void 0) {
2759              c = Math.min(c, max);
2760            }
2761            return c;
2762          });
2763        }
2764      }
2765      if (space !== color.space) {
2766        spaceColor = to(spaceColor, color.space);
2767      }
2768      color.coords = spaceColor.coords;
2769      return (
2770        /** @type {PlainColorObject} */
2771        color
2772      );
2773    }
2774    toGamut.returns = "color";
2775    var COLORS = {
2776      WHITE: { space: oklab_default, coords: [1, 0, 0], alpha: 1 },
2777      BLACK: { space: oklab_default, coords: [0, 0, 0], alpha: 1 }
2778    };
2779    function toGamutCSS(origin, { space } = {}) {
2780      const JND = 0.02;
2781      const \u03B56 = 1e-4;
2782      origin = getColor(origin);
2783      if (!space) {
2784        space = origin.space;
2785      }
2786      space = ColorSpace.get(space);
2787      if (space.isUnbounded) {
2788        return to(origin, space);
2789      }
2790      const origin_OKLCH = to(origin, oklch_default);
2791      let L = origin_OKLCH.coords[0];
2792      if (L >= 1) {
2793        const white4 = to(COLORS.WHITE, space);
2794        white4.alpha = origin.alpha;
2795        return to(white4, space);
2796      }
2797      if (L <= 0) {
2798        const black = to(COLORS.BLACK, space);
2799        black.alpha = origin.alpha;
2800        return to(black, space);
2801      }
2802      if (inGamut(origin_OKLCH, space, { epsilon: 0 })) {
2803        return to(origin_OKLCH, space);
2804      }
2805      function clip(_color) {
2806        const destColor = to(_color, space);
2807        const spaceCoords = Object.values(
2808          /** @type {ColorSpace} */
2809          space.coords
2810        );
2811        destColor.coords = /** @type {[number, number, number]} */
2812        destColor.coords.map((coord, index) => {
2813          if ("range" in spaceCoords[index]) {
2814            const [min2, max2] = spaceCoords[index].range;
2815            return clamp(min2, coord, max2);
2816          }
2817          return coord;
2818        });
2819        return destColor;
2820      }
2821      let min = 0;
2822      let max = origin_OKLCH.coords[1];
2823      let min_inGamut = true;
2824      let current = clone(origin_OKLCH);
2825      let clipped = clip(current);
2826      let E = deltaEOK_default(clipped, current);
2827      if (E < JND) {
2828        return clipped;
2829      }
2830      while (max - min > \u03B56) {
2831        const chroma = (min + max) / 2;
2832        current.coords[1] = chroma;
2833        if (min_inGamut && inGamut(current, space, { epsilon: 0 })) {
2834          min = chroma;
2835        } else {
2836          clipped = clip(current);
2837          E = deltaEOK_default(clipped, current);
2838          if (E < JND) {
2839            if (JND - E < \u03B56) {
2840              break;
2841            } else {
2842              min_inGamut = false;
2843              min = chroma;
2844            }
2845          } else {
2846            max = chroma;
2847          }
2848        }
2849      }
2850      return clipped;
2851    }
2852    function raytrace_box(start, end, bmin = [0, 0, 0], bmax = [1, 1, 1]) {
2853      let tfar = Infinity;
2854      let tnear = -Infinity;
2855      let direction = [];
2856      for (let i = 0; i < 3; i++) {
2857        const a = start[i];
2858        const b2 = end[i];
2859        const d2 = b2 - a;
2860        const bn = bmin[i];
2861        const bx = bmax[i];
2862        direction.push(d2);
2863        if (Math.abs(d2) > 1e-12) {
2864          const inv_d = 1 / d2;
2865          const t1 = (bn - a) * inv_d;
2866          const t2 = (bx - a) * inv_d;
2867          tnear = Math.max(Math.min(t1, t2), tnear);
2868          tfar = Math.min(Math.max(t1, t2), tfar);
2869        } else if (a < bn || a > bx) {
2870          return [];
2871        }
2872      }
2873      if (tnear > tfar || tfar < 0) {
2874        return [];
2875      }
2876      if (tnear < 0) {
2877        tnear = tfar;
2878      }
2879      if (!isFinite(tnear)) {
2880        return [];
2881      }
2882      return [
2883        start[0] + direction[0] * tnear,
2884        start[1] + direction[1] * tnear,
2885        start[2] + direction[2] * tnear
2886      ];
2887    }
2888    function toGamutRayTrace(origin, { space } = {}) {
2889      origin = getColor(origin);
2890      if (!space) {
2891        space = origin.space;
2892      }
2893      space = ColorSpace.get(space);
2894      if (space.isUnbounded) {
2895        return to(origin, space);
2896      }
2897      let oklchOrigin = to(origin, oklch_default);
2898      let [lightness, chroma, hue] = oklchOrigin.coords;
2899      if (lightness >= 1) {
2900        const white4 = to(COLORS.WHITE, space);
2901        white4.alpha = origin.alpha;
2902        return to(white4, space);
2903      } else if (lightness <= 0) {
2904        const black = to(COLORS.BLACK, space);
2905        black.alpha = origin.alpha;
2906        return to(black, space);
2907      }
2908      const originSpace = space;
2909      const rGamut = space.rgbGamut;
2910      if (rGamut !== void 0) {
2911        space = rGamut;
2912      }
2913      if (!isInstance(space, RGBColorSpace)) {
2914        throw Error("An RGB gamut is required");
2915      }
2916      let [mn, mx] = Object.values(space.coords)[0].range;
2917      let max = (
2918        /** @type {[number, number, number]} */
2919        [mx, mx, mx]
2920      );
2921      const lGamut = space.linearGamut;
2922      if (lGamut !== void 0) {
2923        let temp = to({ space, coords: max, alpha: origin.alpha }, lGamut);
2924        mx = temp.coords[0];
2925        max = /** @type {[number, number, number]} */
2926        [mx, mx, mx];
2927        space = lGamut;
2928        mn = Object.values(space.coords)[0].range[0];
2929      }
2930      let min = (
2931        /** @type {[number, number, number]} */
2932        [mn, mn, mn]
2933      );
2934      let rgbOrigin = to(oklchOrigin, space);
2935      if (!rgbOrigin.coords.every((x) => mn <= x && x <= mx)) {
2936        let anchor = to({ space: oklch_default, coords: [lightness, 0, hue] }, space).coords;
2937        const low = mn + 1e-12;
2938        const high = mx - 1e-12;
2939        let last = rgbOrigin.coords;
2940        for (let i = 0; i < 4; i++) {
2941          if (i) {
2942            const oklchColor = to(rgbOrigin, oklch_default);
2943            oklchColor.coords[0] = lightness;
2944            oklchColor.coords[2] = hue;
2945            rgbOrigin = to(oklchColor, space);
2946          }
2947          const intersection = raytrace_box(anchor, rgbOrigin.coords, min, max);
2948          if (intersection.length === 0) {
2949            rgbOrigin.coords = [...last];
2950            break;
2951          }
2952          if (i && rgbOrigin.coords.every((x) => low < x && x < high)) {
2953            anchor = [...rgbOrigin.coords];
2954          }
2955          last = /** @type {[number, number, number]} */
2956          intersection;
2957          rgbOrigin.coords = [...intersection];
2958        }
2959      }
2960      rgbOrigin = to(rgbOrigin, originSpace);
2961      const spaceCoords = Object.values(
2962        /** @type {ColorSpace} */
2963        originSpace.coords
2964      );
2965      rgbOrigin.coords = /** @type {[number, number, number]} */
2966      rgbOrigin.coords.map((coord, index) => {
2967        if ("range" in spaceCoords[index]) {
2968          const [lower, upper] = spaceCoords[index].range;
2969          return clamp(lower, coord, upper);
2970        }
2971        return coord;
2972      });
2973      return rgbOrigin;
2974    }
2975  
2976    // packages/theme/node_modules/colorjs.io/src/serialize.js
2977    function serialize(color, options = {}) {
2978      let {
2979        precision = defaults_default.precision,
2980        format,
2981        inGamut: inGamut2 = true,
2982        coords: coordFormat,
2983        alpha: alphaFormat,
2984        commas
2985      } = options;
2986      let ret;
2987      let colorWithMeta = (
2988        /** @type {PlainColorObject & ParseOptions} */
2989        getColor(color)
2990      );
2991      let formatId = format;
2992      let parseMeta = colorWithMeta.parseMeta;
2993      if (parseMeta && !format) {
2994        if (parseMeta.format.canSerialize()) {
2995          format = parseMeta.format;
2996          formatId = parseMeta.formatId;
2997        }
2998        coordFormat ??= parseMeta.types;
2999        alphaFormat ??= parseMeta.alphaType;
3000        commas ??= parseMeta.commas;
3001      }
3002      if (formatId) {
3003        format = colorWithMeta.space.getFormat(format) ?? ColorSpace.findFormat(formatId);
3004      }
3005      if (!format) {
3006        format = colorWithMeta.space.getFormat("default") ?? ColorSpace.DEFAULT_FORMAT;
3007        formatId = format.name;
3008      }
3009      if (format && format.space && format.space !== colorWithMeta.space) {
3010        colorWithMeta = to(colorWithMeta, format.space);
3011      }
3012      let coords = colorWithMeta.coords.slice();
3013      inGamut2 ||= format.toGamut;
3014      if (inGamut2 && !inGamut(colorWithMeta)) {
3015        coords = toGamut(clone(colorWithMeta), inGamut2 === true ? void 0 : inGamut2).coords;
3016      }
3017      if (format.type === "custom") {
3018        if (format.serialize) {
3019          ret = format.serialize(coords, colorWithMeta.alpha, options);
3020        } else {
3021          throw new TypeError(
3022            `format $formatId} can only be used to parse colors, not for serialization`
3023          );
3024        }
3025      } else {
3026        let name = format.name || "color";
3027        let args = format.serializeCoords(coords, precision, coordFormat);
3028        if (name === "color") {
3029          let cssId = format.id || format.ids?.[0] || colorWithMeta.space.cssId || colorWithMeta.space.id;
3030          args.unshift(cssId);
3031        }
3032        let alpha = colorWithMeta.alpha;
3033        if (alphaFormat !== void 0 && !(typeof alphaFormat === "object")) {
3034          alphaFormat = typeof alphaFormat === "string" ? { type: alphaFormat } : { include: alphaFormat };
3035        }
3036        let alphaType = alphaFormat?.type ?? "<number>";
3037        let serializeAlpha = alphaFormat?.include === true || format.alpha === true || alphaFormat?.include !== false && format.alpha !== false && alpha < 1;
3038        let strAlpha = "";
3039        commas ??= format.commas;
3040        if (serializeAlpha) {
3041          if (precision !== null) {
3042            let unit;
3043            if (alphaType === "<percentage>") {
3044              unit = "%";
3045              alpha *= 100;
3046            }
3047            alpha = serializeNumber(alpha, { precision, unit });
3048          }
3049          strAlpha = `$commas ? "," : " /"} $alpha}`;
3050        }
3051        ret = `$name}($args.join(commas ? ", " : " ")}$strAlpha})`;
3052      }
3053      return ret;
3054    }
3055  
3056    // packages/theme/node_modules/colorjs.io/src/spaces/srgb-linear.js
3057    var M6 = {
3058      // calculated directly from the RGB and white chromaticities; when rounded to
3059      // 8 decimal places, agrees completely with the official matrix
3060      // see https://github.com/w3c/csswg-drafts/issues/5922
3061      toXYZ: [
3062        [0.41239079926595934, 0.357584339383878, 0.1804807884018343],
3063        [0.21263900587151027, 0.715168678767756, 0.07219231536073371],
3064        [0.01933081871559182, 0.11919477979462598, 0.9505321522496607]
3065      ],
3066      // the inverse of the above; again agrees with the official definition
3067      // when rounded to 8 decimal places
3068      fromXYZ: [
3069        [3.2409699419045226, -1.537383177570094, -0.4986107602930034],
3070        [-0.9692436362808796, 1.8759675015077202, 0.04155505740717559],
3071        [0.05563007969699366, -0.20397695888897652, 1.0569715142428786]
3072      ]
3073    };
3074    var srgb_linear_default = new RGBColorSpace({
3075      id: "srgb-linear",
3076      name: "Linear sRGB",
3077      white: "D65",
3078      M: M6
3079    });
3080  
3081    // packages/theme/node_modules/colorjs.io/src/keywords.js
3082    var keywords_default = {
3083      aliceblue: [240 / 255, 248 / 255, 1],
3084      antiquewhite: [250 / 255, 235 / 255, 215 / 255],
3085      aqua: [0, 1, 1],
3086      aquamarine: [127 / 255, 1, 212 / 255],
3087      azure: [240 / 255, 1, 1],
3088      beige: [245 / 255, 245 / 255, 220 / 255],
3089      bisque: [1, 228 / 255, 196 / 255],
3090      black: [0, 0, 0],
3091      blanchedalmond: [1, 235 / 255, 205 / 255],
3092      blue: [0, 0, 1],
3093      blueviolet: [138 / 255, 43 / 255, 226 / 255],
3094      brown: [165 / 255, 42 / 255, 42 / 255],
3095      burlywood: [222 / 255, 184 / 255, 135 / 255],
3096      cadetblue: [95 / 255, 158 / 255, 160 / 255],
3097      chartreuse: [127 / 255, 1, 0],
3098      chocolate: [210 / 255, 105 / 255, 30 / 255],
3099      coral: [1, 127 / 255, 80 / 255],
3100      cornflowerblue: [100 / 255, 149 / 255, 237 / 255],
3101      cornsilk: [1, 248 / 255, 220 / 255],
3102      crimson: [220 / 255, 20 / 255, 60 / 255],
3103      cyan: [0, 1, 1],
3104      darkblue: [0, 0, 139 / 255],
3105      darkcyan: [0, 139 / 255, 139 / 255],
3106      darkgoldenrod: [184 / 255, 134 / 255, 11 / 255],
3107      darkgray: [169 / 255, 169 / 255, 169 / 255],
3108      darkgreen: [0, 100 / 255, 0],
3109      darkgrey: [169 / 255, 169 / 255, 169 / 255],
3110      darkkhaki: [189 / 255, 183 / 255, 107 / 255],
3111      darkmagenta: [139 / 255, 0, 139 / 255],
3112      darkolivegreen: [85 / 255, 107 / 255, 47 / 255],
3113      darkorange: [1, 140 / 255, 0],
3114      darkorchid: [153 / 255, 50 / 255, 204 / 255],
3115      darkred: [139 / 255, 0, 0],
3116      darksalmon: [233 / 255, 150 / 255, 122 / 255],
3117      darkseagreen: [143 / 255, 188 / 255, 143 / 255],
3118      darkslateblue: [72 / 255, 61 / 255, 139 / 255],
3119      darkslategray: [47 / 255, 79 / 255, 79 / 255],
3120      darkslategrey: [47 / 255, 79 / 255, 79 / 255],
3121      darkturquoise: [0, 206 / 255, 209 / 255],
3122      darkviolet: [148 / 255, 0, 211 / 255],
3123      deeppink: [1, 20 / 255, 147 / 255],
3124      deepskyblue: [0, 191 / 255, 1],
3125      dimgray: [105 / 255, 105 / 255, 105 / 255],
3126      dimgrey: [105 / 255, 105 / 255, 105 / 255],
3127      dodgerblue: [30 / 255, 144 / 255, 1],
3128      firebrick: [178 / 255, 34 / 255, 34 / 255],
3129      floralwhite: [1, 250 / 255, 240 / 255],
3130      forestgreen: [34 / 255, 139 / 255, 34 / 255],
3131      fuchsia: [1, 0, 1],
3132      gainsboro: [220 / 255, 220 / 255, 220 / 255],
3133      ghostwhite: [248 / 255, 248 / 255, 1],
3134      gold: [1, 215 / 255, 0],
3135      goldenrod: [218 / 255, 165 / 255, 32 / 255],
3136      gray: [128 / 255, 128 / 255, 128 / 255],
3137      green: [0, 128 / 255, 0],
3138      greenyellow: [173 / 255, 1, 47 / 255],
3139      grey: [128 / 255, 128 / 255, 128 / 255],
3140      honeydew: [240 / 255, 1, 240 / 255],
3141      hotpink: [1, 105 / 255, 180 / 255],
3142      indianred: [205 / 255, 92 / 255, 92 / 255],
3143      indigo: [75 / 255, 0, 130 / 255],
3144      ivory: [1, 1, 240 / 255],
3145      khaki: [240 / 255, 230 / 255, 140 / 255],
3146      lavender: [230 / 255, 230 / 255, 250 / 255],
3147      lavenderblush: [1, 240 / 255, 245 / 255],
3148      lawngreen: [124 / 255, 252 / 255, 0],
3149      lemonchiffon: [1, 250 / 255, 205 / 255],
3150      lightblue: [173 / 255, 216 / 255, 230 / 255],
3151      lightcoral: [240 / 255, 128 / 255, 128 / 255],
3152      lightcyan: [224 / 255, 1, 1],
3153      lightgoldenrodyellow: [250 / 255, 250 / 255, 210 / 255],
3154      lightgray: [211 / 255, 211 / 255, 211 / 255],
3155      lightgreen: [144 / 255, 238 / 255, 144 / 255],
3156      lightgrey: [211 / 255, 211 / 255, 211 / 255],
3157      lightpink: [1, 182 / 255, 193 / 255],
3158      lightsalmon: [1, 160 / 255, 122 / 255],
3159      lightseagreen: [32 / 255, 178 / 255, 170 / 255],
3160      lightskyblue: [135 / 255, 206 / 255, 250 / 255],
3161      lightslategray: [119 / 255, 136 / 255, 153 / 255],
3162      lightslategrey: [119 / 255, 136 / 255, 153 / 255],
3163      lightsteelblue: [176 / 255, 196 / 255, 222 / 255],
3164      lightyellow: [1, 1, 224 / 255],
3165      lime: [0, 1, 0],
3166      limegreen: [50 / 255, 205 / 255, 50 / 255],
3167      linen: [250 / 255, 240 / 255, 230 / 255],
3168      magenta: [1, 0, 1],
3169      maroon: [128 / 255, 0, 0],
3170      mediumaquamarine: [102 / 255, 205 / 255, 170 / 255],
3171      mediumblue: [0, 0, 205 / 255],
3172      mediumorchid: [186 / 255, 85 / 255, 211 / 255],
3173      mediumpurple: [147 / 255, 112 / 255, 219 / 255],
3174      mediumseagreen: [60 / 255, 179 / 255, 113 / 255],
3175      mediumslateblue: [123 / 255, 104 / 255, 238 / 255],
3176      mediumspringgreen: [0, 250 / 255, 154 / 255],
3177      mediumturquoise: [72 / 255, 209 / 255, 204 / 255],
3178      mediumvioletred: [199 / 255, 21 / 255, 133 / 255],
3179      midnightblue: [25 / 255, 25 / 255, 112 / 255],
3180      mintcream: [245 / 255, 1, 250 / 255],
3181      mistyrose: [1, 228 / 255, 225 / 255],
3182      moccasin: [1, 228 / 255, 181 / 255],
3183      navajowhite: [1, 222 / 255, 173 / 255],
3184      navy: [0, 0, 128 / 255],
3185      oldlace: [253 / 255, 245 / 255, 230 / 255],
3186      olive: [128 / 255, 128 / 255, 0],
3187      olivedrab: [107 / 255, 142 / 255, 35 / 255],
3188      orange: [1, 165 / 255, 0],
3189      orangered: [1, 69 / 255, 0],
3190      orchid: [218 / 255, 112 / 255, 214 / 255],
3191      palegoldenrod: [238 / 255, 232 / 255, 170 / 255],
3192      palegreen: [152 / 255, 251 / 255, 152 / 255],
3193      paleturquoise: [175 / 255, 238 / 255, 238 / 255],
3194      palevioletred: [219 / 255, 112 / 255, 147 / 255],
3195      papayawhip: [1, 239 / 255, 213 / 255],
3196      peachpuff: [1, 218 / 255, 185 / 255],
3197      peru: [205 / 255, 133 / 255, 63 / 255],
3198      pink: [1, 192 / 255, 203 / 255],
3199      plum: [221 / 255, 160 / 255, 221 / 255],
3200      powderblue: [176 / 255, 224 / 255, 230 / 255],
3201      purple: [128 / 255, 0, 128 / 255],
3202      rebeccapurple: [102 / 255, 51 / 255, 153 / 255],
3203      red: [1, 0, 0],
3204      rosybrown: [188 / 255, 143 / 255, 143 / 255],
3205      royalblue: [65 / 255, 105 / 255, 225 / 255],
3206      saddlebrown: [139 / 255, 69 / 255, 19 / 255],
3207      salmon: [250 / 255, 128 / 255, 114 / 255],
3208      sandybrown: [244 / 255, 164 / 255, 96 / 255],
3209      seagreen: [46 / 255, 139 / 255, 87 / 255],
3210      seashell: [1, 245 / 255, 238 / 255],
3211      sienna: [160 / 255, 82 / 255, 45 / 255],
3212      silver: [192 / 255, 192 / 255, 192 / 255],
3213      skyblue: [135 / 255, 206 / 255, 235 / 255],
3214      slateblue: [106 / 255, 90 / 255, 205 / 255],
3215      slategray: [112 / 255, 128 / 255, 144 / 255],
3216      slategrey: [112 / 255, 128 / 255, 144 / 255],
3217      snow: [1, 250 / 255, 250 / 255],
3218      springgreen: [0, 1, 127 / 255],
3219      steelblue: [70 / 255, 130 / 255, 180 / 255],
3220      tan: [210 / 255, 180 / 255, 140 / 255],
3221      teal: [0, 128 / 255, 128 / 255],
3222      thistle: [216 / 255, 191 / 255, 216 / 255],
3223      tomato: [1, 99 / 255, 71 / 255],
3224      turquoise: [64 / 255, 224 / 255, 208 / 255],
3225      violet: [238 / 255, 130 / 255, 238 / 255],
3226      wheat: [245 / 255, 222 / 255, 179 / 255],
3227      white: [1, 1, 1],
3228      whitesmoke: [245 / 255, 245 / 255, 245 / 255],
3229      yellow: [1, 1, 0],
3230      yellowgreen: [154 / 255, 205 / 255, 50 / 255]
3231    };
3232  
3233    // packages/theme/node_modules/colorjs.io/src/spaces/srgb.js
3234    var coordGrammar = Array(3).fill("<percentage> | <number>[0, 255]");
3235    var coordGrammarNumber = Array(3).fill("<number>[0, 255]");
3236    var srgb_default = new RGBColorSpace({
3237      id: "srgb",
3238      name: "sRGB",
3239      base: srgb_linear_default,
3240      linearGamut: srgb_linear_default,
3241      fromBase: (rgb) => {
3242        return rgb.map((val) => {
3243          let sign = val < 0 ? -1 : 1;
3244          let abs2 = val * sign;
3245          if (abs2 > 31308e-7) {
3246            return sign * (1.055 * abs2 ** (1 / 2.4) - 0.055);
3247          }
3248          return 12.92 * val;
3249        });
3250      },
3251      toBase: (rgb) => {
3252        return rgb.map((val) => {
3253          let sign = val < 0 ? -1 : 1;
3254          let abs2 = val * sign;
3255          if (abs2 <= 0.04045) {
3256            return val / 12.92;
3257          }
3258          return sign * ((abs2 + 0.055) / 1.055) ** 2.4;
3259        });
3260      },
3261      formats: {
3262        rgb: {
3263          coords: coordGrammar
3264        },
3265        rgb_number: {
3266          name: "rgb",
3267          commas: true,
3268          coords: coordGrammarNumber,
3269          alpha: false
3270        },
3271        color: {
3272          /* use defaults */
3273        },
3274        rgba: {
3275          coords: coordGrammar,
3276          commas: true,
3277          alpha: true
3278        },
3279        rgba_number: {
3280          name: "rgba",
3281          commas: true,
3282          coords: coordGrammarNumber
3283        },
3284        hex: {
3285          type: "custom",
3286          toGamut: true,
3287          test: (str) => /^#(([a-f0-9]{2}){3,4}|[a-f0-9]{3,4})$/i.test(str),
3288          parse(str) {
3289            if (str.length <= 5) {
3290              str = str.replace(/[a-f0-9]/gi, "$&$&");
3291            }
3292            let rgba = [];
3293            str.replace(/[a-f0-9]{2}/gi, (component) => {
3294              rgba.push(parseInt(component, 16) / 255);
3295            });
3296            return {
3297              spaceId: "srgb",
3298              coords: (
3299                /** @type {Coords} */
3300                rgba.slice(0, 3)
3301              ),
3302              alpha: (
3303                /** @type {number} */
3304                rgba.slice(3)[0]
3305              )
3306            };
3307          },
3308          serialize: (coords, alpha, {
3309            collapse = true,
3310            // collapse to 3-4 digit hex when possible?
3311            alpha: alphaFormat
3312          } = {}) => {
3313            if (alphaFormat !== false && alpha < 1 || alphaFormat === true) {
3314              coords.push(alpha);
3315            }
3316            coords = /** @type {[number, number, number]} */
3317            coords.map((c) => Math.round(c * 255));
3318            let collapsible = collapse && coords.every((c) => c % 17 === 0);
3319            let hex = coords.map((c) => {
3320              if (collapsible) {
3321                return (c / 17).toString(16);
3322              }
3323              return c.toString(16).padStart(2, "0");
3324            }).join("");
3325            return "#" + hex;
3326          }
3327        },
3328        keyword: {
3329          type: "custom",
3330          test: (str) => /^[a-z]+$/i.test(str),
3331          parse(str) {
3332            str = str.toLowerCase();
3333            let ret = { spaceId: "srgb", coords: null, alpha: 1 };
3334            if (str === "transparent") {
3335              ret.coords = keywords_default.black;
3336              ret.alpha = 0;
3337            } else {
3338              ret.coords = keywords_default[str];
3339            }
3340            if (ret.coords) {
3341              return ret;
3342            }
3343          }
3344        }
3345      }
3346    });
3347  
3348    // packages/theme/node_modules/colorjs.io/src/equals.js
3349    function equals(color1, color2) {
3350      color1 = getColor(color1);
3351      color2 = getColor(color2);
3352      return color1.space === color2.space && color1.alpha === color2.alpha && color1.coords.every((c, i) => c === color2.coords[i]);
3353    }
3354  
3355    // packages/theme/node_modules/colorjs.io/src/luminance.js
3356    function getLuminance(color) {
3357      return get(color, [xyz_d65_default, "y"]);
3358    }
3359  
3360    // packages/theme/node_modules/colorjs.io/src/spaces/hsl.js
3361    var hsl_default = new ColorSpace({
3362      id: "hsl",
3363      name: "HSL",
3364      coords: {
3365        h: {
3366          refRange: [0, 360],
3367          type: "angle",
3368          name: "Hue"
3369        },
3370        s: {
3371          range: [0, 100],
3372          name: "Saturation"
3373        },
3374        l: {
3375          range: [0, 100],
3376          name: "Lightness"
3377        }
3378      },
3379      base: srgb_default,
3380      rgbGamut: srgb_default,
3381      // Adapted from https://drafts.csswg.org/css-color-4/better-rgbToHsl.js
3382      fromBase: (rgb) => {
3383        let max = Math.max(...rgb);
3384        let min = Math.min(...rgb);
3385        let [r, g2, b2] = rgb;
3386        let [h, s, l] = [null, 0, (min + max) / 2];
3387        let d2 = max - min;
3388        if (d2 !== 0) {
3389          s = l === 0 || l === 1 ? 0 : (max - l) / Math.min(l, 1 - l);
3390          switch (max) {
3391            case r:
3392              h = (g2 - b2) / d2 + (g2 < b2 ? 6 : 0);
3393              break;
3394            case g2:
3395              h = (b2 - r) / d2 + 2;
3396              break;
3397            case b2:
3398              h = (r - g2) / d2 + 4;
3399          }
3400          h = h * 60;
3401        }
3402        if (s < 0) {
3403          h += 180;
3404          s = Math.abs(s);
3405        }
3406        if (h >= 360) {
3407          h -= 360;
3408        }
3409        return [h, s * 100, l * 100];
3410      },
3411      // Adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB_alternative
3412      toBase: (hsl) => {
3413        let [h, s, l] = hsl;
3414        h = h % 360;
3415        if (h < 0) {
3416          h += 360;
3417        }
3418        s /= 100;
3419        l /= 100;
3420        function f(n2) {
3421          let k = (n2 + h / 30) % 12;
3422          let a = s * Math.min(l, 1 - l);
3423          return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));
3424        }
3425        return [f(0), f(8), f(4)];
3426      },
3427      formats: {
3428        hsl: {
3429          coords: ["<number> | <angle>", "<percentage> | <number>", "<percentage> | <number>"]
3430        },
3431        hsla: {
3432          coords: ["<number> | <angle>", "<percentage> | <number>", "<percentage> | <number>"],
3433          commas: true,
3434          alpha: true
3435        }
3436      }
3437    });
3438  
3439    // node_modules/memize/dist/index.js
3440    function memize(fn, options) {
3441      var size = 0;
3442      var head;
3443      var tail;
3444      options = options || {};
3445      function memoized() {
3446        var node = head, len = arguments.length, args, i;
3447        searchCache: while (node) {
3448          if (node.args.length !== arguments.length) {
3449            node = node.next;
3450            continue;
3451          }
3452          for (i = 0; i < len; i++) {
3453            if (node.args[i] !== arguments[i]) {
3454              node = node.next;
3455              continue searchCache;
3456            }
3457          }
3458          if (node !== head) {
3459            if (node === tail) {
3460              tail = node.prev;
3461            }
3462            node.prev.next = node.next;
3463            if (node.next) {
3464              node.next.prev = node.prev;
3465            }
3466            node.next = head;
3467            node.prev = null;
3468            head.prev = node;
3469            head = node;
3470          }
3471          return node.val;
3472        }
3473        args = new Array(len);
3474        for (i = 0; i < len; i++) {
3475          args[i] = arguments[i];
3476        }
3477        node = {
3478          args,
3479          // Generate the result from original function
3480          val: fn.apply(null, args)
3481        };
3482        if (head) {
3483          head.prev = node;
3484          node.next = head;
3485        } else {
3486          tail = node;
3487        }
3488        if (size === /** @type {MemizeOptions} */
3489        options.maxSize) {
3490          tail = /** @type {MemizeCacheNode} */
3491          tail.prev;
3492          tail.next = null;
3493        } else {
3494          size++;
3495        }
3496        head = node;
3497        return node.val;
3498      }
3499      memoized.clear = function() {
3500        head = null;
3501        tail = null;
3502        size = 0;
3503      };
3504      return memoized;
3505    }
3506  
3507    // packages/theme/build-module/use-theme-provider-styles.mjs
3508    var import_element2 = __toESM(require_element(), 1);
3509  
3510    // packages/theme/build-module/prebuilt/ts/color-tokens.mjs
3511    var color_tokens_default = {
3512      transparent: [
3513        "background-interactive-brand-weak",
3514        "background-interactive-brand-weak-disabled",
3515        "background-interactive-error",
3516        "background-interactive-error-disabled",
3517        "background-interactive-error-weak",
3518        "background-interactive-error-weak-disabled",
3519        "background-interactive-neutral-weak",
3520        "background-interactive-neutral-weak-disabled"
3521      ],
3522      "primary-bgFill1": ["background-interactive-brand-strong"],
3523      "primary-bgFill2": ["background-interactive-brand-strong-active"],
3524      "primary-fgFill": [
3525        "foreground-interactive-brand-strong",
3526        "foreground-interactive-brand-strong-active"
3527      ],
3528      "primary-surface4": ["background-interactive-brand-weak-active"],
3529      "primary-fgSurface4": ["foreground-interactive-brand-active"],
3530      "primary-fgSurface3": ["foreground-interactive-brand"],
3531      "primary-stroke3": [
3532        "background-thumb-brand",
3533        "background-thumb-brand-active",
3534        "stroke-focus",
3535        "stroke-interactive-brand",
3536        "stroke-surface-brand-strong"
3537      ],
3538      "primary-stroke4": ["stroke-interactive-brand-active"],
3539      "primary-stroke1": ["stroke-surface-brand"],
3540      "primary-surface1": ["background-surface-brand"],
3541      "info-surface2": ["background-surface-info-weak"],
3542      "info-surface4": ["background-surface-info"],
3543      "info-fgSurface4": ["foreground-content-info"],
3544      "info-fgSurface3": ["foreground-content-info-weak"],
3545      "info-stroke3": ["stroke-surface-info-strong"],
3546      "info-stroke1": ["stroke-surface-info"],
3547      "success-surface2": ["background-surface-success-weak"],
3548      "success-surface4": ["background-surface-success"],
3549      "success-fgSurface4": ["foreground-content-success"],
3550      "success-fgSurface3": ["foreground-content-success-weak"],
3551      "success-stroke3": ["stroke-surface-success-strong"],
3552      "success-stroke1": ["stroke-surface-success"],
3553      "warning-surface2": ["background-surface-warning-weak"],
3554      "warning-surface4": ["background-surface-warning"],
3555      "warning-fgSurface4": ["foreground-content-warning"],
3556      "warning-fgSurface3": ["foreground-content-warning-weak"],
3557      "warning-stroke3": ["stroke-surface-warning-strong"],
3558      "warning-stroke1": ["stroke-surface-warning"],
3559      "error-bgFill1": ["background-interactive-error-strong"],
3560      "error-bgFill2": ["background-interactive-error-strong-active"],
3561      "error-fgFill": [
3562        "foreground-interactive-error-strong",
3563        "foreground-interactive-error-strong-active"
3564      ],
3565      "error-surface2": [
3566        "background-interactive-error-active",
3567        "background-surface-error-weak"
3568      ],
3569      "error-surface4": [
3570        "background-interactive-error-weak-active",
3571        "background-surface-error"
3572      ],
3573      "error-fgSurface4": [
3574        "foreground-content-error",
3575        "foreground-interactive-error-active"
3576      ],
3577      "error-fgSurface3": [
3578        "foreground-content-error-weak",
3579        "foreground-interactive-error"
3580      ],
3581      "error-stroke3": [
3582        "stroke-interactive-error",
3583        "stroke-interactive-error-strong",
3584        "stroke-surface-error-strong"
3585      ],
3586      "error-stroke4": ["stroke-interactive-error-active"],
3587      "error-stroke1": ["stroke-surface-error"],
3588      "bg-surface2": ["background-surface-neutral"],
3589      "bg-surface5": [
3590        "background-interactive-brand-strong-disabled",
3591        "background-interactive-error-strong-disabled",
3592        "background-interactive-neutral-strong-disabled"
3593      ],
3594      "bg-surface4": ["background-interactive-neutral-weak-active"],
3595      "bg-surface3": [
3596        "background-interactive-neutral",
3597        "background-interactive-neutral-active",
3598        "background-interactive-neutral-disabled",
3599        "background-surface-neutral-strong"
3600      ],
3601      "bg-fgSurface4": [
3602        "foreground-content-neutral",
3603        "foreground-interactive-neutral",
3604        "foreground-interactive-neutral-active",
3605        "foreground-interactive-neutral-weak-active"
3606      ],
3607      "bg-fgSurface3": [
3608        "foreground-content-neutral-weak",
3609        "foreground-interactive-neutral-weak"
3610      ],
3611      "bg-fgSurface2": [
3612        "foreground-interactive-brand-disabled",
3613        "foreground-interactive-brand-strong-disabled",
3614        "foreground-interactive-error-disabled",
3615        "foreground-interactive-error-strong-disabled",
3616        "foreground-interactive-neutral-disabled",
3617        "foreground-interactive-neutral-strong-disabled",
3618        "foreground-interactive-neutral-weak-disabled"
3619      ],
3620      "bg-stroke3": [
3621        "background-thumb-neutral-weak",
3622        "stroke-interactive-neutral",
3623        "stroke-surface-neutral-strong"
3624      ],
3625      "bg-stroke4": [
3626        "background-thumb-neutral-weak-active",
3627        "stroke-interactive-neutral-active",
3628        "stroke-interactive-neutral-strong"
3629      ],
3630      "bg-stroke2": [
3631        "background-thumb-brand-disabled",
3632        "background-thumb-neutral-weak-disabled",
3633        "background-track-neutral",
3634        "stroke-interactive-brand-disabled",
3635        "stroke-interactive-error-disabled",
3636        "stroke-interactive-neutral-disabled",
3637        "stroke-surface-neutral"
3638      ],
3639      "bg-stroke1": [
3640        "background-track-neutral-weak",
3641        "stroke-surface-neutral-weak"
3642      ],
3643      "bg-bgFillInverted2": ["background-interactive-neutral-strong-active"],
3644      "bg-bgFillInverted1": ["background-interactive-neutral-strong"],
3645      "bg-fgFillInverted": [
3646        "foreground-interactive-neutral-strong",
3647        "foreground-interactive-neutral-strong-active"
3648      ],
3649      "bg-surface1": ["background-surface-neutral-weak"],
3650      "caution-surface2": ["background-surface-caution-weak"],
3651      "caution-surface4": ["background-surface-caution"],
3652      "caution-fgSurface4": ["foreground-content-caution"],
3653      "caution-fgSurface3": ["foreground-content-caution-weak"],
3654      "caution-stroke3": ["stroke-surface-caution-strong"],
3655      "caution-stroke1": ["stroke-surface-caution"]
3656    };
3657  
3658    // packages/theme/build-module/color-ramps/lib/color-utils.mjs
3659    var ALLOWED_SEED_COLOR_SPACES = [srgb_default];
3660    var objectLuminanceCache = /* @__PURE__ */ new WeakMap();
3661    function getColorString(color) {
3662      ColorSpace.register(srgb_default);
3663      const rgbRounded = serialize(to(color, srgb_default));
3664      return serialize(rgbRounded, { format: "hex" });
3665    }
3666    function getContrast(colorA, colorB) {
3667      return getContrastFromLuminances(
3668        getRelativeLuminance(colorA),
3669        getRelativeLuminance(colorB)
3670      );
3671    }
3672    function getRelativeLuminance(color) {
3673      if (typeof color === "string") {
3674        ColorSpace.register(srgb_default);
3675        return Math.max(getLuminance(color), 0);
3676      }
3677      const cachedLuminance = objectLuminanceCache.get(color);
3678      if (cachedLuminance && equals(cachedLuminance.color, color)) {
3679        return cachedLuminance.luminance;
3680      }
3681      const luminance = Math.max(getLuminance(color), 0);
3682      objectLuminanceCache.set(color, {
3683        color: clone(color),
3684        luminance
3685      });
3686      return luminance;
3687    }
3688    function getContrastFromLuminances(first, second) {
3689      return first > second ? (first + 0.05) / (second + 0.05) : (second + 0.05) / (first + 0.05);
3690    }
3691    function parseSeedColor(seed) {
3692      ALLOWED_SEED_COLOR_SPACES.forEach(
3693        (space) => ColorSpace.register(space)
3694      );
3695      let parsedColor;
3696      try {
3697        parsedColor = parse(seed);
3698      } catch {
3699        throw new Error(
3700          `Unsupported seed color "$seed}": expected a fully opaque hex value, an \`rgb()\`/\`rgba()\` string, or a CSS named color.`
3701        );
3702      }
3703      const { alpha = 1, spaceId } = parsedColor;
3704      if (!ALLOWED_SEED_COLOR_SPACES.some((space) => space.id === spaceId)) {
3705        throw new Error(
3706          `Unsupported seed color "$seed}": expected a fully opaque hex value, an \`rgb()\`/\`rgba()\` string, or a CSS named color, but received a \`$spaceId}\` color.`
3707        );
3708      }
3709      if (alpha !== 1) {
3710        throw new Error(
3711          `Unsupported seed color "$seed}": expected a fully opaque color.`
3712        );
3713      }
3714      return parsedColor;
3715    }
3716    function clampToGamut(c) {
3717      return to(toGamut(c, { space: srgb_default, method: "css" }), oklch_default);
3718    }
3719  
3720    // packages/theme/build-module/color-ramps/lib/constants.mjs
3721    var WHITE = {
3722      space: oklch_default,
3723      coords: [1, 0, 0],
3724      alpha: 1
3725    };
3726    var BLACK = {
3727      space: oklch_default,
3728      coords: [0, 0, 0],
3729      alpha: 1
3730    };
3731    var UNIVERSAL_CONTRAST_TOPUP = 0.02;
3732    var WHITE_TEXT_CONTRAST_MARGIN = 3.1;
3733    var ACCENT_SCALE_BASE_LIGHTNESS_THRESHOLDS = {
3734      lighter: { min: 0.2, max: 0.4 },
3735      darker: { min: 0.75, max: 0.98 }
3736    };
3737    var CONTRAST_EPSILON = 4e-3;
3738    var MAX_BISECTION_ITERATIONS = 10;
3739    var DEFAULT_SEED_COLORS = {
3740      background: "#fcfcfc",
3741      primary: "#3858e9",
3742      info: "#0090ff",
3743      success: "#4ab866",
3744      caution: "#f0d149",
3745      warning: "#f0b849",
3746      error: "#cc1818"
3747    };
3748  
3749    // packages/theme/build-module/color-ramps/lib/utils.mjs
3750    function buildDependencyGraph(config) {
3751      const dependencies = /* @__PURE__ */ new Map();
3752      const dependents = /* @__PURE__ */ new Map();
3753      Object.keys(config).forEach((step) => {
3754        dependencies.set(step, []);
3755      });
3756      dependents.set("seed", []);
3757      Object.keys(config).forEach((step) => {
3758        dependents.set(step, []);
3759      });
3760      Object.entries(config).forEach(([stepName, stepConfig]) => {
3761        const step = stepName;
3762        const references = [
3763          stepConfig.contrast.reference,
3764          ...stepConfig.contrast.additionalReferences ?? []
3765        ];
3766        for (const reference of references) {
3767          dependencies.get(step).push(reference);
3768          dependents.get(reference).push(step);
3769        }
3770        if (stepConfig.sameAsIfPossible) {
3771          dependencies.get(step).push(stepConfig.sameAsIfPossible);
3772          dependents.get(stepConfig.sameAsIfPossible).push(step);
3773        }
3774      });
3775      return { dependencies, dependents };
3776    }
3777    function sortByDependency(config) {
3778      const { dependents } = buildDependencyGraph(config);
3779      const result = [];
3780      const visited = /* @__PURE__ */ new Set();
3781      const visiting = /* @__PURE__ */ new Set();
3782      function visit(node) {
3783        if (visiting.has(node)) {
3784          throw new Error(
3785            `Circular dependency detected involving step: $String(
3786              node
3787            )}`
3788          );
3789        }
3790        if (visited.has(node)) {
3791          return;
3792        }
3793        visiting.add(node);
3794        const nodeDependents = dependents.get(node) || [];
3795        nodeDependents.forEach((dependent) => {
3796          visit(dependent);
3797        });
3798        visiting.delete(node);
3799        visited.add(node);
3800        if (node !== "seed") {
3801          result.unshift(node);
3802        }
3803      }
3804      visit("seed");
3805      return result;
3806    }
3807    function stepsForStep(stepName, config) {
3808      const result = /* @__PURE__ */ new Set();
3809      function visit(step) {
3810        if (step === "seed" || result.has(step)) {
3811          return;
3812        }
3813        const stepConfig = config[step];
3814        if (!stepConfig) {
3815          return;
3816        }
3817        visit(stepConfig.contrast.reference);
3818        stepConfig.contrast.additionalReferences?.forEach(visit);
3819        if (stepConfig.sameAsIfPossible) {
3820          visit(stepConfig.sameAsIfPossible);
3821        }
3822        result.add(step);
3823      }
3824      visit(stepName);
3825      return Array.from(result);
3826    }
3827    function computeBetterFgColorDirection(references, preferLighter) {
3828      const referenceColors = Array.isArray(references) ? references : [references];
3829      const contrastAgainstBlack = Math.min(
3830        ...referenceColors.map(
3831          (reference) => getContrast(reference, BLACK)
3832        )
3833      );
3834      const contrastAgainstWhite = Math.min(
3835        ...referenceColors.map(
3836          (reference) => getContrast(reference, WHITE)
3837        )
3838      );
3839      return contrastAgainstBlack > contrastAgainstWhite + (preferLighter ? WHITE_TEXT_CONTRAST_MARGIN : 0) ? { better: "darker", worse: "lighter" } : { better: "lighter", worse: "darker" };
3840    }
3841    function adjustContrastTarget(target) {
3842      if (target === 1) {
3843        return 1;
3844      }
3845      return target + UNIVERSAL_CONTRAST_TOPUP;
3846    }
3847    function clampAccentScaleReferenceLightness(rawLightness, direction) {
3848      const thresholds = ACCENT_SCALE_BASE_LIGHTNESS_THRESHOLDS[direction];
3849      return Math.max(thresholds.min, Math.min(thresholds.max, rawLightness));
3850    }
3851    function solveWithBisect(calculateC, calculateValue, initLowerL, initLowerValue, initUpperL, initUpperValue) {
3852      let lowerL = initLowerL;
3853      let lowerValue = initLowerValue;
3854      let lowerReplaced = false;
3855      let upperL = initUpperL;
3856      let upperValue = initUpperValue;
3857      let upperReplaced = false;
3858      let bestC;
3859      let bestValue;
3860      let iterations = 0;
3861      while (true) {
3862        iterations++;
3863        const newL = (lowerL * upperValue - upperL * lowerValue) / (upperValue - lowerValue);
3864        bestC = calculateC(newL);
3865        bestValue = calculateValue(bestC);
3866        if (Math.abs(bestValue) <= CONTRAST_EPSILON || iterations >= MAX_BISECTION_ITERATIONS) {
3867          break;
3868        }
3869        if (bestValue <= 0) {
3870          lowerL = newL;
3871          lowerValue = bestValue;
3872          if (lowerReplaced) {
3873            upperValue /= 2;
3874          }
3875          lowerReplaced = true;
3876          upperReplaced = false;
3877        } else {
3878          upperL = newL;
3879          upperValue = bestValue;
3880          if (upperReplaced) {
3881            lowerValue /= 2;
3882          }
3883          upperReplaced = true;
3884          lowerReplaced = false;
3885        }
3886      }
3887      return bestC;
3888    }
3889  
3890    // packages/theme/build-module/color-ramps/lib/taper-chroma.mjs
3891    function createChromaTaper(seed, options = {}) {
3892      const gamut = options.gamut ?? srgb_default;
3893      const alpha = options.alpha ?? 0.65;
3894      const carry = options.carry ?? 0.5;
3895      const radiusLight = options.radiusLight ?? 0.2;
3896      const radiusDark = options.radiusDark ?? 0.2;
3897      const kLight = options.kLight ?? 0.85;
3898      const kDark = options.kDark ?? 0.85;
3899      const achromaEpsilon = options.achromaEpsilon ?? 5e-3;
3900      const cSeed = Math.max(0, get(seed, [oklch_default, "c"]));
3901      let hSeed = get(seed, [oklch_default, "h"]);
3902      const chromaIsTiny = cSeed < achromaEpsilon;
3903      const hueIsInvalid = hSeed === null || !Number.isFinite(hSeed);
3904      if (chromaIsTiny || hueIsInvalid) {
3905        if (typeof options.hueFallback === "number") {
3906          hSeed = normalizeHue(options.hueFallback);
3907        } else {
3908          return (lTarget) => ({
3909            space: oklch_default,
3910            coords: [clamp01(lTarget), 0, 0],
3911            alpha: 1
3912          });
3913        }
3914      }
3915      const lSeed = clamp01(get(seed, [oklch_default, "l"]));
3916      const cmaxSeed = getMaxChromaAtLH(lSeed, hSeed, gamut);
3917      const denom = cmaxSeed > 0 ? cmaxSeed : 1e-6;
3918      const seedRelative = clamp01(cSeed / denom);
3919      const seedCarry = Math.pow(seedRelative, clamp01(carry));
3920      return (lTarget) => {
3921        const cmaxTarget = getMaxChromaAtLH(clamp01(lTarget), hSeed, gamut);
3922        const cIntendedBase = alpha * cmaxTarget;
3923        const cWithCarry = cIntendedBase * seedCarry;
3924        const t = continuousTaper(lSeed, lTarget, {
3925          radiusLight,
3926          radiusDark,
3927          kLight,
3928          kDark
3929        });
3930        const cPlanned = cWithCarry * t;
3931        const lOut = clamp01(lTarget);
3932        return { l: lOut, c: cPlanned };
3933      };
3934    }
3935    function clamp01(x) {
3936      if (x < 0) {
3937        return 0;
3938      }
3939      if (x > 1) {
3940        return 1;
3941      }
3942      return x;
3943    }
3944    function normalizeHue(h) {
3945      let hue = h % 360;
3946      if (hue < 0) {
3947        hue += 360;
3948      }
3949      return hue;
3950    }
3951    function raisedCosine(u) {
3952      const x = clamp01(u);
3953      return 0.5 - 0.5 * Math.cos(Math.PI * x);
3954    }
3955    function continuousTaper(seedL, targetL, opts) {
3956      const d2 = targetL - seedL;
3957      if (d2 >= 0) {
3958        const u2 = opts.radiusLight > 0 ? Math.abs(d2) / opts.radiusLight : 1;
3959        const w2 = raisedCosine(u2 > 1 ? 1 : u2);
3960        return 1 - (1 - opts.kLight) * w2;
3961      }
3962      const u = opts.radiusDark > 0 ? Math.abs(d2) / opts.radiusDark : 1;
3963      const w = raisedCosine(u > 1 ? 1 : u);
3964      return 1 - (1 - opts.kDark) * w;
3965    }
3966    var MAX_CHROMA = 0.45;
3967    function getMaxChromaAtLH(l, h, gamutSpace) {
3968      const probe = {
3969        space: oklch_default,
3970        coords: [clamp01(l), MAX_CHROMA, normalizeHue(h)],
3971        alpha: 1
3972      };
3973      const clamped = toGamutCSS(probe, { space: gamutSpace });
3974      return get(clamped, [oklch_default, "c"]);
3975    }
3976  
3977    // packages/theme/build-module/color-ramps/lib/find-color-with-constraints.mjs
3978    function cdiff(c13, c23) {
3979      return Math.log(c13 / c23);
3980    }
3981    function findColorMeetingRequirements(reference, seed, target, direction, {
3982      lightnessConstraint,
3983      taperChromaOptions
3984    } = {}) {
3985      if (target <= 1) {
3986        return {
3987          color: reference,
3988          reached: true,
3989          achieved: 1
3990        };
3991      }
3992      const seedChroma = get(seed, [oklch_default, "c"]);
3993      const seedHue = get(seed, [oklch_default, "h"]);
3994      const taperChromaAtLightness = taperChromaOptions ? createChromaTaper(seed, taperChromaOptions) : void 0;
3995      function getColorForL(l) {
3996        let newL = l;
3997        let newC = seedChroma;
3998        if (taperChromaAtLightness) {
3999          const tapered = taperChromaAtLightness(newL);
4000          if ("l" in tapered && "c" in tapered) {
4001            newL = tapered.l;
4002            newC = tapered.c;
4003          } else {
4004            return tapered;
4005          }
4006        }
4007        return clampToGamut({
4008          space: oklch_default,
4009          coords: [newL, newC, seedHue],
4010          alpha: seed.alpha
4011        });
4012      }
4013      const mostContrastingL = direction === "lighter" ? 1 : 0;
4014      const mostContrastingColor = direction === "lighter" ? WHITE : BLACK;
4015      const highestContrast = getContrast(reference, mostContrastingColor);
4016      if (lightnessConstraint) {
4017        const colorWithExactL = getColorForL(lightnessConstraint.value);
4018        const exactLContrast = getContrast(reference, colorWithExactL);
4019        const exactLContrastMeetsTarget = cdiff(exactLContrast, target) >= -CONTRAST_EPSILON;
4020        if (exactLContrastMeetsTarget || lightnessConstraint.type === "force") {
4021          return {
4022            color: colorWithExactL,
4023            reached: exactLContrastMeetsTarget,
4024            achieved: exactLContrast,
4025            deficit: exactLContrastMeetsTarget ? cdiff(exactLContrast, highestContrast) : cdiff(target, exactLContrast)
4026          };
4027        }
4028      }
4029      if (cdiff(highestContrast, target) <= CONTRAST_EPSILON) {
4030        return {
4031          color: mostContrastingColor,
4032          reached: cdiff(highestContrast, target) >= -CONTRAST_EPSILON,
4033          achieved: highestContrast,
4034          deficit: cdiff(target, highestContrast)
4035        };
4036      }
4037      const lowerL = get(reference, [oklch_default, "l"]);
4038      const lowerContrast = cdiff(1, target);
4039      const upperL = mostContrastingL;
4040      const upperContrast = cdiff(highestContrast, target);
4041      const bestColor = solveWithBisect(
4042        getColorForL,
4043        (c) => cdiff(getContrast(reference, c), target),
4044        lowerL,
4045        lowerContrast,
4046        upperL,
4047        upperContrast
4048      );
4049      return {
4050        color: bestColor,
4051        reached: true,
4052        achieved: target,
4053        // Negative number that specifies how much room we have.
4054        deficit: cdiff(target, highestContrast)
4055      };
4056    }
4057  
4058    // packages/theme/build-module/color-ramps/lib/index.mjs
4059    function calculateRamp({
4060      seed,
4061      sortedSteps,
4062      config,
4063      mainDir,
4064      oppDir,
4065      pinLightness
4066    }) {
4067      const rampResults = {};
4068      let warnings;
4069      let maxDeficit = -Infinity;
4070      let maxDeficitDirection = "lighter";
4071      let maxDeficitStep;
4072      const calculatedColors = /* @__PURE__ */ new Map();
4073      calculatedColors.set("seed", seed);
4074      for (const stepName of sortedSteps) {
4075        let computeDirection2 = function(colors, followDirection) {
4076          if (followDirection === "main") {
4077            return mainDir;
4078          }
4079          if (followDirection === "opposite") {
4080            return oppDir;
4081          }
4082          if (followDirection === "best") {
4083            return computeBetterFgColorDirection(
4084              colors,
4085              contrast.preferLighter
4086            ).better;
4087          }
4088          return followDirection;
4089        };
4090        var computeDirection = computeDirection2;
4091        const {
4092          contrast,
4093          lightness: stepLightnessConstraint,
4094          taperChromaOptions,
4095          sameAsIfPossible
4096        } = config[stepName];
4097        const referenceNames = [
4098          contrast.reference,
4099          ...contrast.additionalReferences ?? []
4100        ];
4101        const referenceColors = referenceNames.map((referenceName) => {
4102          const referenceColor2 = calculatedColors.get(referenceName);
4103          if (!referenceColor2) {
4104            throw new Error(
4105              `Reference color for step $stepName} not found: $referenceName}`
4106            );
4107          }
4108          return referenceColor2;
4109        });
4110        if (sameAsIfPossible) {
4111          const candidateColor = calculatedColors.get(sameAsIfPossible);
4112          if (!candidateColor) {
4113            throw new Error(
4114              `Same-as color for step $stepName} not found: $sameAsIfPossible}`
4115            );
4116          }
4117          const adjustedTarget2 = adjustContrastTarget(contrast.target);
4118          const candidateMeetsTarget = referenceColors.every(
4119            (referenceColor2) => getContrast(referenceColor2, candidateColor) >= adjustedTarget2
4120          );
4121          if (candidateMeetsTarget) {
4122            calculatedColors.set(stepName, candidateColor);
4123            rampResults[stepName] = getColorString(candidateColor);
4124            continue;
4125          }
4126        }
4127        const computedDir = computeDirection2(
4128          referenceColors,
4129          contrast.followDirection
4130        );
4131        const endpoint = computedDir === "lighter" ? WHITE : BLACK;
4132        const referenceColor = referenceColors.reduce(
4133          (tightest, current) => getContrast(current, endpoint) < getContrast(tightest, endpoint) ? current : tightest
4134        );
4135        const adjustedTarget = adjustContrastTarget(contrast.target);
4136        let lightnessConstraint;
4137        if (pinLightness?.stepName === stepName) {
4138          lightnessConstraint = {
4139            value: pinLightness.value,
4140            type: "force"
4141          };
4142        } else if (stepLightnessConstraint) {
4143          lightnessConstraint = {
4144            value: stepLightnessConstraint(computedDir),
4145            type: "onlyIfSucceeds"
4146          };
4147        }
4148        const searchResults = findColorMeetingRequirements(
4149          referenceColor,
4150          seed,
4151          adjustedTarget,
4152          computedDir,
4153          {
4154            lightnessConstraint,
4155            taperChromaOptions
4156          }
4157        );
4158        if (!contrast.ignoreWhenAdjustingSeed && searchResults.deficit && searchResults.deficit > maxDeficit) {
4159          maxDeficit = searchResults.deficit;
4160          maxDeficitDirection = computedDir;
4161          maxDeficitStep = stepName;
4162        }
4163        calculatedColors.set(stepName, searchResults.color);
4164        rampResults[stepName] = getColorString(searchResults.color);
4165        if (!searchResults.reached && !contrast.ignoreWhenAdjustingSeed) {
4166          warnings ??= [];
4167          warnings.push(stepName);
4168        }
4169      }
4170      return {
4171        rampResults,
4172        warnings,
4173        maxDeficit,
4174        maxDeficitDirection,
4175        maxDeficitStep
4176      };
4177    }
4178    function buildRamp(seedArg, config, {
4179      mainDirection,
4180      pinLightness,
4181      rescaleToFitContrastTargets = true
4182    } = {}) {
4183      const parsedSeed = parseSeedColor(seedArg);
4184      let seed;
4185      try {
4186        seed = clampToGamut(parsedSeed);
4187      } catch (error) {
4188        throw new Error(
4189          `Invalid seed color "$seedArg}": $error instanceof Error ? error.message : "Unknown error"}`
4190        );
4191      }
4192      let mainDir = "lighter";
4193      let oppDir = "darker";
4194      if (mainDirection) {
4195        mainDir = mainDirection;
4196        oppDir = mainDirection === "darker" ? "lighter" : "darker";
4197      } else {
4198        const { better, worse } = computeBetterFgColorDirection(seed);
4199        mainDir = better;
4200        oppDir = worse;
4201      }
4202      const sortedSteps = sortByDependency(config);
4203      const {
4204        rampResults,
4205        warnings,
4206        maxDeficit,
4207        maxDeficitDirection,
4208        maxDeficitStep
4209      } = calculateRamp({
4210        seed,
4211        sortedSteps,
4212        config,
4213        mainDir,
4214        oppDir,
4215        pinLightness
4216      });
4217      let bestRamp = rampResults;
4218      let bestWarnings = warnings;
4219      if (maxDeficit > CONTRAST_EPSILON && rescaleToFitContrastTargets) {
4220        let getSeedForL2 = function(l) {
4221          return clampToGamut(set(clone(seed), [oklch_default, "l"], l));
4222        }, getDeficitForSeed2 = function(s) {
4223          const iterationResults = calculateRamp({
4224            seed: s,
4225            sortedSteps: iterSteps,
4226            config,
4227            mainDir,
4228            oppDir,
4229            pinLightness
4230          });
4231          return iterationResults.maxDeficitDirection === maxDeficitDirection ? iterationResults.maxDeficit : -maxDeficit;
4232        };
4233        var getSeedForL = getSeedForL2, getDeficitForSeed = getDeficitForSeed2;
4234        const iterSteps = stepsForStep(maxDeficitStep, config);
4235        const lowerSeedL = maxDeficitDirection === "lighter" ? 0 : 1;
4236        const lowerDeficit = -maxDeficit;
4237        const upperSeedL = get(seed, [oklch_default, "l"]);
4238        const upperDeficit = maxDeficit;
4239        const bestSeed = solveWithBisect(
4240          getSeedForL2,
4241          getDeficitForSeed2,
4242          lowerSeedL,
4243          lowerDeficit,
4244          upperSeedL,
4245          upperDeficit
4246        );
4247        const finalResult = calculateRamp({
4248          seed: bestSeed,
4249          sortedSteps,
4250          config,
4251          mainDir,
4252          oppDir,
4253          pinLightness
4254        });
4255        bestRamp = finalResult.rampResults;
4256        bestWarnings = finalResult.warnings;
4257      }
4258      if (mainDir === "darker") {
4259        const tmpSurface1 = bestRamp.surface1;
4260        bestRamp.surface1 = bestRamp.surface3;
4261        bestRamp.surface3 = tmpSurface1;
4262      }
4263      return {
4264        ramp: bestRamp,
4265        warnings: bestWarnings,
4266        direction: mainDir
4267      };
4268    }
4269  
4270    // packages/theme/build-module/color-ramps/lib/ramp-configs.mjs
4271    var lightnessConstraintForegroundHighContrast = (direction) => direction === "lighter" ? 0.9551 : 0.235;
4272    var lightnessConstraintForegroundMediumContrast = (direction) => direction === "lighter" ? 0.77 : 0.56;
4273    var lightnessConstraintBgFill = (direction) => direction === "lighter" ? 0.67 : 0.45;
4274    var BG_SURFACE_TAPER_CHROMA = {
4275      alpha: 0.7
4276    };
4277    var FG_TAPER_CHROMA = {
4278      alpha: 0.6,
4279      kLight: 0.2,
4280      kDark: 0.2
4281    };
4282    var STROKE_TAPER_CHROMA = {
4283      alpha: 0.6,
4284      radiusDark: 0.01,
4285      radiusLight: 0.01,
4286      kLight: 0.8,
4287      kDark: 0.8
4288    };
4289    var ACCENT_SURFACE_TAPER_CHROMA = {
4290      alpha: 0.75,
4291      radiusDark: 0.01,
4292      radiusLight: 0.01
4293    };
4294    var fgSurface4Config = {
4295      contrast: {
4296        reference: "surface3",
4297        followDirection: "main",
4298        target: 7,
4299        preferLighter: true
4300      },
4301      lightness: lightnessConstraintForegroundHighContrast,
4302      taperChromaOptions: FG_TAPER_CHROMA
4303    };
4304    var BG_RAMP_CONFIG = {
4305      // Surface
4306      surface1: {
4307        contrast: {
4308          reference: "surface2",
4309          followDirection: "opposite",
4310          target: 1.06,
4311          ignoreWhenAdjustingSeed: true
4312        },
4313        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4314      },
4315      surface2: {
4316        contrast: {
4317          reference: "seed",
4318          followDirection: "main",
4319          target: 1
4320        }
4321      },
4322      surface3: {
4323        contrast: {
4324          reference: "surface2",
4325          followDirection: "main",
4326          target: 1.06
4327        },
4328        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4329      },
4330      surface4: {
4331        contrast: {
4332          reference: "surface2",
4333          followDirection: "main",
4334          target: 1.12
4335        },
4336        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4337      },
4338      surface5: {
4339        contrast: {
4340          reference: "surface2",
4341          followDirection: "main",
4342          target: 1.2
4343        },
4344        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4345      },
4346      surface6: {
4347        contrast: {
4348          reference: "surface2",
4349          followDirection: "main",
4350          target: 1.4
4351        },
4352        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4353      },
4354      // Bg fill
4355      bgFill1: {
4356        contrast: {
4357          reference: "surface2",
4358          followDirection: "main",
4359          target: 4
4360        },
4361        lightness: lightnessConstraintBgFill
4362      },
4363      bgFill2: {
4364        contrast: {
4365          reference: "bgFill1",
4366          followDirection: "main",
4367          target: 1.2
4368        }
4369      },
4370      bgFillInverted1: {
4371        contrast: {
4372          reference: "bgFillInverted2",
4373          followDirection: "opposite",
4374          target: 1.2
4375        }
4376      },
4377      bgFillInverted2: fgSurface4Config,
4378      bgFillDark: {
4379        contrast: {
4380          reference: "surface3",
4381          followDirection: "darker",
4382          // This is what causes the token to be always dark
4383          target: 7,
4384          ignoreWhenAdjustingSeed: true
4385        },
4386        lightness: lightnessConstraintForegroundHighContrast,
4387        taperChromaOptions: FG_TAPER_CHROMA
4388      },
4389      // Stroke
4390      stroke1: {
4391        contrast: {
4392          reference: "stroke3",
4393          followDirection: "opposite",
4394          target: 2.9
4395        },
4396        taperChromaOptions: STROKE_TAPER_CHROMA
4397      },
4398      stroke2: {
4399        contrast: {
4400          reference: "stroke3",
4401          followDirection: "opposite",
4402          target: 2.4
4403        },
4404        taperChromaOptions: STROKE_TAPER_CHROMA
4405      },
4406      stroke3: {
4407        contrast: {
4408          reference: "surface3",
4409          followDirection: "main",
4410          target: 3
4411        },
4412        taperChromaOptions: STROKE_TAPER_CHROMA
4413      },
4414      stroke4: {
4415        contrast: {
4416          reference: "stroke3",
4417          followDirection: "main",
4418          target: 1.5
4419        },
4420        taperChromaOptions: STROKE_TAPER_CHROMA
4421      },
4422      // fgSurface
4423      fgSurface1: {
4424        contrast: {
4425          reference: "surface3",
4426          followDirection: "main",
4427          target: 2,
4428          preferLighter: true
4429        },
4430        taperChromaOptions: FG_TAPER_CHROMA
4431      },
4432      fgSurface2: {
4433        contrast: {
4434          reference: "surface3",
4435          followDirection: "main",
4436          target: 3,
4437          preferLighter: true
4438        },
4439        taperChromaOptions: FG_TAPER_CHROMA
4440      },
4441      fgSurface3: {
4442        contrast: {
4443          reference: "surface3",
4444          followDirection: "main",
4445          target: 4.5,
4446          preferLighter: true
4447        },
4448        lightness: lightnessConstraintForegroundMediumContrast,
4449        taperChromaOptions: FG_TAPER_CHROMA
4450      },
4451      fgSurface4: fgSurface4Config,
4452      // fgFill
4453      fgFill: {
4454        contrast: {
4455          reference: "bgFill1",
4456          additionalReferences: ["bgFill2"],
4457          followDirection: "best",
4458          // Preserve the 4.5:1 WCAG floor after 8-bit sRGB serialization.
4459          target: 4.55
4460        },
4461        lightness: lightnessConstraintForegroundHighContrast,
4462        taperChromaOptions: FG_TAPER_CHROMA
4463      },
4464      fgFillInverted: {
4465        contrast: {
4466          reference: "bgFillInverted1",
4467          followDirection: "best",
4468          target: 4.5,
4469          preferLighter: true
4470        },
4471        lightness: lightnessConstraintForegroundHighContrast,
4472        taperChromaOptions: FG_TAPER_CHROMA
4473      },
4474      fgFillDark: {
4475        contrast: {
4476          reference: "bgFillDark",
4477          followDirection: "best",
4478          target: 4.5,
4479          preferLighter: true
4480        },
4481        lightness: lightnessConstraintForegroundHighContrast,
4482        taperChromaOptions: FG_TAPER_CHROMA
4483      }
4484    };
4485    var ACCENT_RAMP_CONFIG = {
4486      ...BG_RAMP_CONFIG,
4487      surface1: {
4488        ...BG_RAMP_CONFIG.surface1,
4489        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4490      },
4491      surface2: {
4492        contrast: {
4493          reference: "bgFill1",
4494          followDirection: "opposite",
4495          target: BG_RAMP_CONFIG.bgFill1.contrast.target,
4496          ignoreWhenAdjustingSeed: true
4497        },
4498        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4499      },
4500      surface3: {
4501        ...BG_RAMP_CONFIG.surface3,
4502        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4503      },
4504      surface4: {
4505        ...BG_RAMP_CONFIG.surface4,
4506        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4507      },
4508      surface5: {
4509        ...BG_RAMP_CONFIG.surface5,
4510        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4511      },
4512      surface6: {
4513        ...BG_RAMP_CONFIG.surface6,
4514        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4515      },
4516      bgFill1: {
4517        contrast: {
4518          reference: "seed",
4519          followDirection: "main",
4520          target: 1
4521        }
4522      },
4523      stroke1: {
4524        ...BG_RAMP_CONFIG.stroke1
4525      },
4526      stroke2: {
4527        ...BG_RAMP_CONFIG.stroke2
4528      },
4529      stroke3: {
4530        ...BG_RAMP_CONFIG.stroke3,
4531        sameAsIfPossible: "fgSurface3",
4532        taperChromaOptions: void 0
4533      },
4534      stroke4: {
4535        ...BG_RAMP_CONFIG.stroke4,
4536        taperChromaOptions: void 0
4537      },
4538      // fgSurface: do not de-saturate
4539      fgSurface1: {
4540        ...BG_RAMP_CONFIG.fgSurface1,
4541        taperChromaOptions: void 0
4542      },
4543      fgSurface2: {
4544        ...BG_RAMP_CONFIG.fgSurface2,
4545        taperChromaOptions: void 0
4546      },
4547      fgSurface3: {
4548        ...BG_RAMP_CONFIG.fgSurface3,
4549        taperChromaOptions: void 0,
4550        sameAsIfPossible: "bgFill1"
4551      },
4552      fgSurface4: {
4553        ...BG_RAMP_CONFIG.fgSurface4,
4554        taperChromaOptions: void 0
4555      }
4556    };
4557  
4558    // packages/theme/build-module/color-ramps/index.mjs
4559    function buildBgRamp(seed) {
4560      if (typeof seed !== "string" || seed.trim() === "") {
4561        throw new Error("Seed color must be a non-empty string");
4562      }
4563      return buildRamp(seed, BG_RAMP_CONFIG);
4564    }
4565    var STEP_TO_PIN = "surface2";
4566    function getBgRampInfo(ramp) {
4567      return {
4568        mainDirection: ramp.direction,
4569        pinLightness: {
4570          stepName: STEP_TO_PIN,
4571          value: clampAccentScaleReferenceLightness(
4572            get(ramp.ramp[STEP_TO_PIN], [oklch_default, "l"]),
4573            ramp.direction
4574          )
4575        }
4576      };
4577    }
4578    function buildAccentRamp(seed, bgRamp) {
4579      if (typeof seed !== "string" || seed.trim() === "") {
4580        throw new Error("Seed color must be a non-empty string");
4581      }
4582      const bgRampInfo = bgRamp ? getBgRampInfo(bgRamp) : void 0;
4583      return buildRamp(seed, ACCENT_RAMP_CONFIG, bgRampInfo);
4584    }
4585  
4586    // packages/theme/build-module/semantic-color-contrast-pairs.mjs
4587    var MINIMUM_TEXT_CONTRAST = 4.5;
4588    var SEMANTIC_COLOR_CONTRAST_PAIRS = [
4589      {
4590        background: "background.interactive.neutral",
4591        foreground: "foreground.interactive.neutral"
4592      },
4593      {
4594        background: "background.interactive.neutral",
4595        foreground: "foreground.interactive.neutral-weak"
4596      },
4597      {
4598        background: "background.interactive.neutral-active",
4599        foreground: "foreground.interactive.neutral"
4600      },
4601      {
4602        background: "background.interactive.neutral-active",
4603        foreground: "foreground.interactive.neutral-weak"
4604      },
4605      {
4606        background: "background.interactive.neutral-weak-active",
4607        foreground: "foreground.interactive.neutral-active"
4608      },
4609      {
4610        background: "background.surface.neutral",
4611        foreground: "foreground.content.neutral"
4612      },
4613      {
4614        background: "background.surface.neutral-strong",
4615        foreground: "foreground.content.neutral"
4616      },
4617      {
4618        background: "background.surface.neutral-weak",
4619        foreground: "foreground.content.neutral"
4620      },
4621      {
4622        background: "background.surface.neutral",
4623        foreground: "foreground.content.neutral-weak"
4624      },
4625      {
4626        background: "background.surface.info",
4627        foreground: "foreground.content.info"
4628      },
4629      {
4630        background: "background.surface.info-weak",
4631        foreground: "foreground.content.info-weak"
4632      },
4633      {
4634        background: "background.surface.success",
4635        foreground: "foreground.content.success"
4636      },
4637      {
4638        background: "background.surface.success-weak",
4639        foreground: "foreground.content.success-weak"
4640      },
4641      {
4642        background: "background.surface.warning",
4643        foreground: "foreground.content.warning"
4644      },
4645      {
4646        background: "background.surface.warning-weak",
4647        foreground: "foreground.content.warning-weak"
4648      },
4649      {
4650        background: "background.surface.caution",
4651        foreground: "foreground.content.caution"
4652      },
4653      {
4654        background: "background.surface.caution-weak",
4655        foreground: "foreground.content.caution-weak"
4656      },
4657      {
4658        background: "background.surface.error",
4659        foreground: "foreground.content.error"
4660      },
4661      {
4662        background: "background.surface.error-weak",
4663        foreground: "foreground.content.error-weak"
4664      },
4665      {
4666        background: "background.interactive.brand-strong",
4667        foreground: "foreground.interactive.brand-strong"
4668      },
4669      {
4670        background: "background.interactive.brand-strong-active",
4671        foreground: "foreground.interactive.brand-strong-active"
4672      },
4673      {
4674        background: "background.interactive.error-strong",
4675        foreground: "foreground.interactive.error-strong"
4676      },
4677      {
4678        background: "background.interactive.error-strong-active",
4679        foreground: "foreground.interactive.error-strong-active"
4680      },
4681      {
4682        background: "background.interactive.neutral-strong",
4683        foreground: "foreground.interactive.neutral-strong"
4684      },
4685      {
4686        background: "background.interactive.neutral-strong-active",
4687        foreground: "foreground.interactive.neutral-strong-active"
4688      }
4689    ];
4690    function getSemanticColorCustomProperty(token) {
4691      return `--wpds-color-$token.replaceAll(".", "-")}`;
4692    }
4693  
4694    // packages/theme/build-module/theme-provider-color-warnings.mjs
4695    function collectThemeProviderColorWarnings(ramps, colorValues) {
4696      const warnings = [];
4697      for (const [rampName, result] of ramps) {
4698        for (const step of result.warnings ?? []) {
4699          warnings.push({
4700            type: "ramp",
4701            ramp: rampName,
4702            step
4703          });
4704        }
4705      }
4706      for (const {
4707        background: backgroundToken,
4708        foreground: foregroundToken
4709      } of SEMANTIC_COLOR_CONTRAST_PAIRS) {
4710        const backgroundColor = colorValues.get(
4711          getSemanticColorCustomProperty(backgroundToken)
4712        );
4713        const foregroundColor = colorValues.get(
4714          getSemanticColorCustomProperty(foregroundToken)
4715        );
4716        if (backgroundColor === void 0 || foregroundColor === void 0) {
4717          continue;
4718        }
4719        const achievedContrast = getContrast(
4720          backgroundColor,
4721          foregroundColor
4722        );
4723        if (achievedContrast < MINIMUM_TEXT_CONTRAST) {
4724          warnings.push({
4725            type: "contrast",
4726            backgroundToken,
4727            backgroundColor,
4728            foregroundToken,
4729            foregroundColor,
4730            requiredContrast: MINIMUM_TEXT_CONTRAST,
4731            achievedContrast
4732          });
4733        }
4734      }
4735      return warnings;
4736    }
4737  
4738    // packages/theme/build-module/use-theme-provider-styles.mjs
4739    var getCachedBgRamp = memize(buildBgRamp, { maxSize: 10 });
4740    var getCachedAccentRamp = memize(buildAccentRamp, { maxSize: 10 });
4741    var legacyWpComponentsOverridesCSS = [
4742      ["--wp-components-color-accent", "var(--wp-admin-theme-color)"],
4743      [
4744        "--wp-components-color-accent-darker-10",
4745        "var(--wp-admin-theme-color-darker-10)"
4746      ],
4747      [
4748        "--wp-components-color-accent-darker-20",
4749        "var(--wp-admin-theme-color-darker-20)"
4750      ],
4751      [
4752        "--wp-components-color-accent-inverted",
4753        "var(--wpds-color-foreground-interactive-brand-strong, #fff)"
4754      ],
4755      [
4756        "--wp-components-color-background",
4757        "var(--wpds-color-background-surface-neutral-strong, #fff)"
4758      ],
4759      [
4760        "--wp-components-color-foreground",
4761        "var(--wpds-color-foreground-content-neutral, #1e1e1e)"
4762      ],
4763      [
4764        "--wp-components-color-foreground-inverted",
4765        "var(--wpds-color-background-surface-neutral, #fcfcfc)"
4766      ],
4767      [
4768        "--wp-components-color-gray-100",
4769        "var(--wpds-color-background-surface-neutral, #fcfcfc)"
4770      ],
4771      [
4772        "--wp-components-color-gray-200",
4773        "var(--wpds-color-stroke-surface-neutral, #dbdbdb)"
4774      ],
4775      [
4776        "--wp-components-color-gray-300",
4777        "var(--wpds-color-stroke-surface-neutral, #dbdbdb)"
4778      ],
4779      [
4780        "--wp-components-color-gray-400",
4781        "var(--wpds-color-stroke-interactive-neutral, #8d8d8d)"
4782      ],
4783      [
4784        "--wp-components-color-gray-600",
4785        "var(--wpds-color-stroke-interactive-neutral, #8d8d8d)"
4786      ],
4787      [
4788        "--wp-components-color-gray-700",
4789        "var(--wpds-color-foreground-content-neutral-weak, #707070)"
4790      ],
4791      [
4792        "--wp-components-color-gray-800",
4793        "var(--wpds-color-foreground-content-neutral, #1e1e1e)"
4794      ]
4795    ];
4796    function customRgbFormat(color) {
4797      const rgb = to(color, srgb_default);
4798      return rgb.coords.map((n2) => Math.round((n2 ?? 0) * 255)).join(", ");
4799    }
4800    function legacyWpAdminThemeOverridesCSS(accent) {
4801      ColorSpace.register(srgb_default);
4802      const parsedAccent = to(accent, hsl_default);
4803      const parsedL = parsedAccent.coords[2] ?? 0;
4804      const darker10 = set(
4805        clone(parsedAccent),
4806        [hsl_default, "l"],
4807        Math.max(0, parsedL - 5)
4808        // L reduced by 5%
4809      );
4810      const darker20 = set(
4811        clone(parsedAccent),
4812        [hsl_default, "l"],
4813        Math.max(0, parsedL - 10)
4814        // L reduced by 10%
4815      );
4816      return [
4817        ["--wp-admin-theme-color", getColorString(parsedAccent)],
4818        ["--wp-admin-theme-color--rgb", customRgbFormat(parsedAccent)],
4819        ["--wp-admin-theme-color-darker-10", getColorString(darker10)],
4820        [
4821          "--wp-admin-theme-color-darker-10--rgb",
4822          customRgbFormat(darker10)
4823        ],
4824        ["--wp-admin-theme-color-darker-20", getColorString(darker20)],
4825        [
4826          "--wp-admin-theme-color-darker-20--rgb",
4827          customRgbFormat(darker20)
4828        ]
4829      ];
4830    }
4831    function colorTokensCSS(computedColorRamps) {
4832      const entries = [];
4833      for (const [rampName, { ramp }] of computedColorRamps) {
4834        for (const [tokenName, tokenValue] of Object.entries(ramp)) {
4835          const primitiveRampName = rampName === "background" ? "bg" : rampName;
4836          const key = `$primitiveRampName}-$tokenName}`;
4837          const aliasedBy = color_tokens_default[key] ?? [];
4838          for (const aliasedId of aliasedBy) {
4839            entries.push([`--wpds-color-$aliasedId}`, tokenValue]);
4840          }
4841        }
4842      }
4843      return entries;
4844    }
4845    function generateStyles({
4846      primary,
4847      colorEntries
4848    }) {
4849      return Object.fromEntries(
4850        [
4851          // Semantic color tokens
4852          colorEntries,
4853          // Legacy overrides
4854          legacyWpAdminThemeOverridesCSS(primary),
4855          legacyWpComponentsOverridesCSS
4856        ].flat()
4857      );
4858    }
4859    function generateThemeProviderColors(primary, background) {
4860      const seeds = {
4861        ...DEFAULT_SEED_COLORS,
4862        background,
4863        primary
4864      };
4865      const computedColorRamps = /* @__PURE__ */ new Map();
4866      const bgRamp = getCachedBgRamp(seeds.background);
4867      for (const [rawRampName, seed] of Object.entries(seeds)) {
4868        const rampName = rawRampName;
4869        computedColorRamps.set(
4870          rampName,
4871          rampName === "background" ? bgRamp : getCachedAccentRamp(seed, bgRamp)
4872        );
4873      }
4874      const colorEntries = colorTokensCSS(computedColorRamps);
4875      return {
4876        styles: generateStyles({
4877          primary: seeds.primary,
4878          colorEntries
4879        }),
4880        warnings: collectThemeProviderColorWarnings(
4881          computedColorRamps,
4882          new Map(colorEntries)
4883        )
4884      };
4885    }
4886    function useThemeProviderStyles({
4887      color = {},
4888      cursor,
4889      cornerRadius
4890    } = {}) {
4891      const { resolvedSettings: inheritedSettings } = (0, import_element2.useContext)(ThemeContext);
4892      const hasColor = color.primary !== void 0 || color.background !== void 0 || inheritedSettings.color?.primary !== void 0 || inheritedSettings.color?.background !== void 0;
4893      const primary = hasColor ? color.primary ?? inheritedSettings.color?.primary ?? DEFAULT_SEED_COLORS.primary : void 0;
4894      const background = hasColor ? color.background ?? inheritedSettings.color?.background ?? DEFAULT_SEED_COLORS.background : void 0;
4895      const cursorControl = cursor?.control ?? inheritedSettings.cursor?.control;
4896      const cornerRadiusPreset = cornerRadius ?? inheritedSettings.cornerRadius ?? "subtle";
4897      const resolvedSettings = (0, import_element2.useMemo)(
4898        () => ({
4899          color: {
4900            primary,
4901            background
4902          },
4903          cursor: cursorControl ? { control: cursorControl } : void 0,
4904          cornerRadius: cornerRadiusPreset
4905        }),
4906        [primary, background, cursorControl, cornerRadiusPreset]
4907      );
4908      const generatedColors = (0, import_element2.useMemo)(() => {
4909        if (primary === void 0 || background === void 0) {
4910          return {
4911            styles: {},
4912            warnings: void 0
4913          };
4914        }
4915        return generateThemeProviderColors(primary, background);
4916      }, [primary, background]);
4917      const themeProviderStyles = (0, import_element2.useMemo)(
4918        () => ({
4919          ...generatedColors.styles,
4920          ...cursorControl && {
4921            "--wpds-cursor-control": cursorControl
4922          }
4923        }),
4924        [generatedColors.styles, cursorControl]
4925      );
4926      return {
4927        resolvedSettings,
4928        themeProviderStyles,
4929        colorWarnings: generatedColors.warnings
4930      };
4931    }
4932  
4933    // packages/theme/build-module/theme-provider.mjs
4934    var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
4935    var STYLE_HASH_ATTRIBUTE = "data-wp-hash";
4936    function getRuntime() {
4937      const globalScope = globalThis;
4938      if (globalScope.__wpStyleRuntime) {
4939        return globalScope.__wpStyleRuntime;
4940      }
4941      globalScope.__wpStyleRuntime = {
4942        documents: /* @__PURE__ */ new Map(),
4943        styles: /* @__PURE__ */ new Map(),
4944        injectedStyles: /* @__PURE__ */ new WeakMap()
4945      };
4946      if (typeof document !== "undefined") {
4947        registerDocument(document);
4948      }
4949      return globalScope.__wpStyleRuntime;
4950    }
4951    function documentContainsStyleHash(targetDocument, hash) {
4952      if (!targetDocument.head) {
4953        return false;
4954      }
4955      for (const style of targetDocument.head.querySelectorAll(
4956        `style[$STYLE_HASH_ATTRIBUTE}]`
4957      )) {
4958        if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) {
4959          return true;
4960        }
4961      }
4962      return false;
4963    }
4964    function injectStyle(targetDocument, hash, css) {
4965      if (!targetDocument.head) {
4966        return;
4967      }
4968      const runtime = getRuntime();
4969      let injectedStyles = runtime.injectedStyles.get(targetDocument);
4970      if (!injectedStyles) {
4971        injectedStyles = /* @__PURE__ */ new Set();
4972        runtime.injectedStyles.set(targetDocument, injectedStyles);
4973      }
4974      if (injectedStyles.has(hash)) {
4975        return;
4976      }
4977      if (documentContainsStyleHash(targetDocument, hash)) {
4978        injectedStyles.add(hash);
4979        return;
4980      }
4981      const style = targetDocument.createElement("style");
4982      style.setAttribute(STYLE_HASH_ATTRIBUTE, hash);
4983      style.appendChild(targetDocument.createTextNode(css));
4984      targetDocument.head.appendChild(style);
4985      injectedStyles.add(hash);
4986    }
4987    function registerDocument(targetDocument) {
4988      const runtime = getRuntime();
4989      runtime.documents.set(
4990        targetDocument,
4991        (runtime.documents.get(targetDocument) ?? 0) + 1
4992      );
4993      for (const [hash, css] of runtime.styles) {
4994        injectStyle(targetDocument, hash, css);
4995      }
4996      return () => {
4997        const count = runtime.documents.get(targetDocument);
4998        if (count === void 0) {
4999          return;
5000        }
5001        if (count <= 1) {
5002          runtime.documents.delete(targetDocument);
5003          return;
5004        }
5005        runtime.documents.set(targetDocument, count - 1);
5006      };
5007    }
5008    function registerStyle(hash, css) {
5009      const runtime = getRuntime();
5010      runtime.styles.set(hash, css);
5011      for (const targetDocument of runtime.documents.keys()) {
5012        injectStyle(targetDocument, hash, css);
5013      }
5014    }
5015    if (typeof process === "undefined" || true) {
5016      registerStyle("8d074a190c", "._0ebd6d9bf8b95794__wrapper{display:contents}");
5017    }
5018    var style_default = { "wrapper": "_0ebd6d9bf8b95794__wrapper" };
5019    var rootProviderCountByDocument = /* @__PURE__ */ new WeakMap();
5020    var ThemeProvider = ({
5021      children,
5022      color = {},
5023      cursor,
5024      cornerRadius,
5025      isRoot = false,
5026      onColorWarnings
5027    }) => {
5028      const { themeProviderStyles, resolvedSettings, colorWarnings } = useThemeProviderStyles({
5029        color,
5030        cursor,
5031        cornerRadius
5032      });
5033      const cornerRadiusPreset = resolvedSettings.cornerRadius ?? "subtle";
5034      const onColorWarningsEvent = (0, import_compose.useEvent)(onColorWarnings);
5035      const contextValue = (0, import_element3.useMemo)(
5036        () => ({
5037          resolvedSettings
5038        }),
5039        [resolvedSettings]
5040      );
5041      const wrapperRef = (0, import_element3.useRef)(null);
5042      (0, import_element3.useEffect)(() => {
5043        if (colorWarnings !== void 0) {
5044          onColorWarningsEvent(colorWarnings);
5045        }
5046      }, [colorWarnings, onColorWarningsEvent]);
5047      (0, import_compose.useIsomorphicLayoutEffect)(() => {
5048        if (!isRoot) {
5049          return;
5050        }
5051        const doc = wrapperRef.current?.ownerDocument;
5052        if (!doc) {
5053          return;
5054        }
5055        const root = doc.documentElement;
5056        if (true) {
5057          const active = rootProviderCountByDocument.get(doc) ?? 0;
5058          if (active > 0) {
5059            console.warn(
5060              "ThemeProvider: More than one root provider (`isRoot`) is mounted on the same document. Their forwarded document-level styles conflict, and unmounting one can reset the others. Render a single root provider per document."
5061            );
5062          }
5063          rootProviderCountByDocument.set(doc, active + 1);
5064        }
5065        const previous = /* @__PURE__ */ new Map();
5066        const applied = [];
5067        const previousRootProvider = root.getAttribute(
5068          "data-wpds-root-provider"
5069        );
5070        const previousCornerRadius = root.getAttribute(
5071          "data-wpds-corner-radius"
5072        );
5073        root.setAttribute("data-wpds-root-provider", "true");
5074        root.setAttribute("data-wpds-corner-radius", cornerRadiusPreset);
5075        for (const [rawKey, rawValue] of Object.entries(
5076          themeProviderStyles
5077        )) {
5078          if (!rawKey.startsWith("--") || rawValue === null || rawValue === void 0) {
5079            continue;
5080          }
5081          previous.set(rawKey, root.style.getPropertyValue(rawKey));
5082          root.style.setProperty(rawKey, String(rawValue));
5083          applied.push(rawKey);
5084        }
5085        return () => {
5086          if (true) {
5087            const active = rootProviderCountByDocument.get(doc) ?? 1;
5088            if (active <= 1) {
5089              rootProviderCountByDocument.delete(doc);
5090            } else {
5091              rootProviderCountByDocument.set(doc, active - 1);
5092            }
5093          }
5094          for (const key of applied) {
5095            const prev = previous.get(key);
5096            if (prev) {
5097              root.style.setProperty(key, prev);
5098            } else {
5099              root.style.removeProperty(key);
5100            }
5101          }
5102          if (previousRootProvider === null) {
5103            root.removeAttribute("data-wpds-root-provider");
5104          } else {
5105            root.setAttribute(
5106              "data-wpds-root-provider",
5107              previousRootProvider
5108            );
5109          }
5110          if (previousCornerRadius === null) {
5111            root.removeAttribute("data-wpds-corner-radius");
5112          } else {
5113            root.setAttribute(
5114              "data-wpds-corner-radius",
5115              previousCornerRadius
5116            );
5117          }
5118        };
5119      }, [cornerRadiusPreset, isRoot, themeProviderStyles]);
5120      return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
5121        "div",
5122        {
5123          ref: wrapperRef,
5124          "data-wpds-root-provider": isRoot || void 0,
5125          "data-wpds-corner-radius": cornerRadiusPreset,
5126          className: style_default.wrapper,
5127          style: themeProviderStyles,
5128          children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeContext.Provider, { value: contextValue, children })
5129        }
5130      );
5131    };
5132  
5133    // packages/theme/build-module/private-apis.mjs
5134    function warnPrivateApi(apiName, options = {}) {
5135      (0, import_deprecated.default)(`\`privateApis.$apiName}\` from \`@wordpress/theme\``, {
5136        since: "7.1",
5137        version: "7.3",
5138        ...options
5139      });
5140    }
5141    var privateApis = {};
5142    lock(privateApis, {
5143      get ThemeProvider() {
5144        warnPrivateApi("ThemeProvider", {
5145          alternative: "`ThemeProvider` from `@wordpress/theme`"
5146        });
5147        return ThemeProvider;
5148      },
5149      get useThemeProviderStyles() {
5150        warnPrivateApi("useThemeProviderStyles", {
5151          alternative: "`ThemeProvider` from `@wordpress/theme` for supported theming use cases",
5152          hint: "`useThemeProviderStyles` has no public replacement."
5153        });
5154        return useThemeProviderStyles;
5155      }
5156    });
5157    return __toCommonJS(index_exports);
5158  })();
5159  (window.wp ||= {}).theme = wp.theme;
5160  })();


Generated : Tue Oct 13 08:20:33 2026 Cross-referenced by PHPXref