@zakmandhro/bunti 0.1.4 → 0.2.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/AGENTS.md +65 -0
- package/README.md +145 -34
- package/dist/cli.d.ts +44 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +147 -0
- package/dist/cli.js.map +1 -0
- package/dist/colors.d.ts +144 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +426 -0
- package/dist/colors.js.map +1 -0
- package/dist/components/Box.d.ts +11 -0
- package/dist/components/Box.d.ts.map +1 -0
- package/dist/components/Box.js +9 -0
- package/dist/components/Box.js.map +1 -0
- package/dist/components/Button.d.ts +24 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +102 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Card.d.ts +33 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +79 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Header.d.ts +23 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +58 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/Input.d.ts +25 -0
- package/dist/components/Input.d.ts.map +1 -0
- package/dist/components/Input.js +232 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/Link.d.ts +21 -0
- package/dist/components/Link.d.ts.map +1 -0
- package/dist/components/Link.js +29 -0
- package/dist/components/Link.js.map +1 -0
- package/dist/components/Modal.d.ts +38 -0
- package/dist/components/Modal.d.ts.map +1 -0
- package/dist/components/Modal.js +87 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/Progress.d.ts +27 -0
- package/dist/components/Progress.d.ts.map +1 -0
- package/dist/components/Progress.js +39 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/Spinner.d.ts +19 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +27 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/index.d.ts +10 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +10 -0
- package/dist/components/index.js.map +1 -0
- package/dist/data/nf-glyphs.d.ts +11 -0
- package/dist/data/nf-glyphs.d.ts.map +1 -0
- package/dist/data/nf-glyphs.js +535 -0
- package/dist/data/nf-glyphs.js.map +1 -0
- package/dist/data/nf-names.d.ts +8 -0
- package/dist/data/nf-names.d.ts.map +1 -0
- package/dist/data/nf-names.js +2 -0
- package/dist/data/nf-names.js.map +1 -0
- package/dist/demo-registry.d.ts +27 -0
- package/dist/demo-registry.d.ts.map +1 -0
- package/dist/demo-registry.js +57 -0
- package/dist/demo-registry.js.map +1 -0
- package/dist/demos/2048.ts +743 -0
- package/dist/demos/animation.ts +246 -0
- package/dist/demos/demo-layout.ts +124 -0
- package/dist/demos/engine.ts +374 -0
- package/dist/demos/interaction.ts +91 -0
- package/dist/demos/login.ts +203 -0
- package/dist/demos/mission-control.ts +558 -0
- package/dist/demos/showcase.ts +224 -0
- package/dist/detect.d.ts +104 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +227 -0
- package/dist/detect.js.map +1 -0
- package/dist/diagnostics.d.ts +73 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +225 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/dsl/context.d.ts +11 -0
- package/dist/dsl/context.d.ts.map +1 -0
- package/dist/dsl/context.js +563 -0
- package/dist/dsl/context.js.map +1 -0
- package/dist/dsl/hooks.d.ts +12 -0
- package/dist/dsl/hooks.d.ts.map +1 -0
- package/dist/dsl/hooks.js +148 -0
- package/dist/dsl/hooks.js.map +1 -0
- package/dist/dsl/interaction.d.ts +16 -0
- package/dist/dsl/interaction.d.ts.map +1 -0
- package/dist/dsl/interaction.js +101 -0
- package/dist/dsl/interaction.js.map +1 -0
- package/dist/dsl/layers.d.ts +14 -0
- package/dist/dsl/layers.d.ts.map +1 -0
- package/dist/dsl/layers.js +87 -0
- package/dist/dsl/layers.js.map +1 -0
- package/dist/dsl/motion.d.ts +10 -0
- package/dist/dsl/motion.d.ts.map +1 -0
- package/dist/dsl/motion.js +150 -0
- package/dist/dsl/motion.js.map +1 -0
- package/dist/dsl/render.d.ts +22 -0
- package/dist/dsl/render.d.ts.map +1 -0
- package/dist/dsl/render.js +69 -0
- package/dist/dsl/render.js.map +1 -0
- package/dist/dsl/types.d.ts +510 -0
- package/dist/dsl/types.d.ts.map +1 -0
- package/dist/dsl/types.js +33 -0
- package/dist/dsl/types.js.map +1 -0
- package/dist/dsl.d.ts +18 -0
- package/dist/dsl.d.ts.map +1 -0
- package/dist/dsl.js +17 -0
- package/dist/dsl.js.map +1 -0
- package/dist/easing.d.ts +45 -0
- package/dist/easing.d.ts.map +1 -0
- package/dist/easing.js +121 -0
- package/dist/easing.js.map +1 -0
- package/dist/geometry.d.ts +77 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +130 -0
- package/dist/geometry.js.map +1 -0
- package/dist/icons-full.d.ts +5 -0
- package/dist/icons-full.d.ts.map +1 -0
- package/dist/icons-full.js +31 -0
- package/dist/icons-full.js.map +1 -0
- package/dist/icons.d.ts +442 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +314 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +228 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +177 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +533 -0
- package/dist/input.js.map +1 -0
- package/dist/layout.d.ts +194 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +673 -0
- package/dist/layout.js.map +1 -0
- package/dist/render.d.ts +49 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +650 -0
- package/dist/render.js.map +1 -0
- package/dist/state.d.ts +226 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +130 -0
- package/dist/state.js.map +1 -0
- package/dist/theme.d.ts +129 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +167 -0
- package/dist/theme.js.map +1 -0
- package/dist/themes/catppuccin-mocha.d.ts +19 -0
- package/dist/themes/catppuccin-mocha.d.ts.map +1 -0
- package/dist/themes/catppuccin-mocha.js +36 -0
- package/dist/themes/catppuccin-mocha.js.map +1 -0
- package/dist/themes/dracula.d.ts +21 -0
- package/dist/themes/dracula.d.ts.map +1 -0
- package/dist/themes/dracula.js +37 -0
- package/dist/themes/dracula.js.map +1 -0
- package/dist/themes/github-light.d.ts +21 -0
- package/dist/themes/github-light.d.ts.map +1 -0
- package/dist/themes/github-light.js +36 -0
- package/dist/themes/github-light.js.map +1 -0
- package/dist/themes/index.d.ts +19 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +17 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/nord.d.ts +23 -0
- package/dist/themes/nord.d.ts.map +1 -0
- package/dist/themes/nord.js +38 -0
- package/dist/themes/nord.js.map +1 -0
- package/dist/themes/one-dark-pro.d.ts +21 -0
- package/dist/themes/one-dark-pro.d.ts.map +1 -0
- package/dist/themes/one-dark-pro.js +36 -0
- package/dist/themes/one-dark-pro.js.map +1 -0
- package/dist/themes/tokyo-night.d.ts +20 -0
- package/dist/themes/tokyo-night.d.ts.map +1 -0
- package/dist/themes/tokyo-night.js +37 -0
- package/dist/themes/tokyo-night.js.map +1 -0
- package/dist/utils.d.ts +28 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +158 -0
- package/dist/utils.js.map +1 -0
- package/dist/vendor/colors.d.ts +45 -0
- package/dist/vendor/colors.d.ts.map +1 -0
- package/dist/vendor/colors.js +72 -0
- package/dist/vendor/colors.js.map +1 -0
- package/llms.txt +79 -0
- package/package.json +52 -11
- package/src/colors.ts +0 -255
- package/src/components/Button.ts +0 -104
- package/src/components/Card.ts +0 -53
- package/src/components/Header.ts +0 -65
- package/src/components/Input.ts +0 -124
- package/src/components/index.ts +0 -4
- package/src/data/glyphs.ts +0 -30
- package/src/detect.ts +0 -60
- package/src/dsl.ts +0 -661
- package/src/icons.ts +0 -186
- package/src/index.ts +0 -72
- package/src/layout.ts +0 -640
- package/src/render.ts +0 -302
- package/src/state.ts +0 -148
- package/src/utils.ts +0 -165
package/dist/colors.js
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bunti Semantic & Palette Color System
|
|
3
|
+
*/
|
|
4
|
+
import { colorTier } from './detect';
|
|
5
|
+
import { hintsSuppressed, nearestMatch, recordHint } from './diagnostics';
|
|
6
|
+
/**
|
|
7
|
+
* Internal brand carried by ThemeColor instances so callable theme tokens can
|
|
8
|
+
* be distinguished from plain function-style border wrappers.
|
|
9
|
+
*/
|
|
10
|
+
export const THEME_COLOR = Symbol.for('bunti.theme-color');
|
|
11
|
+
/**
|
|
12
|
+
* Returns true when the value is a ThemeColor (callable fg-styler carrying
|
|
13
|
+
* `.rgb` and `.hex`), detected via the internal brand symbol.
|
|
14
|
+
*/
|
|
15
|
+
export function isThemeColor(value) {
|
|
16
|
+
return (typeof value === 'function' &&
|
|
17
|
+
value[THEME_COLOR] === true);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Bunti's named color palette (ANSI-256 codes). Any name here works as a
|
|
21
|
+
* color value: `fg('bunti-blue', text)`, `{ bgColor: 'midnight' }`.
|
|
22
|
+
*/
|
|
23
|
+
export const PALETTE = {
|
|
24
|
+
// Greyscale
|
|
25
|
+
slate: '235',
|
|
26
|
+
ash: '240',
|
|
27
|
+
gray: '244',
|
|
28
|
+
silver: '247',
|
|
29
|
+
white: '255',
|
|
30
|
+
black: '0',
|
|
31
|
+
// Deep Blues & Space
|
|
32
|
+
midnight: '17',
|
|
33
|
+
ocean: '24',
|
|
34
|
+
sky: '33',
|
|
35
|
+
'bunti-blue': '38',
|
|
36
|
+
'deep-navy': '17',
|
|
37
|
+
nebula: '61',
|
|
38
|
+
plasma: '165',
|
|
39
|
+
// Semantic
|
|
40
|
+
success: '40',
|
|
41
|
+
warning: '214',
|
|
42
|
+
error: '196',
|
|
43
|
+
info: '39',
|
|
44
|
+
// Accents
|
|
45
|
+
gold: '220',
|
|
46
|
+
rose: '211',
|
|
47
|
+
mint: '121',
|
|
48
|
+
};
|
|
49
|
+
const RGB_REGISTRY = {
|
|
50
|
+
black: { r: 0, g: 0, b: 0 },
|
|
51
|
+
red: { r: 200, g: 50, b: 50 },
|
|
52
|
+
green: { r: 50, g: 200, b: 50 },
|
|
53
|
+
yellow: { r: 200, g: 200, b: 50 },
|
|
54
|
+
blue: { r: 50, g: 50, b: 200 },
|
|
55
|
+
magenta: { r: 200, g: 50, b: 200 },
|
|
56
|
+
cyan: { r: 50, g: 200, b: 200 },
|
|
57
|
+
white: { r: 255, g: 255, b: 255 },
|
|
58
|
+
gray: { r: 128, g: 128, b: 128 },
|
|
59
|
+
// Greyscale
|
|
60
|
+
slate: { r: 40, g: 44, b: 52 },
|
|
61
|
+
ash: { r: 75, g: 82, b: 99 },
|
|
62
|
+
silver: { r: 188, g: 192, b: 204 },
|
|
63
|
+
// Deep Blues & Space
|
|
64
|
+
midnight: { r: 15, g: 15, b: 35 },
|
|
65
|
+
ocean: { r: 20, g: 40, b: 80 },
|
|
66
|
+
sky: { r: 0, g: 135, b: 255 },
|
|
67
|
+
'bunti-blue': { r: 59, g: 188, b: 225 },
|
|
68
|
+
'deep-navy': { r: 0, g: 51, b: 102 },
|
|
69
|
+
nebula: { r: 95, g: 95, b: 175 },
|
|
70
|
+
plasma: { r: 201, g: 0, b: 255 },
|
|
71
|
+
// Semantic
|
|
72
|
+
success: { r: 0, g: 215, b: 0 },
|
|
73
|
+
warning: { r: 255, g: 175, b: 0 },
|
|
74
|
+
error: { r: 215, g: 0, b: 0 },
|
|
75
|
+
info: { r: 0, g: 175, b: 255 },
|
|
76
|
+
// Accents
|
|
77
|
+
gold: { r: 255, g: 215, b: 0 },
|
|
78
|
+
rose: { r: 255, g: 175, b: 175 },
|
|
79
|
+
mint: { r: 175, g: 255, b: 175 },
|
|
80
|
+
};
|
|
81
|
+
// Map standard names to ANSI-256 for basic compat
|
|
82
|
+
const NAME_TO_ANSI = {
|
|
83
|
+
red: '160',
|
|
84
|
+
green: '40',
|
|
85
|
+
yellow: '220',
|
|
86
|
+
blue: '33',
|
|
87
|
+
magenta: '165',
|
|
88
|
+
cyan: '39',
|
|
89
|
+
white: '255',
|
|
90
|
+
black: '0',
|
|
91
|
+
gray: '244',
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Parses a hex color string (#RGB, #RGBA, #RRGGBB, or #RRGGBBAA) to an RGB
|
|
95
|
+
* object. Alpha channels are composited over `base` (defaults to black), so
|
|
96
|
+
* `#ffffff80` over black resolves to mid-gray.
|
|
97
|
+
*/
|
|
98
|
+
export function hexToRGB(hex, base = { r: 0, g: 0, b: 0 }) {
|
|
99
|
+
let h = hex.replace('#', '');
|
|
100
|
+
if (h.length === 3 || h.length === 4) {
|
|
101
|
+
let expanded = '';
|
|
102
|
+
for (const c of h)
|
|
103
|
+
expanded += c + c;
|
|
104
|
+
h = expanded;
|
|
105
|
+
}
|
|
106
|
+
const r = parseInt(h.substring(0, 2), 16);
|
|
107
|
+
const g = parseInt(h.substring(2, 4), 16);
|
|
108
|
+
const b = parseInt(h.substring(4, 6), 16);
|
|
109
|
+
if (h.length === 8) {
|
|
110
|
+
const a = parseInt(h.substring(6, 8), 16) / 255;
|
|
111
|
+
return {
|
|
112
|
+
r: Math.round(r * a + base.r * (1 - a)),
|
|
113
|
+
g: Math.round(g * a + base.g * (1 - a)),
|
|
114
|
+
b: Math.round(b * a + base.b * (1 - a)),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return { r, g, b };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Formats an RGB object as a #rrggbb hex string.
|
|
121
|
+
*/
|
|
122
|
+
export function rgbToHex(rgb) {
|
|
123
|
+
const h = (v) => Math.max(0, Math.min(255, Math.round(v)))
|
|
124
|
+
.toString(16)
|
|
125
|
+
.padStart(2, '0');
|
|
126
|
+
return `#${h(rgb.r)}${h(rgb.g)}${h(rgb.b)}`;
|
|
127
|
+
}
|
|
128
|
+
// Exact xterm 256-color model: 16 base colors + 6x6x6 cube + 24-step gray ramp.
|
|
129
|
+
const CUBE_LEVELS = [0, 95, 135, 175, 215, 255];
|
|
130
|
+
const BASE16 = [
|
|
131
|
+
{ r: 0, g: 0, b: 0 },
|
|
132
|
+
{ r: 128, g: 0, b: 0 },
|
|
133
|
+
{ r: 0, g: 128, b: 0 },
|
|
134
|
+
{ r: 128, g: 128, b: 0 },
|
|
135
|
+
{ r: 0, g: 0, b: 128 },
|
|
136
|
+
{ r: 128, g: 0, b: 128 },
|
|
137
|
+
{ r: 0, g: 128, b: 128 },
|
|
138
|
+
{ r: 192, g: 192, b: 192 },
|
|
139
|
+
{ r: 128, g: 128, b: 128 },
|
|
140
|
+
{ r: 255, g: 0, b: 0 },
|
|
141
|
+
{ r: 0, g: 255, b: 0 },
|
|
142
|
+
{ r: 255, g: 255, b: 0 },
|
|
143
|
+
{ r: 0, g: 0, b: 255 },
|
|
144
|
+
{ r: 255, g: 0, b: 255 },
|
|
145
|
+
{ r: 0, g: 255, b: 255 },
|
|
146
|
+
{ r: 255, g: 255, b: 255 },
|
|
147
|
+
];
|
|
148
|
+
/**
|
|
149
|
+
* Converts an ANSI-256 code to its exact xterm RGB value
|
|
150
|
+
* (16 base + 6x6x6 color cube + 24-step gray ramp).
|
|
151
|
+
*/
|
|
152
|
+
export function ansi256ToRGB(code) {
|
|
153
|
+
const c = Math.max(0, Math.min(255, Math.trunc(code)));
|
|
154
|
+
if (c < 16)
|
|
155
|
+
return { ...BASE16[c] };
|
|
156
|
+
if (c < 232) {
|
|
157
|
+
const n = c - 16;
|
|
158
|
+
return {
|
|
159
|
+
r: CUBE_LEVELS[Math.floor(n / 36)],
|
|
160
|
+
g: CUBE_LEVELS[Math.floor(n / 6) % 6],
|
|
161
|
+
b: CUBE_LEVELS[n % 6],
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const v = 8 + (c - 232) * 10;
|
|
165
|
+
return { r: v, g: v, b: v };
|
|
166
|
+
}
|
|
167
|
+
function nearestCubeIndex(v) {
|
|
168
|
+
return v < 48 ? 0 : v < 115 ? 1 : Math.min(5, Math.floor((v - 35) / 40));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Quantizes an RGB value to the nearest ANSI-256 code
|
|
172
|
+
* (best of the 6x6x6 cube vs the gray ramp).
|
|
173
|
+
*/
|
|
174
|
+
export function rgbTo256(rgb) {
|
|
175
|
+
const ri = nearestCubeIndex(rgb.r);
|
|
176
|
+
const gi = nearestCubeIndex(rgb.g);
|
|
177
|
+
const bi = nearestCubeIndex(rgb.b);
|
|
178
|
+
const cr = CUBE_LEVELS[ri];
|
|
179
|
+
const cg = CUBE_LEVELS[gi];
|
|
180
|
+
const cb = CUBE_LEVELS[bi];
|
|
181
|
+
const cubeDist = (cr - rgb.r) ** 2 + (cg - rgb.g) ** 2 + (cb - rgb.b) ** 2;
|
|
182
|
+
const avg = (rgb.r + rgb.g + rgb.b) / 3;
|
|
183
|
+
const grayIdx = Math.max(0, Math.min(23, Math.round((avg - 8) / 10)));
|
|
184
|
+
const gv = 8 + grayIdx * 10;
|
|
185
|
+
const grayDist = (gv - rgb.r) ** 2 + (gv - rgb.g) ** 2 + (gv - rgb.b) ** 2;
|
|
186
|
+
return grayDist < cubeDist ? 232 + grayIdx : 16 + 36 * ri + 6 * gi + bi;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Quantizes an RGB value to the nearest of the 16 base ANSI colors.
|
|
190
|
+
*/
|
|
191
|
+
export function rgbTo16(rgb) {
|
|
192
|
+
let best = 0;
|
|
193
|
+
let bestDist = Infinity;
|
|
194
|
+
for (let i = 0; i < 16; i++) {
|
|
195
|
+
const c = BASE16[i];
|
|
196
|
+
const dist = (c.r - rgb.r) ** 2 + (c.g - rgb.g) ** 2 + (c.b - rgb.b) ** 2;
|
|
197
|
+
if (dist < bestDist) {
|
|
198
|
+
bestDist = dist;
|
|
199
|
+
best = i;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return best;
|
|
203
|
+
}
|
|
204
|
+
function quantizeRGB(rgb, tier) {
|
|
205
|
+
if (tier === 'truecolor')
|
|
206
|
+
return `2;${rgb.r};${rgb.g};${rgb.b}`;
|
|
207
|
+
return tier === '256' ? rgbTo256(rgb) : rgbTo16(rgb);
|
|
208
|
+
}
|
|
209
|
+
// Dev diagnostics: unknown color names hint once each (buffered to exit).
|
|
210
|
+
// The Set keeps the per-cell hot path O(1) after the first sighting.
|
|
211
|
+
const reportedUnknownColors = new Set();
|
|
212
|
+
function reportUnknownColorName(name) {
|
|
213
|
+
if (reportedUnknownColors.has(name))
|
|
214
|
+
return;
|
|
215
|
+
reportedUnknownColors.add(name);
|
|
216
|
+
if (hintsSuppressed())
|
|
217
|
+
return;
|
|
218
|
+
const suggestion = nearestMatch(name, [
|
|
219
|
+
...Object.keys(PALETTE),
|
|
220
|
+
...Object.keys(NAME_TO_ANSI),
|
|
221
|
+
]);
|
|
222
|
+
recordHint(`unknown color name '${name}' passed through as a raw ANSI code` +
|
|
223
|
+
`${suggestion ? ` (did you mean '${suggestion}'?)` : ''}`);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Resolves a palette name, color code, RGB object, or ThemeColor to an ANSI
|
|
227
|
+
* color code, quantized to the active color tier. Returns undefined on the
|
|
228
|
+
* 'mono' tier (NO_COLOR), which suppresses color output entirely.
|
|
229
|
+
*/
|
|
230
|
+
export function resolveColor(color) {
|
|
231
|
+
const tier = colorTier();
|
|
232
|
+
if (tier === 'mono')
|
|
233
|
+
return undefined;
|
|
234
|
+
const value = isThemeColor(color)
|
|
235
|
+
? color.rgb
|
|
236
|
+
: color;
|
|
237
|
+
if (typeof value === 'object' && 'r' in value) {
|
|
238
|
+
return quantizeRGB(value, tier);
|
|
239
|
+
}
|
|
240
|
+
if (typeof value === 'string') {
|
|
241
|
+
if (value.startsWith('#')) {
|
|
242
|
+
return quantizeRGB(hexToRGB(value), tier);
|
|
243
|
+
}
|
|
244
|
+
const resolved = PALETTE[value] || NAME_TO_ANSI[value] || value;
|
|
245
|
+
// Unrecognized non-numeric names fall through as raw ANSI codes and
|
|
246
|
+
// render garbage — hint once with a nearest-name suggestion.
|
|
247
|
+
if (resolved === value && !/^\d+$/.test(value) && !value.startsWith('2;')) {
|
|
248
|
+
reportUnknownColorName(value);
|
|
249
|
+
}
|
|
250
|
+
if (tier === '16') {
|
|
251
|
+
const code = Number.parseInt(String(resolved), 10);
|
|
252
|
+
if (Number.isFinite(code) && code > 15) {
|
|
253
|
+
return rgbTo16(ansi256ToRGB(code));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return resolved;
|
|
257
|
+
}
|
|
258
|
+
if (tier === '16' && value > 15)
|
|
259
|
+
return rgbTo16(ansi256ToRGB(value));
|
|
260
|
+
return value;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Creates a multi-stop gradient (array of RGB objects) between multiple colors.
|
|
264
|
+
*/
|
|
265
|
+
export function createGradient(arg1, arg2, arg3) {
|
|
266
|
+
let colors = [];
|
|
267
|
+
let steps = 5;
|
|
268
|
+
if (Array.isArray(arg1)) {
|
|
269
|
+
colors = arg1;
|
|
270
|
+
steps = typeof arg2 === 'number' ? arg2 : 5;
|
|
271
|
+
}
|
|
272
|
+
else if (arg1 && arg2) {
|
|
273
|
+
colors = [arg1, arg2];
|
|
274
|
+
steps = typeof arg3 === 'number' ? arg3 : 5;
|
|
275
|
+
}
|
|
276
|
+
if (colors.length === 0)
|
|
277
|
+
return [];
|
|
278
|
+
if (colors.length === 1)
|
|
279
|
+
return Array(steps).fill(resolveColorToRGB(colors[0]));
|
|
280
|
+
if (steps <= 1)
|
|
281
|
+
return [resolveColorToRGB(colors[0])];
|
|
282
|
+
const result = [];
|
|
283
|
+
const rgbColors = colors.map(resolveColorToRGB);
|
|
284
|
+
for (let i = 0; i < steps; i++) {
|
|
285
|
+
const globalT = i / (steps - 1);
|
|
286
|
+
const segmentCount = rgbColors.length - 1;
|
|
287
|
+
const segmentIdx = Math.min(Math.floor(globalT * segmentCount), segmentCount - 1);
|
|
288
|
+
const start = rgbColors[segmentIdx];
|
|
289
|
+
const end = rgbColors[segmentIdx + 1];
|
|
290
|
+
const t = globalT * segmentCount - segmentIdx;
|
|
291
|
+
result.push({
|
|
292
|
+
r: Math.round(start.r + (end.r - start.r) * t),
|
|
293
|
+
g: Math.round(start.g + (end.g - start.g) * t),
|
|
294
|
+
b: Math.round(start.b + (end.b - start.b) * t),
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
return result;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Resolves any color value (name, hex, ANSI-256 code, RGB, ThemeColor) to an
|
|
301
|
+
* exact RGB object. Numeric codes use the exact xterm 256-color table.
|
|
302
|
+
*/
|
|
303
|
+
export function resolveColorToRGB(color) {
|
|
304
|
+
if (isThemeColor(color))
|
|
305
|
+
return color.rgb;
|
|
306
|
+
if (typeof color === 'object' && color !== null && 'r' in color) {
|
|
307
|
+
return color;
|
|
308
|
+
}
|
|
309
|
+
if (typeof color === 'number')
|
|
310
|
+
return ansi256ToRGB(color);
|
|
311
|
+
if (typeof color === 'string') {
|
|
312
|
+
if (color.startsWith('#'))
|
|
313
|
+
return hexToRGB(color);
|
|
314
|
+
// Resolved truecolor code ('2;r;g;b') — cells store these after
|
|
315
|
+
// resolveColor(); dimRect and friends must round-trip them.
|
|
316
|
+
if (color.startsWith('2;')) {
|
|
317
|
+
const parts = color.split(';');
|
|
318
|
+
return {
|
|
319
|
+
r: Number(parts[1]) || 0,
|
|
320
|
+
g: Number(parts[2]) || 0,
|
|
321
|
+
b: Number(parts[3]) || 0,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
if (RGB_REGISTRY[color])
|
|
325
|
+
return RGB_REGISTRY[color];
|
|
326
|
+
const paletteValue = PALETTE[color] ?? NAME_TO_ANSI[color];
|
|
327
|
+
const code = Number.parseInt(paletteValue ?? color, 10);
|
|
328
|
+
if (Number.isFinite(code))
|
|
329
|
+
return ansi256ToRGB(code);
|
|
330
|
+
}
|
|
331
|
+
// Fallback
|
|
332
|
+
return { r: 128, g: 128, b: 128 };
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* WCAG 2.x relative luminance (0 = black, 1 = white) of any color value.
|
|
336
|
+
*/
|
|
337
|
+
export function relativeLuminance(color) {
|
|
338
|
+
const { r, g, b } = resolveColorToRGB(color);
|
|
339
|
+
const lin = (v) => {
|
|
340
|
+
const s = v / 255;
|
|
341
|
+
return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;
|
|
342
|
+
};
|
|
343
|
+
return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Picks pure black or pure white text for maximum WCAG contrast against the
|
|
347
|
+
* given background color. (White wins below luminance ~0.179, the point where
|
|
348
|
+
* both contrast ratios are equal.)
|
|
349
|
+
*/
|
|
350
|
+
export function contrastText(bgColor) {
|
|
351
|
+
return relativeLuminance(bgColor) < 0.1791
|
|
352
|
+
? { r: 255, g: 255, b: 255 }
|
|
353
|
+
: { r: 0, g: 0, b: 0 };
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Adjusts the brightness of a color.
|
|
357
|
+
*/
|
|
358
|
+
export function adjustBrightness(color, amount) {
|
|
359
|
+
const rgb = resolveColorToRGB(color);
|
|
360
|
+
const factor = 1 + amount / 100;
|
|
361
|
+
return {
|
|
362
|
+
r: Math.max(0, Math.min(255, Math.round(rgb.r * factor))),
|
|
363
|
+
g: Math.max(0, Math.min(255, Math.round(rgb.g * factor))),
|
|
364
|
+
b: Math.max(0, Math.min(255, Math.round(rgb.b * factor))),
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Interpolates between two colors and returns an RGB value.
|
|
369
|
+
*/
|
|
370
|
+
export function fade(from, to, progress) {
|
|
371
|
+
const start = resolveColorToRGB(from);
|
|
372
|
+
const end = resolveColorToRGB(to);
|
|
373
|
+
const t = Math.max(0, Math.min(1, progress));
|
|
374
|
+
return {
|
|
375
|
+
r: Math.round(start.r + (end.r - start.r) * t),
|
|
376
|
+
g: Math.round(start.g + (end.g - start.g) * t),
|
|
377
|
+
b: Math.round(start.b + (end.b - start.b) * t),
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Returns a function that darkens a color and can be used as a style wrapper.
|
|
382
|
+
*/
|
|
383
|
+
export function darken(color, amount = 20) {
|
|
384
|
+
const adjusted = adjustBrightness(color, -amount);
|
|
385
|
+
return (text) => fg(adjusted, text);
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Returns a function that lightens a color and can be used as a style wrapper.
|
|
389
|
+
*/
|
|
390
|
+
export function lighten(color, amount = 20) {
|
|
391
|
+
const adjusted = adjustBrightness(color, amount);
|
|
392
|
+
return (text) => fg(adjusted, text);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Returns an RGB object for TrueColor rendering.
|
|
396
|
+
*/
|
|
397
|
+
export function rgb(r, g, b) {
|
|
398
|
+
return { r, g, b };
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Wraps text in a foreground-color ANSI sequence (any color value:
|
|
402
|
+
* palette name, hex, ANSI-256 code, RGB, ThemeColor). On the 'mono' tier
|
|
403
|
+
* the text is returned unstyled.
|
|
404
|
+
* @example fg('#3bbce1', 'hello') // truecolor cyan text
|
|
405
|
+
*/
|
|
406
|
+
export function fg(color, text) {
|
|
407
|
+
const code = resolveColor(color);
|
|
408
|
+
if (code === undefined)
|
|
409
|
+
return text;
|
|
410
|
+
const codeStr = String(code);
|
|
411
|
+
const prefix = codeStr.startsWith('2;') ? '38' : '38;5';
|
|
412
|
+
return `\x1b[${prefix};${codeStr}m${text}\x1b[0m`;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Wraps text in a background-color ANSI sequence (any color value). On the
|
|
416
|
+
* 'mono' tier the text is returned unstyled.
|
|
417
|
+
*/
|
|
418
|
+
export function bg(color, text) {
|
|
419
|
+
const code = resolveColor(color);
|
|
420
|
+
if (code === undefined)
|
|
421
|
+
return text;
|
|
422
|
+
const codeStr = String(code);
|
|
423
|
+
const prefix = codeStr.startsWith('2;') ? '48' : '48;5';
|
|
424
|
+
return `\x1b[${prefix};${codeStr}m${text}\x1b[0m`;
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BuntiContext, DSLBoxOptions } from '../dsl';
|
|
2
|
+
/** Props for Box — identical to ctx.box() options. */
|
|
3
|
+
export interface BoxProps extends DSLBoxOptions {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Component-style alias for ctx.box(): draws a styled box and renders the
|
|
7
|
+
* callback inside its padded interior. Returns the rendered string.
|
|
8
|
+
* @example Box(ctx, { width: 40, border: 'rounded' }, (s) => s.text('hi'));
|
|
9
|
+
*/
|
|
10
|
+
export declare function Box(ctx: BuntiContext, props: BoxProps, callback: (sub: BuntiContext) => void): string;
|
|
11
|
+
//# sourceMappingURL=Box.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Box.d.ts","sourceRoot":"","sources":["../../src/components/Box.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE1D,sDAAsD;AACtD,MAAM,WAAW,QAAS,SAAQ,aAAa;CAAG;AAElD;;;;GAIG;AACH,wBAAgB,GAAG,CACjB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,UAGtC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Component-style alias for ctx.box(): draws a styled box and renders the
|
|
3
|
+
* callback inside its padded interior. Returns the rendered string.
|
|
4
|
+
* @example Box(ctx, { width: 40, border: 'rounded' }, (s) => s.text('hi'));
|
|
5
|
+
*/
|
|
6
|
+
export function Box(ctx, props, callback) {
|
|
7
|
+
return ctx.box(props, callback);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=Box.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Box.js","sourceRoot":"","sources":["../../src/components/Box.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,GAAG,CACjB,GAAiB,EACjB,KAAe,EACf,QAAqC;IAErC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { BuntiContext, DSLBoxOptions } from '../dsl';
|
|
2
|
+
/** Props for Button. */
|
|
3
|
+
export interface ButtonProps extends DSLBoxOptions {
|
|
4
|
+
/** Stable id: keys the hitbox, Tab-focus slot, and hover state. */
|
|
5
|
+
id: string;
|
|
6
|
+
/** Button text. */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Glyph rendered before the label (use ctx.icon(name)). */
|
|
9
|
+
icon?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Visual style, mapped to theme tokens: 'primary' = filled pill,
|
|
12
|
+
* 'danger' = filled red, 'ghost' = borderless text, default = outlined.
|
|
13
|
+
*/
|
|
14
|
+
variant?: 'primary' | 'secondary' | 'danger' | 'ghost';
|
|
15
|
+
/** Fires once per activation (mouse click release, Enter, or Space). */
|
|
16
|
+
onClick?: () => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Themed push button: Tab-focusable, hover/press styled from ctx.theme
|
|
20
|
+
* tokens, activated by click, Enter, or Space (onClick fires once).
|
|
21
|
+
* @example Button(ctx, { id: 'go', label: 'Deploy', variant: 'primary', onClick: deploy });
|
|
22
|
+
*/
|
|
23
|
+
export declare function Button(ctx: BuntiContext, props: ButtonProps): string;
|
|
24
|
+
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAO1D,wBAAwB;AACxB,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvD,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,UAoG3D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { adjustBrightness, contrastText } from '../colors';
|
|
2
|
+
import { indentBlock } from '../utils';
|
|
3
|
+
/**
|
|
4
|
+
* Themed push button: Tab-focusable, hover/press styled from ctx.theme
|
|
5
|
+
* tokens, activated by click, Enter, or Space (onClick fires once).
|
|
6
|
+
* @example Button(ctx, { id: 'go', label: 'Deploy', variant: 'primary', onClick: deploy });
|
|
7
|
+
*/
|
|
8
|
+
export function Button(ctx, props) {
|
|
9
|
+
const { box, color, focusable, state, hitbox, resolveLocalRect } = ctx;
|
|
10
|
+
// 1. Register in the global focus loop (for TAB navigation)
|
|
11
|
+
const isSelected = focusable(props.id);
|
|
12
|
+
// 2. Resolve final dimensions to perform Mouse Hit-Testing
|
|
13
|
+
const finalLabel = props.icon ? `${props.icon} ${props.label}` : props.label;
|
|
14
|
+
const isGhost = props.variant === 'ghost';
|
|
15
|
+
const isPill = props.variant === 'primary';
|
|
16
|
+
const filled = isPill || props.variant === 'danger';
|
|
17
|
+
const contentWidth = Math.max(12, finalLabel.length + (isPill ? 6 : 4));
|
|
18
|
+
const contentHeight = filled || isGhost ? 1 : 3;
|
|
19
|
+
const area = resolveLocalRect({
|
|
20
|
+
x: props.x,
|
|
21
|
+
y: props.y ?? ctx.cursorY,
|
|
22
|
+
width: props.width ?? contentWidth,
|
|
23
|
+
height: props.height ?? contentHeight,
|
|
24
|
+
contentWidth,
|
|
25
|
+
contentHeight,
|
|
26
|
+
});
|
|
27
|
+
const interaction = hitbox(props.id, {
|
|
28
|
+
x: area.x,
|
|
29
|
+
y: area.y,
|
|
30
|
+
width: area.width,
|
|
31
|
+
height: area.height,
|
|
32
|
+
});
|
|
33
|
+
const isHovered = interaction.hovered;
|
|
34
|
+
const isActive = isSelected || isHovered;
|
|
35
|
+
// 3. Resolve Theme & State — every color derives from ctx.theme tokens so
|
|
36
|
+
// a live theme swap restyles the button. Hover/pressed shifts are
|
|
37
|
+
// mode-aware: brighten on dark themes, darken on light themes.
|
|
38
|
+
const theme = ctx.theme;
|
|
39
|
+
const shiftDir = theme.mode === 'dark' ? 1 : -1;
|
|
40
|
+
const hover = (base) => adjustBrightness(base, 15 * shiftDir);
|
|
41
|
+
const press = (base) => adjustBrightness(base, 30 * shiftDir);
|
|
42
|
+
let bg = theme.surface;
|
|
43
|
+
let fg = theme.foreground;
|
|
44
|
+
let borderCol = theme.border;
|
|
45
|
+
if (props.variant === 'primary') {
|
|
46
|
+
bg = isActive ? hover(theme.primary) : theme.primary;
|
|
47
|
+
if (interaction.pressed)
|
|
48
|
+
bg = press(theme.primary);
|
|
49
|
+
fg = theme.onPrimary;
|
|
50
|
+
borderCol = bg;
|
|
51
|
+
}
|
|
52
|
+
else if (props.variant === 'danger') {
|
|
53
|
+
bg = isActive ? hover(theme.danger) : theme.danger;
|
|
54
|
+
if (interaction.pressed)
|
|
55
|
+
bg = press(theme.danger);
|
|
56
|
+
fg = contrastText(bg);
|
|
57
|
+
borderCol = bg;
|
|
58
|
+
}
|
|
59
|
+
else if (isGhost) {
|
|
60
|
+
bg = undefined;
|
|
61
|
+
fg = isActive ? hover(theme.foreground) : theme.foreground;
|
|
62
|
+
}
|
|
63
|
+
else if (isActive) {
|
|
64
|
+
// Default variant: focus ring + mode-aware surface shift.
|
|
65
|
+
borderCol = theme.focus;
|
|
66
|
+
bg = interaction.pressed ? press(theme.surface) : hover(theme.surface);
|
|
67
|
+
}
|
|
68
|
+
if (isSelected && props.variant !== 'primary' && !isGhost) {
|
|
69
|
+
borderCol = theme.focus; // Keyboard focus ring
|
|
70
|
+
}
|
|
71
|
+
// 4. Handle Interaction — clicks fire once, on mouse release at the
|
|
72
|
+
// press origin (interaction.pressed would repeat every held frame).
|
|
73
|
+
const wasClicked = interaction.clicked;
|
|
74
|
+
const wasActivated = isSelected && (state.lastKey === 'enter' || state.lastKey === ' ');
|
|
75
|
+
if (wasClicked || wasActivated) {
|
|
76
|
+
if (props.onClick)
|
|
77
|
+
props.onClick();
|
|
78
|
+
}
|
|
79
|
+
// 5. Render the Primitive
|
|
80
|
+
const renderLabel = isPill
|
|
81
|
+
? `${color.fg(bg, '')}${color.bg(bg, color.fg(fg, ` ${isActive ? color.bold(finalLabel) : finalLabel} `))}${color.fg(bg, '')}`
|
|
82
|
+
: color.fg(fg, isActive ? color.bold(finalLabel) : finalLabel);
|
|
83
|
+
const rendered = box({
|
|
84
|
+
x: area.x,
|
|
85
|
+
y: area.y,
|
|
86
|
+
width: area.width,
|
|
87
|
+
height: area.height,
|
|
88
|
+
border: filled || isGhost ? 'none' : props.border || 'rounded',
|
|
89
|
+
borderColor: borderCol,
|
|
90
|
+
bgColor: isPill || isGhost ? undefined : bg,
|
|
91
|
+
align: props.align || 'center',
|
|
92
|
+
valign: props.valign || 'middle',
|
|
93
|
+
padding: props.padding || [0, isGhost ? 0 : 1],
|
|
94
|
+
detach: props.detach,
|
|
95
|
+
}, ({ text }) => {
|
|
96
|
+
text(renderLabel);
|
|
97
|
+
});
|
|
98
|
+
return !ctx.isRoot && props.detach && props.x === undefined
|
|
99
|
+
? indentBlock(rendered, area.x)
|
|
100
|
+
: rendered;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/components/Button.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { BuntiContext, DSLBoxOptions } from '../dsl';
|
|
2
|
+
/** Card visual variants, mapped to theme tokens. */
|
|
3
|
+
export type CardVariant = 'default' | 'accent' | 'danger';
|
|
4
|
+
/** Props for Card. */
|
|
5
|
+
export interface CardProps extends DSLBoxOptions {
|
|
6
|
+
/** Uppercased header line rendered above the content. */
|
|
7
|
+
title?: string;
|
|
8
|
+
/** Visual variant, mapped to theme tokens (border + title color). */
|
|
9
|
+
variant?: CardVariant;
|
|
10
|
+
/** @deprecated Use `variant` — kept as an alias to avoid breaking callers. */
|
|
11
|
+
theme?: CardVariant;
|
|
12
|
+
/**
|
|
13
|
+
* Registers a hitbox and enables the hover affordance: border lifts to
|
|
14
|
+
* theme.focus and the background shifts one step (mode-aware). Without an
|
|
15
|
+
* id the card has no hitbox and behaves exactly as before.
|
|
16
|
+
*/
|
|
17
|
+
id?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Tactical Card Component
|
|
21
|
+
* A structural container with an integrated header. Colors derive from
|
|
22
|
+
* ctx.theme tokens:
|
|
23
|
+
* - default: border `theme.border`, title `theme.muted`
|
|
24
|
+
* - accent: border `theme.border`, title `theme.accent`
|
|
25
|
+
* - danger: border `theme.danger`, title `theme.danger`
|
|
26
|
+
*
|
|
27
|
+
* With an `id`, hovering lifts the border to `theme.focus` and shifts the
|
|
28
|
+
* background one step. Hover styling reads the hitbox registered on the
|
|
29
|
+
* previous frame (immediate-mode: geometry is only exact after a render),
|
|
30
|
+
* which is invisible at interactive frame rates.
|
|
31
|
+
*/
|
|
32
|
+
export declare function Card(ctx: BuntiContext, props: CardProps, callback: (sub: BuntiContext) => void): string;
|
|
33
|
+
//# sourceMappingURL=Card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAI1D,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1D,sBAAsB;AACtB,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,IAAI,CAClB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,UAyEtC"}
|