@grahlnn/comps 0.1.1 → 0.1.3
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.js
CHANGED
|
@@ -2355,7 +2355,13 @@ function hasUnsupportedPretextMorphFeatures(text, layoutContext) {
|
|
|
2355
2355
|
return false;
|
|
2356
2356
|
}
|
|
2357
2357
|
function shouldProbePretextMorph(text, layoutContext) {
|
|
2358
|
-
|
|
2358
|
+
if (layoutContext.whiteSpace !== "nowrap") {
|
|
2359
|
+
return true;
|
|
2360
|
+
}
|
|
2361
|
+
if (PROBE_COMPLEX_WHITESPACE_RE.test(text)) {
|
|
2362
|
+
return true;
|
|
2363
|
+
}
|
|
2364
|
+
return PROBE_SYSTEM_UI_RE.test(layoutContext.font);
|
|
2359
2365
|
}
|
|
2360
2366
|
function getPretextMorphRenderedText(text, layoutContext) {
|
|
2361
2367
|
if (layoutContext === null) {
|
|
@@ -2383,6 +2389,24 @@ function getPretextMorphStyleSignature(layoutContext) {
|
|
|
2383
2389
|
engineProfile.preferEarlySoftHyphenBreak ? "1" : "0"
|
|
2384
2390
|
].join("\x00");
|
|
2385
2391
|
}
|
|
2392
|
+
function getPretextMorphTrustSignature({
|
|
2393
|
+
renderText,
|
|
2394
|
+
layoutContext,
|
|
2395
|
+
useContentInlineSize
|
|
2396
|
+
}) {
|
|
2397
|
+
if (layoutContext === null) {
|
|
2398
|
+
return null;
|
|
2399
|
+
}
|
|
2400
|
+
const styleSignature = getPretextMorphStyleSignature(layoutContext);
|
|
2401
|
+
if (styleSignature === null) {
|
|
2402
|
+
return null;
|
|
2403
|
+
}
|
|
2404
|
+
let inlineSizeSignature = layoutContext.width.toFixed(2);
|
|
2405
|
+
if (useContentInlineSize) {
|
|
2406
|
+
inlineSizeSignature = "content";
|
|
2407
|
+
}
|
|
2408
|
+
return [styleSignature, inlineSizeSignature, renderText].join("\x00");
|
|
2409
|
+
}
|
|
2386
2410
|
function getPretextMorphMeasurementBackend(text, layoutContext) {
|
|
2387
2411
|
if (layoutContext === null) {
|
|
2388
2412
|
return "dom";
|
|
@@ -2499,6 +2523,7 @@ var MORPH = {
|
|
|
2499
2523
|
maxFadeMs: 150,
|
|
2500
2524
|
ease: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
2501
2525
|
geometryEpsilon: 0.5,
|
|
2526
|
+
contentWidthLockEpsilon: 2,
|
|
2502
2527
|
lineGroupingEpsilon: 1
|
|
2503
2528
|
};
|
|
2504
2529
|
var MORPH_SEGMENT_CACHE_LIMIT = 256;
|
|
@@ -3043,12 +3068,16 @@ function readRootOrigin(node) {
|
|
|
3043
3068
|
const rect = node.getBoundingClientRect();
|
|
3044
3069
|
return { left: rect.left, top: rect.top };
|
|
3045
3070
|
}
|
|
3046
|
-
function getTrustedPretextMeasurementBackend(text, layoutContext) {
|
|
3071
|
+
function getTrustedPretextMeasurementBackend(text, renderText, layoutContext, useContentInlineSize) {
|
|
3047
3072
|
const backend = getPretextMorphMeasurementBackend(text, layoutContext);
|
|
3048
3073
|
if (backend !== "probe") {
|
|
3049
3074
|
return backend;
|
|
3050
3075
|
}
|
|
3051
|
-
const signature =
|
|
3076
|
+
const signature = getPretextMorphTrustSignature({
|
|
3077
|
+
renderText,
|
|
3078
|
+
layoutContext,
|
|
3079
|
+
useContentInlineSize
|
|
3080
|
+
});
|
|
3052
3081
|
if (signature === null) {
|
|
3053
3082
|
return "dom";
|
|
3054
3083
|
}
|
|
@@ -3071,7 +3100,7 @@ function shouldMeasureUsingContentInlineSize(layoutContext, layoutHint) {
|
|
|
3071
3100
|
if (layoutHint === null || !isSingleLineSnapshot(layoutHint.snapshot)) {
|
|
3072
3101
|
return false;
|
|
3073
3102
|
}
|
|
3074
|
-
return nearlyEqual(layoutHint.layoutInlineSize, layoutHint.snapshot.width);
|
|
3103
|
+
return nearlyEqual(layoutHint.layoutInlineSize, layoutHint.snapshot.width, MORPH.contentWidthLockEpsilon);
|
|
3075
3104
|
}
|
|
3076
3105
|
function createMorphMeasurementRequest({
|
|
3077
3106
|
text,
|
|
@@ -3083,7 +3112,7 @@ function createMorphMeasurementRequest({
|
|
|
3083
3112
|
}
|
|
3084
3113
|
const renderText = getPretextMorphRenderedText(text, layoutContext);
|
|
3085
3114
|
const useContentInlineSize = shouldMeasureUsingContentInlineSize(layoutContext, layoutHint);
|
|
3086
|
-
const measurementBackend = getTrustedPretextMeasurementBackend(text, layoutContext);
|
|
3115
|
+
const measurementBackend = getTrustedPretextMeasurementBackend(text, renderText, layoutContext, useContentInlineSize);
|
|
3087
3116
|
let segments = readCachedMorphSegments(renderText);
|
|
3088
3117
|
if (measurementBackend === "pretext") {
|
|
3089
3118
|
segments = EMPTY_SEGMENTS;
|
|
@@ -3101,8 +3130,17 @@ function createMorphMeasurementRequest({
|
|
|
3101
3130
|
domMeasurementKey
|
|
3102
3131
|
};
|
|
3103
3132
|
}
|
|
3104
|
-
function rememberPretextMeasurementTrust(
|
|
3105
|
-
|
|
3133
|
+
function rememberPretextMeasurementTrust({
|
|
3134
|
+
renderText,
|
|
3135
|
+
layoutContext,
|
|
3136
|
+
useContentInlineSize,
|
|
3137
|
+
trusted
|
|
3138
|
+
}) {
|
|
3139
|
+
const signature = getPretextMorphTrustSignature({
|
|
3140
|
+
renderText,
|
|
3141
|
+
layoutContext,
|
|
3142
|
+
useContentInlineSize
|
|
3143
|
+
});
|
|
3106
3144
|
if (signature === null) {
|
|
3107
3145
|
return;
|
|
3108
3146
|
}
|
|
@@ -3166,7 +3204,12 @@ function measureFromNodes({
|
|
|
3166
3204
|
}
|
|
3167
3205
|
if (measurementBackend === "probe" && pretextSnapshot !== null && domSnapshot !== null) {
|
|
3168
3206
|
const trusted = areSnapshotsEquivalentForPretextTrust(pretextSnapshot, domSnapshot);
|
|
3169
|
-
rememberPretextMeasurementTrust(
|
|
3207
|
+
rememberPretextMeasurementTrust({
|
|
3208
|
+
renderText,
|
|
3209
|
+
layoutContext,
|
|
3210
|
+
useContentInlineSize,
|
|
3211
|
+
trusted
|
|
3212
|
+
});
|
|
3170
3213
|
if (trusted) {
|
|
3171
3214
|
return pretextSnapshot;
|
|
3172
3215
|
}
|
|
@@ -3381,10 +3424,18 @@ function resetMorph(session, timeline, setState) {
|
|
|
3381
3424
|
setState(EMPTY_STATE);
|
|
3382
3425
|
}
|
|
3383
3426
|
function commitStaticMeasurement(session, measurement, setState) {
|
|
3427
|
+
if (!session.animating && session.target === null && session.committed !== null && sameMeasurement(session.committed, measurement)) {
|
|
3428
|
+
return;
|
|
3429
|
+
}
|
|
3384
3430
|
session.committed = measurement;
|
|
3385
3431
|
session.target = null;
|
|
3386
3432
|
session.animating = false;
|
|
3387
|
-
setState(
|
|
3433
|
+
setState((current) => {
|
|
3434
|
+
if (current.stage === "idle" && current.plan === null && current.measurement !== null && sameMeasurement(current.measurement, measurement)) {
|
|
3435
|
+
return current;
|
|
3436
|
+
}
|
|
3437
|
+
return createStaticState(measurement);
|
|
3438
|
+
});
|
|
3388
3439
|
}
|
|
3389
3440
|
function scheduleMorphTimeline({
|
|
3390
3441
|
session,
|
|
@@ -32,6 +32,11 @@ export type PretextMorphSnapshot = {
|
|
|
32
32
|
export declare function clearPretextMorphCaches(): void;
|
|
33
33
|
export declare function getPretextMorphRenderedText(text: string, layoutContext: Pick<PretextMorphLayoutContext, "whiteSpace"> | null): string;
|
|
34
34
|
export declare function getPretextMorphStyleSignature(layoutContext: PretextMorphLayoutContext | null): string | null;
|
|
35
|
+
export declare function getPretextMorphTrustSignature({ renderText, layoutContext, useContentInlineSize, }: {
|
|
36
|
+
renderText: string;
|
|
37
|
+
layoutContext: PretextMorphLayoutContext | null;
|
|
38
|
+
useContentInlineSize: boolean;
|
|
39
|
+
}): string | null;
|
|
35
40
|
export declare function getPretextMorphMeasurementBackend(text: string, layoutContext: PretextMorphLayoutContext | null): PretextMorphMeasurementBackend;
|
|
36
41
|
export declare function canUsePretextMorphFastPath(text: string, layoutContext: PretextMorphLayoutContext | null): boolean;
|
|
37
42
|
export declare function measureMorphSnapshotWithPretext(text: string, layoutContext: PretextMorphLayoutContext): PretextMorphSnapshot;
|