@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 @@
|
|
|
1
|
+
{"version":3,"file":"hstack.js","sourceRoot":"","sources":["../../../src/ui/containers/hstack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,OAAO,MAAO,SAAQ,IAAI;IAEnB;IACA;IACA;IAHX,YACW,QAAgB,EAChB,UAAU,CAAC,EACX,QAAgB,QAAQ;QAEjC,KAAK,EAAE,CAAA;QAJE,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAAI;QACX,UAAK,GAAL,KAAK,CAAmB;IAGnC,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC1C,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CACnF,CAAA;QACD,OAAO,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC/E,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC1C,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CACnF,CAAA;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1F,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect, VAlign, HAlign } from "../core/geometry.js";
|
|
4
|
+
export declare class Scroll extends View {
|
|
5
|
+
readonly child: View;
|
|
6
|
+
readonly opts: {
|
|
7
|
+
axis?: "vertical" | "horizontal";
|
|
8
|
+
offset?: number;
|
|
9
|
+
align?: VAlign | HAlign;
|
|
10
|
+
};
|
|
11
|
+
/** Duck-typed brand so helpers can detect Scroll without imports/cycles */
|
|
12
|
+
readonly __isScroll = true;
|
|
13
|
+
private _fullW;
|
|
14
|
+
private _fullH;
|
|
15
|
+
constructor(child: View, opts?: {
|
|
16
|
+
axis?: "vertical" | "horizontal";
|
|
17
|
+
offset?: number;
|
|
18
|
+
align?: VAlign | HAlign;
|
|
19
|
+
});
|
|
20
|
+
/** Get the maximum valid scroll offset for this content */
|
|
21
|
+
getMaxOffset(viewportW: number, viewportH: number): number;
|
|
22
|
+
protected measureContent(maxW: number, maxH: number): {
|
|
23
|
+
w: number;
|
|
24
|
+
h: number;
|
|
25
|
+
};
|
|
26
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=scroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/ui/containers/scroll.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,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG/D,qBAAa,MAAO,SAAQ,IAAI;IAQ5B,QAAQ,CAAC,KAAK,EAAE,IAAI;IACpB,QAAQ,CAAC,IAAI,EAAE;QACb,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;QAChC,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KACxB;IAZH,2EAA2E;IAC3E,SAAgB,UAAU,QAAO;IAEjC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,MAAM,CAAI;gBAGP,KAAK,EAAE,IAAI,EACX,IAAI,GAAE;QACb,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;QAChC,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KACnB;IAKR,2DAA2D;IAC3D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAW1D,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;CAsD7D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { View } from "../core/view.js";
|
|
2
|
+
// Scroll wrapper: viewport with clean SwiftUI-like semantics
|
|
3
|
+
export class Scroll extends View {
|
|
4
|
+
child;
|
|
5
|
+
opts;
|
|
6
|
+
/** Duck-typed brand so helpers can detect Scroll without imports/cycles */
|
|
7
|
+
__isScroll = true;
|
|
8
|
+
_fullW = 0;
|
|
9
|
+
_fullH = 0;
|
|
10
|
+
constructor(child, opts = {}) {
|
|
11
|
+
super();
|
|
12
|
+
this.child = child;
|
|
13
|
+
this.opts = opts;
|
|
14
|
+
}
|
|
15
|
+
/** Get the maximum valid scroll offset for this content */
|
|
16
|
+
getMaxOffset(viewportW, viewportH) {
|
|
17
|
+
const axis = this.opts.axis ?? "vertical";
|
|
18
|
+
if (axis === "vertical") {
|
|
19
|
+
const full = this.child.measure(viewportW, Number.MAX_SAFE_INTEGER);
|
|
20
|
+
return Math.max(0, full.h - viewportH);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const full = this.child.measure(Number.MAX_SAFE_INTEGER, viewportH);
|
|
24
|
+
return Math.max(0, full.w - viewportW);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
measureContent(maxW, maxH) {
|
|
28
|
+
const axis = this.opts.axis ?? "vertical";
|
|
29
|
+
if (axis === "vertical") {
|
|
30
|
+
const full = this.child.measure(maxW, Number.MAX_SAFE_INTEGER);
|
|
31
|
+
this._fullW = full.w;
|
|
32
|
+
this._fullH = full.h;
|
|
33
|
+
// Greedy: take all available space (viewport semantics)
|
|
34
|
+
return { w: Math.min(maxW, full.w), h: maxH };
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const full = this.child.measure(Number.MAX_SAFE_INTEGER, maxH);
|
|
38
|
+
this._fullW = full.w;
|
|
39
|
+
this._fullH = full.h;
|
|
40
|
+
return { w: maxW, h: Math.min(maxH, full.h) };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
renderContent(s, pal, rect) {
|
|
44
|
+
const axis = this.opts.axis ?? "vertical";
|
|
45
|
+
const align = this.opts.align ?? "top";
|
|
46
|
+
const rawOffset = this.opts.offset ?? 0;
|
|
47
|
+
// Ensure we have measured the child content
|
|
48
|
+
if (this._fullH === 0 && this._fullW === 0) {
|
|
49
|
+
this.measureContent(rect.w, rect.h);
|
|
50
|
+
// measureContent sets _fullH and _fullW as side effects
|
|
51
|
+
}
|
|
52
|
+
if (axis === "vertical") {
|
|
53
|
+
const overflow = Math.max(0, this._fullH - rect.h);
|
|
54
|
+
// Clamp offset to valid range [0, overflow]
|
|
55
|
+
const offset = Math.max(0, Math.min(overflow, rawOffset));
|
|
56
|
+
let start;
|
|
57
|
+
if (align === "bottom") {
|
|
58
|
+
// Bottom-pinned: offset 0 shows last lines, positive offset scrolls up from bottom
|
|
59
|
+
if (overflow === 0) {
|
|
60
|
+
// Content fits: bottom-align by pushing content down
|
|
61
|
+
start = -(rect.h - this._fullH);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Content overflows: start from bottom minus offset
|
|
65
|
+
start = overflow - offset;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// Top-aligned: traditional scrolling
|
|
70
|
+
start = offset;
|
|
71
|
+
}
|
|
72
|
+
const childRect = { x: rect.x, y: rect.y - start, w: rect.w, h: this._fullH };
|
|
73
|
+
s.withClip(rect.x, rect.y, rect.w, rect.h, () => this.child.render(s, pal, childRect));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const overflow = Math.max(0, this._fullW - rect.w);
|
|
77
|
+
// Clamp offset to valid range [0, overflow]
|
|
78
|
+
const offset = Math.max(0, Math.min(overflow, rawOffset));
|
|
79
|
+
let start;
|
|
80
|
+
if (align === "trailing") {
|
|
81
|
+
// Right-pinned: similar logic for horizontal
|
|
82
|
+
if (overflow === 0) {
|
|
83
|
+
start = -(rect.w - this._fullW);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
start = overflow - offset;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
start = offset;
|
|
91
|
+
}
|
|
92
|
+
const childRect = { x: rect.x - start, y: rect.y, w: this._fullW, h: rect.h };
|
|
93
|
+
s.withClip(rect.x, rect.y, rect.w, rect.h, () => this.child.render(s, pal, childRect));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=scroll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/ui/containers/scroll.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { View } from "../core/view.js";
|
|
2
|
+
export declare function isFillForAxis(node: View, axis: "horizontal" | "vertical"): boolean;
|
|
3
|
+
export declare function mainSize(axis: "horizontal" | "vertical", size: {
|
|
4
|
+
w: number;
|
|
5
|
+
h: number;
|
|
6
|
+
}): number;
|
|
7
|
+
/** Return the flex base size for a node on an axis, or null if fixed. */
|
|
8
|
+
export declare function flexBaseForAxis(node: View, axis: "horizontal" | "vertical", measured: {
|
|
9
|
+
w: number;
|
|
10
|
+
h: number;
|
|
11
|
+
}): number | null;
|
|
12
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/containers/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAG3C,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,CAElF;AAGD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,EAAE,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEhG;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,YAAY,GAAG,UAAU,EAC/B,QAAQ,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC,MAAM,GAAG,IAAI,CAQf"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Check if a node is a Fill wrapper for a given axis
|
|
2
|
+
export function isFillForAxis(node, axis) {
|
|
3
|
+
return node.constructor.name === "Fill" && node.axis === axis;
|
|
4
|
+
}
|
|
5
|
+
// Get the main-axis size from a measured size
|
|
6
|
+
export function mainSize(axis, size) {
|
|
7
|
+
return axis === "horizontal" ? size.w : size.h;
|
|
8
|
+
}
|
|
9
|
+
/** Return the flex base size for a node on an axis, or null if fixed. */
|
|
10
|
+
export function flexBaseForAxis(node, axis, measured) {
|
|
11
|
+
// Scroll should be flexible but with a *zero* base so siblings get their fixed space first.
|
|
12
|
+
if (node.__isScroll)
|
|
13
|
+
return 0;
|
|
14
|
+
// Fill is flexible with intrinsic base equal to its measured main size.
|
|
15
|
+
if (isFillForAxis(node, axis))
|
|
16
|
+
return mainSize(axis, measured);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/ui/containers/shared.ts"],"names":[],"mappings":"AAGA,qDAAqD;AACrD,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,IAA+B;IACvE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,IAAK,IAAY,CAAC,IAAI,KAAK,IAAI,CAAA;AACxE,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,QAAQ,CAAC,IAA+B,EAAE,IAA8B;IACtF,OAAO,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,eAAe,CAC7B,IAAU,EACV,IAA+B,EAC/B,QAAkC;IAElC,4FAA4F;IAC5F,IAAK,IAAY,CAAC,UAAU;QAAE,OAAO,CAAC,CAAA;IAEtC,wEAAwE;IACxE,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAE9D,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
+
import { View } from "../core/view.js";
|
|
3
|
+
import type { Rect, HAlign } from "../core/geometry.js";
|
|
4
|
+
export declare class VStack extends View {
|
|
5
|
+
readonly children: View[];
|
|
6
|
+
readonly spacing: number;
|
|
7
|
+
readonly align: HAlign;
|
|
8
|
+
constructor(children: View[], spacing?: number, align?: HAlign);
|
|
9
|
+
protected measureContent(maxW: number, maxH: number): import("../../layout/linearStack.js").Size;
|
|
10
|
+
protected renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=vstack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vstack.d.ts","sourceRoot":"","sources":["../../../src/ui/containers/vstack.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,EAAE,MAAM,qBAAqB,CAAA;AAKvD,qBAAa,MAAO,SAAQ,IAAI;IAE5B,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE;IACzB,QAAQ,CAAC,OAAO;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAFb,QAAQ,EAAE,IAAI,EAAE,EAChB,OAAO,SAAI,EACX,KAAK,GAAE,MAAkB;IAKpC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAQnD,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;CAS7D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { View } from "../core/view.js";
|
|
2
|
+
import { measureLinear, layoutLinear } from "../../layout/linearStack.js";
|
|
3
|
+
import { Spacer } from "../primitives/spacer.js";
|
|
4
|
+
import { flexBaseForAxis } from "./shared.js";
|
|
5
|
+
export class VStack extends View {
|
|
6
|
+
children;
|
|
7
|
+
spacing;
|
|
8
|
+
align;
|
|
9
|
+
constructor(children, spacing = 0, align = "leading") {
|
|
10
|
+
super();
|
|
11
|
+
this.children = children;
|
|
12
|
+
this.spacing = spacing;
|
|
13
|
+
this.align = align;
|
|
14
|
+
}
|
|
15
|
+
measureContent(maxW, maxH) {
|
|
16
|
+
const sizes = this.children.map((c) => c.measure(maxW, maxH));
|
|
17
|
+
const flexBase = this.children.map((c, i) => c instanceof Spacer ? c.minLength | 0 : flexBaseForAxis(c, "vertical", sizes[i]));
|
|
18
|
+
return measureLinear("vertical", maxW, maxH, this.spacing, sizes, flexBase);
|
|
19
|
+
}
|
|
20
|
+
renderContent(s, pal, rect) {
|
|
21
|
+
const sizes = this.children.map((c) => c.measure(rect.w, rect.h));
|
|
22
|
+
const flexBase = this.children.map((c, i) => c instanceof Spacer ? c.minLength | 0 : flexBaseForAxis(c, "vertical", sizes[i]));
|
|
23
|
+
const rects = layoutLinear("vertical", rect, this.spacing, this.align, sizes, flexBase);
|
|
24
|
+
for (let i = 0; i < this.children.length; i++)
|
|
25
|
+
this.children[i].render(s, pal, rects[i]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=vstack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vstack.js","sourceRoot":"","sources":["../../../src/ui/containers/vstack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,OAAO,MAAO,SAAQ,IAAI;IAEnB;IACA;IACA;IAHX,YACW,QAAgB,EAChB,UAAU,CAAC,EACX,QAAgB,SAAS;QAElC,KAAK,EAAE,CAAA;QAJE,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAAI;QACX,UAAK,GAAL,KAAK,CAAoB;IAGpC,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC1C,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CACjF,CAAA;QACD,OAAO,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC7E,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC1C,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CACjF,CAAA;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAEvF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1F,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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 declare class ZStack extends View {
|
|
5
|
+
readonly children: View[];
|
|
6
|
+
readonly alignment: Align2D;
|
|
7
|
+
constructor(children: View[], alignment?: Align2D);
|
|
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=zstack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zstack.d.ts","sourceRoot":"","sources":["../../../src/ui/containers/zstack.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;AAGxD,qBAAa,MAAO,SAAQ,IAAI;IAE5B,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO;gBADlB,QAAQ,EAAE,IAAI,EAAE,EAChB,SAAS,GAAE,OAAsC;IAK5D,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;CAY7D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { View } from "../core/view.js";
|
|
2
|
+
// ZStack (overlay)
|
|
3
|
+
export class ZStack extends View {
|
|
4
|
+
children;
|
|
5
|
+
alignment;
|
|
6
|
+
constructor(children, alignment = { h: "center", v: "center" }) {
|
|
7
|
+
super();
|
|
8
|
+
this.children = children;
|
|
9
|
+
this.alignment = alignment;
|
|
10
|
+
}
|
|
11
|
+
measureContent(maxW, maxH) {
|
|
12
|
+
let w = 0, h = 0;
|
|
13
|
+
for (const c of this.children) {
|
|
14
|
+
const m = c.measure(maxW, maxH);
|
|
15
|
+
w = Math.max(w, m.w);
|
|
16
|
+
h = Math.max(h, m.h);
|
|
17
|
+
}
|
|
18
|
+
return { w: Math.min(maxW, w), h: Math.min(maxH, h) };
|
|
19
|
+
}
|
|
20
|
+
renderContent(s, pal, rect) {
|
|
21
|
+
for (const c of this.children) {
|
|
22
|
+
const m = c.measure(rect.w, rect.h);
|
|
23
|
+
let x = rect.x, y = rect.y;
|
|
24
|
+
if (this.alignment.h === "center")
|
|
25
|
+
x += Math.floor((rect.w - m.w) / 2);
|
|
26
|
+
else if (this.alignment.h === "trailing")
|
|
27
|
+
x += Math.max(0, rect.w - m.w);
|
|
28
|
+
if (this.alignment.v === "center")
|
|
29
|
+
y += Math.floor((rect.h - m.h) / 2);
|
|
30
|
+
else if (this.alignment.v === "bottom")
|
|
31
|
+
y += Math.max(0, rect.h - m.h);
|
|
32
|
+
c.render(s, pal, { x, y, w: Math.min(rect.w, m.w), h: Math.min(rect.h, m.h) });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=zstack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zstack.js","sourceRoot":"","sources":["../../../src/ui/containers/zstack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,mBAAmB;AACnB,MAAM,OAAO,MAAO,SAAQ,IAAI;IAEnB;IACA;IAFX,YACW,QAAgB,EAChB,YAAqB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE;QAE1D,KAAK,EAAE,CAAA;QAHE,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAwC;IAG5D,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,IAAY;QACjD,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,GAAG,CAAC,CAAA;QACP,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC/B,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YACpB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;IACvD,CAAC;IAES,aAAa,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QAC1D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;YACnC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,EACZ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;YACZ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,QAAQ;gBAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;iBACjE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,UAAU;gBAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACxE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,QAAQ;gBAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;iBACjE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,QAAQ;gBAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACtE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAChF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Rect } from "./geometry.js";
|
|
2
|
+
export type ViewId = string;
|
|
3
|
+
export type { Rect };
|
|
4
|
+
export type InputGeom = {
|
|
5
|
+
firstW: number;
|
|
6
|
+
wrapW: number;
|
|
7
|
+
xFirst: number;
|
|
8
|
+
xOther: number;
|
|
9
|
+
};
|
|
10
|
+
declare class GeometryStoreImpl {
|
|
11
|
+
private frameNo;
|
|
12
|
+
private rects;
|
|
13
|
+
private inputs;
|
|
14
|
+
beginFrame(frameNo?: number): void;
|
|
15
|
+
endFrame(): void;
|
|
16
|
+
setRect(id: ViewId, rect: Rect): void;
|
|
17
|
+
setInputGeom(id: ViewId, g: InputGeom): void;
|
|
18
|
+
getRect(id: ViewId): Rect | undefined;
|
|
19
|
+
getInputGeom(id: ViewId): InputGeom | undefined;
|
|
20
|
+
}
|
|
21
|
+
export declare const geometryStore: GeometryStoreImpl;
|
|
22
|
+
//# sourceMappingURL=geometry-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry-store.d.ts","sourceRoot":"","sources":["../../../src/ui/core/geometry-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEzC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAC3B,YAAY,EAAE,IAAI,EAAE,CAAA;AACpB,MAAM,MAAM,SAAS,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzF,cAAM,iBAAiB;IACrB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAA+B;IAE7C,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM;IAO3B,QAAQ;IAIR,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IAI9B,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS;IAIrC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIrC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;CAGhD;AAED,eAAO,MAAM,aAAa,mBAA0B,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* geometry-store.ts — last-known layout/geometry store keyed by ViewId */
|
|
2
|
+
class GeometryStoreImpl {
|
|
3
|
+
frameNo = 0;
|
|
4
|
+
rects = new Map();
|
|
5
|
+
inputs = new Map();
|
|
6
|
+
beginFrame(frameNo) {
|
|
7
|
+
// Clear for the new render pass; consumers will read after endFrame
|
|
8
|
+
this.frameNo = frameNo ?? this.frameNo + 1;
|
|
9
|
+
this.rects.clear();
|
|
10
|
+
this.inputs.clear();
|
|
11
|
+
}
|
|
12
|
+
endFrame() {
|
|
13
|
+
// no-op for now; snapshot already in maps
|
|
14
|
+
}
|
|
15
|
+
setRect(id, rect) {
|
|
16
|
+
this.rects.set(id, rect);
|
|
17
|
+
}
|
|
18
|
+
setInputGeom(id, g) {
|
|
19
|
+
this.inputs.set(id, g);
|
|
20
|
+
}
|
|
21
|
+
getRect(id) {
|
|
22
|
+
return this.rects.get(id);
|
|
23
|
+
}
|
|
24
|
+
getInputGeom(id) {
|
|
25
|
+
return this.inputs.get(id);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export const geometryStore = new GeometryStoreImpl();
|
|
29
|
+
//# sourceMappingURL=geometry-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry-store.js","sourceRoot":"","sources":["../../../src/ui/core/geometry-store.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAQ1E,MAAM,iBAAiB;IACb,OAAO,GAAG,CAAC,CAAA;IACX,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAA;IAC/B,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAA;IAE7C,UAAU,CAAC,OAAgB;QACzB,oEAAoE;QACpE,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;QAC1C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED,QAAQ;QACN,0CAA0C;IAC5C,CAAC;IAED,OAAO,CAAC,EAAU,EAAE,IAAU;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,YAAY,CAAC,EAAU,EAAE,CAAY;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAE,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type Rect = {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
w: number;
|
|
5
|
+
h: number;
|
|
6
|
+
};
|
|
7
|
+
export type HAlign = "leading" | "center" | "trailing";
|
|
8
|
+
export type VAlign = "top" | "center" | "bottom";
|
|
9
|
+
export type Align2D = {
|
|
10
|
+
h: HAlign;
|
|
11
|
+
v: VAlign;
|
|
12
|
+
};
|
|
13
|
+
export declare const Align: {
|
|
14
|
+
leading: HAlign;
|
|
15
|
+
center: HAlign;
|
|
16
|
+
trailing: HAlign;
|
|
17
|
+
top: VAlign;
|
|
18
|
+
bottom: VAlign;
|
|
19
|
+
topLeading: Align2D;
|
|
20
|
+
topTrailing: Align2D;
|
|
21
|
+
bottomLeading: Align2D;
|
|
22
|
+
bottomTrailing: Align2D;
|
|
23
|
+
center2D: Align2D;
|
|
24
|
+
};
|
|
25
|
+
export type FrameSpec = {
|
|
26
|
+
width?: number;
|
|
27
|
+
height?: number;
|
|
28
|
+
minWidth?: number;
|
|
29
|
+
maxWidth?: number;
|
|
30
|
+
minHeight?: number;
|
|
31
|
+
maxHeight?: number;
|
|
32
|
+
alignment?: Align2D;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../src/ui/core/geometry.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,IAAI,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjE,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;AACtD,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAChD,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9C,eAAO,MAAM,KAAK;aACM,MAAM;YACR,MAAM;cACF,MAAM;SAChB,MAAM;YACA,MAAM;gBACgB,OAAO;iBACL,OAAO;mBACH,OAAO;oBACL,OAAO;cACf,OAAO;CAClD,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,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,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Basic geometry types and alignments
|
|
2
|
+
export const Align = {
|
|
3
|
+
leading: "leading",
|
|
4
|
+
center: "center",
|
|
5
|
+
trailing: "trailing",
|
|
6
|
+
top: "top",
|
|
7
|
+
bottom: "bottom",
|
|
8
|
+
topLeading: { h: "leading", v: "top" },
|
|
9
|
+
topTrailing: { h: "trailing", v: "top" },
|
|
10
|
+
bottomLeading: { h: "leading", v: "bottom" },
|
|
11
|
+
bottomTrailing: { h: "trailing", v: "bottom" },
|
|
12
|
+
center2D: { h: "center", v: "center" },
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../../src/ui/core/geometry.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAQtC,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,OAAO,EAAE,SAAmB;IAC5B,MAAM,EAAE,QAAkB;IAC1B,QAAQ,EAAE,UAAoB;IAC9B,GAAG,EAAE,KAAe;IACpB,MAAM,EAAE,QAAkB;IAC1B,UAAU,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAa;IACjD,WAAW,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAa;IACnD,aAAa,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAa;IACvD,cAAc,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAa;IACzD,QAAQ,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAa;CAClD,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Palette, Surface } from "../../render/surface.js";
|
|
2
|
+
import type { Rect } from "./geometry.js";
|
|
3
|
+
export interface View {
|
|
4
|
+
measure(maxW: number, maxH: number): {
|
|
5
|
+
w: number;
|
|
6
|
+
h: number;
|
|
7
|
+
};
|
|
8
|
+
render(s: Surface, pal: Palette, rect: Rect): void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Abstract base class providing a minimal View foundation.
|
|
12
|
+
* Subclasses implement measureContent/renderContent for their specific behavior.
|
|
13
|
+
* All styling, padding, and frame logic has been moved to modifier classes.
|
|
14
|
+
*/
|
|
15
|
+
export declare abstract class View implements View {
|
|
16
|
+
protected _id?: string;
|
|
17
|
+
/** Attach a stable id to this view for geometry tracking. */
|
|
18
|
+
id(id: string): View;
|
|
19
|
+
protected abstract measureContent(maxW: number, maxH: number): {
|
|
20
|
+
w: number;
|
|
21
|
+
h: number;
|
|
22
|
+
};
|
|
23
|
+
protected abstract renderContent(s: Surface, pal: Palette, rect: Rect): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/ui/core/view.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAGzC,MAAM,WAAW,IAAI;IACnB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7D,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CACnD;AAED;;;;GAIG;AACH,8BAAsB,IAAK,YAAW,IAAI;IACxC,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IAEtB,6DAA6D;IAC7D,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAsBpB,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IACvF,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;CAC7E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/* view.ts — Core View class (renamed from CoreViewBase)
|
|
2
|
+
*
|
|
3
|
+
* This module defines the fundamental UI View class with minimal base functionality.
|
|
4
|
+
* It has NO imports of concrete modifiers to avoid circular dependencies.
|
|
5
|
+
*/
|
|
6
|
+
import { geometryStore } from "./geometry-store.js";
|
|
7
|
+
/**
|
|
8
|
+
* Abstract base class providing a minimal View foundation.
|
|
9
|
+
* Subclasses implement measureContent/renderContent for their specific behavior.
|
|
10
|
+
* All styling, padding, and frame logic has been moved to modifier classes.
|
|
11
|
+
*/
|
|
12
|
+
export class View {
|
|
13
|
+
_id;
|
|
14
|
+
/** Attach a stable id to this view for geometry tracking. */
|
|
15
|
+
id(id) {
|
|
16
|
+
const c = Object.create(Object.getPrototypeOf(this));
|
|
17
|
+
// copy own fields
|
|
18
|
+
for (const k of Object.keys(this))
|
|
19
|
+
c[k] = this[k];
|
|
20
|
+
c._id = id;
|
|
21
|
+
return c;
|
|
22
|
+
}
|
|
23
|
+
measure(maxW, maxH) {
|
|
24
|
+
return this.measureContent(maxW, maxH);
|
|
25
|
+
}
|
|
26
|
+
render(s, pal, rect) {
|
|
27
|
+
// Record geometry if id is present
|
|
28
|
+
if (this._id) {
|
|
29
|
+
geometryStore.setRect(this._id, rect);
|
|
30
|
+
}
|
|
31
|
+
this.renderContent(s, pal, rect);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/ui/core/view.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAOnD;;;;GAIG;AACH,MAAM,OAAgB,IAAI;IACd,GAAG,CAAS;IAEtB,6DAA6D;IAC7D,EAAE,CAAC,EAAU;QACX,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAS,CAAA;QAC5D,kBAAkB;QAClB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAsB;YAAG,CAAS,CAAC,CAAC,CAAC,GAAI,IAAY,CAAC,CAAC,CAAC,CAAA;QACxF,CAAC,CAAC,GAAG,GAAG,EAAE,CAAA;QACV,OAAO,CAAC,CAAA;IACV,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,IAAY;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,CAAC,CAAU,EAAE,GAAY,EAAE,IAAU;QACzC,mCAAmC;QACnC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACvC,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;CAKF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import "./install.js";
|
|
2
|
+
export * from "./core/geometry.js";
|
|
3
|
+
export * from "./primitives/text.js";
|
|
4
|
+
export * from "./primitives/rectangle.js";
|
|
5
|
+
export * from "./primitives/spacer.js";
|
|
6
|
+
export * from "./primitives/wrapped-text.js";
|
|
7
|
+
export * from "./containers/hstack.js";
|
|
8
|
+
export * from "./containers/vstack.js";
|
|
9
|
+
export * from "./containers/zstack.js";
|
|
10
|
+
export * from "./containers/scroll.js";
|
|
11
|
+
export * from "./containers/canvas.js";
|
|
12
|
+
export * from "./containers/geometry-reader.js";
|
|
13
|
+
export * from "./modifiers/border.js";
|
|
14
|
+
export * from "./modifiers/offset.js";
|
|
15
|
+
export * from "./modifiers/fill.js";
|
|
16
|
+
export * from "./modifiers/padding.js";
|
|
17
|
+
export { Frame, type FrameSpec as ModifierFrameSpec } from "./modifiers/frame.js";
|
|
18
|
+
export * from "./modifiers/styled.js";
|
|
19
|
+
export { ShinyText } from "./shinytext.js";
|
|
20
|
+
export { TextInput, TextInputState, editTextInput, type TextInputStateLike, type TextInputStatePlain, type TextInputGeom, type TextInputOptions, } from "./textinput.js";
|
|
21
|
+
export { Markdown, type MarkdownOptions } from "./markdown.js";
|
|
22
|
+
import { View as ViewClass } from "./core/view.js";
|
|
23
|
+
import { ViewConstructors } from "./view-constructors.js";
|
|
24
|
+
declare module "./core/view.js" {
|
|
25
|
+
namespace View {
|
|
26
|
+
const text: typeof ViewConstructors.text;
|
|
27
|
+
const wrappedText: typeof ViewConstructors.wrappedText;
|
|
28
|
+
const rect: typeof ViewConstructors.rect;
|
|
29
|
+
const spacer: typeof ViewConstructors.spacer;
|
|
30
|
+
const hstack: typeof ViewConstructors.hstack;
|
|
31
|
+
const vstack: typeof ViewConstructors.vstack;
|
|
32
|
+
const zstack: typeof ViewConstructors.zstack;
|
|
33
|
+
const scroll: typeof ViewConstructors.scroll;
|
|
34
|
+
const canvas: typeof ViewConstructors.canvas;
|
|
35
|
+
const geometryReader: typeof ViewConstructors.geometryReader;
|
|
36
|
+
const overlay: typeof ViewConstructors.overlay;
|
|
37
|
+
const textInput: typeof ViewConstructors.textInput;
|
|
38
|
+
const markdown: typeof ViewConstructors.markdown;
|
|
39
|
+
const Colors: typeof ViewConstructors.Colors;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
declare const View: typeof ViewClass & typeof ViewConstructors;
|
|
43
|
+
export { View };
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAGA,OAAO,cAAc,CAAA;AAGrB,cAAc,oBAAoB,CAAA;AAKlC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAG5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAG/C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACjF,cAAc,uBAAuB,CAAA;AAGrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACL,SAAS,EACT,cAAc,EACd,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAG9D,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,IAAI,CAAC;QAEb,MAAM,IAAI,EAAE,OAAO,gBAAgB,CAAC,IAAI,CAAA;QACxC,MAAM,WAAW,EAAE,OAAO,gBAAgB,CAAC,WAAW,CAAA;QACtD,MAAM,IAAI,EAAE,OAAO,gBAAgB,CAAC,IAAI,CAAA;QACxC,MAAM,MAAM,EAAE,OAAO,gBAAgB,CAAC,MAAM,CAAA;QAG5C,MAAM,MAAM,EAAE,OAAO,gBAAgB,CAAC,MAAM,CAAA;QAC5C,MAAM,MAAM,EAAE,OAAO,gBAAgB,CAAC,MAAM,CAAA;QAC5C,MAAM,MAAM,EAAE,OAAO,gBAAgB,CAAC,MAAM,CAAA;QAC5C,MAAM,MAAM,EAAE,OAAO,gBAAgB,CAAC,MAAM,CAAA;QAC5C,MAAM,MAAM,EAAE,OAAO,gBAAgB,CAAC,MAAM,CAAA;QAC5C,MAAM,cAAc,EAAE,OAAO,gBAAgB,CAAC,cAAc,CAAA;QAC5D,MAAM,OAAO,EAAE,OAAO,gBAAgB,CAAC,OAAO,CAAA;QAG9C,MAAM,SAAS,EAAE,OAAO,gBAAgB,CAAC,SAAS,CAAA;QAClD,MAAM,QAAQ,EAAE,OAAO,gBAAgB,CAAC,QAAQ,CAAA;QAGhD,MAAM,MAAM,EAAE,OAAO,gBAAgB,CAAC,MAAM,CAAA;KAC7C;CACF;AAGD,QAAA,MAAM,IAAI,EAAgB,OAAO,SAAS,GAAG,OAAO,gBAAgB,CAAA;AAMpE,OAAO,EAAE,IAAI,EAAE,CAAA"}
|
package/dist/ui/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Single barrel export for the View-centric UI system
|
|
2
|
+
// Install chainable modifiers (side-effect import)
|
|
3
|
+
import "./install.js";
|
|
4
|
+
// Core geometry (types + helpers)
|
|
5
|
+
export * from "./core/geometry.js";
|
|
6
|
+
// View class will be exported at bottom after enhancement
|
|
7
|
+
// Primitives
|
|
8
|
+
export * from "./primitives/text.js";
|
|
9
|
+
export * from "./primitives/rectangle.js";
|
|
10
|
+
export * from "./primitives/spacer.js";
|
|
11
|
+
export * from "./primitives/wrapped-text.js";
|
|
12
|
+
// Containers
|
|
13
|
+
export * from "./containers/hstack.js";
|
|
14
|
+
export * from "./containers/vstack.js";
|
|
15
|
+
export * from "./containers/zstack.js";
|
|
16
|
+
export * from "./containers/scroll.js";
|
|
17
|
+
export * from "./containers/canvas.js";
|
|
18
|
+
export * from "./containers/geometry-reader.js";
|
|
19
|
+
// Modifiers (classes exported, chainers are installed via side effects above)
|
|
20
|
+
export * from "./modifiers/border.js";
|
|
21
|
+
export * from "./modifiers/offset.js";
|
|
22
|
+
export * from "./modifiers/fill.js";
|
|
23
|
+
export * from "./modifiers/padding.js";
|
|
24
|
+
export { Frame } from "./modifiers/frame.js";
|
|
25
|
+
export * from "./modifiers/styled.js";
|
|
26
|
+
// Components & utilities
|
|
27
|
+
export { ShinyText } from "./shinytext.js";
|
|
28
|
+
export { TextInput, TextInputState, editTextInput, } from "./textinput.js";
|
|
29
|
+
export { Markdown } from "./markdown.js";
|
|
30
|
+
// Import View class and constructors
|
|
31
|
+
import { View as ViewClass } from "./core/view.js";
|
|
32
|
+
import { ViewConstructors } from "./view-constructors.js";
|
|
33
|
+
// Install all the constructor methods on the View class
|
|
34
|
+
const View = ViewClass;
|
|
35
|
+
// Install all constructors
|
|
36
|
+
Object.assign(View, ViewConstructors);
|
|
37
|
+
// Export the enhanced View
|
|
38
|
+
export { View };
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,mDAAmD;AACnD,OAAO,cAAc,CAAA;AAErB,kCAAkC;AAClC,cAAc,oBAAoB,CAAA;AAElC,0DAA0D;AAE1D,aAAa;AACb,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAE5C,aAAa;AACb,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAE/C,8EAA8E;AAC9E,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAuC,MAAM,sBAAsB,CAAA;AACjF,cAAc,uBAAuB,CAAA;AAErC,yBAAyB;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACL,SAAS,EACT,cAAc,EACd,aAAa,GAKd,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAwB,MAAM,eAAe,CAAA;AAE9D,qCAAqC;AACrC,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AA6BzD,wDAAwD;AACxD,MAAM,IAAI,GAAG,SAAuD,CAAA;AAEpE,2BAA2B;AAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAErC,2BAA2B;AAC3B,OAAO,EAAE,IAAI,EAAE,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
import type { WrappingOptions } from "./primitives/wrapped-text.js";
|
|
5
|
+
export type TextFragment = {
|
|
6
|
+
text: string;
|
|
7
|
+
style?: StyleSpec;
|
|
8
|
+
};
|
|
9
|
+
export declare class InlineText extends View {
|
|
10
|
+
readonly fragments: TextFragment[];
|
|
11
|
+
readonly options: WrappingOptions;
|
|
12
|
+
constructor(fragments: TextFragment[], options?: WrappingOptions);
|
|
13
|
+
private layout;
|
|
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
|
+
export type ViewInlineTextExt = {
|
|
21
|
+
inline(fragments: TextFragment[], opts?: WrappingOptions): InlineText;
|
|
22
|
+
};
|
|
23
|
+
export declare const viewInlineText: ViewInlineTextExt;
|
|
24
|
+
//# sourceMappingURL=inlinetext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlinetext.d.ts","sourceRoot":"","sources":["../../src/ui/inlinetext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAEnE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAsBD,qBAAa,UAAW,SAAQ,IAAI;IAEhC,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE;IAClC,QAAQ,CAAC,OAAO,EAAE,eAAe;gBADxB,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,GAAE,eAAoB;IAKxC,OAAO,CAAC,MAAM;IAgEd,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;CAe7D;AAGD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,UAAU,CAAA;CACtE,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,iBAI5B,CAAA"}
|