chat-layout 0.0.19 → 0.1.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/README.md CHANGED
@@ -6,10 +6,22 @@ To install dependencies:
6
6
  bun install
7
7
  ```
8
8
 
9
- To run:
9
+ To type-check:
10
10
 
11
11
  ```bash
12
- bun run index.ts
12
+ bun run typecheck
13
+ ```
14
+
15
+ To build distributable files:
16
+
17
+ ```bash
18
+ bun run dist
19
+ ```
20
+
21
+ To build example:
22
+
23
+ ```bash
24
+ bun run example
13
25
  ```
14
26
 
15
27
  This project was created using `bun init` in bun v1.1.37. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
package/index.d.mts ADDED
@@ -0,0 +1,225 @@
1
+ //#region src/types.d.ts
2
+ type DynValue<C extends CanvasRenderingContext2D, T> = T extends Function ? never : T | ((context: C) => T);
3
+ interface RendererOptions {}
4
+ interface RenderFeedback {
5
+ minIdx: number;
6
+ maxIdx: number;
7
+ min: number;
8
+ max: number;
9
+ }
10
+ type Alignment = "left" | "center" | "right";
11
+ interface Context<C extends CanvasRenderingContext2D> {
12
+ graphics: C;
13
+ remainingWidth: number;
14
+ alignment: Alignment;
15
+ reverse: boolean;
16
+ measureNode(node: Node<C>): Box;
17
+ invalidateNode(node: Node<C>): void;
18
+ resolveDynValue<T>(value: DynValue<C, T>): T;
19
+ with<T>(this: Context<C>, cb: (g: C) => T): T;
20
+ }
21
+ interface Box {
22
+ width: number;
23
+ height: number;
24
+ }
25
+ interface HitTest {
26
+ x: number;
27
+ y: number;
28
+ type: "click" | "auxclick" | "hover";
29
+ }
30
+ interface Node<C extends CanvasRenderingContext2D> {
31
+ measure(ctx: Context<C>): Box;
32
+ draw(ctx: Context<C>, x: number, y: number): boolean;
33
+ hittest(ctx: Context<C>, test: HitTest): boolean;
34
+ readonly flex: boolean;
35
+ }
36
+ //#endregion
37
+ //#region src/nodes.d.ts
38
+ declare abstract class Group<C extends CanvasRenderingContext2D> implements Node<C> {
39
+ readonly children: Node<C>[];
40
+ constructor(children: Node<C>[]);
41
+ abstract measure(ctx: Context<C>): Box;
42
+ abstract draw(ctx: Context<C>, x: number, y: number): boolean;
43
+ abstract hittest(ctx: Context<C>, test: HitTest): boolean;
44
+ get flex(): boolean;
45
+ }
46
+ declare class VStack<C extends CanvasRenderingContext2D> extends Group<C> {
47
+ readonly options: {
48
+ gap?: number;
49
+ alignment?: "left" | "center" | "right";
50
+ };
51
+ constructor(children: Node<C>[], options?: {
52
+ gap?: number;
53
+ alignment?: "left" | "center" | "right";
54
+ });
55
+ measure(ctx: Context<C>): Box;
56
+ draw(ctx: Context<C>, x: number, y: number): boolean;
57
+ hittest(ctx: Context<C>, test: HitTest): boolean;
58
+ }
59
+ declare class HStack<C extends CanvasRenderingContext2D> extends Group<C> {
60
+ readonly children: Node<C>[];
61
+ readonly options: {
62
+ reverse?: boolean;
63
+ gap?: number;
64
+ };
65
+ constructor(children: Node<C>[], options?: {
66
+ reverse?: boolean;
67
+ gap?: number;
68
+ });
69
+ measure(ctx: Context<C>): Box;
70
+ draw(ctx: Context<C>, x: number, y: number): boolean;
71
+ hittest(ctx: Context<C>, test: HitTest): boolean;
72
+ }
73
+ declare class Wrapper<C extends CanvasRenderingContext2D> implements Node<C> {
74
+ #private;
75
+ constructor(inner: Node<C>);
76
+ get inner(): Node<C>;
77
+ set inner(newNode: Node<C>);
78
+ get flex(): boolean;
79
+ measure(ctx: Context<C>): Box;
80
+ draw(ctx: Context<C>, x: number, y: number): boolean;
81
+ hittest(ctx: Context<C>, test: HitTest): boolean;
82
+ }
83
+ declare class PaddingBox<C extends CanvasRenderingContext2D> extends Wrapper<C> {
84
+ #private;
85
+ readonly padding: {
86
+ top?: number;
87
+ bottom?: number;
88
+ left?: number;
89
+ right?: number;
90
+ };
91
+ constructor(inner: Node<C>, padding?: {
92
+ top?: number;
93
+ bottom?: number;
94
+ left?: number;
95
+ right?: number;
96
+ });
97
+ measure(ctx: Context<C>): Box;
98
+ draw(ctx: Context<C>, x: number, y: number): boolean;
99
+ hittest(ctx: Context<C>, test: HitTest): boolean;
100
+ }
101
+ declare class AlignBox<C extends CanvasRenderingContext2D> extends Wrapper<C> {
102
+ #private;
103
+ readonly options: {
104
+ alignment: Alignment;
105
+ };
106
+ constructor(inner: Node<C>, options: {
107
+ alignment: Alignment;
108
+ });
109
+ measure(ctx: Context<C>): Box;
110
+ draw(ctx: Context<C>, x: number, y: number): boolean;
111
+ hittest(ctx: Context<C>, test: HitTest): boolean;
112
+ }
113
+ declare class MultilineText<C extends CanvasRenderingContext2D> implements Node<C> {
114
+ #private;
115
+ readonly text: string;
116
+ readonly options: {
117
+ lineHeight: number;
118
+ font: string;
119
+ alignment: "left" | "center" | "right";
120
+ style: DynValue<C, string>;
121
+ };
122
+ constructor(text: string, options: {
123
+ lineHeight: number;
124
+ font: string;
125
+ alignment: "left" | "center" | "right";
126
+ style: DynValue<C, string>;
127
+ });
128
+ get flex(): boolean;
129
+ measure(ctx: Context<C>): Box;
130
+ draw(ctx: Context<C>, x: number, y: number): boolean;
131
+ hittest(_ctx: Context<C>, _test: HitTest): boolean;
132
+ }
133
+ declare class Text<C extends CanvasRenderingContext2D> implements Node<C> {
134
+ #private;
135
+ readonly text: string;
136
+ readonly options: {
137
+ lineHeight: number;
138
+ font: string;
139
+ style: DynValue<C, string>;
140
+ };
141
+ constructor(text: string, options: {
142
+ lineHeight: number;
143
+ font: string;
144
+ style: DynValue<C, string>;
145
+ });
146
+ get flex(): boolean;
147
+ measure(ctx: Context<C>): Box;
148
+ draw(ctx: Context<C>, x: number, y: number): boolean;
149
+ hittest(_ctx: Context<C>, _test: HitTest): boolean;
150
+ }
151
+ declare class Fixed<C extends CanvasRenderingContext2D> implements Node<C> {
152
+ readonly width: number;
153
+ readonly height: number;
154
+ constructor(width: number, height: number);
155
+ get flex(): boolean;
156
+ measure(_ctx: Context<C>): Box;
157
+ draw(_ctx: Context<C>, _x: number, _y: number): boolean;
158
+ hittest(_ctx: Context<C>, _test: HitTest): boolean;
159
+ }
160
+ //#endregion
161
+ //#region src/renderer.d.ts
162
+ declare class BaseRenderer<C extends CanvasRenderingContext2D, O extends {} = {}> {
163
+ #private;
164
+ readonly options: RendererOptions & O;
165
+ graphics: C;
166
+ protected get context(): Context<C>;
167
+ constructor(graphics: C, options: RendererOptions & O);
168
+ invalidateNode(node: Node<C>): void;
169
+ measureNode(node: Node<C>, ctx?: Context<C>): Box;
170
+ }
171
+ declare class DebugRenderer<C extends CanvasRenderingContext2D> extends BaseRenderer<C> {
172
+ draw(node: Node<C>): boolean;
173
+ hittest(node: Node<C>, test: HitTest): boolean;
174
+ }
175
+ declare function memoRenderItem<C extends CanvasRenderingContext2D, T extends {}>(renderItem: (item: T) => Node<C>): ((item: T) => Node<C>) & {
176
+ reset: (key: T) => boolean;
177
+ };
178
+ declare class ListState<T extends {}> {
179
+ offset: number;
180
+ position: number;
181
+ items: T[];
182
+ unshift(...items: T[]): void;
183
+ unshiftAll(items: T[]): void;
184
+ push(...items: T[]): void;
185
+ pushAll(items: T[]): void;
186
+ reset(): void;
187
+ resetScroll(): void;
188
+ applyScroll(delta: number): void;
189
+ }
190
+ type DrawItem<C extends CanvasRenderingContext2D> = {
191
+ idx: number;
192
+ node: Node<C>;
193
+ offset: number;
194
+ height: number;
195
+ };
196
+ declare abstract class VirtualizedRenderer<C extends CanvasRenderingContext2D, T extends {}> extends BaseRenderer<C, {
197
+ renderItem: (item: T) => Node<C>;
198
+ list: ListState<T>;
199
+ }> {
200
+ get position(): number;
201
+ set position(value: number);
202
+ get offset(): number;
203
+ set offset(value: number);
204
+ get items(): T[];
205
+ set items(value: T[]);
206
+ abstract render(feedback?: RenderFeedback): boolean;
207
+ abstract hittest(test: HitTest): boolean;
208
+ protected _renderDrawList(list: DrawItem<C>[], shift: number, feedback?: RenderFeedback): boolean;
209
+ }
210
+ declare class TimelineRenderer<C extends CanvasRenderingContext2D, T extends {}> extends VirtualizedRenderer<C, T> {
211
+ render(feedback?: RenderFeedback): boolean;
212
+ hittest(test: HitTest): boolean;
213
+ }
214
+ declare class ChatRenderer<C extends CanvasRenderingContext2D, T extends {}> extends VirtualizedRenderer<C, T> {
215
+ render(feedback?: RenderFeedback): boolean;
216
+ hittest(test: HitTest): boolean;
217
+ }
218
+ //#endregion
219
+ //#region src/registry.d.ts
220
+ declare function registerNodeParent<C extends CanvasRenderingContext2D>(node: Node<C>, parent: Node<C>): void;
221
+ declare function unregisterNodeParent<C extends CanvasRenderingContext2D>(node: Node<C>): void;
222
+ declare function getNodeParent<C extends CanvasRenderingContext2D>(node: Node<C>): Node<C> | undefined;
223
+ //#endregion
224
+ export { AlignBox, Alignment, BaseRenderer, Box, ChatRenderer, Context, DebugRenderer, DynValue, Fixed, Group, HStack, HitTest, ListState, MultilineText, Node, PaddingBox, RenderFeedback, RendererOptions, Text, TimelineRenderer, VStack, VirtualizedRenderer, Wrapper, getNodeParent, memoRenderItem, registerNodeParent, unregisterNodeParent };
225
+ //# sourceMappingURL=index.d.mts.map