@flyingrobots/bijou 0.6.0 → 0.9.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.
- package/dist/adapters/test/audit-style.d.ts +25 -0
- package/dist/adapters/test/audit-style.d.ts.map +1 -0
- package/dist/adapters/test/audit-style.js +41 -0
- package/dist/adapters/test/audit-style.js.map +1 -0
- package/dist/adapters/test/index.d.ts +1 -0
- package/dist/adapters/test/index.d.ts.map +1 -1
- package/dist/adapters/test/index.js +1 -0
- package/dist/adapters/test/index.js.map +1 -1
- package/dist/core/components/dag-source.d.ts +4 -0
- package/dist/core/components/dag-source.d.ts.map +1 -1
- package/dist/core/components/dag-source.js +10 -0
- package/dist/core/components/dag-source.js.map +1 -1
- package/dist/core/components/dag.d.ts +2 -0
- package/dist/core/components/dag.d.ts.map +1 -1
- package/dist/core/components/dag.js +55 -10
- package/dist/core/components/dag.js.map +1 -1
- package/dist/core/components/enumerated-list.d.ts +10 -0
- package/dist/core/components/enumerated-list.d.ts.map +1 -0
- package/dist/core/components/enumerated-list.js +147 -0
- package/dist/core/components/enumerated-list.js.map +1 -0
- package/dist/core/components/hyperlink.d.ts +7 -0
- package/dist/core/components/hyperlink.d.ts.map +1 -0
- package/dist/core/components/hyperlink.js +38 -0
- package/dist/core/components/hyperlink.js.map +1 -0
- package/dist/core/components/index.d.ts +8 -0
- package/dist/core/components/index.d.ts.map +1 -1
- package/dist/core/components/index.js +4 -0
- package/dist/core/components/index.js.map +1 -1
- package/dist/core/components/log.d.ts +9 -0
- package/dist/core/components/log.d.ts.map +1 -0
- package/dist/core/components/log.js +87 -0
- package/dist/core/components/log.js.map +1 -0
- package/dist/core/components/markdown.d.ts +29 -0
- package/dist/core/components/markdown.d.ts.map +1 -0
- package/dist/core/components/markdown.js +328 -0
- package/dist/core/components/markdown.js.map +1 -0
- package/dist/core/forms/filter.js +5 -2
- package/dist/core/forms/filter.js.map +1 -1
- package/dist/core/forms/multiselect.js +4 -1
- package/dist/core/forms/multiselect.js.map +1 -1
- package/dist/core/forms/select.js +4 -1
- package/dist/core/forms/select.js.map +1 -1
- package/dist/core/forms/textarea.js +5 -2
- package/dist/core/forms/textarea.js.map +1 -1
- package/dist/core/text/grapheme.d.ts +54 -0
- package/dist/core/text/grapheme.d.ts.map +1 -0
- package/dist/core/text/grapheme.js +160 -0
- package/dist/core/text/grapheme.js.map +1 -0
- package/dist/core/text/index.d.ts +2 -0
- package/dist/core/text/index.d.ts.map +1 -0
- package/dist/core/text/index.js +2 -0
- package/dist/core/text/index.js.map +1 -0
- package/dist/core/theme/color.d.ts +25 -0
- package/dist/core/theme/color.d.ts.map +1 -0
- package/dist/core/theme/color.js +143 -0
- package/dist/core/theme/color.js.map +1 -0
- package/dist/core/theme/downsample.d.ts +35 -0
- package/dist/core/theme/downsample.d.ts.map +1 -0
- package/dist/core/theme/downsample.js +141 -0
- package/dist/core/theme/downsample.js.map +1 -0
- package/dist/core/theme/index.d.ts +2 -0
- package/dist/core/theme/index.d.ts.map +1 -1
- package/dist/core/theme/index.js +4 -0
- package/dist/core/theme/index.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grapheme cluster utilities for correct Unicode text measurement.
|
|
3
|
+
*
|
|
4
|
+
* Uses `Intl.Segmenter` for proper grapheme cluster iteration and a compact
|
|
5
|
+
* lookup for East Asian Wide / emoji display widths.
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Segmenter (lazy singleton)
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
let _segmenter;
|
|
11
|
+
function segmenter() {
|
|
12
|
+
if (!_segmenter) {
|
|
13
|
+
_segmenter = new Intl.Segmenter('en', { granularity: 'grapheme' });
|
|
14
|
+
}
|
|
15
|
+
return _segmenter;
|
|
16
|
+
}
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Wide character detection
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/**
|
|
21
|
+
* Returns true if the given code point occupies 2 terminal columns.
|
|
22
|
+
*
|
|
23
|
+
* Covers:
|
|
24
|
+
* - CJK Unified Ideographs (U+4E00–U+9FFF)
|
|
25
|
+
* - CJK Extension A (U+3400–U+4DBF)
|
|
26
|
+
* - CJK Extension B–I (U+20000–U+3FFFF)
|
|
27
|
+
* - CJK Compatibility Ideographs (U+F900–U+FAFF)
|
|
28
|
+
* - Fullwidth Forms (U+FF01–U+FF60, U+FFE0–U+FFE6)
|
|
29
|
+
* - CJK Radicals / Kangxi (U+2E80–U+2FDF)
|
|
30
|
+
* - CJK Symbols and Punctuation (U+3000–U+303F)
|
|
31
|
+
* - Enclosed CJK Letters (U+3200–U+33FF)
|
|
32
|
+
* - CJK Compatibility (U+FE30–U+FE4F)
|
|
33
|
+
* - Hangul Syllables (U+AC00–U+D7A3)
|
|
34
|
+
* - Emoji (most U+1F000+)
|
|
35
|
+
*/
|
|
36
|
+
export function isWideChar(cp) {
|
|
37
|
+
// Fullwidth Forms
|
|
38
|
+
if (cp >= 0xFF01 && cp <= 0xFF60)
|
|
39
|
+
return true;
|
|
40
|
+
if (cp >= 0xFFE0 && cp <= 0xFFE6)
|
|
41
|
+
return true;
|
|
42
|
+
// CJK Radicals, Kangxi Radicals
|
|
43
|
+
if (cp >= 0x2E80 && cp <= 0x2FDF)
|
|
44
|
+
return true;
|
|
45
|
+
// CJK Symbols and Punctuation, Hiragana, Katakana
|
|
46
|
+
if (cp >= 0x3000 && cp <= 0x33FF)
|
|
47
|
+
return true;
|
|
48
|
+
// CJK Extension A
|
|
49
|
+
if (cp >= 0x3400 && cp <= 0x4DBF)
|
|
50
|
+
return true;
|
|
51
|
+
// CJK Unified Ideographs
|
|
52
|
+
if (cp >= 0x4E00 && cp <= 0x9FFF)
|
|
53
|
+
return true;
|
|
54
|
+
// Hangul Syllables (U+AC00–U+D7A3; excludes Jamo Extended-B which are narrow)
|
|
55
|
+
if (cp >= 0xAC00 && cp <= 0xD7A3)
|
|
56
|
+
return true;
|
|
57
|
+
// CJK Compatibility Ideographs
|
|
58
|
+
if (cp >= 0xF900 && cp <= 0xFAFF)
|
|
59
|
+
return true;
|
|
60
|
+
// CJK Compatibility Forms
|
|
61
|
+
if (cp >= 0xFE30 && cp <= 0xFE4F)
|
|
62
|
+
return true;
|
|
63
|
+
// CJK Extension B–I and beyond
|
|
64
|
+
if (cp >= 0x20000 && cp <= 0x3FFFF)
|
|
65
|
+
return true;
|
|
66
|
+
// Emoji blocks (most render as 2 columns)
|
|
67
|
+
// Miscellaneous Symbols and Pictographs
|
|
68
|
+
if (cp >= 0x1F300 && cp <= 0x1F9FF)
|
|
69
|
+
return true;
|
|
70
|
+
// Supplemental Symbols and Pictographs
|
|
71
|
+
if (cp >= 0x1FA00 && cp <= 0x1FA6F)
|
|
72
|
+
return true;
|
|
73
|
+
// Symbols and Pictographs Extended-A
|
|
74
|
+
if (cp >= 0x1FA70 && cp <= 0x1FAFF)
|
|
75
|
+
return true;
|
|
76
|
+
// Emoticons
|
|
77
|
+
if (cp >= 0x1F600 && cp <= 0x1F64F)
|
|
78
|
+
return true;
|
|
79
|
+
// Transport and Map Symbols
|
|
80
|
+
if (cp >= 0x1F680 && cp <= 0x1F6FF)
|
|
81
|
+
return true;
|
|
82
|
+
// Dingbats (common emoji like ✂️ ✈️)
|
|
83
|
+
if (cp >= 0x2702 && cp <= 0x27B0)
|
|
84
|
+
return true;
|
|
85
|
+
// Regional indicators (flags)
|
|
86
|
+
if (cp >= 0x1F1E0 && cp <= 0x1F1FF)
|
|
87
|
+
return true;
|
|
88
|
+
// Playing Cards, Mahjong Tiles
|
|
89
|
+
if (cp >= 0x1F000 && cp <= 0x1F02F)
|
|
90
|
+
return true;
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// Grapheme segmentation
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
/**
|
|
97
|
+
* Split a string into an array of grapheme clusters.
|
|
98
|
+
*
|
|
99
|
+
* Each element is a single user-perceived character (handles combining
|
|
100
|
+
* marks, ZWJ sequences, flag pairs, skin tones, etc.).
|
|
101
|
+
*/
|
|
102
|
+
export function segmentGraphemes(str) {
|
|
103
|
+
const segments = segmenter().segment(str);
|
|
104
|
+
const result = [];
|
|
105
|
+
for (const { segment } of segments) {
|
|
106
|
+
result.push(segment);
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
// Display width
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
/**
|
|
114
|
+
* Compute the terminal display width of a single grapheme cluster.
|
|
115
|
+
*
|
|
116
|
+
* The width is determined by the widest code point in the cluster:
|
|
117
|
+
* - East Asian Wide / Fullwidth characters → 2
|
|
118
|
+
* - Emoji (U+1F300+) → 2
|
|
119
|
+
* - Everything else (ASCII, Latin, combining marks, etc.) → 1
|
|
120
|
+
*
|
|
121
|
+
* Zero-width characters (combining marks, ZWJ, variation selectors)
|
|
122
|
+
* don't add width on their own — they're part of the cluster.
|
|
123
|
+
*/
|
|
124
|
+
export function graphemeClusterWidth(grapheme) {
|
|
125
|
+
let maxWidth = 1;
|
|
126
|
+
for (const ch of grapheme) {
|
|
127
|
+
const cp = ch.codePointAt(0);
|
|
128
|
+
// Skip zero-width joiners and variation selectors
|
|
129
|
+
if (cp === 0x200D || (cp >= 0xFE00 && cp <= 0xFE0F) || (cp >= 0xE0100 && cp <= 0xE01EF)) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (isWideChar(cp)) {
|
|
133
|
+
maxWidth = 2;
|
|
134
|
+
break; // Can't be wider than 2
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return maxWidth;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Compute the terminal display width of a string.
|
|
141
|
+
*
|
|
142
|
+
* Strips ANSI escape sequences, segments into grapheme clusters,
|
|
143
|
+
* and sums display widths. Correctly handles:
|
|
144
|
+
* - Multi-codepoint emoji (flags, ZWJ families, skin tones)
|
|
145
|
+
* - East Asian Wide characters (CJK, fullwidth forms)
|
|
146
|
+
* - Combining marks (accented characters)
|
|
147
|
+
* - ANSI escape sequences (ignored)
|
|
148
|
+
*/
|
|
149
|
+
export function graphemeWidth(str) {
|
|
150
|
+
// Strip ANSI escapes first
|
|
151
|
+
const clean = str.replace(/\x1b\[[0-9;]*m/g, '');
|
|
152
|
+
if (clean.length === 0)
|
|
153
|
+
return 0;
|
|
154
|
+
let width = 0;
|
|
155
|
+
for (const { segment } of segmenter().segment(clean)) {
|
|
156
|
+
width += graphemeClusterWidth(segment);
|
|
157
|
+
}
|
|
158
|
+
return width;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=grapheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grapheme.js","sourceRoot":"","sources":["../../../src/core/text/grapheme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color manipulation utilities for theme tokens.
|
|
3
|
+
*
|
|
4
|
+
* Provides conversion between hex and RGB, plus manipulation functions
|
|
5
|
+
* (lighten, darken, mix, complementary, saturate, desaturate) that
|
|
6
|
+
* preserve token modifiers.
|
|
7
|
+
*/
|
|
8
|
+
import type { RGB, TokenValue } from './tokens.js';
|
|
9
|
+
/** Parse a hex color string to an RGB tuple. Supports `#RGB` and `#RRGGBB` (with or without `#`). */
|
|
10
|
+
export declare function hexToRgb(hex: string): RGB;
|
|
11
|
+
/** Convert an RGB tuple to a `#rrggbb` hex string. */
|
|
12
|
+
export declare function rgbToHex(rgb: RGB): string;
|
|
13
|
+
/** Blend a token's color toward white by `amount` (0 = unchanged, 1 = white). */
|
|
14
|
+
export declare function lighten(token: TokenValue, amount: number): TokenValue;
|
|
15
|
+
/** Blend a token's color toward black by `amount` (0 = unchanged, 1 = black). */
|
|
16
|
+
export declare function darken(token: TokenValue, amount: number): TokenValue;
|
|
17
|
+
/** Blend two token colors by `ratio` (0 = first, 1 = second, default 0.5). Preserves modifiers from the first token. */
|
|
18
|
+
export declare function mix(a: TokenValue, b: TokenValue, ratio?: number): TokenValue;
|
|
19
|
+
/** Rotate hue by 180° to produce the complementary color. */
|
|
20
|
+
export declare function complementary(token: TokenValue): TokenValue;
|
|
21
|
+
/** Increase saturation by `amount` (0 = unchanged, 1 = full saturation). */
|
|
22
|
+
export declare function saturate(token: TokenValue, amount: number): TokenValue;
|
|
23
|
+
/** Decrease saturation by `amount` (0 = unchanged, 1 = fully desaturated). */
|
|
24
|
+
export declare function desaturate(token: TokenValue, amount: number): TokenValue;
|
|
25
|
+
//# sourceMappingURL=color.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/core/theme/color.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAInD,qGAAqG;AACrG,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAUzC;AAED,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAKzC;AAsED,iFAAiF;AACjF,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAQrE;AAED,iFAAiF;AACjF,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAQpE;AAED,wHAAwH;AACxH,wBAAgB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,SAAM,GAAG,UAAU,CASzE;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAK3D;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAMtE;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAMxE"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color manipulation utilities for theme tokens.
|
|
3
|
+
*
|
|
4
|
+
* Provides conversion between hex and RGB, plus manipulation functions
|
|
5
|
+
* (lighten, darken, mix, complementary, saturate, desaturate) that
|
|
6
|
+
* preserve token modifiers.
|
|
7
|
+
*/
|
|
8
|
+
// ── Conversion ─────────────────────────────────────────────────────
|
|
9
|
+
/** Parse a hex color string to an RGB tuple. Supports `#RGB` and `#RRGGBB` (with or without `#`). */
|
|
10
|
+
export function hexToRgb(hex) {
|
|
11
|
+
let h = hex.startsWith('#') ? hex.slice(1) : hex;
|
|
12
|
+
if (h.length === 3) {
|
|
13
|
+
h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
|
|
14
|
+
}
|
|
15
|
+
if (h.length !== 6 || !/^[0-9a-f]{6}$/i.test(h)) {
|
|
16
|
+
throw new Error(`Invalid hex color: "${hex}"`);
|
|
17
|
+
}
|
|
18
|
+
const n = parseInt(h, 16);
|
|
19
|
+
return [(n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff];
|
|
20
|
+
}
|
|
21
|
+
/** Convert an RGB tuple to a `#rrggbb` hex string. */
|
|
22
|
+
export function rgbToHex(rgb) {
|
|
23
|
+
const r = Math.max(0, Math.min(255, Math.round(rgb[0])));
|
|
24
|
+
const g = Math.max(0, Math.min(255, Math.round(rgb[1])));
|
|
25
|
+
const b = Math.max(0, Math.min(255, Math.round(rgb[2])));
|
|
26
|
+
return '#' + ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1);
|
|
27
|
+
}
|
|
28
|
+
// ── Internal HSL helpers ───────────────────────────────────────────
|
|
29
|
+
function rgbToHsl(rgb) {
|
|
30
|
+
const r = rgb[0] / 255;
|
|
31
|
+
const g = rgb[1] / 255;
|
|
32
|
+
const b = rgb[2] / 255;
|
|
33
|
+
const max = Math.max(r, g, b);
|
|
34
|
+
const min = Math.min(r, g, b);
|
|
35
|
+
const l = (max + min) / 2;
|
|
36
|
+
if (max === min)
|
|
37
|
+
return [0, 0, l];
|
|
38
|
+
const d = max - min;
|
|
39
|
+
const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
40
|
+
let h;
|
|
41
|
+
if (max === r) {
|
|
42
|
+
h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
|
|
43
|
+
}
|
|
44
|
+
else if (max === g) {
|
|
45
|
+
h = ((b - r) / d + 2) / 6;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
h = ((r - g) / d + 4) / 6;
|
|
49
|
+
}
|
|
50
|
+
return [h, s, l];
|
|
51
|
+
}
|
|
52
|
+
function hue2rgb(p, q, t) {
|
|
53
|
+
let tt = t;
|
|
54
|
+
if (tt < 0)
|
|
55
|
+
tt += 1;
|
|
56
|
+
if (tt > 1)
|
|
57
|
+
tt -= 1;
|
|
58
|
+
if (tt < 1 / 6)
|
|
59
|
+
return p + (q - p) * 6 * tt;
|
|
60
|
+
if (tt < 1 / 2)
|
|
61
|
+
return q;
|
|
62
|
+
if (tt < 2 / 3)
|
|
63
|
+
return p + (q - p) * (2 / 3 - tt) * 6;
|
|
64
|
+
return p;
|
|
65
|
+
}
|
|
66
|
+
function hslToRgb(h, s, l) {
|
|
67
|
+
if (s === 0) {
|
|
68
|
+
const v = Math.round(l * 255);
|
|
69
|
+
return [v, v, v];
|
|
70
|
+
}
|
|
71
|
+
const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
72
|
+
const p = 2 * l - q;
|
|
73
|
+
return [
|
|
74
|
+
Math.round(hue2rgb(p, q, h + 1 / 3) * 255),
|
|
75
|
+
Math.round(hue2rgb(p, q, h) * 255),
|
|
76
|
+
Math.round(hue2rgb(p, q, h - 1 / 3) * 255),
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
// ── Token helpers ──────────────────────────────────────────────────
|
|
80
|
+
function clampAmount(amount) {
|
|
81
|
+
return Math.max(0, Math.min(1, amount));
|
|
82
|
+
}
|
|
83
|
+
function withHex(token, hex) {
|
|
84
|
+
return token.modifiers
|
|
85
|
+
? { hex, modifiers: [...token.modifiers] }
|
|
86
|
+
: { hex };
|
|
87
|
+
}
|
|
88
|
+
// ── Manipulation ───────────────────────────────────────────────────
|
|
89
|
+
/** Blend a token's color toward white by `amount` (0 = unchanged, 1 = white). */
|
|
90
|
+
export function lighten(token, amount) {
|
|
91
|
+
const t = clampAmount(amount);
|
|
92
|
+
const [r, g, b] = hexToRgb(token.hex);
|
|
93
|
+
return withHex(token, rgbToHex([
|
|
94
|
+
r + (255 - r) * t,
|
|
95
|
+
g + (255 - g) * t,
|
|
96
|
+
b + (255 - b) * t,
|
|
97
|
+
]));
|
|
98
|
+
}
|
|
99
|
+
/** Blend a token's color toward black by `amount` (0 = unchanged, 1 = black). */
|
|
100
|
+
export function darken(token, amount) {
|
|
101
|
+
const t = clampAmount(amount);
|
|
102
|
+
const [r, g, b] = hexToRgb(token.hex);
|
|
103
|
+
return withHex(token, rgbToHex([
|
|
104
|
+
r * (1 - t),
|
|
105
|
+
g * (1 - t),
|
|
106
|
+
b * (1 - t),
|
|
107
|
+
]));
|
|
108
|
+
}
|
|
109
|
+
/** Blend two token colors by `ratio` (0 = first, 1 = second, default 0.5). Preserves modifiers from the first token. */
|
|
110
|
+
export function mix(a, b, ratio = 0.5) {
|
|
111
|
+
const t = clampAmount(ratio);
|
|
112
|
+
const [ar, ag, ab] = hexToRgb(a.hex);
|
|
113
|
+
const [br, bg, bb] = hexToRgb(b.hex);
|
|
114
|
+
return withHex(a, rgbToHex([
|
|
115
|
+
ar + (br - ar) * t,
|
|
116
|
+
ag + (bg - ag) * t,
|
|
117
|
+
ab + (bb - ab) * t,
|
|
118
|
+
]));
|
|
119
|
+
}
|
|
120
|
+
/** Rotate hue by 180° to produce the complementary color. */
|
|
121
|
+
export function complementary(token) {
|
|
122
|
+
const rgb = hexToRgb(token.hex);
|
|
123
|
+
const [h, s, l] = rgbToHsl(rgb);
|
|
124
|
+
const newH = (h + 0.5) % 1;
|
|
125
|
+
return withHex(token, rgbToHex(hslToRgb(newH, s, l)));
|
|
126
|
+
}
|
|
127
|
+
/** Increase saturation by `amount` (0 = unchanged, 1 = full saturation). */
|
|
128
|
+
export function saturate(token, amount) {
|
|
129
|
+
const t = clampAmount(amount);
|
|
130
|
+
const rgb = hexToRgb(token.hex);
|
|
131
|
+
const [h, s, l] = rgbToHsl(rgb);
|
|
132
|
+
const newS = Math.min(1, s + (1 - s) * t);
|
|
133
|
+
return withHex(token, rgbToHex(hslToRgb(h, newS, l)));
|
|
134
|
+
}
|
|
135
|
+
/** Decrease saturation by `amount` (0 = unchanged, 1 = fully desaturated). */
|
|
136
|
+
export function desaturate(token, amount) {
|
|
137
|
+
const t = clampAmount(amount);
|
|
138
|
+
const rgb = hexToRgb(token.hex);
|
|
139
|
+
const [h, s, l] = rgbToHsl(rgb);
|
|
140
|
+
const newS = s * (1 - t);
|
|
141
|
+
return withHex(token, rgbToHex(hslToRgb(h, newS, l)));
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=color.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../../src/core/theme/color.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color downsampling utilities for terminals with limited color support.
|
|
3
|
+
*
|
|
4
|
+
* Provides pure conversion functions for mapping RGB colors to lower
|
|
5
|
+
* color levels (ANSI 256, ANSI 16) without external dependencies.
|
|
6
|
+
*/
|
|
7
|
+
export type ColorLevel = 'none' | 'ansi16' | 'ansi256' | 'truecolor';
|
|
8
|
+
/**
|
|
9
|
+
* Map an RGB color to the nearest ANSI 256 color index (16–255).
|
|
10
|
+
*
|
|
11
|
+
* The ANSI 256 palette has:
|
|
12
|
+
* - Indices 0–15: standard + bright colors (not targeted here)
|
|
13
|
+
* - Indices 16–231: 6×6×6 color cube
|
|
14
|
+
* - Indices 232–255: grayscale ramp (24 shades)
|
|
15
|
+
*/
|
|
16
|
+
export declare function rgbToAnsi256(r: number, g: number, b: number): number;
|
|
17
|
+
/**
|
|
18
|
+
* Find the nearest ANSI 256 color using Euclidean distance in RGB space.
|
|
19
|
+
*
|
|
20
|
+
* Considers both the 6×6×6 cube and the grayscale ramp, returning
|
|
21
|
+
* whichever is closest to the input color.
|
|
22
|
+
*/
|
|
23
|
+
export declare function nearestAnsi256(r: number, g: number, b: number): number;
|
|
24
|
+
/**
|
|
25
|
+
* Map an RGB color to the nearest ANSI 16 color index (0–15).
|
|
26
|
+
*
|
|
27
|
+
* Uses Euclidean distance in RGB space to find the closest match
|
|
28
|
+
* among the 16 standard terminal colors.
|
|
29
|
+
*/
|
|
30
|
+
export declare function rgbToAnsi16(r: number, g: number, b: number): number;
|
|
31
|
+
/**
|
|
32
|
+
* Convert an ANSI 256 color index to the nearest ANSI 16 color index.
|
|
33
|
+
*/
|
|
34
|
+
export declare function ansi256ToAnsi16(code: number): number;
|
|
35
|
+
//# sourceMappingURL=downsample.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downsample.d.ts","sourceRoot":"","sources":["../../../src/core/theme/downsample.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AAMrE;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAapE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BtE;AAqDD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAcnE;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOpD"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color downsampling utilities for terminals with limited color support.
|
|
3
|
+
*
|
|
4
|
+
* Provides pure conversion functions for mapping RGB colors to lower
|
|
5
|
+
* color levels (ANSI 256, ANSI 16) without external dependencies.
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// RGB → ANSI 256
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/**
|
|
11
|
+
* Map an RGB color to the nearest ANSI 256 color index (16–255).
|
|
12
|
+
*
|
|
13
|
+
* The ANSI 256 palette has:
|
|
14
|
+
* - Indices 0–15: standard + bright colors (not targeted here)
|
|
15
|
+
* - Indices 16–231: 6×6×6 color cube
|
|
16
|
+
* - Indices 232–255: grayscale ramp (24 shades)
|
|
17
|
+
*/
|
|
18
|
+
export function rgbToAnsi256(r, g, b) {
|
|
19
|
+
// Check if it's close to grayscale first
|
|
20
|
+
if (r === g && g === b) {
|
|
21
|
+
if (r < 8)
|
|
22
|
+
return 16; // black end of cube
|
|
23
|
+
if (r > 248)
|
|
24
|
+
return 231; // white end of cube
|
|
25
|
+
return Math.round((r - 8) / 247 * 24) + 232;
|
|
26
|
+
}
|
|
27
|
+
// Map to 6×6×6 color cube (indices 16–231)
|
|
28
|
+
const ri = Math.round(r / 255 * 5);
|
|
29
|
+
const gi = Math.round(g / 255 * 5);
|
|
30
|
+
const bi = Math.round(b / 255 * 5);
|
|
31
|
+
return 16 + (36 * ri) + (6 * gi) + bi;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Find the nearest ANSI 256 color using Euclidean distance in RGB space.
|
|
35
|
+
*
|
|
36
|
+
* Considers both the 6×6×6 cube and the grayscale ramp, returning
|
|
37
|
+
* whichever is closest to the input color.
|
|
38
|
+
*/
|
|
39
|
+
export function nearestAnsi256(r, g, b) {
|
|
40
|
+
const cubeIdx = rgbToAnsi256(r, g, b);
|
|
41
|
+
// Also check the grayscale ramp for a closer match
|
|
42
|
+
let grayIdx = cubeIdx;
|
|
43
|
+
if (r !== g || g !== b) {
|
|
44
|
+
const gray = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
|
|
45
|
+
if (gray < 8) {
|
|
46
|
+
grayIdx = 16;
|
|
47
|
+
}
|
|
48
|
+
else if (gray > 248) {
|
|
49
|
+
grayIdx = 231;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
grayIdx = Math.round((gray - 8) / 247 * 24) + 232;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (cubeIdx === grayIdx)
|
|
56
|
+
return cubeIdx;
|
|
57
|
+
// Compare distances
|
|
58
|
+
const cubeRgb = ansi256ToRgb(cubeIdx);
|
|
59
|
+
const grayRgb = ansi256ToRgb(grayIdx);
|
|
60
|
+
const cubeDist = colorDistance(r, g, b, cubeRgb[0], cubeRgb[1], cubeRgb[2]);
|
|
61
|
+
const grayDist = colorDistance(r, g, b, grayRgb[0], grayRgb[1], grayRgb[2]);
|
|
62
|
+
return grayDist < cubeDist ? grayIdx : cubeIdx;
|
|
63
|
+
}
|
|
64
|
+
/** Convert an ANSI 256 index (16–255) back to approximate RGB. */
|
|
65
|
+
function ansi256ToRgb(idx) {
|
|
66
|
+
if (idx >= 232) {
|
|
67
|
+
const gray = (idx - 232) * 10 + 8;
|
|
68
|
+
return [gray, gray, gray];
|
|
69
|
+
}
|
|
70
|
+
const value = idx - 16;
|
|
71
|
+
const ri = Math.floor(value / 36);
|
|
72
|
+
const gi = Math.floor((value % 36) / 6);
|
|
73
|
+
const bi = value % 6;
|
|
74
|
+
return [
|
|
75
|
+
ri > 0 ? ri * 40 + 55 : 0,
|
|
76
|
+
gi > 0 ? gi * 40 + 55 : 0,
|
|
77
|
+
bi > 0 ? bi * 40 + 55 : 0,
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
function colorDistance(r1, g1, b1, r2, g2, b2) {
|
|
81
|
+
return (r1 - r2) ** 2 + (g1 - g2) ** 2 + (b1 - b2) ** 2;
|
|
82
|
+
}
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// RGB → ANSI 16
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
/**
|
|
87
|
+
* The 16 standard ANSI colors in RGB, indexed 0–15.
|
|
88
|
+
* 0–7: standard, 8–15: bright variants.
|
|
89
|
+
*/
|
|
90
|
+
const ANSI16_PALETTE = [
|
|
91
|
+
[0, 0, 0], // 0: black
|
|
92
|
+
[128, 0, 0], // 1: red
|
|
93
|
+
[0, 128, 0], // 2: green
|
|
94
|
+
[128, 128, 0], // 3: yellow
|
|
95
|
+
[0, 0, 128], // 4: blue
|
|
96
|
+
[128, 0, 128], // 5: magenta
|
|
97
|
+
[0, 128, 128], // 6: cyan
|
|
98
|
+
[192, 192, 192], // 7: white (light gray)
|
|
99
|
+
[128, 128, 128], // 8: bright black (dark gray)
|
|
100
|
+
[255, 0, 0], // 9: bright red
|
|
101
|
+
[0, 255, 0], // 10: bright green
|
|
102
|
+
[255, 255, 0], // 11: bright yellow
|
|
103
|
+
[0, 0, 255], // 12: bright blue
|
|
104
|
+
[255, 0, 255], // 13: bright magenta
|
|
105
|
+
[0, 255, 255], // 14: bright cyan
|
|
106
|
+
[255, 255, 255], // 15: bright white
|
|
107
|
+
];
|
|
108
|
+
/**
|
|
109
|
+
* Map an RGB color to the nearest ANSI 16 color index (0–15).
|
|
110
|
+
*
|
|
111
|
+
* Uses Euclidean distance in RGB space to find the closest match
|
|
112
|
+
* among the 16 standard terminal colors.
|
|
113
|
+
*/
|
|
114
|
+
export function rgbToAnsi16(r, g, b) {
|
|
115
|
+
let bestIdx = 0;
|
|
116
|
+
let bestDist = Infinity;
|
|
117
|
+
for (let i = 0; i < ANSI16_PALETTE.length; i++) {
|
|
118
|
+
const [pr, pg, pb] = ANSI16_PALETTE[i];
|
|
119
|
+
const dist = colorDistance(r, g, b, pr, pg, pb);
|
|
120
|
+
if (dist < bestDist) {
|
|
121
|
+
bestDist = dist;
|
|
122
|
+
bestIdx = i;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return bestIdx;
|
|
126
|
+
}
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// ANSI 256 → ANSI 16
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
/**
|
|
131
|
+
* Convert an ANSI 256 color index to the nearest ANSI 16 color index.
|
|
132
|
+
*/
|
|
133
|
+
export function ansi256ToAnsi16(code) {
|
|
134
|
+
const clamped = Math.max(0, Math.min(255, Math.round(code)));
|
|
135
|
+
// Standard colors pass through
|
|
136
|
+
if (clamped < 16)
|
|
137
|
+
return clamped;
|
|
138
|
+
const [r, g, b] = ansi256ToRgb(clamped);
|
|
139
|
+
return rgbToAnsi16(r, g, b);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=downsample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downsample.js","sourceRoot":"","sources":["../../../src/core/theme/downsample.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,6 @@ export type { ResolvedTheme, ThemeResolver, ThemeResolverOptions } from './resol
|
|
|
8
8
|
export type { GradientTextOptions } from './gradient.js';
|
|
9
9
|
export { fromDTCG, toDTCG } from './dtcg.js';
|
|
10
10
|
export type { DTCGDocument, DTCGToken, DTCGGroup } from './dtcg.js';
|
|
11
|
+
export { rgbToAnsi256, nearestAnsi256, rgbToAnsi16, ansi256ToAnsi16, type ColorLevel, } from './downsample.js';
|
|
12
|
+
export { hexToRgb, rgbToHex, lighten, darken, mix, complementary, saturate, desaturate, } from './color.js';
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/theme/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,GAAG,EACH,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,aAAa,EACb,SAAS,EACT,eAAe,EACf,KAAK,GACN,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAG3E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAIvF,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/theme/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,GAAG,EACH,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,aAAa,EACb,SAAS,EACT,eAAe,EACf,KAAK,GACN,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAG3E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAIvF,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGpE,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,eAAe,EACf,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,GAAG,EACH,aAAa,EACb,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC"}
|
package/dist/core/theme/index.js
CHANGED
|
@@ -10,4 +10,8 @@ export { lerp3, gradientText } from './gradient.js';
|
|
|
10
10
|
export { isNoColor, getTheme, resolveTheme, _resetThemeForTesting, createThemeResolver, createResolved, } from './resolve.js';
|
|
11
11
|
// DTCG interop
|
|
12
12
|
export { fromDTCG, toDTCG } from './dtcg.js';
|
|
13
|
+
// Color downsampling
|
|
14
|
+
export { rgbToAnsi256, nearestAnsi256, rgbToAnsi16, ansi256ToAnsi16, } from './downsample.js';
|
|
15
|
+
// Color manipulation
|
|
16
|
+
export { hexToRgb, rgbToHex, lighten, darken, mix, complementary, saturate, desaturate, } from './color.js';
|
|
13
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/theme/index.ts"],"names":[],"mappings":"AAaA,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAE3E,8BAA8B;AAC9B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnD,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEpD,WAAW;AACX,OAAO,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAOtB,eAAe;AACf,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/theme/index.ts"],"names":[],"mappings":"AAaA,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAE3E,8BAA8B;AAC9B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnD,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEpD,WAAW;AACX,OAAO,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAOtB,eAAe;AACf,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAG7C,qBAAqB;AACrB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,eAAe,GAEhB,MAAM,iBAAiB,CAAC;AAEzB,qBAAqB;AACrB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,GAAG,EACH,aAAa,EACb,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export type { RuntimePort, IOPort, RawInputHandle, TimerHandle, StylePort, BijouContext, } from './ports/index.js';
|
|
2
2
|
export { getDefaultContext, setDefaultContext, _resetDefaultContextForTesting, } from './context.js';
|
|
3
3
|
export { createBijou, type CreateBijouOptions } from './factory.js';
|
|
4
|
-
export { type RGB, type GradientStop, type TextModifier, type TokenValue, type InkColor, type BaseStatusKey, type BaseUiKey, type BaseGradientKey, type Theme, CYAN_MAGENTA, TEAL_ORANGE_PINK, PRESETS, tv, styled, styledStatus, extendTheme, lerp3, gradientText, type GradientTextOptions, isNoColor, getTheme, resolveTheme, _resetThemeForTesting, createThemeResolver, createResolved, type ResolvedTheme, type ThemeResolver, type ThemeResolverOptions, fromDTCG, toDTCG, type DTCGDocument, type DTCGToken, type DTCGGroup, } from './core/theme/index.js';
|
|
4
|
+
export { type RGB, type GradientStop, type TextModifier, type TokenValue, type InkColor, type BaseStatusKey, type BaseUiKey, type BaseGradientKey, type Theme, CYAN_MAGENTA, TEAL_ORANGE_PINK, PRESETS, tv, styled, styledStatus, extendTheme, lerp3, gradientText, type GradientTextOptions, isNoColor, getTheme, resolveTheme, _resetThemeForTesting, createThemeResolver, createResolved, type ResolvedTheme, type ThemeResolver, type ThemeResolverOptions, fromDTCG, toDTCG, type DTCGDocument, type DTCGToken, type DTCGGroup, rgbToAnsi256, nearestAnsi256, rgbToAnsi16, ansi256ToAnsi16, type ColorLevel, hexToRgb, rgbToHex, lighten, darken, mix, complementary, saturate, desaturate, } from './core/theme/index.js';
|
|
5
|
+
export { isWideChar, segmentGraphemes, graphemeClusterWidth, graphemeWidth, } from './core/text/index.js';
|
|
5
6
|
export { detectOutputMode, type OutputMode } from './core/detect/index.js';
|
|
6
|
-
export { spinnerFrame, createSpinner, type SpinnerOptions, type SpinnerController, progressBar, createProgressBar, createAnimatedProgressBar, type ProgressBarOptions, type LiveProgressBarOptions, type AnimatedProgressBarOptions, type ProgressBarController, table, type TableColumn, type TableOptions, box, headerBox, type BoxOptions, type HeaderBoxOptions, selectLogoSize, loadRandomLogo, type LogoSize, type LogoResult, type LogoConstraints, type LogoOptions, separator, type SeparatorOptions, badge, type BadgeVariant, type BadgeOptions, alert, type AlertVariant, type AlertOptions, skeleton, type SkeletonOptions, kbd, type KbdOptions, tree, type TreeNode, type TreeOptions, accordion, type AccordionSection, type AccordionOptions, timeline, type TimelineEvent, type TimelineOptions, tabs, type TabItem, type TabsOptions, breadcrumb, type BreadcrumbOptions, paginator, type PaginatorOptions, stepper, type StepperStep, type StepperOptions, dag, dagSlice, dagLayout, type DagNode, type DagOptions, type DagNodePosition, type DagLayout, arraySource, isDagSource, isSlicedDagSource, type DagSource, type SlicedDagSource, type DagSliceOptions, dagStats, type DagStats, } from './core/components/index.js';
|
|
7
|
+
export { spinnerFrame, createSpinner, type SpinnerOptions, type SpinnerController, progressBar, createProgressBar, createAnimatedProgressBar, type ProgressBarOptions, type LiveProgressBarOptions, type AnimatedProgressBarOptions, type ProgressBarController, table, type TableColumn, type TableOptions, box, headerBox, type BoxOptions, type HeaderBoxOptions, selectLogoSize, loadRandomLogo, type LogoSize, type LogoResult, type LogoConstraints, type LogoOptions, separator, type SeparatorOptions, badge, type BadgeVariant, type BadgeOptions, alert, type AlertVariant, type AlertOptions, skeleton, type SkeletonOptions, kbd, type KbdOptions, tree, type TreeNode, type TreeOptions, accordion, type AccordionSection, type AccordionOptions, timeline, type TimelineEvent, type TimelineOptions, tabs, type TabItem, type TabsOptions, breadcrumb, type BreadcrumbOptions, paginator, type PaginatorOptions, stepper, type StepperStep, type StepperOptions, dag, dagSlice, dagLayout, type DagNode, type DagOptions, type DagNodePosition, type DagLayout, arraySource, isDagSource, isSlicedDagSource, type DagSource, type SlicedDagSource, type DagSliceOptions, dagStats, type DagStats, enumeratedList, type BulletStyle, type EnumeratedListOptions, hyperlink, type HyperlinkOptions, log, type LogLevel, type LogOptions, markdown, type MarkdownOptions, } from './core/components/index.js';
|
|
7
8
|
export { type ValidationResult, type Validator, type FieldOptions, type SelectOption, type SelectFieldOptions, type ConfirmFieldOptions, type GroupFieldResult, type InputOptions, input, select, multiselect, confirm, group, textarea, type TextareaOptions, filter, type FilterOption, type FilterOptions, wizard, type WizardStep, type WizardOptions, } from './core/forms/index.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,WAAW,EACX,MAAM,EACN,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGpE,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,KAAK,EAEV,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,EAAE,EAEF,MAAM,EACN,YAAY,EAEZ,WAAW,EAEX,KAAK,EACL,YAAY,EAEZ,KAAK,mBAAmB,EAExB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAEzB,QAAQ,EACR,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,WAAW,EACX,MAAM,EACN,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGpE,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,KAAK,EAEV,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,EAAE,EAEF,MAAM,EACN,YAAY,EAEZ,WAAW,EAEX,KAAK,EACL,YAAY,EAEZ,KAAK,mBAAmB,EAExB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAEzB,QAAQ,EACR,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,EAEd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,eAAe,EACf,KAAK,UAAU,EAEf,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,GAAG,EACH,aAAa,EACb,QAAQ,EACR,UAAU,GACX,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAG3E,OAAO,EACL,YAAY,EACZ,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,GAAG,EACH,SAAS,EACT,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,cAAc,EACd,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,QAAQ,EACR,KAAK,eAAe,EACpB,GAAG,EACH,KAAK,UAAU,EACf,IAAI,EACJ,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,QAAQ,EACR,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,IAAI,EACJ,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,UAAU,EACV,KAAK,iBAAiB,EACtB,SAAS,EACT,KAAK,gBAAgB,EACrB,OAAO,EACP,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,GAAG,EACH,QAAQ,EACR,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,QAAQ,EACR,KAAK,QAAQ,EACb,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,SAAS,EACT,KAAK,gBAAgB,EACrB,GAAG,EACH,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,QAAQ,EACR,KAAK,eAAe,GACrB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,EACL,MAAM,EACN,WAAW,EACX,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,eAAe,EACpB,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,MAAM,EACN,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC"}
|