[ 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-fgFill": [
3524        "foreground-interactive-brand-strong",
3525        "foreground-interactive-brand-strong-active"
3526      ],
3527      "primary-bgFill2": ["background-interactive-brand-strong-active"],
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-fgFill": [
3561        "foreground-interactive-error-strong",
3562        "foreground-interactive-error-strong-active"
3563      ],
3564      "error-bgFill2": ["background-interactive-error-strong-active"],
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 assertValidSeedColor(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    }
3715    function clampToGamut(c) {
3716      ColorSpace.register(srgb_default);
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 reference = stepConfig.contrast.reference;
3763        dependencies.get(step).push(reference);
3764        dependents.get(reference).push(step);
3765        if (stepConfig.sameAsIfPossible) {
3766          dependencies.get(step).push(stepConfig.sameAsIfPossible);
3767          dependents.get(stepConfig.sameAsIfPossible).push(step);
3768        }
3769      });
3770      return { dependencies, dependents };
3771    }
3772    function sortByDependency(config) {
3773      const { dependents } = buildDependencyGraph(config);
3774      const result = [];
3775      const visited = /* @__PURE__ */ new Set();
3776      const visiting = /* @__PURE__ */ new Set();
3777      function visit(node) {
3778        if (visiting.has(node)) {
3779          throw new Error(
3780            `Circular dependency detected involving step: $String(
3781              node
3782            )}`
3783          );
3784        }
3785        if (visited.has(node)) {
3786          return;
3787        }
3788        visiting.add(node);
3789        const nodeDependents = dependents.get(node) || [];
3790        nodeDependents.forEach((dependent) => {
3791          visit(dependent);
3792        });
3793        visiting.delete(node);
3794        visited.add(node);
3795        if (node !== "seed") {
3796          result.unshift(node);
3797        }
3798      }
3799      visit("seed");
3800      return result;
3801    }
3802    function stepsForStep(stepName, config) {
3803      const result = /* @__PURE__ */ new Set();
3804      function visit(step) {
3805        if (step === "seed" || result.has(step)) {
3806          return;
3807        }
3808        const stepConfig = config[step];
3809        if (!stepConfig) {
3810          return;
3811        }
3812        visit(stepConfig.contrast.reference);
3813        if (stepConfig.sameAsIfPossible) {
3814          visit(stepConfig.sameAsIfPossible);
3815        }
3816        result.add(step);
3817      }
3818      visit(stepName);
3819      return Array.from(result);
3820    }
3821    function computeBetterFgColorDirection(seed, preferLighter) {
3822      const contrastAgainstBlack = getContrast(seed, BLACK);
3823      const contrastAgainstWhite = getContrast(seed, WHITE);
3824      return contrastAgainstBlack > contrastAgainstWhite + (preferLighter ? WHITE_TEXT_CONTRAST_MARGIN : 0) ? { better: "darker", worse: "lighter" } : { better: "lighter", worse: "darker" };
3825    }
3826    function adjustContrastTarget(target) {
3827      if (target === 1) {
3828        return 1;
3829      }
3830      return target + UNIVERSAL_CONTRAST_TOPUP;
3831    }
3832    function clampAccentScaleReferenceLightness(rawLightness, direction) {
3833      const thresholds = ACCENT_SCALE_BASE_LIGHTNESS_THRESHOLDS[direction];
3834      return Math.max(thresholds.min, Math.min(thresholds.max, rawLightness));
3835    }
3836    function solveWithBisect(calculateC, calculateValue, initLowerL, initLowerValue, initUpperL, initUpperValue) {
3837      let lowerL = initLowerL;
3838      let lowerValue = initLowerValue;
3839      let lowerReplaced = false;
3840      let upperL = initUpperL;
3841      let upperValue = initUpperValue;
3842      let upperReplaced = false;
3843      let bestC;
3844      let bestValue;
3845      let iterations = 0;
3846      while (true) {
3847        iterations++;
3848        const newL = (lowerL * upperValue - upperL * lowerValue) / (upperValue - lowerValue);
3849        bestC = calculateC(newL);
3850        bestValue = calculateValue(bestC);
3851        if (Math.abs(bestValue) <= CONTRAST_EPSILON || iterations >= MAX_BISECTION_ITERATIONS) {
3852          break;
3853        }
3854        if (bestValue <= 0) {
3855          lowerL = newL;
3856          lowerValue = bestValue;
3857          if (lowerReplaced) {
3858            upperValue /= 2;
3859          }
3860          lowerReplaced = true;
3861          upperReplaced = false;
3862        } else {
3863          upperL = newL;
3864          upperValue = bestValue;
3865          if (upperReplaced) {
3866            lowerValue /= 2;
3867          }
3868          upperReplaced = true;
3869          lowerReplaced = false;
3870        }
3871      }
3872      return bestC;
3873    }
3874  
3875    // packages/theme/build-module/color-ramps/lib/taper-chroma.mjs
3876    function taperChroma(seed, lTarget, options = {}) {
3877      const gamut = options.gamut ?? srgb_default;
3878      const alpha = options.alpha ?? 0.65;
3879      const carry = options.carry ?? 0.5;
3880      const radiusLight = options.radiusLight ?? 0.2;
3881      const radiusDark = options.radiusDark ?? 0.2;
3882      const kLight = options.kLight ?? 0.85;
3883      const kDark = options.kDark ?? 0.85;
3884      const achromaEpsilon = options.achromaEpsilon ?? 5e-3;
3885      const cSeed = Math.max(0, get(seed, [oklch_default, "c"]));
3886      let hSeed = get(seed, [oklch_default, "h"]);
3887      const chromaIsTiny = cSeed < achromaEpsilon;
3888      const hueIsInvalid = hSeed === null || !Number.isFinite(hSeed);
3889      if (chromaIsTiny || hueIsInvalid) {
3890        if (typeof options.hueFallback === "number") {
3891          hSeed = normalizeHue(options.hueFallback);
3892        } else {
3893          return {
3894            space: oklch_default,
3895            coords: [clamp01(lTarget), 0, 0],
3896            alpha: 1
3897          };
3898        }
3899      }
3900      const lSeed = clamp01(get(seed, [oklch_default, "l"]));
3901      const cmaxSeed = getCachedMaxChromaAtLH(lSeed, hSeed, gamut);
3902      const cmaxTarget = getCachedMaxChromaAtLH(
3903        clamp01(lTarget),
3904        hSeed,
3905        gamut
3906      );
3907      let seedRelative = 0;
3908      const denom = cmaxSeed > 0 ? cmaxSeed : 1e-6;
3909      seedRelative = clamp01(cSeed / denom);
3910      const cIntendedBase = alpha * cmaxTarget;
3911      const cWithCarry = cIntendedBase * Math.pow(seedRelative, clamp01(carry));
3912      const t = continuousTaper(lSeed, lTarget, {
3913        radiusLight,
3914        radiusDark,
3915        kLight,
3916        kDark
3917      });
3918      const cPlanned = cWithCarry * t;
3919      const lOut = clamp01(lTarget);
3920      return { l: lOut, c: cPlanned };
3921    }
3922    function clamp01(x) {
3923      if (x < 0) {
3924        return 0;
3925      }
3926      if (x > 1) {
3927        return 1;
3928      }
3929      return x;
3930    }
3931    function normalizeHue(h) {
3932      let hue = h % 360;
3933      if (hue < 0) {
3934        hue += 360;
3935      }
3936      return hue;
3937    }
3938    function raisedCosine(u) {
3939      const x = clamp01(u);
3940      return 0.5 - 0.5 * Math.cos(Math.PI * x);
3941    }
3942    function continuousTaper(seedL, targetL, opts) {
3943      const d2 = targetL - seedL;
3944      if (d2 >= 0) {
3945        const u2 = opts.radiusLight > 0 ? Math.abs(d2) / opts.radiusLight : 1;
3946        const w2 = raisedCosine(u2 > 1 ? 1 : u2);
3947        return 1 - (1 - opts.kLight) * w2;
3948      }
3949      const u = opts.radiusDark > 0 ? Math.abs(d2) / opts.radiusDark : 1;
3950      const w = raisedCosine(u > 1 ? 1 : u);
3951      return 1 - (1 - opts.kDark) * w;
3952    }
3953    var MAX_CHROMA = 0.45;
3954    var maxChromaCache = /* @__PURE__ */ new Map();
3955    function quantize(x, step) {
3956      const k = Math.round(x / step);
3957      return k * step;
3958    }
3959    function getCachedMaxChromaAtLH(l, h, gamutSpace) {
3960      const lQuantized = quantize(l, 0.05);
3961      const hQuantized = quantize(normalizeHue(h), 10);
3962      const key = `$gamutSpace.id}|L:$lQuantized}|H:$hQuantized}`;
3963      const hit = maxChromaCache.get(key);
3964      if (typeof hit === "number") {
3965        return hit;
3966      }
3967      const computed = maxInGamutChromaAtLH(
3968        lQuantized,
3969        hQuantized,
3970        gamutSpace,
3971        MAX_CHROMA
3972      );
3973      maxChromaCache.set(key, computed);
3974      return computed;
3975    }
3976    function maxInGamutChromaAtLH(l, h, gamutSpace, cap) {
3977      const probe = {
3978        space: oklch_default,
3979        coords: [l, cap, h],
3980        alpha: 1
3981      };
3982      const clamped = toGamutCSS(probe, { space: gamutSpace });
3983      return get(clamped, [oklch_default, "c"]);
3984    }
3985  
3986    // packages/theme/build-module/color-ramps/lib/find-color-with-constraints.mjs
3987    function cdiff(c13, c23) {
3988      return Math.log(c13 / c23);
3989    }
3990    function findColorMeetingRequirements(reference, seed, target, direction, {
3991      lightnessConstraint,
3992      taperChromaOptions
3993    } = {}) {
3994      if (target <= 1) {
3995        return {
3996          color: reference,
3997          reached: true,
3998          achieved: 1
3999        };
4000      }
4001      function getColorForL(l) {
4002        let newL = l;
4003        let newC = get(seed, [oklch_default, "c"]);
4004        if (taperChromaOptions) {
4005          const tapered = taperChroma(seed, newL, taperChromaOptions);
4006          if ("l" in tapered && "c" in tapered) {
4007            newL = tapered.l;
4008            newC = tapered.c;
4009          } else {
4010            return tapered;
4011          }
4012        }
4013        return clampToGamut({
4014          space: oklch_default,
4015          coords: [newL, newC, get(seed, [oklch_default, "h"])],
4016          alpha: seed.alpha
4017        });
4018      }
4019      const mostContrastingL = direction === "lighter" ? 1 : 0;
4020      const mostContrastingColor = direction === "lighter" ? WHITE : BLACK;
4021      const highestContrast = getContrast(reference, mostContrastingColor);
4022      if (lightnessConstraint) {
4023        const colorWithExactL = getColorForL(lightnessConstraint.value);
4024        const exactLContrast = getContrast(reference, colorWithExactL);
4025        const exactLContrastMeetsTarget = cdiff(exactLContrast, target) >= -CONTRAST_EPSILON;
4026        if (exactLContrastMeetsTarget || lightnessConstraint.type === "force") {
4027          return {
4028            color: colorWithExactL,
4029            reached: exactLContrastMeetsTarget,
4030            achieved: exactLContrast,
4031            deficit: exactLContrastMeetsTarget ? cdiff(exactLContrast, highestContrast) : cdiff(target, exactLContrast)
4032          };
4033        }
4034      }
4035      if (cdiff(highestContrast, target) <= CONTRAST_EPSILON) {
4036        return {
4037          color: mostContrastingColor,
4038          reached: cdiff(highestContrast, target) >= -CONTRAST_EPSILON,
4039          achieved: highestContrast,
4040          deficit: cdiff(target, highestContrast)
4041        };
4042      }
4043      const lowerL = get(reference, [oklch_default, "l"]);
4044      const lowerContrast = cdiff(1, target);
4045      const upperL = mostContrastingL;
4046      const upperContrast = cdiff(highestContrast, target);
4047      const bestColor = solveWithBisect(
4048        getColorForL,
4049        (c) => cdiff(getContrast(reference, c), target),
4050        lowerL,
4051        lowerContrast,
4052        upperL,
4053        upperContrast
4054      );
4055      return {
4056        color: bestColor,
4057        reached: true,
4058        achieved: target,
4059        // Negative number that specifies how much room we have.
4060        deficit: cdiff(target, highestContrast)
4061      };
4062    }
4063  
4064    // packages/theme/build-module/color-ramps/lib/index.mjs
4065    function calculateRamp({
4066      seed,
4067      sortedSteps,
4068      config,
4069      mainDir,
4070      oppDir,
4071      pinLightness
4072    }) {
4073      const rampResults = {};
4074      let warnings;
4075      let maxDeficit = -Infinity;
4076      let maxDeficitDirection = "lighter";
4077      let maxDeficitStep;
4078      const calculatedColors = /* @__PURE__ */ new Map();
4079      calculatedColors.set("seed", seed);
4080      for (const stepName of sortedSteps) {
4081        let computeDirection2 = function(color, followDirection) {
4082          if (followDirection === "main") {
4083            return mainDir;
4084          }
4085          if (followDirection === "opposite") {
4086            return oppDir;
4087          }
4088          if (followDirection === "best") {
4089            return computeBetterFgColorDirection(
4090              color,
4091              contrast.preferLighter
4092            ).better;
4093          }
4094          return followDirection;
4095        };
4096        var computeDirection = computeDirection2;
4097        const {
4098          contrast,
4099          lightness: stepLightnessConstraint,
4100          taperChromaOptions,
4101          sameAsIfPossible
4102        } = config[stepName];
4103        const referenceColor = calculatedColors.get(contrast.reference);
4104        if (!referenceColor) {
4105          throw new Error(
4106            `Reference color for step $stepName} not found: $contrast.reference}`
4107          );
4108        }
4109        if (sameAsIfPossible) {
4110          const candidateColor = calculatedColors.get(sameAsIfPossible);
4111          if (!candidateColor) {
4112            throw new Error(
4113              `Same-as color for step $stepName} not found: $sameAsIfPossible}`
4114            );
4115          }
4116          const candidateContrast = getContrast(
4117            referenceColor,
4118            candidateColor
4119          );
4120          const adjustedTarget2 = adjustContrastTarget(contrast.target);
4121          if (candidateContrast >= adjustedTarget2) {
4122            calculatedColors.set(stepName, candidateColor);
4123            rampResults[stepName] = getColorString(candidateColor);
4124            continue;
4125          }
4126        }
4127        const computedDir = computeDirection2(
4128          referenceColor,
4129          contrast.followDirection
4130        );
4131        const adjustedTarget = adjustContrastTarget(contrast.target);
4132        let lightnessConstraint;
4133        if (pinLightness?.stepName === stepName) {
4134          lightnessConstraint = {
4135            value: pinLightness.value,
4136            type: "force"
4137          };
4138        } else if (stepLightnessConstraint) {
4139          lightnessConstraint = {
4140            value: stepLightnessConstraint(computedDir),
4141            type: "onlyIfSucceeds"
4142          };
4143        }
4144        const searchResults = findColorMeetingRequirements(
4145          referenceColor,
4146          seed,
4147          adjustedTarget,
4148          computedDir,
4149          {
4150            lightnessConstraint,
4151            taperChromaOptions
4152          }
4153        );
4154        if (!contrast.ignoreWhenAdjustingSeed && searchResults.deficit && searchResults.deficit > maxDeficit) {
4155          maxDeficit = searchResults.deficit;
4156          maxDeficitDirection = computedDir;
4157          maxDeficitStep = stepName;
4158        }
4159        calculatedColors.set(stepName, searchResults.color);
4160        rampResults[stepName] = getColorString(searchResults.color);
4161        if (!searchResults.reached && !contrast.ignoreWhenAdjustingSeed) {
4162          warnings ??= [];
4163          warnings.push(stepName);
4164        }
4165      }
4166      return {
4167        rampResults,
4168        warnings,
4169        maxDeficit,
4170        maxDeficitDirection,
4171        maxDeficitStep
4172      };
4173    }
4174    function buildRamp(seedArg, config, {
4175      mainDirection,
4176      pinLightness,
4177      rescaleToFitContrastTargets = true
4178    } = {}) {
4179      assertValidSeedColor(seedArg);
4180      let seed;
4181      try {
4182        seed = clampToGamut(seedArg);
4183      } catch (error) {
4184        throw new Error(
4185          `Invalid seed color "$seedArg}": $error instanceof Error ? error.message : "Unknown error"}`
4186        );
4187      }
4188      let mainDir = "lighter";
4189      let oppDir = "darker";
4190      if (mainDirection) {
4191        mainDir = mainDirection;
4192        oppDir = mainDirection === "darker" ? "lighter" : "darker";
4193      } else {
4194        const { better, worse } = computeBetterFgColorDirection(seed);
4195        mainDir = better;
4196        oppDir = worse;
4197      }
4198      const sortedSteps = sortByDependency(config);
4199      const {
4200        rampResults,
4201        warnings,
4202        maxDeficit,
4203        maxDeficitDirection,
4204        maxDeficitStep
4205      } = calculateRamp({
4206        seed,
4207        sortedSteps,
4208        config,
4209        mainDir,
4210        oppDir,
4211        pinLightness
4212      });
4213      let bestRamp = rampResults;
4214      let bestWarnings = warnings;
4215      if (maxDeficit > CONTRAST_EPSILON && rescaleToFitContrastTargets) {
4216        let getSeedForL2 = function(l) {
4217          return clampToGamut(set(clone(seed), [oklch_default, "l"], l));
4218        }, getDeficitForSeed2 = function(s) {
4219          const iterationResults = calculateRamp({
4220            seed: s,
4221            sortedSteps: iterSteps,
4222            config,
4223            mainDir,
4224            oppDir,
4225            pinLightness
4226          });
4227          return iterationResults.maxDeficitDirection === maxDeficitDirection ? iterationResults.maxDeficit : -maxDeficit;
4228        };
4229        var getSeedForL = getSeedForL2, getDeficitForSeed = getDeficitForSeed2;
4230        const iterSteps = stepsForStep(maxDeficitStep, config);
4231        const lowerSeedL = maxDeficitDirection === "lighter" ? 0 : 1;
4232        const lowerDeficit = -maxDeficit;
4233        const upperSeedL = get(seed, [oklch_default, "l"]);
4234        const upperDeficit = maxDeficit;
4235        const bestSeed = solveWithBisect(
4236          getSeedForL2,
4237          getDeficitForSeed2,
4238          lowerSeedL,
4239          lowerDeficit,
4240          upperSeedL,
4241          upperDeficit
4242        );
4243        const finalResult = calculateRamp({
4244          seed: bestSeed,
4245          sortedSteps,
4246          config,
4247          mainDir,
4248          oppDir,
4249          pinLightness
4250        });
4251        bestRamp = finalResult.rampResults;
4252        bestWarnings = finalResult.warnings;
4253      }
4254      if (mainDir === "darker") {
4255        const tmpSurface1 = bestRamp.surface1;
4256        bestRamp.surface1 = bestRamp.surface3;
4257        bestRamp.surface3 = tmpSurface1;
4258      }
4259      return {
4260        ramp: bestRamp,
4261        warnings: bestWarnings,
4262        direction: mainDir
4263      };
4264    }
4265  
4266    // packages/theme/build-module/color-ramps/lib/ramp-configs.mjs
4267    var lightnessConstraintForegroundHighContrast = (direction) => direction === "lighter" ? 0.9551 : 0.235;
4268    var lightnessConstraintForegroundMediumContrast = (direction) => direction === "lighter" ? 0.77 : 0.56;
4269    var lightnessConstraintBgFill = (direction) => direction === "lighter" ? 0.67 : 0.45;
4270    var BG_SURFACE_TAPER_CHROMA = {
4271      alpha: 0.7
4272    };
4273    var FG_TAPER_CHROMA = {
4274      alpha: 0.6,
4275      kLight: 0.2,
4276      kDark: 0.2
4277    };
4278    var STROKE_TAPER_CHROMA = {
4279      alpha: 0.6,
4280      radiusDark: 0.01,
4281      radiusLight: 0.01,
4282      kLight: 0.8,
4283      kDark: 0.8
4284    };
4285    var ACCENT_SURFACE_TAPER_CHROMA = {
4286      alpha: 0.75,
4287      radiusDark: 0.01,
4288      radiusLight: 0.01
4289    };
4290    var fgSurface4Config = {
4291      contrast: {
4292        reference: "surface3",
4293        followDirection: "main",
4294        target: 7,
4295        preferLighter: true
4296      },
4297      lightness: lightnessConstraintForegroundHighContrast,
4298      taperChromaOptions: FG_TAPER_CHROMA
4299    };
4300    var BG_RAMP_CONFIG = {
4301      // Surface
4302      surface1: {
4303        contrast: {
4304          reference: "surface2",
4305          followDirection: "opposite",
4306          target: 1.06,
4307          ignoreWhenAdjustingSeed: true
4308        },
4309        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4310      },
4311      surface2: {
4312        contrast: {
4313          reference: "seed",
4314          followDirection: "main",
4315          target: 1
4316        }
4317      },
4318      surface3: {
4319        contrast: {
4320          reference: "surface2",
4321          followDirection: "main",
4322          target: 1.06
4323        },
4324        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4325      },
4326      surface4: {
4327        contrast: {
4328          reference: "surface2",
4329          followDirection: "main",
4330          target: 1.12
4331        },
4332        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4333      },
4334      surface5: {
4335        contrast: {
4336          reference: "surface2",
4337          followDirection: "main",
4338          target: 1.2
4339        },
4340        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4341      },
4342      surface6: {
4343        contrast: {
4344          reference: "surface2",
4345          followDirection: "main",
4346          target: 1.4
4347        },
4348        taperChromaOptions: BG_SURFACE_TAPER_CHROMA
4349      },
4350      // Bg fill
4351      bgFill1: {
4352        contrast: {
4353          reference: "surface2",
4354          followDirection: "main",
4355          target: 4
4356        },
4357        lightness: lightnessConstraintBgFill
4358      },
4359      bgFill2: {
4360        contrast: {
4361          reference: "bgFill1",
4362          followDirection: "main",
4363          target: 1.2
4364        }
4365      },
4366      bgFillInverted1: {
4367        contrast: {
4368          reference: "bgFillInverted2",
4369          followDirection: "opposite",
4370          target: 1.2
4371        }
4372      },
4373      bgFillInverted2: fgSurface4Config,
4374      bgFillDark: {
4375        contrast: {
4376          reference: "surface3",
4377          followDirection: "darker",
4378          // This is what causes the token to be always dark
4379          target: 7,
4380          ignoreWhenAdjustingSeed: true
4381        },
4382        lightness: lightnessConstraintForegroundHighContrast,
4383        taperChromaOptions: FG_TAPER_CHROMA
4384      },
4385      // Stroke
4386      stroke1: {
4387        contrast: {
4388          reference: "stroke3",
4389          followDirection: "opposite",
4390          target: 2.9
4391        },
4392        taperChromaOptions: STROKE_TAPER_CHROMA
4393      },
4394      stroke2: {
4395        contrast: {
4396          reference: "stroke3",
4397          followDirection: "opposite",
4398          target: 2.4
4399        },
4400        taperChromaOptions: STROKE_TAPER_CHROMA
4401      },
4402      stroke3: {
4403        contrast: {
4404          reference: "surface3",
4405          followDirection: "main",
4406          target: 3
4407        },
4408        taperChromaOptions: STROKE_TAPER_CHROMA
4409      },
4410      stroke4: {
4411        contrast: {
4412          reference: "stroke3",
4413          followDirection: "main",
4414          target: 1.5
4415        },
4416        taperChromaOptions: STROKE_TAPER_CHROMA
4417      },
4418      // fgSurface
4419      fgSurface1: {
4420        contrast: {
4421          reference: "surface3",
4422          followDirection: "main",
4423          target: 2,
4424          preferLighter: true
4425        },
4426        taperChromaOptions: FG_TAPER_CHROMA
4427      },
4428      fgSurface2: {
4429        contrast: {
4430          reference: "surface3",
4431          followDirection: "main",
4432          target: 3,
4433          preferLighter: true
4434        },
4435        taperChromaOptions: FG_TAPER_CHROMA
4436      },
4437      fgSurface3: {
4438        contrast: {
4439          reference: "surface3",
4440          followDirection: "main",
4441          target: 4.5,
4442          preferLighter: true
4443        },
4444        lightness: lightnessConstraintForegroundMediumContrast,
4445        taperChromaOptions: FG_TAPER_CHROMA
4446      },
4447      fgSurface4: fgSurface4Config,
4448      // fgFill
4449      fgFill: {
4450        contrast: {
4451          reference: "bgFill1",
4452          followDirection: "best",
4453          target: 4.5,
4454          preferLighter: true
4455        },
4456        lightness: lightnessConstraintForegroundHighContrast,
4457        taperChromaOptions: FG_TAPER_CHROMA
4458      },
4459      fgFillInverted: {
4460        contrast: {
4461          reference: "bgFillInverted1",
4462          followDirection: "best",
4463          target: 4.5,
4464          preferLighter: true
4465        },
4466        lightness: lightnessConstraintForegroundHighContrast,
4467        taperChromaOptions: FG_TAPER_CHROMA
4468      },
4469      fgFillDark: {
4470        contrast: {
4471          reference: "bgFillDark",
4472          followDirection: "best",
4473          target: 4.5,
4474          preferLighter: true
4475        },
4476        lightness: lightnessConstraintForegroundHighContrast,
4477        taperChromaOptions: FG_TAPER_CHROMA
4478      }
4479    };
4480    var ACCENT_RAMP_CONFIG = {
4481      ...BG_RAMP_CONFIG,
4482      surface1: {
4483        ...BG_RAMP_CONFIG.surface1,
4484        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4485      },
4486      surface2: {
4487        contrast: {
4488          reference: "bgFill1",
4489          followDirection: "opposite",
4490          target: BG_RAMP_CONFIG.bgFill1.contrast.target,
4491          ignoreWhenAdjustingSeed: true
4492        },
4493        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4494      },
4495      surface3: {
4496        ...BG_RAMP_CONFIG.surface3,
4497        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4498      },
4499      surface4: {
4500        ...BG_RAMP_CONFIG.surface4,
4501        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4502      },
4503      surface5: {
4504        ...BG_RAMP_CONFIG.surface5,
4505        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4506      },
4507      surface6: {
4508        ...BG_RAMP_CONFIG.surface6,
4509        taperChromaOptions: ACCENT_SURFACE_TAPER_CHROMA
4510      },
4511      bgFill1: {
4512        contrast: {
4513          reference: "seed",
4514          followDirection: "main",
4515          target: 1
4516        }
4517      },
4518      stroke1: {
4519        ...BG_RAMP_CONFIG.stroke1
4520      },
4521      stroke2: {
4522        ...BG_RAMP_CONFIG.stroke2
4523      },
4524      stroke3: {
4525        ...BG_RAMP_CONFIG.stroke3,
4526        sameAsIfPossible: "fgSurface3",
4527        taperChromaOptions: void 0
4528      },
4529      stroke4: {
4530        ...BG_RAMP_CONFIG.stroke4,
4531        taperChromaOptions: void 0
4532      },
4533      // fgSurface: do not de-saturate
4534      fgSurface1: {
4535        ...BG_RAMP_CONFIG.fgSurface1,
4536        taperChromaOptions: void 0
4537      },
4538      fgSurface2: {
4539        ...BG_RAMP_CONFIG.fgSurface2,
4540        taperChromaOptions: void 0
4541      },
4542      fgSurface3: {
4543        ...BG_RAMP_CONFIG.fgSurface3,
4544        taperChromaOptions: void 0,
4545        sameAsIfPossible: "bgFill1"
4546      },
4547      fgSurface4: {
4548        ...BG_RAMP_CONFIG.fgSurface4,
4549        taperChromaOptions: void 0
4550      }
4551    };
4552  
4553    // packages/theme/build-module/color-ramps/index.mjs
4554    function buildBgRamp(seed) {
4555      if (typeof seed !== "string" || seed.trim() === "") {
4556        throw new Error("Seed color must be a non-empty string");
4557      }
4558      return buildRamp(seed, BG_RAMP_CONFIG);
4559    }
4560    var STEP_TO_PIN = "surface2";
4561    function getBgRampInfo(ramp) {
4562      return {
4563        mainDirection: ramp.direction,
4564        pinLightness: {
4565          stepName: STEP_TO_PIN,
4566          value: clampAccentScaleReferenceLightness(
4567            get(ramp.ramp[STEP_TO_PIN], [oklch_default, "l"]),
4568            ramp.direction
4569          )
4570        }
4571      };
4572    }
4573    function buildAccentRamp(seed, bgRamp) {
4574      if (typeof seed !== "string" || seed.trim() === "") {
4575        throw new Error("Seed color must be a non-empty string");
4576      }
4577      const bgRampInfo = bgRamp ? getBgRampInfo(bgRamp) : void 0;
4578      return buildRamp(seed, ACCENT_RAMP_CONFIG, bgRampInfo);
4579    }
4580  
4581    // packages/theme/build-module/semantic-color-contrast-pairs.mjs
4582    var MINIMUM_TEXT_CONTRAST = 4.5;
4583    var SEMANTIC_COLOR_CONTRAST_PAIRS = [
4584      {
4585        background: "background.interactive.neutral",
4586        foreground: "foreground.interactive.neutral"
4587      },
4588      {
4589        background: "background.interactive.neutral",
4590        foreground: "foreground.interactive.neutral-weak"
4591      },
4592      {
4593        background: "background.interactive.neutral-active",
4594        foreground: "foreground.interactive.neutral"
4595      },
4596      {
4597        background: "background.interactive.neutral-active",
4598        foreground: "foreground.interactive.neutral-weak"
4599      },
4600      {
4601        background: "background.interactive.neutral-weak-active",
4602        foreground: "foreground.interactive.neutral-active"
4603      },
4604      {
4605        background: "background.surface.neutral",
4606        foreground: "foreground.content.neutral"
4607      },
4608      {
4609        background: "background.surface.neutral-strong",
4610        foreground: "foreground.content.neutral"
4611      },
4612      {
4613        background: "background.surface.neutral-weak",
4614        foreground: "foreground.content.neutral"
4615      },
4616      {
4617        background: "background.surface.neutral",
4618        foreground: "foreground.content.neutral-weak"
4619      },
4620      {
4621        background: "background.surface.info",
4622        foreground: "foreground.content.info"
4623      },
4624      {
4625        background: "background.surface.info-weak",
4626        foreground: "foreground.content.info-weak"
4627      },
4628      {
4629        background: "background.surface.success",
4630        foreground: "foreground.content.success"
4631      },
4632      {
4633        background: "background.surface.success-weak",
4634        foreground: "foreground.content.success-weak"
4635      },
4636      {
4637        background: "background.surface.warning",
4638        foreground: "foreground.content.warning"
4639      },
4640      {
4641        background: "background.surface.warning-weak",
4642        foreground: "foreground.content.warning-weak"
4643      },
4644      {
4645        background: "background.surface.caution",
4646        foreground: "foreground.content.caution"
4647      },
4648      {
4649        background: "background.surface.caution-weak",
4650        foreground: "foreground.content.caution-weak"
4651      },
4652      {
4653        background: "background.surface.error",
4654        foreground: "foreground.content.error"
4655      },
4656      {
4657        background: "background.surface.error-weak",
4658        foreground: "foreground.content.error-weak"
4659      },
4660      {
4661        background: "background.interactive.brand-strong",
4662        foreground: "foreground.interactive.brand-strong"
4663      },
4664      {
4665        background: "background.interactive.brand-strong-active",
4666        foreground: "foreground.interactive.brand-strong-active"
4667      },
4668      {
4669        background: "background.interactive.error-strong",
4670        foreground: "foreground.interactive.error-strong"
4671      },
4672      {
4673        background: "background.interactive.error-strong-active",
4674        foreground: "foreground.interactive.error-strong-active"
4675      },
4676      {
4677        background: "background.interactive.neutral-strong",
4678        foreground: "foreground.interactive.neutral-strong"
4679      },
4680      {
4681        background: "background.interactive.neutral-strong-active",
4682        foreground: "foreground.interactive.neutral-strong-active"
4683      }
4684    ];
4685    function getSemanticColorCustomProperty(token) {
4686      return `--wpds-color-$token.replaceAll(".", "-")}`;
4687    }
4688  
4689    // packages/theme/build-module/theme-provider-color-warnings.mjs
4690    function collectThemeProviderColorWarnings(ramps, colorValues) {
4691      const warnings = [];
4692      for (const [rampName, result] of ramps) {
4693        for (const step of result.warnings ?? []) {
4694          warnings.push({
4695            type: "ramp",
4696            ramp: rampName,
4697            step
4698          });
4699        }
4700      }
4701      for (const {
4702        background: backgroundToken,
4703        foreground: foregroundToken
4704      } of SEMANTIC_COLOR_CONTRAST_PAIRS) {
4705        const backgroundColor = colorValues.get(
4706          getSemanticColorCustomProperty(backgroundToken)
4707        );
4708        const foregroundColor = colorValues.get(
4709          getSemanticColorCustomProperty(foregroundToken)
4710        );
4711        if (backgroundColor === void 0 || foregroundColor === void 0) {
4712          continue;
4713        }
4714        const achievedContrast = getContrast(
4715          backgroundColor,
4716          foregroundColor
4717        );
4718        if (achievedContrast < MINIMUM_TEXT_CONTRAST) {
4719          warnings.push({
4720            type: "contrast",
4721            backgroundToken,
4722            backgroundColor,
4723            foregroundToken,
4724            foregroundColor,
4725            requiredContrast: MINIMUM_TEXT_CONTRAST,
4726            achievedContrast
4727          });
4728        }
4729      }
4730      return warnings;
4731    }
4732  
4733    // packages/theme/build-module/use-theme-provider-styles.mjs
4734    var getCachedBgRamp = memize(buildBgRamp, { maxSize: 10 });
4735    var getCachedAccentRamp = memize(buildAccentRamp, { maxSize: 10 });
4736    var legacyWpComponentsOverridesCSS = [
4737      ["--wp-components-color-accent", "var(--wp-admin-theme-color)"],
4738      [
4739        "--wp-components-color-accent-darker-10",
4740        "var(--wp-admin-theme-color-darker-10)"
4741      ],
4742      [
4743        "--wp-components-color-accent-darker-20",
4744        "var(--wp-admin-theme-color-darker-20)"
4745      ],
4746      [
4747        "--wp-components-color-accent-inverted",
4748        "var(--wpds-color-foreground-interactive-brand-strong, #fff)"
4749      ],
4750      [
4751        "--wp-components-color-background",
4752        "var(--wpds-color-background-surface-neutral-strong, #fff)"
4753      ],
4754      [
4755        "--wp-components-color-foreground",
4756        "var(--wpds-color-foreground-content-neutral, #1e1e1e)"
4757      ],
4758      [
4759        "--wp-components-color-foreground-inverted",
4760        "var(--wpds-color-background-surface-neutral, #fcfcfc)"
4761      ],
4762      [
4763        "--wp-components-color-gray-100",
4764        "var(--wpds-color-background-surface-neutral, #fcfcfc)"
4765      ],
4766      [
4767        "--wp-components-color-gray-200",
4768        "var(--wpds-color-stroke-surface-neutral, #dbdbdb)"
4769      ],
4770      [
4771        "--wp-components-color-gray-300",
4772        "var(--wpds-color-stroke-surface-neutral, #dbdbdb)"
4773      ],
4774      [
4775        "--wp-components-color-gray-400",
4776        "var(--wpds-color-stroke-interactive-neutral, #8d8d8d)"
4777      ],
4778      [
4779        "--wp-components-color-gray-600",
4780        "var(--wpds-color-stroke-interactive-neutral, #8d8d8d)"
4781      ],
4782      [
4783        "--wp-components-color-gray-700",
4784        "var(--wpds-color-foreground-content-neutral-weak, #707070)"
4785      ],
4786      [
4787        "--wp-components-color-gray-800",
4788        "var(--wpds-color-foreground-content-neutral, #1e1e1e)"
4789      ]
4790    ];
4791    function customRgbFormat(color) {
4792      const rgb = to(color, srgb_default);
4793      return rgb.coords.map((n2) => Math.round((n2 ?? 0) * 255)).join(", ");
4794    }
4795    function legacyWpAdminThemeOverridesCSS(accent) {
4796      ColorSpace.register(srgb_default);
4797      const parsedAccent = to(accent, hsl_default);
4798      const parsedL = parsedAccent.coords[2] ?? 0;
4799      const darker10 = set(
4800        clone(parsedAccent),
4801        [hsl_default, "l"],
4802        Math.max(0, parsedL - 5)
4803        // L reduced by 5%
4804      );
4805      const darker20 = set(
4806        clone(parsedAccent),
4807        [hsl_default, "l"],
4808        Math.max(0, parsedL - 10)
4809        // L reduced by 10%
4810      );
4811      return [
4812        ["--wp-admin-theme-color", getColorString(parsedAccent)],
4813        ["--wp-admin-theme-color--rgb", customRgbFormat(parsedAccent)],
4814        ["--wp-admin-theme-color-darker-10", getColorString(darker10)],
4815        [
4816          "--wp-admin-theme-color-darker-10--rgb",
4817          customRgbFormat(darker10)
4818        ],
4819        ["--wp-admin-theme-color-darker-20", getColorString(darker20)],
4820        [
4821          "--wp-admin-theme-color-darker-20--rgb",
4822          customRgbFormat(darker20)
4823        ]
4824      ];
4825    }
4826    function colorTokensCSS(computedColorRamps) {
4827      const entries = [];
4828      for (const [rampName, { ramp }] of computedColorRamps) {
4829        for (const [tokenName, tokenValue] of Object.entries(ramp)) {
4830          const primitiveRampName = rampName === "background" ? "bg" : rampName;
4831          const key = `$primitiveRampName}-$tokenName}`;
4832          const aliasedBy = color_tokens_default[key] ?? [];
4833          for (const aliasedId of aliasedBy) {
4834            entries.push([`--wpds-color-$aliasedId}`, tokenValue]);
4835          }
4836        }
4837      }
4838      return entries;
4839    }
4840    function generateStyles({
4841      primary,
4842      colorEntries
4843    }) {
4844      return Object.fromEntries(
4845        [
4846          // Semantic color tokens
4847          colorEntries,
4848          // Legacy overrides
4849          legacyWpAdminThemeOverridesCSS(primary),
4850          legacyWpComponentsOverridesCSS
4851        ].flat()
4852      );
4853    }
4854    function generateThemeProviderColors(primary, background) {
4855      const seeds = {
4856        ...DEFAULT_SEED_COLORS,
4857        background,
4858        primary
4859      };
4860      const computedColorRamps = /* @__PURE__ */ new Map();
4861      const bgRamp = getCachedBgRamp(seeds.background);
4862      for (const [rawRampName, seed] of Object.entries(seeds)) {
4863        const rampName = rawRampName;
4864        computedColorRamps.set(
4865          rampName,
4866          rampName === "background" ? bgRamp : getCachedAccentRamp(seed, bgRamp)
4867        );
4868      }
4869      const colorEntries = colorTokensCSS(computedColorRamps);
4870      return {
4871        styles: generateStyles({
4872          primary: seeds.primary,
4873          colorEntries
4874        }),
4875        warnings: collectThemeProviderColorWarnings(
4876          computedColorRamps,
4877          new Map(colorEntries)
4878        )
4879      };
4880    }
4881    function useThemeProviderStyles({
4882      color = {},
4883      cursor,
4884      cornerRadius
4885    } = {}) {
4886      const { resolvedSettings: inheritedSettings } = (0, import_element2.useContext)(ThemeContext);
4887      const hasColor = color.primary !== void 0 || color.background !== void 0 || inheritedSettings.color?.primary !== void 0 || inheritedSettings.color?.background !== void 0;
4888      const primary = hasColor ? color.primary ?? inheritedSettings.color?.primary ?? DEFAULT_SEED_COLORS.primary : void 0;
4889      const background = hasColor ? color.background ?? inheritedSettings.color?.background ?? DEFAULT_SEED_COLORS.background : void 0;
4890      const cursorControl = cursor?.control ?? inheritedSettings.cursor?.control;
4891      const cornerRadiusPreset = cornerRadius ?? inheritedSettings.cornerRadius ?? "subtle";
4892      const resolvedSettings = (0, import_element2.useMemo)(
4893        () => ({
4894          color: {
4895            primary,
4896            background
4897          },
4898          cursor: cursorControl ? { control: cursorControl } : void 0,
4899          cornerRadius: cornerRadiusPreset
4900        }),
4901        [primary, background, cursorControl, cornerRadiusPreset]
4902      );
4903      const generatedColors = (0, import_element2.useMemo)(() => {
4904        if (primary === void 0 || background === void 0) {
4905          return {
4906            styles: {},
4907            warnings: void 0
4908          };
4909        }
4910        return generateThemeProviderColors(primary, background);
4911      }, [primary, background]);
4912      const themeProviderStyles = (0, import_element2.useMemo)(
4913        () => ({
4914          ...generatedColors.styles,
4915          ...cursorControl && {
4916            "--wpds-cursor-control": cursorControl
4917          }
4918        }),
4919        [generatedColors.styles, cursorControl]
4920      );
4921      return {
4922        resolvedSettings,
4923        themeProviderStyles,
4924        colorWarnings: generatedColors.warnings
4925      };
4926    }
4927  
4928    // packages/theme/build-module/theme-provider.mjs
4929    var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
4930    var STYLE_HASH_ATTRIBUTE = "data-wp-hash";
4931    function getRuntime() {
4932      const globalScope = globalThis;
4933      if (globalScope.__wpStyleRuntime) {
4934        return globalScope.__wpStyleRuntime;
4935      }
4936      globalScope.__wpStyleRuntime = {
4937        documents: /* @__PURE__ */ new Map(),
4938        styles: /* @__PURE__ */ new Map(),
4939        injectedStyles: /* @__PURE__ */ new WeakMap()
4940      };
4941      if (typeof document !== "undefined") {
4942        registerDocument(document);
4943      }
4944      return globalScope.__wpStyleRuntime;
4945    }
4946    function documentContainsStyleHash(targetDocument, hash) {
4947      if (!targetDocument.head) {
4948        return false;
4949      }
4950      for (const style of targetDocument.head.querySelectorAll(
4951        `style[$STYLE_HASH_ATTRIBUTE}]`
4952      )) {
4953        if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) {
4954          return true;
4955        }
4956      }
4957      return false;
4958    }
4959    function injectStyle(targetDocument, hash, css) {
4960      if (!targetDocument.head) {
4961        return;
4962      }
4963      const runtime = getRuntime();
4964      let injectedStyles = runtime.injectedStyles.get(targetDocument);
4965      if (!injectedStyles) {
4966        injectedStyles = /* @__PURE__ */ new Set();
4967        runtime.injectedStyles.set(targetDocument, injectedStyles);
4968      }
4969      if (injectedStyles.has(hash)) {
4970        return;
4971      }
4972      if (documentContainsStyleHash(targetDocument, hash)) {
4973        injectedStyles.add(hash);
4974        return;
4975      }
4976      const style = targetDocument.createElement("style");
4977      style.setAttribute(STYLE_HASH_ATTRIBUTE, hash);
4978      style.appendChild(targetDocument.createTextNode(css));
4979      targetDocument.head.appendChild(style);
4980      injectedStyles.add(hash);
4981    }
4982    function registerDocument(targetDocument) {
4983      const runtime = getRuntime();
4984      runtime.documents.set(
4985        targetDocument,
4986        (runtime.documents.get(targetDocument) ?? 0) + 1
4987      );
4988      for (const [hash, css] of runtime.styles) {
4989        injectStyle(targetDocument, hash, css);
4990      }
4991      return () => {
4992        const count = runtime.documents.get(targetDocument);
4993        if (count === void 0) {
4994          return;
4995        }
4996        if (count <= 1) {
4997          runtime.documents.delete(targetDocument);
4998          return;
4999        }
5000        runtime.documents.set(targetDocument, count - 1);
5001      };
5002    }
5003    function registerStyle(hash, css) {
5004      const runtime = getRuntime();
5005      runtime.styles.set(hash, css);
5006      for (const targetDocument of runtime.documents.keys()) {
5007        injectStyle(targetDocument, hash, css);
5008      }
5009    }
5010    if (typeof process === "undefined" || true) {
5011      registerStyle("8d074a190c", "._0ebd6d9bf8b95794__wrapper{display:contents}");
5012    }
5013    var style_default = { "wrapper": "_0ebd6d9bf8b95794__wrapper" };
5014    var rootProviderCountByDocument = /* @__PURE__ */ new WeakMap();
5015    var ThemeProvider = ({
5016      children,
5017      color = {},
5018      cursor,
5019      cornerRadius,
5020      isRoot = false,
5021      onColorWarnings
5022    }) => {
5023      const { themeProviderStyles, resolvedSettings, colorWarnings } = useThemeProviderStyles({
5024        color,
5025        cursor,
5026        cornerRadius
5027      });
5028      const cornerRadiusPreset = resolvedSettings.cornerRadius ?? "subtle";
5029      const onColorWarningsEvent = (0, import_compose.useEvent)(onColorWarnings);
5030      const contextValue = (0, import_element3.useMemo)(
5031        () => ({
5032          resolvedSettings
5033        }),
5034        [resolvedSettings]
5035      );
5036      const wrapperRef = (0, import_element3.useRef)(null);
5037      (0, import_element3.useEffect)(() => {
5038        if (colorWarnings !== void 0) {
5039          onColorWarningsEvent(colorWarnings);
5040        }
5041      }, [colorWarnings, onColorWarningsEvent]);
5042      (0, import_compose.useIsomorphicLayoutEffect)(() => {
5043        if (!isRoot) {
5044          return;
5045        }
5046        const doc = wrapperRef.current?.ownerDocument;
5047        if (!doc) {
5048          return;
5049        }
5050        const root = doc.documentElement;
5051        if (true) {
5052          const active = rootProviderCountByDocument.get(doc) ?? 0;
5053          if (active > 0) {
5054            console.warn(
5055              "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."
5056            );
5057          }
5058          rootProviderCountByDocument.set(doc, active + 1);
5059        }
5060        const previous = /* @__PURE__ */ new Map();
5061        const applied = [];
5062        const previousRootProvider = root.getAttribute(
5063          "data-wpds-root-provider"
5064        );
5065        const previousCornerRadius = root.getAttribute(
5066          "data-wpds-corner-radius"
5067        );
5068        root.setAttribute("data-wpds-root-provider", "true");
5069        root.setAttribute("data-wpds-corner-radius", cornerRadiusPreset);
5070        for (const [rawKey, rawValue] of Object.entries(
5071          themeProviderStyles
5072        )) {
5073          if (!rawKey.startsWith("--") || rawValue === null || rawValue === void 0) {
5074            continue;
5075          }
5076          previous.set(rawKey, root.style.getPropertyValue(rawKey));
5077          root.style.setProperty(rawKey, String(rawValue));
5078          applied.push(rawKey);
5079        }
5080        return () => {
5081          if (true) {
5082            const active = rootProviderCountByDocument.get(doc) ?? 1;
5083            if (active <= 1) {
5084              rootProviderCountByDocument.delete(doc);
5085            } else {
5086              rootProviderCountByDocument.set(doc, active - 1);
5087            }
5088          }
5089          for (const key of applied) {
5090            const prev = previous.get(key);
5091            if (prev) {
5092              root.style.setProperty(key, prev);
5093            } else {
5094              root.style.removeProperty(key);
5095            }
5096          }
5097          if (previousRootProvider === null) {
5098            root.removeAttribute("data-wpds-root-provider");
5099          } else {
5100            root.setAttribute(
5101              "data-wpds-root-provider",
5102              previousRootProvider
5103            );
5104          }
5105          if (previousCornerRadius === null) {
5106            root.removeAttribute("data-wpds-corner-radius");
5107          } else {
5108            root.setAttribute(
5109              "data-wpds-corner-radius",
5110              previousCornerRadius
5111            );
5112          }
5113        };
5114      }, [cornerRadiusPreset, isRoot, themeProviderStyles]);
5115      return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
5116        "div",
5117        {
5118          ref: wrapperRef,
5119          "data-wpds-root-provider": isRoot || void 0,
5120          "data-wpds-corner-radius": cornerRadiusPreset,
5121          className: style_default.wrapper,
5122          style: themeProviderStyles,
5123          children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeContext.Provider, { value: contextValue, children })
5124        }
5125      );
5126    };
5127  
5128    // packages/theme/build-module/private-apis.mjs
5129    function warnPrivateApi(apiName, options = {}) {
5130      (0, import_deprecated.default)(`\`privateApis.$apiName}\` from \`@wordpress/theme\``, {
5131        since: "7.1",
5132        version: "7.3",
5133        ...options
5134      });
5135    }
5136    var privateApis = {};
5137    lock(privateApis, {
5138      get ThemeProvider() {
5139        warnPrivateApi("ThemeProvider", {
5140          alternative: "`ThemeProvider` from `@wordpress/theme`"
5141        });
5142        return ThemeProvider;
5143      },
5144      get useThemeProviderStyles() {
5145        warnPrivateApi("useThemeProviderStyles", {
5146          alternative: "`ThemeProvider` from `@wordpress/theme` for supported theming use cases",
5147          hint: "`useThemeProviderStyles` has no public replacement."
5148        });
5149        return useThemeProviderStyles;
5150      }
5151    });
5152    return __toCommonJS(index_exports);
5153  })();
5154  (window.wp ||= {}).theme = wp.theme;
5155  })();


Generated : Wed Sep 23 08:20:35 2026 Cross-referenced by PHPXref