@effect-tui/core 0.1.1 → 0.1.5
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/README.md +31 -11
- package/dist/ansi.d.ts +127 -32
- package/dist/ansi.d.ts.map +1 -1
- package/dist/ansi.js +159 -37
- package/dist/ansi.js.map +1 -1
- package/dist/colors.d.ts +139 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +339 -0
- package/dist/colors.js.map +1 -0
- package/dist/index.d.ts +6 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -11
- package/dist/index.js.map +1 -1
- package/dist/keys.d.ts +21 -0
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +199 -58
- package/dist/keys.js.map +1 -1
- package/dist/layout/axis-helpers.d.ts +19 -0
- package/dist/layout/axis-helpers.d.ts.map +1 -0
- package/dist/layout/axis-helpers.js +19 -0
- package/dist/layout/axis-helpers.js.map +1 -0
- package/dist/output.d.ts +59 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +142 -0
- package/dist/output.js.map +1 -0
- package/dist/render/buffer.d.ts.map +1 -1
- package/dist/render/buffer.js +6 -25
- package/dist/render/buffer.js.map +1 -1
- package/dist/render/graphemes.d.ts +15 -0
- package/dist/render/graphemes.d.ts.map +1 -0
- package/dist/render/graphemes.js +28 -0
- package/dist/render/graphemes.js.map +1 -0
- package/dist/render/measure.d.ts +1 -0
- package/dist/render/measure.d.ts.map +1 -1
- package/dist/render/measure.js +14 -36
- package/dist/render/measure.js.map +1 -1
- package/dist/render/palette.d.ts.map +1 -1
- package/dist/render/palette.js +26 -1
- package/dist/render/palette.js.map +1 -1
- package/dist/render/segmenter.d.ts +8 -0
- package/dist/render/segmenter.d.ts.map +1 -0
- package/dist/render/segmenter.js +23 -0
- package/dist/render/segmenter.js.map +1 -0
- package/dist/render/surface.d.ts +6 -32
- package/dist/render/surface.d.ts.map +1 -1
- package/dist/render/surface.js +11 -80
- package/dist/render/surface.js.map +1 -1
- package/dist/runtime/backend_node.d.ts.map +1 -1
- package/dist/runtime/backend_node.js.map +1 -1
- package/dist/tailwind-colors.d.ts +291 -0
- package/dist/tailwind-colors.d.ts.map +1 -0
- package/dist/tailwind-colors.js +291 -0
- package/dist/tailwind-colors.js.map +1 -0
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +55 -55
- package/src/ansi.ts +201 -73
- package/src/colors.ts +468 -0
- package/src/index.ts +28 -14
- package/src/keys.ts +467 -287
- package/src/layout/axis-helpers.ts +33 -0
- package/src/output.ts +175 -0
- package/src/render/buffer.ts +161 -184
- package/src/render/graphemes.ts +34 -0
- package/src/render/measure.ts +15 -38
- package/src/render/palette.ts +98 -77
- package/src/render/segmenter.ts +27 -0
- package/src/render/surface.ts +139 -225
- package/src/runtime/backend_node.ts +71 -71
- package/src/tailwind-colors.ts +295 -0
- package/src/types.ts +18 -0
- package/dist/anim.d.ts +0 -4
- package/dist/anim.d.ts.map +0 -1
- package/dist/anim.js +0 -5
- package/dist/anim.js.map +0 -1
- package/dist/layout/linearStack.d.ts +0 -17
- package/dist/layout/linearStack.d.ts.map +0 -1
- package/dist/layout/linearStack.js +0 -86
- package/dist/layout/linearStack.js.map +0 -1
- package/dist/motion-value.d.ts +0 -58
- package/dist/motion-value.d.ts.map +0 -1
- package/dist/motion-value.js +0 -250
- package/dist/motion-value.js.map +0 -1
- package/dist/present/display.d.ts +0 -58
- package/dist/present/display.d.ts.map +0 -1
- package/dist/present/display.js +0 -168
- package/dist/present/display.js.map +0 -1
- package/dist/present/writers/fullscreen.d.ts +0 -19
- package/dist/present/writers/fullscreen.d.ts.map +0 -1
- package/dist/present/writers/fullscreen.js +0 -55
- package/dist/present/writers/fullscreen.js.map +0 -1
- package/dist/present/writers/inline.d.ts +0 -20
- package/dist/present/writers/inline.d.ts.map +0 -1
- package/dist/present/writers/inline.js +0 -92
- package/dist/present/writers/inline.js.map +0 -1
- package/dist/render/color-utils.d.ts +0 -18
- package/dist/render/color-utils.d.ts.map +0 -1
- package/dist/render/color-utils.js +0 -58
- package/dist/render/color-utils.js.map +0 -1
- package/dist/render/diff.d.ts +0 -30
- package/dist/render/diff.d.ts.map +0 -1
- package/dist/render/diff.js +0 -83
- package/dist/render/diff.js.map +0 -1
- package/dist/spring-physics.d.ts +0 -36
- package/dist/spring-physics.d.ts.map +0 -1
- package/dist/spring-physics.js +0 -113
- package/dist/spring-physics.js.map +0 -1
- package/dist/spring.d.ts +0 -73
- package/dist/spring.d.ts.map +0 -1
- package/dist/spring.js +0 -136
- package/dist/spring.js.map +0 -1
- package/dist/ui/containers/canvas.d.ts +0 -13
- package/dist/ui/containers/canvas.d.ts.map +0 -1
- package/dist/ui/containers/canvas.js +0 -16
- package/dist/ui/containers/canvas.js.map +0 -1
- package/dist/ui/containers/geometry-reader.d.ts +0 -17
- package/dist/ui/containers/geometry-reader.d.ts.map +0 -1
- package/dist/ui/containers/geometry-reader.js +0 -24
- package/dist/ui/containers/geometry-reader.js.map +0 -1
- package/dist/ui/containers/hstack.d.ts +0 -12
- package/dist/ui/containers/hstack.d.ts.map +0 -1
- package/dist/ui/containers/hstack.js +0 -28
- package/dist/ui/containers/hstack.js.map +0 -1
- package/dist/ui/containers/scroll.d.ts +0 -28
- package/dist/ui/containers/scroll.d.ts.map +0 -1
- package/dist/ui/containers/scroll.js +0 -97
- package/dist/ui/containers/scroll.js.map +0 -1
- package/dist/ui/containers/shared.d.ts +0 -12
- package/dist/ui/containers/shared.d.ts.map +0 -1
- package/dist/ui/containers/shared.js +0 -19
- package/dist/ui/containers/shared.js.map +0 -1
- package/dist/ui/containers/vstack.d.ts +0 -12
- package/dist/ui/containers/vstack.d.ts.map +0 -1
- package/dist/ui/containers/vstack.js +0 -28
- package/dist/ui/containers/vstack.js.map +0 -1
- package/dist/ui/containers/zstack.d.ts +0 -14
- package/dist/ui/containers/zstack.d.ts.map +0 -1
- package/dist/ui/containers/zstack.js +0 -36
- package/dist/ui/containers/zstack.js.map +0 -1
- package/dist/ui/core/geometry-store.d.ts +0 -22
- package/dist/ui/core/geometry-store.d.ts.map +0 -1
- package/dist/ui/core/geometry-store.js +0 -29
- package/dist/ui/core/geometry-store.js.map +0 -1
- package/dist/ui/core/geometry.d.ts +0 -34
- package/dist/ui/core/geometry.d.ts.map +0 -1
- package/dist/ui/core/geometry.js +0 -14
- package/dist/ui/core/geometry.js.map +0 -1
- package/dist/ui/core/view.d.ts +0 -25
- package/dist/ui/core/view.d.ts.map +0 -1
- package/dist/ui/core/view.js +0 -34
- package/dist/ui/core/view.js.map +0 -1
- package/dist/ui/index.d.ts +0 -44
- package/dist/ui/index.d.ts.map +0 -1
- package/dist/ui/index.js +0 -39
- package/dist/ui/index.js.map +0 -1
- package/dist/ui/inlinetext.d.ts +0 -24
- package/dist/ui/inlinetext.d.ts.map +0 -1
- package/dist/ui/inlinetext.js +0 -131
- package/dist/ui/inlinetext.js.map +0 -1
- package/dist/ui/install.d.ts +0 -22
- package/dist/ui/install.d.ts.map +0 -1
- package/dist/ui/install.js +0 -66
- package/dist/ui/install.js.map +0 -1
- package/dist/ui/markdown.d.ts +0 -40
- package/dist/ui/markdown.d.ts.map +0 -1
- package/dist/ui/markdown.js +0 -351
- package/dist/ui/markdown.js.map +0 -1
- package/dist/ui/modifiers/border.d.ts +0 -33
- package/dist/ui/modifiers/border.d.ts.map +0 -1
- package/dist/ui/modifiers/border.js +0 -82
- package/dist/ui/modifiers/border.js.map +0 -1
- package/dist/ui/modifiers/fill.d.ts +0 -14
- package/dist/ui/modifiers/fill.d.ts.map +0 -1
- package/dist/ui/modifiers/fill.js +0 -25
- package/dist/ui/modifiers/fill.js.map +0 -1
- package/dist/ui/modifiers/frame.d.ts +0 -23
- package/dist/ui/modifiers/frame.d.ts.map +0 -1
- package/dist/ui/modifiers/frame.js +0 -54
- package/dist/ui/modifiers/frame.js.map +0 -1
- package/dist/ui/modifiers/offset.d.ts +0 -15
- package/dist/ui/modifiers/offset.d.ts.map +0 -1
- package/dist/ui/modifiers/offset.js +0 -21
- package/dist/ui/modifiers/offset.js.map +0 -1
- package/dist/ui/modifiers/opacity.d.ts +0 -15
- package/dist/ui/modifiers/opacity.d.ts.map +0 -1
- package/dist/ui/modifiers/opacity.js +0 -95
- package/dist/ui/modifiers/opacity.js.map +0 -1
- package/dist/ui/modifiers/padding.d.ts +0 -20
- package/dist/ui/modifiers/padding.d.ts.map +0 -1
- package/dist/ui/modifiers/padding.js +0 -36
- package/dist/ui/modifiers/padding.js.map +0 -1
- package/dist/ui/modifiers/styled.d.ts +0 -14
- package/dist/ui/modifiers/styled.d.ts.map +0 -1
- package/dist/ui/modifiers/styled.js +0 -26
- package/dist/ui/modifiers/styled.js.map +0 -1
- package/dist/ui/primitives/rectangle.d.ts +0 -15
- package/dist/ui/primitives/rectangle.d.ts.map +0 -1
- package/dist/ui/primitives/rectangle.js +0 -23
- package/dist/ui/primitives/rectangle.js.map +0 -1
- package/dist/ui/primitives/spacer.d.ts +0 -13
- package/dist/ui/primitives/spacer.d.ts.map +0 -1
- package/dist/ui/primitives/spacer.js +0 -16
- package/dist/ui/primitives/spacer.js.map +0 -1
- package/dist/ui/primitives/text.d.ts +0 -15
- package/dist/ui/primitives/text.d.ts.map +0 -1
- package/dist/ui/primitives/text.js +0 -79
- package/dist/ui/primitives/text.js.map +0 -1
- package/dist/ui/primitives/wrapped-text.d.ts +0 -30
- package/dist/ui/primitives/wrapped-text.d.ts.map +0 -1
- package/dist/ui/primitives/wrapped-text.js +0 -117
- package/dist/ui/primitives/wrapped-text.js.map +0 -1
- package/dist/ui/shinytext.d.ts +0 -66
- package/dist/ui/shinytext.d.ts.map +0 -1
- package/dist/ui/shinytext.js +0 -99
- package/dist/ui/shinytext.js.map +0 -1
- package/dist/ui/text/layout.d.ts +0 -35
- package/dist/ui/text/layout.d.ts.map +0 -1
- package/dist/ui/text/layout.js +0 -102
- package/dist/ui/text/layout.js.map +0 -1
- package/dist/ui/textinput.d.ts +0 -140
- package/dist/ui/textinput.d.ts.map +0 -1
- package/dist/ui/textinput.js +0 -402
- package/dist/ui/textinput.js.map +0 -1
- package/dist/ui/view-constructors.d.ts +0 -72
- package/dist/ui/view-constructors.d.ts.map +0 -1
- package/dist/ui/view-constructors.js +0 -74
- package/dist/ui/view-constructors.js.map +0 -1
- package/src/anim.ts +0 -5
- package/src/layout/linearStack.ts +0 -115
- package/src/motion-value.ts +0 -335
- package/src/present/display.ts +0 -206
- package/src/present/writers/fullscreen.ts +0 -58
- package/src/present/writers/inline.ts +0 -101
- package/src/render/color-utils.ts +0 -60
- package/src/render/diff.ts +0 -95
- package/src/spring-physics.ts +0 -151
- package/src/spring.ts +0 -234
- package/src/ui/__snapshots__/wrappedtext.test.ts.snap +0 -57
- package/src/ui/containers/canvas.ts +0 -18
- package/src/ui/containers/geometry-reader.ts +0 -32
- package/src/ui/containers/hstack.ts +0 -33
- package/src/ui/containers/scroll.ts +0 -106
- package/src/ui/containers/shared.ts +0 -27
- package/src/ui/containers/vstack.ts +0 -34
- package/src/ui/containers/zstack.ts +0 -37
- package/src/ui/core/geometry-store.ts +0 -42
- package/src/ui/core/geometry.ts +0 -30
- package/src/ui/core/view.ts +0 -49
- package/src/ui/index.ts +0 -84
- package/src/ui/inlinetext.ts +0 -135
- package/src/ui/install.ts +0 -110
- package/src/ui/markdown.test.ts +0 -74
- package/src/ui/markdown.ts +0 -388
- package/src/ui/modifiers/border.ts +0 -100
- package/src/ui/modifiers/fill.ts +0 -28
- package/src/ui/modifiers/frame.ts +0 -74
- package/src/ui/modifiers/offset.ts +0 -23
- package/src/ui/modifiers/opacity.ts +0 -93
- package/src/ui/modifiers/padding.ts +0 -53
- package/src/ui/modifiers/styled.ts +0 -31
- package/src/ui/primitives/rectangle.ts +0 -25
- package/src/ui/primitives/spacer.ts +0 -18
- package/src/ui/primitives/text.ts +0 -85
- package/src/ui/primitives/wrapped-text.ts +0 -131
- package/src/ui/shinytext.ts +0 -159
- package/src/ui/text/layout.ts +0 -119
- package/src/ui/textinput.ts +0 -496
- package/src/ui/view-constructors.ts +0 -96
- package/src/ui/wrappedtext.test.ts +0 -138
|
@@ -1,15 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,95 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opacity.js","sourceRoot":"","sources":["../../../src/ui/modifiers/opacity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"padding.js","sourceRoot":"","sources":["../../../src/ui/modifiers/padding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { View } from "../core/view.js";
|
|
2
|
-
// Spacer (flexible in stacks)
|
|
3
|
-
export class Spacer extends View {
|
|
4
|
-
minLength;
|
|
5
|
-
constructor(minLength = 0) {
|
|
6
|
-
super();
|
|
7
|
-
this.minLength = minLength;
|
|
8
|
-
}
|
|
9
|
-
measureContent(_maxW, _maxH) {
|
|
10
|
-
return { w: 0, h: 0 };
|
|
11
|
-
}
|
|
12
|
-
renderContent(_s, _pal, _rect) {
|
|
13
|
-
// Spacers render nothing
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=spacer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spacer.js","sourceRoot":"","sources":["../../../src/ui/primitives/spacer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,8BAA8B;AAC9B,MAAM,OAAO,MAAO,SAAQ,IAAI;IACT;IAArB,YAAqB,YAAY,CAAC;QAChC,KAAK,EAAE,CAAA;QADY,cAAS,GAAT,SAAS,CAAI;IAElC,CAAC;IAES,cAAc,CAAC,KAAa,EAAE,KAAa;QACnD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IACvB,CAAC;IAES,aAAa,CAAC,EAAW,EAAE,IAAa,EAAE,KAAW;QAC7D,yBAAyB;IAC3B,CAAC;CACF"}
|
|
@@ -1,15 +0,0 @@
|
|
|
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 Text extends View {
|
|
5
|
-
readonly text: string;
|
|
6
|
-
readonly wrap?: boolean | undefined;
|
|
7
|
-
constructor(text: string, wrap?: boolean | undefined);
|
|
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
|
-
private wrapText;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=text.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/ui/primitives/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAE/D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,qBAAa,IAAK,SAAQ,IAAI;IAE1B,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;gBADd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,YAAA;IAKzB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAgBnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;IAgB5D,OAAO,CAAC,QAAQ;CAuCjB"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { displayWidth } from "../../render/measure.js";
|
|
2
|
-
import { View } from "../core/view.js";
|
|
3
|
-
export class Text extends View {
|
|
4
|
-
text;
|
|
5
|
-
wrap;
|
|
6
|
-
constructor(text, wrap) {
|
|
7
|
-
super();
|
|
8
|
-
this.text = text;
|
|
9
|
-
this.wrap = wrap;
|
|
10
|
-
}
|
|
11
|
-
measureContent(maxW, maxH) {
|
|
12
|
-
if (!this.wrap) {
|
|
13
|
-
const w = Math.min(maxW, displayWidth(this.text));
|
|
14
|
-
return { w, h: 1 };
|
|
15
|
-
}
|
|
16
|
-
// Wrapped text measurement
|
|
17
|
-
const lines = this.wrapText(maxW);
|
|
18
|
-
const height = Math.min(maxH, lines.length);
|
|
19
|
-
let width = 0;
|
|
20
|
-
for (let i = 0; i < height; i++) {
|
|
21
|
-
width = Math.max(width, Math.min(maxW, displayWidth(lines[i])));
|
|
22
|
-
}
|
|
23
|
-
return { w: width, h: height };
|
|
24
|
-
}
|
|
25
|
-
renderContent(s, pal, rect) {
|
|
26
|
-
const id = pal.id();
|
|
27
|
-
if (this.wrap) {
|
|
28
|
-
// Use wrapping logic for rendering
|
|
29
|
-
const lines = this.wrapText(rect.w);
|
|
30
|
-
for (let i = 0; i < Math.min(lines.length, rect.h); i++) {
|
|
31
|
-
const line = lines[i];
|
|
32
|
-
if (line.length > 0) {
|
|
33
|
-
s.drawText(rect.x, rect.y + i, line, id, rect.w);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
s.drawText(rect.x, rect.y, this.text, id, rect.w);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
wrapText(maxWidth) {
|
|
42
|
-
if (maxWidth <= 0)
|
|
43
|
-
return [""];
|
|
44
|
-
if (!this.text)
|
|
45
|
-
return [""];
|
|
46
|
-
const lines = this.text.split("\n");
|
|
47
|
-
const result = [];
|
|
48
|
-
for (const line of lines) {
|
|
49
|
-
if (line.length === 0) {
|
|
50
|
-
result.push("");
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
const words = line.split(" ");
|
|
54
|
-
let currentLine = "";
|
|
55
|
-
for (const word of words) {
|
|
56
|
-
const testLine = currentLine + (currentLine ? " " : "") + word;
|
|
57
|
-
if (displayWidth(testLine) <= maxWidth) {
|
|
58
|
-
currentLine = testLine;
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
if (currentLine) {
|
|
62
|
-
result.push(currentLine);
|
|
63
|
-
currentLine = word;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
// Single word longer than maxWidth
|
|
67
|
-
result.push(word.slice(0, maxWidth));
|
|
68
|
-
currentLine = word.slice(maxWidth);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (currentLine) {
|
|
73
|
-
result.push(currentLine);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return result.length > 0 ? result : [""];
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=text.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/ui/primitives/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
-
import type { Rect } from "../core/geometry.js";
|
|
3
|
-
import { View } from "../core/view.js";
|
|
4
|
-
export type WrappingOptions = {
|
|
5
|
-
wordWrap?: boolean;
|
|
6
|
-
breakWords?: boolean;
|
|
7
|
-
};
|
|
8
|
-
export declare class WrappedText extends View {
|
|
9
|
-
readonly text: string;
|
|
10
|
-
readonly options: WrappingOptions;
|
|
11
|
-
constructor(text: string, options?: WrappingOptions);
|
|
12
|
-
/**
|
|
13
|
-
* Split text into lines, respecting wrapping rules
|
|
14
|
-
*/
|
|
15
|
-
private wrapText;
|
|
16
|
-
/**
|
|
17
|
-
* Wrap a line by word boundaries
|
|
18
|
-
*/
|
|
19
|
-
private wrapLineByWords;
|
|
20
|
-
/**
|
|
21
|
-
* Wrap a line by character boundaries
|
|
22
|
-
*/
|
|
23
|
-
private wrapLineByCharacters;
|
|
24
|
-
protected measureContent(maxW: number, maxH: number): {
|
|
25
|
-
w: number;
|
|
26
|
-
h: number;
|
|
27
|
-
};
|
|
28
|
-
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=wrapped-text.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wrapped-text.d.ts","sourceRoot":"","sources":["../../../src/ui/primitives/wrapped-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,qBAAa,WAAY,SAAQ,IAAI;IAEjC,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,OAAO,EAAE,eAAe;gBADxB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB;IAKxC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAgChB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0CvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAQ9E,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;CAWpE"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { View } from "../core/view.js";
|
|
2
|
-
import { displayWidth, sliceByWidth } from "../../render/measure.js";
|
|
3
|
-
export class WrappedText extends View {
|
|
4
|
-
text;
|
|
5
|
-
options;
|
|
6
|
-
constructor(text, options = {}) {
|
|
7
|
-
super();
|
|
8
|
-
this.text = text;
|
|
9
|
-
this.options = options;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Split text into lines, respecting wrapping rules
|
|
13
|
-
*/
|
|
14
|
-
wrapText(maxWidth) {
|
|
15
|
-
if (maxWidth <= 0)
|
|
16
|
-
return [""];
|
|
17
|
-
if (!this.text)
|
|
18
|
-
return [];
|
|
19
|
-
const { wordWrap = true, breakWords = false } = this.options;
|
|
20
|
-
// First split on explicit line breaks
|
|
21
|
-
const inputLines = this.text.split("\n");
|
|
22
|
-
const wrappedLines = [];
|
|
23
|
-
for (const line of inputLines) {
|
|
24
|
-
if (line.length === 0) {
|
|
25
|
-
wrappedLines.push("");
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
if (line.length <= maxWidth) {
|
|
29
|
-
wrappedLines.push(line);
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
// Line needs wrapping
|
|
33
|
-
if (wordWrap) {
|
|
34
|
-
this.wrapLineByWords(line, maxWidth, breakWords, wrappedLines);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
this.wrapLineByCharacters(line, maxWidth, wrappedLines);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return wrappedLines;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Wrap a line by word boundaries
|
|
44
|
-
*/
|
|
45
|
-
wrapLineByWords(line, maxWidth, breakWords, output) {
|
|
46
|
-
const words = line.split(/(\s+)/); // Keep whitespace in results
|
|
47
|
-
let currentLine = "";
|
|
48
|
-
for (const word of words) {
|
|
49
|
-
// Skip empty strings
|
|
50
|
-
if (word.length === 0)
|
|
51
|
-
continue;
|
|
52
|
-
// If this is whitespace and we're at the start of a line, skip it
|
|
53
|
-
if (/^\s+$/.test(word) && currentLine.length === 0)
|
|
54
|
-
continue;
|
|
55
|
-
// If adding this word would exceed width
|
|
56
|
-
if (displayWidth(currentLine + word) > maxWidth) {
|
|
57
|
-
// If we have content on current line, save it and start new line
|
|
58
|
-
if (currentLine.length > 0) {
|
|
59
|
-
output.push(currentLine.trimEnd());
|
|
60
|
-
currentLine = "";
|
|
61
|
-
}
|
|
62
|
-
// Handle long words
|
|
63
|
-
if (displayWidth(word.trim()) > maxWidth) {
|
|
64
|
-
if (breakWords) {
|
|
65
|
-
this.wrapLineByCharacters(word.trim(), maxWidth, output);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
// Don't break the word, just put it on its own line (may overflow)
|
|
69
|
-
output.push(word.trim());
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
else if (word.trim().length > 0) {
|
|
73
|
-
// Start new line with this word (skip leading whitespace)
|
|
74
|
-
currentLine = word.trim();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
currentLine += word;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// Add remaining content
|
|
82
|
-
if (currentLine.length > 0) {
|
|
83
|
-
output.push(currentLine.trimEnd());
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Wrap a line by character boundaries
|
|
88
|
-
*/
|
|
89
|
-
wrapLineByCharacters(line, maxWidth, output) {
|
|
90
|
-
let rest = line;
|
|
91
|
-
while (rest.length > 0) {
|
|
92
|
-
const { text } = sliceByWidth(rest, maxWidth);
|
|
93
|
-
if (text.length === 0)
|
|
94
|
-
break;
|
|
95
|
-
output.push(text);
|
|
96
|
-
rest = rest.slice(text.length);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
measureContent(maxW, maxH) {
|
|
100
|
-
const lines = this.wrapText(maxW);
|
|
101
|
-
const h = Math.min(maxH, Math.max(1, lines.length));
|
|
102
|
-
// WrappedText is greedy horizontally - takes full available width when content exists
|
|
103
|
-
const w = maxW;
|
|
104
|
-
return { w, h };
|
|
105
|
-
}
|
|
106
|
-
renderContent(s, pal, rect) {
|
|
107
|
-
const lines = this.wrapText(rect.w);
|
|
108
|
-
const styleId = pal.id();
|
|
109
|
-
for (let i = 0; i < Math.min(lines.length, rect.h); i++) {
|
|
110
|
-
const line = lines[i];
|
|
111
|
-
if (line.length > 0) {
|
|
112
|
-
s.drawText(rect.x, rect.y + i, line, styleId, rect.w);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=wrapped-text.js.map
|