@flighthq/textshaper 0.5.1-next.1069.554a2ac → 0.5.1-next.1201.9b49dee

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
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/textshaper`. The `@f
13
13
  This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
14
14
 
15
15
  - [Flight project](https://github.com/flighthq/flight)
16
- - [Source for @flighthq/textshaper@0.5.1-next.1069.554a2ac](https://github.com/flighthq/flight/tree/554a2acc3fecf189b89b0729308ff890a15c21cc/packages/textshaper)
17
- - [License](https://github.com/flighthq/flight/blob/554a2acc3fecf189b89b0729308ff890a15c21cc/LICENSE.md)
16
+ - [Source for @flighthq/textshaper@0.5.1-next.1201.9b49dee](https://github.com/flighthq/flight/tree/9b49dee3f22f6b2838c3d237edcc77bca65734f2/packages/textshaper)
17
+ - [License](https://github.com/flighthq/flight/blob/9b49dee3f22f6b2838c3d237edcc77bca65734f2/LICENSE.md)
@@ -1,4 +1,4 @@
1
- import type { TextShaperBackend } from '@flighthq/types/contract';
2
- export declare let _textShaperBackendHook: ((backend: TextShaperBackend | null) => void) | null;
3
- export declare function _setTextShaperBackendHook(hook: ((backend: TextShaperBackend | null) => void) | null): void;
1
+ import type { HostTextShaperProvider } from '@flighthq/types/contract';
2
+ export declare let _textShaperBackendHook: ((backend: HostTextShaperProvider | null) => void) | null;
3
+ export declare function _setTextShaperBackendHook(hook: ((backend: HostTextShaperProvider | null) => void) | null): void;
4
4
  //# sourceMappingURL=_textShaperHooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_textShaperHooks.d.ts","sourceRoot":"","sources":["../src/_textShaperHooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,IAAI,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAW,CAAC;AAE/F,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE1G"}
1
+ {"version":3,"file":"_textShaperHooks.d.ts","sourceRoot":"","sources":["../src/_textShaperHooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,eAAO,IAAI,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAW,CAAC;AAEpG,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE/G"}
@@ -1 +1 @@
1
- {"version":3,"file":"_textShaperHooks.js","sourceRoot":"","sources":["../src/_textShaperHooks.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,IAAI,sBAAsB,GAAyD,IAAI,CAAC;AAE/F,MAAM,UAAU,yBAAyB,CAAC,IAA0D;IAClG,sBAAsB,GAAG,IAAI,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"_textShaperHooks.js","sourceRoot":"","sources":["../src/_textShaperHooks.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,IAAI,sBAAsB,GAA8D,IAAI,CAAC;AAEpG,MAAM,UAAU,yBAAyB,CAAC,IAA+D;IACvG,sBAAsB,GAAG,IAAI,CAAC;AAChC,CAAC"}
@@ -1,14 +1,14 @@
1
- import type { BackendOperationExplanation, HasTextShaper, TextFormat, TextShaperBackend, TextShaperOperation } from '@flighthq/types/contract';
2
- export declare function explainTextShaperOperation(operation: TextShaperOperation, host?: HasTextShaper): BackendOperationExplanation;
3
- export declare function getTextShaperBackend(host?: HasTextShaper): TextShaperBackend | null;
4
- export declare function hasTextShaperOperation(operation: TextShaperOperation, host?: HasTextShaper): boolean;
5
- export declare function measureText(text: string, format: Readonly<TextFormat>, host?: HasTextShaper): number;
1
+ import type { BackendOperationExplanation, HostTextShaperProvider, TextFormat, TextShaperOperation } from '@flighthq/types/contract';
2
+ export declare function explainTextShaperOperation(operation: TextShaperOperation, hostTextShaper?: Readonly<HostTextShaperProvider>): BackendOperationExplanation;
3
+ export declare function getTextShaperBackend(hostTextShaper?: Readonly<HostTextShaperProvider>): HostTextShaperProvider | null;
4
+ export declare function hasTextShaperOperation(operation: TextShaperOperation, hostTextShaper?: Readonly<HostTextShaperProvider>): boolean;
5
+ export declare function measureText(text: string, format: Readonly<TextFormat>, hostTextShaper?: Readonly<HostTextShaperProvider>): number;
6
6
  /**
7
7
  * Installs the backend used by calls that omit an explicit host; pass null to clear it. Last write
8
8
  * wins and re-registration never throws.
9
9
  *
10
- * @deprecated Pass a HasTextShaper to the text-shaping operation. Retained for source compatibility
11
- * until the legacy global path is removed.
10
+ * @deprecated Pass a HostTextShaperProvider to the text-shaping operation. Retained for source
11
+ * compatibility until the legacy global path is removed.
12
12
  */
13
- export declare function setTextShaperBackend(backend: TextShaperBackend | null): void;
13
+ export declare function setTextShaperBackend(backend: HostTextShaperProvider | null): void;
14
14
  //# sourceMappingURL=textShaper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textShaper.d.ts","sourceRoot":"","sources":["../src/textShaper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,mBAAmB,EAC9B,IAAI,CAAC,EAAE,aAAa,GACnB,2BAA2B,CAM7B;AAKD,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,iBAAiB,GAAG,IAAI,CAEnF;AAID,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAEpG;AAKD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAIpG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAG5E"}
1
+ {"version":3,"file":"textShaper.d.ts","sourceRoot":"","sources":["../src/textShaper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,sBAAsB,EACtB,UAAU,EACV,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,mBAAmB,EAC9B,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,2BAA2B,CAM7B;AAKD,wBAAgB,oBAAoB,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,GAAG,IAAI,CAErH;AAID,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,mBAAmB,EAC9B,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,OAAO,CAET;AAKD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,MAAM,CAIR;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAGjF"}
@@ -1,29 +1,29 @@
1
1
  import { _textShaperBackendHook } from './_textShaperHooks';
2
2
  // Which layer implements `operation`. An explicit host provider wins over the legacy installed
3
3
  // backend. There is no sentinel because this package has no light bundled shaper implementation.
4
- export function explainTextShaperOperation(operation, host) {
5
- const backend = getTextShaperBackend(host);
4
+ export function explainTextShaperOperation(operation, hostTextShaper) {
5
+ const backend = getTextShaperBackend(hostTextShaper);
6
6
  if (backend !== null && typeof backend[operation] === 'function') {
7
- return { implemented: true, layer: host === undefined ? 'custom' : 'host', operation };
7
+ return { implemented: true, layer: hostTextShaper === undefined ? 'custom' : 'host', operation };
8
8
  }
9
9
  return { implemented: false, layer: 'none', operation };
10
10
  }
11
11
  // Returns the explicit host's shaper when supplied, otherwise the legacy installed backend. Unlike
12
12
  // text segmentation, shaping has no light bundled default: the canvas provider needs DOM and font
13
13
  // string computation, so callers must compose it into a host or install it through the legacy path.
14
- export function getTextShaperBackend(host) {
15
- return host?.text.shaper ?? _backend;
14
+ export function getTextShaperBackend(hostTextShaper) {
15
+ return hostTextShaper ?? _backend;
16
16
  }
17
17
  // Whether the selected backend implements `operation`. False when neither an explicit nor legacy
18
18
  // provider supplies it.
19
- export function hasTextShaperOperation(operation, host) {
20
- return explainTextShaperOperation(operation, host).implemented;
19
+ export function hasTextShaperOperation(operation, hostTextShaper) {
20
+ return explainTextShaperOperation(operation, hostTextShaper).implemented;
21
21
  }
22
22
  // Measures `text` in `format` to its horizontal advance, in pixels, via the explicit host or legacy
23
23
  // fallback. Returns the sentinel -1 when neither is available, distinguishing "unmeasurable" from a
24
24
  // real zero-width advance.
25
- export function measureText(text, format, host) {
26
- const backend = getTextShaperBackend(host);
25
+ export function measureText(text, format, hostTextShaper) {
26
+ const backend = getTextShaperBackend(hostTextShaper);
27
27
  if (backend === null)
28
28
  return -1;
29
29
  return backend.measureText(text, format);
@@ -32,8 +32,8 @@ export function measureText(text, format, host) {
32
32
  * Installs the backend used by calls that omit an explicit host; pass null to clear it. Last write
33
33
  * wins and re-registration never throws.
34
34
  *
35
- * @deprecated Pass a HasTextShaper to the text-shaping operation. Retained for source compatibility
36
- * until the legacy global path is removed.
35
+ * @deprecated Pass a HostTextShaperProvider to the text-shaping operation. Retained for source
36
+ * compatibility until the legacy global path is removed.
37
37
  */
38
38
  export function setTextShaperBackend(backend) {
39
39
  _backend = backend;
@@ -1 +1 @@
1
- {"version":3,"file":"textShaper.js","sourceRoot":"","sources":["../src/textShaper.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,+FAA+F;AAC/F,iGAAiG;AACjG,MAAM,UAAU,0BAA0B,CACxC,SAA8B,EAC9B,IAAoB;IAEpB,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,UAAU,EAAE,CAAC;QACjE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IACzF,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC1D,CAAC;AAED,mGAAmG;AACnG,kGAAkG;AAClG,oGAAoG;AACpG,MAAM,UAAU,oBAAoB,CAAC,IAAoB;IACvD,OAAO,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC;AACvC,CAAC;AAED,iGAAiG;AACjG,wBAAwB;AACxB,MAAM,UAAU,sBAAsB,CAAC,SAA8B,EAAE,IAAoB;IACzF,OAAO,0BAA0B,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC;AACjE,CAAC;AAED,oGAAoG;AACpG,oGAAoG;AACpG,2BAA2B;AAC3B,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAA4B,EAAE,IAAoB;IAC1F,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAiC;IACpE,QAAQ,GAAG,OAAO,CAAC;IACnB,sBAAsB,EAAE,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,IAAI,QAAQ,GAA6B,IAAI,CAAC"}
1
+ {"version":3,"file":"textShaper.js","sourceRoot":"","sources":["../src/textShaper.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,+FAA+F;AAC/F,iGAAiG;AACjG,MAAM,UAAU,0BAA0B,CACxC,SAA8B,EAC9B,cAAiD;IAEjD,MAAM,OAAO,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,UAAU,EAAE,CAAC;QACjE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IACnG,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC1D,CAAC;AAED,mGAAmG;AACnG,kGAAkG;AAClG,oGAAoG;AACpG,MAAM,UAAU,oBAAoB,CAAC,cAAiD;IACpF,OAAO,cAAc,IAAI,QAAQ,CAAC;AACpC,CAAC;AAED,iGAAiG;AACjG,wBAAwB;AACxB,MAAM,UAAU,sBAAsB,CACpC,SAA8B,EAC9B,cAAiD;IAEjD,OAAO,0BAA0B,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,WAAW,CAAC;AAC3E,CAAC;AAED,oGAAoG;AACpG,oGAAoG;AACpG,2BAA2B;AAC3B,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,MAA4B,EAC5B,cAAiD;IAEjD,MAAM,OAAO,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAsC;IACzE,QAAQ,GAAG,OAAO,CAAC;IACnB,sBAAsB,EAAE,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,IAAI,QAAQ,GAAkC,IAAI,CAAC"}
@@ -1,7 +1,7 @@
1
- import type { EntityConstruction, HasTextShaper, ShapeRunOptions, ShapedRun, TextFormat, TextShaperCache } from '@flighthq/types/contract';
1
+ import type { EntityConstruction, HostTextShaperProvider, ShapeRunOptions, ShapedRun, TextFormat, TextShaperCache } from '@flighthq/types/contract';
2
2
  export declare function clearTextShaperCache(cache: TextShaperCache): void;
3
3
  export declare function createTextShaperCache(): TextShaperCache;
4
4
  export declare function disposeTextShaperCache(cache: TextShaperCache): void;
5
5
  export declare function initializeTextShaperCache(out: EntityConstruction<TextShaperCache>): void;
6
- export declare function shapeTextRunCached(cache: TextShaperCache, text: string, format: Readonly<TextFormat>, options?: Readonly<ShapeRunOptions>, host?: HasTextShaper): ShapedRun | null;
6
+ export declare function shapeTextRunCached(cache: TextShaperCache, text: string, format: Readonly<TextFormat>, options?: Readonly<ShapeRunOptions>, hostTextShaper?: Readonly<HostTextShaperProvider>): ShapedRun | null;
7
7
  //# sourceMappingURL=textShaperCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textShaperCache.d.ts","sourceRoot":"","sources":["../src/textShaperCache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAElB,aAAa,EACb,eAAe,EACf,SAAS,EACT,UAAU,EAEV,eAAe,EAChB,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEjE;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAIvD;AAKD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAKnE;AAGD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,IAAI,CAGxF;AAOD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,OAAO,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EACnC,IAAI,CAAC,EAAE,aAAa,GACnB,SAAS,GAAG,IAAI,CAWlB"}
1
+ {"version":3,"file":"textShaperCache.d.ts","sourceRoot":"","sources":["../src/textShaperCache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAElB,sBAAsB,EACtB,eAAe,EACf,SAAS,EACT,UAAU,EACV,eAAe,EAChB,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEjE;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAIvD;AAKD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAKnE;AAGD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,IAAI,CAGxF;AAOD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,OAAO,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EACnC,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,SAAS,GAAG,IAAI,CAWlB"}
@@ -33,18 +33,18 @@ export function initializeTextShaperCache(out) {
33
33
  // Returns null when no backend is registered or the backend is advances-only (same as
34
34
  // `shapeTextRun`); null results are NOT cached so a later backend registration can succeed. Cache
35
35
  // keys include provider identity so callers can safely share a cache while interleaving hosts.
36
- export function shapeTextRunCached(cache, text, format, options, host) {
36
+ export function shapeTextRunCached(cache, text, format, options, hostTextShaper) {
37
37
  const runtime = _getTextShaperCacheRuntime(cache);
38
38
  if (runtime === null)
39
39
  return null;
40
- const backend = getTextShaperBackend(host);
40
+ const backend = getTextShaperBackend(hostTextShaper);
41
41
  if (backend === null)
42
42
  return null;
43
43
  const key = `${_getBackendCacheId(backend)}\x00${_makeCacheKey(text, format, options)}`;
44
44
  const existing = runtime.entries.get(key);
45
45
  if (existing !== undefined)
46
46
  return existing;
47
- const result = shapeTextRun(text, format, options, host);
47
+ const result = shapeTextRun(text, format, options, hostTextShaper);
48
48
  if (result !== null)
49
49
  runtime.entries.set(key, result);
50
50
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"textShaperCache.js","sourceRoot":"","sources":["../src/textShaperCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"textShaperCache.js","sourceRoot":"","sources":["../src/textShaperCache.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { HasTextShaper, ShapedRun, TextFormat, TextItem, TextShaperOptions } from '@flighthq/types/contract';
1
+ import type { HostTextShaperProvider, ShapedRun, TextFormat, TextItem, TextShaperOptions } from '@flighthq/types/contract';
2
2
  export declare function itemizeText(text: string, _format: Readonly<TextFormat>, options?: Readonly<TextShaperOptions>): readonly TextItem[];
3
- export declare function shapeTextRuns(text: string, format: Readonly<TextFormat>, options?: Readonly<TextShaperOptions>, host?: HasTextShaper): readonly ShapedRun[];
3
+ export declare function shapeTextRuns(text: string, format: Readonly<TextFormat>, options?: Readonly<TextShaperOptions>, hostTextShaper?: Readonly<HostTextShaperProvider>): readonly ShapedRun[];
4
4
  //# sourceMappingURL=textShaperItemize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textShaperItemize.d.ts","sourceRoot":"","sources":["../src/textShaperItemize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAalH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EAGZ,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GACpC,SAAS,QAAQ,EAAE,CAgDrB;AAQD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACrC,IAAI,CAAC,EAAE,aAAa,GACnB,SAAS,SAAS,EAAE,CAiBtB"}
1
+ {"version":3,"file":"textShaperItemize.d.ts","sourceRoot":"","sources":["../src/textShaperItemize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,QAAQ,EACR,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAalC,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EAGZ,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GACpC,SAAS,QAAQ,EAAE,CAgDrB;AAQD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACrC,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,SAAS,SAAS,EAAE,CAiBtB"}
@@ -70,7 +70,7 @@ _format, options) {
70
70
  //
71
71
  // This is the primary convenience entry point for multi-script strings: `itemizeText` handles the
72
72
  // script/direction split, then `shapeTextRun` produces glyph ids and positions for each sub-run.
73
- export function shapeTextRuns(text, format, options, host) {
73
+ export function shapeTextRuns(text, format, options, hostTextShaper) {
74
74
  if (text.length === 0)
75
75
  return [];
76
76
  const items = itemizeText(text, format, options);
@@ -84,7 +84,7 @@ export function shapeTextRuns(text, format, options, host) {
84
84
  direction: item.direction === 'TopToBottom' ? undefined : item.direction,
85
85
  script: item.script,
86
86
  };
87
- const run = shapeTextRun(sub, format, runOptions, host);
87
+ const run = shapeTextRun(sub, format, runOptions, hostTextShaper);
88
88
  if (run !== null)
89
89
  result.push(run);
90
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"textShaperItemize.js","sourceRoot":"","sources":["../src/textShaperItemize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"textShaperItemize.js","sourceRoot":"","sources":["../src/textShaperItemize.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
- import type { Entity, EntityConstruction, FontMetrics, GlyphExtents, HasTextShaper, ShapeRunOptions, ShapedRun, TextFormat } from '@flighthq/types/contract';
1
+ import type { Entity, EntityConstruction, FontMetrics, GlyphExtents, HostTextShaperProvider, ShapeRunOptions, ShapedRun, TextFormat } from '@flighthq/types/contract';
2
2
  export declare function clearShapedRun(run: ShapedRun): ShapedRun;
3
3
  export declare function createShapedRun(): ShapedRun & Entity;
4
- export declare function getCodePointForGlyph(glyphId: number, _format: Readonly<TextFormat>, host?: HasTextShaper): number;
5
- export declare function getFontMetrics(format: Readonly<TextFormat>, host?: HasTextShaper): FontMetrics | null;
6
- export declare function getFontMetricsInto(format: Readonly<TextFormat>, out: FontMetrics, host?: HasTextShaper): boolean;
7
- export declare function getFontUnitScale(format: Readonly<TextFormat>, host?: HasTextShaper): number;
8
- export declare function getGlyphExtents(glyphId: number, _format: Readonly<TextFormat>, host?: HasTextShaper): GlyphExtents | null;
9
- export declare function getGlyphExtentsBatch(glyphIds: ReadonlyArray<number>, _format: Readonly<TextFormat>, out: GlyphExtents[], host?: HasTextShaper): number;
10
- export declare function getGlyphExtentsInto(glyphId: number, _format: Readonly<TextFormat>, out: GlyphExtents, host?: HasTextShaper): boolean;
11
- export declare function getGlyphIndexForCodePoint(codePoint: number, _format: Readonly<TextFormat>, host?: HasTextShaper): number;
12
- export declare function getGlyphName(glyphId: number, _format: Readonly<TextFormat>, host?: HasTextShaper): string;
4
+ export declare function getCodePointForGlyph(glyphId: number, _format: Readonly<TextFormat>, hostTextShaper?: Readonly<HostTextShaperProvider>): number;
5
+ export declare function getFontMetrics(format: Readonly<TextFormat>, hostTextShaper?: Readonly<HostTextShaperProvider>): FontMetrics | null;
6
+ export declare function getFontMetricsInto(format: Readonly<TextFormat>, out: FontMetrics, hostTextShaper?: Readonly<HostTextShaperProvider>): boolean;
7
+ export declare function getFontUnitScale(format: Readonly<TextFormat>, hostTextShaper?: Readonly<HostTextShaperProvider>): number;
8
+ export declare function getGlyphExtents(glyphId: number, _format: Readonly<TextFormat>, hostTextShaper?: Readonly<HostTextShaperProvider>): GlyphExtents | null;
9
+ export declare function getGlyphExtentsBatch(glyphIds: ReadonlyArray<number>, _format: Readonly<TextFormat>, out: GlyphExtents[], hostTextShaper?: Readonly<HostTextShaperProvider>): number;
10
+ export declare function getGlyphExtentsInto(glyphId: number, _format: Readonly<TextFormat>, out: GlyphExtents, hostTextShaper?: Readonly<HostTextShaperProvider>): boolean;
11
+ export declare function getGlyphIndexForCodePoint(codePoint: number, _format: Readonly<TextFormat>, hostTextShaper?: Readonly<HostTextShaperProvider>): number;
12
+ export declare function getGlyphName(glyphId: number, _format: Readonly<TextFormat>, hostTextShaper?: Readonly<HostTextShaperProvider>): string;
13
13
  export declare function initializeShapedRun(out: EntityConstruction<ShapedRun & Entity>): void;
14
- export declare function shapeTextRun(text: string, format: Readonly<TextFormat>, options?: ShapeRunOptions, host?: HasTextShaper): ShapedRun | null;
15
- export declare function shapeTextRunInto(text: string, format: Readonly<TextFormat>, out: ShapedRun, options?: ShapeRunOptions, host?: HasTextShaper): boolean;
14
+ export declare function shapeTextRun(text: string, format: Readonly<TextFormat>, options?: ShapeRunOptions, hostTextShaper?: Readonly<HostTextShaperProvider>): ShapedRun | null;
15
+ export declare function shapeTextRunInto(text: string, format: Readonly<TextFormat>, out: ShapedRun, options?: ShapeRunOptions, hostTextShaper?: Readonly<HostTextShaperProvider>): boolean;
16
16
  //# sourceMappingURL=textShaperRun.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textShaperRun.d.ts","sourceRoot":"","sources":["../src/textShaperRun.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,eAAe,EACf,SAAS,EACT,UAAU,EACX,MAAM,0BAA0B,CAAC;AAIlC,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAQxD;AAED,wBAAgB,eAAe,IAAI,SAAS,GAAG,MAAM,CAIpD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAIjH;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,IAAI,CAIrG;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAYhH;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAK3F;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,IAAI,CAAC,EAAE,aAAa,GACnB,YAAY,GAAG,IAAI,CAIrB;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,GAAG,EAAE,YAAY,EAAE,EACnB,IAAI,CAAC,EAAE,aAAa,GACnB,MAAM,CAcR;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,GAAG,EAAE,YAAY,EACjB,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAQT;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,IAAI,CAAC,EAAE,aAAa,GACnB,MAAM,CAIR;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAIzG;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,IAAI,CAOrF;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,OAAO,CAAC,EAAE,eAAe,EACzB,IAAI,CAAC,EAAE,aAAa,GACnB,SAAS,GAAG,IAAI,CAIlB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,GAAG,EAAE,SAAS,EACd,OAAO,CAAC,EAAE,eAAe,EACzB,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAgBT"}
1
+ {"version":3,"file":"textShaperRun.d.ts","sourceRoot":"","sources":["../src/textShaperRun.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,SAAS,EACT,UAAU,EACX,MAAM,0BAA0B,CAAC;AAIlC,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAQxD;AAED,wBAAgB,eAAe,IAAI,SAAS,GAAG,MAAM,CAIpD;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,MAAM,CAIR;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,WAAW,GAAG,IAAI,CAIpB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,GAAG,EAAE,WAAW,EAChB,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,OAAO,CAYT;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,MAAM,CAKR;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,YAAY,GAAG,IAAI,CAIrB;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,GAAG,EAAE,YAAY,EAAE,EACnB,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,MAAM,CAcR;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,GAAG,EAAE,YAAY,EACjB,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,OAAO,CAQT;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,MAAM,CAIR;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,MAAM,CAIR;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,IAAI,CAOrF;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,OAAO,CAAC,EAAE,eAAe,EACzB,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,SAAS,GAAG,IAAI,CAIlB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,GAAG,EAAE,SAAS,EACd,OAAO,CAAC,EAAE,eAAe,EACzB,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAChD,OAAO,CAgBT"}
@@ -14,20 +14,20 @@ export function createShapedRun() {
14
14
  initializeShapedRun(out);
15
15
  return finishEntity(out);
16
16
  }
17
- export function getCodePointForGlyph(glyphId, _format, host) {
18
- const backend = getTextShaperBackend(host);
17
+ export function getCodePointForGlyph(glyphId, _format, hostTextShaper) {
18
+ const backend = getTextShaperBackend(hostTextShaper);
19
19
  if (backend === null || !backend.getCodePointForGlyph)
20
20
  return -1;
21
21
  return backend.getCodePointForGlyph(glyphId);
22
22
  }
23
- export function getFontMetrics(format, host) {
24
- const backend = getTextShaperBackend(host);
23
+ export function getFontMetrics(format, hostTextShaper) {
24
+ const backend = getTextShaperBackend(hostTextShaper);
25
25
  if (backend === null || !backend.getFontMetrics)
26
26
  return null;
27
27
  return backend.getFontMetrics(format);
28
28
  }
29
- export function getFontMetricsInto(format, out, host) {
30
- const metrics = getFontMetrics(format, host);
29
+ export function getFontMetricsInto(format, out, hostTextShaper) {
30
+ const metrics = getFontMetrics(format, hostTextShaper);
31
31
  if (metrics === null)
32
32
  return false;
33
33
  out.ascent = metrics.ascent;
@@ -40,21 +40,21 @@ export function getFontMetricsInto(format, out, host) {
40
40
  out.xHeight = metrics.xHeight;
41
41
  return true;
42
42
  }
43
- export function getFontUnitScale(format, host) {
44
- const metrics = getFontMetrics(format, host);
43
+ export function getFontUnitScale(format, hostTextShaper) {
44
+ const metrics = getFontMetrics(format, hostTextShaper);
45
45
  if (metrics === null)
46
46
  return -1;
47
47
  const size = format.size ?? 12;
48
48
  return size / metrics.unitsPerEm;
49
49
  }
50
- export function getGlyphExtents(glyphId, _format, host) {
51
- const backend = getTextShaperBackend(host);
50
+ export function getGlyphExtents(glyphId, _format, hostTextShaper) {
51
+ const backend = getTextShaperBackend(hostTextShaper);
52
52
  if (backend === null || !backend.getGlyphExtents)
53
53
  return null;
54
54
  return backend.getGlyphExtents(glyphId);
55
55
  }
56
- export function getGlyphExtentsBatch(glyphIds, _format, out, host) {
57
- const backend = getTextShaperBackend(host);
56
+ export function getGlyphExtentsBatch(glyphIds, _format, out, hostTextShaper) {
57
+ const backend = getTextShaperBackend(hostTextShaper);
58
58
  if (backend === null || !backend.getGlyphExtents)
59
59
  return 0;
60
60
  let resolved = 0;
@@ -70,8 +70,8 @@ export function getGlyphExtentsBatch(glyphIds, _format, out, host) {
70
70
  }
71
71
  return resolved;
72
72
  }
73
- export function getGlyphExtentsInto(glyphId, _format, out, host) {
74
- const extents = getGlyphExtents(glyphId, _format, host);
73
+ export function getGlyphExtentsInto(glyphId, _format, out, hostTextShaper) {
74
+ const extents = getGlyphExtents(glyphId, _format, hostTextShaper);
75
75
  if (extents === null)
76
76
  return false;
77
77
  out.height = extents.height;
@@ -80,14 +80,14 @@ export function getGlyphExtentsInto(glyphId, _format, out, host) {
80
80
  out.yBearing = extents.yBearing;
81
81
  return true;
82
82
  }
83
- export function getGlyphIndexForCodePoint(codePoint, _format, host) {
84
- const backend = getTextShaperBackend(host);
83
+ export function getGlyphIndexForCodePoint(codePoint, _format, hostTextShaper) {
84
+ const backend = getTextShaperBackend(hostTextShaper);
85
85
  if (backend === null || !backend.getGlyphIndexForCodePoint)
86
86
  return -1;
87
87
  return backend.getGlyphIndexForCodePoint(codePoint);
88
88
  }
89
- export function getGlyphName(glyphId, _format, host) {
90
- const backend = getTextShaperBackend(host);
89
+ export function getGlyphName(glyphId, _format, hostTextShaper) {
90
+ const backend = getTextShaperBackend(hostTextShaper);
91
91
  if (backend === null || !backend.getGlyphName)
92
92
  return '';
93
93
  return backend.getGlyphName(glyphId);
@@ -100,14 +100,14 @@ export function initializeShapedRun(out) {
100
100
  out.glyphs = [];
101
101
  out.script = '';
102
102
  }
103
- export function shapeTextRun(text, format, options, host) {
104
- const backend = getTextShaperBackend(host);
103
+ export function shapeTextRun(text, format, options, hostTextShaper) {
104
+ const backend = getTextShaperBackend(hostTextShaper);
105
105
  if (backend === null || !backend.shapeRun)
106
106
  return null;
107
107
  return backend.shapeRun(text, format, options);
108
108
  }
109
- export function shapeTextRunInto(text, format, out, options, host) {
110
- const backend = getTextShaperBackend(host);
109
+ export function shapeTextRunInto(text, format, out, options, hostTextShaper) {
110
+ const backend = getTextShaperBackend(hostTextShaper);
111
111
  if (backend === null || !backend.shapeRun)
112
112
  return false;
113
113
  const result = backend.shapeRun(text, format, options);
@@ -1 +1 @@
1
- {"version":3,"file":"textShaperRun.js","sourceRoot":"","sources":["../src/textShaperRun.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"textShaperRun.js","sourceRoot":"","sources":["../src/textShaperRun.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"textShaperSignals.d.ts","sourceRoot":"","sources":["../src/textShaperSignals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAqB,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIzG,wBAAgB,wBAAwB,IAAI,IAAI,CAK/C;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,CAa3D;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAE/D;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAE5F"}
1
+ {"version":3,"file":"textShaperSignals.d.ts","sourceRoot":"","sources":["../src/textShaperSignals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAA0B,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI9G,wBAAgB,wBAAwB,IAAI,IAAI,CAK/C;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,CAa3D;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAE/D;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAE5F"}
@@ -1 +1 @@
1
- {"version":3,"file":"textShaperSignals.js","sourceRoot":"","sources":["../src/textShaperSignals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,UAAU,wBAAwB;IACtC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO;IAC9B,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACvC,QAAQ,GAAG,IAAI,CAAC;IAChB,yBAAyB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACvC,QAAQ,GAAG,CAAC,GAAG,EAAE;QACf,MAAM,GAAG,GAAG,cAAc,EAAqB,CAAC;QAChD,2BAA2B,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,EAAE,CAAC;IACL,yBAAyB,CAAC,CAAC,OAAO,EAAE,EAAE;QACpC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAA0C;IACpF,GAAG,CAAC,gBAAgB,GAAG,YAAY,EAA+C,CAAC;AACrF,CAAC;AAED,IAAI,QAAQ,GAA6B,IAAI,CAAC"}
1
+ {"version":3,"file":"textShaperSignals.js","sourceRoot":"","sources":["../src/textShaperSignals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,UAAU,wBAAwB;IACtC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO;IAC9B,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACvC,QAAQ,GAAG,IAAI,CAAC;IAChB,yBAAyB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACvC,QAAQ,GAAG,CAAC,GAAG,EAAE;QACf,MAAM,GAAG,GAAG,cAAc,EAAqB,CAAC;QAChD,2BAA2B,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,EAAE,CAAC;IACL,yBAAyB,CAAC,CAAC,OAAO,EAAE,EAAE;QACpC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAA0C;IACpF,GAAG,CAAC,gBAAgB,GAAG,YAAY,EAAoD,CAAC;AAC1F,CAAC;AAED,IAAI,QAAQ,GAA6B,IAAI,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/textshaper",
3
- "version": "0.5.1-next.1069.554a2ac",
3
+ "version": "0.5.1-next.1201.9b49dee",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,10 +38,10 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/entity": "0.5.1-next.1069.554a2ac",
42
- "@flighthq/log": "0.5.1-next.1069.554a2ac",
43
- "@flighthq/signals": "0.5.1-next.1069.554a2ac",
44
- "@flighthq/types": "0.5.1-next.1069.554a2ac"
41
+ "@flighthq/entity": "0.5.1-next.1201.9b49dee",
42
+ "@flighthq/log": "0.5.1-next.1201.9b49dee",
43
+ "@flighthq/signals": "0.5.1-next.1201.9b49dee",
44
+ "@flighthq/types": "0.5.1-next.1201.9b49dee"
45
45
  },
46
46
  "devDependencies": {
47
47
  "typescript": "^5.3.0"
@@ -1,9 +1,9 @@
1
- import type { TextShaperBackend } from '@flighthq/types/contract';
1
+ import type { HostTextShaperProvider } from '@flighthq/types/contract';
2
2
 
3
3
  import { _setTextShaperBackendHook, _textShaperBackendHook } from './_textShaperHooks';
4
4
  import { setTextShaperBackend } from './textShaper';
5
5
 
6
- const _testBackend: TextShaperBackend = {
6
+ const _testBackend: HostTextShaperProvider = {
7
7
  measureText: (text) => text.length,
8
8
  };
9
9
 
@@ -15,7 +15,7 @@ afterEach(() => {
15
15
 
16
16
  describe('_setTextShaperBackendHook', () => {
17
17
  it('installs the hook so setTextShaperBackend invokes it with the new backend', () => {
18
- let received: TextShaperBackend | null = _testBackend;
18
+ let received: HostTextShaperProvider | null = _testBackend;
19
19
  let calls = 0;
20
20
  _setTextShaperBackendHook((backend) => {
21
21
  received = backend;
@@ -27,7 +27,7 @@ describe('_setTextShaperBackendHook', () => {
27
27
  });
28
28
 
29
29
  it('passes null through to the hook when the backend is cleared', () => {
30
- let received: TextShaperBackend | null = _testBackend;
30
+ let received: HostTextShaperProvider | null = _testBackend;
31
31
  _setTextShaperBackendHook((backend) => {
32
32
  received = backend;
33
33
  });
@@ -1,4 +1,4 @@
1
- import type { HasTextShaper, TextFormat, TextShaperBackend, TextShaperOperation } from '@flighthq/types/contract';
1
+ import type { HostTextShaperProvider, TextFormat, TextShaperOperation } from '@flighthq/types/contract';
2
2
 
3
3
  import {
4
4
  explainTextShaperOperation,
@@ -36,15 +36,15 @@ describe('explainTextShaperOperation', () => {
36
36
 
37
37
  it('reports an operation the backend does provide', () => {
38
38
  const operation = OPTIONAL_OPERATIONS[0];
39
- setTextShaperBackend({ ...partialBackend(), [operation]: () => undefined } as TextShaperBackend);
39
+ setTextShaperBackend({ ...partialBackend(), [operation]: () => undefined } as HostTextShaperProvider);
40
40
  expect(explainTextShaperOperation(operation)).toEqual({ implemented: true, layer: 'custom', operation });
41
41
  });
42
42
 
43
43
  it('reports an explicitly supplied provider as the host layer', () => {
44
44
  const operation = OPTIONAL_OPERATIONS[0];
45
- const backend = { ...partialBackend(), [operation]: () => undefined } as TextShaperBackend;
45
+ const backend = { ...partialBackend(), [operation]: () => undefined } as HostTextShaperProvider;
46
46
  setTextShaperBackend(partialBackend());
47
- expect(explainTextShaperOperation(operation, shaperHost(backend))).toEqual({
47
+ expect(explainTextShaperOperation(operation, shaperHost(backend).text.shaper)).toEqual({
48
48
  implemented: true,
49
49
  layer: 'host',
50
50
  operation,
@@ -54,10 +54,10 @@ describe('explainTextShaperOperation', () => {
54
54
 
55
55
  describe('getTextShaperBackend', () => {
56
56
  it('returns an explicit host provider ahead of the legacy backend', () => {
57
- const legacy: TextShaperBackend = { measureText: () => 1 };
58
- const explicit: TextShaperBackend = { measureText: () => 2 };
57
+ const legacy: HostTextShaperProvider = { measureText: () => 1 };
58
+ const explicit: HostTextShaperProvider = { measureText: () => 2 };
59
59
  setTextShaperBackend(legacy);
60
- expect(getTextShaperBackend(shaperHost(explicit))).toBe(explicit);
60
+ expect(getTextShaperBackend(shaperHost(explicit).text.shaper)).toBe(explicit);
61
61
  });
62
62
 
63
63
  it('returns null before a backend is set', () => {
@@ -93,21 +93,21 @@ const OPTIONAL_OPERATIONS: readonly TextShaperOperation[] = [
93
93
  describe('measureText', () => {
94
94
  it('accepts an optional explicit shaper host without breaking the existing signature', () => {
95
95
  expectTypeOf(measureText).toEqualTypeOf<
96
- (text: string, format: Readonly<TextFormat>, host?: HasTextShaper) => number
96
+ (text: string, format: Readonly<TextFormat>, hostTextShaper?: Readonly<HostTextShaperProvider>) => number
97
97
  >();
98
98
  });
99
99
 
100
100
  it('gives an explicit host precedence over the legacy installed backend', () => {
101
101
  setTextShaperBackend({ measureText: () => 99 });
102
- expect(measureText('abc', {}, shaperHost({ measureText: (text) => text.length }))).toBe(3);
102
+ expect(measureText('abc', {}, shaperHost({ measureText: (text) => text.length }).text.shaper)).toBe(3);
103
103
  });
104
104
 
105
105
  it('isolates callers that interleave different explicit hosts', () => {
106
106
  const first = shaperHost({ measureText: () => 1 });
107
107
  const second = shaperHost({ measureText: () => 2 });
108
- expect(measureText('x', {}, first)).toBe(1);
109
- expect(measureText('x', {}, second)).toBe(2);
110
- expect(measureText('x', {}, first)).toBe(1);
108
+ expect(measureText('x', {}, first.text.shaper)).toBe(1);
109
+ expect(measureText('x', {}, second.text.shaper)).toBe(2);
110
+ expect(measureText('x', {}, first.text.shaper)).toBe(1);
111
111
  });
112
112
 
113
113
  it('returns -1 when no backend is registered', () => {
@@ -122,7 +122,7 @@ describe('measureText', () => {
122
122
 
123
123
  describe('setTextShaperBackend', () => {
124
124
  it('stores the backend and clears it with null', () => {
125
- const backend: TextShaperBackend = { measureText: (text) => text.length };
125
+ const backend: HostTextShaperProvider = { measureText: (text) => text.length };
126
126
  setTextShaperBackend(backend);
127
127
  expect(getTextShaperBackend()).toBe(backend);
128
128
  setTextShaperBackend(null);
@@ -130,8 +130,8 @@ describe('setTextShaperBackend', () => {
130
130
  });
131
131
 
132
132
  it('replaces an existing backend (last write wins, no throw)', () => {
133
- const first: TextShaperBackend = { measureText: () => 1 };
134
- const second: TextShaperBackend = { measureText: () => 2 };
133
+ const first: HostTextShaperProvider = { measureText: () => 1 };
134
+ const second: HostTextShaperProvider = { measureText: () => 2 };
135
135
  setTextShaperBackend(first);
136
136
  setTextShaperBackend(second);
137
137
  expect(getTextShaperBackend()).toBe(second);
@@ -139,12 +139,12 @@ describe('setTextShaperBackend', () => {
139
139
  });
140
140
 
141
141
  // A host implementing only the REQUIRED members — partial support declared by absence.
142
- function partialBackend(): TextShaperBackend {
142
+ function partialBackend(): HostTextShaperProvider {
143
143
  return {
144
144
  measureText: (() => undefined) as never,
145
- } as TextShaperBackend;
145
+ } as HostTextShaperProvider;
146
146
  }
147
147
 
148
- function shaperHost(shaper: TextShaperBackend): HasTextShaper {
148
+ function shaperHost(shaper: HostTextShaperProvider): { readonly text: { readonly shaper: HostTextShaperProvider } } {
149
149
  return { text: { shaper } };
150
150
  }
@@ -1,4 +1,4 @@
1
- import type { HasTextShaper, ShapedRun, TextShaperBackend } from '@flighthq/types/contract';
1
+ import type { HostTextShaperProvider, ShapedRun } from '@flighthq/types/contract';
2
2
 
3
3
  import { setTextShaperBackend } from './textShaper';
4
4
  import {
@@ -18,7 +18,7 @@ const _stubRun: ShapedRun = {
18
18
  script: 'Latn',
19
19
  };
20
20
 
21
- function _makeCountingBackend(): { backend: TextShaperBackend; readonly calls: number } {
21
+ function _makeCountingBackend(): { backend: HostTextShaperProvider; readonly calls: number } {
22
22
  let calls = 0;
23
23
  return {
24
24
  backend: {
@@ -91,7 +91,7 @@ describe('initializeTextShaperCache', () => {
91
91
  });
92
92
  });
93
93
 
94
- function _hostWithAdvance(advanceWidth: number): HasTextShaper {
94
+ function _hostWithAdvance(advanceWidth: number): { readonly text: { readonly shaper: HostTextShaperProvider } } {
95
95
  return {
96
96
  text: {
97
97
  shaper: {
@@ -106,9 +106,9 @@ describe('shapeTextRunCached', () => {
106
106
  const cache = createTextShaperCache();
107
107
  const first = _hostWithAdvance(1);
108
108
  const second = _hostWithAdvance(2);
109
- expect(shapeTextRunCached(cache, 'hi', {}, undefined, first)?.advanceWidth).toBe(1);
110
- expect(shapeTextRunCached(cache, 'hi', {}, undefined, second)?.advanceWidth).toBe(2);
111
- expect(shapeTextRunCached(cache, 'hi', {}, undefined, first)?.advanceWidth).toBe(1);
109
+ expect(shapeTextRunCached(cache, 'hi', {}, undefined, first.text.shaper)?.advanceWidth).toBe(1);
110
+ expect(shapeTextRunCached(cache, 'hi', {}, undefined, second.text.shaper)?.advanceWidth).toBe(2);
111
+ expect(shapeTextRunCached(cache, 'hi', {}, undefined, first.text.shaper)?.advanceWidth).toBe(1);
112
112
  });
113
113
 
114
114
  it('returns null when no backend is set', () => {
@@ -1,4 +1,4 @@
1
- import type { HasTextShaper, ShapedRun, ShapeRunOptions, TextFormat } from '@flighthq/types/contract';
1
+ import type { HostTextShaperProvider, ShapedRun, ShapeRunOptions, TextFormat } from '@flighthq/types/contract';
2
2
 
3
3
  import { setTextShaperBackend } from './textShaper';
4
4
  import { itemizeText, shapeTextRuns } from './textShaperItemize';
@@ -79,9 +79,11 @@ describe('itemizeText', () => {
79
79
 
80
80
  describe('shapeTextRuns', () => {
81
81
  it('threads an explicit host to every shaped item', () => {
82
- const host: HasTextShaper = { text: { shaper: _makeShapingBackend() } };
82
+ const host: { readonly text: { readonly shaper: HostTextShaperProvider } } = {
83
+ text: { shaper: _makeShapingBackend() },
84
+ };
83
85
  setTextShaperBackend({ measureText: () => 0 });
84
- expect(shapeTextRuns('ABسلام', {}, undefined, host)).toHaveLength(2);
86
+ expect(shapeTextRuns('ABسلام', {}, undefined, host.text.shaper)).toHaveLength(2);
85
87
  });
86
88
 
87
89
  it('returns empty array for empty string', () => {
@@ -1,4 +1,4 @@
1
- import type { FontMetrics, GlyphExtents, HasTextShaper, ShapedRun, TextShaperBackend } from '@flighthq/types/contract';
1
+ import type { FontMetrics, GlyphExtents, HostTextShaperProvider, ShapedRun } from '@flighthq/types/contract';
2
2
 
3
3
  import { setTextShaperBackend } from './textShaper';
4
4
  import {
@@ -45,7 +45,7 @@ const _testMetrics: FontMetrics = {
45
45
 
46
46
  const _testExtents: GlyphExtents = { height: 10, width: 6, xBearing: 0, yBearing: -8 };
47
47
 
48
- function _makeFullBackend(): TextShaperBackend {
48
+ function _makeFullBackend(): HostTextShaperProvider {
49
49
  return {
50
50
  // Code point 65 ('A') maps to glyph 10 and back; everything else is unknown.
51
51
  getCodePointForGlyph: (id) => (id === 10 ? 65 : -1),
@@ -299,8 +299,10 @@ describe('initializeShapedRun', () => {
299
299
  describe('shapeTextRun', () => {
300
300
  it('uses the explicitly supplied host instead of the legacy installed backend', () => {
301
301
  setTextShaperBackend({ measureText: () => 0 });
302
- const host: HasTextShaper = { text: { shaper: _makeFullBackend() } };
303
- expect(shapeTextRun('ab', {}, undefined, host)?.glyphCount).toBe(2);
302
+ const host: { readonly text: { readonly shaper: HostTextShaperProvider } } = {
303
+ text: { shaper: _makeFullBackend() },
304
+ };
305
+ expect(shapeTextRun('ab', {}, undefined, host.text.shaper)?.glyphCount).toBe(2);
304
306
  });
305
307
 
306
308
  it('returns null when no backend is set', () => {
@@ -1,4 +1,4 @@
1
- import type { TextShaperBackend } from '@flighthq/types/contract';
1
+ import type { HostTextShaperProvider } from '@flighthq/types/contract';
2
2
 
3
3
  import { setTextShaperBackend } from './textShaper';
4
4
  import {
@@ -8,8 +8,8 @@ import {
8
8
  initializeTextShaperSignals,
9
9
  } from './textShaperSignals';
10
10
 
11
- const _stubBackend: TextShaperBackend = { measureText: () => 0 };
12
- const _stubBackend2: TextShaperBackend = { measureText: () => 1 };
11
+ const _stubBackend: HostTextShaperProvider = { measureText: () => 0 };
12
+ const _stubBackend2: HostTextShaperProvider = { measureText: () => 1 };
13
13
 
14
14
  afterEach(() => {
15
15
  disposeTextShaperSignals();
@@ -69,14 +69,14 @@ describe('initializeTextShaperSignals', () => {
69
69
  describe('setTextShaperBackend', () => {
70
70
  it('emits onBackendChanged with the new backend when signals are enabled', () => {
71
71
  const sigs = enableTextShaperSignals();
72
- const received: (TextShaperBackend | null)[] = [];
72
+ const received: (HostTextShaperProvider | null)[] = [];
73
73
  sigs.onBackendChanged.emit = (b) => received.push(b);
74
74
  setTextShaperBackend(_stubBackend);
75
75
  expect(received).toEqual([_stubBackend]);
76
76
  });
77
77
  it('emits onBackendChanged with null when cleared', () => {
78
78
  const sigs = enableTextShaperSignals();
79
- const received: (TextShaperBackend | null)[] = [];
79
+ const received: (HostTextShaperProvider | null)[] = [];
80
80
  sigs.onBackendChanged.emit = (b) => received.push(b);
81
81
  setTextShaperBackend(_stubBackend);
82
82
  setTextShaperBackend(null);