@geometra/core 1.16.0 → 1.17.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/dist/index.d.ts CHANGED
@@ -33,6 +33,10 @@ export { collectTextNodes, getSelectedText, hitTestText } from './selection.js';
33
33
  export type { TextNodeInfo, TextLineInfo, SelectionRange } from './selection.js';
34
34
  export { transition, spring, normalizeSpringConfig, easing, animationLoop, createTweenTimeline, createPropertyTimeline, setMotionPreference, getMotionPreference, } from './animation.js';
35
35
  export type { EasingFn, TweenPlaybackState, TweenTimeline, PropertyTimeline, MotionPreference, } from './animation.js';
36
+ export { streamText } from './stream-text.js';
37
+ export type { StreamText } from './stream-text.js';
38
+ export { createViewport, breakpoint, responsive, defaultBreakpoints, } from './responsive.js';
39
+ export type { Viewport, BreakpointMap } from './responsive.js';
36
40
  export { syncVirtualWindow } from './virtual-scroll.js';
37
41
  export type { VirtualWindowState } from './virtual-scroll.js';
38
42
  export { toSemanticHTML } from './seo.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -36,6 +36,10 @@ export { dispatchCompositionEvent, dispatchKeyboardEvent } from './keyboard.js';
36
36
  export { collectTextNodes, getSelectedText, hitTestText } from './selection.js';
37
37
  // Animation
38
38
  export { transition, spring, normalizeSpringConfig, easing, animationLoop, createTweenTimeline, createPropertyTimeline, setMotionPreference, getMotionPreference, } from './animation.js';
39
+ // Streaming text
40
+ export { streamText } from './stream-text.js';
41
+ // Responsive helpers
42
+ export { createViewport, breakpoint, responsive, defaultBreakpoints, } from './responsive.js';
39
43
  // Virtual scroll helpers
40
44
  export { syncVirtualWindow } from './virtual-scroll.js';
41
45
  // SEO
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAG9D,uBAAuB;AACvB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEzD,yBAAyB;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEjG,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGpC,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,gBAAgB,CAAA;AAGvB,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvG,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE/E,sBAAsB;AACtB,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,wBAAwB,EACxB,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE1G,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE/E,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG/E,YAAY;AACZ,OAAO,EACL,UAAU,EACV,MAAM,EACN,qBAAqB,EACrB,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AASvB,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGvD,MAAM;AACN,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAGzC,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAG/C,wBAAwB;AACxB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAG9D,uBAAuB;AACvB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEzD,yBAAyB;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEjG,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGpC,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,gBAAgB,CAAA;AAGvB,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvG,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE/E,sBAAsB;AACtB,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,wBAAwB,EACxB,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE1G,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE/E,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG/E,YAAY;AACZ,OAAO,EACL,UAAU,EACV,MAAM,EACN,qBAAqB,EACrB,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AASvB,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,UAAU,EACV,UAAU,EACV,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AAGxB,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGvD,MAAM;AACN,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAGzC,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAG/C,wBAAwB;AACxB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Responsive layout helpers: viewport signals, named breakpoints, and
3
+ * breakpoint-to-value mapping.
4
+ *
5
+ * Works with both local apps (listen to `window.resize`) and server-driven
6
+ * apps (server updates viewport signals when clients send resize messages).
7
+ */
8
+ import type { Signal, Computed } from './signals.js';
9
+ export interface Viewport {
10
+ /** Reactive viewport width. */
11
+ readonly width: Signal<number>;
12
+ /** Reactive viewport height. */
13
+ readonly height: Signal<number>;
14
+ /** Update both dimensions at once. */
15
+ resize(width: number, height: number): void;
16
+ }
17
+ /**
18
+ * Create a reactive viewport with initial dimensions.
19
+ *
20
+ * In a browser you can wire it to `window` resize events; in a server-driven
21
+ * app the server updates it when a client sends a `resize` message.
22
+ */
23
+ export declare function createViewport(initialWidth: number, initialHeight: number): Viewport;
24
+ /**
25
+ * Breakpoint map: keys are breakpoint names, values are the **minimum width**
26
+ * at which that breakpoint activates (inclusive). Must be sorted ascending
27
+ * by value.
28
+ *
29
+ * Example: `{ sm: 0, md: 640, lg: 1024 }`
30
+ */
31
+ export type BreakpointMap = Record<string, number>;
32
+ /**
33
+ * Return the active breakpoint name for a given width signal and breakpoint map.
34
+ *
35
+ * The breakpoints are evaluated largest-first; the first whose minimum width
36
+ * is `<=` the current width wins. If no breakpoint matches (shouldn't happen
37
+ * if one starts at 0), returns the smallest breakpoint name.
38
+ */
39
+ export declare function breakpoint<B extends BreakpointMap>(width: Signal<number> | Computed<number>, breakpoints: B): Computed<keyof B & string>;
40
+ /**
41
+ * Map breakpoint names to values, returning a reactive computed that resolves
42
+ * to the value for the current breakpoint.
43
+ *
44
+ * ```ts
45
+ * const cols = responsive(viewport.width, { sm: 1, md: 2, lg: 3 }, { sm: 0, md: 640, lg: 1024 })
46
+ * cols.value // 2 when viewport is 800px
47
+ * ```
48
+ */
49
+ export declare function responsive<B extends BreakpointMap, V>(width: Signal<number> | Computed<number>, values: Record<keyof B & string, V>, breakpoints: B): Computed<V>;
50
+ /** Tailwind-style default breakpoints. */
51
+ export declare const defaultBreakpoints: {
52
+ readonly sm: 0;
53
+ readonly md: 640;
54
+ readonly lg: 1024;
55
+ readonly xl: 1280;
56
+ readonly '2xl': 1536;
57
+ };
58
+ //# sourceMappingURL=responsive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive.d.ts","sourceRoot":"","sources":["../src/responsive.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAMpD,MAAM,WAAW,QAAQ;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/B,sCAAsC;IACtC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,QAAQ,CAWpF;AAMD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAElD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,aAAa,EAChD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EACxC,WAAW,EAAE,CAAC,GACb,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAY5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,aAAa,EAAE,CAAC,EACnD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EACxC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,EACnC,WAAW,EAAE,CAAC,GACb,QAAQ,CAAC,CAAC,CAAC,CAGb;AAMD,0CAA0C;AAC1C,eAAO,MAAM,kBAAkB;;;;;;CAMG,CAAA"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Responsive layout helpers: viewport signals, named breakpoints, and
3
+ * breakpoint-to-value mapping.
4
+ *
5
+ * Works with both local apps (listen to `window.resize`) and server-driven
6
+ * apps (server updates viewport signals when clients send resize messages).
7
+ */
8
+ import { signal, computed } from './signals.js';
9
+ /**
10
+ * Create a reactive viewport with initial dimensions.
11
+ *
12
+ * In a browser you can wire it to `window` resize events; in a server-driven
13
+ * app the server updates it when a client sends a `resize` message.
14
+ */
15
+ export function createViewport(initialWidth, initialHeight) {
16
+ const w = signal(initialWidth);
17
+ const h = signal(initialHeight);
18
+ return {
19
+ width: w,
20
+ height: h,
21
+ resize(width, height) {
22
+ w.set(width);
23
+ h.set(height);
24
+ },
25
+ };
26
+ }
27
+ /**
28
+ * Return the active breakpoint name for a given width signal and breakpoint map.
29
+ *
30
+ * The breakpoints are evaluated largest-first; the first whose minimum width
31
+ * is `<=` the current width wins. If no breakpoint matches (shouldn't happen
32
+ * if one starts at 0), returns the smallest breakpoint name.
33
+ */
34
+ export function breakpoint(width, breakpoints) {
35
+ // Pre-sort descending by min-width for fast lookup
36
+ const sorted = Object.entries(breakpoints).sort((a, b) => b[1] - a[1]);
37
+ const fallback = sorted[sorted.length - 1][0];
38
+ return computed(() => {
39
+ const w = width.value;
40
+ for (const [name, minWidth] of sorted) {
41
+ if (w >= minWidth)
42
+ return name;
43
+ }
44
+ return fallback;
45
+ });
46
+ }
47
+ /**
48
+ * Map breakpoint names to values, returning a reactive computed that resolves
49
+ * to the value for the current breakpoint.
50
+ *
51
+ * ```ts
52
+ * const cols = responsive(viewport.width, { sm: 1, md: 2, lg: 3 }, { sm: 0, md: 640, lg: 1024 })
53
+ * cols.value // 2 when viewport is 800px
54
+ * ```
55
+ */
56
+ export function responsive(width, values, breakpoints) {
57
+ const bp = breakpoint(width, breakpoints);
58
+ return computed(() => values[bp.value]);
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Common presets
62
+ // ---------------------------------------------------------------------------
63
+ /** Tailwind-style default breakpoints. */
64
+ export const defaultBreakpoints = {
65
+ sm: 0,
66
+ md: 640,
67
+ lg: 1024,
68
+ xl: 1280,
69
+ '2xl': 1536,
70
+ };
71
+ //# sourceMappingURL=responsive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive.js","sourceRoot":"","sources":["../src/responsive.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAgB/C;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,YAAoB,EAAE,aAAqB;IACxE,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;IAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;IAC/B,OAAO;QACL,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,KAAa,EAAE,MAAc;YAClC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACZ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACf,CAAC;KACF,CAAA;AACH,CAAC;AAeD;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,KAAwC,EACxC,WAAc;IAEd,mDAAmD;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAqB,CAAA;IAElE,OAAO,QAAQ,CAAC,GAAG,EAAE;QACnB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAA;QACrB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,QAAQ;gBAAE,OAAO,IAAwB,CAAA;QACpD,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CACxB,KAAwC,EACxC,MAAmC,EACnC,WAAc;IAEd,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACzC,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;AACzC,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,0CAA0C;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,IAAI;CACqB,CAAA"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Streaming text primitive for efficient token-by-token updates.
3
+ *
4
+ * Wraps a signal with `append()` / `clear()` / `done()` helpers and
5
+ * microtask-level coalescing so bursts of rapid appends (e.g. LLM tokens)
6
+ * produce a single signal notification per microtask rather than one per token.
7
+ */
8
+ import type { Signal } from './signals.js';
9
+ export interface StreamText {
10
+ /** Current accumulated text (reactive — subscribes the active effect/computed). */
11
+ readonly value: string;
12
+ /** Underlying signal for direct use in view functions. */
13
+ readonly signal: Signal<string>;
14
+ /** Append text. Coalesces rapid calls into a single signal update per microtask. */
15
+ append(chunk: string): void;
16
+ /** Replace the entire text content. */
17
+ set(text: string): void;
18
+ /** Reset to empty string. */
19
+ clear(): void;
20
+ /** Mark the stream as finished. Sets `streaming` to `false`. */
21
+ done(): void;
22
+ /** Whether the stream is still receiving chunks. */
23
+ readonly streaming: boolean;
24
+ /** Underlying streaming signal. */
25
+ readonly streamingSignal: Signal<boolean>;
26
+ }
27
+ /**
28
+ * Create a streaming text container. Tokens appended via `append()` are
29
+ * coalesced within a microtask so downstream signal subscribers (layout,
30
+ * render) see at most one update per event-loop tick.
31
+ *
32
+ * @param initial — Optional initial text content (default `''`).
33
+ */
34
+ export declare function streamText(initial?: string): StreamText;
35
+ //# sourceMappingURL=stream-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-text.d.ts","sourceRoot":"","sources":["../src/stream-text.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/B,oFAAoF;IACpF,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,uCAAuC;IACvC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,6BAA6B;IAC7B,KAAK,IAAI,IAAI,CAAA;IACb,gEAAgE;IAChE,IAAI,IAAI,IAAI,CAAA;IACZ,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;CAC1C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,SAAK,GAAG,UAAU,CAgDnD"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Streaming text primitive for efficient token-by-token updates.
3
+ *
4
+ * Wraps a signal with `append()` / `clear()` / `done()` helpers and
5
+ * microtask-level coalescing so bursts of rapid appends (e.g. LLM tokens)
6
+ * produce a single signal notification per microtask rather than one per token.
7
+ */
8
+ import { signal, batch } from './signals.js';
9
+ /**
10
+ * Create a streaming text container. Tokens appended via `append()` are
11
+ * coalesced within a microtask so downstream signal subscribers (layout,
12
+ * render) see at most one update per event-loop tick.
13
+ *
14
+ * @param initial — Optional initial text content (default `''`).
15
+ */
16
+ export function streamText(initial = '') {
17
+ const s = signal(initial);
18
+ const streamingState = signal(true);
19
+ let buffer = initial;
20
+ let flushScheduled = false;
21
+ function scheduleFlush() {
22
+ if (flushScheduled)
23
+ return;
24
+ flushScheduled = true;
25
+ queueMicrotask(() => {
26
+ flushScheduled = false;
27
+ batch(() => {
28
+ s.set(buffer);
29
+ });
30
+ });
31
+ }
32
+ return {
33
+ get value() {
34
+ return s.value;
35
+ },
36
+ signal: s,
37
+ append(chunk) {
38
+ if (chunk.length === 0)
39
+ return;
40
+ buffer += chunk;
41
+ scheduleFlush();
42
+ },
43
+ set(text) {
44
+ buffer = text;
45
+ s.set(text);
46
+ },
47
+ clear() {
48
+ buffer = '';
49
+ s.set('');
50
+ streamingState.set(true);
51
+ },
52
+ done() {
53
+ // Flush any remaining buffered text synchronously
54
+ if (buffer !== s.peek()) {
55
+ s.set(buffer);
56
+ }
57
+ streamingState.set(false);
58
+ },
59
+ get streaming() {
60
+ return streamingState.value;
61
+ },
62
+ streamingSignal: streamingState,
63
+ };
64
+ }
65
+ //# sourceMappingURL=stream-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-text.js","sourceRoot":"","sources":["../src/stream-text.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAsB5C;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,OAAO,GAAG,EAAE;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IACzB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,MAAM,GAAG,OAAO,CAAA;IACpB,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,SAAS,aAAa;QACpB,IAAI,cAAc;YAAE,OAAM;QAC1B,cAAc,GAAG,IAAI,CAAA;QACrB,cAAc,CAAC,GAAG,EAAE;YAClB,cAAc,GAAG,KAAK,CAAA;YACtB,KAAK,CAAC,GAAG,EAAE;gBACT,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACf,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,IAAI,KAAK;YACP,OAAO,CAAC,CAAC,KAAK,CAAA;QAChB,CAAC;QACD,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,KAAa;YAClB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAC9B,MAAM,IAAI,KAAK,CAAA;YACf,aAAa,EAAE,CAAA;QACjB,CAAC;QACD,GAAG,CAAC,IAAY;YACd,MAAM,GAAG,IAAI,CAAA;YACb,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACb,CAAC;QACD,KAAK;YACH,MAAM,GAAG,EAAE,CAAA;YACX,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACT,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QACD,IAAI;YACF,kDAAkD;YAClD,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACf,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QACD,IAAI,SAAS;YACX,OAAO,cAAc,CAAC,KAAK,CAAA;QAC7B,CAAC;QACD,eAAe,EAAE,cAAc;KAChC,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geometra/core",
3
- "version": "1.16.0",
3
+ "version": "1.17.0",
4
4
  "description": "DOM-free UI framework core: components, signals, reconciler",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -39,7 +39,7 @@
39
39
  "check": "tsc --noEmit"
40
40
  },
41
41
  "dependencies": {
42
- "textura": "^1.16.0"
42
+ "textura": "^1.17.0"
43
43
  },
44
44
  "optionalDependencies": {
45
45
  "@napi-rs/canvas": "^0.1.65"