chat-layout 0.0.19 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -2
- package/index.d.mts +225 -0
- package/index.mjs +799 -0
- package/index.mjs.map +1 -0
- package/package.json +17 -5
- package/index.d.ts +0 -219
- package/index.js +0 -999
- package/index.js.map +0 -14
- package/tsconfig.json +0 -28
package/README.md
CHANGED
|
@@ -6,10 +6,22 @@ To install dependencies:
|
|
|
6
6
|
bun install
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
To
|
|
9
|
+
To type-check:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
bun run
|
|
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
|