@effect-tui/core 0.1.0-alpha.1
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/LICENSE +21 -0
- package/README.md +93 -0
- package/dist/anim.d.ts +4 -0
- package/dist/anim.d.ts.map +1 -0
- package/dist/anim.js +5 -0
- package/dist/anim.js.map +1 -0
- package/dist/ansi.d.ts +69 -0
- package/dist/ansi.d.ts.map +1 -0
- package/dist/ansi.js +72 -0
- package/dist/ansi.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/keys.d.ts +18 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +247 -0
- package/dist/keys.js.map +1 -0
- package/dist/layout/linearStack.d.ts +17 -0
- package/dist/layout/linearStack.d.ts.map +1 -0
- package/dist/layout/linearStack.js +86 -0
- package/dist/layout/linearStack.js.map +1 -0
- package/dist/motion-value.d.ts +58 -0
- package/dist/motion-value.d.ts.map +1 -0
- package/dist/motion-value.js +250 -0
- package/dist/motion-value.js.map +1 -0
- package/dist/present/display.d.ts +58 -0
- package/dist/present/display.d.ts.map +1 -0
- package/dist/present/display.js +168 -0
- package/dist/present/display.js.map +1 -0
- package/dist/present/writers/fullscreen.d.ts +19 -0
- package/dist/present/writers/fullscreen.d.ts.map +1 -0
- package/dist/present/writers/fullscreen.js +55 -0
- package/dist/present/writers/fullscreen.js.map +1 -0
- package/dist/present/writers/inline.d.ts +20 -0
- package/dist/present/writers/inline.d.ts.map +1 -0
- package/dist/present/writers/inline.js +92 -0
- package/dist/present/writers/inline.js.map +1 -0
- package/dist/render/buffer.d.ts +31 -0
- package/dist/render/buffer.d.ts.map +1 -0
- package/dist/render/buffer.js +183 -0
- package/dist/render/buffer.js.map +1 -0
- package/dist/render/color-utils.d.ts +18 -0
- package/dist/render/color-utils.d.ts.map +1 -0
- package/dist/render/color-utils.js +58 -0
- package/dist/render/color-utils.js.map +1 -0
- package/dist/render/diff.d.ts +30 -0
- package/dist/render/diff.d.ts.map +1 -0
- package/dist/render/diff.js +83 -0
- package/dist/render/diff.js.map +1 -0
- package/dist/render/measure.d.ts +15 -0
- package/dist/render/measure.d.ts.map +1 -0
- package/dist/render/measure.js +65 -0
- package/dist/render/measure.js.map +1 -0
- package/dist/render/palette.d.ts +46 -0
- package/dist/render/palette.d.ts.map +1 -0
- package/dist/render/palette.js +108 -0
- package/dist/render/palette.js.map +1 -0
- package/dist/render/surface.d.ts +77 -0
- package/dist/render/surface.d.ts.map +1 -0
- package/dist/render/surface.js +198 -0
- package/dist/render/surface.js.map +1 -0
- package/dist/runtime/backend_node.d.ts +36 -0
- package/dist/runtime/backend_node.d.ts.map +1 -0
- package/dist/runtime/backend_node.js +66 -0
- package/dist/runtime/backend_node.js.map +1 -0
- package/dist/spring-physics.d.ts +36 -0
- package/dist/spring-physics.d.ts.map +1 -0
- package/dist/spring-physics.js +113 -0
- package/dist/spring-physics.js.map +1 -0
- package/dist/spring.d.ts +73 -0
- package/dist/spring.d.ts.map +1 -0
- package/dist/spring.js +136 -0
- package/dist/spring.js.map +1 -0
- package/dist/ui/containers/canvas.d.ts +13 -0
- package/dist/ui/containers/canvas.d.ts.map +1 -0
- package/dist/ui/containers/canvas.js +16 -0
- package/dist/ui/containers/canvas.js.map +1 -0
- package/dist/ui/containers/geometry-reader.d.ts +17 -0
- package/dist/ui/containers/geometry-reader.d.ts.map +1 -0
- package/dist/ui/containers/geometry-reader.js +24 -0
- package/dist/ui/containers/geometry-reader.js.map +1 -0
- package/dist/ui/containers/hstack.d.ts +12 -0
- package/dist/ui/containers/hstack.d.ts.map +1 -0
- package/dist/ui/containers/hstack.js +28 -0
- package/dist/ui/containers/hstack.js.map +1 -0
- package/dist/ui/containers/scroll.d.ts +28 -0
- package/dist/ui/containers/scroll.d.ts.map +1 -0
- package/dist/ui/containers/scroll.js +97 -0
- package/dist/ui/containers/scroll.js.map +1 -0
- package/dist/ui/containers/shared.d.ts +12 -0
- package/dist/ui/containers/shared.d.ts.map +1 -0
- package/dist/ui/containers/shared.js +19 -0
- package/dist/ui/containers/shared.js.map +1 -0
- package/dist/ui/containers/vstack.d.ts +12 -0
- package/dist/ui/containers/vstack.d.ts.map +1 -0
- package/dist/ui/containers/vstack.js +28 -0
- package/dist/ui/containers/vstack.js.map +1 -0
- package/dist/ui/containers/zstack.d.ts +14 -0
- package/dist/ui/containers/zstack.d.ts.map +1 -0
- package/dist/ui/containers/zstack.js +36 -0
- package/dist/ui/containers/zstack.js.map +1 -0
- package/dist/ui/core/geometry-store.d.ts +22 -0
- package/dist/ui/core/geometry-store.d.ts.map +1 -0
- package/dist/ui/core/geometry-store.js +29 -0
- package/dist/ui/core/geometry-store.js.map +1 -0
- package/dist/ui/core/geometry.d.ts +34 -0
- package/dist/ui/core/geometry.d.ts.map +1 -0
- package/dist/ui/core/geometry.js +14 -0
- package/dist/ui/core/geometry.js.map +1 -0
- package/dist/ui/core/view.d.ts +25 -0
- package/dist/ui/core/view.d.ts.map +1 -0
- package/dist/ui/core/view.js +34 -0
- package/dist/ui/core/view.js.map +1 -0
- package/dist/ui/index.d.ts +44 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +39 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/inlinetext.d.ts +24 -0
- package/dist/ui/inlinetext.d.ts.map +1 -0
- package/dist/ui/inlinetext.js +131 -0
- package/dist/ui/inlinetext.js.map +1 -0
- package/dist/ui/install.d.ts +22 -0
- package/dist/ui/install.d.ts.map +1 -0
- package/dist/ui/install.js +66 -0
- package/dist/ui/install.js.map +1 -0
- package/dist/ui/markdown.d.ts +40 -0
- package/dist/ui/markdown.d.ts.map +1 -0
- package/dist/ui/markdown.js +351 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/modifiers/border.d.ts +33 -0
- package/dist/ui/modifiers/border.d.ts.map +1 -0
- package/dist/ui/modifiers/border.js +82 -0
- package/dist/ui/modifiers/border.js.map +1 -0
- package/dist/ui/modifiers/fill.d.ts +14 -0
- package/dist/ui/modifiers/fill.d.ts.map +1 -0
- package/dist/ui/modifiers/fill.js +25 -0
- package/dist/ui/modifiers/fill.js.map +1 -0
- package/dist/ui/modifiers/frame.d.ts +23 -0
- package/dist/ui/modifiers/frame.d.ts.map +1 -0
- package/dist/ui/modifiers/frame.js +54 -0
- package/dist/ui/modifiers/frame.js.map +1 -0
- package/dist/ui/modifiers/offset.d.ts +15 -0
- package/dist/ui/modifiers/offset.d.ts.map +1 -0
- package/dist/ui/modifiers/offset.js +21 -0
- package/dist/ui/modifiers/offset.js.map +1 -0
- package/dist/ui/modifiers/opacity.d.ts +15 -0
- package/dist/ui/modifiers/opacity.d.ts.map +1 -0
- package/dist/ui/modifiers/opacity.js +95 -0
- package/dist/ui/modifiers/opacity.js.map +1 -0
- package/dist/ui/modifiers/padding.d.ts +20 -0
- package/dist/ui/modifiers/padding.d.ts.map +1 -0
- package/dist/ui/modifiers/padding.js +36 -0
- package/dist/ui/modifiers/padding.js.map +1 -0
- package/dist/ui/modifiers/styled.d.ts +14 -0
- package/dist/ui/modifiers/styled.d.ts.map +1 -0
- package/dist/ui/modifiers/styled.js +26 -0
- package/dist/ui/modifiers/styled.js.map +1 -0
- package/dist/ui/primitives/rectangle.d.ts +15 -0
- package/dist/ui/primitives/rectangle.d.ts.map +1 -0
- package/dist/ui/primitives/rectangle.js +23 -0
- package/dist/ui/primitives/rectangle.js.map +1 -0
- package/dist/ui/primitives/spacer.d.ts +13 -0
- package/dist/ui/primitives/spacer.d.ts.map +1 -0
- package/dist/ui/primitives/spacer.js +16 -0
- package/dist/ui/primitives/spacer.js.map +1 -0
- package/dist/ui/primitives/text.d.ts +15 -0
- package/dist/ui/primitives/text.d.ts.map +1 -0
- package/dist/ui/primitives/text.js +79 -0
- package/dist/ui/primitives/text.js.map +1 -0
- package/dist/ui/primitives/wrapped-text.d.ts +30 -0
- package/dist/ui/primitives/wrapped-text.d.ts.map +1 -0
- package/dist/ui/primitives/wrapped-text.js +117 -0
- package/dist/ui/primitives/wrapped-text.js.map +1 -0
- package/dist/ui/shinytext.d.ts +66 -0
- package/dist/ui/shinytext.d.ts.map +1 -0
- package/dist/ui/shinytext.js +99 -0
- package/dist/ui/shinytext.js.map +1 -0
- package/dist/ui/text/layout.d.ts +35 -0
- package/dist/ui/text/layout.d.ts.map +1 -0
- package/dist/ui/text/layout.js +102 -0
- package/dist/ui/text/layout.js.map +1 -0
- package/dist/ui/textinput.d.ts +140 -0
- package/dist/ui/textinput.d.ts.map +1 -0
- package/dist/ui/textinput.js +402 -0
- package/dist/ui/textinput.js.map +1 -0
- package/dist/ui/view-constructors.d.ts +72 -0
- package/dist/ui/view-constructors.d.ts.map +1 -0
- package/dist/ui/view-constructors.js +74 -0
- package/dist/ui/view-constructors.js.map +1 -0
- package/package.json +57 -0
- package/src/anim.ts +5 -0
- package/src/ansi.ts +83 -0
- package/src/index.ts +21 -0
- package/src/keys.ts +302 -0
- package/src/layout/linearStack.ts +115 -0
- package/src/motion-value.ts +335 -0
- package/src/present/display.ts +206 -0
- package/src/present/writers/fullscreen.ts +58 -0
- package/src/present/writers/inline.ts +101 -0
- package/src/render/buffer.ts +200 -0
- package/src/render/color-utils.ts +60 -0
- package/src/render/diff.ts +95 -0
- package/src/render/measure.ts +74 -0
- package/src/render/palette.ts +113 -0
- package/src/render/surface.ts +238 -0
- package/src/runtime/backend_node.ts +80 -0
- package/src/spring-physics.ts +151 -0
- package/src/spring.ts +234 -0
- package/src/ui/__snapshots__/wrappedtext.test.ts.snap +57 -0
- package/src/ui/containers/canvas.ts +18 -0
- package/src/ui/containers/geometry-reader.ts +32 -0
- package/src/ui/containers/hstack.ts +33 -0
- package/src/ui/containers/scroll.ts +106 -0
- package/src/ui/containers/shared.ts +27 -0
- package/src/ui/containers/vstack.ts +34 -0
- package/src/ui/containers/zstack.ts +37 -0
- package/src/ui/core/geometry-store.ts +42 -0
- package/src/ui/core/geometry.ts +30 -0
- package/src/ui/core/view.ts +49 -0
- package/src/ui/index.ts +84 -0
- package/src/ui/inlinetext.ts +135 -0
- package/src/ui/install.ts +110 -0
- package/src/ui/markdown.test.ts +74 -0
- package/src/ui/markdown.ts +388 -0
- package/src/ui/modifiers/border.ts +100 -0
- package/src/ui/modifiers/fill.ts +28 -0
- package/src/ui/modifiers/frame.ts +74 -0
- package/src/ui/modifiers/offset.ts +23 -0
- package/src/ui/modifiers/opacity.ts +93 -0
- package/src/ui/modifiers/padding.ts +53 -0
- package/src/ui/modifiers/styled.ts +31 -0
- package/src/ui/primitives/rectangle.ts +25 -0
- package/src/ui/primitives/spacer.ts +18 -0
- package/src/ui/primitives/text.ts +85 -0
- package/src/ui/primitives/wrapped-text.ts +131 -0
- package/src/ui/shinytext.ts +159 -0
- package/src/ui/text/layout.ts +119 -0
- package/src/ui/textinput.ts +496 -0
- package/src/ui/view-constructors.ts +96 -0
- package/src/ui/wrappedtext.test.ts +138 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Palette, Surface, StyleSpec, ColorLike } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect } from "../core/geometry.js";
|
|
4
|
+
export type BorderKind = "none" | "rounded" | "square" | "ascii";
|
|
5
|
+
export type BorderOptions = {
|
|
6
|
+
kind?: BorderKind;
|
|
7
|
+
color?: ColorLike;
|
|
8
|
+
padding?: number | {
|
|
9
|
+
x?: number;
|
|
10
|
+
y?: number;
|
|
11
|
+
};
|
|
12
|
+
chars?: Partial<{
|
|
13
|
+
tl: string;
|
|
14
|
+
tr: string;
|
|
15
|
+
bl: string;
|
|
16
|
+
br: string;
|
|
17
|
+
h: string;
|
|
18
|
+
v: string;
|
|
19
|
+
}>;
|
|
20
|
+
style?: StyleSpec;
|
|
21
|
+
};
|
|
22
|
+
export declare class Border extends View {
|
|
23
|
+
readonly child: View;
|
|
24
|
+
readonly opts?: BorderOptions | undefined;
|
|
25
|
+
constructor(child: View, opts?: BorderOptions | undefined);
|
|
26
|
+
private get thickness();
|
|
27
|
+
protected measureContent(maxW: number, maxH: number): {
|
|
28
|
+
w: number;
|
|
29
|
+
h: number;
|
|
30
|
+
};
|
|
31
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=border.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"border.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/border.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAErF,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAChE,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzF,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAoBD,qBAAa,MAAO,SAAQ,IAAI;IAE5B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa;gBADpB,KAAK,EAAE,IAAI,EACX,IAAI,CAAC,EAAE,aAAa,YAAA;IAK/B,OAAO,KAAK,SAAS,GAEpB;IAED,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAUnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CA6C7D"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Colors, parseColor } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
function resolveBorderPadding(p) {
|
|
4
|
+
if (typeof p === "number")
|
|
5
|
+
return { x: Math.max(0, p | 0), y: Math.max(0, p | 0) };
|
|
6
|
+
return { x: Math.max(0, p?.x ?? 0), y: Math.max(0, p?.y ?? 0) };
|
|
7
|
+
}
|
|
8
|
+
function borderKindChars(kind) {
|
|
9
|
+
switch (kind) {
|
|
10
|
+
case "rounded":
|
|
11
|
+
return { tl: "╭", tr: "╮", bl: "╰", br: "╯", h: "─", v: "│" };
|
|
12
|
+
case "square":
|
|
13
|
+
return { tl: "┌", tr: "┐", bl: "└", br: "┘", h: "─", v: "│" };
|
|
14
|
+
case "ascii":
|
|
15
|
+
return { tl: "+", tr: "+", bl: "+", br: "+", h: "-", v: "|" };
|
|
16
|
+
default:
|
|
17
|
+
return { tl: "", tr: "", bl: "", br: "", h: "", v: "" };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class Border extends View {
|
|
21
|
+
child;
|
|
22
|
+
opts;
|
|
23
|
+
constructor(child, opts) {
|
|
24
|
+
super();
|
|
25
|
+
this.child = child;
|
|
26
|
+
this.opts = opts;
|
|
27
|
+
}
|
|
28
|
+
get thickness() {
|
|
29
|
+
return this.opts?.kind === "none" ? 0 : 1;
|
|
30
|
+
}
|
|
31
|
+
measureContent(maxW, maxH) {
|
|
32
|
+
const t = this.thickness;
|
|
33
|
+
const pad = resolveBorderPadding(this.opts?.padding);
|
|
34
|
+
const m = this.child.measure(Math.max(0, maxW - t * 2 - pad.x * 2), Math.max(0, maxH - t * 2 - pad.y * 2));
|
|
35
|
+
return {
|
|
36
|
+
w: Math.min(maxW, m.w + t * 2 + pad.x * 2),
|
|
37
|
+
h: Math.min(maxH, m.h + t * 2 + pad.y * 2),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
renderContent(s, pal, rect) {
|
|
41
|
+
const k = this.opts?.kind ?? "square";
|
|
42
|
+
const t = this.thickness;
|
|
43
|
+
const pad = resolveBorderPadding(this.opts?.padding);
|
|
44
|
+
const baseChars = borderKindChars(k);
|
|
45
|
+
const chars = { ...baseChars, ...(this.opts?.chars ?? {}) };
|
|
46
|
+
const safeChars = {
|
|
47
|
+
tl: (chars.tl ?? baseChars.tl),
|
|
48
|
+
tr: (chars.tr ?? baseChars.tr),
|
|
49
|
+
bl: (chars.bl ?? baseChars.bl),
|
|
50
|
+
br: (chars.br ?? baseChars.br),
|
|
51
|
+
h: (chars.h ?? baseChars.h),
|
|
52
|
+
v: (chars.v ?? baseChars.v),
|
|
53
|
+
};
|
|
54
|
+
const borderStyle = this.opts?.style ?? {};
|
|
55
|
+
const color = this.opts?.color != null ? parseColor(this.opts.color) : Colors.gray(8);
|
|
56
|
+
const idBorder = pal.id({ ...borderStyle, fg: color ?? borderStyle.fg });
|
|
57
|
+
const w = rect.w;
|
|
58
|
+
const h = rect.h;
|
|
59
|
+
if (w <= 0 || h <= 0)
|
|
60
|
+
return;
|
|
61
|
+
if (t === 1 && w >= 2 && h >= 2) {
|
|
62
|
+
s.drawCP(rect.x, rect.y, safeChars.tl.codePointAt(0), idBorder);
|
|
63
|
+
s.fillRect(rect.x + 1, rect.y, w - 2, 1, safeChars.h.codePointAt(0), idBorder);
|
|
64
|
+
s.drawCP(rect.x + w - 1, rect.y, safeChars.tr.codePointAt(0), idBorder);
|
|
65
|
+
for (let yy = rect.y + 1; yy < rect.y + h - 1; yy++) {
|
|
66
|
+
s.drawCP(rect.x, yy, safeChars.v.codePointAt(0), idBorder);
|
|
67
|
+
s.drawCP(rect.x + w - 1, yy, safeChars.v.codePointAt(0), idBorder);
|
|
68
|
+
}
|
|
69
|
+
s.drawCP(rect.x, rect.y + h - 1, safeChars.bl.codePointAt(0), idBorder);
|
|
70
|
+
s.fillRect(rect.x + 1, rect.y + h - 1, w - 2, 1, safeChars.h.codePointAt(0), idBorder);
|
|
71
|
+
s.drawCP(rect.x + w - 1, rect.y + h - 1, safeChars.br.codePointAt(0), idBorder);
|
|
72
|
+
}
|
|
73
|
+
const inner = {
|
|
74
|
+
x: rect.x + t + pad.x,
|
|
75
|
+
y: rect.y + t + pad.y,
|
|
76
|
+
w: Math.max(0, rect.w - (t + pad.x) * 2),
|
|
77
|
+
h: Math.max(0, rect.h - (t + pad.y) * 2),
|
|
78
|
+
};
|
|
79
|
+
this.child.render(s, pal, inner);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=border.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"border.js","sourceRoot":"","sources":["../../../src/ui/modifiers/border.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect } from "../core/geometry.js";
|
|
4
|
+
export declare class Fill extends View {
|
|
5
|
+
readonly child: View;
|
|
6
|
+
readonly axis: "horizontal" | "vertical";
|
|
7
|
+
constructor(child: View, axis: "horizontal" | "vertical");
|
|
8
|
+
protected measureContent(maxW: number, maxH: number): {
|
|
9
|
+
w: number;
|
|
10
|
+
h: number;
|
|
11
|
+
};
|
|
12
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=fill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/fill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAG/C,qBAAa,IAAK,SAAQ,IAAI;IAE1B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU;gBAD/B,KAAK,EAAE,IAAI,EACX,IAAI,EAAE,YAAY,GAAG,UAAU;IAK1C,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAWnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAG7D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { View } from "../core/view.js";
|
|
2
|
+
// Fill wrapper (SwiftUI's .frame(maxWidth: .infinity) / .frame(maxHeight: .infinity))
|
|
3
|
+
export class Fill extends View {
|
|
4
|
+
child;
|
|
5
|
+
axis;
|
|
6
|
+
constructor(child, axis) {
|
|
7
|
+
super();
|
|
8
|
+
this.child = child;
|
|
9
|
+
this.axis = axis;
|
|
10
|
+
}
|
|
11
|
+
measureContent(maxW, maxH) {
|
|
12
|
+
const childMeasure = this.child.measure(maxW, maxH);
|
|
13
|
+
// Fill the requested axis to maximum available space
|
|
14
|
+
if (this.axis === "horizontal") {
|
|
15
|
+
return { w: maxW, h: childMeasure.h };
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
return { w: childMeasure.w, h: maxH };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
renderContent(s, pal, rect) {
|
|
22
|
+
this.child.render(s, pal, rect);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=fill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill.js","sourceRoot":"","sources":["../../../src/ui/modifiers/fill.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,sFAAsF;AACtF,MAAM,OAAO,IAAK,SAAQ,IAAI;IAEjB;IACA;IAFX,YACW,KAAW,EACX,IAA+B;QAExC,KAAK,EAAE,CAAA;QAHE,UAAK,GAAL,KAAK,CAAM;QACX,SAAI,GAAJ,IAAI,CAA2B;IAG1C,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAEnD,qDAAqD;QACrD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAA;QACvC,CAAC;IACH,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect, Align2D } from "../core/geometry.js";
|
|
4
|
+
export interface FrameSpec {
|
|
5
|
+
width?: number;
|
|
6
|
+
height?: number;
|
|
7
|
+
minWidth?: number;
|
|
8
|
+
maxWidth?: number;
|
|
9
|
+
minHeight?: number;
|
|
10
|
+
maxHeight?: number;
|
|
11
|
+
alignment?: Align2D;
|
|
12
|
+
}
|
|
13
|
+
export declare class Frame extends View {
|
|
14
|
+
readonly child: View;
|
|
15
|
+
readonly opts: FrameSpec;
|
|
16
|
+
constructor(child: View, opts: FrameSpec);
|
|
17
|
+
protected measureContent(maxW: number, maxH: number): {
|
|
18
|
+
w: number;
|
|
19
|
+
h: number;
|
|
20
|
+
};
|
|
21
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAExD,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,qBAAa,KAAM,SAAQ,IAAI;IAE3B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS;gBADf,KAAK,EAAE,IAAI,EACX,IAAI,EAAE,SAAS;IAK1B,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAmBnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAgC7D"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { View } from "../core/view.js";
|
|
2
|
+
export class Frame extends View {
|
|
3
|
+
child;
|
|
4
|
+
opts;
|
|
5
|
+
constructor(child, opts) {
|
|
6
|
+
super();
|
|
7
|
+
this.child = child;
|
|
8
|
+
this.opts = opts;
|
|
9
|
+
}
|
|
10
|
+
measureContent(maxW, maxH) {
|
|
11
|
+
const childMeasure = this.child.measure(maxW, maxH);
|
|
12
|
+
const fs = this.opts;
|
|
13
|
+
const capW = Math.min(maxW, fs.maxWidth ?? maxW);
|
|
14
|
+
const capH = Math.min(maxH, fs.maxHeight ?? maxH);
|
|
15
|
+
let targetW = fs.width === Infinity ? capW : (fs.width ?? childMeasure.w);
|
|
16
|
+
let targetH = fs.height === Infinity ? capH : (fs.height ?? childMeasure.h);
|
|
17
|
+
targetW = Math.max(fs.minWidth ?? 0, Math.min(capW, targetW));
|
|
18
|
+
targetH = Math.max(fs.minHeight ?? 0, Math.min(capH, targetH));
|
|
19
|
+
return {
|
|
20
|
+
w: Math.min(maxW, targetW),
|
|
21
|
+
h: Math.min(maxH, targetH),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
renderContent(s, pal, rect) {
|
|
25
|
+
// Measure child within our rect bounds
|
|
26
|
+
const childMeasure = this.child.measure(rect.w, rect.h);
|
|
27
|
+
const childW = Math.min(rect.w, childMeasure.w);
|
|
28
|
+
const childH = Math.min(rect.h, childMeasure.h);
|
|
29
|
+
// Apply alignment
|
|
30
|
+
const alignment = this.opts.alignment ?? { h: "leading", v: "top" };
|
|
31
|
+
let offsetX = 0;
|
|
32
|
+
let offsetY = 0;
|
|
33
|
+
if (alignment.h === "center") {
|
|
34
|
+
offsetX = Math.floor((rect.w - childW) / 2);
|
|
35
|
+
}
|
|
36
|
+
else if (alignment.h === "trailing") {
|
|
37
|
+
offsetX = Math.max(0, rect.w - childW);
|
|
38
|
+
}
|
|
39
|
+
if (alignment.v === "center") {
|
|
40
|
+
offsetY = Math.floor((rect.h - childH) / 2);
|
|
41
|
+
}
|
|
42
|
+
else if (alignment.v === "bottom") {
|
|
43
|
+
offsetY = Math.max(0, rect.h - childH);
|
|
44
|
+
}
|
|
45
|
+
const childRect = {
|
|
46
|
+
x: rect.x + offsetX,
|
|
47
|
+
y: rect.y + offsetY,
|
|
48
|
+
w: childW,
|
|
49
|
+
h: childH,
|
|
50
|
+
};
|
|
51
|
+
this.child.render(s, pal, childRect);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../../src/ui/modifiers/frame.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAatC,MAAM,OAAO,KAAM,SAAQ,IAAI;IAElB;IACA;IAFX,YACW,KAAW,EACX,IAAe;QAExB,KAAK,EAAE,CAAA;QAHE,UAAK,GAAL,KAAK,CAAM;QACX,SAAI,GAAJ,IAAI,CAAW;IAG1B,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAEnD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAA;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;QAEjD,IAAI,OAAO,GAAG,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA;QACzE,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA;QAE3E,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;QAC7D,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;QAE9D,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;YAC1B,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;SAC3B,CAAA;IACH,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;QAE/C,kBAAkB;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAA;QACnE,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,OAAO,GAAG,CAAC,CAAA;QAEf,IAAI,SAAS,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7C,CAAC;aAAM,IAAI,SAAS,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;YACtC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;QACxC,CAAC;QAED,IAAI,SAAS,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7C,CAAC;aAAM,IAAI,SAAS,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;QACxC,CAAC;QAED,MAAM,SAAS,GAAS;YACtB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO;YACnB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO;YACnB,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,MAAM;SACV,CAAA;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect } from "../core/geometry.js";
|
|
4
|
+
export declare class Offset extends View {
|
|
5
|
+
readonly child: View;
|
|
6
|
+
readonly dx: number;
|
|
7
|
+
readonly dy: number;
|
|
8
|
+
constructor(child: View, dx?: number, dy?: number);
|
|
9
|
+
protected measureContent(maxW: number, maxH: number): {
|
|
10
|
+
w: number;
|
|
11
|
+
h: number;
|
|
12
|
+
};
|
|
13
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=offset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offset.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/offset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAG/C,qBAAa,MAAO,SAAQ,IAAI;IAE5B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,EAAE;IACX,QAAQ,CAAC,EAAE;gBAFF,KAAK,EAAE,IAAI,EACX,EAAE,SAAI,EACN,EAAE,SAAI;IAKjB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAInD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAI7D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { View } from "../core/view.js";
|
|
2
|
+
// Offset wrapper: translate child's render position by (dx, dy) without affecting measurement
|
|
3
|
+
export class Offset extends View {
|
|
4
|
+
child;
|
|
5
|
+
dx;
|
|
6
|
+
dy;
|
|
7
|
+
constructor(child, dx = 0, dy = 0) {
|
|
8
|
+
super();
|
|
9
|
+
this.child = child;
|
|
10
|
+
this.dx = dx;
|
|
11
|
+
this.dy = dy;
|
|
12
|
+
}
|
|
13
|
+
measureContent(maxW, maxH) {
|
|
14
|
+
return this.child.measure(maxW, maxH);
|
|
15
|
+
}
|
|
16
|
+
renderContent(s, pal, rect) {
|
|
17
|
+
const r = { x: rect.x + (this.dx | 0), y: rect.y + (this.dy | 0), w: rect.w, h: rect.h };
|
|
18
|
+
this.child.render(s, pal, r);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=offset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offset.js","sourceRoot":"","sources":["../../../src/ui/modifiers/offset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,8FAA8F;AAC9F,MAAM,OAAO,MAAO,SAAQ,IAAI;IAEnB;IACA;IACA;IAHX,YACW,KAAW,EACX,KAAK,CAAC,EACN,KAAK,CAAC;QAEf,KAAK,EAAE,CAAA;QAJE,UAAK,GAAL,KAAK,CAAM;QACX,OAAE,GAAF,EAAE,CAAI;QACN,OAAE,GAAF,EAAE,CAAI;IAGjB,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAA;QACxF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Surface } from "../../render/surface.js";
|
|
2
|
+
import { Palette } from "../../render/surface.js";
|
|
3
|
+
import { View } from "../core/view.js";
|
|
4
|
+
import type { Rect } from "../core/geometry.js";
|
|
5
|
+
export declare class Opacity extends View {
|
|
6
|
+
readonly child: View;
|
|
7
|
+
readonly alpha: number;
|
|
8
|
+
constructor(child: View, alpha?: number);
|
|
9
|
+
protected measureContent(maxW: number, maxH: number): {
|
|
10
|
+
w: number;
|
|
11
|
+
h: number;
|
|
12
|
+
};
|
|
13
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=opacity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opacity.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/opacity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAyB,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAc,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAwC/C,qBAAa,OAAQ,SAAQ,IAAI;IAE7B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,KAAK;gBADL,KAAK,EAAE,IAAI,EACX,KAAK,SAAI;IAKpB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAInD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAM7D"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { mergeStyle, Palette } from "../../render/surface.js";
|
|
2
|
+
import { clamp255, idxToRGB } from "../../render/color-utils.js";
|
|
3
|
+
import { View } from "../core/view.js";
|
|
4
|
+
// Minimal palette wrapper that applies a style transform before delegating to the base palette
|
|
5
|
+
class FilterPalette extends Palette {
|
|
6
|
+
base;
|
|
7
|
+
transform;
|
|
8
|
+
constructor(base, transform) {
|
|
9
|
+
super();
|
|
10
|
+
this.base = base;
|
|
11
|
+
this.transform = transform;
|
|
12
|
+
}
|
|
13
|
+
id(spec) {
|
|
14
|
+
return this.base.id(this.transform(spec));
|
|
15
|
+
}
|
|
16
|
+
sgr(id) {
|
|
17
|
+
return this.base.sgr(id);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function toRGB(c) {
|
|
21
|
+
if (c == null)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (typeof c === "number")
|
|
24
|
+
return idxToRGB(c);
|
|
25
|
+
return { r: clamp255(c.r), g: clamp255(c.g), b: clamp255(c.b) };
|
|
26
|
+
}
|
|
27
|
+
function applyOpacity(spec, alpha) {
|
|
28
|
+
if (!spec)
|
|
29
|
+
return spec;
|
|
30
|
+
const a = Math.max(0, Math.min(1, alpha));
|
|
31
|
+
if (a === 1)
|
|
32
|
+
return spec;
|
|
33
|
+
if (a <= 0)
|
|
34
|
+
return {}; // render as default style; caller may skip drawing entirely
|
|
35
|
+
const next = { ...spec };
|
|
36
|
+
const fgc = toRGB(spec.fg);
|
|
37
|
+
const bgc = toRGB(spec.bg);
|
|
38
|
+
if (fgc)
|
|
39
|
+
next.fg = { r: clamp255(fgc.r * a), g: clamp255(fgc.g * a), b: clamp255(fgc.b * a) };
|
|
40
|
+
if (bgc)
|
|
41
|
+
next.bg = { r: clamp255(bgc.r * a), g: clamp255(bgc.g * a), b: clamp255(bgc.b * a) };
|
|
42
|
+
// Optionally taper bold to avoid harshness at low alpha
|
|
43
|
+
if (spec.bold && a < 0.5)
|
|
44
|
+
next.bold = false;
|
|
45
|
+
return next;
|
|
46
|
+
}
|
|
47
|
+
export class Opacity extends View {
|
|
48
|
+
child;
|
|
49
|
+
alpha;
|
|
50
|
+
constructor(child, alpha = 1) {
|
|
51
|
+
super();
|
|
52
|
+
this.child = child;
|
|
53
|
+
this.alpha = alpha;
|
|
54
|
+
}
|
|
55
|
+
measureContent(maxW, maxH) {
|
|
56
|
+
return this.child.measure(maxW, maxH);
|
|
57
|
+
}
|
|
58
|
+
renderContent(s, pal, rect) {
|
|
59
|
+
const a = Math.max(0, Math.min(1, this.alpha));
|
|
60
|
+
if (a <= 0.001)
|
|
61
|
+
return; // invisible; keep layout but skip drawing
|
|
62
|
+
const filtered = new FilterPalette(pal, (spec) => applyOpacity(mergeStyle(undefined, spec), a));
|
|
63
|
+
this.child.render(s, filtered, rect);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/*
|
|
67
|
+
* opacity.ts — composable opacity modifier for terminal views
|
|
68
|
+
*
|
|
69
|
+
* How it works (no real alpha in terminals):
|
|
70
|
+
* - Terminals don’t support true alpha blending, and we can’t read the
|
|
71
|
+
* current screen contents to composite. To approximate “opacity”, we
|
|
72
|
+
* dim colors toward black by scaling their RGB channels by `alpha`.
|
|
73
|
+
* At alpha=1 the colors are unchanged; at alpha=0 they become black.
|
|
74
|
+
*
|
|
75
|
+
* Implementation:
|
|
76
|
+
* - We wrap the palette with a tiny FilterPalette that transforms any
|
|
77
|
+
* StyleSpec handed to `palette.id()` before it is converted to SGR.
|
|
78
|
+
* - The transform scales fg/bg colors by `alpha` and optionally disables
|
|
79
|
+
* bold at low alpha to avoid harsh flashes.
|
|
80
|
+
* - Rendering is skipped entirely when alpha ≤ ~0.001 (keeps layout but
|
|
81
|
+
* avoids drawing noise while effectively invisible).
|
|
82
|
+
*
|
|
83
|
+
* Composition:
|
|
84
|
+
* - This is a real modifier (wrapper node). You can chain it on any view:
|
|
85
|
+
* View.text("Loading").opacity(0.5)
|
|
86
|
+
* ShinyText.view(model).opacity(alpha).padding(0,1,0,1)
|
|
87
|
+
* - Multiple opacities compound (roughly multiplicative dimming).
|
|
88
|
+
* - Use it for fade in/out by driving `alpha` with a spring/motion value.
|
|
89
|
+
*
|
|
90
|
+
* Trade-offs:
|
|
91
|
+
* - Fades toward black, not toward the terminal background color. For most
|
|
92
|
+
* themes this reads as a natural fade. If you prefer a different look,
|
|
93
|
+
* we could add a color-tint/brightness modifier using the same pattern.
|
|
94
|
+
*/
|
|
95
|
+
//# sourceMappingURL=opacity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opacity.js","sourceRoot":"","sources":["../../../src/ui/modifiers/opacity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect } from "../core/geometry.js";
|
|
4
|
+
export interface PaddingSpec {
|
|
5
|
+
t: number;
|
|
6
|
+
r: number;
|
|
7
|
+
b: number;
|
|
8
|
+
l: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class Padding extends View {
|
|
11
|
+
readonly child: View;
|
|
12
|
+
private readonly pad;
|
|
13
|
+
constructor(child: View, t: number, r?: number, b?: number, l?: number);
|
|
14
|
+
protected measureContent(maxW: number, maxH: number): {
|
|
15
|
+
w: number;
|
|
16
|
+
h: number;
|
|
17
|
+
};
|
|
18
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=padding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"padding.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/padding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAUD,qBAAa,OAAQ,SAAQ,IAAI;IAI7B,QAAQ,CAAC,KAAK,EAAE,IAAI;IAHtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAGtB,KAAK,EAAE,IAAI,EACpB,CAAC,EAAE,MAAM,EACT,CAAC,CAAC,EAAE,MAAM,EACV,CAAC,CAAC,EAAE,MAAM,EACV,CAAC,CAAC,EAAE,MAAM;IAMZ,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAUnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAS7D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { View } from "../core/view.js";
|
|
2
|
+
function resolvePadding(t, r, b, l) {
|
|
3
|
+
const top = Math.max(0, t | 0);
|
|
4
|
+
const right = r == null ? top : Math.max(0, r | 0);
|
|
5
|
+
const bottom = b == null ? top : Math.max(0, b | 0);
|
|
6
|
+
const left = l == null ? right : Math.max(0, l | 0);
|
|
7
|
+
return { t: top, r: right, b: bottom, l: left };
|
|
8
|
+
}
|
|
9
|
+
export class Padding extends View {
|
|
10
|
+
child;
|
|
11
|
+
pad;
|
|
12
|
+
constructor(child, t, r, b, l) {
|
|
13
|
+
super();
|
|
14
|
+
this.child = child;
|
|
15
|
+
this.pad = resolvePadding(t, r, b, l);
|
|
16
|
+
}
|
|
17
|
+
measureContent(maxW, maxH) {
|
|
18
|
+
const innerW = Math.max(0, maxW - this.pad.l - this.pad.r);
|
|
19
|
+
const innerH = Math.max(0, maxH - this.pad.t - this.pad.b);
|
|
20
|
+
const m = this.child.measure(innerW, innerH);
|
|
21
|
+
return {
|
|
22
|
+
w: Math.min(maxW, m.w + this.pad.l + this.pad.r),
|
|
23
|
+
h: Math.min(maxH, m.h + this.pad.t + this.pad.b),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
renderContent(s, pal, rect) {
|
|
27
|
+
const inner = {
|
|
28
|
+
x: rect.x + this.pad.l,
|
|
29
|
+
y: rect.y + this.pad.t,
|
|
30
|
+
w: Math.max(0, rect.w - this.pad.l - this.pad.r),
|
|
31
|
+
h: Math.max(0, rect.h - this.pad.t - this.pad.b),
|
|
32
|
+
};
|
|
33
|
+
this.child.render(s, pal, inner);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=padding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"padding.js","sourceRoot":"","sources":["../../../src/ui/modifiers/padding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Palette, Surface, StyleSpec } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect } from "../core/geometry.js";
|
|
4
|
+
export declare class Styled extends View {
|
|
5
|
+
readonly child: View;
|
|
6
|
+
readonly styleSpec: StyleSpec;
|
|
7
|
+
constructor(child: View, styleSpec: StyleSpec);
|
|
8
|
+
protected measureContent(maxW: number, maxH: number): {
|
|
9
|
+
w: number;
|
|
10
|
+
h: number;
|
|
11
|
+
};
|
|
12
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=styled.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styled.d.ts","sourceRoot":"","sources":["../../../src/ui/modifiers/styled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,qBAAa,MAAO,SAAQ,IAAI;IAE5B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS;gBADpB,KAAK,EAAE,IAAI,EACX,SAAS,EAAE,SAAS;IAK/B,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAInD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAa7D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { derivePalette } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
export class Styled extends View {
|
|
4
|
+
child;
|
|
5
|
+
styleSpec;
|
|
6
|
+
constructor(child, styleSpec) {
|
|
7
|
+
super();
|
|
8
|
+
this.child = child;
|
|
9
|
+
this.styleSpec = styleSpec;
|
|
10
|
+
}
|
|
11
|
+
measureContent(maxW, maxH) {
|
|
12
|
+
return this.child.measure(maxW, maxH);
|
|
13
|
+
}
|
|
14
|
+
renderContent(s, pal, rect) {
|
|
15
|
+
// Create derived palette with our style applied
|
|
16
|
+
const derivedPal = derivePalette(pal, this.styleSpec);
|
|
17
|
+
// If we have a background color, fill the entire rect
|
|
18
|
+
if (this.styleSpec.bg != null) {
|
|
19
|
+
const id = derivedPal.id(this.styleSpec);
|
|
20
|
+
s.fillRect(rect.x, rect.y, rect.w, rect.h, 32, id); // 32 = space character
|
|
21
|
+
}
|
|
22
|
+
// Render child with the styled palette
|
|
23
|
+
this.child.render(s, derivedPal, rect);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=styled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styled.js","sourceRoot":"","sources":["../../../src/ui/modifiers/styled.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,MAAM,OAAO,MAAO,SAAQ,IAAI;IAEnB;IACA;IAFX,YACW,KAAW,EACX,SAAoB;QAE7B,KAAK,EAAE,CAAA;QAHE,UAAK,GAAL,KAAK,CAAM;QACX,cAAS,GAAT,SAAS,CAAW;IAG/B,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,gDAAgD;QAChD,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAErD,sDAAsD;QACtD,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACxC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA,CAAC,uBAAuB;QAC5E,CAAC;QAED,uCAAuC;QACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect } from "../core/geometry.js";
|
|
4
|
+
export declare class Rectangle extends View {
|
|
5
|
+
readonly width: number;
|
|
6
|
+
readonly height: number;
|
|
7
|
+
readonly fillCP: number;
|
|
8
|
+
constructor(width: number, height: number, fillCP?: number);
|
|
9
|
+
protected measureContent(maxW: number, maxH: number): {
|
|
10
|
+
w: number;
|
|
11
|
+
h: number;
|
|
12
|
+
};
|
|
13
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=rectangle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rectangle.d.ts","sourceRoot":"","sources":["../../../src/ui/primitives/rectangle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAG/C,qBAAa,SAAU,SAAQ,IAAI;IAE/B,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,MAAM;gBAFN,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,SAAK;IAKtB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAMnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAI7D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { View } from "../core/view.js";
|
|
2
|
+
// Rectangle primitive (fills area with a codepoint, default space). Useful as a block element.
|
|
3
|
+
export class Rectangle extends View {
|
|
4
|
+
width;
|
|
5
|
+
height;
|
|
6
|
+
fillCP;
|
|
7
|
+
constructor(width, height, fillCP = 32) {
|
|
8
|
+
super();
|
|
9
|
+
this.width = width;
|
|
10
|
+
this.height = height;
|
|
11
|
+
this.fillCP = fillCP;
|
|
12
|
+
}
|
|
13
|
+
measureContent(maxW, maxH) {
|
|
14
|
+
const w = Math.min(maxW, Math.max(0, this.width | 0));
|
|
15
|
+
const h = Math.min(maxH, Math.max(0, this.height | 0));
|
|
16
|
+
return { w, h };
|
|
17
|
+
}
|
|
18
|
+
renderContent(s, pal, rect) {
|
|
19
|
+
const id = pal.id();
|
|
20
|
+
s.fillRect(rect.x, rect.y, rect.w, rect.h, this.fillCP, id);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=rectangle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rectangle.js","sourceRoot":"","sources":["../../../src/ui/primitives/rectangle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,+FAA+F;AAC/F,MAAM,OAAO,SAAU,SAAQ,IAAI;IAEtB;IACA;IACA;IAHX,YACW,KAAa,EACb,MAAc,EACd,SAAS,EAAE;QAEpB,KAAK,EAAE,CAAA;QAJE,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAK;IAGtB,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QACrD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QACtD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IACjB,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAA;QACnB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC7D,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect } from "../core/geometry.js";
|
|
4
|
+
export declare class Spacer extends View {
|
|
5
|
+
readonly minLength: number;
|
|
6
|
+
constructor(minLength?: number);
|
|
7
|
+
protected measureContent(_maxW: number, _maxH: number): {
|
|
8
|
+
w: number;
|
|
9
|
+
h: number;
|
|
10
|
+
};
|
|
11
|
+
protected renderContent(_s: Surface, _pal: Palette, _rect: Rect): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=spacer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spacer.d.ts","sourceRoot":"","sources":["../../../src/ui/primitives/spacer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAG/C,qBAAa,MAAO,SAAQ,IAAI;IAClB,QAAQ,CAAC,SAAS;gBAAT,SAAS,SAAI;IAIlC,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;IAIrD,SAAS,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI;CAGhE"}
|