three-text 0.4.11 → 0.4.12

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.
Files changed (75) hide show
  1. package/README.md +257 -38
  2. package/dist/index.cjs +3420 -3436
  3. package/dist/index.d.ts +163 -9
  4. package/dist/index.js +3416 -3437
  5. package/dist/index.min.cjs +667 -666
  6. package/dist/index.min.js +670 -669
  7. package/dist/index.umd.js +3557 -3565
  8. package/dist/index.umd.min.js +752 -746
  9. package/dist/p5/index.cjs +2738 -5
  10. package/dist/p5/index.js +2738 -5
  11. package/dist/slug/index.cjs +380 -0
  12. package/dist/slug/index.d.ts +62 -0
  13. package/dist/slug/index.js +374 -0
  14. package/dist/three/index.cjs +50 -35
  15. package/dist/three/index.js +50 -35
  16. package/dist/three/react.cjs +5 -2
  17. package/dist/three/react.d.ts +66 -120
  18. package/dist/three/react.js +6 -3
  19. package/dist/types/core/Text.d.ts +3 -10
  20. package/dist/types/core/cache/sharedCaches.d.ts +2 -1
  21. package/dist/types/core/shaping/DrawCallbacks.d.ts +11 -3
  22. package/dist/types/core/shaping/TextShaper.d.ts +1 -5
  23. package/dist/types/core/types.d.ts +84 -0
  24. package/dist/types/index.d.ts +7 -3
  25. package/dist/types/{core/cache → mesh}/GlyphContourCollector.d.ts +4 -4
  26. package/dist/types/{core/cache → mesh}/GlyphGeometryBuilder.d.ts +5 -5
  27. package/dist/types/mesh/MeshGeometryBuilder.d.ts +18 -0
  28. package/dist/types/{core → mesh}/geometry/BoundaryClusterer.d.ts +1 -1
  29. package/dist/types/{core → mesh}/geometry/Extruder.d.ts +1 -1
  30. package/dist/types/{core → mesh}/geometry/PathOptimizer.d.ts +1 -1
  31. package/dist/types/{core → mesh}/geometry/Polygonizer.d.ts +1 -1
  32. package/dist/types/{core → mesh}/geometry/Tessellator.d.ts +1 -1
  33. package/dist/types/react/utils.d.ts +2 -0
  34. package/dist/types/vector/GlyphOutlineCollector.d.ts +25 -0
  35. package/dist/types/vector/GlyphVectorGeometryBuilder.d.ts +26 -0
  36. package/dist/types/vector/LoopBlinnGeometry.d.ts +68 -0
  37. package/dist/types/vector/index.d.ts +29 -0
  38. package/dist/types/vector/loopBlinnTSL.d.ts +11 -0
  39. package/dist/types/vector/react.d.ts +24 -0
  40. package/dist/types/vector/webgl/index.d.ts +7 -0
  41. package/dist/types/vector/webgpu/index.d.ts +11 -0
  42. package/dist/vector/index.cjs +1458 -0
  43. package/dist/vector/index.d.ts +122 -0
  44. package/dist/vector/index.js +1434 -0
  45. package/dist/vector/react.cjs +153 -0
  46. package/dist/vector/react.d.ts +317 -0
  47. package/dist/vector/react.js +132 -0
  48. package/dist/vector/types/slug-lib/src/SlugPacker.d.ts +17 -0
  49. package/dist/vector/types/slug-lib/src/WebGL2Renderer.d.ts +21 -0
  50. package/dist/vector/types/slug-lib/src/WebGPURenderer.d.ts +16 -0
  51. package/dist/vector/types/slug-lib/src/index.d.ts +15 -0
  52. package/dist/vector/types/slug-lib/src/shaderStrings.d.ts +9 -0
  53. package/dist/vector/types/slug-lib/src/types.d.ts +34 -0
  54. package/dist/vector/types/src/core/types.d.ts +381 -0
  55. package/dist/vector/types/src/hyphenation/HyphenationPatternLoader.d.ts +2 -0
  56. package/dist/vector/types/src/hyphenation/index.d.ts +7 -0
  57. package/dist/vector/types/src/hyphenation/types.d.ts +6 -0
  58. package/dist/vector/types/src/utils/Cache.d.ts +14 -0
  59. package/dist/vector/types/src/utils/vectors.d.ts +75 -0
  60. package/dist/vector/types/src/vector/VectorDataBuilder.d.ts +30 -0
  61. package/dist/vector/types/src/vector/VectorThreeAdapter.d.ts +27 -0
  62. package/dist/vector/types/src/vector/index.d.ts +15 -0
  63. package/dist/vector/webgl/index.cjs +229 -0
  64. package/dist/vector/webgl/index.d.ts +53 -0
  65. package/dist/vector/webgl/index.js +227 -0
  66. package/dist/vector/webgpu/index.cjs +321 -0
  67. package/dist/vector/webgpu/index.d.ts +57 -0
  68. package/dist/vector/webgpu/index.js +319 -0
  69. package/dist/webgl-vector/index.cjs +243 -0
  70. package/dist/webgl-vector/index.d.ts +34 -0
  71. package/dist/webgl-vector/index.js +241 -0
  72. package/dist/webgpu-vector/index.cjs +336 -0
  73. package/dist/webgpu-vector/index.d.ts +38 -0
  74. package/dist/webgpu-vector/index.js +334 -0
  75. package/package.json +48 -3
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Pure Slug algorithm types — no dependency on three-text internals.
3
+ * Based on Eric Lengyel's reference implementation (MIT License, 2017).
4
+ */
5
+ export interface QuadCurve {
6
+ p1: [number, number];
7
+ p2: [number, number];
8
+ p3: [number, number];
9
+ }
10
+ export interface SlugShape {
11
+ curves: QuadCurve[];
12
+ bounds: [number, number, number, number];
13
+ }
14
+ export interface SlugPackedTexture {
15
+ data: Float32Array | Uint32Array;
16
+ width: number;
17
+ height: number;
18
+ }
19
+ export interface SlugGPUData {
20
+ curveTexture: SlugPackedTexture & {
21
+ data: Float32Array;
22
+ };
23
+ bandTexture: SlugPackedTexture & {
24
+ data: Uint32Array;
25
+ };
26
+ /** 5 attribs x 4 components x 4 verts per shape, tightly packed per-shape */
27
+ vertices: Float32Array;
28
+ indices: Uint16Array;
29
+ shapeCount: number;
30
+ }
31
+ export interface SlugPackOptions {
32
+ bandCount?: number;
33
+ evenOdd?: boolean;
34
+ }
@@ -0,0 +1,381 @@
1
+ import type { HyphenationTrieNode } from '../hyphenation';
2
+ import type { CacheStats } from '../utils/Cache';
3
+ import type { Vec2, Vec3, BoundingBox } from '../utils/vectors';
4
+ export type { HyphenationTrieNode };
5
+ export interface Path {
6
+ points: Vec2[];
7
+ glyphIndex: number;
8
+ bounds?: {
9
+ minX: number;
10
+ minY: number;
11
+ maxX: number;
12
+ maxY: number;
13
+ };
14
+ }
15
+ export interface HarfBuzzGlyph {
16
+ g: number;
17
+ cl: number;
18
+ ax: number;
19
+ ay: number;
20
+ dx: number;
21
+ dy: number;
22
+ x?: number;
23
+ y?: number;
24
+ lineIndex: number;
25
+ absoluteTextIndex: number;
26
+ }
27
+ export interface GlyphCluster {
28
+ text: string;
29
+ glyphs: HarfBuzzGlyph[];
30
+ position: Vec3;
31
+ }
32
+ export interface GlyphContours {
33
+ glyphId: number;
34
+ paths: Path[];
35
+ bounds: {
36
+ min: {
37
+ x: number;
38
+ y: number;
39
+ };
40
+ max: {
41
+ x: number;
42
+ y: number;
43
+ };
44
+ };
45
+ }
46
+ export type OutlineSegmentType = 0 | 1 | 2;
47
+ export interface OutlineSegment {
48
+ type: OutlineSegmentType;
49
+ contourId: number;
50
+ p0: Vec2;
51
+ p1: Vec2;
52
+ p2?: Vec2;
53
+ p3?: Vec2;
54
+ }
55
+ export interface GlyphOutline {
56
+ glyphId: number;
57
+ textIndex: number;
58
+ segments: OutlineSegment[];
59
+ bounds: {
60
+ min: {
61
+ x: number;
62
+ y: number;
63
+ };
64
+ max: {
65
+ x: number;
66
+ y: number;
67
+ };
68
+ };
69
+ }
70
+ export type TextAlign = 'left' | 'center' | 'right' | 'justify';
71
+ export type TextDirection = 'ltr' | 'rtl';
72
+ export interface LineInfo {
73
+ text: string;
74
+ originalStart: number;
75
+ originalEnd: number;
76
+ xOffset: number;
77
+ adjustmentRatio?: number;
78
+ isLastLine?: boolean;
79
+ naturalWidth?: number;
80
+ endedWithHyphen?: boolean;
81
+ }
82
+ export interface LoadedFont {
83
+ hb: HarfBuzzAPI;
84
+ fontBlob: HarfBuzzBlob;
85
+ face: HarfBuzzFace;
86
+ font: HarfBuzzFont;
87
+ module: HarfBuzzModule;
88
+ upem: number;
89
+ metrics: ExtractedMetrics;
90
+ fontVariations?: {
91
+ [key: string]: number;
92
+ };
93
+ fontFeatures?: {
94
+ [tag: string]: boolean | number;
95
+ };
96
+ isVariable?: boolean;
97
+ variationAxes?: {
98
+ [key: string]: VariationAxis;
99
+ };
100
+ availableFeatures?: string[];
101
+ featureNames?: {
102
+ [tag: string]: string;
103
+ };
104
+ _buffer?: ArrayBuffer;
105
+ }
106
+ export interface HarfBuzzModule {
107
+ addFunction: (func: Function, signature: string) => number;
108
+ exports: any;
109
+ removeFunction: (ptr: number) => void;
110
+ }
111
+ export interface VariationAxis {
112
+ min: number;
113
+ default: number;
114
+ max: number;
115
+ name?: string;
116
+ }
117
+ export interface HarfBuzzAPI {
118
+ createBlob: (data: Uint8Array) => HarfBuzzBlob;
119
+ createFace: (blob: HarfBuzzBlob, index: number) => HarfBuzzFace;
120
+ createFont: (face: HarfBuzzFace) => HarfBuzzFont;
121
+ createBuffer: () => HarfBuzzBuffer;
122
+ shape: (font: HarfBuzzFont, buffer: HarfBuzzBuffer, features?: string) => void;
123
+ }
124
+ export interface HarfBuzzBlob {
125
+ destroy: () => void;
126
+ }
127
+ export interface HarfBuzzFace {
128
+ destroy: () => void;
129
+ getAxisInfos: () => {
130
+ [tag: string]: VariationAxis;
131
+ };
132
+ }
133
+ export interface HarfBuzzFont {
134
+ ptr: number;
135
+ destroy: () => void;
136
+ setScale: (xScale: number, yScale: number) => void;
137
+ setVariations: (variations: {
138
+ [key: string]: number;
139
+ }) => void;
140
+ }
141
+ export interface HarfBuzzBuffer {
142
+ addText: (text: string) => void;
143
+ guessSegmentProperties: () => void;
144
+ setDirection: (direction: string) => void;
145
+ json: (font: HarfBuzzFont) => any[];
146
+ destroy: () => void;
147
+ }
148
+ export interface HarfBuzzInstance {
149
+ hb: HarfBuzzAPI;
150
+ module: HarfBuzzModule;
151
+ }
152
+ export interface ExtractedMetrics {
153
+ isCFF: boolean;
154
+ unitsPerEm: number;
155
+ hheaAscender: number | null;
156
+ hheaDescender: number | null;
157
+ hheaLineGap: number | null;
158
+ typoAscender: number | null;
159
+ typoDescender: number | null;
160
+ typoLineGap: number | null;
161
+ winAscent: number | null;
162
+ winDescent: number | null;
163
+ axisNames: {
164
+ [tag: string]: string;
165
+ } | null;
166
+ }
167
+ export interface VerticalMetrics {
168
+ ascender: number;
169
+ descender: number;
170
+ lineGap: number;
171
+ }
172
+ export interface FontMetrics {
173
+ ascender: number;
174
+ descender: number;
175
+ lineGap: number;
176
+ unitsPerEm: number;
177
+ naturalLineHeight: number;
178
+ }
179
+ export interface ProcessedPath {
180
+ outer: Path;
181
+ holes: Path[];
182
+ }
183
+ export interface Triangles {
184
+ vertices: number[];
185
+ indices: number[];
186
+ }
187
+ export interface ProcessedGeometry {
188
+ triangles: Triangles;
189
+ contours: number[][];
190
+ contoursAreBoundary?: boolean;
191
+ }
192
+ export interface GlyphData {
193
+ geometry: ProcessedGeometry;
194
+ vertices: Float32Array;
195
+ normals: Float32Array;
196
+ indices: Uint32Array;
197
+ bounds: {
198
+ min: {
199
+ x: number;
200
+ y: number;
201
+ z: number;
202
+ };
203
+ max: {
204
+ x: number;
205
+ y: number;
206
+ z: number;
207
+ };
208
+ };
209
+ useCount: number;
210
+ }
211
+ export interface PathInfo {
212
+ start: number;
213
+ count: number;
214
+ }
215
+ export interface GlyphGeometryInfo {
216
+ textIndex: number;
217
+ lineIndex: number;
218
+ vertexStart: number;
219
+ vertexCount: number;
220
+ bounds: {
221
+ min: {
222
+ x: number;
223
+ y: number;
224
+ z: number;
225
+ };
226
+ max: {
227
+ x: number;
228
+ y: number;
229
+ z: number;
230
+ };
231
+ };
232
+ paths?: PathInfo[];
233
+ }
234
+ export interface TextRange {
235
+ start: number;
236
+ end: number;
237
+ originalText: string;
238
+ bounds: {
239
+ min: {
240
+ x: number;
241
+ y: number;
242
+ z: number;
243
+ };
244
+ max: {
245
+ x: number;
246
+ y: number;
247
+ z: number;
248
+ };
249
+ }[];
250
+ glyphs: GlyphGeometryInfo[];
251
+ lineIndices: number[];
252
+ }
253
+ export interface TextQueryOptions {
254
+ byText?: string[];
255
+ byCharRange?: {
256
+ start: number;
257
+ end: number;
258
+ }[];
259
+ }
260
+ export interface TextGeometryInfo {
261
+ vertices: Float32Array;
262
+ normals: Float32Array;
263
+ indices: Uint32Array;
264
+ colors?: Float32Array;
265
+ glyphAttributes?: {
266
+ glyphCenter: Float32Array;
267
+ glyphIndex: Float32Array;
268
+ glyphLineIndex: Float32Array;
269
+ glyphProgress: Float32Array;
270
+ glyphBaselineY: Float32Array;
271
+ };
272
+ glyphs: GlyphGeometryInfo[];
273
+ planeBounds: BoundingBox;
274
+ stats: {
275
+ trianglesGenerated: number;
276
+ verticesGenerated: number;
277
+ pointsRemovedByVisvalingam: number;
278
+ originalPointCount: number;
279
+ } & Partial<CacheStats & {
280
+ hitRate: number;
281
+ memoryUsageMB: number;
282
+ }>;
283
+ query(options: TextQueryOptions): TextRange[];
284
+ coloredRanges?: ColoredRange[];
285
+ }
286
+ export interface TextHandle extends TextGeometryInfo {
287
+ getLoadedFont(): LoadedFont | undefined;
288
+ getCacheSize(): number;
289
+ clearCache(): void;
290
+ measureTextWidth(text: string, letterSpacing?: number): number;
291
+ update(options: Partial<TextOptions>): Promise<TextHandle>;
292
+ }
293
+ export interface ColorByRange {
294
+ start: number;
295
+ end: number;
296
+ color: [number, number, number];
297
+ }
298
+ export interface ColorOptions {
299
+ default?: [number, number, number];
300
+ byText?: {
301
+ [text: string]: [number, number, number];
302
+ };
303
+ byCharRange?: ColorByRange[];
304
+ }
305
+ export interface ColoredRange {
306
+ start: number;
307
+ end: number;
308
+ originalText: string;
309
+ color: [number, number, number];
310
+ bounds: {
311
+ min: {
312
+ x: number;
313
+ y: number;
314
+ z: number;
315
+ };
316
+ max: {
317
+ x: number;
318
+ y: number;
319
+ z: number;
320
+ };
321
+ }[];
322
+ glyphs: GlyphGeometryInfo[];
323
+ lineIndices: number[];
324
+ }
325
+ export interface TextOptions {
326
+ text: string;
327
+ font: string | ArrayBuffer;
328
+ size?: number;
329
+ depth?: number;
330
+ lineHeight?: number;
331
+ letterSpacing?: number;
332
+ perGlyphAttributes?: boolean;
333
+ fontVariations?: {
334
+ [key: string]: number;
335
+ };
336
+ fontFeatures?: {
337
+ [tag: string]: boolean | number;
338
+ };
339
+ maxTextLength?: number;
340
+ removeOverlaps?: boolean;
341
+ curveSteps?: number;
342
+ curveFidelity?: CurveFidelityConfig;
343
+ geometryOptimization?: GeometryOptimizationOptions;
344
+ layout?: LayoutOptions;
345
+ color?: [number, number, number] | ColorOptions;
346
+ }
347
+ export interface HyphenationPatternsMap {
348
+ [language: string]: HyphenationTrieNode;
349
+ }
350
+ export interface CurveFidelityConfig {
351
+ distanceTolerance?: number;
352
+ angleTolerance?: number;
353
+ cuspLimit?: number;
354
+ collinearityEpsilon?: number;
355
+ recursionLimit?: number;
356
+ }
357
+ export interface GeometryOptimizationOptions {
358
+ enabled?: boolean;
359
+ areaThreshold?: number;
360
+ }
361
+ export interface LayoutOptions {
362
+ width?: number;
363
+ align?: TextAlign;
364
+ direction?: TextDirection;
365
+ respectExistingBreaks?: boolean;
366
+ hyphenate?: boolean;
367
+ language?: string;
368
+ patternsPath?: string;
369
+ tolerance?: number;
370
+ pretolerance?: number;
371
+ emergencyStretch?: number;
372
+ autoEmergencyStretch?: number;
373
+ hyphenationPatterns?: HyphenationPatternsMap;
374
+ lefthyphenmin?: number;
375
+ righthyphenmin?: number;
376
+ linepenalty?: number;
377
+ adjdemerits?: number;
378
+ hyphenpenalty?: number;
379
+ exhyphenpenalty?: number;
380
+ doublehyphendemerits?: number;
381
+ }
@@ -0,0 +1,2 @@
1
+ import { HyphenationTrieNode } from './types';
2
+ export declare function loadPattern(language: string, patternsPath?: string): Promise<HyphenationTrieNode>;
@@ -0,0 +1,7 @@
1
+ export interface HyphenationTrieNode {
2
+ patterns: number[] | null;
3
+ children: {
4
+ [char: string]: HyphenationTrieNode;
5
+ };
6
+ }
7
+ export { loadPattern } from './HyphenationPatternLoader';
@@ -0,0 +1,6 @@
1
+ export interface HyphenationTrieNode {
2
+ patterns: number[] | null;
3
+ children: {
4
+ [key: string]: HyphenationTrieNode;
5
+ };
6
+ }
@@ -0,0 +1,14 @@
1
+ export interface CacheStats {
2
+ size: number;
3
+ }
4
+ export declare class Cache<K, V> {
5
+ private cache;
6
+ get(key: K): V | undefined;
7
+ has(key: K): boolean;
8
+ set(key: K, value: V): void;
9
+ delete(key: K): boolean;
10
+ clear(): void;
11
+ get size(): number;
12
+ keys(): K[];
13
+ getStats(): CacheStats;
14
+ }
@@ -0,0 +1,75 @@
1
+ export declare class Vec2 {
2
+ x: number;
3
+ y: number;
4
+ constructor(x?: number, y?: number);
5
+ set(x: number, y: number): Vec2;
6
+ clone(): Vec2;
7
+ copy(v: Vec2): Vec2;
8
+ add(v: Vec2): Vec2;
9
+ sub(v: Vec2): Vec2;
10
+ multiply(scalar: number): Vec2;
11
+ divide(scalar: number): Vec2;
12
+ length(): number;
13
+ lengthSq(): number;
14
+ normalize(): Vec2;
15
+ dot(v: Vec2): number;
16
+ distanceTo(v: Vec2): number;
17
+ distanceToSquared(v: Vec2): number;
18
+ equals(v: Vec2): boolean;
19
+ angle(): number;
20
+ }
21
+ export declare class Vec3 {
22
+ x: number;
23
+ y: number;
24
+ z: number;
25
+ constructor(x?: number, y?: number, z?: number);
26
+ set(x: number, y: number, z: number): Vec3;
27
+ clone(): Vec3;
28
+ copy(v: Vec3): Vec3;
29
+ add(v: Vec3): Vec3;
30
+ sub(v: Vec3): Vec3;
31
+ multiply(scalar: number): Vec3;
32
+ divide(scalar: number): Vec3;
33
+ length(): number;
34
+ lengthSq(): number;
35
+ normalize(): Vec3;
36
+ dot(v: Vec3): number;
37
+ cross(v: Vec3): Vec3;
38
+ distanceTo(v: Vec3): number;
39
+ distanceToSquared(v: Vec3): number;
40
+ equals(v: Vec3): boolean;
41
+ }
42
+ export declare class Box3 {
43
+ min: Vec3;
44
+ max: Vec3;
45
+ constructor(min?: Vec3, max?: Vec3);
46
+ set(min: Vec3, max: Vec3): Box3;
47
+ setFromPoints(points: Vec3[]): Box3;
48
+ makeEmpty(): Box3;
49
+ isEmpty(): boolean;
50
+ expandByPoint(point: Vec3): Box3;
51
+ expandByScalar(scalar: number): Box3;
52
+ containsPoint(point: Vec3): boolean;
53
+ containsBox(box: Box3): boolean;
54
+ intersectsBox(box: Box3): boolean;
55
+ getCenter(target?: Vec3): Vec3;
56
+ getSize(target?: Vec3): Vec3;
57
+ clone(): Box3;
58
+ copy(box: Box3): Box3;
59
+ union(box: Box3): Box3;
60
+ equals(box: Box3): boolean;
61
+ }
62
+ export interface BoundingBox {
63
+ min: {
64
+ x: number;
65
+ y: number;
66
+ z: number;
67
+ };
68
+ max: {
69
+ x: number;
70
+ y: number;
71
+ z: number;
72
+ };
73
+ }
74
+ export declare function box3ToBoundingBox(box: Box3): BoundingBox;
75
+ export declare function boundingBoxToBox3(bounds: BoundingBox): Box3;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Bridges three-text's glyph outline pipeline to the Slug packer.
3
+ *
4
+ * Takes GlyphOutline[] (raw bezier segments from HarfBuzz) and produces
5
+ * SlugGPUData ready for WebGL2/WebGPU upload.
6
+ */
7
+ import type { GlyphOutline } from '../core/types';
8
+ import type { SlugGPUData, SlugPackOptions } from '../../slug-lib/src/types';
9
+ export interface VectorBuildResult {
10
+ gpuData: SlugGPUData;
11
+ /** Per-glyph metadata for query/selection */
12
+ glyphMeta: {
13
+ glyphId: number;
14
+ textIndex: number;
15
+ shapeIndex: number;
16
+ bounds: [number, number, number, number];
17
+ }[];
18
+ }
19
+ /**
20
+ * Convert glyph outlines to Slug GPU data.
21
+ *
22
+ * @param outlines - Raw glyph outlines from GlyphOutlineCollector
23
+ * @param positions - World-space positions per glyph (x, y for each outline)
24
+ * @param scale - Scale factor (fontSize / unitsPerEm)
25
+ * @param options - Slug packing options
26
+ */
27
+ export declare function buildVectorData(outlines: GlyphOutline[], positions: {
28
+ x: number;
29
+ y: number;
30
+ }[], scale: number, options?: SlugPackOptions): VectorBuildResult;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Three.js integration for Slug-based vector text rendering.
3
+ *
4
+ * Provides helpers to create RawShaderMaterial and BufferGeometry
5
+ * from SlugGPUData, compatible with Three.js scenes.
6
+ */
7
+ import type { SlugGPUData } from '../../slug-lib/src/types';
8
+ type THREE = typeof import('three');
9
+ export interface VectorThreeResources {
10
+ geometry: InstanceType<THREE['BufferGeometry']>;
11
+ material: InstanceType<THREE['RawShaderMaterial']>;
12
+ mesh: InstanceType<THREE['Mesh']>;
13
+ dispose(): void;
14
+ }
15
+ /**
16
+ * Create a complete Three.js mesh for vector text rendering.
17
+ *
18
+ * @param THREE - The three.js module (pass `import * as THREE from 'three'`)
19
+ * @param gpuData - Output from packSlugData or buildVectorData
20
+ */
21
+ export declare function createVectorThreeMesh(THREE: THREE, gpuData: SlugGPUData): VectorThreeResources;
22
+ /**
23
+ * Update the slug_matrix and slug_viewport uniforms before rendering.
24
+ * Call this in your render loop or when the camera/viewport changes.
25
+ */
26
+ export declare function updateVectorUniforms(material: InstanceType<THREE['RawShaderMaterial']>, mvpMatrix: InstanceType<THREE['Matrix4']>, viewportWidth: number, viewportHeight: number): void;
27
+ export {};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * three-text/vector — Text-specific vector rendering via Slug algorithm.
3
+ *
4
+ * Bridges HarfBuzz glyph outlines to slug-lib,
5
+ * with Three.js integration.
6
+ */
7
+ export { buildVectorData } from './VectorDataBuilder';
8
+ export type { VectorBuildResult } from './VectorDataBuilder';
9
+ export { createVectorThreeMesh, updateVectorUniforms } from './VectorThreeAdapter';
10
+ export type { VectorThreeResources } from './VectorThreeAdapter';
11
+ export { createWebGL2Resources, drawWebGL2 } from '../../slug-lib/src/WebGL2Renderer';
12
+ export type { SlugWebGL2Resources } from '../../slug-lib/src/WebGL2Renderer';
13
+ export { createWebGPUResources, drawWebGPU } from '../../slug-lib/src/WebGPURenderer';
14
+ export type { SlugWebGPUResources } from '../../slug-lib/src/WebGPURenderer';
15
+ export type { SlugGPUData, SlugPackOptions } from '../../slug-lib/src/types';