silvery 0.18.2 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/{animation-DhINOJk8.mjs → animation-Cn64yepo.mjs} +1 -1
  2. package/dist/{animation-DhINOJk8.mjs.map → animation-Cn64yepo.mjs.map} +1 -1
  3. package/dist/{ansi-C6Qs1Wn2.mjs → ansi-CLOitHKx.mjs} +1 -1
  4. package/dist/ansi-CLOitHKx.mjs.map +1 -0
  5. package/dist/{ansi-CsjnZtAw.d.mts → ansi-Cc33mW54.d.mts} +1 -1
  6. package/dist/{ansi-CsjnZtAw.d.mts.map → ansi-Cc33mW54.d.mts.map} +1 -1
  7. package/dist/{chunk-BSw8zbkd.mjs → chunk-Vs_PY4HZ.mjs} +1 -1
  8. package/dist/cli-BKp0YtBD.mjs +4 -0
  9. package/dist/{context-BjWgrikx.mjs → context-BU5LkkIy.mjs} +8 -7
  10. package/dist/context-BU5LkkIy.mjs.map +1 -0
  11. package/dist/devtools-9QY4teqI.mjs +2 -0
  12. package/dist/{devtools-CeO9X_uv.mjs → devtools-DxkSLXDA.mjs} +4 -5
  13. package/dist/devtools-DxkSLXDA.mjs.map +1 -0
  14. package/dist/{eta-BnQSZcWf.mjs → eta-Bb3RH3wh.mjs} +1 -1
  15. package/dist/{eta-BnQSZcWf.mjs.map → eta-Bb3RH3wh.mjs.map} +1 -1
  16. package/dist/{flexily-zero-adapter-BOM0cl8R.mjs → flexily-zero-adapter-BlQa46nr.mjs} +21 -64
  17. package/dist/flexily-zero-adapter-BlQa46nr.mjs.map +1 -0
  18. package/dist/{flexily-zero-adapter-V8R3HQtK.mjs → flexily-zero-adapter-CMxXhdOL.mjs} +1 -1
  19. package/dist/{image-B0zMbVUr.mjs → image-CTII5QWI.mjs} +3 -3
  20. package/dist/image-CTII5QWI.mjs.map +1 -0
  21. package/dist/{index-Bh3U1K09.d.mts → index-BXslOebb.d.mts} +547 -137
  22. package/dist/index-BXslOebb.d.mts.map +1 -0
  23. package/dist/{index-C4vrhbud.d.mts → index-BnA7mNpo.d.mts} +1 -1
  24. package/dist/{index-C4vrhbud.d.mts.map → index-BnA7mNpo.d.mts.map} +1 -1
  25. package/dist/index-D3saHouR.d.mts +1392 -0
  26. package/dist/index-D3saHouR.d.mts.map +1 -0
  27. package/dist/index.d.mts +5 -33
  28. package/dist/index.d.mts.map +1 -1
  29. package/dist/index.mjs +13 -13
  30. package/dist/{layout-engine--drvrWjD.mjs → layout-engine-B6Cdz1yZ.mjs} +1 -1
  31. package/dist/{layout-engine-Dr3cY5U4.mjs → layout-engine-ClUgv6jB.mjs} +3 -3
  32. package/dist/{layout-engine-Dr3cY5U4.mjs.map → layout-engine-ClUgv6jB.mjs.map} +1 -1
  33. package/dist/{multi-progress-CcdqJFlf.mjs → multi-progress-Bq9Oi_WI.mjs} +3 -3
  34. package/dist/{multi-progress-CcdqJFlf.mjs.map → multi-progress-Bq9Oi_WI.mjs.map} +1 -1
  35. package/dist/{multi-progress-DQ-uUzLf.d.mts → multi-progress-DAQC7eap.d.mts} +2 -2
  36. package/dist/{multi-progress-DQ-uUzLf.d.mts.map → multi-progress-DAQC7eap.d.mts.map} +1 -1
  37. package/dist/{node-CP5WChgr.mjs → node-BeWlnCPY.mjs} +4 -4
  38. package/dist/node-BeWlnCPY.mjs.map +1 -0
  39. package/dist/{progress-bar-IrUjkLfU.mjs → progress-bar-CXE5Qfkd.mjs} +4 -4
  40. package/dist/progress-bar-CXE5Qfkd.mjs.map +1 -0
  41. package/dist/reconciler-Cwgm8hRR.mjs +8459 -0
  42. package/dist/reconciler-Cwgm8hRR.mjs.map +1 -0
  43. package/dist/{render-string-DVfgc8xr.mjs → render-string-Cbuf63Ya.mjs} +936 -136
  44. package/dist/render-string-Cbuf63Ya.mjs.map +1 -0
  45. package/dist/{render-string-BwLG7rIX.mjs → render-string-Tv-jqM16.mjs} +1 -1
  46. package/dist/runtime.d.mts +2 -2
  47. package/dist/runtime.mjs +3 -3
  48. package/dist/{spinner-BRkaJI0N.d.mts → spinner-CGo34vyR.d.mts} +2 -2
  49. package/dist/{spinner-BRkaJI0N.d.mts.map → spinner-CGo34vyR.d.mts.map} +1 -1
  50. package/dist/{spinner-BmldKx0M.mjs → spinner-CeOmcuw_.mjs} +3 -3
  51. package/dist/spinner-CeOmcuw_.mjs.map +1 -0
  52. package/dist/src-B5GjfG7g.mjs +4305 -0
  53. package/dist/src-B5GjfG7g.mjs.map +1 -0
  54. package/dist/{src-CJPXf3fC.mjs → src-C2uvC-r0.mjs} +7535 -6467
  55. package/dist/src-C2uvC-r0.mjs.map +1 -0
  56. package/dist/{src-D8kLrQBT.mjs → src-CChwjk0Z.mjs} +8 -86
  57. package/dist/src-CChwjk0Z.mjs.map +1 -0
  58. package/dist/{src-D_BS-as7.mjs → src-NCKb8kE5.mjs} +777 -776
  59. package/dist/src-NCKb8kE5.mjs.map +1 -0
  60. package/dist/theme.d.mts +2 -130
  61. package/dist/theme.mjs +3 -8
  62. package/dist/{types-B4A8Ebba.d.mts → types-BH_v3iMT.d.mts} +1 -1
  63. package/dist/{types-B4A8Ebba.d.mts.map → types-BH_v3iMT.d.mts.map} +1 -1
  64. package/dist/{types-e4dpfbSa.mjs → types-Bk2yw9Qj.mjs} +3 -3
  65. package/dist/types-Bk2yw9Qj.mjs.map +1 -0
  66. package/dist/ui/animation.d.mts +1 -1
  67. package/dist/ui/animation.mjs +1 -1
  68. package/dist/ui/ansi.d.mts +1 -1
  69. package/dist/ui/ansi.mjs +1 -1
  70. package/dist/ui/cli.d.mts +3 -3
  71. package/dist/ui/cli.mjs +5 -5
  72. package/dist/ui/display.d.mts +1 -1
  73. package/dist/ui/display.mjs.map +1 -1
  74. package/dist/ui/image.d.mts +1 -1
  75. package/dist/ui/image.mjs +1 -1
  76. package/dist/ui/input.d.mts +1 -1
  77. package/dist/ui/input.d.mts.map +1 -1
  78. package/dist/ui/input.mjs +2 -4
  79. package/dist/ui/input.mjs.map +1 -1
  80. package/dist/ui/progress.d.mts +3 -3
  81. package/dist/ui/progress.d.mts.map +1 -1
  82. package/dist/ui/progress.mjs +3 -3
  83. package/dist/ui/progress.mjs.map +1 -1
  84. package/dist/ui/react.d.mts +1 -1
  85. package/dist/ui/react.d.mts.map +1 -1
  86. package/dist/ui/react.mjs +2 -2
  87. package/dist/ui/react.mjs.map +1 -1
  88. package/dist/ui/utils.mjs +1 -1
  89. package/dist/ui/wrappers.d.mts +2 -2
  90. package/dist/ui/wrappers.mjs +1 -1
  91. package/dist/ui.d.mts +5 -5
  92. package/dist/ui.mjs +6 -6
  93. package/dist/{useLatest-6xqnGIU6.d.mts → useLatest-Bg2x4bfP.d.mts} +1 -1
  94. package/dist/{useLatest-6xqnGIU6.d.mts.map → useLatest-Bg2x4bfP.d.mts.map} +1 -1
  95. package/dist/{with-text-input-lUh9gYAG.d.mts → with-text-input-CRfoiFFG.d.mts} +3 -3
  96. package/dist/with-text-input-CRfoiFFG.d.mts.map +1 -0
  97. package/dist/{wrappers-JrEYTuKA.mjs → wrappers-UTADQkSY.mjs} +4 -4
  98. package/dist/wrappers-UTADQkSY.mjs.map +1 -0
  99. package/dist/{yoga-adapter-Bc8XT9cN.mjs → yoga-adapter-8oRGRw8V.mjs} +2 -2
  100. package/dist/{yoga-adapter-Bc8XT9cN.mjs.map → yoga-adapter-8oRGRw8V.mjs.map} +1 -1
  101. package/dist/yoga-adapter-D_CcxSt5.mjs +2 -0
  102. package/package.json +54 -45
  103. package/dist/UPNG-DvKjM6wE.mjs +0 -5076
  104. package/dist/UPNG-DvKjM6wE.mjs.map +0 -1
  105. package/dist/__vite-browser-external-2447137e-DPKHHqQK.mjs +0 -6
  106. package/dist/__vite-browser-external-2447137e-DPKHHqQK.mjs.map +0 -1
  107. package/dist/ansi-C6Qs1Wn2.mjs.map +0 -1
  108. package/dist/apng-CvSlLBtc.mjs +0 -3
  109. package/dist/apng-DFFVOItr.mjs +0 -70
  110. package/dist/apng-DFFVOItr.mjs.map +0 -1
  111. package/dist/assets/resvgjs.darwin-arm64-BtufyGW1.node +0 -0
  112. package/dist/backend-DU0Y938U.mjs +0 -13396
  113. package/dist/backend-DU0Y938U.mjs.map +0 -1
  114. package/dist/backends-BihMKFY_.mjs +0 -1181
  115. package/dist/backends-BihMKFY_.mjs.map +0 -1
  116. package/dist/backends-Dk_5G_gC.mjs +0 -3
  117. package/dist/cli-GwJ0S2In.mjs +0 -4
  118. package/dist/context-BjWgrikx.mjs.map +0 -1
  119. package/dist/derive-O_Kb1Bk_.d.mts +0 -28
  120. package/dist/derive-O_Kb1Bk_.d.mts.map +0 -1
  121. package/dist/devtools-CeO9X_uv.mjs.map +0 -1
  122. package/dist/devtools-nX4tj6OH.mjs +0 -2
  123. package/dist/flexily-zero-adapter-BOM0cl8R.mjs.map +0 -1
  124. package/dist/gif-B9Uq4qZA.mjs +0 -73
  125. package/dist/gif-B9Uq4qZA.mjs.map +0 -1
  126. package/dist/gif-BdrLRBmM.mjs +0 -3
  127. package/dist/gifenc-DfhOb4xr.mjs +0 -730
  128. package/dist/gifenc-DfhOb4xr.mjs.map +0 -1
  129. package/dist/image-B0zMbVUr.mjs.map +0 -1
  130. package/dist/index-Bh3U1K09.d.mts.map +0 -1
  131. package/dist/index-dehZ18K-.d.mts +0 -679
  132. package/dist/index-dehZ18K-.d.mts.map +0 -1
  133. package/dist/key-mapping-7k2ufK2b.mjs +0 -3
  134. package/dist/key-mapping-WLUmxjx1.mjs +0 -132
  135. package/dist/key-mapping-WLUmxjx1.mjs.map +0 -1
  136. package/dist/node-CP5WChgr.mjs.map +0 -1
  137. package/dist/progress-bar-IrUjkLfU.mjs.map +0 -1
  138. package/dist/reconciler-B8uxQxaU.mjs +0 -16482
  139. package/dist/reconciler-B8uxQxaU.mjs.map +0 -1
  140. package/dist/render-string-DVfgc8xr.mjs.map +0 -1
  141. package/dist/resvg-js-Cwipz-_J.mjs +0 -203
  142. package/dist/resvg-js-Cwipz-_J.mjs.map +0 -1
  143. package/dist/spinner-BmldKx0M.mjs.map +0 -1
  144. package/dist/src-C0sOQW-t.mjs +0 -3866
  145. package/dist/src-C0sOQW-t.mjs.map +0 -1
  146. package/dist/src-CJPXf3fC.mjs.map +0 -1
  147. package/dist/src-D8kLrQBT.mjs.map +0 -1
  148. package/dist/src-D_BS-as7.mjs.map +0 -1
  149. package/dist/theme.d.mts.map +0 -1
  150. package/dist/theme.mjs.map +0 -1
  151. package/dist/types-e4dpfbSa.mjs.map +0 -1
  152. package/dist/with-text-input-lUh9gYAG.d.mts.map +0 -1
  153. package/dist/wrapper-CE6GQ27z.mjs +0 -3527
  154. package/dist/wrapper-CE6GQ27z.mjs.map +0 -1
  155. package/dist/wrappers-JrEYTuKA.mjs.map +0 -1
  156. package/dist/yoga-adapter-B8LZpQcE.mjs +0 -2
@@ -1 +0,0 @@
1
- {"version":3,"file":"src-D8kLrQBT.mjs","names":["tty"],"sources":["../../../node_modules/.bun/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/common.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/browser.js","../../../node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/index.js","../../../node_modules/.bun/supports-color@7.2.0/node_modules/supports-color/index.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/node.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/index.js"],"sourcesContent":["/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"src-D_BS-as7.mjs","names":["CSI","ESC","oklchDeltaE","ESC","oklchDeltaE","ESC","BEL","normalizeHexChannel"],"sources":["../packages/ansi/src/detection.ts","../packages/ansi/src/sgr-codes.ts","../packages/ansi/src/utils.ts","../packages/ansi/src/color-maps.ts","../packages/ansi/src/terminal-control.ts","../packages/color/src/oklch.ts","../packages/color/src/color.ts","../packages/color/src/contrast.ts","../packages/color/src/index.ts","../packages/ansi/src/style/colors.ts","../packages/ansi/src/style/style.ts","../packages/ansi/src/style/mixed-proxy.ts","../packages/ansi/src/theme/invariants.ts","../packages/ansi/src/theme/derive.ts","../packages/ansi/src/theme/monochrome.ts","../packages/ansi/src/theme/fingerprint.ts","../packages/ansi/src/theme/types.ts","../packages/ansi/src/theme/default-schemes.ts","../packages/ansi/src/osc-palette.ts","../packages/ansi/src/osc-colors.ts","../packages/ansi/src/theme/detect.ts","../packages/ansi/src/theme/orchestrator.ts","../packages/ansi/src/color-scheme.ts","../packages/ansi/src/index.ts"],"sourcesContent":["/**\n * Terminal capability detection.\n *\n * Detects:\n * - Cursor control (can reposition cursor)\n * - Input capability (can read raw keystrokes)\n * - Color level (basic, 256, truecolor)\n * - Unicode support (can render unicode symbols)\n * - Extended underline support (curly, dotted, etc)\n * - Terminal capabilities profile (TerminalCaps)\n */\n\nimport type { ColorLevel } from \"./types\"\n\n// =============================================================================\n// Cursor Detection\n// =============================================================================\n\n/**\n * Detect if terminal supports cursor control (repositioning).\n * Returns false for dumb terminals and piped output.\n */\nexport function detectCursor(stdout: NodeJS.WriteStream): boolean {\n // Not a TTY - no cursor control\n if (!stdout.isTTY) return false\n\n // Dumb terminal - no cursor control\n if (process.env.TERM === \"dumb\") return false\n\n return true\n}\n\n// =============================================================================\n// Input Detection\n// =============================================================================\n\n/**\n * Detect if terminal can read raw keystrokes.\n * Requires stdin to be a TTY with raw mode support.\n */\nexport function detectInput(stdin: NodeJS.ReadStream): boolean {\n // Not a TTY - no raw input\n if (!stdin.isTTY) return false\n\n // Check if setRawMode is available\n return typeof stdin.setRawMode === \"function\"\n}\n\n// =============================================================================\n// Color Detection\n// =============================================================================\n\n/**\n * Known CI environments that may not support colors well.\n */\nconst CI_ENVS = [\"CI\", \"GITHUB_ACTIONS\", \"GITLAB_CI\", \"JENKINS_URL\", \"BUILDKITE\", \"CIRCLECI\", \"TRAVIS\"]\n\n/**\n * Detect color level supported by terminal.\n * Returns null if no color support.\n *\n * Checks (in order):\n * 1. NO_COLOR env var - forces no color\n * 2. FORCE_COLOR env var - forces color level\n * 3. COLORTERM=truecolor - truecolor support\n * 4. TERM patterns - detect from terminal type\n * 5. CI detection - basic colors in CI\n */\nexport function detectColor(stdout: NodeJS.WriteStream): ColorLevel | null {\n // NO_COLOR takes precedence (see https://no-color.org/)\n if (process.env.NO_COLOR !== undefined) {\n return null\n }\n\n // FORCE_COLOR overrides detection\n const forceColor = process.env.FORCE_COLOR\n if (forceColor !== undefined) {\n if (forceColor === \"0\" || forceColor === \"false\") return null\n if (forceColor === \"1\") return \"basic\"\n if (forceColor === \"2\") return \"256\"\n if (forceColor === \"3\") return \"truecolor\"\n // Any other truthy value defaults to basic\n return \"basic\"\n }\n\n // Non-TTY without FORCE_COLOR - no colors\n if (!stdout.isTTY) {\n return null\n }\n\n // Dumb terminal\n if (process.env.TERM === \"dumb\") {\n return null\n }\n\n // COLORTERM=truecolor indicates 24-bit support\n const colorTerm = process.env.COLORTERM\n if (colorTerm === \"truecolor\" || colorTerm === \"24bit\") {\n return \"truecolor\"\n }\n\n // Check TERM for color hints\n const term = process.env.TERM ?? \"\"\n\n // Known truecolor terminals\n if (\n term.includes(\"truecolor\") ||\n term.includes(\"24bit\") ||\n term.includes(\"xterm-ghostty\") ||\n term.includes(\"xterm-kitty\") ||\n term.includes(\"wezterm\")\n ) {\n return \"truecolor\"\n }\n\n // 256-color terminals\n if (term.includes(\"256color\") || term.includes(\"256\")) {\n return \"256\"\n }\n\n // Modern macOS terminals typically support truecolor\n const termProgram = process.env.TERM_PROGRAM\n if (termProgram === \"iTerm.app\" || termProgram === \"Apple_Terminal\") {\n return termProgram === \"iTerm.app\" ? \"truecolor\" : \"256\"\n }\n\n // Ghostty, WezTerm, Kitty via TERM_PROGRAM\n if (termProgram === \"Ghostty\" || termProgram === \"WezTerm\") {\n return \"truecolor\"\n }\n\n // Kitty via env var\n if (process.env.KITTY_WINDOW_ID) {\n return \"truecolor\"\n }\n\n // xterm-color variants get basic colors\n if (term.includes(\"xterm\") || term.includes(\"color\") || term.includes(\"ansi\")) {\n return \"basic\"\n }\n\n // CI environments usually support basic colors\n if (CI_ENVS.some((env) => process.env[env] !== undefined)) {\n return \"basic\"\n }\n\n // Windows Terminal (modern)\n if (process.env.WT_SESSION) {\n return \"truecolor\"\n }\n\n // Default: basic colors if TTY\n return \"basic\"\n}\n\n// =============================================================================\n// Unicode Detection\n// =============================================================================\n\n/**\n * Detect if terminal can render unicode symbols.\n * Based on TERM, locale, and known terminal apps.\n */\nexport function detectUnicode(): boolean {\n // CI environments - often UTF-8 capable but be conservative\n if (process.env.CI) {\n // GitHub Actions is UTF-8\n if (process.env.GITHUB_ACTIONS) return true\n // Other CI - check LANG\n }\n\n // Check locale for UTF-8\n const lang = process.env.LANG ?? process.env.LC_ALL ?? process.env.LC_CTYPE ?? \"\"\n if (lang.toLowerCase().includes(\"utf-8\") || lang.toLowerCase().includes(\"utf8\")) {\n return true\n }\n\n // Windows Terminal\n if (process.env.WT_SESSION) {\n return true\n }\n\n // Modern terminal programs\n const termProgram = process.env.TERM_PROGRAM ?? \"\"\n if ([\"iTerm.app\", \"Ghostty\", \"WezTerm\", \"Apple_Terminal\"].includes(termProgram)) {\n return true\n }\n\n // Kitty\n if (process.env.KITTY_WINDOW_ID) {\n return true\n }\n\n // Check TERM for modern terminals\n const term = process.env.TERM ?? \"\"\n if (term.includes(\"xterm\") || term.includes(\"rxvt\") || term.includes(\"screen\") || term.includes(\"tmux\")) {\n return true\n }\n\n // Default: assume no unicode for safety\n return false\n}\n\n// =============================================================================\n// Extended Underline Detection\n// =============================================================================\n\n/**\n * Known terminals with extended underline support.\n */\nconst EXTENDED_UNDERLINE_TERMS = [\"xterm-ghostty\", \"xterm-kitty\", \"wezterm\", \"xterm-256color\"]\n\n/**\n * Known terminal programs with extended underline support.\n */\nconst EXTENDED_UNDERLINE_PROGRAMS = [\"Ghostty\", \"iTerm.app\", \"WezTerm\"]\n\n/**\n * Detect if terminal supports extended underline styles.\n * (curly, dotted, dashed, double)\n *\n * Extended underlines use SGR 4:x (style) and SGR 58;2;r;g;b (color).\n * These are NOT supported by Terminal.app, which misinterprets them\n * as background colors causing visual artifacts.\n */\nexport function detectExtendedUnderline(): boolean {\n const term = process.env.TERM ?? \"\"\n const termProgram = process.env.TERM_PROGRAM ?? \"\"\n\n // Apple Terminal doesn't support extended underlines - check FIRST\n // because it often sets TERM=xterm-256color which would otherwise match\n if (termProgram === \"Apple_Terminal\") {\n return false\n }\n\n // Check TERM variable for known modern terminals\n if (EXTENDED_UNDERLINE_TERMS.some((t) => term.includes(t))) {\n return true\n }\n\n // Check TERM_PROGRAM for known terminal applications\n if (EXTENDED_UNDERLINE_PROGRAMS.some((p) => termProgram.includes(p))) {\n return true\n }\n\n // Kitty sets KITTY_WINDOW_ID\n if (process.env.KITTY_WINDOW_ID) {\n return true\n }\n\n // Default to false for unknown terminals\n return false\n}\n\n// =============================================================================\n// Terminal Capabilities Profile\n// =============================================================================\n\nexport interface TerminalCaps {\n /** Terminal program name (from TERM_PROGRAM) */\n program: string\n /** TERM value */\n term: string\n /** Color support level */\n colorLevel: \"none\" | \"basic\" | \"256\" | \"truecolor\"\n /** Kitty keyboard protocol supported */\n kittyKeyboard: boolean\n /** Kitty graphics protocol (inline images) */\n kittyGraphics: boolean\n /** Sixel graphics supported */\n sixel: boolean\n /** OSC 52 clipboard */\n osc52: boolean\n /** OSC 8 hyperlinks */\n hyperlinks: boolean\n /** OSC 9/99 notifications */\n notifications: boolean\n /** Bracketed paste mode */\n bracketedPaste: boolean\n /** SGR mouse tracking */\n mouse: boolean\n /** Synchronized output (DEC 2026) */\n syncOutput: boolean\n /** Unicode/emoji support */\n unicode: boolean\n /** SGR 4:x underline style subparameters (curly, dotted, dashed) */\n underlineStyles: boolean\n /** SGR 58 underline color */\n underlineColor: boolean\n /** Text-presentation emoji (⚠, ☑, ⭐) rendered as 2-wide.\n * Modern terminals (Ghostty, iTerm, Kitty) render these at emoji width (2 cells).\n * Terminal.app renders them at text width (1 cell). */\n textEmojiWide: boolean\n /** OSC 66 text sizing protocol likely supported (Kitty 0.40+, Ghostty) */\n textSizingSupported: boolean\n /** Heuristic: likely dark background (for theme selection) */\n darkBackground: boolean\n /** Heuristic: likely has Nerd Font installed (for icon selection) */\n nerdfont: boolean\n}\n\n/**\n * Default capabilities (assumes modern terminal with full support).\n */\nexport function defaultCaps(): TerminalCaps {\n return {\n program: \"\",\n term: \"\",\n colorLevel: \"truecolor\",\n kittyKeyboard: false,\n kittyGraphics: false,\n sixel: false,\n osc52: false,\n hyperlinks: false,\n notifications: false,\n bracketedPaste: true,\n mouse: true,\n syncOutput: false,\n unicode: true,\n underlineStyles: true,\n underlineColor: true,\n textEmojiWide: true,\n textSizingSupported: false,\n darkBackground: true,\n nerdfont: false,\n }\n}\n\n/**\n * Cached result of macOS dark mode detection.\n * Computed lazily on first access to avoid spawnSync at module load time.\n */\nlet cachedMacOSDarkMode: boolean | undefined\n\n/**\n * Check if macOS is in dark mode by reading the system appearance preference.\n * Uses `defaults read -g AppleInterfaceStyle` — returns \"Dark\" when dark mode\n * is active, exits non-zero when light mode. ~2ms via spawnSync.\n *\n * Result is cached after first call to avoid repeated process spawns.\n */\nfunction detectMacOSDarkMode(): boolean {\n if (cachedMacOSDarkMode !== undefined) return cachedMacOSDarkMode\n\n try {\n // Lazy import: child_process is Node.js-only and must not be loaded at\n // module level so that browser bundles (canvas adapter) never pull it in.\n const { spawnSync } = require(\"child_process\") as typeof import(\"child_process\")\n const result = spawnSync(\"defaults\", [\"read\", \"-g\", \"AppleInterfaceStyle\"], {\n encoding: \"utf-8\",\n timeout: 500,\n })\n cachedMacOSDarkMode = result.stdout?.trim() === \"Dark\"\n } catch {\n cachedMacOSDarkMode = false\n }\n\n return cachedMacOSDarkMode\n}\n\n/** Detect terminal capabilities from environment variables.\n * Synchronous. Minimal I/O: may run `defaults` on macOS for Apple_Terminal.\n */\nexport function detectTerminalCaps(): TerminalCaps {\n const program = process.env.TERM_PROGRAM ?? \"\"\n const term = process.env.TERM ?? \"\"\n const colorTerm = process.env.COLORTERM ?? \"\"\n const noColor = process.env.NO_COLOR !== undefined\n\n const isAppleTerminal = program === \"Apple_Terminal\"\n\n let colorLevel: TerminalCaps[\"colorLevel\"] = \"none\"\n if (!noColor) {\n if (isAppleTerminal) {\n colorLevel = \"256\"\n } else if (colorTerm === \"truecolor\" || colorTerm === \"24bit\") {\n colorLevel = \"truecolor\"\n } else if (term.includes(\"256color\")) {\n colorLevel = \"256\"\n } else if (process.stdout?.isTTY) {\n colorLevel = \"basic\"\n }\n }\n\n const isKitty = term === \"xterm-kitty\"\n const isITerm = program === \"iTerm.app\"\n const isGhostty = program === \"ghostty\"\n const isWezTerm = program === \"WezTerm\"\n const isAlacritty = program === \"Alacritty\"\n const isFoot = term === \"foot\" || term === \"foot-extra\"\n const isModern = isKitty || isITerm || isGhostty || isWezTerm || isFoot\n\n // Kitty v0.40+ supports OSC 66 text sizing\n let isKittyWithTextSizing = false\n if (isKitty) {\n const version = process.env.TERM_PROGRAM_VERSION ?? \"\"\n const parts = version.split(\".\")\n const major = Number(parts[0]) || 0\n const minor = Number(parts[1]) || 0\n isKittyWithTextSizing = major > 0 || (major === 0 && minor >= 40)\n }\n\n let darkBackground = !isAppleTerminal\n const colorFgBg = process.env.COLORFGBG\n if (colorFgBg) {\n const parts = colorFgBg.split(\";\")\n const bg = parseInt(parts[parts.length - 1] ?? \"\", 10)\n if (!isNaN(bg)) {\n darkBackground = bg < 7\n }\n } else if (isAppleTerminal) {\n darkBackground = detectMacOSDarkMode()\n }\n\n let nerdfont = isModern || isAlacritty\n const nfEnv = process.env.NERDFONT\n if (nfEnv === \"0\" || nfEnv === \"false\") nerdfont = false\n else if (nfEnv === \"1\" || nfEnv === \"true\") nerdfont = true\n\n const underlineExtensions = isModern || isAlacritty\n\n return {\n program,\n term,\n colorLevel,\n kittyKeyboard: isKitty || isGhostty || isWezTerm || isFoot,\n kittyGraphics: isKitty || isGhostty,\n sixel: isFoot || isWezTerm,\n osc52: isModern || isAlacritty,\n hyperlinks: isModern || isAlacritty,\n notifications: isITerm || isKitty,\n bracketedPaste: true,\n mouse: true,\n syncOutput: isModern || isAlacritty,\n unicode: true,\n underlineStyles: underlineExtensions,\n underlineColor: underlineExtensions,\n textEmojiWide: !isAppleTerminal,\n textSizingSupported: isKittyWithTextSizing, // Ghostty parses OSC 66 but doesn't render it (v1.3.0)\n darkBackground,\n nerdfont,\n }\n}\n","/**\n * SGR (Select Graphic Rendition) color code helpers.\n *\n * Shared by buffer.ts (styleToAnsiCodes) and output-phase.ts (styleTransition).\n * Emits the shortest possible SGR code string for a given color.\n */\n\n/**\n * Emit the shortest SGR code string for a foreground color.\n * - Basic 0-7: 4-bit code (30+N)\n * - Extended 8-255: 256-color (38;5;N)\n * - RGB: true color (38;2;R;G;B)\n */\nexport function fgColorCode(color: number | { r: number; g: number; b: number }): string {\n if (typeof color === \"number\") {\n if (color >= 0 && color <= 7) return `${30 + color}`\n return `38;5;${color}`\n }\n return `38;2;${color.r};${color.g};${color.b}`\n}\n\n/**\n * Emit the shortest SGR code string for a background color.\n * - Basic 0-7: 4-bit code (40+N)\n * - Extended 8-255: 256-color (48;5;N)\n * - RGB: true color (48;2;R;G;B)\n */\nexport function bgColorCode(color: number | { r: number; g: number; b: number }): string {\n if (typeof color === \"number\") {\n if (color >= 0 && color <= 7) return `${40 + color}`\n return `48;5;${color}`\n }\n return `48;2;${color.r};${color.g};${color.b}`\n}\n","/**\n * ANSI string utilities.\n *\n * This module can be imported separately via `@silvery/ansi/utils`\n * for projects that only need ANSI stripping without chalk.\n */\n\nimport stringWidth from \"string-width\"\n\n// =============================================================================\n// ANSI Regex Pattern\n// =============================================================================\n\n/**\n * ANSI escape code pattern for stripping.\n *\n * Matches:\n * - ESC CSI SGR sequences: \\x1b[31m, \\x1b[4:3m, \\x1b[38:2::255:100:0m\n * - C1 CSI SGR sequences: \\x9b31m, \\x9b4:3m\n * - ESC OSC 8 hyperlinks (BEL-terminated): \\x1b]8;;<url>\\x07\n * - ESC OSC 8 hyperlinks (ST-terminated): \\x1b]8;;<url>\\x1b\\\\\n * - C1 OSC 8 hyperlinks (BEL-terminated): \\x9d8;;<url>\\x07\n * - C1 OSC 8 hyperlinks (ST-terminated): \\x9d8;;<url>\\x1b\\\\\n * - C1 OSC 8 hyperlinks (C1 ST-terminated): \\x9d8;;<url>\\x9c\n */\nexport const ANSI_REGEX =\n /\\x1b\\[[0-9;:]*m|\\x9b[0-9;:]*m|\\x1b\\]8;;[^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)|\\x9d8;;[^\\x07\\x1b\\x9c]*(?:\\x07|\\x1b\\\\|\\x9c)/g\n\n// =============================================================================\n// String Utilities\n// =============================================================================\n\n/**\n * Strip all ANSI escape codes from a string.\n *\n * @param text - String potentially containing ANSI codes\n * @returns Clean string with all ANSI codes removed\n *\n * @example\n * ```ts\n * stripAnsi('\\x1b[31mred\\x1b[0m') // 'red'\n * stripAnsi('\\x1b[4:3mwavy\\x1b[4:0m') // 'wavy'\n * ```\n */\nexport function stripAnsi(text: string): string {\n return text.replace(ANSI_REGEX, \"\")\n}\n\n/**\n * Get the display width of a string, excluding ANSI escape codes.\n * Correctly handles CJK characters, emoji, and other wide characters.\n *\n * @param text - String potentially containing ANSI codes\n * @returns Number of terminal columns the text will occupy\n *\n * @example\n * ```ts\n * displayLength('\\x1b[31mhello\\x1b[0m') // 5\n * displayLength('hello') // 5\n * displayLength('한글') // 4 (2 chars × 2 cells each)\n * ```\n */\nexport function displayLength(text: string): number {\n return stringWidth(stripAnsi(text))\n}\n","/**\n * ANSI color maps and RGB-to-ANSI quantization.\n *\n * Provides named color maps (MODIFIERS, FG_COLORS, BG_COLORS) and\n * functions to generate SGR codes from RGB values at any color level.\n *\n * @see https://en.wikipedia.org/wiki/ANSI_escape_code#Colors\n */\n\nimport type { ColorLevel } from \"./types\"\n\n// =============================================================================\n// SGR Code Constants\n// =============================================================================\n\n/** Modifier SGR codes: open -> close */\nexport const MODIFIERS: Record<string, [number, number]> = {\n reset: [0, 0],\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n overline: [53, 55],\n}\n\n/** Foreground color name -> ANSI SGR code */\nexport const FG_COLORS: Record<string, number> = {\n black: 30,\n red: 31,\n green: 32,\n yellow: 33,\n blue: 34,\n magenta: 35,\n cyan: 36,\n white: 37,\n blackBright: 90,\n gray: 90,\n grey: 90,\n redBright: 91,\n greenBright: 92,\n yellowBright: 93,\n blueBright: 94,\n magentaBright: 95,\n cyanBright: 96,\n whiteBright: 97,\n}\n\n/** Background color name -> ANSI SGR code */\nexport const BG_COLORS: Record<string, number> = {\n bgBlack: 40,\n bgRed: 41,\n bgGreen: 42,\n bgYellow: 43,\n bgBlue: 44,\n bgMagenta: 45,\n bgCyan: 46,\n bgWhite: 47,\n bgBlackBright: 100,\n bgGray: 100,\n bgGrey: 100,\n bgRedBright: 101,\n bgGreenBright: 102,\n bgYellowBright: 103,\n bgBlueBright: 104,\n bgMagentaBright: 105,\n bgCyanBright: 106,\n bgWhiteBright: 107,\n}\n\n// =============================================================================\n// Color Quantization (truecolor -> 256 -> 16)\n// =============================================================================\n\n/** Standard ANSI 16 color RGB values for nearest-color matching.\n * Uses xterm-256 standard values for consistent mapping (matches chalk/ansi-styles). */\nexport const ANSI_16_COLORS: Array<[number, number, number]> = [\n [0, 0, 0], // 0: black\n [128, 0, 0], // 1: red\n [0, 128, 0], // 2: green\n [128, 128, 0], // 3: yellow/brown\n [0, 0, 128], // 4: blue\n [128, 0, 128], // 5: magenta\n [0, 128, 128], // 6: cyan\n [192, 192, 192], // 7: white\n [128, 128, 128], // 8: bright black (gray)\n [255, 0, 0], // 9: bright red\n [0, 255, 0], // 10: bright green\n [255, 255, 0], // 11: bright yellow\n [0, 0, 255], // 12: bright blue\n [255, 0, 255], // 13: bright magenta\n [0, 255, 255], // 14: bright cyan\n [255, 255, 255], // 15: bright white\n]\n\n/** Find nearest ANSI 16 color index for an RGB value. */\nexport function nearestAnsi16(r: number, g: number, b: number): number {\n let bestIdx = 0\n let bestDist = Infinity\n for (let i = 0; i < 16; i++) {\n const [cr, cg, cb] = ANSI_16_COLORS[i]!\n const dist = (r - cr) ** 2 + (g - cg) ** 2 + (b - cb) ** 2\n if (dist < bestDist) {\n bestDist = dist\n bestIdx = i\n }\n }\n return bestIdx\n}\n\n/** Convert RGB to 256-color index (using the 6x6x6 color cube). */\nexport function rgbToAnsi256(r: number, g: number, b: number): number {\n // Check if it's a grayscale (r === g === b)\n if (r === g && g === b) {\n if (r < 8) return 16\n if (r > 248) return 231\n return Math.round(((r - 8) / 247) * 24) + 232\n }\n // Map to 6x6x6 cube\n const ri = Math.round((r / 255) * 5)\n const gi = Math.round((g / 255) * 5)\n const bi = Math.round((b / 255) * 5)\n return 16 + 36 * ri + 6 * gi + bi\n}\n\n/**\n * Generate SGR foreground code for an RGB color at the given color level.\n * Returns the SGR parameter string (e.g., \"31\" or \"38;5;196\" or \"38;2;255;0;0\").\n */\nexport function fgFromRgb(r: number, g: number, b: number, level: ColorLevel): string {\n if (level === \"truecolor\") return `38;2;${r};${g};${b}`\n if (level === \"256\") return `38;5;${rgbToAnsi256(r, g, b)}`\n // basic: map to ANSI 16\n const idx = nearestAnsi16(r, g, b)\n return idx < 8 ? `${30 + idx}` : `${82 + idx}` // 90-97 for bright\n}\n\n/**\n * Generate SGR background code for an RGB color at the given color level.\n */\nexport function bgFromRgb(r: number, g: number, b: number, level: ColorLevel): string {\n if (level === \"truecolor\") return `48;2;${r};${g};${b}`\n if (level === \"256\") return `48;5;${rgbToAnsi256(r, g, b)}`\n const idx = nearestAnsi16(r, g, b)\n return idx < 8 ? `${40 + idx}` : `${92 + idx}` // 100-107 for bright\n}\n","/**\n * ANSI terminal control helpers.\n *\n * Pure string-returning functions for terminal control sequences.\n * No side effects, no stdout writes -- consumers compose and write.\n *\n * Covers: screen management, cursor control, scroll regions,\n * mouse tracking, keyboard protocols, and bracketed paste.\n *\n * @see https://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n */\n\n// =============================================================================\n// Base Constants\n// =============================================================================\n\n/** Escape character (0x1B) */\nconst ESC = \"\\x1b\"\n\n/** Control Sequence Introducer: ESC [ */\nconst CSI = `${ESC}[`\n\n/** Operating System Command: ESC ] */\nconst OSC = `${ESC}]`\n\n/** Bell character (0x07) -- used as string terminator in OSC sequences */\nconst BEL = \"\\x07\"\n\n// =============================================================================\n// Screen\n// =============================================================================\n\n/**\n * Enter the alternate screen buffer (DEC private mode 1049).\n * The alternate screen preserves the main scrollback buffer.\n */\nexport function enterAltScreen(): string {\n return `${CSI}?1049h`\n}\n\n/**\n * Leave the alternate screen buffer and restore the main screen.\n */\nexport function leaveAltScreen(): string {\n return `${CSI}?1049l`\n}\n\n/**\n * Clear the entire screen (ED 2 -- Erase in Display, all).\n */\nexport function clearScreen(): string {\n return `${CSI}2J`\n}\n\n/**\n * Clear the current line (EL 2 -- Erase in Line, entire line).\n */\nexport function clearLine(): string {\n return `${CSI}2K`\n}\n\n// =============================================================================\n// Cursor\n// =============================================================================\n\n/**\n * Move cursor to an absolute position.\n * Uses 0-indexed row/col; converts to 1-indexed CUP (Cursor Position).\n */\nexport function cursorTo(row: number, col: number): string {\n return `${CSI}${row + 1};${col + 1}H`\n}\n\n/**\n * Move cursor to the home position (top-left, row 0, col 0).\n */\nexport function cursorHome(): string {\n return `${CSI}H`\n}\n\n/**\n * Hide the cursor (DEC private mode 25, reset).\n */\nexport function cursorHide(): string {\n return `${CSI}?25l`\n}\n\n/**\n * Show the cursor (DEC private mode 25, set).\n */\nexport function cursorShow(): string {\n return `${CSI}?25h`\n}\n\n/**\n * Set cursor style via DECSCUSR (DEC Set Cursor Style).\n *\n * | Style | Code | Description |\n * | ----------- | ---- | ------------------------ |\n * | block | 2 | Steady block |\n * | underline | 4 | Steady underline |\n * | beam | 6 | Steady bar (vertical) |\n *\n * Steady variants are used (even codes). Blinking would be odd codes.\n * Supported by: xterm, Ghostty, Kitty, WezTerm, iTerm2, Alacritty, foot.\n */\nexport function cursorStyle(style: \"block\" | \"underline\" | \"beam\"): string {\n const code = style === \"block\" ? 2 : style === \"underline\" ? 4 : 6\n return `${CSI}${code} q`\n}\n\n// =============================================================================\n// Terminal\n// =============================================================================\n\n/**\n * Set the terminal window title using OSC 2 (window title only).\n * Does not affect icon title. Widely supported.\n */\nexport function setTitle(title: string): string {\n return `${OSC}2;${title}${BEL}`\n}\n\n/**\n * Enable mouse tracking with full hover support.\n *\n * Uses two modes:\n * - **1003** (any-event tracking): Reports ALL mouse motion — clicks, drags, AND hover.\n * This is what makes onMouseEnter/onMouseLeave work. Without it, only clicks are reported.\n * - **1006** (SGR encoding): Decimal coordinates with no 223-column limit.\n *\n * WARNING: Do NOT replace 1003 with 1000+1002. The xterm mouse modes form a hierarchy:\n * 1000 = clicks only\n * 1002 = clicks + drag (motion while button held)\n * 1003 = clicks + drag + hover (ALL motion, even without button)\n * Mode 1003 supersedes 1000 and 1002. Using 1000+1002 instead of 1003 silently\n * disables hover — onMouseEnter/onMouseLeave stop firing with no error.\n */\nexport function enableMouse(): string {\n return `${CSI}?1003h${CSI}?1006h`\n}\n\n/**\n * Disable mouse tracking. Disables in reverse order of enabling.\n */\nexport function disableMouse(): string {\n return `${CSI}?1006l${CSI}?1003l`\n}\n\n/**\n * Enable bracketed paste mode (DEC private mode 2004).\n * Terminal wraps pasted text with markers so the app can distinguish\n * paste from typed input.\n */\nexport function enableBracketedPaste(): string {\n return `${CSI}?2004h`\n}\n\n/**\n * Disable bracketed paste mode.\n */\nexport function disableBracketedPaste(): string {\n return `${CSI}?2004l`\n}\n\n/**\n * Enable synchronized update mode (DEC private mode 2026).\n * Tells the terminal to batch output and paint atomically, preventing tearing.\n * Supported by: Ghostty, Kitty, WezTerm, iTerm2, Foot, Alacritty 0.14+, tmux 3.2+.\n * Terminals that don't support it safely ignore this sequence.\n */\nexport function enableSyncUpdate(): string {\n return `${CSI}?2026h`\n}\n\n/**\n * Disable synchronized update mode.\n * Sending this when not in sync mode is a harmless no-op.\n */\nexport function disableSyncUpdate(): string {\n return `${CSI}?2026l`\n}\n\n// =============================================================================\n// Scroll\n// =============================================================================\n\n/**\n * Set the terminal scroll region (DECSTBM -- DEC Set Top and Bottom Margins).\n * Uses 0-indexed top/bottom; converts to 1-indexed for the terminal.\n *\n * Supported by most modern terminals: xterm, iTerm2, Kitty, Ghostty, WezTerm, etc.\n */\nexport function setScrollRegion(top: number, bottom: number): string {\n return `${CSI}${top + 1};${bottom + 1}r`\n}\n\n/**\n * Reset the scroll region to the full terminal height.\n */\nexport function resetScrollRegion(): string {\n return `${CSI}r`\n}\n\n/**\n * Scroll content up by N lines within the current scroll region (SU).\n * New blank lines appear at the bottom.\n */\nexport function scrollUp(n: number): string {\n if (n <= 0) return \"\"\n return `${CSI}${n}S`\n}\n\n/**\n * Scroll content down by N lines within the current scroll region (SD).\n * New blank lines appear at the top.\n */\nexport function scrollDown(n: number): string {\n if (n <= 0) return \"\"\n return `${CSI}${n}T`\n}\n\n// =============================================================================\n// Keyboard\n// =============================================================================\n\n/**\n * Enable the Kitty keyboard protocol (push mode).\n *\n * Sends CSI > flags u to opt into the specified modes.\n * Supported by: Ghostty, Kitty, WezTerm, foot. Ignored by unsupported terminals.\n *\n * Flags are a bitfield:\n *\n * | Flag | Bit | Description |\n * | ---- | --- | ----------------------------------------- |\n * | 1 | 0 | Disambiguate escape codes |\n * | 2 | 1 | Report event types (press/repeat/release) |\n * | 4 | 2 | Report alternate keys |\n * | 8 | 3 | Report all keys as escape codes |\n * | 16 | 4 | Report associated text |\n *\n * @param flags Bitfield of Kitty keyboard flags\n */\nexport function enableKittyKeyboard(flags: number = 1): string {\n return `${CSI}>${flags}u`\n}\n\n/**\n * Disable the Kitty keyboard protocol (pop mode stack).\n * Sends CSI < u to restore the previous keyboard mode.\n */\nexport function disableKittyKeyboard(): string {\n return `${CSI}<u`\n}\n","/**\n * OKLCH primitives — sRGB ↔ linear RGB ↔ OKLab ↔ OKLCH conversions and gamut mapping.\n *\n * OKLCH is the perceptually-uniform cylindrical form of OKLab (Ottosson, 2020), now\n * standardized in CSS Color Module 4. Unlike HSL, L is perceptually linear — a 10%\n * L increase looks the same whether you start at blue or yellow. This makes blends,\n * lightness adjustments, and hue rotations behave predictably.\n *\n * Conventions:\n * L ∈ [0, 1] — lightness (perceptual)\n * C ∈ [0, ~0.4] — chroma (colorfulness; naturally unbounded but sRGB caps around 0.32)\n * H ∈ [0, 360) — hue in degrees\n *\n * All hex strings are uppercase `#RRGGBB`. Invalid hex returns `null` at the parse\n * boundary; downstream functions treat that as \"pass through unchanged\".\n *\n * @module\n */\n\n/** OKLCH color: perceptually-uniform cylindrical form of OKLab. */\nexport interface OKLCH {\n /** Lightness in [0, 1]. Perceptually linear. */\n L: number\n /** Chroma in [0, ~0.4]. Natural upper bound depends on display gamut. */\n C: number\n /** Hue in [0, 360) degrees. */\n H: number\n}\n\nfunction parseHex(hex: string): [number, number, number] | null {\n if (hex[0] !== \"#\") return null\n const h = hex.slice(1)\n if (h.length === 3) {\n const r = parseInt(h[0]! + h[0]!, 16)\n const g = parseInt(h[1]! + h[1]!, 16)\n const b = parseInt(h[2]! + h[2]!, 16)\n if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return null\n return [r, g, b]\n }\n if (h.length === 6) {\n const r = parseInt(h.slice(0, 2), 16)\n const g = parseInt(h.slice(2, 4), 16)\n const b = parseInt(h.slice(4, 6), 16)\n if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return null\n return [r, g, b]\n }\n return null\n}\n\n/** sRGB channel (0–255) → linear RGB (0–1). Inverse gamma. */\nexport function srgbToLinear(c: number): number {\n const s = c / 255\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4\n}\n\n/** Linear RGB (0–1) → sRGB channel (0–255). Forward gamma. */\nexport function linearToSrgb(c: number): number {\n const clamped = Math.max(0, Math.min(1, c))\n return clamped <= 0.0031308 ? 12.92 * clamped * 255 : (1.055 * clamped ** (1 / 2.4) - 0.055) * 255\n}\n\n/** Linear RGB → OKLab (Ottosson 2020 matrix). */\nexport function linearRgbToOklab(r: number, g: number, b: number): [number, number, number] {\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b\n\n const lCbrt = Math.cbrt(l)\n const mCbrt = Math.cbrt(m)\n const sCbrt = Math.cbrt(s)\n\n const L = 0.2104542553 * lCbrt + 0.793617785 * mCbrt - 0.0040720468 * sCbrt\n const a = 1.9779984951 * lCbrt - 2.428592205 * mCbrt + 0.4505937099 * sCbrt\n const bb = 0.0259040371 * lCbrt + 0.7827717662 * mCbrt - 0.808675766 * sCbrt\n return [L, a, bb]\n}\n\n/** OKLab → linear RGB (inverse of the above). */\nexport function oklabToLinearRgb(L: number, a: number, bb: number): [number, number, number] {\n const lCbrt = L + 0.3963377774 * a + 0.2158037573 * bb\n const mCbrt = L - 0.1055613458 * a - 0.0638541728 * bb\n const sCbrt = L - 0.0894841775 * a - 1.291485548 * bb\n\n const l = lCbrt ** 3\n const m = mCbrt ** 3\n const s = sCbrt ** 3\n\n const r = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s\n const g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s\n const b = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s\n return [r, g, b]\n}\n\n/** Hex (`#RRGGBB`) → OKLCH. Returns `null` for invalid hex. */\nexport function hexToOklch(hex: string): OKLCH | null {\n const rgb = parseHex(hex)\n if (!rgb) return null\n const [r, g, b] = rgb\n const [lr, lg, lb] = [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]\n const [L, a, bb] = linearRgbToOklab(lr, lg, lb)\n const C = Math.sqrt(a * a + bb * bb)\n let H = (Math.atan2(bb, a) * 180) / Math.PI\n if (H < 0) H += 360\n return { L, C, H }\n}\n\n/** Check whether linear RGB is inside sRGB gamut (each channel in [0, 1]). */\nfunction inGamut(r: number, g: number, b: number): boolean {\n const e = 1e-5\n return r >= -e && r <= 1 + e && g >= -e && g <= 1 + e && b >= -e && b <= 1 + e\n}\n\n/**\n * OKLCH → hex. Gamut-maps out-of-sRGB colors by reducing chroma until in-gamut\n * (preserves L and H — the perceptual anchors). This is the CSS Color 4\n * recommended approach for rendering OKLCH on sRGB displays.\n */\nexport function oklchToHex(c: OKLCH): string {\n const L = Math.max(0, Math.min(1, c.L))\n const H = ((c.H % 360) + 360) % 360\n const Crad = (H * Math.PI) / 180\n\n // Chroma-reduction gamut map: binary search the largest C ≤ c.C that stays in sRGB.\n let lo = 0\n let hi = Math.max(0, c.C)\n\n // Quick path: if c.C is already in gamut, skip the search.\n const aHi = hi * Math.cos(Crad)\n const bbHi = hi * Math.sin(Crad)\n let [rHi, gHi, bHi] = oklabToLinearRgb(L, aHi, bbHi)\n if (inGamut(rHi, gHi, bHi)) {\n const r = linearToSrgb(rHi)\n const g = linearToSrgb(gHi)\n const b = linearToSrgb(bHi)\n return rgbToHexInternal(r, g, b)\n }\n\n for (let i = 0; i < 20; i++) {\n const mid = (lo + hi) / 2\n const a = mid * Math.cos(Crad)\n const bb = mid * Math.sin(Crad)\n const [rr, gg, bbLin] = oklabToLinearRgb(L, a, bb)\n if (inGamut(rr, gg, bbLin)) lo = mid\n else hi = mid\n }\n\n const a = lo * Math.cos(Crad)\n const bb = lo * Math.sin(Crad)\n ;[rHi, gHi, bHi] = oklabToLinearRgb(L, a, bb)\n return rgbToHexInternal(linearToSrgb(rHi), linearToSrgb(gHi), linearToSrgb(bHi))\n}\n\nfunction rgbToHexInternal(r: number, g: number, b: number): string {\n const clamp = (n: number) => Math.max(0, Math.min(255, Math.round(n)))\n return `#${clamp(r).toString(16).padStart(2, \"0\")}${clamp(g).toString(16).padStart(2, \"0\")}${clamp(b).toString(16).padStart(2, \"0\")}`.toUpperCase()\n}\n\n/** Shortest-arc hue interpolation (handles the 359° ↔ 1° wrap). */\nexport function lerpHue(h1: number, h2: number, t: number): number {\n const diff = ((h2 - h1 + 540) % 360) - 180\n const h = h1 + diff * t\n return ((h % 360) + 360) % 360\n}\n\n/**\n * Linear interpolate in OKLCH space (polar — interpolates L, C, H separately).\n * Good for hue rotations; can produce surprising results when blending a\n * near-neutral (tiny C) with a chromatic color because the hue of the neutral\n * endpoint is effectively meaningless.\n */\nexport function lerpOklch(a: OKLCH, b: OKLCH, t: number): OKLCH {\n return {\n L: a.L + (b.L - a.L) * t,\n C: a.C + (b.C - a.C) * t,\n H: lerpHue(a.H, b.H, t),\n }\n}\n\n/**\n * Linear interpolate in OKLab (rectangular — a, b, L interpolated directly).\n *\n * CSS Color Module 4's default interpolation space. Avoids the hue-arc\n * weirdness of `lerpOklch` when one endpoint is near-neutral (its H is\n * effectively undefined). Produces the expected \"tinted surface\" when blending\n * `bg` with an accent color.\n */\nexport function lerpOklabHex(aHex: string, bHex: string, t: number): string | null {\n const aOk = hexToOklch(aHex)\n const bOk = hexToOklch(bHex)\n if (!aOk || !bOk) return null\n\n // OKLCH → OKLab\n const aRad = (aOk.H * Math.PI) / 180\n const bRad = (bOk.H * Math.PI) / 180\n const aA = aOk.C * Math.cos(aRad)\n const aB = aOk.C * Math.sin(aRad)\n const bA = bOk.C * Math.cos(bRad)\n const bB = bOk.C * Math.sin(bRad)\n\n // Lerp in OKLab\n const L = aOk.L + (bOk.L - aOk.L) * t\n const A = aA + (bA - aA) * t\n const B = aB + (bB - aB) * t\n\n // OKLab → OKLCH → hex\n const C = Math.sqrt(A * A + B * B)\n let H = (Math.atan2(B, A) * 180) / Math.PI\n if (H < 0) H += 360\n return oklchToHex({ L, C, H })\n}\n\n/**\n * ΔE in OKLCH (≈ ΔE₀₀ quality in practice — OKLCH was designed to make Euclidean\n * distance perceptually meaningful). Hue is weighted by chroma so near-neutral\n * colors don't produce spurious large ΔH contributions.\n */\nexport function deltaE(a: OKLCH, b: OKLCH): number {\n const dL = a.L - b.L\n const dC = a.C - b.C\n const dh = (((a.H - b.H + 540) % 360) - 180) * (Math.PI / 180)\n const chromaMean = (a.C + b.C) / 2\n const dH = 2 * Math.sqrt(a.C * b.C) * Math.sin(dh / 2)\n // Weighted hue by chroma presence — neutrals contribute less H distance.\n void chromaMean // kept for readability; the 2*sqrt(Ca*Cb)*sin term already weights by chroma\n return Math.sqrt(dL * dL + dC * dC + dH * dH)\n}\n","/**\n * Color manipulation utilities.\n *\n * Operates in OKLCH for perceptual uniformity — hue rotations look right,\n * lightness changes feel linear, chroma is preserved. sRGB hex is the\n * serialization format; everything else happens in OKLCH.\n *\n * Public API stays hex-in, hex-out — callers never see OKLCH unless they\n * opt in via `oklch()` / `toHex()`. For non-hex input (ANSI names like\n * `\"red\"`), operations pass through unchanged so accidental misuse is\n * visible without crashing styled output.\n */\n\nimport type { HSL } from \"./types.ts\"\nimport type { OKLCH } from \"./oklch.ts\"\nimport { hexToOklch, oklchToHex, lerpOklch, lerpOklabHex, deltaE as oklchDeltaE } from \"./oklch.ts\"\n\n// ============================================================================\n// Hex ↔ RGB Parsing\n// ============================================================================\n\n/** Parse #rrggbb or #rgb to [r, g, b]. Returns null for invalid input. */\nexport function hexToRgb(hex: string): [number, number, number] | null {\n if (hex[0] !== \"#\") return null\n const h = hex.slice(1)\n if (h.length === 3) {\n return [parseInt(h[0]! + h[0]!, 16), parseInt(h[1]! + h[1]!, 16), parseInt(h[2]! + h[2]!, 16)]\n }\n if (h.length === 6) {\n return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)]\n }\n return null\n}\n\n/** Convert [r, g, b] (0-255) to hex string. */\nexport function rgbToHex(r: number, g: number, b: number): string {\n const clamp = (n: number) => Math.max(0, Math.min(255, Math.round(n)))\n return `#${clamp(r).toString(16).padStart(2, \"0\")}${clamp(g).toString(16).padStart(2, \"0\")}${clamp(b).toString(16).padStart(2, \"0\")}`.toUpperCase()\n}\n\n// ============================================================================\n// OKLCH entry points (convenience aliases)\n// ============================================================================\n\n/** Parse a hex color into OKLCH. Returns null for non-hex input. */\nexport function oklch(hex: string): OKLCH | null {\n return hexToOklch(hex)\n}\n\n/** Serialize OKLCH → hex. Gamut-maps by reducing chroma if out-of-sRGB. */\nexport function toHex(c: OKLCH): string {\n return oklchToHex(c)\n}\n\n// ============================================================================\n// Color Manipulation — OKLCH-native\n// ============================================================================\n\n/**\n * Blend two hex colors in OKLab space. t=0 returns a, t=1 returns b.\n * Perceptually-uniform midpoints (unlike naive RGB blending which produces\n * muddy halfway colors).\n *\n * Interpolation is done in OKLab (rectangular a/b), not OKLCH (polar). This\n * matches CSS Color Module 4's default interpolation space and avoids hue-arc\n * weirdness when one endpoint is near-neutral (its hue is effectively\n * undefined). For explicit hue-rotation blending, use `lerpOklch` directly.\n *\n * For non-hex inputs (ANSI names), returns `a` unchanged.\n */\nexport function blend(a: string, b: string, t: number): string {\n return lerpOklabHex(a, b, t) ?? a\n}\n\n/**\n * Brighten a hex color by raising OKLCH lightness. amount=0.1 adds 0.1 to L\n * (perceptually linear — 10% brighter looks 10% brighter regardless of hue).\n *\n * For non-hex inputs, returns the color unchanged.\n */\nexport function brighten(color: string, amount: number): string {\n const o = hexToOklch(color)\n if (!o) return color\n return oklchToHex({ L: Math.min(1, o.L + amount), C: o.C, H: o.H })\n}\n\n/**\n * Darken a hex color by lowering OKLCH lightness. amount=0.1 subtracts 0.1 from L.\n *\n * For non-hex inputs, returns the color unchanged.\n */\nexport function darken(color: string, amount: number): string {\n const o = hexToOklch(color)\n if (!o) return color\n return oklchToHex({ L: Math.max(0, o.L - amount), C: o.C, H: o.H })\n}\n\n/**\n * Saturate a hex color by raising OKLCH chroma. amount=0.05 adds 0.05 to C.\n * Gamut mapping in `toHex` clamps impossible chroma back to the sRGB-visible max.\n *\n * For non-hex inputs, returns the color unchanged.\n */\nexport function saturate(color: string, amount: number): string {\n const o = hexToOklch(color)\n if (!o) return color\n return oklchToHex({ L: o.L, C: Math.max(0, o.C + amount), H: o.H })\n}\n\n/**\n * Desaturate a hex color by lowering OKLCH chroma. amount=0.4 reduces C by 40%\n * (relative — consistent with the original HSL-based contract). For a flat\n * subtraction, use `saturate(color, -amount)`.\n *\n * For non-hex inputs, returns the color unchanged.\n */\nexport function desaturate(color: string, amount: number): string {\n const o = hexToOklch(color)\n if (!o) return color\n return oklchToHex({ L: o.L, C: Math.max(0, o.C * (1 - amount)), H: o.H })\n}\n\n/**\n * Get the complementary color (180° hue rotation) in OKLCH. Preserves L + C,\n * so the complement has the same perceived brightness and colorfulness.\n *\n * For non-hex inputs, returns the color unchanged.\n */\nexport function complement(color: string): string {\n const o = hexToOklch(color)\n if (!o) return color\n return oklchToHex({ L: o.L, C: o.C, H: (o.H + 180) % 360 })\n}\n\n/** Perceptual color distance (ΔE) between two hex colors, in OKLCH. */\nexport function colorDistance(a: string, b: string): number | null {\n const oa = hexToOklch(a)\n const ob = hexToOklch(b)\n if (!oa || !ob) return null\n return oklchDeltaE(oa, ob)\n}\n\n// ============================================================================\n// Luminance (WCAG 2.1)\n// ============================================================================\n\n/**\n * Linearize an sRGB channel value (0-255) for WCAG 2.1 luminance.\n * Kept for WCAG contrast checking — OKLCH uses its own linearization.\n */\nexport function channelLuminance(c: number): number {\n const s = c / 255\n return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4)\n}\n\n/**\n * Compute relative luminance of a hex color per WCAG 2.1.\n * Returns a value between 0 (darkest) and 1 (lightest), or null for invalid input.\n */\nexport function relativeLuminance(hex: string): number | null {\n const rgb = hexToRgb(hex)\n if (!rgb) return null\n return 0.2126 * channelLuminance(rgb[0]) + 0.7152 * channelLuminance(rgb[1]) + 0.0722 * channelLuminance(rgb[2])\n}\n\n/**\n * Pick black or white text for readability on the given background.\n * Uses WCAG 2.1 relative luminance.\n */\nexport function contrastFg(bg: string): \"#000000\" | \"#FFFFFF\" {\n const luminance = relativeLuminance(bg)\n if (luminance === null) return \"#FFFFFF\" // default to white for non-hex\n return luminance > 0.179 ? \"#000000\" : \"#FFFFFF\"\n}\n\n// ============================================================================\n// HSL Utilities — kept for serialization compatibility (HSL is NOT the color math engine)\n// ============================================================================\n\nexport function rgbToHsl(r: number, g: number, b: number): HSL {\n r /= 255\n g /= 255\n b /= 255\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b)\n const l = (max + min) / 2\n if (max === min) return [0, 0, l]\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n let h = 0\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n else if (max === g) h = ((b - r) / d + 2) / 6\n else h = ((r - g) / d + 4) / 6\n return [h * 360, s, l]\n}\n\nexport function hslToHex(h: number, s: number, l: number): string {\n h = ((h % 360) + 360) % 360\n const a = s * Math.min(l, 1 - l)\n const f = (n: number) => {\n const k = (n + h / 30) % 12\n return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\n }\n return rgbToHex(f(0) * 255, f(8) * 255, f(4) * 255)\n}\n\nexport function hexToHsl(hex: string): HSL | null {\n const rgb = hexToRgb(hex)\n if (!rgb) return null\n return rgbToHsl(rgb[0], rgb[1], rgb[2])\n}\n","/**\n * WCAG 2.1 contrast checking and enforcement.\n *\n * - checkContrast(): measure the ratio between two colors (WCAG 2.1)\n * - ensureContrast(): adjust a color until it meets a target ratio\n *\n * `ensureContrast` operates in OKLCH — it preserves hue and chroma while\n * walking lightness toward the contrast target. This avoids the hue-shift\n * artifacts HSL-based contrast repair can introduce.\n */\n\nimport { hexToOklch, oklchToHex } from \"./oklch.ts\"\nimport { contrastFg, relativeLuminance } from \"./color.ts\"\nimport type { ContrastResult } from \"./types.ts\"\n\n/**\n * Check contrast ratio between foreground and background colors.\n *\n * Uses the WCAG 2.1 relative luminance formula to compute the contrast\n * ratio and check AA (>= 4.5:1) and AAA (>= 7:1) compliance for normal text.\n *\n * @param fg - Foreground hex color (e.g. \"#FFFFFF\")\n * @param bg - Background hex color (e.g. \"#000000\")\n * @returns Contrast ratio and AA/AAA pass/fail, or null if colors are not valid hex\n *\n * @example\n * ```typescript\n * const result = checkContrast(\"#FFFFFF\", \"#000000\")\n * // { ratio: 21, aa: true, aaa: true }\n *\n * const poor = checkContrast(\"#777777\", \"#888888\")\n * // { ratio: ~1.3, aa: false, aaa: false }\n * ```\n */\nexport function checkContrast(fg: string, bg: string): ContrastResult | null {\n const fgLum = relativeLuminance(fg)\n const bgLum = relativeLuminance(bg)\n if (fgLum === null || bgLum === null) return null\n\n const lighter = Math.max(fgLum, bgLum)\n const darker = Math.min(fgLum, bgLum)\n const ratio = (lighter + 0.05) / (darker + 0.05)\n\n return {\n ratio, // exact — callers round for display if needed\n aa: ratio >= 4.5,\n aaa: ratio >= 7,\n }\n}\n\n/**\n * Adjust a color's OKLCH lightness until it meets a minimum WCAG contrast ratio\n * against a reference color. Preserves hue and chroma — only lightness shifts,\n * and only as much as needed.\n *\n * Returns the original color unchanged if it already meets the target.\n *\n * For impossible targets (e.g. 21:1 against mid-gray), returns the\n * best achievable color (near-black or near-white in the same hue).\n *\n * @param color - The color to adjust (hex)\n * @param against - The reference background color (hex)\n * @param minRatio - Minimum contrast ratio to achieve (e.g. 4.5 for AA)\n * @returns Adjusted hex color meeting the target, or original if already OK\n *\n * @example\n * ```typescript\n * // Yellow on white — too low contrast, gets darkened (perceptually; same hue preserved)\n * ensureContrast(\"#FFAB91\", \"#FFFFFF\", 4.5)\n *\n * // Blue on dark bg — already fine, returned unchanged\n * ensureContrast(\"#5C9FFF\", \"#1A1A2E\", 4.5) // → \"#5C9FFF\"\n * ```\n */\nexport function ensureContrast(color: string, against: string, minRatio: number): string {\n const current = checkContrast(color, against)\n if (!current) return color // non-hex input — return unchanged\n if (current.ratio >= minRatio) return color\n\n const o = hexToOklch(color)\n if (!o) return color\n\n // Light bg → darken (decrease L), dark bg → lighten (increase L)\n const lightBg = contrastFg(against) === \"#000000\"\n\n // Binary search the minimum L shift (in OKLCH) that achieves the target.\n let lo: number, hi: number\n if (lightBg) {\n lo = 0 // maximum darkening\n hi = o.L // current lightness\n } else {\n lo = o.L // current lightness\n hi = 1 // maximum lightening\n }\n\n for (let i = 0; i < 24; i++) {\n const mid = (lo + hi) / 2\n const candidate = oklchToHex({ L: mid, C: o.C, H: o.H })\n const r = checkContrast(candidate, against)\n if (!r) break\n if (lightBg) {\n // Lower L = more contrast. Find highest L that still passes.\n if (r.ratio >= minRatio) lo = mid\n else hi = mid\n } else {\n // Higher L = more contrast. Find lowest L that still passes.\n if (r.ratio >= minRatio) hi = mid\n else lo = mid\n }\n }\n\n return oklchToHex({ L: lightBg ? lo : hi, C: o.C, H: o.H })\n}\n","/**\n * @silvery/color — Pure color math utilities.\n *\n * OKLCH-native internals with hex-in / hex-out public signatures. OKLCH is\n * perceptually uniform (CSS Color Module 4), so blends, lightness shifts, and\n * hue rotations look correct regardless of starting color.\n *\n * @example\n * ```ts\n * import { blend, brighten, checkContrast, oklch, toHex } from \"@silvery/color\"\n *\n * blend(\"#000\", \"#fff\", 0.5) // OKLCH midpoint (not muddy RGB gray)\n * brighten(\"#0050A0\", 0.1) // +0.1 OKLCH lightness, same hue\n * checkContrast(\"#fff\", \"#000\") // { ratio: 21, aa: true, aaa: true }\n *\n * // Drop into OKLCH directly:\n * const c = oklch(\"#FF5500\")! // { L, C, H }\n * toHex({ L: c.L, C: c.C, H: (c.H + 30) % 360 }) // 30° hue shift\n * ```\n *\n * @module\n */\n\n// Types\nexport type { HSL, ContrastResult } from \"./types.ts\"\nexport type { OKLCH } from \"./oklch.ts\"\n\n// Color math — OKLCH-native, hex public API\nexport {\n hexToRgb,\n rgbToHex,\n blend,\n brighten,\n darken,\n saturate,\n channelLuminance,\n relativeLuminance,\n contrastFg,\n rgbToHsl,\n hslToHex,\n hexToHsl,\n desaturate,\n complement,\n oklch,\n toHex,\n colorDistance,\n} from \"./color.ts\"\n\n// OKLCH primitives — for callers doing their own color math\nexport {\n hexToOklch,\n oklchToHex,\n lerpOklch,\n lerpOklabHex,\n lerpHue,\n deltaE,\n srgbToLinear,\n linearToSrgb,\n linearRgbToOklab,\n oklabToLinearRgb,\n} from \"./oklch.ts\"\n\n// Contrast checking and enforcement (WCAG 2.1)\nexport { checkContrast, ensureContrast } from \"./contrast.ts\"\n","/**\n * Color utilities — ANSI color maps, quantization, and theme token defaults.\n *\n * Re-exports from sibling modules (since we're inside @silvery/ansi now).\n */\n\nimport type { ColorLevel } from \"../types.ts\"\nimport { hexToRgb } from \"@silvery/color\"\n\nexport { hexToRgb }\n\n// Re-export ANSI primitives from sibling module\nexport { MODIFIERS, FG_COLORS, BG_COLORS, fgFromRgb, bgFromRgb } from \"../color-maps.ts\"\nexport type { ColorLevel }\n\n// =============================================================================\n// Theme Token Defaults (fallbacks when no theme is provided)\n// =============================================================================\n\n/** Default ANSI codes for theme tokens when no theme object is given. */\nexport const THEME_TOKEN_DEFAULTS: Record<string, number> = {\n primary: 33, // yellow\n secondary: 36, // cyan\n accent: 35, // magenta\n error: 31, // red\n warning: 33, // yellow\n success: 32, // green\n info: 36, // cyan\n muted: 2, // dim (modifier, not color)\n link: 34, // blue + underline\n border: 90, // gray\n surface: 37, // white\n}\n","/**\n * createStyle() — theme-aware chalk replacement.\n *\n * Returns a chainable Proxy-based style object. Access properties to\n * accumulate styles, call with a string to apply them.\n *\n * @example\n * ```ts\n * const s = createStyle()\n * s.bold.red(\"error\") // \"\\x1b[1;31merror\\x1b[22;39m\"\n * s.hex(\"#ff0000\")(\"text\") // truecolor foreground\n *\n * const s = createStyle({ theme })\n * s.primary(\"deploy\") // resolves $primary from theme\n * ```\n */\n\nimport { detectColor } from \"../detection.ts\"\n\nimport { BG_COLORS, FG_COLORS, MODIFIERS, THEME_TOKEN_DEFAULTS, bgFromRgb, fgFromRgb, hexToRgb } from \"./colors.ts\"\nimport type { Style, StyleOptions, ThemeLike } from \"./types.ts\"\n\n// =============================================================================\n// Core Types\n// =============================================================================\n\n/** Accumulated style state for one chain. */\ninterface ChainState {\n opens: string[] // SGR open codes (e.g., \"1\", \"31\", \"38;2;255;0;0\")\n closes: string[] // SGR close codes (e.g., \"22\", \"39\")\n visible?: boolean // chalk's `visible` modifier — suppresses output when level === 0\n}\n\n// =============================================================================\n// Theme Token Resolution\n// =============================================================================\n\n/**\n * Resolve a color value against a theme — the canonical token resolver.\n *\n * If the color starts with `$`, looks up the token in the theme.\n * Supports `$primary`, `$surface-bg` (hyphens stripped), `$color0`–`$color15` (palette).\n * Non-`$` strings pass through unchanged. Returns undefined if no theme or unknown token.\n *\n * Compatible with @silvery/theme's Theme type (or any object with string properties).\n */\nexport function resolveThemeColor(name: string | undefined, theme: object | undefined): string | undefined {\n if (!name) return undefined\n if (!name.startsWith(\"$\")) return name\n if (!theme) return undefined\n return resolveToken(name, theme as ThemeLike)\n}\n\n/**\n * Primer-style alias table. Maps new compound names (hyphens stripped) to the\n * existing Theme keys. Lets `$fg-muted` / `$bg-surface` / `$border-focus` / etc.\n * work alongside the legacy Ink-style names like `$muted` / `$surfacebg` /\n * `$focusborder`. Enables the Primer-style token rename (theme-system-v2) to\n * roll out gradually without breaking existing consumers.\n */\nconst PRIMER_ALIASES: Record<string, string> = {\n // Text slots — \"fg-<role>\"\n fgmuted: \"muted\",\n fgdisabled: \"disabledfg\",\n fgcursor: \"cursor\", // fg-cursor = text on cursor bg\n fgselected: \"selection\",\n fginverse: \"inverse\",\n fgonsurface: \"surface\",\n fgonpopover: \"popover\",\n fgonprimary: \"primaryfg\",\n fgonsecondary: \"secondaryfg\",\n fgonaccent: \"accentfg\",\n fgonerror: \"errorfg\",\n fgonwarning: \"warningfg\",\n fgonsuccess: \"successfg\",\n fgoninfo: \"infofg\",\n // Background slots — \"bg-<role>\"\n bgmuted: \"mutedbg\",\n bgsurface: \"surfacebg\",\n bgpopover: \"popoverbg\",\n bginverse: \"inversebg\",\n bgselected: \"selectionbg\",\n bgcursor: \"cursorbg\",\n // Border slots — \"border-<role>\"\n borderfocus: \"focusborder\",\n borderinput: \"inputborder\",\n // Brand tokens (Apple system-color model) — kebab-case → camelCase in Theme\n brandhover: \"brandHover\",\n brandactive: \"brandActive\",\n brandred: \"brandRed\",\n brandorange: \"brandOrange\",\n brandyellow: \"brandYellow\",\n brandgreen: \"brandGreen\",\n brandteal: \"brandTeal\",\n brandblue: \"brandBlue\",\n brandpurple: \"brandPurple\",\n brandpink: \"brandPink\",\n}\n\n/** Internal: resolve a token name (with or without $ prefix) against a theme. */\nfunction resolveToken(name: string, theme: ThemeLike | undefined): string | undefined {\n if (!theme) return undefined\n const token = name.startsWith(\"$\") ? name.slice(1) : name\n // Palette colors: $color0–$color15\n if (token.startsWith(\"color\")) {\n const idx = parseInt(token.slice(5), 10)\n if (idx >= 0 && idx < 16 && theme.palette && idx < theme.palette.length) {\n return theme.palette[idx]\n }\n }\n // Strip hyphens for lookup ($surface-bg → surfacebg)\n const key = token.replace(/-/g, \"\")\n const themeObj = theme as Record<string, unknown>\n // Try direct key first (legacy names: muted, surfacebg, focusborder, …)\n const direct = themeObj[key]\n if (typeof direct === \"string\") return direct\n // Try Primer-style alias (new names: fgmuted, bgsurface, borderfocus, …)\n const aliased = PRIMER_ALIASES[key]\n if (aliased) {\n const val = themeObj[aliased]\n if (typeof val === \"string\") return val\n }\n return undefined\n}\n\n// =============================================================================\n// Proxy-based Style Chain\n// =============================================================================\n\nconst ESC = \"\\x1b[\"\nconst KNOWN_METHODS = new Set([\"hex\", \"rgb\", \"bgHex\", \"bgRgb\", \"ansi256\", \"bgAnsi256\", \"resolve\"])\nconst THEME_TOKENS = new Set([\n \"primary\",\n \"secondary\",\n \"accent\",\n \"error\",\n \"warning\",\n \"success\",\n \"info\",\n \"muted\",\n \"link\",\n \"border\",\n \"surface\",\n])\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/** Convert chalk numeric level (0-3) to ColorLevel. */\nfunction fromChalkLevel(n: number): import(\"../types.ts\").ColorLevel | null {\n if (n <= 0) return null\n if (n === 1) return \"basic\"\n if (n === 2) return \"256\"\n return \"truecolor\"\n}\n\n/** Convert ColorLevel to chalk numeric level (0-3). */\nfunction toChalkLevel(cl: import(\"../types.ts\").ColorLevel | null): number {\n if (cl === null) return 0\n if (cl === \"basic\") return 1\n if (cl === \"256\") return 2\n return 3\n}\n\n/**\n * Create a style object for terminal output.\n *\n * @param options - Color level and optional theme\n * @returns A chainable style object (chalk-compatible API)\n *\n * @example\n * ```ts\n * import { createStyle } from \"@silvery/ansi\"\n *\n * const s = createStyle()\n * console.log(s.bold.red(\"Error!\"))\n * console.log(s.hex(\"#818cf8\")(\"Indigo\"))\n *\n * // With theme\n * const s = createStyle({ theme })\n * console.log(s.primary(\"Deploy\"))\n * console.log(s.success(\"Done\"))\n * ```\n */\nexport function createStyle(options?: StyleOptions): Style {\n // Mutable level ref — shared across all chains from this instance\n const ref = {\n level: null as import(\"../types.ts\").ColorLevel | null,\n theme: options?.theme as ThemeLike | undefined,\n }\n\n if (options?.level !== undefined) {\n ref.level = options.level\n } else {\n try {\n ref.level = detectColor(process.stdout)\n } catch {\n ref.level = null\n }\n }\n\n // Root chain with mutable level via ref\n const root = createChainWithRef({ opens: [], closes: [] }, ref)\n return root\n}\n\n/**\n * Create a plain style object — no theme, just color level.\n * Equivalent to `createStyle()` without a theme.\n *\n * @param level - Color level override. Auto-detected if omitted.\n */\nexport function createPlainStyle(level?: import(\"../types.ts\").ColorLevel | null): Style {\n return createStyle({ level })\n}\n\n/**\n * Pre-configured global style instance.\n * Auto-detects color level from the terminal.\n * No theme by default — use `createStyle({ theme })` for themed output.\n */\nexport const style: Style = createStyle()\n\n/**\n * Create a chain that reads level from a mutable ref.\n * This allows `style.level = 3` to affect all subsequent calls.\n */\nfunction createChainWithRef(\n state: ChainState,\n ref: { level: import(\"../types.ts\").ColorLevel | null; theme: ThemeLike | undefined },\n): Style {\n // proxyRef lets the handler reference its own proxy (needed for Function.prototype methods)\n const proxyRef: { proxy: Style | null } = { proxy: null }\n const handler: ProxyHandler<(...args: unknown[]) => string> = {\n apply(_target, _thisArg, args) {\n const level = ref.level\n\n // chalk compat: visible modifier suppresses output when level === 0\n if (state.visible && level === null) return \"\"\n\n // Resolve text from args — supports: string, multiple args (chalk compat), template literals\n let text: string\n if (args.length === 0) {\n text = \"\"\n } else if (Array.isArray(args[0]) && \"raw\" in args[0]) {\n text = String.raw(args[0] as TemplateStringsArray, ...args.slice(1))\n } else if (args.length > 1) {\n text = args.map((a) => String(a ?? \"\")).join(\" \")\n } else {\n text = String(args[0] ?? \"\")\n }\n\n // chalk compat: don't output escape codes if the input is empty\n if (text === \"\") return \"\"\n\n if (level === null || state.opens.length === 0) return text\n\n const open = `${ESC}${state.opens.join(\";\")}m`\n const close = `${ESC}${state.closes.join(\";\")}m`\n\n // chalk compat: replace inner close codes with close+reopen to restore parent styles.\n // When nesting like chalk.red(\"a\" + chalk.green(\"c\") + \"b\"), the inner chalk.green(\"c\")\n // produces \\x1b[32mc\\x1b[39m. The \\x1b[39m would reset fg to default, losing the red.\n // Chalk replaces inner close codes with close+open to restore the parent color.\n // This must happen BEFORE line-break splitting to avoid double-replacement.\n for (const closeCode of state.closes) {\n const closeSeq = `${ESC}${closeCode}m`\n const parts = text.split(closeSeq)\n if (parts.length > 1) {\n text = parts.join(`${closeSeq}${open}`)\n }\n }\n\n // chalk compat: split on line breaks — close before \\n, reopen after\n if (text.includes(\"\\n\")) {\n text = text.replace(/\\r?\\n/g, `${close}$&${open}`)\n }\n\n return `${open}${text}${close}`\n },\n\n get(_target, prop) {\n if (typeof prop === \"symbol\") return undefined\n\n // level getter/setter (chalk compat)\n if (prop === \"level\") return toChalkLevel(ref.level)\n\n // resolve() method\n if (prop === \"resolve\") {\n return (token: string): string | undefined => resolveToken(token, ref.theme)\n }\n\n // chalk compat: visible modifier — pass-through when level > 0, suppress when level === 0\n if (prop === \"visible\") {\n return createChainWithRef({ ...state, visible: true }, ref)\n }\n\n // Function.prototype methods — chalk compat (call, apply, bind)\n // Return the method bound to the proxy so the apply trap fires\n if (prop === \"call\" || prop === \"apply\" || prop === \"bind\") {\n return Function.prototype[prop as \"call\" | \"apply\" | \"bind\"].bind(proxyRef.proxy!)\n }\n\n const level = ref.level\n\n // Color methods\n if (prop === \"hex\" || prop === \"bgHex\") {\n return (color: string) => {\n if (level === null) return createChainWithRef(state, ref)\n const rgb = hexToRgb(color)\n if (!rgb) return createChainWithRef(state, ref)\n const code =\n prop === \"hex\" ? fgFromRgb(rgb[0], rgb[1], rgb[2], level) : bgFromRgb(rgb[0], rgb[1], rgb[2], level)\n const close = prop === \"hex\" ? \"39\" : \"49\"\n return createChainWithRef({ opens: [...state.opens, code], closes: [...state.closes, close] }, ref)\n }\n }\n\n if (prop === \"rgb\" || prop === \"bgRgb\") {\n return (r: number, g: number, b: number) => {\n if (level === null) return createChainWithRef(state, ref)\n const code = prop === \"rgb\" ? fgFromRgb(r, g, b, level) : bgFromRgb(r, g, b, level)\n const close = prop === \"rgb\" ? \"39\" : \"49\"\n return createChainWithRef({ opens: [...state.opens, code], closes: [...state.closes, close] }, ref)\n }\n }\n\n if (prop === \"ansi256\") {\n return (code: number) => {\n if (level === null) return createChainWithRef(state, ref)\n return createChainWithRef({ opens: [...state.opens, `38;5;${code}`], closes: [...state.closes, \"39\"] }, ref)\n }\n }\n\n if (prop === \"bgAnsi256\") {\n return (code: number) => {\n if (level === null) return createChainWithRef(state, ref)\n return createChainWithRef({ opens: [...state.opens, `48;5;${code}`], closes: [...state.closes, \"49\"] }, ref)\n }\n }\n\n // Modifiers\n if (prop in MODIFIERS) {\n if (level === null) return createChainWithRef(state, ref)\n const [open, close] = MODIFIERS[prop]!\n return createChainWithRef(\n { opens: [...state.opens, String(open)], closes: [...state.closes, String(close)] },\n ref,\n )\n }\n\n // Foreground colors\n if (prop in FG_COLORS) {\n if (level === null) return createChainWithRef(state, ref)\n return createChainWithRef(\n { opens: [...state.opens, String(FG_COLORS[prop]!)], closes: [...state.closes, \"39\"] },\n ref,\n )\n }\n\n // Background colors\n if (prop in BG_COLORS) {\n if (level === null) return createChainWithRef(state, ref)\n return createChainWithRef(\n { opens: [...state.opens, String(BG_COLORS[prop]!)], closes: [...state.closes, \"49\"] },\n ref,\n )\n }\n\n // Theme tokens\n if (THEME_TOKENS.has(prop)) {\n if (level === null) return createChainWithRef(state, ref)\n const hex = resolveToken(prop, ref.theme)\n if (hex) {\n const rgb = hexToRgb(hex)\n if (rgb) {\n const code = fgFromRgb(rgb[0], rgb[1], rgb[2], level)\n if (prop === \"link\") {\n return createChainWithRef(\n { opens: [...state.opens, code, \"4\"], closes: [...state.closes, \"39\", \"24\"] },\n ref,\n )\n }\n return createChainWithRef({ opens: [...state.opens, code], closes: [...state.closes, \"39\"] }, ref)\n }\n }\n const fallback = THEME_TOKEN_DEFAULTS[prop]\n if (fallback !== undefined) {\n if (prop === \"muted\") {\n return createChainWithRef(\n { opens: [...state.opens, String(fallback)], closes: [...state.closes, \"22\"] },\n ref,\n )\n }\n if (prop === \"link\") {\n return createChainWithRef(\n {\n opens: [...state.opens, String(fallback), \"4\"],\n closes: [...state.closes, \"39\", \"24\"],\n },\n ref,\n )\n }\n return createChainWithRef({ opens: [...state.opens, String(fallback)], closes: [...state.closes, \"39\"] }, ref)\n }\n }\n\n return undefined\n },\n\n set(_target, prop, value) {\n if (prop === \"level\") {\n ref.level = fromChalkLevel(value as number)\n return true\n }\n return false\n },\n\n has(_target, prop) {\n if (prop === \"level\") return true\n if (typeof prop === \"symbol\") return false\n return (\n prop in MODIFIERS || prop in FG_COLORS || prop in BG_COLORS || THEME_TOKENS.has(prop) || KNOWN_METHODS.has(prop)\n )\n },\n }\n\n const target = function () {} as unknown as (...args: unknown[]) => string\n const proxy = new Proxy(target, handler) as unknown as Style\n proxyRef.proxy = proxy\n return proxy\n}\n","/**\n * Mixed style proxy — combines a Style instance with additional properties.\n *\n * Used by ag-term to create a Term that is both a style chain (term.bold.red('text'))\n * and a terminal interface (term.write(), term.cols, etc.).\n */\n\nimport type { Style } from \"./types.ts\"\n\n/** Methods on Style that take arguments and return a new Style chain. */\nconst STYLE_METHODS = new Set([\"hex\", \"bgHex\", \"rgb\", \"bgRgb\", \"ansi256\", \"bgAnsi256\"])\n\n/**\n * Create a proxy that wraps a style instance with additional properties.\n *\n * The proxy makes the result:\n * - Callable: result('text') applies current styles\n * - Chainable: result.bold.red('text') chains styles\n * - Extended: result.anyExtraProp accesses extra properties\n *\n * Extra properties take priority over style properties on name collision.\n */\nexport function createMixedStyle<T extends object>(style: Style, extra: T): Style & T {\n return createChainProxy(style, extra) as Style & T\n}\n\n/**\n * Internal recursive proxy builder for style chain + extra properties.\n */\nfunction createChainProxy<T extends object>(currentStyle: Style, extra: T): Style & T {\n const handler: ProxyHandler<(...args: unknown[]) => string> = {\n apply(_target, _thisArg, args) {\n // Forward all args to the Style proxy — it handles multi-arg, template literals, etc.\n return (currentStyle as unknown as (...a: unknown[]) => string)(...args)\n },\n\n get(_target, prop) {\n if (prop in extra) {\n const value = (extra as Record<string | symbol, unknown>)[prop]\n if (typeof value === \"function\") return value\n return value\n }\n\n if (typeof prop === \"symbol\") {\n if (prop === Symbol.dispose) {\n return (extra as Record<symbol, unknown>)[Symbol.dispose]\n }\n return undefined\n }\n\n if (STYLE_METHODS.has(prop)) {\n const method = currentStyle[prop as keyof Style]\n if (typeof method === \"function\") {\n return (...args: unknown[]) => {\n const newStyle = (method as Function).apply(currentStyle, args) as Style\n return createChainProxy(newStyle, extra)\n }\n }\n }\n\n const styleProp = currentStyle[prop as keyof Style]\n if (styleProp !== undefined) {\n if (typeof styleProp === \"function\" || typeof styleProp === \"object\") {\n return createChainProxy(styleProp as Style, extra)\n }\n return styleProp\n }\n\n return undefined\n },\n\n set(_target, prop, value) {\n ;(extra as Record<string | symbol, unknown>)[prop] = value\n return true\n },\n\n defineProperty(_target, prop, descriptor) {\n Object.defineProperty(extra, prop, descriptor)\n return true\n },\n\n has(_target, prop) {\n if (prop in extra) return true\n if (typeof prop === \"string\" && prop in currentStyle) return true\n return false\n },\n }\n\n const proxyTarget = function () {} as unknown as (...args: unknown[]) => string\n return new Proxy(proxyTarget, handler) as unknown as Style & T\n}\n","/**\n * Theme invariants — post-derivation visibility + optional WCAG checks.\n *\n * Two independent invariant groups:\n *\n * 1. **Visibility (always checked)** — selection and cursor must be\n * distinguishable from bg. These fail silently in the old system because\n * ensureContrast doesn't touch selectionbg/cursorbg; you get \"invisible\n * selection\" bugs that only surface via user complaints.\n *\n * 2. **WCAG contrast (opt-in)** — `deriveTheme()` already runs `ensureContrast`\n * on every text/bg pair as it builds the Theme (lenient auto-adjust). A\n * second validation pass is redundant for normal use. Enable it explicitly\n * at build time to *verify* that shipped themes meet the targets, or when\n * loading a hand-authored Theme object that skipped `deriveTheme`.\n *\n * This is why `validateThemeInvariants` defaults to `{ wcag: false }` — the\n * existing derivation already handles contrast. Callers opt in via\n * `validateThemeInvariants(theme, { wcag: true })` for strict pre-ship audits.\n */\n\nimport { checkContrast, hexToOklch, deltaE as oklchDeltaE } from \"@silvery/color\"\nimport type { Theme } from \"./types.ts\"\n\n// WCAG thresholds (match derive.ts)\nexport const AA_RATIO = 4.5\nexport const LARGE_RATIO = 3.0\nexport const FAINT_RATIO = 1.5\n\n// Visibility thresholds — calibrated against real terminal schemes (Catppuccin,\n// Dracula, Nord, Solarized). The design spec's 0.15 was aspirational; light\n// themes have less L range to work with, so a 0.08 floor is realistic while\n// still catching \"selection invisible\" bugs.\nexport const SELECTION_DELTA_L = 0.08\nexport const CURSOR_DELTA_E = 0.15 // OKLCH ΔE (≈15 on ×100 scale)\n\nexport interface InvariantViolation {\n /** Which invariant failed (e.g. \"contrast:fg/popoverbg\", \"visibility:selection\"). */\n rule: string\n /** Token pair or concept involved. */\n tokens: string[]\n /** Measured value (e.g. contrast ratio or ΔE). */\n actual: number\n /** Required threshold. */\n required: number\n /** Human-readable error for logs/throws. */\n message: string\n}\n\nexport interface InvariantResult {\n /** True when all invariants pass. */\n ok: boolean\n /** Every failing invariant. */\n violations: InvariantViolation[]\n}\n\nexport interface InvariantOptions {\n /**\n * Check WCAG contrast ratios. Default `false` because `deriveTheme` already\n * runs `ensureContrast` during derivation (lenient auto-adjust). Enable for\n * build-time audits of bundled themes or to validate hand-authored Theme\n * objects that bypassed derivation.\n */\n wcag?: boolean\n /**\n * Check selection + cursor visibility (ΔL / ΔE vs bg). Default `true`\n * because these aren't handled by ensureContrast — they're independent\n * visibility invariants.\n */\n visibility?: boolean\n}\n\ninterface Pair {\n rule: string\n fg: keyof Theme\n bg: keyof Theme\n min: number\n}\n\nconst CONTRAST_PAIRS: Pair[] = [\n // AA — body text and accent-on-surface pairs\n { rule: \"contrast:fg/bg\", fg: \"fg\", bg: \"bg\", min: AA_RATIO },\n { rule: \"contrast:fg/surfacebg\", fg: \"fg\", bg: \"surfacebg\", min: AA_RATIO },\n { rule: \"contrast:fg/popoverbg\", fg: \"fg\", bg: \"popoverbg\", min: AA_RATIO },\n { rule: \"contrast:muted/mutedbg\", fg: \"muted\", bg: \"mutedbg\", min: LARGE_RATIO },\n { rule: \"contrast:primary/bg\", fg: \"primary\", bg: \"bg\", min: AA_RATIO },\n { rule: \"contrast:secondary/bg\", fg: \"secondary\", bg: \"bg\", min: AA_RATIO },\n { rule: \"contrast:accent/bg\", fg: \"accent\", bg: \"bg\", min: AA_RATIO },\n { rule: \"contrast:error/bg\", fg: \"error\", bg: \"bg\", min: AA_RATIO },\n { rule: \"contrast:warning/bg\", fg: \"warning\", bg: \"bg\", min: AA_RATIO },\n { rule: \"contrast:success/bg\", fg: \"success\", bg: \"bg\", min: AA_RATIO },\n { rule: \"contrast:info/bg\", fg: \"info\", bg: \"bg\", min: AA_RATIO },\n { rule: \"contrast:link/bg\", fg: \"link\", bg: \"bg\", min: AA_RATIO },\n\n // AA — inverse + selection + cursor + accent-on-accent pairs\n { rule: \"contrast:inverse/inversebg\", fg: \"inverse\", bg: \"inversebg\", min: AA_RATIO },\n { rule: \"contrast:selection/selectionbg\", fg: \"selection\", bg: \"selectionbg\", min: AA_RATIO },\n { rule: \"contrast:cursor/cursorbg\", fg: \"cursor\", bg: \"cursorbg\", min: AA_RATIO },\n { rule: \"contrast:primaryfg/primary\", fg: \"primaryfg\", bg: \"primary\", min: AA_RATIO },\n { rule: \"contrast:secondaryfg/secondary\", fg: \"secondaryfg\", bg: \"secondary\", min: AA_RATIO },\n { rule: \"contrast:accentfg/accent\", fg: \"accentfg\", bg: \"accent\", min: AA_RATIO },\n { rule: \"contrast:errorfg/error\", fg: \"errorfg\", bg: \"error\", min: AA_RATIO },\n { rule: \"contrast:warningfg/warning\", fg: \"warningfg\", bg: \"warning\", min: AA_RATIO },\n { rule: \"contrast:successfg/success\", fg: \"successfg\", bg: \"success\", min: AA_RATIO },\n { rule: \"contrast:infofg/info\", fg: \"infofg\", bg: \"info\", min: AA_RATIO },\n\n // Non-text chrome (WCAG 1.4.11)\n { rule: \"contrast:inputborder/bg\", fg: \"inputborder\", bg: \"bg\", min: LARGE_RATIO },\n { rule: \"contrast:focusborder/bg\", fg: \"focusborder\", bg: \"bg\", min: LARGE_RATIO },\n { rule: \"contrast:disabledfg/bg\", fg: \"disabledfg\", bg: \"bg\", min: LARGE_RATIO },\n\n // Structural dividers\n { rule: \"contrast:border/bg\", fg: \"border\", bg: \"bg\", min: FAINT_RATIO },\n]\n\nfunction lightness(hex: string): number | null {\n const o = hexToOklch(hex)\n return o ? o.L : null\n}\n\n/**\n * Validate post-derivation invariants on a Theme.\n *\n * Default: visibility checks only (selection ΔL, cursor ΔE). These are\n * invariants that `deriveTheme` doesn't enforce and that matter for every\n * theme regardless of authoring pedigree.\n *\n * Opt into WCAG contrast checks via `{ wcag: true }`. Use at build-time to\n * verify bundled themes, or when loading hand-authored Theme objects that\n * didn't flow through `deriveTheme`'s `ensureContrast` pass.\n *\n * Non-hex values (ANSI names from `ansi16` mode) are skipped with no\n * violation — ANSI 16 themes can't be contrast-checked in hex space.\n *\n * @example\n * ```ts\n * // Default — visibility only, fast\n * const { ok, violations } = validateThemeInvariants(theme)\n *\n * // Build-time audit — full WCAG check\n * const audit = validateThemeInvariants(theme, { wcag: true })\n * ```\n */\nexport function validateThemeInvariants(theme: Theme, opts: InvariantOptions = {}): InvariantResult {\n const checkWcag = opts.wcag ?? false\n const checkVisibility = opts.visibility ?? true\n const violations: InvariantViolation[] = []\n\n if (checkWcag) {\n for (const pair of CONTRAST_PAIRS) {\n const fg = theme[pair.fg] as string\n const bg = theme[pair.bg] as string\n if (typeof fg !== \"string\" || typeof bg !== \"string\") continue\n const r = checkContrast(fg, bg)\n if (r === null) continue // non-hex — skip (ANSI16 mode)\n if (r.ratio < pair.min) {\n violations.push({\n rule: pair.rule,\n tokens: [String(pair.fg), String(pair.bg)],\n actual: r.ratio,\n required: pair.min,\n message: `${pair.fg} (${fg}) on ${pair.bg} (${bg}) is ${r.ratio.toFixed(2)}:1, needs ${pair.min.toFixed(1)}:1`,\n })\n }\n }\n }\n\n if (checkVisibility) {\n // Selection visibility — ΔL ≥ 0.08 between selectionbg and bg (so highlight is distinguishable)\n const lBg = lightness(theme.bg)\n const lSelBg = lightness(theme.selectionbg)\n if (lBg !== null && lSelBg !== null) {\n const dL = Math.abs(lSelBg - lBg)\n if (dL < SELECTION_DELTA_L) {\n violations.push({\n rule: \"visibility:selection\",\n tokens: [\"selectionbg\", \"bg\"],\n actual: dL,\n required: SELECTION_DELTA_L,\n message: `selectionbg (${theme.selectionbg}) differs from bg (${theme.bg}) by ΔL=${dL.toFixed(3)}, needs ≥ ${SELECTION_DELTA_L.toFixed(2)}`,\n })\n }\n }\n\n // Cursor visibility — ΔE ≥ 0.15 (OKLCH) between cursorbg and bg\n const oBg = hexToOklch(theme.bg)\n const oCursorBg = hexToOklch(theme.cursorbg)\n if (oBg && oCursorBg) {\n const de = oklchDeltaE(oBg, oCursorBg)\n if (de < CURSOR_DELTA_E) {\n violations.push({\n rule: \"visibility:cursor\",\n tokens: [\"cursorbg\", \"bg\"],\n actual: de,\n required: CURSOR_DELTA_E,\n message: `cursorbg (${theme.cursorbg}) differs from bg (${theme.bg}) by ΔE=${de.toFixed(3)}, needs ≥ ${CURSOR_DELTA_E.toFixed(2)}`,\n })\n }\n }\n }\n\n return { ok: violations.length === 0, violations }\n}\n\n/**\n * Format violations as a multiline error message for throws/logs.\n */\nexport function formatViolations(violations: InvariantViolation[]): string {\n if (violations.length === 0) return \"\"\n return violations.map((v) => ` - [${v.rule}] ${v.message}`).join(\"\\n\")\n}\n\n/**\n * Thrown by `loadTheme({ mode: \"strict\" })` when invariants fail.\n * Carries the violations array for programmatic inspection.\n */\nexport class ThemeInvariantError extends Error {\n readonly violations: InvariantViolation[]\n constructor(violations: InvariantViolation[]) {\n super(`Theme invariants failed (${violations.length} violation${violations.length === 1 ? \"\" : \"s\"}):\\n${formatViolations(violations)}`)\n this.name = \"ThemeInvariantError\"\n this.violations = violations\n }\n}\n","/**\n * Theme derivation — transforms a ColorScheme into a Theme.\n */\n\nimport { blend, contrastFg, complement, hexToOklch, oklchToHex, colorDistance, brighten, darken } from \"@silvery/color\"\nimport { checkContrast, ensureContrast } from \"@silvery/color\"\nimport type { ColorScheme, Theme } from \"./types.ts\"\nimport {\n validateThemeInvariants,\n ThemeInvariantError,\n SELECTION_DELTA_L,\n CURSOR_DELTA_E,\n type InvariantViolation,\n} from \"./invariants.ts\"\n\nexport interface ThemeAdjustment {\n token: string\n from: string\n to: string\n against: string\n target: number\n ratioBefore: number\n ratioAfter: number\n}\n\nexport function deriveTheme(\n palette: ColorScheme,\n mode: \"ansi16\" | \"truecolor\" = \"truecolor\",\n adjustments?: ThemeAdjustment[],\n): Theme {\n if (mode === \"ansi16\") return deriveAnsi16Theme(palette)\n return deriveTruecolorTheme(palette, adjustments)\n}\n\nexport interface LoadThemeOptions {\n /** Output mode. Default: \"truecolor\". */\n mode?: \"ansi16\" | \"truecolor\"\n /**\n * Invariant enforcement:\n * - `\"strict\"` — throw `ThemeInvariantError` when invariants fail.\n * - `\"lenient\"` (default) — accept auto-adjustments, populate `violations` out-param.\n * - `\"off\"` — skip invariant validation entirely.\n *\n * Note: `deriveTheme()` already runs `ensureContrast` on every text/bg pair\n * it builds (thresholds: AA=4.5, DIM=3.0, FAINT=1.5, CONTROL=3.0 — tuned for\n * terminals, not blind WCAG imports). Invariant validation is a second pass\n * that catches things derive can't fix. Default: visibility only.\n */\n enforce?: \"strict\" | \"lenient\" | \"off\"\n /**\n * Run WCAG contrast validation in addition to visibility. Default: false.\n * `deriveTheme` already applies the project-tweaked thresholds via\n * `ensureContrast`; only enable `wcag: true` for build-time audits of\n * bundled themes or to validate hand-authored Theme objects.\n */\n wcag?: boolean\n /** Out-parameter: adjustments applied by `deriveTheme`'s ensureContrast calls. */\n adjustments?: ThemeAdjustment[]\n /** Out-parameter: invariant violations (only populated in \"lenient\" mode; \"strict\" throws). */\n violations?: InvariantViolation[]\n}\n\n/**\n * Load and validate a theme from a ColorScheme.\n *\n * Combines `deriveTheme()` (auto-adjust via ensureContrast with project-tuned\n * thresholds) with `validateThemeInvariants()` (post-derivation visibility +\n * optional WCAG).\n *\n * We don't re-impose WCAG on top of derive's tweaked thresholds — default\n * validation checks visibility invariants only (selection/cursor vs bg) that\n * derive doesn't handle.\n *\n * @example\n * ```ts\n * // Default: lenient + visibility-only (derive already handled contrast)\n * const theme = loadTheme(myScheme)\n *\n * // Build-time audit: strict + full WCAG\n * const theme = loadTheme(myScheme, { enforce: \"strict\", wcag: true })\n * ```\n */\nexport function loadTheme(palette: ColorScheme, opts: LoadThemeOptions = {}): Theme {\n const mode = opts.mode ?? \"truecolor\"\n const enforce = opts.enforce ?? \"lenient\"\n const theme = deriveTheme(palette, mode, opts.adjustments)\n if (enforce === \"off\") return theme\n\n const { ok, violations } = validateThemeInvariants(theme, { wcag: opts.wcag })\n if (!ok) {\n if (enforce === \"strict\") throw new ThemeInvariantError(violations)\n if (opts.violations) opts.violations.push(...violations)\n }\n return theme\n}\n\nconst AA = 4.5\nconst DIM = 3.0\nconst FAINT = 1.5\nconst CONTROL = 3.0\n\nfunction deriveTruecolorTheme(p: ColorScheme, adjustments?: ThemeAdjustment[]): Theme {\n const dark = p.dark ?? true\n const bg = p.background\n\n function ensure(token: string, color: string, against: string, target: number): string {\n const result = ensureContrast(color, against, target)\n if (adjustments && result !== color) {\n const before = checkContrast(color, against)\n const after = checkContrast(result, against)\n adjustments.push({\n token,\n from: color,\n to: result,\n against,\n target,\n ratioBefore: before?.ratio ?? 0,\n ratioAfter: after?.ratio ?? 0,\n })\n }\n return result\n }\n\n const surfacebg = blend(bg, p.foreground, 0.05)\n const popoverbg = blend(bg, p.foreground, 0.08)\n const fg = ensure(\"fg\", p.foreground, popoverbg, AA)\n const primary = ensure(\"primary\", p.primary ?? (dark ? p.yellow : p.blue), bg, AA)\n const accent = ensure(\"accent\", complement(primary), bg, AA)\n const secondary = ensure(\"secondary\", blend(primary, accent, 0.35), bg, AA)\n const error = ensure(\"error\", p.red, bg, AA)\n const warning = ensure(\"warning\", p.yellow, bg, AA)\n const success = ensure(\"success\", p.green, bg, AA)\n const info = ensure(\"info\", blend(fg, accent, 0.5), bg, AA)\n const link = ensure(\"link\", dark ? p.brightBlue : p.blue, bg, AA)\n\n // Brand anchor (Apple system-color model) — app identity.\n // $brand anchors to primary; hover/active shift OKLCH L ±0.04 / ±0.08.\n const brand = primary\n const brandHover = dark ? brighten(primary, 0.04) : darken(primary, 0.04)\n const brandActive = dark ? brighten(primary, 0.08) : darken(primary, 0.08)\n\n // Categorical color ring — 8 harmonious hues for tagging / chart series /\n // categories. ensureContrast-adjusted against bg.\n const red = ensure(\"red\", p.red, bg, AA)\n const orange = ensure(\"orange\", blend(p.red, p.yellow, 0.5), bg, AA)\n const yellow = ensure(\"yellow\", p.yellow, bg, AA)\n const green = ensure(\"green\", p.green, bg, AA)\n const teal = ensure(\"teal\", blend(p.green, p.cyan, 0.5), bg, AA)\n const blue = ensure(\"blue\", dark ? p.brightBlue : p.blue, bg, AA)\n const purple = ensure(\"purple\", p.magenta, bg, AA)\n const pink = ensure(\"pink\", blend(p.magenta, p.red, 0.5), bg, AA)\n const mutedbg = blend(bg, p.foreground, 0.04)\n const muted = ensure(\"muted\", blend(fg, bg, 0.4), mutedbg, AA)\n const disabledfg = ensure(\"disabledfg\", blend(fg, bg, 0.5), bg, DIM)\n const border = ensure(\"border\", blend(bg, p.foreground, 0.15), bg, FAINT)\n const inputborder = ensure(\"inputborder\", blend(bg, p.foreground, 0.25), bg, CONTROL)\n // Repair selection visibility — nudge selectionbg L away from bg until ΔL ≥ threshold.\n // Preserves hue + chroma. For ultra-subtle themes (one-light, serendipity-morning, etc.)\n // this shifts the selection ~0.05 L while keeping the aesthetic.\n const selectionBg = repairSelectionBg(p.selectionBackground, bg)\n const selection = ensure(\"selection\", p.selectionForeground, selectionBg, AA)\n // Repair cursor visibility — nudge cursorbg ΔE away from bg (OKLCH).\n const cursorBgRepaired = repairCursorBg(p.cursorColor, bg)\n const cursor = ensure(\"cursor\", p.cursorText, cursorBgRepaired, AA)\n\n return {\n name: p.name ?? (dark ? \"derived-dark\" : \"derived-light\"),\n bg,\n fg,\n muted,\n mutedbg,\n surface: fg,\n surfacebg,\n popover: fg,\n popoverbg,\n inverse: contrastFg(blend(fg, bg, 0.1)),\n inversebg: blend(fg, bg, 0.1),\n cursor,\n cursorbg: cursorBgRepaired,\n selection,\n selectionbg: selectionBg,\n primary,\n primaryfg: contrastFg(primary),\n secondary,\n secondaryfg: contrastFg(secondary),\n accent,\n accentfg: contrastFg(accent),\n error,\n errorfg: contrastFg(error),\n warning,\n warningfg: contrastFg(warning),\n success,\n successfg: contrastFg(success),\n info,\n infofg: contrastFg(info),\n border,\n inputborder,\n focusborder: link,\n link,\n disabledfg,\n palette: [\n p.black,\n p.red,\n p.green,\n p.yellow,\n p.blue,\n p.magenta,\n p.cyan,\n p.white,\n p.brightBlack,\n p.brightRed,\n p.brightGreen,\n p.brightYellow,\n p.brightBlue,\n p.brightMagenta,\n p.brightCyan,\n p.brightWhite,\n ],\n brand,\n brandHover,\n brandActive,\n // Categorical ring — primary names\n red,\n orange,\n yellow,\n green,\n teal,\n blue,\n purple,\n pink,\n // Deprecated brand-<hue> aliases (same values; for backward compat one release)\n brandRed: red,\n brandOrange: orange,\n brandYellow: yellow,\n brandGreen: green,\n brandTeal: teal,\n brandBlue: blue,\n brandPurple: purple,\n brandPink: pink,\n }\n}\n\nfunction deriveAnsi16Theme(p: ColorScheme): Theme {\n const dark = p.dark ?? true\n const primaryColor = dark ? p.yellow : p.blue\n return {\n name: p.name ?? (dark ? \"derived-ansi16-dark\" : \"derived-ansi16-light\"),\n bg: p.background,\n fg: p.foreground,\n muted: p.white,\n mutedbg: p.black,\n surface: p.foreground,\n surfacebg: p.black,\n popover: p.foreground,\n popoverbg: p.black,\n inverse: p.black,\n inversebg: p.brightWhite,\n cursor: p.cursorText,\n cursorbg: p.cursorColor,\n selection: p.selectionForeground,\n selectionbg: p.selectionBackground,\n primary: primaryColor,\n primaryfg: p.black,\n secondary: p.magenta,\n secondaryfg: p.black,\n accent: p.cyan,\n accentfg: p.black,\n error: dark ? p.brightRed : p.red,\n errorfg: p.black,\n warning: p.yellow,\n warningfg: p.black,\n success: dark ? p.brightGreen : p.green,\n successfg: p.black,\n info: p.cyan,\n infofg: p.black,\n border: p.brightBlack,\n inputborder: p.brightBlack,\n focusborder: dark ? p.brightBlue : p.blue,\n link: dark ? p.brightBlue : p.blue,\n disabledfg: p.brightBlack,\n palette: [\n p.black,\n p.red,\n p.green,\n p.yellow,\n p.blue,\n p.magenta,\n p.cyan,\n p.white,\n p.brightBlack,\n p.brightRed,\n p.brightGreen,\n p.brightYellow,\n p.brightBlue,\n p.brightMagenta,\n p.brightCyan,\n p.brightWhite,\n ],\n // Brand tokens at ANSI 16 — map to named slots (no blending possible).\n brand: primaryColor,\n brandHover: primaryColor,\n brandActive: primaryColor,\n brandRed: dark ? p.brightRed : p.red,\n brandOrange: dark ? p.brightRed : p.red, // no orange slot in ANSI 16 — use red\n brandYellow: p.yellow,\n brandGreen: dark ? p.brightGreen : p.green,\n brandTeal: p.cyan,\n brandBlue: dark ? p.brightBlue : p.blue,\n brandPurple: p.magenta,\n brandPink: dark ? p.brightMagenta : p.magenta,\n }\n}\n\n/**\n * Nudge `selectionBg`'s OKLCH lightness until it differs from `bg` by at least\n * `SELECTION_DELTA_L`. Preserves hue + chroma. Non-hex input returns unchanged.\n *\n * Direction: shift away from bg — if bg is dark, lift L; if bg is light, drop L.\n * If the input already meets the threshold, it's returned unchanged.\n */\nfunction repairSelectionBg(selectionBg: string, bg: string): string {\n const oSel = hexToOklch(selectionBg)\n const oBg = hexToOklch(bg)\n if (!oSel || !oBg) return selectionBg\n const dL = Math.abs(oSel.L - oBg.L)\n if (dL >= SELECTION_DELTA_L) return selectionBg\n\n const needed = SELECTION_DELTA_L - dL + 0.005 // small overshoot to land above floor after gamut-map\n const direction = oSel.L >= oBg.L ? 1 : -1\n const newL = Math.max(0, Math.min(1, oSel.L + direction * needed))\n return oklchToHex({ L: newL, C: oSel.C, H: oSel.H })\n}\n\n/**\n * Nudge `cursorBg`'s OKLCH values until it differs from `bg` by at least\n * `CURSOR_DELTA_E`. Shifts lightness first (preserves hue/chroma aesthetics).\n * Non-hex input returns unchanged.\n */\nfunction repairCursorBg(cursorBg: string, bg: string): string {\n const d = colorDistance(cursorBg, bg)\n if (d === null || d >= CURSOR_DELTA_E) return cursorBg\n\n const oCur = hexToOklch(cursorBg)!\n const oBg = hexToOklch(bg)!\n // Shift L in the direction that increases distance.\n const lGap = SELECTION_DELTA_L + 0.02\n const direction = oCur.L >= oBg.L ? 1 : -1\n const newL = Math.max(0, Math.min(1, oCur.L + direction * lGap))\n const candidate = oklchToHex({ L: newL, C: oCur.C, H: oCur.H })\n const d2 = colorDistance(candidate, bg)\n if (d2 !== null && d2 >= CURSOR_DELTA_E) return candidate\n\n // Fallback: high-contrast neutral pick.\n return oBg.L > 0.5 ? \"#000000\" : \"#FFFFFF\"\n}\n","/**\n * Monochrome theme — per-token SGR attrs for terminals without color.\n *\n * When color is unavailable (NO_COLOR env, TERM=dumb, SILVERY_COLOR=mono,\n * OSC-queried ColorLevel=\"none\"), silvery apps stay hierarchical via per-token\n * SGR attrs: bold for emphasis, dim for muted, inverse for selection, italic\n * for info, underline for links.\n *\n * This is Option B from the design spec — state-colored content gets genuine\n * distinguishability without color (not just \"stripped\"). Error, warning, and\n * success remain visually distinct via attrs combinations.\n *\n * Universally-supported SGR subset: bold, dim, italic, underline, inverse,\n * strikethrough. Any other attr is ignored by the renderer at mono tier.\n *\n * @module\n */\n\nimport type { Theme } from \"./types.ts\"\n\n/** SGR attrs recognized by the monochrome theme system. Universally-supported subset. */\nexport type MonoAttr = \"bold\" | \"dim\" | \"italic\" | \"underline\" | \"inverse\" | \"strikethrough\"\n\n/**\n * Per-token SGR attrs for monochrome rendering.\n *\n * Keyed by Theme token name. Tokens not in this map have no attrs (default\n * rendering). Callers apply these attrs at paint time when color tier is none.\n */\nexport type MonochromeAttrs = Partial<Record<keyof Theme, readonly MonoAttr[]>>\n\n/**\n * Default monochrome attrs — Polaris-aligned mapping from the design spec.\n *\n * The philosophy: every *semantic* token that would normally carry color gets an\n * attrs set that preserves its hierarchy rank and state semantics. Example:\n * error (danger) is bold+inverse so it *grabs* attention even without red;\n * warning is bold to stand out but not as aggressively; info is italic to\n * indicate auxiliary information.\n *\n * Structural surfaces (bg/mutedbg/surfacebg/popoverbg) have no attrs — they\n * represent background planes that monochrome terminals can't vary anyway.\n */\nexport const DEFAULT_MONO_ATTRS: MonochromeAttrs = {\n // Structural — no attrs (background planes, container chrome)\n bg: [],\n mutedbg: [],\n surfacebg: [],\n popoverbg: [],\n border: [],\n cursorbg: [],\n\n // Text hierarchy\n fg: [], // default body text — no attrs\n muted: [\"dim\"], // secondary info\n disabledfg: [\"dim\"], // clearly inactive\n surface: [],\n popover: [],\n inverse: [\"inverse\"],\n\n // Brand / accent emphasis\n primary: [\"bold\"], // brand emphasis\n secondary: [\"bold\"], // secondary emphasis\n accent: [\"italic\", \"bold\"], // complement — italic+bold for distinct rank below primary\n\n // States — distinguishable combinations\n error: [\"bold\", \"inverse\"], // danger: loudest\n warning: [\"bold\"], // caution\n success: [\"bold\"], // positive confirmation\n info: [\"italic\"], // auxiliary info\n\n // On-fill text (contrast against accent/state bg)\n primaryfg: [],\n secondaryfg: [],\n accentfg: [],\n errorfg: [\"inverse\"],\n warningfg: [],\n successfg: [],\n infofg: [],\n\n // Interactive chrome\n link: [\"underline\"], // hyperlinks: underlined even in mono\n focusborder: [\"bold\"],\n inputborder: [],\n\n // Selection / cursor — explicit inverse so they're visible\n selection: [],\n selectionbg: [\"inverse\"],\n cursor: [],\n}\n\n/**\n * Produce per-token monochrome attrs from a base Theme.\n *\n * Currently returns `DEFAULT_MONO_ATTRS` — a canonical mapping. Passed the\n * theme to allow per-theme overrides in the future (e.g., a palette that\n * prefers `underline` for accents over `italic`). The argument is reserved.\n */\nexport function deriveMonochromeTheme(theme: Theme): MonochromeAttrs {\n void theme\n return DEFAULT_MONO_ATTRS\n}\n\n/**\n * Resolve attrs for a specific Theme token. Returns `[]` if the token has no\n * mapped attrs (meaning: render with default attrs).\n */\nexport function monoAttrsFor(theme: Theme, token: keyof Theme): readonly MonoAttr[] {\n const attrs = deriveMonochromeTheme(theme)\n return attrs[token] ?? []\n}\n\n/**\n * Primer-style alias table for mono-attr resolution. Mirrors the alias table\n * in `style/style.ts:PRIMER_ALIASES` — kept local to avoid a cross-package\n * import cycle.\n *\n * Maps the Primer-style compound token names (hyphens stripped) to the\n * canonical Theme keys that `DEFAULT_MONO_ATTRS` is keyed by. This lets\n * `$fg-muted`, `$bg-selected`, `$border-focus`, etc. resolve to the same attrs\n * set as their legacy counterparts.\n */\nconst PRIMER_ALIASES_FOR_MONO: Record<string, keyof Theme> = {\n fgmuted: \"muted\",\n fgdisabled: \"disabledfg\",\n fgcursor: \"cursor\",\n fgselected: \"selection\",\n fginverse: \"inverse\",\n fgonsurface: \"surface\",\n fgonpopover: \"popover\",\n fgonprimary: \"primaryfg\",\n fgonsecondary: \"secondaryfg\",\n fgonaccent: \"accentfg\",\n fgonerror: \"errorfg\",\n fgonwarning: \"warningfg\",\n fgonsuccess: \"successfg\",\n fgoninfo: \"infofg\",\n bgmuted: \"mutedbg\",\n bgsurface: \"surfacebg\",\n bgpopover: \"popoverbg\",\n bginverse: \"inversebg\",\n bgselected: \"selectionbg\",\n bgcursor: \"cursorbg\",\n borderfocus: \"focusborder\",\n borderinput: \"inputborder\",\n}\n\n/**\n * Resolve mono-attrs from a color *string* — the high-level entry point\n * consumed by the render pipeline.\n *\n * Accepts strings like `\"$primary\"`, `\"$fg-muted\"`, `\"$border-focus\"`. Strips\n * the `$` prefix and hyphens, tries direct Theme key lookup, then falls back\n * to the Primer alias table. Returns `undefined` for non-token strings (hex,\n * rgb(), named ANSI colors) — callers should treat this as \"no attrs\".\n *\n * @param color The color string (e.g. `\"$primary\"`, `\"#ff0000\"`, `\"red\"`)\n * @param theme Active theme (reserved for per-theme overrides)\n * @returns Array of mono-attrs for the token, or `undefined` if not a\n * recognized token.\n */\nexport function monoAttrsForColorString(color: string, theme: Theme): readonly MonoAttr[] | undefined {\n if (!color.startsWith(\"$\")) return undefined\n const raw = color.slice(1).replace(/-/g, \"\")\n const attrs = deriveMonochromeTheme(theme)\n // Direct key (legacy names: muted, surfacebg, focusborder, primary, …)\n const direct = attrs[raw as keyof Theme]\n if (direct !== undefined) return direct\n // Primer aliases (fg-muted, bg-surface, border-focus, …)\n const aliased = PRIMER_ALIASES_FOR_MONO[raw]\n if (aliased) {\n const v = attrs[aliased]\n if (v !== undefined) return v\n }\n return undefined\n}\n","/**\n * Scheme fingerprinting — match a terminal's probed colors against a catalog\n * of known schemes.\n *\n * OSC 10/11/4 probing yields up to 18 slots (fg + bg + 16 ANSI colors).\n * Fingerprint matching compares that probed slot-set against every catalog\n * scheme using OKLCH ΔE distance, returning the best match with a confidence\n * score. This unlocks \"detect the user's scheme\" UX — apps can style\n * themselves to match the terminal without the user picking a theme.\n *\n * Match criteria (both required for a match):\n * 1. ΔE sum across probed slots < `sumThreshold` (default 30)\n * 2. Per-slot max ΔE < `perSlotThreshold` (default 8)\n *\n * The per-slot check prevents false positives where most slots are close but\n * one slot is wildly off (e.g., same ansi[0..14] but different red) — those\n * are different schemes, not noisy matches.\n */\n\nimport type { ColorScheme } from \"./types.ts\"\nimport { colorDistance } from \"@silvery/color\"\n\n/** Fields that are always probed and used for fingerprinting. */\nconst FINGERPRINT_FIELDS: readonly (keyof ColorScheme)[] = [\n \"foreground\",\n \"background\",\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightRed\",\n \"brightGreen\",\n \"brightYellow\",\n \"brightBlue\",\n \"brightMagenta\",\n \"brightCyan\",\n \"brightWhite\",\n] as const\n\nexport interface FingerprintOptions {\n /** Sum-of-ΔE threshold for match acceptance. Default: 30. */\n sumThreshold?: number\n /** Per-slot max ΔE threshold. Default: 8. */\n perSlotThreshold?: number\n}\n\nexport interface FingerprintMatch {\n /** The catalog scheme that matched. */\n scheme: ColorScheme\n /** Total ΔE across all probed slots (lower = better). */\n sumDeltaE: number\n /** Largest per-slot ΔE (lower = better). */\n maxDeltaE: number\n /** Number of slots compared (can be < 18 if some probed slots are null). */\n slotsCompared: number\n /** Heuristic 0–1 confidence score. */\n confidence: number\n}\n\n/**\n * Map ΔE thresholds into a 0–1 confidence.\n *\n * sumΔE=0 + maxΔE=0 → 1.0 (perfect match)\n * sumΔE=30 (threshold) → ~0.5\n * sumΔE≥60 → ~0.0\n */\nfunction computeConfidence(sumDE: number, maxDE: number, sumThreshold: number): number {\n const sumScore = Math.max(0, 1 - sumDE / (sumThreshold * 2))\n const maxScore = Math.max(0, 1 - maxDE / 16)\n // Weight sum more heavily — a good average with one outlier isn't a real match.\n return Math.max(0, Math.min(1, 0.7 * sumScore + 0.3 * maxScore))\n}\n\n/**\n * Match probed slots against a catalog, returning the best candidate if it\n * satisfies both sum and per-slot thresholds. Returns `null` if nothing matches.\n *\n * `probed` is a partial ColorScheme — whatever slots OSC queries returned. Missing\n * slots are skipped (still counted as \"not compared\"). Non-hex values are\n * ignored (ΔE can't be computed).\n */\nexport function fingerprintMatch(\n probed: Partial<ColorScheme>,\n catalog: readonly ColorScheme[],\n opts: FingerprintOptions = {},\n): FingerprintMatch | null {\n const sumThreshold = opts.sumThreshold ?? 30\n const perSlotThreshold = opts.perSlotThreshold ?? 8\n\n let best: FingerprintMatch | null = null\n\n for (const scheme of catalog) {\n let sumDE = 0\n let maxDE = 0\n let slotsCompared = 0\n\n for (const field of FINGERPRINT_FIELDS) {\n const probedVal = probed[field]\n const catalogVal = scheme[field]\n if (typeof probedVal !== \"string\" || typeof catalogVal !== \"string\") continue\n const de = colorDistance(probedVal, catalogVal)\n if (de === null) continue\n // Scale ΔE to the ×100 convention used in the thresholds.\n const scaled = de * 100\n sumDE += scaled\n if (scaled > maxDE) maxDE = scaled\n slotsCompared++\n }\n\n if (slotsCompared === 0) continue\n if (maxDE > perSlotThreshold) continue\n if (sumDE > sumThreshold) continue\n\n if (best === null || sumDE < best.sumDeltaE) {\n best = {\n scheme,\n sumDeltaE: sumDE,\n maxDeltaE: maxDE,\n slotsCompared,\n confidence: computeConfidence(sumDE, maxDE, sumThreshold),\n }\n }\n }\n\n return best\n}\n\n/**\n * Like `fingerprintMatch`, but returns all candidates that pass the thresholds\n * sorted by `sumDeltaE` ascending. Useful for UX where the user picks among\n * a shortlist (\"Looks like you're using one of: Dracula, Horizon, Tokyo Night\").\n */\nexport function fingerprintCandidates(\n probed: Partial<ColorScheme>,\n catalog: readonly ColorScheme[],\n opts: FingerprintOptions = {},\n): FingerprintMatch[] {\n const sumThreshold = opts.sumThreshold ?? 30\n const perSlotThreshold = opts.perSlotThreshold ?? 8\n const out: FingerprintMatch[] = []\n\n for (const scheme of catalog) {\n let sumDE = 0\n let maxDE = 0\n let slotsCompared = 0\n\n for (const field of FINGERPRINT_FIELDS) {\n const probedVal = probed[field]\n const catalogVal = scheme[field]\n if (typeof probedVal !== \"string\" || typeof catalogVal !== \"string\") continue\n const de = colorDistance(probedVal, catalogVal)\n if (de === null) continue\n const scaled = de * 100\n sumDE += scaled\n if (scaled > maxDE) maxDE = scaled\n slotsCompared++\n }\n\n if (slotsCompared === 0) continue\n if (maxDE > perSlotThreshold) continue\n if (sumDE > sumThreshold) continue\n\n out.push({\n scheme,\n sumDeltaE: sumDE,\n maxDeltaE: maxDE,\n slotsCompared,\n confidence: computeConfidence(sumDE, maxDE, sumThreshold),\n })\n }\n\n out.sort((a, b) => a.sumDeltaE - b.sumDeltaE)\n return out\n}\n","/**\n * Core type definitions for the theme system.\n *\n * Two-layer architecture:\n * Layer 1: ColorScheme — 22 terminal colors (what schemes expose; auto-detectable)\n * Layer 2: Theme — ~33 semantic tokens (what UI apps consume)\n *\n * Pipeline: Scheme catalog → ColorScheme (22) → deriveTheme() → Theme (33)\n */\n\nexport interface ColorScheme {\n name?: string\n dark?: boolean\n primary?: string\n black: string\n red: string\n green: string\n yellow: string\n blue: string\n magenta: string\n cyan: string\n white: string\n brightBlack: string\n brightRed: string\n brightGreen: string\n brightYellow: string\n brightBlue: string\n brightMagenta: string\n brightCyan: string\n brightWhite: string\n foreground: string\n background: string\n cursorColor: string\n cursorText: string\n selectionBackground: string\n selectionForeground: string\n}\n\nexport const COLOR_SCHEME_FIELDS = [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightRed\",\n \"brightGreen\",\n \"brightYellow\",\n \"brightBlue\",\n \"brightMagenta\",\n \"brightCyan\",\n \"brightWhite\",\n \"foreground\",\n \"background\",\n \"cursorColor\",\n \"cursorText\",\n \"selectionBackground\",\n \"selectionForeground\",\n] as const\n\nexport type AnsiColorName =\n | \"black\"\n | \"red\"\n | \"green\"\n | \"yellow\"\n | \"blue\"\n | \"magenta\"\n | \"cyan\"\n | \"white\"\n | \"brightBlack\"\n | \"brightRed\"\n | \"brightGreen\"\n | \"brightYellow\"\n | \"brightBlue\"\n | \"brightMagenta\"\n | \"brightCyan\"\n | \"brightWhite\"\n\nexport interface Theme {\n name: string\n bg: string\n fg: string\n muted: string\n mutedbg: string\n surface: string\n surfacebg: string\n popover: string\n popoverbg: string\n inverse: string\n inversebg: string\n cursor: string\n cursorbg: string\n selection: string\n selectionbg: string\n primary: string\n primaryfg: string\n secondary: string\n secondaryfg: string\n accent: string\n accentfg: string\n error: string\n errorfg: string\n warning: string\n warningfg: string\n success: string\n successfg: string\n info: string\n infofg: string\n border: string\n inputborder: string\n focusborder: string\n link: string\n disabledfg: string\n palette: string[]\n\n // Brand anchor (Apple system-color model) — THE app's identity. Auto-derives\n // from scheme.primary; apps override via <ThemeProvider tokens={{ brand: \"#…\" }}>.\n brand: string\n brandHover: string\n brandActive: string\n\n // Categorical color ring — 8 harmonious hues for tags, chart series, calendar\n // categories, priority levels, any color that's CATEGORICAL, not stateful.\n // ensureContrast-adjusted against bg. Use $red, $orange, …, $pink in JSX.\n //\n // Distinguish from:\n // - $color0..$color15 — raw terminal ANSI (user's theme verbatim)\n // - $error/$warning/$success — semantic state (communicates meaning)\n // - $brand — app identity anchor (one color)\n red: string\n orange: string\n yellow: string\n green: string\n teal: string\n blue: string\n purple: string\n pink: string\n\n /** @deprecated Use `red` (available as `$red` token). Will be removed in next silvery major. */\n brandRed: string\n /** @deprecated Use `orange` (available as `$orange` token). Will be removed in next silvery major. */\n brandOrange: string\n /** @deprecated Use `yellow` (available as `$yellow` token). Will be removed in next silvery major. */\n brandYellow: string\n /** @deprecated Use `green` (available as `$green` token). Will be removed in next silvery major. */\n brandGreen: string\n /** @deprecated Use `teal` (available as `$teal` token). Will be removed in next silvery major. */\n brandTeal: string\n /** @deprecated Use `blue` (available as `$blue` token). Will be removed in next silvery major. */\n brandBlue: string\n /** @deprecated Use `purple` (available as `$purple` token). Will be removed in next silvery major. */\n brandPurple: string\n /** @deprecated Use `pink` (available as `$pink` token). Will be removed in next silvery major. */\n brandPink: string\n}\n\nexport type AnsiPrimary = \"yellow\" | \"cyan\" | \"magenta\" | \"green\" | \"red\" | \"blue\" | \"white\"\nexport type HueName = \"red\" | \"orange\" | \"yellow\" | \"green\" | \"teal\" | \"blue\" | \"purple\" | \"pink\"\n","/**\n * Default palettes and themes — shipped with @silvery/ansi.\n */\n\nimport type { ColorScheme, Theme } from \"./types.ts\"\n\nexport const ansi16DarkTheme: Theme = {\n name: \"dark-ansi16\",\n bg: \"\",\n fg: \"whiteBright\",\n muted: \"white\",\n mutedbg: \"black\",\n surface: \"whiteBright\",\n surfacebg: \"black\",\n popover: \"whiteBright\",\n popoverbg: \"black\",\n inverse: \"black\",\n inversebg: \"whiteBright\",\n cursor: \"black\",\n cursorbg: \"yellow\",\n selection: \"black\",\n selectionbg: \"yellow\",\n primary: \"yellow\",\n primaryfg: \"black\",\n secondary: \"white\",\n secondaryfg: \"black\",\n accent: \"blueBright\",\n accentfg: \"black\",\n error: \"redBright\",\n errorfg: \"black\",\n warning: \"yellow\",\n warningfg: \"black\",\n success: \"greenBright\",\n successfg: \"black\",\n info: \"cyan\",\n infofg: \"black\",\n border: \"gray\",\n inputborder: \"gray\",\n focusborder: \"blueBright\",\n link: \"blueBright\",\n disabledfg: \"gray\",\n palette: [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"blackBright\",\n \"redBright\",\n \"greenBright\",\n \"yellowBright\",\n \"blueBright\",\n \"magentaBright\",\n \"cyanBright\",\n \"whiteBright\",\n ],\n brand: \"yellow\",\n brandHover: \"yellow\",\n brandActive: \"yellow\",\n red: \"redBright\",\n orange: \"redBright\",\n yellow: \"yellow\",\n green: \"greenBright\",\n teal: \"cyan\",\n blue: \"blueBright\",\n purple: \"magenta\",\n pink: \"magentaBright\",\n brandRed: \"redBright\",\n brandOrange: \"redBright\",\n brandYellow: \"yellow\",\n brandGreen: \"greenBright\",\n brandTeal: \"cyan\",\n brandBlue: \"blueBright\",\n brandPurple: \"magenta\",\n brandPink: \"magentaBright\",\n}\n\nexport const ansi16LightTheme: Theme = {\n name: \"light-ansi16\",\n bg: \"\",\n fg: \"black\",\n muted: \"blackBright\",\n mutedbg: \"white\",\n surface: \"black\",\n surfacebg: \"white\",\n popover: \"black\",\n popoverbg: \"white\",\n inverse: \"whiteBright\",\n inversebg: \"black\",\n cursor: \"black\",\n cursorbg: \"blue\",\n selection: \"black\",\n selectionbg: \"cyan\",\n primary: \"blue\",\n primaryfg: \"black\",\n secondary: \"blue\",\n secondaryfg: \"black\",\n accent: \"cyan\",\n accentfg: \"black\",\n error: \"red\",\n errorfg: \"black\",\n warning: \"yellow\",\n warningfg: \"black\",\n success: \"green\",\n successfg: \"black\",\n info: \"cyan\",\n infofg: \"black\",\n border: \"gray\",\n inputborder: \"gray\",\n focusborder: \"blue\",\n link: \"blueBright\",\n disabledfg: \"gray\",\n palette: [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"blackBright\",\n \"redBright\",\n \"greenBright\",\n \"yellowBright\",\n \"blueBright\",\n \"magentaBright\",\n \"cyanBright\",\n \"whiteBright\",\n ],\n brand: \"blue\",\n brandHover: \"blue\",\n brandActive: \"blue\",\n red: \"red\",\n orange: \"red\",\n yellow: \"yellow\",\n green: \"green\",\n teal: \"cyan\",\n blue: \"blue\",\n purple: \"magenta\",\n pink: \"magenta\",\n brandRed: \"red\",\n brandOrange: \"red\",\n brandYellow: \"yellow\",\n brandGreen: \"green\",\n brandTeal: \"cyan\",\n brandBlue: \"blue\",\n brandPurple: \"magenta\",\n brandPink: \"magenta\",\n}\n\nexport const defaultDarkScheme: ColorScheme = {\n name: \"default-dark\",\n dark: true,\n black: \"#2e3440\",\n red: \"#bf616a\",\n green: \"#a3be8c\",\n yellow: \"#ebcb8b\",\n blue: \"#81a1c1\",\n magenta: \"#b48ead\",\n cyan: \"#88c0d0\",\n white: \"#d8dee9\",\n brightBlack: \"#4c566a\",\n brightRed: \"#bf616a\",\n brightGreen: \"#a3be8c\",\n brightYellow: \"#ebcb8b\",\n brightBlue: \"#81a1c1\",\n brightMagenta: \"#b48ead\",\n brightCyan: \"#8fbcbb\",\n brightWhite: \"#eceff4\",\n foreground: \"#d8dee9\",\n background: \"#2e3440\",\n cursorColor: \"#d8dee9\",\n cursorText: \"#2e3440\",\n selectionBackground: \"#434c5e\",\n selectionForeground: \"#d8dee9\",\n}\n\nexport const defaultLightScheme: ColorScheme = {\n name: \"default-light\",\n dark: false,\n black: \"#5c6370\",\n red: \"#d20f39\",\n green: \"#40a02b\",\n yellow: \"#df8e1d\",\n blue: \"#1e66f5\",\n magenta: \"#8839ef\",\n cyan: \"#179299\",\n white: \"#dce0e8\",\n brightBlack: \"#6c7086\",\n brightRed: \"#d20f39\",\n brightGreen: \"#40a02b\",\n brightYellow: \"#df8e1d\",\n brightBlue: \"#1e66f5\",\n brightMagenta: \"#8839ef\",\n brightCyan: \"#179299\",\n brightWhite: \"#eff1f5\",\n foreground: \"#4c4f69\",\n background: \"#eff1f5\",\n cursorColor: \"#dc8a78\",\n cursorText: \"#eff1f5\",\n selectionBackground: \"#ccd0da\",\n selectionForeground: \"#4c4f69\",\n}\n","/**\n * OSC 4 Terminal Color Palette Query/Set — pure ANSI protocol.\n */\n\nconst ESC = \"\\x1b\"\nconst BEL = \"\\x07\"\n\nexport function queryPaletteColor(index: number, write: (data: string) => void): void {\n if (index < 0 || index > 255) throw new RangeError(`Palette index must be 0-255, got ${index}`)\n write(`${ESC}]4;${index};?${BEL}`)\n}\n\nexport function queryMultiplePaletteColors(indices: number[], write: (data: string) => void): void {\n for (const index of indices) queryPaletteColor(index, write)\n}\n\nexport function setPaletteColor(index: number, color: string, write: (data: string) => void): void {\n if (index < 0 || index > 255) throw new RangeError(`Palette index must be 0-255, got ${index}`)\n write(`${ESC}]4;${index};${color}${BEL}`)\n}\n\nconst OSC4_PREFIX = `${ESC}]4;`\nconst OSC4_BODY_RE = /^(\\d+);rgb:([0-9a-fA-F]{1,4})\\/([0-9a-fA-F]{1,4})\\/([0-9a-fA-F]{1,4})$/\n\nexport function parsePaletteResponse(input: string): { index: number; color: string } | null {\n const prefixIdx = input.indexOf(OSC4_PREFIX)\n if (prefixIdx === -1) return null\n const bodyStart = prefixIdx + OSC4_PREFIX.length\n let bodyEnd = input.indexOf(BEL, bodyStart)\n if (bodyEnd === -1) bodyEnd = input.indexOf(`${ESC}\\\\`, bodyStart)\n if (bodyEnd === -1) return null\n const body = input.slice(bodyStart, bodyEnd)\n const match = OSC4_BODY_RE.exec(body)\n if (!match) return null\n const index = Number.parseInt(match[1]!, 10)\n if (index < 0 || index > 255) return null\n const r = normalizeHexChannel(match[2]!)\n const g = normalizeHexChannel(match[3]!)\n const b = normalizeHexChannel(match[4]!)\n return { index, color: `#${r}${g}${b}` }\n}\n\nfunction normalizeHexChannel(hex: string): string {\n switch (hex.length) {\n case 1:\n return hex + hex\n case 2:\n return hex\n default:\n return hex.slice(0, 2)\n }\n}\n","/**\n * OSC 10/11/12 Terminal Color Queries — pure ANSI protocol.\n */\n\nconst ESC = \"\\x1b\"\nconst BEL = \"\\x07\"\n\nconst RGB_BODY_RE = /rgb:([0-9a-fA-F]{1,4})\\/([0-9a-fA-F]{1,4})\\/([0-9a-fA-F]{1,4})/\n\nfunction normalizeHexChannel(hex: string): string {\n switch (hex.length) {\n case 1:\n return hex + hex\n case 2:\n return hex\n default:\n return hex.slice(0, 2)\n }\n}\n\nfunction parseOscColorResponse(input: string, oscCode: number): string | null {\n const prefix = `${ESC}]${oscCode};`\n const prefixIdx = input.indexOf(prefix)\n if (prefixIdx === -1) return null\n const bodyStart = prefixIdx + prefix.length\n let bodyEnd = input.indexOf(BEL, bodyStart)\n if (bodyEnd === -1) bodyEnd = input.indexOf(`${ESC}\\\\`, bodyStart)\n if (bodyEnd === -1) return null\n const body = input.slice(bodyStart, bodyEnd)\n const match = RGB_BODY_RE.exec(body)\n if (!match) return null\n return `#${normalizeHexChannel(match[1]!)}${normalizeHexChannel(match[2]!)}${normalizeHexChannel(match[3]!)}`\n}\n\nasync function queryOscColor(\n write: (data: string) => void,\n read: (timeoutMs: number) => Promise<string | null>,\n oscCode: number,\n timeoutMs: number,\n): Promise<string | null> {\n write(`${ESC}]${oscCode};?${BEL}`)\n const data = await read(timeoutMs)\n if (data == null) return null\n return parseOscColorResponse(data, oscCode)\n}\n\nexport async function queryForegroundColor(\n write: (data: string) => void,\n read: (timeoutMs: number) => Promise<string | null>,\n timeoutMs = 200,\n): Promise<string | null> {\n return queryOscColor(write, read, 10, timeoutMs)\n}\n\nexport async function queryBackgroundColor(\n write: (data: string) => void,\n read: (timeoutMs: number) => Promise<string | null>,\n timeoutMs = 200,\n): Promise<string | null> {\n return queryOscColor(write, read, 11, timeoutMs)\n}\n\nexport async function queryCursorColor(\n write: (data: string) => void,\n read: (timeoutMs: number) => Promise<string | null>,\n timeoutMs = 200,\n): Promise<string | null> {\n return queryOscColor(write, read, 12, timeoutMs)\n}\n\nexport function setForegroundColor(write: (data: string) => void, color: string): void {\n write(`${ESC}]10;${color}${BEL}`)\n}\nexport function setBackgroundColor(write: (data: string) => void, color: string): void {\n write(`${ESC}]11;${color}${BEL}`)\n}\nexport function setCursorColor(write: (data: string) => void, color: string): void {\n write(`${ESC}]12;${color}${BEL}`)\n}\nexport function resetForegroundColor(write: (data: string) => void): void {\n write(`${ESC}]110${BEL}`)\n}\nexport function resetBackgroundColor(write: (data: string) => void): void {\n write(`${ESC}]111${BEL}`)\n}\nexport function resetCursorColor(write: (data: string) => void): void {\n write(`${ESC}]112${BEL}`)\n}\n\nexport async function detectColorScheme(\n write: (data: string) => void,\n read: (timeoutMs: number) => Promise<string | null>,\n timeoutMs = 200,\n): Promise<\"light\" | \"dark\" | null> {\n const bg = await queryBackgroundColor(write, read, timeoutMs)\n if (bg == null) return null\n const r = parseInt(bg.slice(1, 3), 16) / 255\n const g = parseInt(bg.slice(3, 5), 16) / 255\n const b = parseInt(bg.slice(5, 7), 16) / 255\n return 0.2126 * r + 0.7152 * g + 0.0722 * b > 0.5 ? \"light\" : \"dark\"\n}\n","/**\n * Terminal palette auto-detection via OSC queries.\n */\n\nimport type { ColorScheme, Theme } from \"./types.ts\"\nimport { deriveTheme } from \"./derive.ts\"\nimport { ansi16DarkTheme, ansi16LightTheme, defaultDarkScheme, defaultLightScheme } from \"./default-schemes.ts\"\nimport { queryMultiplePaletteColors, parsePaletteResponse } from \"../osc-palette.ts\"\nimport { queryForegroundColor, queryBackgroundColor } from \"../osc-colors.ts\"\n\nexport interface DetectedScheme {\n fg: string | null\n bg: string | null\n ansi: (string | null)[]\n dark: boolean\n palette: Partial<ColorScheme>\n}\n\nexport async function detectTerminalScheme(timeoutMs = 150): Promise<DetectedScheme | null> {\n const stdin = process.stdin\n const stdout = process.stdout\n if (!stdin.isTTY || !stdout.isTTY) return null\n\n const wasRaw = stdin.isRaw\n if (!wasRaw) stdin.setRawMode(true)\n\n let buffer = \"\"\n const onData = (chunk: Buffer) => {\n buffer += chunk.toString()\n }\n stdin.on(\"data\", onData)\n\n try {\n const write = (s: string) => {\n stdout.write(s)\n }\n const read = (ms: number): Promise<string | null> =>\n new Promise((resolve) => {\n if (buffer.length > 0) {\n const result = buffer\n buffer = \"\"\n resolve(result)\n return\n }\n const timer = setTimeout(() => {\n resolve(buffer.length > 0 ? buffer : null)\n buffer = \"\"\n }, ms)\n const check = (_chunk: Buffer) => {\n clearTimeout(timer)\n stdin.removeListener(\"data\", check)\n const result = buffer\n buffer = \"\"\n resolve(result)\n }\n stdin.on(\"data\", check)\n })\n\n const bg = await queryBackgroundColor(write, read, timeoutMs)\n const fg = await queryForegroundColor(write, read, timeoutMs)\n\n const ansi: (string | null)[] = new Array(16).fill(null)\n queryMultiplePaletteColors(\n Array.from({ length: 16 }, (_, i) => i),\n write,\n )\n await new Promise((resolve) => setTimeout(resolve, timeoutMs))\n\n const remaining = buffer\n buffer = \"\"\n if (remaining) {\n const oscPrefix = \"\\x1b]4;\"\n let pos = 0\n while (pos < remaining.length) {\n const nextOsc = remaining.indexOf(oscPrefix, pos)\n if (nextOsc === -1) break\n let end = remaining.indexOf(\"\\x07\", nextOsc)\n if (end === -1) end = remaining.indexOf(\"\\x1b\\\\\", nextOsc)\n if (end === -1) break\n const chunk = remaining.slice(nextOsc, end + 1)\n const parsed = parsePaletteResponse(chunk)\n if (parsed && parsed.index >= 0 && parsed.index < 16) ansi[parsed.index] = parsed.color\n pos = end + 1\n }\n }\n\n const dark = bg ? isDarkColor(bg) : true\n const palette: Partial<ColorScheme> = { dark }\n if (bg) palette.background = bg\n if (fg) palette.foreground = fg\n\n const ansiFields: (keyof ColorScheme)[] = [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightRed\",\n \"brightGreen\",\n \"brightYellow\",\n \"brightBlue\",\n \"brightMagenta\",\n \"brightCyan\",\n \"brightWhite\",\n ]\n for (let i = 0; i < 16; i++) {\n if (ansi[i]) (palette as Record<string, string>)[ansiFields[i]!] = ansi[i]!\n }\n if (fg) {\n palette.cursorColor = fg\n palette.selectionForeground = fg\n }\n if (bg) palette.cursorText = bg\n if (ansi[4]) palette.selectionBackground = ansi[4]\n\n return { fg, bg, ansi, dark, palette }\n } finally {\n stdin.removeListener(\"data\", onData)\n if (!wasRaw) stdin.setRawMode(false)\n }\n}\n\nexport interface DetectThemeOptions {\n fallback?: ColorScheme\n timeoutMs?: number\n caps?: { colorLevel?: string; darkBackground?: boolean }\n}\n\nexport async function detectTheme(opts: DetectThemeOptions = {}): Promise<Theme> {\n const colorLevel = opts.caps?.colorLevel\n if (colorLevel === \"none\" || colorLevel === \"basic\") {\n const isDark = opts.caps?.darkBackground ?? true\n return isDark ? ansi16DarkTheme : ansi16LightTheme\n }\n const detected = await detectTerminalScheme(opts.timeoutMs)\n const isDark = detected?.dark ?? opts.caps?.darkBackground ?? true\n const fallback = opts.fallback ?? (isDark ? defaultDarkScheme : defaultLightScheme)\n if (!detected) return deriveTheme(fallback)\n const merged: ColorScheme = { ...fallback, ...stripNulls(detected.palette) }\n return deriveTheme(merged)\n}\n\nfunction stripNulls(partial: Partial<ColorScheme>): Partial<ColorScheme> {\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(partial)) {\n if (v != null) result[k] = v\n }\n return result as Partial<ColorScheme>\n}\n\nfunction isDarkColor(hex: string): boolean {\n const r = parseInt(hex.slice(1, 3), 16) / 255\n const g = parseInt(hex.slice(3, 5), 16) / 255\n const b = parseInt(hex.slice(5, 7), 16) / 255\n return 0.2126 * r + 0.7152 * g + 0.0722 * b <= 0.5\n}\n","/**\n * Unified scheme detection orchestrator.\n *\n * Consolidates the four detection layers into a single entry point:\n *\n * 1. **Override** — `SILVERY_COLOR` env var / explicit option forces a scheme\n * 2. **Probe** — OSC 10/11/4 query the terminal for its 22 slots\n * 3. **Fingerprint** — match probed slots against a catalog → named scheme\n * 4. **Fallback** — `defaultDarkScheme` / `defaultLightScheme` based on BgMode\n *\n * Returns `{ scheme, theme, source, confidence, slotSources }` so callers can\n * tell apart \"detected Dracula at 0.98 confidence\" from \"falling back to\n * default-dark because probing failed.\"\n */\n\nimport type { ColorScheme, Theme } from \"./types.ts\"\nimport { COLOR_SCHEME_FIELDS } from \"./types.ts\"\nimport { deriveTheme, loadTheme } from \"./derive.ts\"\nimport { detectTerminalScheme } from \"./detect.ts\"\nimport { fingerprintMatch } from \"./fingerprint.ts\"\nimport { defaultDarkScheme, defaultLightScheme } from \"./default-schemes.ts\"\n\n/** How the final scheme was decided. */\nexport type DetectSource =\n | \"override\" // explicit option or SILVERY_COLOR env var\n | \"fingerprint\" // probed + matched a catalog scheme\n | \"probed\" // probed but no catalog match (custom scheme)\n | \"bg-mode\" // bg-mode detection only (no full probe)\n | \"fallback\" // nothing worked, using defaultDark/Light\n\n/** Where each slot's value came from. */\nexport type SlotSource = \"probed\" | \"catalog\" | \"fallback\"\n\nexport interface DetectSchemeResult {\n /** The resolved 22-slot color scheme. */\n scheme: ColorScheme\n /** The derived, validated Theme (via loadTheme). */\n theme: Theme\n /** How the scheme was determined overall. */\n source: DetectSource\n /** 0–1 confidence heuristic (exact override = 1, fingerprint = match score, fallback = 0). */\n confidence: number\n /** Per-slot provenance. Keys are ColorScheme field names. */\n slotSources: Partial<Record<keyof ColorScheme, SlotSource>>\n /** If fingerprint matched, the catalog scheme name. */\n matchedName?: string\n}\n\nexport interface DetectSchemeOptions {\n /** Explicit override — if provided, skips all probing. */\n override?: ColorScheme\n /** Catalog to fingerprint against. If empty or undefined, skip fingerprinting. */\n catalog?: readonly ColorScheme[]\n /** OSC probe timeout (ms). Default 150. */\n timeoutMs?: number\n /** Force dark/light inference when no bg is probed. */\n darkFallback?: boolean\n /**\n * Apply strict invariant validation to the loaded Theme. Default `lenient`.\n * See `loadTheme`'s `enforce` parameter.\n */\n enforce?: \"strict\" | \"lenient\" | \"off\"\n /** Add WCAG contrast check to the invariant validation. Default `false`. */\n wcag?: boolean\n}\n\nfunction envOverride(): \"truecolor\" | \"256\" | \"ansi16\" | \"scheme\" | \"mono\" | \"auto\" | null {\n const v = process.env.SILVERY_COLOR\n if (!v) return null\n if (v === \"truecolor\" || v === \"256\" || v === \"ansi16\" || v === \"scheme\" || v === \"mono\" || v === \"auto\")\n return v\n return null\n}\n\n/**\n * Detect the terminal's color scheme + derive a theme in one call.\n *\n * Runs the 4-layer detection cascade (override → probe → fingerprint →\n * fallback) and returns a fully-resolved Theme along with provenance metadata\n * so callers can log how the scheme was determined.\n *\n * This is the recommended entry point for apps — it handles all the gotchas\n * (non-TTY environments, failed probes, partial OSC responses, catalog matches,\n * bg-mode inference) and returns something you can hand to `ThemeProvider`.\n *\n * @example\n * ```ts\n * import { detectScheme } from \"@silvery/ansi\"\n * import { builtinPalettes } from \"@silvery/theme/schemes\"\n *\n * const { scheme, theme, source, matchedName, confidence } = await detectScheme({\n * catalog: Object.values(builtinPalettes),\n * enforce: \"lenient\",\n * })\n * console.log(`${source === \"fingerprint\" ? `detected ${matchedName}` : source} (${(confidence * 100).toFixed(0)}%)`)\n * ```\n */\nexport async function detectScheme(opts: DetectSchemeOptions = {}): Promise<DetectSchemeResult> {\n const enforce = opts.enforce ?? \"lenient\"\n const wcag = opts.wcag ?? false\n\n // 1. Explicit override (option or env var)\n if (opts.override) {\n const theme = loadTheme(opts.override, { enforce, wcag })\n return {\n scheme: opts.override,\n theme,\n source: \"override\",\n confidence: 1,\n slotSources: allSlotsFrom(\"fallback\"), // override is opaque — we don't know provenance\n matchedName: opts.override.name,\n }\n }\n\n const envMode = envOverride()\n if (envMode === \"mono\" || envMode === \"ansi16\") {\n // These tiers have their own theme shapes — return dark fallback + mark as override\n const fallback = opts.darkFallback !== false ? defaultDarkScheme : defaultLightScheme\n const theme = loadTheme(fallback, { enforce, wcag })\n return {\n scheme: fallback,\n theme,\n source: \"override\",\n confidence: 1,\n slotSources: allSlotsFrom(\"fallback\"),\n matchedName: fallback.name,\n }\n }\n\n // 2. Probe terminal\n const detected = await detectTerminalScheme(opts.timeoutMs)\n\n // No probe result → pure fallback\n if (!detected) {\n const dark = opts.darkFallback !== false\n const fallback = dark ? defaultDarkScheme : defaultLightScheme\n const theme = loadTheme(fallback, { enforce, wcag })\n return {\n scheme: fallback,\n theme,\n source: \"fallback\",\n confidence: 0,\n slotSources: allSlotsFrom(\"fallback\"),\n matchedName: fallback.name,\n }\n }\n\n // 3. Fingerprint if catalog provided\n const catalog = opts.catalog ?? []\n if (catalog.length > 0) {\n const match = fingerprintMatch(detected.palette, catalog)\n if (match) {\n const theme = loadTheme(match.scheme, { enforce, wcag })\n return {\n scheme: match.scheme,\n theme,\n source: \"fingerprint\",\n confidence: match.confidence,\n slotSources: allSlotsFrom(\"catalog\"),\n matchedName: match.scheme.name,\n }\n }\n }\n\n // 4. Probed but no catalog match — merge probed slots over fallback\n const dark = detected.dark\n const fallback = dark ? defaultDarkScheme : defaultLightScheme\n const merged: ColorScheme = { ...fallback, ...stripNulls(detected.palette) }\n const theme = loadTheme(merged, { enforce, wcag })\n\n // Per-slot provenance: probed slots come from detected.palette, the rest from fallback\n const slotSources: Partial<Record<keyof ColorScheme, SlotSource>> = {}\n for (const field of COLOR_SCHEME_FIELDS) {\n const probed = (detected.palette as Record<string, unknown>)[field]\n slotSources[field] = typeof probed === \"string\" ? \"probed\" : \"fallback\"\n }\n\n // Confidence heuristic: proportion of slots that were probed (of the 18 trackable: fg + bg + 16 ansi)\n const probedCount = Object.values(slotSources).filter((s) => s === \"probed\").length\n const confidence = Math.min(1, probedCount / 18)\n\n return {\n scheme: merged,\n theme,\n source: \"probed\",\n confidence,\n slotSources,\n matchedName: undefined,\n }\n}\n\nfunction stripNulls(partial: Partial<ColorScheme>): Partial<ColorScheme> {\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(partial)) {\n if (v != null) result[k] = v\n }\n return result as Partial<ColorScheme>\n}\n\nfunction allSlotsFrom(src: SlotSource): Partial<Record<keyof ColorScheme, SlotSource>> {\n const out: Partial<Record<keyof ColorScheme, SlotSource>> = {}\n for (const field of COLOR_SCHEME_FIELDS) out[field] = src\n return out\n}\n\n/**\n * Shortcut: detect scheme + return the Theme only. For apps that don't care\n * about provenance. Same defaults as `detectScheme`.\n *\n * @example\n * ```ts\n * const theme = await detectSchemeTheme({ catalog: Object.values(builtinPalettes) })\n * render(<ThemeProvider theme={theme}>…</ThemeProvider>)\n * ```\n */\nexport async function detectSchemeTheme(opts: DetectSchemeOptions = {}): Promise<Theme> {\n const { theme } = await detectScheme(opts)\n return theme\n}\n","/**\n * Color scheme detection via Mode 2031.\n *\n * Mode 2031 is a terminal protocol for reporting the current color scheme\n * (dark/light). It works cross-platform (Linux, Windows Terminal, SSH sessions)\n * unlike macOS-only AppleInterfaceStyle detection.\n *\n * Protocol:\n * - Enable: \\x1b[?2031h\n * - Disable: \\x1b[?2031l\n * - Response: \\x1b[?2031;1n (dark) or \\x1b[?2031;2n (light)\n * - Terminal sends the same response when the scheme changes\n *\n * @see https://contour-terminal.org/vt-extensions/color-palette-update-notifications/\n */\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst ESC = \"\\x1b\"\nconst CSI = `${ESC}[`\n\n/** Enable Mode 2031 color scheme reporting */\nexport const ENABLE_BG_MODE_REPORTING = `${CSI}?2031h`\n\n/** Disable Mode 2031 color scheme reporting */\nexport const DISABLE_BG_MODE_REPORTING = `${CSI}?2031l`\n\n/** Response pattern: \\x1b[?2031;Nn where N is 1 (dark) or 2 (light) */\nconst MODE_2031_RESPONSE_RE = /\\x1b\\[\\?2031;([12])n/\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type BgMode = \"dark\" | \"light\" | \"unknown\"\n\nexport interface BgModeDetector extends Disposable {\n /** Current detected scheme */\n readonly scheme: BgMode\n /** Subscribe to scheme changes. Returns unsubscribe function. */\n subscribe(listener: (scheme: \"dark\" | \"light\") => void): () => void\n /** Start detection (sends Mode 2031 enable to terminal) */\n start(): void\n /** Stop detection (sends Mode 2031 disable to terminal) */\n stop(): void\n}\n\nexport interface BgModeDetectorOptions {\n /** Write data to the terminal */\n write: (data: string) => void\n /** Subscribe to terminal input. Returns unsubscribe function. */\n onData: (handler: (data: string) => void) => () => void\n /** Fallback detection when Mode 2031 is not supported */\n fallback?: () => BgMode\n /** Timeout in ms to wait for Mode 2031 response (default: 200) */\n timeoutMs?: number\n}\n\n// =============================================================================\n// Parser\n// =============================================================================\n\n/**\n * Parse a Mode 2031 response from terminal input data.\n * Returns \"dark\", \"light\", or null if not a Mode 2031 response.\n */\nexport function parseBgModeResponse(data: string): \"dark\" | \"light\" | null {\n const match = MODE_2031_RESPONSE_RE.exec(data)\n if (!match) return null\n return match[1] === \"1\" ? \"dark\" : \"light\"\n}\n\n// =============================================================================\n// Factory\n// =============================================================================\n\n/**\n * Create a color scheme detector using Mode 2031.\n *\n * Strategy:\n * 1. Send Mode 2031 enable sequence\n * 2. Parse response within timeout\n * 3. If no response: terminal doesn't support 2031, use fallback\n * 4. If response: use it, continue listening for change notifications\n * 5. On dispose: send disable sequence\n *\n * @example\n * ```ts\n * const detector = createBgModeDetector({\n * write: (data) => process.stdout.write(data),\n * onData: (handler) => {\n * process.stdin.on(\"data\", handler)\n * return () => process.stdin.off(\"data\", handler)\n * },\n * fallback: () => \"dark\",\n * })\n * detector.start()\n * console.log(detector.scheme) // \"unknown\" until response arrives\n * detector.subscribe((scheme) => console.log(\"scheme changed:\", scheme))\n * ```\n */\nexport function createBgModeDetector(options: BgModeDetectorOptions): BgModeDetector {\n const { write, onData, fallback, timeoutMs = 200 } = options\n\n let scheme: BgMode = \"unknown\"\n let started = false\n let stopped = false\n let unsubData: (() => void) | null = null\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n let mode2031Supported = false\n\n const listeners = new Set<(scheme: \"dark\" | \"light\") => void>()\n\n function handleResponse(detected: \"dark\" | \"light\") {\n mode2031Supported = true\n if (timeoutId !== null) {\n clearTimeout(timeoutId)\n timeoutId = null\n }\n if (scheme !== detected) {\n scheme = detected\n for (const listener of listeners) {\n listener(detected)\n }\n }\n }\n\n function handleData(data: string) {\n const result = parseBgModeResponse(data)\n if (result !== null) {\n handleResponse(result)\n }\n }\n\n function applyFallback() {\n if (mode2031Supported || stopped) return\n if (fallback) {\n const result = fallback()\n if (result !== \"unknown\" && scheme === \"unknown\") {\n scheme = result\n for (const listener of listeners) {\n listener(result)\n }\n }\n }\n }\n\n return {\n get scheme() {\n return scheme\n },\n\n subscribe(listener: (scheme: \"dark\" | \"light\") => void): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n\n start() {\n if (started || stopped) return\n started = true\n\n // Subscribe to terminal input to catch responses\n unsubData = onData(handleData)\n\n // Send Mode 2031 enable\n write(ENABLE_BG_MODE_REPORTING)\n\n // Set timeout for fallback\n timeoutId = setTimeout(applyFallback, timeoutMs)\n },\n\n stop() {\n if (!started || stopped) return\n stopped = true\n\n if (timeoutId !== null) {\n clearTimeout(timeoutId)\n timeoutId = null\n }\n\n if (unsubData) {\n unsubData()\n unsubData = null\n }\n\n // Send Mode 2031 disable\n write(DISABLE_BG_MODE_REPORTING)\n\n listeners.clear()\n },\n\n [Symbol.dispose]() {\n if (started && !stopped) {\n // Only send disable if we successfully enabled\n stopped = true\n\n if (timeoutId !== null) {\n clearTimeout(timeoutId)\n timeoutId = null\n }\n\n if (unsubData) {\n unsubData()\n unsubData = null\n }\n\n write(DISABLE_BG_MODE_REPORTING)\n listeners.clear()\n }\n },\n }\n}\n","/**\n * @silvery/ansi — Everything terminal.\n *\n * Unified package for terminal styling, ANSI primitives, color detection,\n * theme derivation, and terminal control sequences.\n *\n * @example\n * ```ts\n * // Pre-configured global — zero config\n * import { style } from \"@silvery/ansi\"\n * style.bold.red(\"error\")\n * style.primary(\"deploy\")\n *\n * // Create your own\n * import { createStyle, createPlainStyle } from \"@silvery/ansi\"\n * const s = createStyle({ theme })\n *\n * // Terminal control\n * import { enterAltScreen, cursorTo, enableMouse } from \"@silvery/ansi\"\n *\n * // Theme derivation\n * import { deriveTheme, detectTheme } from \"@silvery/ansi\"\n * ```\n *\n * @module\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type { ColorLevel, RGB, AnsiColorName, Color, UnderlineStyle, TerminalCaps } from \"./types\"\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nexport {\n UNDERLINE_CODES,\n UNDERLINE_STANDARD,\n UNDERLINE_RESET_STANDARD,\n UNDERLINE_COLOR_RESET,\n buildUnderlineColorCode,\n HYPERLINK_START,\n HYPERLINK_END,\n buildHyperlink,\n} from \"./constants\"\n\n// =============================================================================\n// Detection\n// =============================================================================\n\nexport {\n detectCursor,\n detectInput,\n detectColor,\n detectUnicode,\n detectExtendedUnderline,\n detectTerminalCaps,\n defaultCaps,\n} from \"./detection\"\n\n// =============================================================================\n// SGR Codes\n// =============================================================================\n\nexport { fgColorCode, bgColorCode } from \"./sgr-codes\"\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nexport { ANSI_REGEX, stripAnsi, displayLength } from \"./utils\"\n\n// =============================================================================\n// Color Maps & Quantization\n// =============================================================================\n\nexport {\n MODIFIERS,\n FG_COLORS,\n BG_COLORS,\n ANSI_16_COLORS,\n nearestAnsi16,\n rgbToAnsi256,\n fgFromRgb,\n bgFromRgb,\n} from \"./color-maps\"\n\n// =============================================================================\n// Terminal Control Sequences\n// =============================================================================\n\nexport {\n enterAltScreen,\n leaveAltScreen,\n clearScreen,\n clearLine,\n cursorTo,\n cursorHome,\n cursorHide,\n cursorShow,\n cursorStyle,\n setTitle,\n enableMouse,\n disableMouse,\n enableBracketedPaste,\n disableBracketedPaste,\n enableSyncUpdate,\n disableSyncUpdate,\n setScrollRegion,\n resetScrollRegion,\n scrollUp,\n scrollDown,\n enableKittyKeyboard,\n disableKittyKeyboard,\n} from \"./terminal-control\"\n\n// =============================================================================\n// Extended Underline Functions\n// =============================================================================\n\nexport {\n underline,\n curlyUnderline,\n dottedUnderline,\n dashedUnderline,\n doubleUnderline,\n underlineColor,\n styledUnderline,\n} from \"./underline-ext\"\n\n// =============================================================================\n// Hyperlink Functions\n// =============================================================================\n\nexport { hyperlink } from \"./hyperlink\"\n\n// =============================================================================\n// Style — Theme-aware chalk replacement\n// =============================================================================\n\nexport { createStyle, createPlainStyle, style, resolveThemeColor } from \"./style/style\"\nexport { createMixedStyle } from \"./style/mixed-proxy\"\nexport { THEME_TOKEN_DEFAULTS } from \"./style/colors\"\nexport type { Style, StyleOptions, ThemeLike } from \"./style/types\"\n\n// =============================================================================\n// Theme Derivation\n// =============================================================================\n\nexport { deriveTheme, loadTheme } from \"./theme/derive\"\nexport type { ThemeAdjustment, LoadThemeOptions } from \"./theme/derive\"\nexport {\n deriveMonochromeTheme,\n monoAttrsFor,\n monoAttrsForColorString,\n DEFAULT_MONO_ATTRS,\n} from \"./theme/monochrome\"\nexport type { MonoAttr, MonochromeAttrs } from \"./theme/monochrome\"\nexport { fingerprintMatch, fingerprintCandidates } from \"./theme/fingerprint\"\nexport type { FingerprintMatch, FingerprintOptions } from \"./theme/fingerprint\"\nexport { detectScheme, detectSchemeTheme } from \"./theme/orchestrator\"\nexport type { DetectSchemeResult, DetectSchemeOptions, DetectSource, SlotSource } from \"./theme/orchestrator\"\nexport type {\n ThemeToken,\n StandardThemeToken,\n ColorRingToken,\n BrandToken,\n PaletteToken,\n KnownThemeToken,\n TextColor,\n ColorKeyword,\n} from \"./theme/tokens\"\nexport { defineTokens, resolveCustomToken, CustomTokenError } from \"./theme/custom\"\nexport type { DeriveTokenDef, BrandTokenDef, CustomTokenDef, CustomTokenRegistry } from \"./theme/custom\"\nexport {\n validateThemeInvariants,\n formatViolations,\n ThemeInvariantError,\n AA_RATIO,\n LARGE_RATIO,\n FAINT_RATIO,\n SELECTION_DELTA_L,\n CURSOR_DELTA_E,\n} from \"./theme/invariants\"\nexport type { InvariantViolation, InvariantResult, InvariantOptions } from \"./theme/invariants\"\nexport { ansi16DarkTheme, ansi16LightTheme, defaultDarkScheme, defaultLightScheme } from \"./theme/default-schemes\"\nexport type { ColorScheme, Theme, AnsiPrimary, HueName } from \"./theme/types\"\nexport type { AnsiColorName as PaletteColorName } from \"./theme/types\"\nexport { COLOR_SCHEME_FIELDS } from \"./theme/types\"\n\n// =============================================================================\n// Theme Detection (async, OSC-based)\n// =============================================================================\n\nexport { detectTerminalScheme, detectTheme } from \"./theme/detect\"\nexport type { DetectedScheme, DetectThemeOptions } from \"./theme/detect\"\n\n// =============================================================================\n// OSC Protocol — Terminal color queries\n// =============================================================================\n\nexport { queryPaletteColor, queryMultiplePaletteColors, setPaletteColor, parsePaletteResponse } from \"./osc-palette\"\n\nexport {\n queryForegroundColor,\n queryBackgroundColor,\n queryCursorColor,\n setForegroundColor,\n setBackgroundColor,\n setCursorColor,\n resetForegroundColor,\n resetBackgroundColor,\n resetCursorColor,\n detectColorScheme,\n} from \"./osc-colors\"\n\n// =============================================================================\n// Color Scheme Detection (Mode 2031)\n// =============================================================================\n\nexport {\n createBgModeDetector,\n parseBgModeResponse,\n ENABLE_BG_MODE_REPORTING,\n DISABLE_BG_MODE_REPORTING,\n} from \"./color-scheme\"\nexport type { BgModeDetector, BgModeDetectorOptions, BgMode } from \"./color-scheme\"\n"],"mappings":"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c;AAE1B,MAAI,SAAS,QAAQ,QAAQ,KAAK,UAChC,QAAO;GACL;GACA,WAAW;GACX,WAAW;GACX;GACA,YAAY,kBAAkB,OAAO,OAAO,aAAa;GAC1D;;AAIL,QAAO;;;;aA7GqC;AAGxC,sBAAqD;EACzD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;;;;;;ACJY,uBAAsB;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;;;;;;ACvDY,mBAAyB;EACpC,MAAM;EACN,IAAI;EACJ,IAAI;EACJ,OAAO;EACP,SAAS;EACT,SAAS;EACT,WAAW;EACX,SAAS;EACT,WAAW;EACX,SAAS;EACT,WAAW;EACX,QAAQ;EACR,UAAU;EACV,WAAW;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,WAAW;EACX,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACP,SAAS;EACT,SAAS;EACT,WAAW;EACX,SAAS;EACT,WAAW;EACX,MAAM;EACN,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,aAAa;EACb,MAAM;EACN,YAAY;EACZ,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,OAAO;EACP,YAAY;EACZ,aAAa;EACb,KAAK;EACL,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;EACb,aAAa;EACb,YAAY;EACZ,WAAW;EACX,WAAW;EACX,aAAa;EACb,WAAW;EACZ;AAEY,oBAA0B;EACrC,MAAM;EACN,IAAI;EACJ,IAAI;EACJ,OAAO;EACP,SAAS;EACT,SAAS;EACT,WAAW;EACX,SAAS;EACT,WAAW;EACX,SAAS;EACT,WAAW;EACX,QAAQ;EACR,UAAU;EACV,WAAW;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,WAAW;EACX,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACP,SAAS;EACT,SAAS;EACT,WAAW;EACX,SAAS;EACT,WAAW;EACX,MAAM;EACN,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,aAAa;EACb,MAAM;EACN,YAAY;EACZ,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,OAAO;EACP,YAAY;EACZ,aAAa;EACb,KAAK;EACL,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;EACb,aAAa;EACb,YAAY;EACZ,WAAW;EACX,WAAW;EACX,aAAa;EACb,WAAW;EACZ;AAEY,qBAAiC;EAC5C,MAAM;EACN,MAAM;EACN,OAAO;EACP,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;EACN,SAAS;EACT,MAAM;EACN,OAAO;EACP,aAAa;EACb,WAAW;EACX,aAAa;EACb,cAAc;EACd,YAAY;EACZ,eAAe;EACf,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,qBAAqB;EACrB,qBAAqB;EACtB;AAEY,sBAAkC;EAC7C,MAAM;EACN,MAAM;EACN,OAAO;EACP,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;EACN,SAAS;EACT,MAAM;EACN,OAAO;EACP,aAAa;EACb,WAAW;EACX,aAAa;EACb,cAAc;EACd,YAAY;EACZ,eAAe;EACf,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,qBAAqB;EACrB,qBAAqB;EACtB;;;;ACvMD,SAAgB,kBAAkB,OAAe,OAAqC;AACpF,KAAI,QAAQ,KAAK,QAAQ,IAAK,OAAM,IAAI,WAAW,oCAAoC,QAAQ;AAC/F,OAAM,GAAGC,MAAI,KAAK,MAAM,IAAIC,QAAM;;AAGpC,SAAgB,2BAA2B,SAAmB,OAAqC;AACjG,MAAK,MAAM,SAAS,QAAS,mBAAkB,OAAO,MAAM;;AAG9D,SAAgB,gBAAgB,OAAe,OAAe,OAAqC;AACjG,KAAI,QAAQ,KAAK,QAAQ,IAAK,OAAM,IAAI,WAAW,oCAAoC,QAAQ;AAC/F,OAAM,GAAGD,MAAI,KAAK,MAAM,GAAG,QAAQC,QAAM;;AAM3C,SAAgB,qBAAqB,OAAwD;CAC3F,MAAM,YAAY,MAAM,QAAQ,YAAY;AAC5C,KAAI,cAAc,GAAI,QAAO;CAC7B,MAAM,YAAY,YAAY,YAAY;CAC1C,IAAI,UAAU,MAAM,QAAQA,OAAK,UAAU;AAC3C,KAAI,YAAY,GAAI,WAAU,MAAM,QAAQ,GAAGD,MAAI,KAAK,UAAU;AAClE,KAAI,YAAY,GAAI,QAAO;CAC3B,MAAM,OAAO,MAAM,MAAM,WAAW,QAAQ;CAC5C,MAAM,QAAQ,aAAa,KAAK,KAAK;AACrC,KAAI,CAAC,MAAO,QAAO;CACnB,MAAM,QAAQ,OAAO,SAAS,MAAM,IAAK,GAAG;AAC5C,KAAI,QAAQ,KAAK,QAAQ,IAAK,QAAO;AAIrC,QAAO;EAAE;EAAO,OAAO,IAHbE,sBAAoB,MAAM,GAAI,GAC9BA,sBAAoB,MAAM,GAAI,GAC9BA,sBAAoB,MAAM,GAAI;EACA;;AAG1C,SAASA,sBAAoB,KAAqB;AAChD,SAAQ,IAAI,QAAZ;EACE,KAAK,EACH,QAAO,MAAM;EACf,KAAK,EACH,QAAO;EACT,QACE,QAAO,IAAI,MAAM,GAAG,EAAE;;;;;AA7CtBF,SAAM;AACNC,SAAM;AAgBN,eAAc,GAAGD,MAAI;AACrB,gBAAe;;;;ACbrB,SAAS,oBAAoB,KAAqB;AAChD,SAAQ,IAAI,QAAZ;EACE,KAAK,EACH,QAAO,MAAM;EACf,KAAK,EACH,QAAO;EACT,QACE,QAAO,IAAI,MAAM,GAAG,EAAE;;;AAI5B,SAAS,sBAAsB,OAAe,SAAgC;CAC5E,MAAM,SAAS,GAAG,IAAI,GAAG,QAAQ;CACjC,MAAM,YAAY,MAAM,QAAQ,OAAO;AACvC,KAAI,cAAc,GAAI,QAAO;CAC7B,MAAM,YAAY,YAAY,OAAO;CACrC,IAAI,UAAU,MAAM,QAAQ,KAAK,UAAU;AAC3C,KAAI,YAAY,GAAI,WAAU,MAAM,QAAQ,GAAG,IAAI,KAAK,UAAU;AAClE,KAAI,YAAY,GAAI,QAAO;CAC3B,MAAM,OAAO,MAAM,MAAM,WAAW,QAAQ;CAC5C,MAAM,QAAQ,YAAY,KAAK,KAAK;AACpC,KAAI,CAAC,MAAO,QAAO;AACnB,QAAO,IAAI,oBAAoB,MAAM,GAAI,GAAG,oBAAoB,MAAM,GAAI,GAAG,oBAAoB,MAAM,GAAI;;AAG7G,eAAe,cACb,OACA,MACA,SACA,WACwB;AACxB,OAAM,GAAG,IAAI,GAAG,QAAQ,IAAI,MAAM;CAClC,MAAM,OAAO,MAAM,KAAK,UAAU;AAClC,KAAI,QAAQ,KAAM,QAAO;AACzB,QAAO,sBAAsB,MAAM,QAAQ;;AAG7C,eAAsB,qBACpB,OACA,MACA,YAAY,KACY;AACxB,QAAO,cAAc,OAAO,MAAM,IAAI,UAAU;;AAGlD,eAAsB,qBACpB,OACA,MACA,YAAY,KACY;AACxB,QAAO,cAAc,OAAO,MAAM,IAAI,UAAU;;AAGlD,eAAsB,iBACpB,OACA,MACA,YAAY,KACY;AACxB,QAAO,cAAc,OAAO,MAAM,IAAI,UAAU;;AAGlD,SAAgB,mBAAmB,OAA+B,OAAqB;AACrF,OAAM,GAAG,IAAI,MAAM,QAAQ,MAAM;;AAEnC,SAAgB,mBAAmB,OAA+B,OAAqB;AACrF,OAAM,GAAG,IAAI,MAAM,QAAQ,MAAM;;AAEnC,SAAgB,eAAe,OAA+B,OAAqB;AACjF,OAAM,GAAG,IAAI,MAAM,QAAQ,MAAM;;AAEnC,SAAgB,qBAAqB,OAAqC;AACxE,OAAM,GAAG,IAAI,MAAM,MAAM;;AAE3B,SAAgB,qBAAqB,OAAqC;AACxE,OAAM,GAAG,IAAI,MAAM,MAAM;;AAE3B,SAAgB,iBAAiB,OAAqC;AACpE,OAAM,GAAG,IAAI,MAAM,MAAM;;AAG3B,eAAsB,kBACpB,OACA,MACA,YAAY,KACsB;CAClC,MAAM,KAAK,MAAM,qBAAqB,OAAO,MAAM,UAAU;AAC7D,KAAI,MAAM,KAAM,QAAO;CACvB,MAAM,IAAI,SAAS,GAAG,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;CACzC,MAAM,IAAI,SAAS,GAAG,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;CACzC,MAAM,IAAI,SAAS,GAAG,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;AACzC,QAAO,QAAS,IAAI,QAAS,IAAI,QAAS,IAAI,KAAM,UAAU;;;;AA/F1D,OAAM;AACN,OAAM;AAEN,eAAc;;;;ACWpB,eAAsB,qBAAqB,YAAY,KAAqC;CAC1F,MAAM,QAAQ,QAAQ;CACtB,MAAM,SAAS,QAAQ;AACvB,KAAI,CAAC,MAAM,SAAS,CAAC,OAAO,MAAO,QAAO;CAE1C,MAAM,SAAS,MAAM;AACrB,KAAI,CAAC,OAAQ,OAAM,WAAW,KAAK;CAEnC,IAAI,SAAS;CACb,MAAM,UAAU,UAAkB;AAChC,YAAU,MAAM,UAAU;;AAE5B,OAAM,GAAG,QAAQ,OAAO;AAExB,KAAI;EACF,MAAM,SAAS,MAAc;AAC3B,UAAO,MAAM,EAAE;;EAEjB,MAAM,QAAQ,OACZ,IAAI,SAAS,YAAY;AACvB,OAAI,OAAO,SAAS,GAAG;IACrB,MAAM,SAAS;AACf,aAAS;AACT,YAAQ,OAAO;AACf;;GAEF,MAAM,QAAQ,iBAAiB;AAC7B,YAAQ,OAAO,SAAS,IAAI,SAAS,KAAK;AAC1C,aAAS;MACR,GAAG;GACN,MAAM,SAAS,WAAmB;AAChC,iBAAa,MAAM;AACnB,UAAM,eAAe,QAAQ,MAAM;IACnC,MAAM,SAAS;AACf,aAAS;AACT,YAAQ,OAAO;;AAEjB,SAAM,GAAG,QAAQ,MAAM;IACvB;EAEJ,MAAM,KAAK,MAAM,qBAAqB,OAAO,MAAM,UAAU;EAC7D,MAAM,KAAK,MAAM,qBAAqB,OAAO,MAAM,UAAU;EAE7D,MAAM,OAA0B,IAAI,MAAM,GAAG,CAAC,KAAK,KAAK;AACxD,6BACE,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,GAAG,MAAM,EAAE,EACvC,MACD;AACD,QAAM,IAAI,SAAS,YAAY,WAAW,SAAS,UAAU,CAAC;EAE9D,MAAM,YAAY;AAClB,WAAS;AACT,MAAI,WAAW;GACb,MAAM,YAAY;GAClB,IAAI,MAAM;AACV,UAAO,MAAM,UAAU,QAAQ;IAC7B,MAAM,UAAU,UAAU,QAAQ,WAAW,IAAI;AACjD,QAAI,YAAY,GAAI;IACpB,IAAI,MAAM,UAAU,QAAQ,QAAQ,QAAQ;AAC5C,QAAI,QAAQ,GAAI,OAAM,UAAU,QAAQ,UAAU,QAAQ;AAC1D,QAAI,QAAQ,GAAI;IAEhB,MAAM,SAAS,qBADD,UAAU,MAAM,SAAS,MAAM,EAAE,CACL;AAC1C,QAAI,UAAU,OAAO,SAAS,KAAK,OAAO,QAAQ,GAAI,MAAK,OAAO,SAAS,OAAO;AAClF,UAAM,MAAM;;;EAIhB,MAAM,OAAO,KAAK,YAAY,GAAG,GAAG;EACpC,MAAM,UAAgC,EAAE,MAAM;AAC9C,MAAI,GAAI,SAAQ,aAAa;AAC7B,MAAI,GAAI,SAAQ,aAAa;EAE7B,MAAM,aAAoC;GACxC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;AACD,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IACtB,KAAI,KAAK,GAAK,SAAmC,WAAW,MAAO,KAAK;AAE1E,MAAI,IAAI;AACN,WAAQ,cAAc;AACtB,WAAQ,sBAAsB;;AAEhC,MAAI,GAAI,SAAQ,aAAa;AAC7B,MAAI,KAAK,GAAI,SAAQ,sBAAsB,KAAK;AAEhD,SAAO;GAAE;GAAI;GAAI;GAAM;GAAM;GAAS;WAC9B;AACR,QAAM,eAAe,QAAQ,OAAO;AACpC,MAAI,CAAC,OAAQ,OAAM,WAAW,MAAM;;;AAgCxC,SAAS,YAAY,KAAsB;CACzC,MAAM,IAAI,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;CAC1C,MAAM,IAAI,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;CAC1C,MAAM,IAAI,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;AAC1C,QAAO,QAAS,IAAI,QAAS,IAAI,QAAS,KAAK;;;mBAvJmC;kBACP;;;;AC0D7E,SAAS,cAAkF;CACzF,MAAM,IAAI,QAAQ,IAAI;AACtB,KAAI,CAAC,EAAG,QAAO;AACf,KAAI,MAAM,eAAe,MAAM,SAAS,MAAM,YAAY,MAAM,YAAY,MAAM,UAAU,MAAM,OAChG,QAAO;AACT,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,eAAsB,aAAa,OAA4B,EAAE,EAA+B;CAC9F,MAAM,UAAU,KAAK,WAAW;CAChC,MAAM,OAAO,KAAK,QAAQ;AAG1B,KAAI,KAAK,UAAU;EACjB,MAAM,QAAQ,UAAU,KAAK,UAAU;GAAE;GAAS;GAAM,CAAC;AACzD,SAAO;GACL,QAAQ,KAAK;GACb;GACA,QAAQ;GACR,YAAY;GACZ,aAAa,aAAa,WAAW;GACrC,aAAa,KAAK,SAAS;GAC5B;;CAGH,MAAM,UAAU,aAAa;AAC7B,KAAI,YAAY,UAAU,YAAY,UAAU;EAE9C,MAAM,WAAW,KAAK,iBAAiB,QAAQ,oBAAoB;AAEnE,SAAO;GACL,QAAQ;GACR,OAHY,UAAU,UAAU;IAAE;IAAS;IAAM,CAAC;GAIlD,QAAQ;GACR,YAAY;GACZ,aAAa,aAAa,WAAW;GACrC,aAAa,SAAS;GACvB;;CAIH,MAAM,WAAW,MAAM,qBAAqB,KAAK,UAAU;AAG3D,KAAI,CAAC,UAAU;EAEb,MAAM,WADO,KAAK,iBAAiB,QACX,oBAAoB;AAE5C,SAAO;GACL,QAAQ;GACR,OAHY,UAAU,UAAU;IAAE;IAAS;IAAM,CAAC;GAIlD,QAAQ;GACR,YAAY;GACZ,aAAa,aAAa,WAAW;GACrC,aAAa,SAAS;GACvB;;CAIH,MAAM,UAAU,KAAK,WAAW,EAAE;AAClC,KAAI,QAAQ,SAAS,GAAG;EACtB,MAAM,QAAQ,iBAAiB,SAAS,SAAS,QAAQ;AACzD,MAAI,OAAO;GACT,MAAM,QAAQ,UAAU,MAAM,QAAQ;IAAE;IAAS;IAAM,CAAC;AACxD,UAAO;IACL,QAAQ,MAAM;IACd;IACA,QAAQ;IACR,YAAY,MAAM;IAClB,aAAa,aAAa,UAAU;IACpC,aAAa,MAAM,OAAO;IAC3B;;;CAOL,MAAM,SAAsB;EAAE,GAFjB,SAAS,OACE,oBAAoB;EACD,GAAG,WAAW,SAAS,QAAQ;EAAE;CAC5E,MAAM,QAAQ,UAAU,QAAQ;EAAE;EAAS;EAAM,CAAC;CAGlD,MAAM,cAA8D,EAAE;AACtE,MAAK,MAAM,SAAS,oBAElB,aAAY,SAAS,OADL,SAAS,QAAoC,WACtB,WAAW,WAAW;CAI/D,MAAM,cAAc,OAAO,OAAO,YAAY,CAAC,QAAQ,MAAM,MAAM,SAAS,CAAC;AAG7E,QAAO;EACL,QAAQ;EACR;EACA,QAAQ;EACR,YANiB,KAAK,IAAI,GAAG,cAAc,GAAG;EAO9C;EACA,aAAa,KAAA;EACd;;AAGH,SAAS,WAAW,SAAqD;CACvE,MAAM,SAAkC,EAAE;AAC1C,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,QAAQ,CAC1C,KAAI,KAAK,KAAM,QAAO,KAAK;AAE7B,QAAO;;AAGT,SAAS,aAAa,KAAiE;CACrF,MAAM,MAAsD,EAAE;AAC9D,MAAK,MAAM,SAAS,oBAAqB,KAAI,SAAS;AACtD,QAAO;;;aA1LuC;cACI;cACF;mBACC;uBACyB;;;ACCtE,OAAM;AAGC,CAA2B,GAAG,IAAH;AAG3B,CAA4B,GAAG,IAAH;;;;;iBCiCrB;iBAMkC;aAMQ;wBA4CnC;aA0B4D;mBACjC;cAQC;kBAO5B;oBAI2C;uBAyB4C;aAG/D;cAMe;mBAOkD;oBAwB7F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme.d.mts","names":[],"sources":["../packages/color/src/types.ts","../packages/color/src/color.ts","../packages/color/src/contrast.ts","../packages/ansi/src/theme/detect.ts"],"mappings":";;;;;KACY,GAAA;;UAGK,cAAA;EAHL;EAKV,KAAA;;EAEA,EAAA;EAPa;EASb,GAAA;AAAA;;;;iBCYc,QAAA,CAAS,GAAA;;iBAaT,QAAA,CAAS,CAAA,UAAW,CAAA,UAAW,CAAA;;;;;AAA/C;;;;;;;;iBAmCgB,KAAA,CAAM,CAAA,UAAW,CAAA,UAAW,CAAA;AAA5C;;;;;;AAAA,iBAUgB,QAAA,CAAS,KAAA,UAAe,MAAA;;;AAAxC;;;iBAWgB,MAAA,CAAO,KAAA,UAAe,MAAA;;;;;AAqCtC;;;iBAZgB,UAAA,CAAW,KAAA,UAAe,MAAA;;AAqD1C;;;;;iBAzCgB,UAAA,CAAW,KAAA;;;;;iBAyCX,UAAA,CAAW,EAAA;AAAA,iBAUX,QAAA,CAAS,CAAA,UAAW,CAAA,UAAW,CAAA,WAAY,GAAA;AAAA,iBAiB3C,QAAA,CAAS,CAAA,UAAW,CAAA,UAAW,CAAA;AAAA,iBAU/B,QAAA,CAAS,GAAA,WAAc,GAAA;;;;;;;;;;;;;AAxLvC;;;;;AAaA;;;;iBCDgB,aAAA,CAAc,EAAA,UAAY,EAAA,WAAa,cAAA;;;;;ADoCvD;;;;;;;;;AAUA;;;;;AAWA;;;;;AAyBA;iBC1CgB,cAAA,CAAe,KAAA,UAAe,OAAA,UAAiB,QAAA;;;UChE9C,cAAA;EACf,EAAA;EACA,EAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA,EAAS,OAAA,CAAQ,WAAA;AAAA;AAAA,iBAGG,oBAAA,CAAqB,SAAA,YAAkB,OAAA,CAAQ,cAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme.mjs","names":[],"sources":["../src/theme.ts"],"sourcesContent":["// silvery/theme — re-exports from @silvery/theme\n// Theme tokens, palettes, ThemeProvider, useTheme, color utilities\n\nexport * from \"@silvery/theme\"\n"],"mappings":""}