@mdxui/terminal 2.0.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 (191) hide show
  1. package/README.md +571 -0
  2. package/dist/ansi-css-Sk5mWtdK.d.ts +119 -0
  3. package/dist/ansi-css-V6JIHGsM.d.ts +119 -0
  4. package/dist/ansi-css-_3eSEU9d.d.ts +119 -0
  5. package/dist/chunk-3EFDH7PK.js +5235 -0
  6. package/dist/chunk-3RG5ZIWI.js +10 -0
  7. package/dist/chunk-3X5IR6WE.js +884 -0
  8. package/dist/chunk-4FV5ZDCE.js +5236 -0
  9. package/dist/chunk-4OVMSF2J.js +243 -0
  10. package/dist/chunk-63FEETIS.js +4048 -0
  11. package/dist/chunk-B43KP7XJ.js +884 -0
  12. package/dist/chunk-BMTJXWUV.js +655 -0
  13. package/dist/chunk-C3SVH4N7.js +882 -0
  14. package/dist/chunk-EVWR7Y47.js +874 -0
  15. package/dist/chunk-F6A5VWUC.js +1285 -0
  16. package/dist/chunk-FD7KW7GE.js +882 -0
  17. package/dist/chunk-GBQ6UD6I.js +655 -0
  18. package/dist/chunk-GMDD3M6U.js +5227 -0
  19. package/dist/chunk-JBHRXOXM.js +1058 -0
  20. package/dist/chunk-JFOO3EYO.js +1182 -0
  21. package/dist/chunk-JQ5H3WXL.js +1291 -0
  22. package/dist/chunk-JQD5NASE.js +234 -0
  23. package/dist/chunk-KRHJP5R7.js +592 -0
  24. package/dist/chunk-KWF6WVJE.js +962 -0
  25. package/dist/chunk-LHYQVN3H.js +1038 -0
  26. package/dist/chunk-M3TLQLGC.js +1032 -0
  27. package/dist/chunk-MVW4Q5OP.js +240 -0
  28. package/dist/chunk-NXCZSWLU.js +1294 -0
  29. package/dist/chunk-O25TNRO6.js +607 -0
  30. package/dist/chunk-PNECDA2I.js +884 -0
  31. package/dist/chunk-QIHWRLJR.js +962 -0
  32. package/dist/chunk-QW5YMQ7K.js +882 -0
  33. package/dist/chunk-R5U7XKVJ.js +16 -0
  34. package/dist/chunk-RP2MVQLR.js +962 -0
  35. package/dist/chunk-TP6RXGXA.js +1087 -0
  36. package/dist/chunk-TQQSTITZ.js +655 -0
  37. package/dist/chunk-X24GWXQV.js +1281 -0
  38. package/dist/components/index.d.ts +802 -0
  39. package/dist/components/index.js +149 -0
  40. package/dist/data/index.d.ts +2554 -0
  41. package/dist/data/index.js +51 -0
  42. package/dist/forms/index.d.ts +1596 -0
  43. package/dist/forms/index.js +464 -0
  44. package/dist/index-CQRFZntR.d.ts +867 -0
  45. package/dist/index.d.ts +579 -0
  46. package/dist/index.js +786 -0
  47. package/dist/interactive-D0JkWosD.d.ts +217 -0
  48. package/dist/keyboard/index.d.ts +2 -0
  49. package/dist/keyboard/index.js +43 -0
  50. package/dist/renderers/index.d.ts +546 -0
  51. package/dist/renderers/index.js +2157 -0
  52. package/dist/storybook/index.d.ts +396 -0
  53. package/dist/storybook/index.js +641 -0
  54. package/dist/theme/index.d.ts +1339 -0
  55. package/dist/theme/index.js +123 -0
  56. package/dist/types-Bxu5PAgA.d.ts +710 -0
  57. package/dist/types-CIlop5Ji.d.ts +701 -0
  58. package/dist/types-Ca8p_p5X.d.ts +710 -0
  59. package/package.json +90 -0
  60. package/src/__tests__/components/data/card.test.ts +458 -0
  61. package/src/__tests__/components/data/list.test.ts +473 -0
  62. package/src/__tests__/components/data/metrics.test.ts +541 -0
  63. package/src/__tests__/components/data/table.test.ts +448 -0
  64. package/src/__tests__/components/input/field.test.ts +555 -0
  65. package/src/__tests__/components/input/form.test.ts +870 -0
  66. package/src/__tests__/components/input/search.test.ts +1238 -0
  67. package/src/__tests__/components/input/select.test.ts +658 -0
  68. package/src/__tests__/components/navigation/breadcrumb.test.ts +923 -0
  69. package/src/__tests__/components/navigation/command-palette.test.ts +1095 -0
  70. package/src/__tests__/components/navigation/sidebar.test.ts +1018 -0
  71. package/src/__tests__/components/navigation/tabs.test.ts +995 -0
  72. package/src/__tests__/components.test.tsx +1197 -0
  73. package/src/__tests__/core/compiler.test.ts +986 -0
  74. package/src/__tests__/core/parser.test.ts +785 -0
  75. package/src/__tests__/core/tier-switcher.test.ts +1103 -0
  76. package/src/__tests__/core/types.test.ts +1398 -0
  77. package/src/__tests__/data/collections.test.ts +1337 -0
  78. package/src/__tests__/data/db.test.ts +1265 -0
  79. package/src/__tests__/data/reactive.test.ts +1010 -0
  80. package/src/__tests__/data/sync.test.ts +1614 -0
  81. package/src/__tests__/errors.test.ts +660 -0
  82. package/src/__tests__/forms/integration.test.ts +444 -0
  83. package/src/__tests__/integration.test.ts +905 -0
  84. package/src/__tests__/keyboard.test.ts +1791 -0
  85. package/src/__tests__/renderer.test.ts +489 -0
  86. package/src/__tests__/renderers/ansi-css.test.ts +948 -0
  87. package/src/__tests__/renderers/ansi.test.ts +1366 -0
  88. package/src/__tests__/renderers/ascii.test.ts +1360 -0
  89. package/src/__tests__/renderers/interactive.test.ts +2353 -0
  90. package/src/__tests__/renderers/markdown.test.ts +1483 -0
  91. package/src/__tests__/renderers/text.test.ts +1369 -0
  92. package/src/__tests__/renderers/unicode.test.ts +1307 -0
  93. package/src/__tests__/theme.test.ts +639 -0
  94. package/src/__tests__/utils/assertions.ts +685 -0
  95. package/src/__tests__/utils/index.ts +115 -0
  96. package/src/__tests__/utils/test-renderer.ts +381 -0
  97. package/src/__tests__/utils/utils.test.ts +560 -0
  98. package/src/components/containers/card.ts +56 -0
  99. package/src/components/containers/dialog.ts +53 -0
  100. package/src/components/containers/index.ts +9 -0
  101. package/src/components/containers/panel.ts +59 -0
  102. package/src/components/feedback/badge.ts +40 -0
  103. package/src/components/feedback/index.ts +8 -0
  104. package/src/components/feedback/spinner.ts +23 -0
  105. package/src/components/helpers.ts +81 -0
  106. package/src/components/index.ts +153 -0
  107. package/src/components/layout/breadcrumb.ts +31 -0
  108. package/src/components/layout/index.ts +10 -0
  109. package/src/components/layout/list.ts +29 -0
  110. package/src/components/layout/sidebar.ts +79 -0
  111. package/src/components/layout/table.ts +62 -0
  112. package/src/components/primitives/box.ts +95 -0
  113. package/src/components/primitives/button.ts +54 -0
  114. package/src/components/primitives/index.ts +11 -0
  115. package/src/components/primitives/input.ts +88 -0
  116. package/src/components/primitives/select.ts +97 -0
  117. package/src/components/primitives/text.ts +60 -0
  118. package/src/components/render.ts +155 -0
  119. package/src/components/templates/app.ts +43 -0
  120. package/src/components/templates/index.ts +8 -0
  121. package/src/components/templates/site.ts +54 -0
  122. package/src/components/types.ts +777 -0
  123. package/src/core/compiler.ts +718 -0
  124. package/src/core/parser.ts +127 -0
  125. package/src/core/tier-switcher.ts +607 -0
  126. package/src/core/types.ts +672 -0
  127. package/src/data/collection.ts +316 -0
  128. package/src/data/collections.ts +50 -0
  129. package/src/data/context.tsx +174 -0
  130. package/src/data/db.ts +127 -0
  131. package/src/data/hooks.ts +532 -0
  132. package/src/data/index.ts +138 -0
  133. package/src/data/reactive.ts +1225 -0
  134. package/src/data/saas-collections.ts +375 -0
  135. package/src/data/sync.ts +1213 -0
  136. package/src/data/types.ts +660 -0
  137. package/src/forms/converters.ts +512 -0
  138. package/src/forms/index.ts +133 -0
  139. package/src/forms/schemas.ts +403 -0
  140. package/src/forms/types.ts +476 -0
  141. package/src/index.ts +542 -0
  142. package/src/keyboard/focus.ts +748 -0
  143. package/src/keyboard/index.ts +96 -0
  144. package/src/keyboard/integration.ts +371 -0
  145. package/src/keyboard/manager.ts +377 -0
  146. package/src/keyboard/presets.ts +90 -0
  147. package/src/renderers/ansi-css.ts +576 -0
  148. package/src/renderers/ansi.ts +802 -0
  149. package/src/renderers/ascii.ts +680 -0
  150. package/src/renderers/breadcrumb.ts +480 -0
  151. package/src/renderers/command-palette.ts +802 -0
  152. package/src/renderers/components/field.ts +210 -0
  153. package/src/renderers/components/form.ts +327 -0
  154. package/src/renderers/components/index.ts +21 -0
  155. package/src/renderers/components/search.ts +449 -0
  156. package/src/renderers/components/select.ts +222 -0
  157. package/src/renderers/index.ts +101 -0
  158. package/src/renderers/interactive/component-handlers.ts +622 -0
  159. package/src/renderers/interactive/cursor-manager.ts +147 -0
  160. package/src/renderers/interactive/focus-manager.ts +279 -0
  161. package/src/renderers/interactive/index.ts +661 -0
  162. package/src/renderers/interactive/input-handler.ts +164 -0
  163. package/src/renderers/interactive/keyboard-handler.ts +212 -0
  164. package/src/renderers/interactive/mouse-handler.ts +167 -0
  165. package/src/renderers/interactive/state-manager.ts +109 -0
  166. package/src/renderers/interactive/types.ts +338 -0
  167. package/src/renderers/interactive-string.ts +299 -0
  168. package/src/renderers/interactive.ts +59 -0
  169. package/src/renderers/markdown.ts +950 -0
  170. package/src/renderers/sidebar.ts +549 -0
  171. package/src/renderers/tabs.ts +682 -0
  172. package/src/renderers/text.ts +791 -0
  173. package/src/renderers/unicode.ts +917 -0
  174. package/src/renderers/utils.ts +942 -0
  175. package/src/router/adapters.ts +383 -0
  176. package/src/router/types.ts +140 -0
  177. package/src/router/utils.ts +452 -0
  178. package/src/schemas.ts +205 -0
  179. package/src/storybook/index.ts +91 -0
  180. package/src/storybook/interactive-decorator.tsx +659 -0
  181. package/src/storybook/keyboard-simulator.ts +501 -0
  182. package/src/theme/ansi-codes.ts +80 -0
  183. package/src/theme/box-drawing.ts +132 -0
  184. package/src/theme/color-convert.ts +254 -0
  185. package/src/theme/color-support.ts +321 -0
  186. package/src/theme/index.ts +134 -0
  187. package/src/theme/strip-ansi.ts +50 -0
  188. package/src/theme/tailwind-map.ts +469 -0
  189. package/src/theme/text-styles.ts +206 -0
  190. package/src/theme/theme-system.ts +568 -0
  191. package/src/types.ts +103 -0
@@ -0,0 +1,1182 @@
1
+ // src/theme/ansi-codes.ts
2
+ var ANSI = {
3
+ // Reset
4
+ reset: "\x1B[0m",
5
+ // Styles
6
+ bold: "\x1B[1m",
7
+ dim: "\x1B[2m",
8
+ italic: "\x1B[3m",
9
+ underline: "\x1B[4m",
10
+ inverse: "\x1B[7m",
11
+ strikethrough: "\x1B[9m",
12
+ // Foreground colors (basic)
13
+ black: "\x1B[30m",
14
+ red: "\x1B[31m",
15
+ green: "\x1B[32m",
16
+ yellow: "\x1B[33m",
17
+ blue: "\x1B[34m",
18
+ magenta: "\x1B[35m",
19
+ cyan: "\x1B[36m",
20
+ white: "\x1B[37m",
21
+ // Bright foreground colors
22
+ brightBlack: "\x1B[90m",
23
+ brightRed: "\x1B[91m",
24
+ brightGreen: "\x1B[92m",
25
+ brightYellow: "\x1B[93m",
26
+ brightBlue: "\x1B[94m",
27
+ brightMagenta: "\x1B[95m",
28
+ brightCyan: "\x1B[96m",
29
+ brightWhite: "\x1B[97m",
30
+ // Background colors
31
+ bgBlack: "\x1B[40m",
32
+ bgRed: "\x1B[41m",
33
+ bgGreen: "\x1B[42m",
34
+ bgYellow: "\x1B[43m",
35
+ bgBlue: "\x1B[44m",
36
+ bgMagenta: "\x1B[45m",
37
+ bgCyan: "\x1B[46m",
38
+ bgWhite: "\x1B[47m"
39
+ };
40
+
41
+ // src/schemas.ts
42
+ import { z } from "zod";
43
+ var HexColorSchema = z.string().regex(
44
+ /^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/,
45
+ "Invalid hex color format. Expected #RGB, RGB, #RRGGBB, or RRGGBB"
46
+ );
47
+ var RgbComponentSchema = z.number().int("RGB component must be an integer").min(0, "RGB component must be >= 0").max(255, "RGB component must be <= 255");
48
+ var RgbColorSchema = z.object({
49
+ r: RgbComponentSchema,
50
+ g: RgbComponentSchema,
51
+ b: RgbComponentSchema
52
+ });
53
+ var Ansi256CodeSchema = z.number().int("ANSI 256 code must be an integer").min(0, "ANSI 256 code must be >= 0").max(255, "ANSI 256 code must be <= 255");
54
+ var AnsiEscapeSchema = z.string().refine(
55
+ (val) => {
56
+ if (val === "") return true;
57
+ return /^\x1b\[\d+(;\d+)*m$/.test(val);
58
+ },
59
+ {
60
+ message: "Invalid ANSI escape sequence"
61
+ }
62
+ );
63
+ var ThemeModeSchema = z.enum(["dark", "light"]);
64
+ var TerminalThemeColorsSchema = z.object({
65
+ primary: AnsiEscapeSchema,
66
+ secondary: AnsiEscapeSchema,
67
+ accent: AnsiEscapeSchema,
68
+ muted: AnsiEscapeSchema,
69
+ success: AnsiEscapeSchema,
70
+ warning: AnsiEscapeSchema,
71
+ error: AnsiEscapeSchema,
72
+ info: AnsiEscapeSchema,
73
+ border: AnsiEscapeSchema,
74
+ background: AnsiEscapeSchema,
75
+ foreground: AnsiEscapeSchema,
76
+ selection: AnsiEscapeSchema,
77
+ focus: AnsiEscapeSchema
78
+ });
79
+ var CreateTerminalThemeOptionsSchema = z.object({
80
+ mode: ThemeModeSchema.optional(),
81
+ colors: TerminalThemeColorsSchema.partial().optional()
82
+ });
83
+ var LegacyTerminalThemeSchema = z.object({
84
+ primary: AnsiEscapeSchema,
85
+ secondary: AnsiEscapeSchema,
86
+ accent: AnsiEscapeSchema,
87
+ muted: AnsiEscapeSchema,
88
+ success: AnsiEscapeSchema,
89
+ warning: AnsiEscapeSchema,
90
+ error: AnsiEscapeSchema,
91
+ info: AnsiEscapeSchema,
92
+ border: AnsiEscapeSchema,
93
+ background: AnsiEscapeSchema,
94
+ foreground: AnsiEscapeSchema,
95
+ selection: AnsiEscapeSchema,
96
+ focus: AnsiEscapeSchema
97
+ });
98
+ var TypographyOptionsSchema = z.object({
99
+ headingWeight: z.string(),
100
+ bodyWeight: z.string(),
101
+ codeFont: z.string()
102
+ });
103
+ var SpacingOptionsSchema = z.object({
104
+ xs: z.number(),
105
+ sm: z.number(),
106
+ md: z.number(),
107
+ lg: z.number(),
108
+ xl: z.number()
109
+ });
110
+ var LegacyTerminalThemeWithExtrasSchema = LegacyTerminalThemeSchema.extend({
111
+ typography: TypographyOptionsSchema.optional(),
112
+ spacing: SpacingOptionsSchema.optional()
113
+ });
114
+ var CreateThemeInputSchema = LegacyTerminalThemeWithExtrasSchema.partial();
115
+ var RgbToAnsiOptionsSchema = z.object({
116
+ background: z.boolean().optional()
117
+ });
118
+ var ColorSupportSchema = z.enum(["none", "16", "256", "truecolor"]);
119
+
120
+ // src/theme/color-convert.ts
121
+ function rgbToAnsi256(r, g, b) {
122
+ if (r === 0 && g === 0 && b === 0) {
123
+ return 0;
124
+ }
125
+ if (r === 255 && g === 255 && b === 255) {
126
+ return 15;
127
+ }
128
+ if (Math.abs(r - g) < 10 && Math.abs(g - b) < 10 && Math.abs(r - b) < 10) {
129
+ const avg = (r + g + b) / 3;
130
+ if (avg < 8) return 0;
131
+ if (avg > 248) return 15;
132
+ const grayIndex = Math.round((avg - 8) / 10);
133
+ return Math.min(255, Math.max(232, 232 + grayIndex));
134
+ }
135
+ const toColorCubeIndex = (v) => {
136
+ if (v < 48) return 0;
137
+ if (v < 115) return 1;
138
+ return Math.min(5, Math.floor((v - 35) / 40));
139
+ };
140
+ const ri = toColorCubeIndex(r);
141
+ const gi = toColorCubeIndex(g);
142
+ const bi = toColorCubeIndex(b);
143
+ return 16 + 36 * ri + 6 * gi + bi;
144
+ }
145
+ function hexToRgb(hex2) {
146
+ if (!hex2 || typeof hex2 !== "string") {
147
+ return { r: 0, g: 0, b: 0 };
148
+ }
149
+ hex2 = hex2.replace(/^#/, "");
150
+ if (hex2.length === 0) {
151
+ return { r: 0, g: 0, b: 0 };
152
+ }
153
+ if (hex2.length === 3) {
154
+ hex2 = hex2.split("").map((c) => c + c).join("");
155
+ }
156
+ if (!/^[0-9a-fA-F]{6}$/.test(hex2)) {
157
+ return { r: 0, g: 0, b: 0 };
158
+ }
159
+ const num = parseInt(hex2, 16);
160
+ return {
161
+ r: num >> 16 & 255,
162
+ g: num >> 8 & 255,
163
+ b: num & 255
164
+ };
165
+ }
166
+ function rgbToAnsi(r, g, b, opts) {
167
+ const code = rgbToAnsi256(r, g, b);
168
+ const prefix = opts?.background ? "48" : "38";
169
+ return `\x1B[${prefix};5;${code}m`;
170
+ }
171
+ function hexToAnsi(hex2, opts) {
172
+ const { r, g, b } = hexToRgb(hex2);
173
+ return rgbToAnsi(r, g, b, opts);
174
+ }
175
+ function ansi256(n) {
176
+ Ansi256CodeSchema.parse(n);
177
+ return `\x1B[38;5;${n}m`;
178
+ }
179
+ function ansi256Bg(n) {
180
+ Ansi256CodeSchema.parse(n);
181
+ return `\x1B[48;5;${n}m`;
182
+ }
183
+ function rgb(r, g, b) {
184
+ RgbComponentSchema.parse(r);
185
+ RgbComponentSchema.parse(g);
186
+ RgbComponentSchema.parse(b);
187
+ return `\x1B[38;2;${r};${g};${b}m`;
188
+ }
189
+ function rgbBg(r, g, b) {
190
+ RgbComponentSchema.parse(r);
191
+ RgbComponentSchema.parse(g);
192
+ RgbComponentSchema.parse(b);
193
+ return `\x1B[48;2;${r};${g};${b}m`;
194
+ }
195
+ function hex(color) {
196
+ HexColorSchema.parse(color);
197
+ const { r, g, b } = hexToRgb(color);
198
+ return `\x1B[38;2;${r};${g};${b}m`;
199
+ }
200
+ function hexBg(color) {
201
+ HexColorSchema.parse(color);
202
+ const { r, g, b } = hexToRgb(color);
203
+ return `\x1B[48;2;${r};${g};${b}m`;
204
+ }
205
+
206
+ // src/theme/tailwind-map.ts
207
+ var TAILWIND_COLORS = {
208
+ gray: {
209
+ "50": "#f9fafb",
210
+ "100": "#f3f4f6",
211
+ "200": "#e5e7eb",
212
+ "300": "#d1d5db",
213
+ "400": "#9ca3af",
214
+ "500": "#6b7280",
215
+ "600": "#4b5563",
216
+ "700": "#374151",
217
+ "800": "#1f2937",
218
+ "900": "#111827",
219
+ "950": "#030712"
220
+ },
221
+ slate: {
222
+ "50": "#f8fafc",
223
+ "100": "#f1f5f9",
224
+ "200": "#e2e8f0",
225
+ "300": "#cbd5e1",
226
+ "400": "#94a3b8",
227
+ "500": "#64748b",
228
+ "600": "#475569",
229
+ "700": "#334155",
230
+ "800": "#1e293b",
231
+ "900": "#0f172a",
232
+ "950": "#020617"
233
+ },
234
+ zinc: {
235
+ "50": "#fafafa",
236
+ "100": "#f4f4f5",
237
+ "200": "#e4e4e7",
238
+ "300": "#d4d4d8",
239
+ "400": "#a1a1aa",
240
+ "500": "#71717a",
241
+ "600": "#52525b",
242
+ "700": "#3f3f46",
243
+ "800": "#27272a",
244
+ "900": "#18181b",
245
+ "950": "#09090b"
246
+ },
247
+ neutral: {
248
+ "50": "#fafafa",
249
+ "100": "#f5f5f5",
250
+ "200": "#e5e5e5",
251
+ "300": "#d4d4d4",
252
+ "400": "#a3a3a3",
253
+ "500": "#737373",
254
+ "600": "#525252",
255
+ "700": "#404040",
256
+ "800": "#262626",
257
+ "900": "#171717",
258
+ "950": "#0a0a0a"
259
+ },
260
+ stone: {
261
+ "50": "#fafaf9",
262
+ "100": "#f5f5f4",
263
+ "200": "#e7e5e4",
264
+ "300": "#d6d3d1",
265
+ "400": "#a8a29e",
266
+ "500": "#78716c",
267
+ "600": "#57534e",
268
+ "700": "#44403c",
269
+ "800": "#292524",
270
+ "900": "#1c1917",
271
+ "950": "#0c0a09"
272
+ },
273
+ red: {
274
+ "50": "#fef2f2",
275
+ "100": "#fee2e2",
276
+ "200": "#fecaca",
277
+ "300": "#fca5a5",
278
+ "400": "#f87171",
279
+ "500": "#ef4444",
280
+ "600": "#dc2626",
281
+ "700": "#b91c1c",
282
+ "800": "#991b1b",
283
+ "900": "#7f1d1d",
284
+ "950": "#450a0a"
285
+ },
286
+ orange: {
287
+ "50": "#fff7ed",
288
+ "100": "#ffedd5",
289
+ "200": "#fed7aa",
290
+ "300": "#fdba74",
291
+ "400": "#fb923c",
292
+ "500": "#f97316",
293
+ "600": "#ea580c",
294
+ "700": "#c2410c",
295
+ "800": "#9a3412",
296
+ "900": "#7c2d12",
297
+ "950": "#431407"
298
+ },
299
+ amber: {
300
+ "50": "#fffbeb",
301
+ "100": "#fef3c7",
302
+ "200": "#fde68a",
303
+ "300": "#fcd34d",
304
+ "400": "#fbbf24",
305
+ "500": "#f59e0b",
306
+ "600": "#d97706",
307
+ "700": "#b45309",
308
+ "800": "#92400e",
309
+ "900": "#78350f",
310
+ "950": "#451a03"
311
+ },
312
+ yellow: {
313
+ "50": "#fefce8",
314
+ "100": "#fef9c3",
315
+ "200": "#fef08a",
316
+ "300": "#fde047",
317
+ "400": "#facc15",
318
+ "500": "#eab308",
319
+ "600": "#ca8a04",
320
+ "700": "#a16207",
321
+ "800": "#854d0e",
322
+ "900": "#713f12",
323
+ "950": "#422006"
324
+ },
325
+ lime: {
326
+ "50": "#f7fee7",
327
+ "100": "#ecfccb",
328
+ "200": "#d9f99d",
329
+ "300": "#bef264",
330
+ "400": "#a3e635",
331
+ "500": "#84cc16",
332
+ "600": "#65a30d",
333
+ "700": "#4d7c0f",
334
+ "800": "#3f6212",
335
+ "900": "#365314",
336
+ "950": "#1a2e05"
337
+ },
338
+ green: {
339
+ "50": "#f0fdf4",
340
+ "100": "#dcfce7",
341
+ "200": "#bbf7d0",
342
+ "300": "#86efac",
343
+ "400": "#4ade80",
344
+ "500": "#22c55e",
345
+ "600": "#16a34a",
346
+ "700": "#15803d",
347
+ "800": "#166534",
348
+ "900": "#14532d",
349
+ "950": "#052e16"
350
+ },
351
+ emerald: {
352
+ "50": "#ecfdf5",
353
+ "100": "#d1fae5",
354
+ "200": "#a7f3d0",
355
+ "300": "#6ee7b7",
356
+ "400": "#34d399",
357
+ "500": "#10b981",
358
+ "600": "#059669",
359
+ "700": "#047857",
360
+ "800": "#065f46",
361
+ "900": "#064e3b",
362
+ "950": "#022c22"
363
+ },
364
+ teal: {
365
+ "50": "#f0fdfa",
366
+ "100": "#ccfbf1",
367
+ "200": "#99f6e4",
368
+ "300": "#5eead4",
369
+ "400": "#2dd4bf",
370
+ "500": "#14b8a6",
371
+ "600": "#0d9488",
372
+ "700": "#0f766e",
373
+ "800": "#115e59",
374
+ "900": "#134e4a",
375
+ "950": "#042f2e"
376
+ },
377
+ cyan: {
378
+ "50": "#ecfeff",
379
+ "100": "#cffafe",
380
+ "200": "#a5f3fc",
381
+ "300": "#67e8f9",
382
+ "400": "#22d3ee",
383
+ "500": "#06b6d4",
384
+ "600": "#0891b2",
385
+ "700": "#0e7490",
386
+ "800": "#155e75",
387
+ "900": "#164e63",
388
+ "950": "#083344"
389
+ },
390
+ sky: {
391
+ "50": "#f0f9ff",
392
+ "100": "#e0f2fe",
393
+ "200": "#bae6fd",
394
+ "300": "#7dd3fc",
395
+ "400": "#38bdf8",
396
+ "500": "#0ea5e9",
397
+ "600": "#0284c7",
398
+ "700": "#0369a1",
399
+ "800": "#075985",
400
+ "900": "#0c4a6e",
401
+ "950": "#082f49"
402
+ },
403
+ blue: {
404
+ "50": "#eff6ff",
405
+ "100": "#dbeafe",
406
+ "200": "#bfdbfe",
407
+ "300": "#93c5fd",
408
+ "400": "#60a5fa",
409
+ "500": "#3b82f6",
410
+ "600": "#2563eb",
411
+ "700": "#1d4ed8",
412
+ "800": "#1e40af",
413
+ "900": "#1e3a8a",
414
+ "950": "#172554"
415
+ },
416
+ indigo: {
417
+ "50": "#eef2ff",
418
+ "100": "#e0e7ff",
419
+ "200": "#c7d2fe",
420
+ "300": "#a5b4fc",
421
+ "400": "#818cf8",
422
+ "500": "#6366f1",
423
+ "600": "#4f46e5",
424
+ "700": "#4338ca",
425
+ "800": "#3730a3",
426
+ "900": "#312e81",
427
+ "950": "#1e1b4b"
428
+ },
429
+ violet: {
430
+ "50": "#f5f3ff",
431
+ "100": "#ede9fe",
432
+ "200": "#ddd6fe",
433
+ "300": "#c4b5fd",
434
+ "400": "#a78bfa",
435
+ "500": "#8b5cf6",
436
+ "600": "#7c3aed",
437
+ "700": "#6d28d9",
438
+ "800": "#5b21b6",
439
+ "900": "#4c1d95",
440
+ "950": "#2e1065"
441
+ },
442
+ purple: {
443
+ "50": "#faf5ff",
444
+ "100": "#f3e8ff",
445
+ "200": "#e9d5ff",
446
+ "300": "#d8b4fe",
447
+ "400": "#c084fc",
448
+ "500": "#a855f7",
449
+ "600": "#9333ea",
450
+ "700": "#7e22ce",
451
+ "800": "#6b21a8",
452
+ "900": "#581c87",
453
+ "950": "#3b0764"
454
+ },
455
+ fuchsia: {
456
+ "50": "#fdf4ff",
457
+ "100": "#fae8ff",
458
+ "200": "#f5d0fe",
459
+ "300": "#f0abfc",
460
+ "400": "#e879f9",
461
+ "500": "#d946ef",
462
+ "600": "#c026d3",
463
+ "700": "#a21caf",
464
+ "800": "#86198f",
465
+ "900": "#701a75",
466
+ "950": "#4a044e"
467
+ },
468
+ pink: {
469
+ "50": "#fdf2f8",
470
+ "100": "#fce7f3",
471
+ "200": "#fbcfe8",
472
+ "300": "#f9a8d4",
473
+ "400": "#f472b6",
474
+ "500": "#ec4899",
475
+ "600": "#db2777",
476
+ "700": "#be185d",
477
+ "800": "#9d174d",
478
+ "900": "#831843",
479
+ "950": "#500724"
480
+ },
481
+ rose: {
482
+ "50": "#fff1f2",
483
+ "100": "#ffe4e6",
484
+ "200": "#fecdd3",
485
+ "300": "#fda4af",
486
+ "400": "#fb7185",
487
+ "500": "#f43f5e",
488
+ "600": "#e11d48",
489
+ "700": "#be123c",
490
+ "800": "#9f1239",
491
+ "900": "#881337",
492
+ "950": "#4c0519"
493
+ }
494
+ };
495
+ var TAILWIND_TO_ANSI_256 = {
496
+ "blue-500": 33,
497
+ // #3b82f6 - bright blue
498
+ "red-600": 160,
499
+ // #dc2626 - dark red
500
+ "green-400": 71,
501
+ // #4ade80 - light green
502
+ "yellow-500": 220,
503
+ // #eab308 - golden yellow
504
+ "purple-600": 128,
505
+ // #9333ea - purple
506
+ "gray-800": 238
507
+ // #1f2937 - dark gray (grayscale)
508
+ };
509
+ function tailwindToAnsi(className) {
510
+ if (className === "font-bold") return ANSI.bold;
511
+ if (className === "italic") return ANSI.italic;
512
+ if (className === "underline") return ANSI.underline;
513
+ if (className === "line-through") return ANSI.strikethrough;
514
+ if (className === "text-white") return "\x1B[38;5;15m";
515
+ if (className === "text-black") return "\x1B[38;5;0m";
516
+ const textMatch = className.match(/^text-(\w+)-(\d+)$/);
517
+ const bgMatch = className.match(/^bg-(\w+)-(\d+)$/);
518
+ if (textMatch) {
519
+ const [, color, shade] = textMatch;
520
+ const colorKey = `${color}-${shade}`;
521
+ if (TAILWIND_TO_ANSI_256[colorKey]) {
522
+ return `\x1B[38;5;${TAILWIND_TO_ANSI_256[colorKey]}m`;
523
+ }
524
+ if (TAILWIND_COLORS[color]?.[shade]) {
525
+ return hexToAnsi(TAILWIND_COLORS[color][shade]);
526
+ }
527
+ }
528
+ if (bgMatch) {
529
+ const [, color, shade] = bgMatch;
530
+ const colorKey = `${color}-${shade}`;
531
+ if (TAILWIND_TO_ANSI_256[colorKey]) {
532
+ return `\x1B[48;5;${TAILWIND_TO_ANSI_256[colorKey]}m`;
533
+ }
534
+ if (TAILWIND_COLORS[color]?.[shade]) {
535
+ return hexToAnsi(TAILWIND_COLORS[color][shade], { background: true });
536
+ }
537
+ }
538
+ return "";
539
+ }
540
+ var legacyTailwindToAnsi = {
541
+ // Text colors
542
+ "text-primary": ANSI.cyan,
543
+ "text-secondary": ANSI.blue,
544
+ "text-muted": ANSI.brightBlack,
545
+ "text-success": ANSI.green,
546
+ "text-warning": ANSI.yellow,
547
+ "text-error": ANSI.red,
548
+ "text-destructive": ANSI.red,
549
+ // Font styles
550
+ "font-bold": ANSI.bold,
551
+ "font-medium": ANSI.bold,
552
+ italic: ANSI.italic,
553
+ underline: ANSI.underline,
554
+ // Background colors
555
+ "bg-primary": ANSI.bgCyan,
556
+ "bg-secondary": ANSI.bgBlue,
557
+ "bg-muted": ANSI.bgBlack,
558
+ "bg-destructive": ANSI.bgRed
559
+ };
560
+ function tailwindToTerminal(classes) {
561
+ if (!classes || typeof classes !== "string") {
562
+ return "";
563
+ }
564
+ const parts = classes.split(" ").filter(Boolean);
565
+ const ansiCodes = [];
566
+ for (const cls of parts) {
567
+ if (legacyTailwindToAnsi[cls]) {
568
+ ansiCodes.push(legacyTailwindToAnsi[cls]);
569
+ }
570
+ }
571
+ return ansiCodes.join("");
572
+ }
573
+
574
+ // src/theme/theme-system.ts
575
+ var darkThemeColors = {
576
+ primary: "\x1B[38;5;33m",
577
+ // Blue
578
+ secondary: "\x1B[38;5;39m",
579
+ // Lighter blue
580
+ accent: "\x1B[38;5;200m",
581
+ // Magenta/Pink
582
+ muted: "\x1B[38;5;243m",
583
+ // Gray
584
+ success: "\x1B[38;5;71m",
585
+ // Green
586
+ warning: "\x1B[38;5;220m",
587
+ // Yellow
588
+ error: "\x1B[38;5;160m",
589
+ // Red
590
+ info: "\x1B[38;5;33m",
591
+ // Blue
592
+ border: "\x1B[38;5;240m",
593
+ // Dark gray
594
+ background: "\x1B[48;5;234m",
595
+ // Very dark gray
596
+ foreground: "\x1B[38;5;252m",
597
+ // Light gray
598
+ selection: "\x1B[48;5;24m",
599
+ // Dark blue background
600
+ focus: "\x1B[48;5;33m"
601
+ // Blue background
602
+ };
603
+ var lightThemeColors = {
604
+ primary: "\x1B[38;5;25m",
605
+ // Darker blue for light mode
606
+ secondary: "\x1B[38;5;31m",
607
+ // Darker cyan
608
+ accent: "\x1B[38;5;127m",
609
+ // Darker magenta
610
+ muted: "\x1B[38;5;245m",
611
+ // Medium gray
612
+ success: "\x1B[38;5;28m",
613
+ // Darker green
614
+ warning: "\x1B[38;5;172m",
615
+ // Darker yellow/orange
616
+ error: "\x1B[38;5;124m",
617
+ // Darker red
618
+ info: "\x1B[38;5;25m",
619
+ // Darker blue
620
+ border: "\x1B[38;5;250m",
621
+ // Light gray
622
+ background: "\x1B[48;5;255m",
623
+ // White
624
+ foreground: "\x1B[38;5;235m",
625
+ // Dark gray
626
+ selection: "\x1B[48;5;153m",
627
+ // Light blue background
628
+ focus: "\x1B[48;5;33m"
629
+ // Blue background
630
+ };
631
+ function createTerminalTheme(options) {
632
+ CreateTerminalThemeOptionsSchema.parse(options);
633
+ const mode = options.mode || "dark";
634
+ const baseColors = mode === "dark" ? darkThemeColors : lightThemeColors;
635
+ return {
636
+ mode,
637
+ colors: {
638
+ ...baseColors,
639
+ ...options.colors
640
+ }
641
+ };
642
+ }
643
+ function getThemeColor(theme, key, fallback) {
644
+ const color = theme.colors[key];
645
+ if (color !== void 0) {
646
+ return color;
647
+ }
648
+ if (fallback !== void 0) {
649
+ return fallback;
650
+ }
651
+ throw new Error(`Unknown theme color key: ${key}`);
652
+ }
653
+ var CSS_VAR_TO_THEME_KEY = {
654
+ "--primary": "primary",
655
+ "--secondary": "secondary",
656
+ "--accent": "accent",
657
+ "--muted": "muted",
658
+ "--muted-foreground": "muted",
659
+ "--success": "success",
660
+ "--warning": "warning",
661
+ "--error": "error",
662
+ "--destructive": "error",
663
+ "--info": "info",
664
+ "--border": "border",
665
+ "--background": "background",
666
+ "--foreground": "foreground",
667
+ "--selection": "selection",
668
+ "--focus": "focus"
669
+ };
670
+ function cssVarToAnsi(cssVar, theme) {
671
+ const key = CSS_VAR_TO_THEME_KEY[cssVar];
672
+ if (key && theme.colors[key]) {
673
+ return theme.colors[key];
674
+ }
675
+ return "";
676
+ }
677
+ function applyThemeStyles(text, theme, styleKey) {
678
+ const color = theme.colors[styleKey];
679
+ if (!color) {
680
+ return text;
681
+ }
682
+ return `${color}${text}${ANSI.reset}`;
683
+ }
684
+ var defaultTheme = {
685
+ primary: ANSI.cyan,
686
+ secondary: ANSI.blue,
687
+ accent: ANSI.magenta,
688
+ muted: ANSI.brightBlack,
689
+ success: ANSI.green,
690
+ warning: ANSI.yellow,
691
+ error: ANSI.red,
692
+ info: ANSI.blue,
693
+ border: ANSI.brightBlack,
694
+ background: "",
695
+ foreground: ANSI.white,
696
+ selection: ANSI.bgBlue,
697
+ focus: ANSI.bgCyan,
698
+ typography: {
699
+ headingWeight: "bold",
700
+ bodyWeight: "normal",
701
+ codeFont: "monospace"
702
+ },
703
+ spacing: {
704
+ xs: 1,
705
+ sm: 2,
706
+ md: 4,
707
+ lg: 8,
708
+ xl: 16
709
+ }
710
+ };
711
+ var colors = {
712
+ primary: ANSI.cyan,
713
+ secondary: ANSI.blue,
714
+ accent: ANSI.magenta,
715
+ muted: ANSI.brightBlack,
716
+ success: ANSI.green,
717
+ warning: ANSI.yellow,
718
+ error: ANSI.red,
719
+ info: ANSI.blue
720
+ };
721
+ var themeTokens = {
722
+ primary: "primary",
723
+ secondary: "secondary",
724
+ accent: "accent",
725
+ muted: "muted",
726
+ success: "success",
727
+ warning: "warning",
728
+ error: "error",
729
+ info: "info"
730
+ };
731
+ var darkTheme = {
732
+ ...defaultTheme,
733
+ background: ANSI.bgBlack,
734
+ foreground: ANSI.brightWhite
735
+ };
736
+ var lightTheme = {
737
+ ...defaultTheme,
738
+ background: ANSI.bgWhite,
739
+ foreground: ANSI.black
740
+ };
741
+ var highContrastTheme = {
742
+ ...defaultTheme,
743
+ foreground: ANSI.brightWhite,
744
+ background: ANSI.bgBlack,
745
+ primary: ANSI.brightCyan,
746
+ secondary: ANSI.brightBlue
747
+ };
748
+ var themePresets = {
749
+ default: defaultTheme,
750
+ dark: darkTheme,
751
+ light: lightTheme,
752
+ highContrast: highContrastTheme
753
+ };
754
+ function deepMerge(target, source) {
755
+ const result = { ...target };
756
+ for (const key of Object.keys(source)) {
757
+ const sourceValue = source[key];
758
+ const targetValue = target[key];
759
+ if (sourceValue !== void 0) {
760
+ if (typeof sourceValue === "object" && sourceValue !== null && !Array.isArray(sourceValue) && typeof targetValue === "object" && targetValue !== null && !Array.isArray(targetValue)) {
761
+ result[key] = deepMerge(
762
+ targetValue,
763
+ sourceValue
764
+ );
765
+ } else {
766
+ result[key] = sourceValue;
767
+ }
768
+ }
769
+ }
770
+ return result;
771
+ }
772
+ function createTheme(partial) {
773
+ CreateThemeInputSchema.parse(partial);
774
+ return deepMerge(defaultTheme, partial);
775
+ }
776
+ function extendTheme(base, overrides) {
777
+ return deepMerge(base, overrides);
778
+ }
779
+ function composeThemes(...themes) {
780
+ return themes.reduce((acc, theme) => deepMerge(acc, theme), {});
781
+ }
782
+ function createThemeVariant(base, _name, overrides) {
783
+ return extendTheme(base, overrides);
784
+ }
785
+ function detectColorScheme() {
786
+ if (typeof process !== "undefined") {
787
+ const colorBg = process.env?.COLORFGBG;
788
+ if (colorBg) {
789
+ const parts = colorBg.split(";");
790
+ if (parts.length >= 2) {
791
+ const bg2 = parseInt(parts[1], 10);
792
+ if (bg2 > 7 && bg2 < 16) {
793
+ return "light";
794
+ }
795
+ }
796
+ }
797
+ }
798
+ return "dark";
799
+ }
800
+
801
+ // src/theme/text-styles.ts
802
+ function fg(colorName, text) {
803
+ const colorCode = colors[colorName] || defaultTheme[colorName] || colorName;
804
+ return `${colorCode}${text}${ANSI.reset}`;
805
+ }
806
+ function bg(colorName, text) {
807
+ const bgMap = {
808
+ primary: ANSI.bgCyan,
809
+ secondary: ANSI.bgBlue,
810
+ accent: ANSI.bgMagenta,
811
+ muted: ANSI.bgBlack,
812
+ success: ANSI.bgGreen,
813
+ warning: ANSI.bgYellow,
814
+ error: ANSI.bgRed,
815
+ info: ANSI.bgBlue
816
+ };
817
+ const colorCode = bgMap[colorName] || colorName;
818
+ return `${colorCode}${text}${ANSI.reset}`;
819
+ }
820
+ function bold(text) {
821
+ return `${ANSI.bold}${text}${ANSI.reset}`;
822
+ }
823
+ function dim(text) {
824
+ return `${ANSI.dim}${text}${ANSI.reset}`;
825
+ }
826
+ function italic(text) {
827
+ return `${ANSI.italic}${text}${ANSI.reset}`;
828
+ }
829
+ function underline(text) {
830
+ return `${ANSI.underline}${text}${ANSI.reset}`;
831
+ }
832
+ function strikethrough(text) {
833
+ return `${ANSI.strikethrough}${text}${ANSI.reset}`;
834
+ }
835
+ function style(text, modifiers) {
836
+ const modifierMap = {
837
+ bold: ANSI.bold,
838
+ dim: ANSI.dim,
839
+ italic: ANSI.italic,
840
+ underline: ANSI.underline,
841
+ strikethrough: ANSI.strikethrough,
842
+ black: ANSI.black,
843
+ red: ANSI.red,
844
+ green: ANSI.green,
845
+ yellow: ANSI.yellow,
846
+ blue: ANSI.blue,
847
+ magenta: ANSI.magenta,
848
+ cyan: ANSI.cyan,
849
+ white: ANSI.white,
850
+ brightBlack: ANSI.brightBlack,
851
+ brightRed: ANSI.brightRed,
852
+ brightGreen: ANSI.brightGreen,
853
+ brightYellow: ANSI.brightYellow,
854
+ brightBlue: ANSI.brightBlue,
855
+ brightMagenta: ANSI.brightMagenta,
856
+ brightCyan: ANSI.brightCyan,
857
+ brightWhite: ANSI.brightWhite
858
+ };
859
+ const codes = modifiers.map((m) => modifierMap[m] || "").filter(Boolean);
860
+ if (codes.length === 0) return text;
861
+ return `${codes.join("")}${text}${ANSI.reset}`;
862
+ }
863
+ function styled(text, ...codes) {
864
+ if (text == null) return "";
865
+ if (codes.length === 0) return String(text);
866
+ const validCodes = codes.filter((c) => c && typeof c === "string");
867
+ if (validCodes.length === 0) return String(text);
868
+ return `${validCodes.join("")}${text}${ANSI.reset}`;
869
+ }
870
+
871
+ // src/theme/color-support.ts
872
+ function detectColorSupport() {
873
+ if (process.env.NO_COLOR) {
874
+ return "none";
875
+ }
876
+ if (process.env.FORCE_COLOR) {
877
+ const level = parseInt(process.env.FORCE_COLOR, 10);
878
+ if (level === 0) return "none";
879
+ if (level === 1) return "16";
880
+ if (level === 2) return "256";
881
+ if (level >= 3) return "truecolor";
882
+ }
883
+ const colorTerm = process.env.COLORTERM;
884
+ if (colorTerm === "truecolor" || colorTerm === "24bit") {
885
+ return "truecolor";
886
+ }
887
+ const term = process.env.TERM || "";
888
+ if (term === "dumb") {
889
+ return "none";
890
+ }
891
+ if (term.includes("256color")) {
892
+ return "256";
893
+ }
894
+ if (term.includes("color") || term.includes("xterm") || term.includes("vt100")) {
895
+ return "16";
896
+ }
897
+ return "256";
898
+ }
899
+ function ansi256To16(code) {
900
+ if (code < 8) {
901
+ return 30 + code;
902
+ }
903
+ if (code < 16) {
904
+ return 90 + (code - 8);
905
+ }
906
+ let r, g, b;
907
+ if (code >= 232) {
908
+ const gray = (code - 232) * 10 + 8;
909
+ r = g = b = gray;
910
+ } else {
911
+ const cubeIndex = code - 16;
912
+ r = Math.floor(cubeIndex / 36) * 51;
913
+ g = Math.floor(cubeIndex % 36 / 6) * 51;
914
+ b = cubeIndex % 6 * 51;
915
+ }
916
+ const basicColors = [
917
+ { r: 0, g: 0, b: 0, code: 30 },
918
+ // black
919
+ { r: 170, g: 0, b: 0, code: 31 },
920
+ // red
921
+ { r: 0, g: 170, b: 0, code: 32 },
922
+ // green
923
+ { r: 170, g: 170, b: 0, code: 33 },
924
+ // yellow
925
+ { r: 0, g: 0, b: 170, code: 34 },
926
+ // blue
927
+ { r: 170, g: 0, b: 170, code: 35 },
928
+ // magenta
929
+ { r: 0, g: 170, b: 170, code: 36 },
930
+ // cyan
931
+ { r: 170, g: 170, b: 170, code: 37 },
932
+ // white
933
+ { r: 85, g: 85, b: 85, code: 90 },
934
+ // bright black
935
+ { r: 255, g: 85, b: 85, code: 91 },
936
+ // bright red
937
+ { r: 85, g: 255, b: 85, code: 92 },
938
+ // bright green
939
+ { r: 255, g: 255, b: 85, code: 93 },
940
+ // bright yellow
941
+ { r: 85, g: 85, b: 255, code: 94 },
942
+ // bright blue
943
+ { r: 255, g: 85, b: 255, code: 95 },
944
+ // bright magenta
945
+ { r: 85, g: 255, b: 255, code: 96 },
946
+ // bright cyan
947
+ { r: 255, g: 255, b: 255, code: 97 }
948
+ // bright white
949
+ ];
950
+ let minDist = Infinity;
951
+ let closestCode = 37;
952
+ for (const bc of basicColors) {
953
+ const dist = Math.sqrt(
954
+ Math.pow(r - bc.r, 2) + Math.pow(g - bc.g, 2) + Math.pow(b - bc.b, 2)
955
+ );
956
+ if (dist < minDist) {
957
+ minDist = dist;
958
+ closestCode = bc.code;
959
+ }
960
+ }
961
+ return closestCode;
962
+ }
963
+ function parseAnsiCode(ansi) {
964
+ const fg256Match = ansi.match(/\x1b\[38;5;(\d+)m/);
965
+ if (fg256Match) {
966
+ return { type: "fg", format: "256", code: parseInt(fg256Match[1], 10) };
967
+ }
968
+ const bg256Match = ansi.match(/\x1b\[48;5;(\d+)m/);
969
+ if (bg256Match) {
970
+ return { type: "bg", format: "256", code: parseInt(bg256Match[1], 10) };
971
+ }
972
+ const fgTrueMatch = ansi.match(/\x1b\[38;2;(\d+);(\d+);(\d+)m/);
973
+ if (fgTrueMatch) {
974
+ return {
975
+ type: "fg",
976
+ format: "truecolor",
977
+ rgb: {
978
+ r: parseInt(fgTrueMatch[1], 10),
979
+ g: parseInt(fgTrueMatch[2], 10),
980
+ b: parseInt(fgTrueMatch[3], 10)
981
+ }
982
+ };
983
+ }
984
+ const bgTrueMatch = ansi.match(/\x1b\[48;2;(\d+);(\d+);(\d+)m/);
985
+ if (bgTrueMatch) {
986
+ return {
987
+ type: "bg",
988
+ format: "truecolor",
989
+ rgb: {
990
+ r: parseInt(bgTrueMatch[1], 10),
991
+ g: parseInt(bgTrueMatch[2], 10),
992
+ b: parseInt(bgTrueMatch[3], 10)
993
+ }
994
+ };
995
+ }
996
+ const basicMatch = ansi.match(/\x1b\[(\d+)m/);
997
+ if (basicMatch) {
998
+ const code = parseInt(basicMatch[1], 10);
999
+ if (code >= 30 && code <= 37) {
1000
+ return { type: "fg", format: "16", code };
1001
+ }
1002
+ if (code >= 90 && code <= 97) {
1003
+ return { type: "fg", format: "16", code };
1004
+ }
1005
+ if (code >= 40 && code <= 47) {
1006
+ return { type: "bg", format: "16", code };
1007
+ }
1008
+ if (code >= 100 && code <= 107) {
1009
+ return { type: "bg", format: "16", code };
1010
+ }
1011
+ return { type: "style", format: "16", code };
1012
+ }
1013
+ return null;
1014
+ }
1015
+ function degradeColor(ansi, support) {
1016
+ if (support === "none") {
1017
+ return "";
1018
+ }
1019
+ if (support === "truecolor") {
1020
+ return ansi;
1021
+ }
1022
+ const parsed = parseAnsiCode(ansi);
1023
+ if (!parsed) {
1024
+ return ansi;
1025
+ }
1026
+ if (support === "256") {
1027
+ if (parsed.format === "truecolor" && parsed.rgb) {
1028
+ const code = rgbToAnsi256(parsed.rgb.r, parsed.rgb.g, parsed.rgb.b);
1029
+ const prefix = parsed.type === "bg" ? "48" : "38";
1030
+ return `\x1B[${prefix};5;${code}m`;
1031
+ }
1032
+ return ansi;
1033
+ }
1034
+ if (support === "16") {
1035
+ if (parsed.format === "16") {
1036
+ return ansi;
1037
+ }
1038
+ let code256;
1039
+ if (parsed.format === "truecolor" && parsed.rgb) {
1040
+ code256 = rgbToAnsi256(parsed.rgb.r, parsed.rgb.g, parsed.rgb.b);
1041
+ } else if (parsed.code !== void 0) {
1042
+ code256 = parsed.code;
1043
+ } else {
1044
+ return ansi;
1045
+ }
1046
+ const code16 = ansi256To16(code256);
1047
+ return `\x1B[${code16}m`;
1048
+ }
1049
+ return ansi;
1050
+ }
1051
+ function adaptColor(color, level) {
1052
+ return degradeColor(color, level);
1053
+ }
1054
+
1055
+ // src/theme/strip-ansi.ts
1056
+ function stripAnsi(text) {
1057
+ if (!text || typeof text !== "string") {
1058
+ return "";
1059
+ }
1060
+ return text.replace(/\x1b\[[0-9;]*m/g, "");
1061
+ }
1062
+ function visibleLength(text) {
1063
+ return stripAnsi(text).length;
1064
+ }
1065
+
1066
+ // src/theme/box-drawing.ts
1067
+ var boxChars = {
1068
+ single: {
1069
+ topLeft: "\u250C",
1070
+ topRight: "\u2510",
1071
+ bottomLeft: "\u2514",
1072
+ bottomRight: "\u2518",
1073
+ horizontal: "\u2500",
1074
+ vertical: "\u2502",
1075
+ teeLeft: "\u251C",
1076
+ teeRight: "\u2524",
1077
+ teeTop: "\u252C",
1078
+ teeBottom: "\u2534",
1079
+ cross: "\u253C"
1080
+ },
1081
+ double: {
1082
+ topLeft: "\u2554",
1083
+ topRight: "\u2557",
1084
+ bottomLeft: "\u255A",
1085
+ bottomRight: "\u255D",
1086
+ horizontal: "\u2550",
1087
+ vertical: "\u2551",
1088
+ teeLeft: "\u2560",
1089
+ teeRight: "\u2563",
1090
+ teeTop: "\u2566",
1091
+ teeBottom: "\u2569",
1092
+ cross: "\u256C"
1093
+ },
1094
+ rounded: {
1095
+ topLeft: "\u256D",
1096
+ topRight: "\u256E",
1097
+ bottomLeft: "\u2570",
1098
+ bottomRight: "\u256F",
1099
+ horizontal: "\u2500",
1100
+ vertical: "\u2502",
1101
+ teeLeft: "\u251C",
1102
+ teeRight: "\u2524",
1103
+ teeTop: "\u252C",
1104
+ teeBottom: "\u2534",
1105
+ cross: "\u253C"
1106
+ }
1107
+ };
1108
+ function drawBox(width, height, style2 = "single") {
1109
+ if (width < 2) width = 2;
1110
+ if (height < 2) height = 2;
1111
+ width = Math.floor(width);
1112
+ height = Math.floor(height);
1113
+ const chars = boxChars[style2];
1114
+ const lines = [];
1115
+ lines.push(chars.topLeft + chars.horizontal.repeat(Math.max(0, width - 2)) + chars.topRight);
1116
+ for (let i = 0; i < height - 2; i++) {
1117
+ lines.push(chars.vertical + " ".repeat(Math.max(0, width - 2)) + chars.vertical);
1118
+ }
1119
+ lines.push(chars.bottomLeft + chars.horizontal.repeat(Math.max(0, width - 2)) + chars.bottomRight);
1120
+ return lines;
1121
+ }
1122
+
1123
+ export {
1124
+ ANSI,
1125
+ HexColorSchema,
1126
+ RgbComponentSchema,
1127
+ RgbColorSchema,
1128
+ Ansi256CodeSchema,
1129
+ AnsiEscapeSchema,
1130
+ ThemeModeSchema,
1131
+ TerminalThemeColorsSchema,
1132
+ CreateTerminalThemeOptionsSchema,
1133
+ LegacyTerminalThemeSchema,
1134
+ LegacyTerminalThemeWithExtrasSchema,
1135
+ CreateThemeInputSchema,
1136
+ RgbToAnsiOptionsSchema,
1137
+ ColorSupportSchema,
1138
+ hexToRgb,
1139
+ rgbToAnsi,
1140
+ hexToAnsi,
1141
+ ansi256,
1142
+ ansi256Bg,
1143
+ rgb,
1144
+ rgbBg,
1145
+ hex,
1146
+ hexBg,
1147
+ TAILWIND_COLORS,
1148
+ tailwindToAnsi,
1149
+ tailwindToTerminal,
1150
+ createTerminalTheme,
1151
+ getThemeColor,
1152
+ cssVarToAnsi,
1153
+ applyThemeStyles,
1154
+ defaultTheme,
1155
+ colors,
1156
+ themeTokens,
1157
+ darkTheme,
1158
+ lightTheme,
1159
+ highContrastTheme,
1160
+ themePresets,
1161
+ createTheme,
1162
+ extendTheme,
1163
+ composeThemes,
1164
+ createThemeVariant,
1165
+ detectColorScheme,
1166
+ fg,
1167
+ bg,
1168
+ bold,
1169
+ dim,
1170
+ italic,
1171
+ underline,
1172
+ strikethrough,
1173
+ style,
1174
+ styled,
1175
+ detectColorSupport,
1176
+ degradeColor,
1177
+ adaptColor,
1178
+ stripAnsi,
1179
+ visibleLength,
1180
+ boxChars,
1181
+ drawBox
1182
+ };