react-native-laminar 1.2.0 → 1.4.2

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 (147) hide show
  1. package/README.md +75 -2
  2. package/lib/commonjs/hooks/use-display-units.js +1 -0
  3. package/lib/commonjs/hooks/use-display-units.js.map +1 -1
  4. package/lib/commonjs/hooks/use-inline-auto-width.js +43 -10
  5. package/lib/commonjs/hooks/use-inline-auto-width.js.map +1 -1
  6. package/lib/commonjs/hooks/use-morph-motion.js +2 -1
  7. package/lib/commonjs/hooks/use-morph-motion.js.map +1 -1
  8. package/lib/commonjs/hooks/use-morph-text-style.js +4 -0
  9. package/lib/commonjs/hooks/use-morph-text-style.js.map +1 -1
  10. package/lib/commonjs/hooks/use-numeric-lanes.js +1 -0
  11. package/lib/commonjs/hooks/use-numeric-lanes.js.map +1 -1
  12. package/lib/commonjs/hooks/use-text-glyphs.js +28 -7
  13. package/lib/commonjs/hooks/use-text-glyphs.js.map +1 -1
  14. package/lib/commonjs/index.js +54 -11
  15. package/lib/commonjs/index.js.map +1 -1
  16. package/lib/commonjs/model/display-units.js +7 -1
  17. package/lib/commonjs/model/display-units.js.map +1 -1
  18. package/lib/commonjs/model/numeric-lanes.js +4 -0
  19. package/lib/commonjs/model/numeric-lanes.js.map +1 -1
  20. package/lib/commonjs/model/text-keys.js +4 -0
  21. package/lib/commonjs/model/text-keys.js.map +1 -1
  22. package/lib/commonjs/motion/entry-exit-builders.js +78 -1
  23. package/lib/commonjs/motion/entry-exit-builders.js.map +1 -1
  24. package/lib/commonjs/motion/preset-map.js +7 -0
  25. package/lib/commonjs/motion/preset-map.js.map +1 -1
  26. package/lib/commonjs/view/glyph-run.js +21 -2
  27. package/lib/commonjs/view/glyph-run.js.map +1 -1
  28. package/lib/commonjs/view/morph-viewport.js +4 -0
  29. package/lib/commonjs/view/morph-viewport.js.map +1 -1
  30. package/lib/commonjs/view/number-lane.js +5 -1
  31. package/lib/commonjs/view/number-lane.js.map +1 -1
  32. package/lib/commonjs/view/number-run.js +4 -0
  33. package/lib/commonjs/view/number-run.js.map +1 -1
  34. package/lib/commonjs/view/slots-run.js +258 -0
  35. package/lib/commonjs/view/slots-run.js.map +1 -0
  36. package/lib/commonjs/view/text-run.js +35 -3
  37. package/lib/commonjs/view/text-run.js.map +1 -1
  38. package/lib/module/hooks/use-display-units.js +2 -0
  39. package/lib/module/hooks/use-display-units.js.map +1 -1
  40. package/lib/module/hooks/use-inline-auto-width.js +44 -11
  41. package/lib/module/hooks/use-inline-auto-width.js.map +1 -1
  42. package/lib/module/hooks/use-morph-motion.js +2 -1
  43. package/lib/module/hooks/use-morph-motion.js.map +1 -1
  44. package/lib/module/hooks/use-morph-text-style.js +4 -0
  45. package/lib/module/hooks/use-morph-text-style.js.map +1 -1
  46. package/lib/module/hooks/use-numeric-lanes.js +1 -0
  47. package/lib/module/hooks/use-numeric-lanes.js.map +1 -1
  48. package/lib/module/hooks/use-text-glyphs.js +28 -7
  49. package/lib/module/hooks/use-text-glyphs.js.map +1 -1
  50. package/lib/module/index.js +56 -12
  51. package/lib/module/index.js.map +1 -1
  52. package/lib/module/model/display-units.js +7 -1
  53. package/lib/module/model/display-units.js.map +1 -1
  54. package/lib/module/model/numeric-lanes.js +5 -0
  55. package/lib/module/model/numeric-lanes.js.map +1 -1
  56. package/lib/module/model/text-keys.js +4 -0
  57. package/lib/module/model/text-keys.js.map +1 -1
  58. package/lib/module/motion/entry-exit-builders.js +75 -0
  59. package/lib/module/motion/entry-exit-builders.js.map +1 -1
  60. package/lib/module/motion/preset-map.js +7 -0
  61. package/lib/module/motion/preset-map.js.map +1 -1
  62. package/lib/module/view/glyph-run.js +21 -2
  63. package/lib/module/view/glyph-run.js.map +1 -1
  64. package/lib/module/view/morph-viewport.js +4 -0
  65. package/lib/module/view/morph-viewport.js.map +1 -1
  66. package/lib/module/view/number-lane.js +5 -1
  67. package/lib/module/view/number-lane.js.map +1 -1
  68. package/lib/module/view/number-run.js +4 -0
  69. package/lib/module/view/number-run.js.map +1 -1
  70. package/lib/module/view/slots-run.js +253 -0
  71. package/lib/module/view/slots-run.js.map +1 -0
  72. package/lib/module/view/text-run.js +36 -4
  73. package/lib/module/view/text-run.js.map +1 -1
  74. package/lib/typescript/commonjs/hooks/use-display-units.d.ts.map +1 -1
  75. package/lib/typescript/commonjs/hooks/use-inline-auto-width.d.ts +3 -1
  76. package/lib/typescript/commonjs/hooks/use-inline-auto-width.d.ts.map +1 -1
  77. package/lib/typescript/commonjs/hooks/use-morph-motion.d.ts.map +1 -1
  78. package/lib/typescript/commonjs/hooks/use-morph-text-style.d.ts.map +1 -1
  79. package/lib/typescript/commonjs/hooks/use-numeric-lanes.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/hooks/use-text-glyphs.d.ts +2 -1
  81. package/lib/typescript/commonjs/hooks/use-text-glyphs.d.ts.map +1 -1
  82. package/lib/typescript/commonjs/index.d.ts +1 -3
  83. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  84. package/lib/typescript/commonjs/model/display-units.d.ts.map +1 -1
  85. package/lib/typescript/commonjs/model/numeric-lanes.d.ts.map +1 -1
  86. package/lib/typescript/commonjs/model/text-keys.d.ts.map +1 -1
  87. package/lib/typescript/commonjs/motion/entry-exit-builders.d.ts +13 -0
  88. package/lib/typescript/commonjs/motion/entry-exit-builders.d.ts.map +1 -1
  89. package/lib/typescript/commonjs/motion/preset-map.d.ts.map +1 -1
  90. package/lib/typescript/commonjs/types.d.ts +12 -2
  91. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  92. package/lib/typescript/commonjs/view/glyph-run.d.ts +5 -2
  93. package/lib/typescript/commonjs/view/glyph-run.d.ts.map +1 -1
  94. package/lib/typescript/commonjs/view/morph-viewport.d.ts.map +1 -1
  95. package/lib/typescript/commonjs/view/number-lane.d.ts.map +1 -1
  96. package/lib/typescript/commonjs/view/number-run.d.ts.map +1 -1
  97. package/lib/typescript/commonjs/view/slots-run.d.ts +15 -0
  98. package/lib/typescript/commonjs/view/slots-run.d.ts.map +1 -0
  99. package/lib/typescript/commonjs/view/text-run.d.ts +5 -1
  100. package/lib/typescript/commonjs/view/text-run.d.ts.map +1 -1
  101. package/lib/typescript/module/hooks/use-display-units.d.ts.map +1 -1
  102. package/lib/typescript/module/hooks/use-inline-auto-width.d.ts +3 -1
  103. package/lib/typescript/module/hooks/use-inline-auto-width.d.ts.map +1 -1
  104. package/lib/typescript/module/hooks/use-morph-motion.d.ts.map +1 -1
  105. package/lib/typescript/module/hooks/use-morph-text-style.d.ts.map +1 -1
  106. package/lib/typescript/module/hooks/use-numeric-lanes.d.ts.map +1 -1
  107. package/lib/typescript/module/hooks/use-text-glyphs.d.ts +2 -1
  108. package/lib/typescript/module/hooks/use-text-glyphs.d.ts.map +1 -1
  109. package/lib/typescript/module/index.d.ts +1 -3
  110. package/lib/typescript/module/index.d.ts.map +1 -1
  111. package/lib/typescript/module/model/display-units.d.ts.map +1 -1
  112. package/lib/typescript/module/model/numeric-lanes.d.ts.map +1 -1
  113. package/lib/typescript/module/model/text-keys.d.ts.map +1 -1
  114. package/lib/typescript/module/motion/entry-exit-builders.d.ts +13 -0
  115. package/lib/typescript/module/motion/entry-exit-builders.d.ts.map +1 -1
  116. package/lib/typescript/module/motion/preset-map.d.ts.map +1 -1
  117. package/lib/typescript/module/types.d.ts +12 -2
  118. package/lib/typescript/module/types.d.ts.map +1 -1
  119. package/lib/typescript/module/view/glyph-run.d.ts +5 -2
  120. package/lib/typescript/module/view/glyph-run.d.ts.map +1 -1
  121. package/lib/typescript/module/view/morph-viewport.d.ts.map +1 -1
  122. package/lib/typescript/module/view/number-lane.d.ts.map +1 -1
  123. package/lib/typescript/module/view/number-run.d.ts.map +1 -1
  124. package/lib/typescript/module/view/slots-run.d.ts +15 -0
  125. package/lib/typescript/module/view/slots-run.d.ts.map +1 -0
  126. package/lib/typescript/module/view/text-run.d.ts +5 -1
  127. package/lib/typescript/module/view/text-run.d.ts.map +1 -1
  128. package/package.json +11 -2
  129. package/src/hooks/use-display-units.ts +1 -0
  130. package/src/hooks/use-inline-auto-width.ts +55 -12
  131. package/src/hooks/use-morph-motion.ts +2 -1
  132. package/src/hooks/use-morph-text-style.ts +3 -0
  133. package/src/hooks/use-numeric-lanes.ts +1 -0
  134. package/src/hooks/use-text-glyphs.ts +48 -10
  135. package/src/index.tsx +98 -17
  136. package/src/model/display-units.ts +4 -1
  137. package/src/model/numeric-lanes.ts +3 -0
  138. package/src/model/text-keys.ts +3 -0
  139. package/src/motion/entry-exit-builders.ts +73 -0
  140. package/src/motion/preset-map.ts +4 -0
  141. package/src/types.ts +14 -2
  142. package/src/view/glyph-run.tsx +38 -13
  143. package/src/view/morph-viewport.tsx +3 -0
  144. package/src/view/number-lane.tsx +7 -2
  145. package/src/view/number-run.tsx +3 -0
  146. package/src/view/slots-run.tsx +385 -0
  147. package/src/view/text-run.tsx +77 -6
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","useRef","normalizeDisplayUnit","splitDisplayUnits","reconcileTextGlyphKeys","useTextGlyphs","value","namespace","units","ledgerRef","previousValue","previousUnits","glyphKeys","map","_","index","nextSeed","length","current","nextLedger","unit","id"],"sourceRoot":"../../../src","sources":["hooks/use-text-glyphs.ts"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,OAAO;AACvC,SACEC,oBAAoB,EACpBC,iBAAiB,QACZ,2BAAwB;AAC/B,SAASC,sBAAsB,QAAQ,uBAAoB;AAU3D,OAAO,MAAMC,aAAa,GAAGA,CAC3BC,KAAa,EACbC,SAAiB,KACS;EAC1B,MAAMC,KAAK,GAAGR,OAAO,CAAC,MAAMG,iBAAiB,CAACG,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAC9D,MAAMG,SAAS,GAAGR,MAAM,CAAkB;IACxCS,aAAa,EAAEJ,KAAK;IACpBK,aAAa,EAAEH,KAAK;IACpBI,SAAS,EAAEJ,KAAK,CAACK,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAK,GAAGR,SAAS,KAAKQ,KAAK,EAAE,CAAC;IAC5DC,QAAQ,EAAER,KAAK,CAACS;EAClB,CAAC,CAAC;EAEF,IAAIX,KAAK,KAAKG,SAAS,CAACS,OAAO,CAACR,aAAa,EAAE;IAC7C;IACA,MAAMS,UAAU,GAAGf,sBAAsB,CACvCK,SAAS,CAACS,OAAO,CAACP,aAAa,EAC/BH,KAAK,EACLC,SAAS,CAACS,OAAO,CAACN,SAAS,EAC3BH,SAAS,CAACS,OAAO,CAACF,QAAQ,EAC1BT,SACF,CAAC;IAEDE,SAAS,CAACS,OAAO,GAAG;MAClBR,aAAa,EAAEJ,KAAK;MACpBK,aAAa,EAAEH,KAAK;MACpBI,SAAS,EAAEO,UAAU,CAACP,SAAS;MAC/BI,QAAQ,EAAEG,UAAU,CAACH;IACvB,CAAC;EACH;EAEA,MAAMJ,SAAS,GAAGH,SAAS,CAACS,OAAO,CAACN,SAAS;EAE7C,OAAOZ,OAAO,CACZ,MACEQ,KAAK,CAACK,GAAG,CAAC,CAACO,IAAI,EAAEL,KAAK,MAAM;IAC1BM,EAAE,EAAET,SAAS,CAACG,KAAK,CAAC;IACpBT,KAAK,EAAEJ,oBAAoB,CAACkB,IAAI;EAClC,CAAC,CAAC,CAAC,EACL,CAACR,SAAS,EAAEJ,KAAK,CACnB,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","useRef","normalizeDisplayUnit","splitDisplayUnits","reconcileTextGlyphKeys","useTextGlyphs","value","namespace","leading","leadingKey","units","kind","signature","String","element","map","unit","signatures","ledgerRef","previousValue","previousSignatures","glyphKeys","_","index","nextSeed","length","current","some","nextLedger","id"],"sourceRoot":"../../../src","sources":["hooks/use-text-glyphs.ts"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,MAAM,QAAwB,OAAO;AACvD,SACEC,oBAAoB,EACpBC,iBAAiB,QACZ,2BAAwB;AAC/B,SAASC,sBAAsB,QAAQ,uBAAoB;AAc3D;AACA,OAAO,MAAMC,aAAa,GAAGA,CAC3BC,KAAa,EACbC,SAAiB,EACjBC,OAAmB,EACnBC,UAA4B,KACF;EAC1B,MAAMC,KAAK,GAAGV,OAAO,CACnB,MAAM;EACJ;EACA,IAAIQ,OAAO,GACP,CACE;IACEG,IAAI,EAAE,SAAS;IACfC,SAAS,EAAE,WAAWC,MAAM,CAACJ,UAAU,IAAI,SAAS,CAAC,EAAE;IACvDK,OAAO,EAAEN;EACX,CAAC,CACF,GACD,EAAE,CAAC,EACP,GAAGL,iBAAiB,CAACG,KAAK,CAAC,CAACS,GAAG,CAAEC,IAAI,KAAM;IACzCL,IAAI,EAAE,MAAe;IACrBC,SAAS,EAAE,QAAQI,IAAI,EAAE;IACzBV,KAAK,EAAEU;EACT,CAAC,CAAC,CAAC,CACJ,EACD,CAACR,OAAO,EAAEC,UAAU,EAAEH,KAAK,CAC7B,CAAC;EACD,MAAMW,UAAU,GAAGP,KAAK,CAACK,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACJ,SAAS,CAAC;EACtD,MAAMM,SAAS,GAAGjB,MAAM,CAAkB;IACxCkB,aAAa,EAAEb,KAAK;IACpBc,kBAAkB,EAAEH,UAAU;IAC9BI,SAAS,EAAEX,KAAK,CAACK,GAAG,CAAC,CAACO,CAAC,EAAEC,KAAK,KAAK,GAAGhB,SAAS,KAAKgB,KAAK,EAAE,CAAC;IAC5DC,QAAQ,EAAEd,KAAK,CAACe;EAClB,CAAC,CAAC;;EAEF;EACA,IACEnB,KAAK,KAAKY,SAAS,CAACQ,OAAO,CAACP,aAAa,IACzCF,UAAU,CAACQ,MAAM,KAAKP,SAAS,CAACQ,OAAO,CAACN,kBAAkB,CAACK,MAAM,IACjER,UAAU,CAACU,IAAI,CACb,CAACf,SAAS,EAAEW,KAAK,KAAKX,SAAS,KAAKM,SAAS,CAACQ,OAAO,CAACN,kBAAkB,CAACG,KAAK,CAChF,CAAC,EACD;IACA;IACA,MAAMK,UAAU,GAAGxB,sBAAsB,CACvCc,SAAS,CAACQ,OAAO,CAACN,kBAAkB,EACpCH,UAAU,EACVC,SAAS,CAACQ,OAAO,CAACL,SAAS,EAC3BH,SAAS,CAACQ,OAAO,CAACF,QAAQ,EAC1BjB,SACF,CAAC;IAEDW,SAAS,CAACQ,OAAO,GAAG;MAClBP,aAAa,EAAEb,KAAK;MACpBc,kBAAkB,EAAEH,UAAU;MAC9BI,SAAS,EAAEO,UAAU,CAACP,SAAS;MAC/BG,QAAQ,EAAEI,UAAU,CAACJ;IACvB,CAAC;EACH;EAEA,MAAMH,SAAS,GAAGH,SAAS,CAACQ,OAAO,CAACL,SAAS;;EAE7C;EACA,OAAOrB,OAAO,CACZ,MACEU,KAAK,CAACK,GAAG,CAAC,CAACC,IAAI,EAAEO,KAAK,MAAM;IAC1BM,EAAE,EAAER,SAAS,CAACE,KAAK,CAAC;IACpBZ,IAAI,EAAEK,IAAI,CAACL,IAAI;IACf,IAAIK,IAAI,CAACL,IAAI,KAAK,MAAM,GACpB;MAAEL,KAAK,EAAEJ,oBAAoB,CAACc,IAAI,CAACV,KAAK;IAAE,CAAC,GAC3C;MAAEQ,OAAO,EAAEE,IAAI,CAACF;IAAQ,CAAC;EAC/B,CAAC,CAAC,CAAC,EACL,CAACO,SAAS,EAAEX,KAAK,CACnB,CAAC;AACH,CAAC","ignoreList":[]}
@@ -1,15 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  import React from "react";
4
- import { Text } from "react-native";
4
+ import { StyleSheet, Text, View } from "react-native";
5
5
  import { useInlineAutoWidth } from "./hooks/use-inline-auto-width.js";
6
6
  import { useMorphMotion } from "./hooks/use-morph-motion.js";
7
7
  import { useMorphTextStyle } from "./hooks/use-morph-text-style.js";
8
8
  import { normalizeDisplayUnit, splitDisplayUnits } from "./model/display-units.js";
9
9
  import { MorphViewport } from "./view/morph-viewport.js";
10
10
  import { NumberRun } from "./view/number-run.js";
11
+ import { SlotsRun } from "./view/slots-run.js";
11
12
  import { TextRun } from "./view/text-run.js";
12
- import { jsx as _jsx } from "react/jsx-runtime";
13
+
14
+ // choose the content variant and connect it to the shared viewport and measurement flow
15
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
16
  export const Laminar = /*#__PURE__*/React.memo(function Laminar({
14
17
  text,
15
18
  variant = "text",
@@ -17,6 +20,9 @@ export const Laminar = /*#__PURE__*/React.memo(function Laminar({
17
20
  color,
18
21
  align = "left",
19
22
  className,
23
+ leading,
24
+ leadingKey,
25
+ leadingGap = 0,
20
26
  style,
21
27
  containerStyle,
22
28
  fontStyle,
@@ -27,6 +33,10 @@ export const Laminar = /*#__PURE__*/React.memo(function Laminar({
27
33
  clipToBounds = false
28
34
  }) {
29
35
  const resolvedValue = String(text ?? "");
36
+ // resolve state keyed leading content before measurement and token reconciliation
37
+ const leadingMap = isLeadingMap(leading) ? leading : undefined;
38
+ const resolvedLeading = leadingMap ? leadingMap[resolvedValue] : leading;
39
+ const resolvedLeadingKey = leadingMap ? resolvedValue : leadingKey;
30
40
  const {
31
41
  motionRecipe,
32
42
  staggerMs
@@ -44,13 +54,22 @@ export const Laminar = /*#__PURE__*/React.memo(function Laminar({
44
54
  fontStyle,
45
55
  style
46
56
  });
57
+
58
+ // invalidate the probe when text style, leading content, or leading spacing changes
59
+ const measurementKey = React.useMemo(() => {
60
+ const flattenedStyle = StyleSheet.flatten(textStyle);
61
+ return JSON.stringify([resolvedValue, flattenedStyle?.fontFamily, flattenedStyle?.fontSize, flattenedStyle?.fontStyle, flattenedStyle?.fontWeight, flattenedStyle?.fontVariant, flattenedStyle?.letterSpacing, flattenedStyle?.lineHeight, flattenedStyle?.textTransform, variant === "text" && Boolean(resolvedLeading), variant === "text" ? resolvedLeadingKey : undefined, variant === "text" ? leadingGap : 0]);
62
+ }, [leadingGap, resolvedLeading, resolvedLeadingKey, resolvedValue, textStyle, variant]);
47
63
  const {
48
64
  captureLayout,
49
- animatedWidthStyle
65
+ animatedWidthStyle,
66
+ shouldMeasure
50
67
  } = useInlineAutoWidth({
51
68
  enabled: autoSize,
52
- driveToWidth: motionRecipe.driveNumber
69
+ driveToWidth: motionRecipe.driveNumber,
70
+ measurementKey
53
71
  });
72
+ // measurement uses the same normalized units as the visible text row
54
73
  const measuredValue = React.useMemo(() => {
55
74
  if (!autoSize) {
56
75
  return "";
@@ -63,13 +82,33 @@ export const Laminar = /*#__PURE__*/React.memo(function Laminar({
63
82
  align: align,
64
83
  containerStyle: containerStyle,
65
84
  animatedWidthStyle: animatedWidthStyle,
66
- measurement: /*#__PURE__*/_jsx(Text, {
67
- numberOfLines: 1,
85
+ measurement: shouldMeasure ? /*#__PURE__*/_jsxs(View, {
68
86
  onLayout: captureLayout,
69
- style: textStyle,
70
- children: measuredValue
71
- }),
72
- children: variant === "number" ? /*#__PURE__*/_jsx(NumberRun, {
87
+ style: {
88
+ flexDirection: "row",
89
+ alignSelf: "flex-start"
90
+ },
91
+ children: [variant === "text" && resolvedLeading ? /*#__PURE__*/_jsx(View, {
92
+ style: {
93
+ alignItems: "center",
94
+ justifyContent: "center",
95
+ marginRight: leadingGap
96
+ },
97
+ children: resolvedLeading
98
+ }) : null, splitDisplayUnits(measuredValue).map((unit, index) => /*#__PURE__*/_jsx(Text, {
99
+ style: textStyle,
100
+ children: normalizeDisplayUnit(unit)
101
+ }, `${unit}-${index}`))]
102
+ }) : undefined,
103
+ children: variant === "slots" ? /*#__PURE__*/_jsx(SlotsRun, {
104
+ value: resolvedValue,
105
+ motionRecipe: motionRecipe,
106
+ align: align,
107
+ fontSize: fontSize,
108
+ textStyle: textStyle,
109
+ staggerMs: staggerMs,
110
+ className: className
111
+ }) : variant === "number" ? /*#__PURE__*/_jsx(NumberRun, {
73
112
  value: resolvedValue,
74
113
  motionRecipe: motionRecipe,
75
114
  align: align,
@@ -81,11 +120,16 @@ export const Laminar = /*#__PURE__*/React.memo(function Laminar({
81
120
  value: resolvedValue,
82
121
  motionRecipe: motionRecipe,
83
122
  align: align,
123
+ leading: resolvedLeading,
124
+ leadingKey: resolvedLeadingKey,
125
+ leadingGap: leadingGap,
84
126
  textStyle: textStyle,
85
127
  className: className
86
128
  })
87
129
  });
88
130
  });
89
- export const MorphingText = Laminar;
90
- export default Laminar;
131
+ function isLeadingMap(value) {
132
+ // react elements are objects too, so exclude them before treating a value as a map
133
+ return typeof value === "object" && value !== null && ! /*#__PURE__*/React.isValidElement(value) && !Array.isArray(value);
134
+ }
91
135
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","Text","useInlineAutoWidth","useMorphMotion","useMorphTextStyle","normalizeDisplayUnit","splitDisplayUnits","MorphViewport","NumberRun","TextRun","jsx","_jsx","Laminar","memo","text","variant","fontSize","color","align","className","style","containerStyle","fontStyle","animationDuration","animationPreset","stagger","autoSize","clipToBounds","resolvedValue","String","motionRecipe","staggerMs","textStyle","captureLayout","animatedWidthStyle","enabled","driveToWidth","driveNumber","measuredValue","useMemo","map","join","measurement","numberOfLines","onLayout","children","value","MorphingText"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,kBAAkB,QAAQ,kCAA+B;AAClE,SAASC,cAAc,QAAQ,6BAA0B;AACzD,SAASC,iBAAiB,QAAQ,iCAA8B;AAChE,SACEC,oBAAoB,EACpBC,iBAAiB,QACZ,0BAAuB;AAE9B,SAASC,aAAa,QAAQ,0BAAuB;AACrD,SAASC,SAAS,QAAQ,sBAAmB;AAC7C,SAASC,OAAO,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE1C,OAAO,MAAMC,OAAO,gBAAGZ,KAAK,CAACa,IAAI,CAAC,SAASD,OAAOA,CAAC;EAC/CE,IAAI;EACJC,OAAO,GAAG,MAAM;EAChBC,QAAQ;EACRC,KAAK;EACLC,KAAK,GAAG,MAAM;EACdC,SAAS;EACTC,KAAK;EACLC,cAAc;EACdC,SAAS;EACTC,iBAAiB;EACjBC,eAAe;EACfC,OAAO,GAAG,IAAI;EACdC,QAAQ,GAAG,IAAI;EACfC,YAAY,GAAG;AACY,CAAC,EAAE;EAC9B,MAAMC,aAAa,GAAGC,MAAM,CAACf,IAAI,IAAI,EAAE,CAAC;EACxC,MAAM;IAAEgB,YAAY;IAAEC;EAAU,CAAC,GAAG5B,cAAc,CAAC;IACjDY,OAAO;IACPS,eAAe;IACfD,iBAAiB;IACjBE;EACF,CAAC,CAAC;EACF,MAAM;IAAEO;EAAU,CAAC,GAAG5B,iBAAiB,CAAC;IACtCY,QAAQ;IACRC,KAAK;IACLK,SAAS;IACTF;EACF,CAAC,CAAC;EAEF,MAAM;IAAEa,aAAa;IAAEC;EAAmB,CAAC,GAAGhC,kBAAkB,CAAC;IAC/DiC,OAAO,EAAET,QAAQ;IACjBU,YAAY,EAAEN,YAAY,CAACO;EAC7B,CAAC,CAAC;EACF,MAAMC,aAAa,GAAGtC,KAAK,CAACuC,OAAO,CAAC,MAAM;IACxC,IAAI,CAACb,QAAQ,EAAE;MACb,OAAO,EAAE;IACX;IAEA,OAAOpB,iBAAiB,CAACsB,aAAa,CAAC,CAACY,GAAG,CAACnC,oBAAoB,CAAC,CAACoC,IAAI,CAAC,EAAE,CAAC;EAC5E,CAAC,EAAE,CAACf,QAAQ,EAAEE,aAAa,CAAC,CAAC;EAE7B,oBACEjB,IAAA,CAACJ,aAAa;IACZmB,QAAQ,EAAEA,QAAS;IACnBC,YAAY,EAAEA,YAAa;IAC3BT,KAAK,EAAEA,KAAM;IACbG,cAAc,EAAEA,cAAe;IAC/Ba,kBAAkB,EAAEA,kBAAmB;IACvCQ,WAAW,eACT/B,IAAA,CAACV,IAAI;MACH0C,aAAa,EAAE,CAAE;MACjBC,QAAQ,EAAEX,aAAc;MACxBb,KAAK,EAAEY,SAAU;MAAAa,QAAA,EAEhBP;IAAa,CACV,CACP;IAAAO,QAAA,EAEA9B,OAAO,KAAK,QAAQ,gBACnBJ,IAAA,CAACH,SAAS;MACRsC,KAAK,EAAElB,aAAc;MACrBE,YAAY,EAAEA,YAAa;MAC3BZ,KAAK,EAAEA,KAAM;MACbF,QAAQ,EAAEA,QAAS;MACnBgB,SAAS,EAAEA,SAAU;MACrBD,SAAS,EAAEA,SAAU;MACrBZ,SAAS,EAAEA;IAAU,CACtB,CAAC,gBAEFR,IAAA,CAACF,OAAO;MACNqC,KAAK,EAAElB,aAAc;MACrBE,YAAY,EAAEA,YAAa;MAC3BZ,KAAK,EAAEA,KAAM;MACbc,SAAS,EAAEA,SAAU;MACrBb,SAAS,EAAEA;IAAU,CACtB;EACJ,CACY,CAAC;AAElB,CAAC,CAAC;AAEJ,OAAO,MAAM4B,YAAY,GAAGnC,OAAO;AAEnC,eAAeA,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["React","StyleSheet","Text","View","useInlineAutoWidth","useMorphMotion","useMorphTextStyle","normalizeDisplayUnit","splitDisplayUnits","MorphViewport","NumberRun","SlotsRun","TextRun","jsx","_jsx","jsxs","_jsxs","Laminar","memo","text","variant","fontSize","color","align","className","leading","leadingKey","leadingGap","style","containerStyle","fontStyle","animationDuration","animationPreset","stagger","autoSize","clipToBounds","resolvedValue","String","leadingMap","isLeadingMap","undefined","resolvedLeading","resolvedLeadingKey","motionRecipe","staggerMs","textStyle","measurementKey","useMemo","flattenedStyle","flatten","JSON","stringify","fontFamily","fontWeight","fontVariant","letterSpacing","lineHeight","textTransform","Boolean","captureLayout","animatedWidthStyle","shouldMeasure","enabled","driveToWidth","driveNumber","measuredValue","map","join","measurement","onLayout","flexDirection","alignSelf","children","alignItems","justifyContent","marginRight","unit","index","value","isValidElement","Array","isArray"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACrD,SAASC,kBAAkB,QAAQ,kCAA+B;AAClE,SAASC,cAAc,QAAQ,6BAA0B;AACzD,SAASC,iBAAiB,QAAQ,iCAA8B;AAChE,SACEC,oBAAoB,EACpBC,iBAAiB,QACZ,0BAAuB;AAE9B,SAASC,aAAa,QAAQ,0BAAuB;AACrD,SAASC,SAAS,QAAQ,sBAAmB;AAC7C,SAASC,QAAQ,QAAQ,qBAAkB;AAC3C,SAASC,OAAO,QAAQ,oBAAiB;;AAEzC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,OAAO,MAAMC,OAAO,gBAAGjB,KAAK,CAACkB,IAAI,CAAC,SAASD,OAAOA,CAAC;EAC/CE,IAAI;EACJC,OAAO,GAAG,MAAM;EAChBC,QAAQ;EACRC,KAAK;EACLC,KAAK,GAAG,MAAM;EACdC,SAAS;EACTC,OAAO;EACPC,UAAU;EACVC,UAAU,GAAG,CAAC;EACdC,KAAK;EACLC,cAAc;EACdC,SAAS;EACTC,iBAAiB;EACjBC,eAAe;EACfC,OAAO,GAAG,IAAI;EACdC,QAAQ,GAAG,IAAI;EACfC,YAAY,GAAG;AACY,CAAC,EAAE;EAC9B,MAAMC,aAAa,GAAGC,MAAM,CAAClB,IAAI,IAAI,EAAE,CAAC;EACxC;EACA,MAAMmB,UAAU,GAAGC,YAAY,CAACd,OAAO,CAAC,GAAGA,OAAO,GAAGe,SAAS;EAC9D,MAAMC,eAAgC,GAAGH,UAAU,GAC/CA,UAAU,CAACF,aAAa,CAAC,GACxBX,OAA2B;EAChC,MAAMiB,kBAAkB,GAAGJ,UAAU,GAAGF,aAAa,GAAGV,UAAU;EAClE,MAAM;IAAEiB,YAAY;IAAEC;EAAU,CAAC,GAAGvC,cAAc,CAAC;IACjDe,OAAO;IACPY,eAAe;IACfD,iBAAiB;IACjBE;EACF,CAAC,CAAC;EACF,MAAM;IAAEY;EAAU,CAAC,GAAGvC,iBAAiB,CAAC;IACtCe,QAAQ;IACRC,KAAK;IACLQ,SAAS;IACTF;EACF,CAAC,CAAC;;EAEF;EACA,MAAMkB,cAAc,GAAG9C,KAAK,CAAC+C,OAAO,CAAC,MAAM;IACzC,MAAMC,cAAc,GAAG/C,UAAU,CAACgD,OAAO,CAACJ,SAAS,CAAC;IAEpD,OAAOK,IAAI,CAACC,SAAS,CAAC,CACpBf,aAAa,EACbY,cAAc,EAAEI,UAAU,EAC1BJ,cAAc,EAAE3B,QAAQ,EACxB2B,cAAc,EAAElB,SAAS,EACzBkB,cAAc,EAAEK,UAAU,EAC1BL,cAAc,EAAEM,WAAW,EAC3BN,cAAc,EAAEO,aAAa,EAC7BP,cAAc,EAAEQ,UAAU,EAC1BR,cAAc,EAAES,aAAa,EAC7BrC,OAAO,KAAK,MAAM,IAAIsC,OAAO,CAACjB,eAAe,CAAC,EAC9CrB,OAAO,KAAK,MAAM,GAAGsB,kBAAkB,GAAGF,SAAS,EACnDpB,OAAO,KAAK,MAAM,GAAGO,UAAU,GAAG,CAAC,CACpC,CAAC;EACJ,CAAC,EAAE,CACDA,UAAU,EACVc,eAAe,EACfC,kBAAkB,EAClBN,aAAa,EACbS,SAAS,EACTzB,OAAO,CACR,CAAC;EACF,MAAM;IAAEuC,aAAa;IAAEC,kBAAkB;IAAEC;EAAc,CAAC,GACxDzD,kBAAkB,CAAC;IACjB0D,OAAO,EAAE5B,QAAQ;IACjB6B,YAAY,EAAEpB,YAAY,CAACqB,WAAW;IACtClB;EACF,CAAC,CAAC;EACJ;EACA,MAAMmB,aAAa,GAAGjE,KAAK,CAAC+C,OAAO,CAAC,MAAM;IACxC,IAAI,CAACb,QAAQ,EAAE;MACb,OAAO,EAAE;IACX;IAEA,OAAO1B,iBAAiB,CAAC4B,aAAa,CAAC,CACpC8B,GAAG,CAAC3D,oBAAoB,CAAC,CACzB4D,IAAI,CAAC,EAAE,CAAC;EACb,CAAC,EAAE,CAACjC,QAAQ,EAAEE,aAAa,CAAC,CAAC;EAE7B,oBACEtB,IAAA,CAACL,aAAa;IACZyB,QAAQ,EAAEA,QAAS;IACnBC,YAAY,EAAEA,YAAa;IAC3BZ,KAAK,EAAEA,KAAM;IACbM,cAAc,EAAEA,cAAe;IAC/B+B,kBAAkB,EAAEA,kBAAmB;IACvCQ,WAAW,EACTP,aAAa,gBACX7C,KAAA,CAACb,IAAI;MACHkE,QAAQ,EAAEV,aAAc;MACxB/B,KAAK,EAAE;QAAE0C,aAAa,EAAE,KAAK;QAAEC,SAAS,EAAE;MAAa,CAAE;MAAAC,QAAA,GAExDpD,OAAO,KAAK,MAAM,IAAIqB,eAAe,gBACpC3B,IAAA,CAACX,IAAI;QACHyB,KAAK,EAAE;UACL6C,UAAU,EAAE,QAAQ;UACpBC,cAAc,EAAE,QAAQ;UACxBC,WAAW,EAAEhD;QACf,CAAE;QAAA6C,QAAA,EAED/B;MAAe,CACZ,CAAC,GACL,IAAI,EACPjC,iBAAiB,CAACyD,aAAa,CAAC,CAACC,GAAG,CAAC,CAACU,IAAI,EAAEC,KAAK,kBAChD/D,IAAA,CAACZ,IAAI;QAA0B0B,KAAK,EAAEiB,SAAU;QAAA2B,QAAA,EAC7CjE,oBAAoB,CAACqE,IAAI;MAAC,GADlB,GAAGA,IAAI,IAAIC,KAAK,EAErB,CACP,CAAC;IAAA,CACE,CAAC,GACLrC,SACL;IAAAgC,QAAA,EAEApD,OAAO,KAAK,OAAO,gBAClBN,IAAA,CAACH,QAAQ;MACPmE,KAAK,EAAE1C,aAAc;MACrBO,YAAY,EAAEA,YAAa;MAC3BpB,KAAK,EAAEA,KAAM;MACbF,QAAQ,EAAEA,QAAS;MACnBwB,SAAS,EAAEA,SAAU;MACrBD,SAAS,EAAEA,SAAU;MACrBpB,SAAS,EAAEA;IAAU,CACtB,CAAC,GACAJ,OAAO,KAAK,QAAQ,gBACtBN,IAAA,CAACJ,SAAS;MACRoE,KAAK,EAAE1C,aAAc;MACrBO,YAAY,EAAEA,YAAa;MAC3BpB,KAAK,EAAEA,KAAM;MACbF,QAAQ,EAAEA,QAAS;MACnBwB,SAAS,EAAEA,SAAU;MACrBD,SAAS,EAAEA,SAAU;MACrBpB,SAAS,EAAEA;IAAU,CACtB,CAAC,gBAEFV,IAAA,CAACF,OAAO;MACNkE,KAAK,EAAE1C,aAAc;MACrBO,YAAY,EAAEA,YAAa;MAC3BpB,KAAK,EAAEA,KAAM;MACbE,OAAO,EAAEgB,eAAgB;MACzBf,UAAU,EAAEgB,kBAAmB;MAC/Bf,UAAU,EAAEA,UAAW;MACvBkB,SAAS,EAAEA,SAAU;MACrBrB,SAAS,EAAEA;IAAU,CACtB;EACJ,CACY,CAAC;AAElB,CAAC,CAAC;AAEJ,SAASe,YAAYA,CACnBuC,KAAmC,EACP;EAC5B;EACA,OACE,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,eAAC9E,KAAK,CAAC+E,cAAc,CAACD,KAAK,CAAC,IAC5B,CAACE,KAAK,CAACC,OAAO,CAACH,KAAK,CAAC;AAEzB","ignoreList":[]}
@@ -4,6 +4,8 @@ const NBSP = "\u00A0";
4
4
  const graphemeSegmenter = typeof Intl !== "undefined" && typeof Intl.Segmenter === "function" ? new Intl.Segmenter(undefined, {
5
5
  granularity: "grapheme"
6
6
  }) : null;
7
+
8
+ // segment graphemes when the runtime supports them so emoji and combining marks stay whole
7
9
  export const splitDisplayUnits = input => {
8
10
  if (graphemeSegmenter) {
9
11
  return Array.from(graphemeSegmenter.segment(input), part => part.segment);
@@ -11,9 +13,13 @@ export const splitDisplayUnits = input => {
11
13
  return Array.from(input);
12
14
  };
13
15
 
14
- // swap plain spaces so measured text keeps its width
16
+ // replace plain spaces because native text measurement can collapse them
15
17
  export const normalizeDisplayUnit = unit => unit === " " ? NBSP : unit;
18
+
19
+ // numeric lanes only treat ascii digits as place-value columns
16
20
  export const isAsciiDigit = unit => unit >= "0" && unit <= "9";
21
+
22
+ // leading symbols and punctuation stay attached to the left side of a number
17
23
  export const findNumericLeadLength = units => {
18
24
  const firstDigitIndex = units.findIndex(isAsciiDigit);
19
25
  return firstDigitIndex === -1 ? units.length : firstDigitIndex;
@@ -1 +1 @@
1
- {"version":3,"names":["NBSP","graphemeSegmenter","Intl","Segmenter","undefined","granularity","splitDisplayUnits","input","Array","from","segment","part","normalizeDisplayUnit","unit","isAsciiDigit","findNumericLeadLength","units","firstDigitIndex","findIndex","length"],"sourceRoot":"../../../src","sources":["model/display-units.ts"],"mappings":";;AAAA,MAAMA,IAAI,GAAG,QAAQ;AACrB,MAAMC,iBAAiB,GACrB,OAAOC,IAAI,KAAK,WAAW,IAAI,OAAOA,IAAI,CAACC,SAAS,KAAK,UAAU,GAC/D,IAAID,IAAI,CAACC,SAAS,CAACC,SAAS,EAAE;EAAEC,WAAW,EAAE;AAAW,CAAC,CAAC,GAC1D,IAAI;AAEV,OAAO,MAAMC,iBAAiB,GAAIC,KAAa,IAAe;EAC5D,IAAIN,iBAAiB,EAAE;IACrB,OAAOO,KAAK,CAACC,IAAI,CACfR,iBAAiB,CAACS,OAAO,CAACH,KAAK,CAAC,EAC/BI,IAAI,IAAKA,IAAI,CAACD,OACjB,CAAC;EACH;EAEA,OAAOF,KAAK,CAACC,IAAI,CAACF,KAAK,CAAC;AAC1B,CAAC;;AAED;AACA,OAAO,MAAMK,oBAAoB,GAAIC,IAAY,IAC/CA,IAAI,KAAK,GAAG,GAAGb,IAAI,GAAGa,IAAI;AAE5B,OAAO,MAAMC,YAAY,GAAID,IAAY,IAAKA,IAAI,IAAI,GAAG,IAAIA,IAAI,IAAI,GAAG;AAExE,OAAO,MAAME,qBAAqB,GAAIC,KAAwB,IAAK;EACjE,MAAMC,eAAe,GAAGD,KAAK,CAACE,SAAS,CAACJ,YAAY,CAAC;EAErD,OAAOG,eAAe,KAAK,CAAC,CAAC,GAAGD,KAAK,CAACG,MAAM,GAAGF,eAAe;AAChE,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["NBSP","graphemeSegmenter","Intl","Segmenter","undefined","granularity","splitDisplayUnits","input","Array","from","segment","part","normalizeDisplayUnit","unit","isAsciiDigit","findNumericLeadLength","units","firstDigitIndex","findIndex","length"],"sourceRoot":"../../../src","sources":["model/display-units.ts"],"mappings":";;AAAA,MAAMA,IAAI,GAAG,QAAQ;AACrB,MAAMC,iBAAiB,GACrB,OAAOC,IAAI,KAAK,WAAW,IAAI,OAAOA,IAAI,CAACC,SAAS,KAAK,UAAU,GAC/D,IAAID,IAAI,CAACC,SAAS,CAACC,SAAS,EAAE;EAAEC,WAAW,EAAE;AAAW,CAAC,CAAC,GAC1D,IAAI;;AAEV;AACA,OAAO,MAAMC,iBAAiB,GAAIC,KAAa,IAAe;EAC5D,IAAIN,iBAAiB,EAAE;IACrB,OAAOO,KAAK,CAACC,IAAI,CACfR,iBAAiB,CAACS,OAAO,CAACH,KAAK,CAAC,EAC/BI,IAAI,IAAKA,IAAI,CAACD,OACjB,CAAC;EACH;EAEA,OAAOF,KAAK,CAACC,IAAI,CAACF,KAAK,CAAC;AAC1B,CAAC;;AAED;AACA,OAAO,MAAMK,oBAAoB,GAAIC,IAAY,IAC/CA,IAAI,KAAK,GAAG,GAAGb,IAAI,GAAGa,IAAI;;AAE5B;AACA,OAAO,MAAMC,YAAY,GAAID,IAAY,IAAKA,IAAI,IAAI,GAAG,IAAIA,IAAI,IAAI,GAAG;;AAExE;AACA,OAAO,MAAME,qBAAqB,GAAIC,KAAwB,IAAK;EACjE,MAAMC,eAAe,GAAGD,KAAK,CAACE,SAAS,CAACJ,YAAY,CAAC;EAErD,OAAOG,eAAe,KAAK,CAAC,CAAC,GAAGD,KAAK,CAACG,MAAM,GAAGF,eAAe;AAChE,CAAC","ignoreList":[]}
@@ -1,8 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  import { findNumericLeadLength, splitDisplayUnits } from "./display-units.js";
4
+
5
+ // strip formatting before comparing values so direction follows the displayed number
4
6
  const readNumericMagnitude = input => parseFloat(input.replace(/[^0-9.-]/g, "")) || 0;
7
+
8
+ // the sign controls which side of each digit lane enters and exits
5
9
  const deriveFlowDirection = (previousValue, nextValue) => Math.sign(readNumericMagnitude(nextValue) - readNumericMagnitude(previousValue));
10
+ // preserve right-aligned place values while allowing prefixes to grow or shrink
6
11
  export const reconcileNumericLanes = (previousValue, nextValue, previousKeys, seed) => {
7
12
  const previousUnits = splitDisplayUnits(previousValue);
8
13
  const nextUnits = splitDisplayUnits(nextValue);
@@ -1 +1 @@
1
- {"version":3,"names":["findNumericLeadLength","splitDisplayUnits","readNumericMagnitude","input","parseFloat","replace","deriveFlowDirection","previousValue","nextValue","Math","sign","reconcileNumericLanes","previousKeys","seed","previousUnits","nextUnits","nextLaneKeys","Array","length","nextSeed","nextLeadLength","previousLeadLength","sharedLeadLength","min","index","previousTailUnits","slice","nextTailUnits","previousTailKeys","laneCount","max","leftPaddedPreviousUnits","fill","leftPaddedNextUnits","leftPaddedPreviousKeys","nextTailOffset","paddedIndex","nextUnit","previousUnit","previousKey","laneKeys","direction"],"sourceRoot":"../../../src","sources":["model/numeric-lanes.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["findNumericLeadLength","splitDisplayUnits","readNumericMagnitude","input","parseFloat","replace","deriveFlowDirection","previousValue","nextValue","Math","sign","reconcileNumericLanes","previousKeys","seed","previousUnits","nextUnits","nextLaneKeys","Array","length","nextSeed","nextLeadLength","previousLeadLength","sharedLeadLength","min","index","previousTailUnits","slice","nextTailUnits","previousTailKeys","laneCount","max","leftPaddedPreviousUnits","fill","leftPaddedNextUnits","leftPaddedPreviousKeys","nextTailOffset","paddedIndex","nextUnit","previousUnit","previousKey","laneKeys","direction"],"sourceRoot":"../../../src","sources":["model/numeric-lanes.ts"],"mappings":"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","ignoreList":[]}
@@ -1,11 +1,14 @@
1
1
  "use strict";
2
2
 
3
+ // find the longest ordered set of shared units so edits keep nearby glyph identity
3
4
  const computeLcsPairs = (previousUnits, nextUnits) => {
4
5
  const previousLength = previousUnits.length;
5
6
  const nextLength = nextUnits.length;
6
7
  if (previousLength === 0 || nextLength === 0) {
7
8
  return [];
8
9
  }
10
+
11
+ // dynamic programming makes the middle edit deterministic when prefix and suffix match
9
12
  const dp = Array.from({
10
13
  length: previousLength + 1
11
14
  }, () => new Array(nextLength + 1).fill(0));
@@ -33,6 +36,7 @@ const computeLcsPairs = (previousUnits, nextUnits) => {
33
36
  pairs.reverse();
34
37
  return pairs;
35
38
  };
39
+ // reuse prefix, suffix, and lcs matches before allocating keys for new glyphs
36
40
  export const reconcileTextGlyphKeys = (previousUnits, nextUnits, previousKeys, seed, namespace) => {
37
41
  const previousLength = previousUnits.length;
38
42
  const nextLength = nextUnits.length;
@@ -1 +1 @@
1
- {"version":3,"names":["computeLcsPairs","previousUnits","nextUnits","previousLength","length","nextLength","dp","Array","from","fill","previousIndex","nextIndex","Math","max","pairs","push","reverse","reconcileTextGlyphKeys","previousKeys","seed","namespace","nextGlyphKeys","nextSeed","sharedPrefixLength","sharedSuffixLength","previousMiddleEnd","nextMiddleEnd","previousMiddleUnits","slice","nextMiddleUnits","matches","absolutePreviousIndex","absoluteNextIndex","glyphKeys"],"sourceRoot":"../../../src","sources":["model/text-keys.ts"],"mappings":";;AAAA,MAAMA,eAAe,GAAGA,CACtBC,aAAgC,EAChCC,SAA4B,KACI;EAChC,MAAMC,cAAc,GAAGF,aAAa,CAACG,MAAM;EAC3C,MAAMC,UAAU,GAAGH,SAAS,CAACE,MAAM;EAEnC,IAAID,cAAc,KAAK,CAAC,IAAIE,UAAU,KAAK,CAAC,EAAE;IAC5C,OAAO,EAAE;EACX;EAEA,MAAMC,EAAE,GAAGC,KAAK,CAACC,IAAI,CAAC;IAAEJ,MAAM,EAAED,cAAc,GAAG;EAAE,CAAC,EAAE,MACpD,IAAII,KAAK,CAASF,UAAU,GAAG,CAAC,CAAC,CAACI,IAAI,CAAC,CAAC,CAC1C,CAAC;EAED,KAAK,IAAIC,aAAa,GAAG,CAAC,EAAEA,aAAa,IAAIP,cAAc,EAAEO,aAAa,IAAI,CAAC,EAAE;IAC/E,KAAK,IAAIC,SAAS,GAAG,CAAC,EAAEA,SAAS,IAAIN,UAAU,EAAEM,SAAS,IAAI,CAAC,EAAE;MAC/DL,EAAE,CAACI,aAAa,CAAC,CAACC,SAAS,CAAC,GAC1BV,aAAa,CAACS,aAAa,GAAG,CAAC,CAAC,KAAKR,SAAS,CAACS,SAAS,GAAG,CAAC,CAAC,GACzDL,EAAE,CAACI,aAAa,GAAG,CAAC,CAAC,CAACC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,GACxCC,IAAI,CAACC,GAAG,CAACP,EAAE,CAACI,aAAa,GAAG,CAAC,CAAC,CAACC,SAAS,CAAC,EAAEL,EAAE,CAACI,aAAa,CAAC,CAACC,SAAS,GAAG,CAAC,CAAC,CAAC;IACpF;EACF;EAEA,MAAMG,KAAyB,GAAG,EAAE;EACpC,IAAIJ,aAAa,GAAGP,cAAc;EAClC,IAAIQ,SAAS,GAAGN,UAAU;EAE1B,OAAOK,aAAa,GAAG,CAAC,IAAIC,SAAS,GAAG,CAAC,EAAE;IACzC,IAAIV,aAAa,CAACS,aAAa,GAAG,CAAC,CAAC,KAAKR,SAAS,CAACS,SAAS,GAAG,CAAC,CAAC,EAAE;MACjEG,KAAK,CAACC,IAAI,CAAC,CAACL,aAAa,GAAG,CAAC,EAAEC,SAAS,GAAG,CAAC,CAAC,CAAC;MAC9CD,aAAa,IAAI,CAAC;MAClBC,SAAS,IAAI,CAAC;MACd;IACF;IAEA,IACEL,EAAE,CAACI,aAAa,GAAG,CAAC,CAAC,CAACC,SAAS,CAAC,GAAGL,EAAE,CAACI,aAAa,CAAC,CAACC,SAAS,GAAG,CAAC,CAAC,IAClEL,EAAE,CAACI,aAAa,GAAG,CAAC,CAAC,CAACC,SAAS,CAAC,KAAKL,EAAE,CAACI,aAAa,CAAC,CAACC,SAAS,GAAG,CAAC,CAAC,IACpED,aAAa,IAAIC,SAAU,EAC7B;MACAD,aAAa,IAAI,CAAC;IACpB,CAAC,MAAM;MACLC,SAAS,IAAI,CAAC;IAChB;EACF;EAEAG,KAAK,CAACE,OAAO,CAAC,CAAC;EACf,OAAOF,KAAK;AACd,CAAC;AAOD,OAAO,MAAMG,sBAAsB,GAAGA,CACpChB,aAAgC,EAChCC,SAA4B,EAC5BgB,YAA+B,EAC/BC,IAAY,EACZC,SAAiB,KACY;EAC7B,MAAMjB,cAAc,GAAGF,aAAa,CAACG,MAAM;EAC3C,MAAMC,UAAU,GAAGH,SAAS,CAACE,MAAM;EACnC,MAAMiB,aAAa,GAAG,IAAId,KAAK,CAASL,SAAS,CAACE,MAAM,CAAC,CAACK,IAAI,CAAC,EAAE,CAAC;EAClE,IAAIa,QAAQ,GAAGH,IAAI;EAEnB,IAAII,kBAAkB,GAAG,CAAC;EAC1B,OACEA,kBAAkB,GAAGpB,cAAc,IACnCoB,kBAAkB,GAAGlB,UAAU,IAC/BJ,aAAa,CAACsB,kBAAkB,CAAC,KAAKrB,SAAS,CAACqB,kBAAkB,CAAC,EACnE;IACAF,aAAa,CAACE,kBAAkB,CAAC,GAC/BL,YAAY,CAACK,kBAAkB,CAAC,IAAI,GAAGH,SAAS,KAAKE,QAAQ,EAAE,EAAE;IACnEC,kBAAkB,IAAI,CAAC;EACzB;EAEA,IAAIC,kBAAkB,GAAG,CAAC;EAC1B,OACEA,kBAAkB,GAAGrB,cAAc,GAAGoB,kBAAkB,IACxDC,kBAAkB,GAAGnB,UAAU,GAAGkB,kBAAkB,IACpDtB,aAAa,CAACE,cAAc,GAAG,CAAC,GAAGqB,kBAAkB,CAAC,KACpDtB,SAAS,CAACG,UAAU,GAAG,CAAC,GAAGmB,kBAAkB,CAAC,EAChD;IACA,MAAMd,aAAa,GAAGP,cAAc,GAAG,CAAC,GAAGqB,kBAAkB;IAC7D,MAAMb,SAAS,GAAGN,UAAU,GAAG,CAAC,GAAGmB,kBAAkB;IACrDH,aAAa,CAACV,SAAS,CAAC,GACtBO,YAAY,CAACR,aAAa,CAAC,IAAI,GAAGU,SAAS,KAAKE,QAAQ,EAAE,EAAE;IAC9DE,kBAAkB,IAAI,CAAC;EACzB;EAEA,MAAMC,iBAAiB,GAAGtB,cAAc,GAAGqB,kBAAkB;EAC7D,MAAME,aAAa,GAAGrB,UAAU,GAAGmB,kBAAkB;EACrD,MAAMG,mBAAmB,GAAG1B,aAAa,CAAC2B,KAAK,CAC7CL,kBAAkB,EAClBE,iBACF,CAAC;EACD,MAAMI,eAAe,GAAG3B,SAAS,CAAC0B,KAAK,CAACL,kBAAkB,EAAEG,aAAa,CAAC;;EAE1E;EACA,MAAMI,OAAO,GAAG9B,eAAe,CAAC2B,mBAAmB,EAAEE,eAAe,CAAC;EAErE,KAAK,MAAM,CAACnB,aAAa,EAAEC,SAAS,CAAC,IAAImB,OAAO,EAAE;IAChD,MAAMC,qBAAqB,GAAGrB,aAAa,GAAGa,kBAAkB;IAChE,MAAMS,iBAAiB,GAAGrB,SAAS,GAAGY,kBAAkB;IAExDF,aAAa,CAACW,iBAAiB,CAAC,GAC9Bd,YAAY,CAACa,qBAAqB,CAAC,IAAI,GAAGX,SAAS,KAAKE,QAAQ,EAAE,EAAE;EACxE;EAEA,KAAK,IAAIX,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAGU,aAAa,CAACjB,MAAM,EAAEO,SAAS,IAAI,CAAC,EAAE;IACxE,IAAI,CAACU,aAAa,CAACV,SAAS,CAAC,EAAE;MAC7BU,aAAa,CAACV,SAAS,CAAC,GAAG,GAAGS,SAAS,KAAKE,QAAQ,EAAE,EAAE;IAC1D;EACF;EAEA,OAAO;IACLW,SAAS,EAAEZ,aAAa;IACxBC;EACF,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["computeLcsPairs","previousUnits","nextUnits","previousLength","length","nextLength","dp","Array","from","fill","previousIndex","nextIndex","Math","max","pairs","push","reverse","reconcileTextGlyphKeys","previousKeys","seed","namespace","nextGlyphKeys","nextSeed","sharedPrefixLength","sharedSuffixLength","previousMiddleEnd","nextMiddleEnd","previousMiddleUnits","slice","nextMiddleUnits","matches","absolutePreviousIndex","absoluteNextIndex","glyphKeys"],"sourceRoot":"../../../src","sources":["model/text-keys.ts"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,38 @@
1
1
  "use strict";
2
2
 
3
3
  import { withDelay, withTiming } from "react-native-reanimated";
4
+ // leading replacements use scale while first appearance uses the regular fade path
5
+ export const createLeadingEnterTransition = ({
6
+ durationMs,
7
+ easing
8
+ }) => {
9
+ return () => {
10
+ "worklet";
11
+
12
+ return {
13
+ initialValues: {
14
+ opacity: 0,
15
+ transform: [{
16
+ scale: 0.5
17
+ }]
18
+ },
19
+ animations: {
20
+ opacity: withTiming(1, {
21
+ duration: durationMs,
22
+ easing
23
+ }),
24
+ transform: [{
25
+ scale: withTiming(1, {
26
+ duration: durationMs,
27
+ easing
28
+ })
29
+ }]
30
+ }
31
+ };
32
+ };
33
+ };
34
+
35
+ // one builder covers glyph opacity, travel, scale, and optional stagger timing
4
36
  export const createShiftTransition = ({
5
37
  delayMs = 0,
6
38
  durationMs,
@@ -49,4 +81,47 @@ export const createShiftTransition = ({
49
81
  };
50
82
  };
51
83
  };
84
+
85
+ // the shared swap flag lets an exiting worklet read the current transition type
86
+ export const createLeadingExitTransition = ({
87
+ durationMs,
88
+ easing,
89
+ leadingGap,
90
+ scale = false
91
+ }) => {
92
+ return values => {
93
+ "worklet";
94
+
95
+ const shouldScale = typeof scale === "object" ? scale.value > 0.5 : scale;
96
+ return {
97
+ initialValues: {
98
+ opacity: 1,
99
+ originX: values.currentOriginX,
100
+ ...(shouldScale ? {
101
+ transform: [{
102
+ scale: 1
103
+ }]
104
+ } : {})
105
+ },
106
+ animations: {
107
+ opacity: withTiming(0, {
108
+ duration: durationMs,
109
+ easing
110
+ }),
111
+ originX: withTiming(values.currentOriginX - values.currentWidth - leadingGap, {
112
+ duration: durationMs,
113
+ easing
114
+ }),
115
+ ...(shouldScale ? {
116
+ transform: [{
117
+ scale: withTiming(0.5, {
118
+ duration: durationMs,
119
+ easing
120
+ })
121
+ }]
122
+ } : {})
123
+ }
124
+ };
125
+ };
126
+ };
52
127
  //# sourceMappingURL=entry-exit-builders.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["withDelay","withTiming","createShiftTransition","delayMs","durationMs","easing","fromOpacity","toOpacity","fromTranslateY","toTranslateY","fromScale","toScale","animate","toValue","duration","initialValues","opacity","transform","translateY","scale","animations"],"sourceRoot":"../../../src","sources":["motion/entry-exit-builders.ts"],"mappings":";;AAAA,SAGEA,SAAS,EACTC,UAAU,QACL,yBAAyB;AAchC,OAAO,MAAMC,qBAAqB,GAAGA,CAAC;EACpCC,OAAO,GAAG,CAAC;EACXC,UAAU;EACVC,MAAM;EACNC,WAAW;EACXC,SAAS;EACTC,cAAc;EACdC,YAAY;EACZC,SAAS;EACTC;AACgB,CAAC,KAAiC;EAClD,OAAO,MAAM;IACX,SAAS;;IAET;IACA,MAAMC,OAAO,GAAIC,OAAe,IAC9BV,OAAO,GAAG,CAAC,GACPH,SAAS,CACPG,OAAO,EACPF,UAAU,CAACY,OAAO,EAAE;MAClBC,QAAQ,EAAEV,UAAU;MACpBC;IACF,CAAC,CACH,CAAC,GACDJ,UAAU,CAACY,OAAO,EAAE;MAClBC,QAAQ,EAAEV,UAAU;MACpBC;IACF,CAAC,CAAC;IAER,MAAMU,aAAsC,GAAG;MAC7CC,OAAO,EAAEV,WAAW;MACpBW,SAAS,EAAE,CACT;QAAEC,UAAU,EAAEV;MAAe,CAAC,EAC9B;QAAEW,KAAK,EAAET;MAAU,CAAC;IAExB,CAAC;IAED,MAAMU,UAAmC,GAAG;MAC1CJ,OAAO,EAAEJ,OAAO,CAACL,SAAS,CAAC;MAC3BU,SAAS,EAAE,CACT;QAAEC,UAAU,EAAEN,OAAO,CAACH,YAAY;MAAE,CAAC,EACrC;QAAEU,KAAK,EAAEP,OAAO,CAACD,OAAO;MAAE,CAAC;IAE/B,CAAC;IAED,OAAO;MACLI,aAAa,EAAE;QACb,GAAGA;MACL,CAAC;MACDK,UAAU,EAAE;QACV,GAAGA;MACL;IACF,CAAC;EACH,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["withDelay","withTiming","createLeadingEnterTransition","durationMs","easing","initialValues","opacity","transform","scale","animations","duration","createShiftTransition","delayMs","fromOpacity","toOpacity","fromTranslateY","toTranslateY","fromScale","toScale","animate","toValue","translateY","createLeadingExitTransition","leadingGap","values","shouldScale","value","originX","currentOriginX","currentWidth"],"sourceRoot":"../../../src","sources":["motion/entry-exit-builders.ts"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { Easing, LinearTransition, withDelay, withSpring, withTiming } from "react-native-reanimated";
4
+ // keep all presets on one curve family so layout and glyph motion agree
4
5
  const DEFAULT_CURVE = [0.19, 1, 0.22, 1];
5
6
  export const MOTION_PRESETS = {
6
7
  default: {
@@ -23,8 +24,12 @@ export const MOTION_PRESETS = {
23
24
  bounce: 0.3
24
25
  }
25
26
  };
27
+
28
+ // the public preset table uses seconds while reanimated timing uses milliseconds
26
29
  const toMilliseconds = seconds => Math.round(seconds * 1000);
27
30
  const toDampingRatio = bounce => Math.max(0.55, Math.min(1, 1 - bounce));
31
+
32
+ // spring and timing presets share the same opacity contract
28
33
  const createOpacityTransition = (fromOpacity, toOpacity, durationMs, easing) => {
29
34
  return () => {
30
35
  "worklet";
@@ -42,6 +47,8 @@ const createOpacityTransition = (fromOpacity, toOpacity, durationMs, easing) =>
42
47
  };
43
48
  };
44
49
  };
50
+
51
+ // convert a named preset into the builders consumed by every rendering variant
45
52
  export const resolveMotionRecipe = (presetName = "default", durationOverride) => {
46
53
  const preset = MOTION_PRESETS[presetName];
47
54
  const durationMs = durationOverride ?? toMilliseconds(preset.duration);
@@ -1 +1 @@
1
- {"version":3,"names":["Easing","LinearTransition","withDelay","withSpring","withTiming","DEFAULT_CURVE","MOTION_PRESETS","default","duration","ease","smooth","type","bounce","snappy","bouncy","toMilliseconds","seconds","Math","round","toDampingRatio","max","min","createOpacityTransition","fromOpacity","toOpacity","durationMs","easing","initialValues","opacity","animations","resolveMotionRecipe","presetName","durationOverride","preset","dampingRatio","bezier","layoutTransition","factory","enterTransition","exitTransition","driveNumber","toValue","delayMs","animation","overshootClamping","timingPreset","x1","y1","x2","y2"],"sourceRoot":"../../../src","sources":["motion/preset-map.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Easing","LinearTransition","withDelay","withSpring","withTiming","DEFAULT_CURVE","MOTION_PRESETS","default","duration","ease","smooth","type","bounce","snappy","bouncy","toMilliseconds","seconds","Math","round","toDampingRatio","max","min","createOpacityTransition","fromOpacity","toOpacity","durationMs","easing","initialValues","opacity","animations","resolveMotionRecipe","presetName","durationOverride","preset","dampingRatio","bezier","layoutTransition","factory","enterTransition","exitTransition","driveNumber","toValue","delayMs","animation","overshootClamping","timingPreset","x1","y1","x2","y2"],"sourceRoot":"../../../src","sources":["motion/preset-map.ts"],"mappings":"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","ignoreList":[]}
@@ -20,17 +20,36 @@ const rowAlignStyles = {
20
20
  alignSelf: "flex-end"
21
21
  }
22
22
  };
23
+
24
+ // render text and inline elements through one animated token row
23
25
  export const GlyphRun = /*#__PURE__*/React.memo(({
24
26
  glyphs,
25
27
  layoutTransition,
26
28
  enterTransition,
29
+ elementEnterTransition,
27
30
  exitTransition,
31
+ elementExitTransition,
32
+ leadingGap,
28
33
  align,
29
34
  textStyle,
30
35
  className
31
- }) => /*#__PURE__*/_jsx(View, {
36
+ }) =>
37
+ /*#__PURE__*/
38
+ // each token keeps its own view so reanimated can animate only changed content
39
+ _jsx(View, {
32
40
  style: [rowStyle, rowAlignStyles[align]],
33
- children: glyphs.map(glyph => /*#__PURE__*/_jsx(Animated.Text, {
41
+ children: glyphs.map((glyph, glyphIndex) => glyph.kind === "element" ? /*#__PURE__*/_jsx(Animated.View, {
42
+ layout: layoutTransition,
43
+ entering: elementEnterTransition ?? enterTransition,
44
+ exiting: elementExitTransition ?? exitTransition,
45
+ style: [{
46
+ alignItems: "center",
47
+ justifyContent: "center"
48
+ }, glyphIndex === 0 && (leadingGap ?? 0) > 0 ? {
49
+ marginRight: leadingGap
50
+ } : undefined],
51
+ children: glyph.element
52
+ }, glyph.id) : /*#__PURE__*/_jsx(Animated.Text, {
34
53
  layout: layoutTransition,
35
54
  entering: enterTransition,
36
55
  exiting: exitTransition,
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","Animated","jsx","_jsx","rowStyle","flexDirection","alignItems","alignSelf","rowAlignStyles","left","center","right","GlyphRun","memo","glyphs","layoutTransition","enterTransition","exitTransition","align","textStyle","className","style","children","map","glyph","Text","layout","entering","exiting","value","id","displayName"],"sourceRoot":"../../../src","sources":["view/glyph-run.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAAyCC,IAAI,QAAQ,cAAc;AACnE,OAAOC,QAAQ,MAAM,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAO/C,MAAMC,QAAQ,GAAG;EACfC,aAAa,EAAE,KAAK;EACpBC,UAAU,EAAE,QAAQ;EACpBC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,cAAc,GAAG;EACrBC,IAAI,EAAE;IAAEF,SAAS,EAAE;EAAa,CAAC;EACjCG,MAAM,EAAE;IAAEH,SAAS,EAAE;EAAS,CAAC;EAC/BI,KAAK,EAAE;IAAEJ,SAAS,EAAE;EAAW;AACjC,CAAU;AAEV,OAAO,MAAMK,QAAQ,gBAAGb,KAAK,CAACc,IAAI,CAChC,CAAC;EACCC,MAAM;EACNC,gBAAgB;EAChBC,eAAe;EACfC,cAAc;EACdC,KAAK;EACLC,SAAS;EACTC;AASD,CAAC,kBACEjB,IAAA,CAACH,IAAI;EAACqB,KAAK,EAAE,CAACjB,QAAQ,EAAEI,cAAc,CAACU,KAAK,CAAC,CAAE;EAAAI,QAAA,EAE5CR,MAAM,CAACS,GAAG,CAAEC,KAAK,iBAChBrB,IAAA,CAACF,QAAQ,CAACwB,IAAI;IAEZC,MAAM,EAAEX,gBAAiB;IACzBY,QAAQ,EAAEX,eAAgB;IAC1BY,OAAO,EAAEX,cAAe;IACxBI,KAAK,EAAEF,SAAU;IACjBC,SAAS,EAAEA,SAAU;IAAAE,QAAA,EAEpBE,KAAK,CAACK;EAAK,GAPPL,KAAK,CAACM,EAQE,CAChB;AAAC,CACE,CAEZ,CAAC;AAEDlB,QAAQ,CAACmB,WAAW,GAAG,UAAU","ignoreList":[]}
1
+ {"version":3,"names":["React","View","Animated","jsx","_jsx","rowStyle","flexDirection","alignItems","alignSelf","rowAlignStyles","left","center","right","GlyphRun","memo","glyphs","layoutTransition","enterTransition","elementEnterTransition","exitTransition","elementExitTransition","leadingGap","align","textStyle","className","style","children","map","glyph","glyphIndex","kind","layout","entering","exiting","justifyContent","marginRight","undefined","element","id","Text","value","displayName"],"sourceRoot":"../../../src","sources":["view/glyph-run.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAAyCC,IAAI,QAAQ,cAAc;AACnE,OAAOC,QAAQ,MAAM,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAO/C,MAAMC,QAAQ,GAAG;EACfC,aAAa,EAAE,KAAK;EACpBC,UAAU,EAAE,QAAQ;EACpBC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,cAAc,GAAG;EACrBC,IAAI,EAAE;IAAEF,SAAS,EAAE;EAAa,CAAC;EACjCG,MAAM,EAAE;IAAEH,SAAS,EAAE;EAAS,CAAC;EAC/BI,KAAK,EAAE;IAAEJ,SAAS,EAAE;EAAW;AACjC,CAAU;;AAEV;AACA,OAAO,MAAMK,QAAQ,gBAAGb,KAAK,CAACc,IAAI,CAChC,CAAC;EACCC,MAAM;EACNC,gBAAgB;EAChBC,eAAe;EACfC,sBAAsB;EACtBC,cAAc;EACdC,qBAAqB;EACrBC,UAAU;EACVC,KAAK;EACLC,SAAS;EACTC;AAYD,CAAC;AAAA;AACA;AACEpB,IAAA,CAACH,IAAI;EAACwB,KAAK,EAAE,CAACpB,QAAQ,EAAEI,cAAc,CAACa,KAAK,CAAC,CAAE;EAAAI,QAAA,EAE5CX,MAAM,CAACY,GAAG,CAAC,CAACC,KAAK,EAAEC,UAAU,KAC5BD,KAAK,CAACE,IAAI,KAAK,SAAS,gBACtB1B,IAAA,CAACF,QAAQ,CAACD,IAAI;IAEZ8B,MAAM,EAAEf,gBAAiB;IACzBgB,QAAQ,EAAEd,sBAAsB,IAAID,eAAgB;IACpDgB,OAAO,EAAEb,qBAAqB,IAAID,cAAe;IACjDM,KAAK,EAAE,CACL;MAAElB,UAAU,EAAE,QAAQ;MAAE2B,cAAc,EAAE;IAAS,CAAC,EAClDL,UAAU,KAAK,CAAC,IAAI,CAACR,UAAU,IAAI,CAAC,IAAI,CAAC,GACrC;MAAEc,WAAW,EAAEd;IAAW,CAAC,GAC3Be,SAAS,CACb;IAAAV,QAAA,EAEDE,KAAK,CAACS;EAAO,GAXTT,KAAK,CAACU,EAYE,CAAC,gBAEhBlC,IAAA,CAACF,QAAQ,CAACqC,IAAI;IAEZR,MAAM,EAAEf,gBAAiB;IACzBgB,QAAQ,EAAEf,eAAgB;IAC1BgB,OAAO,EAAEd,cAAe;IACxBM,KAAK,EAAEF,SAAU;IACjBC,SAAS,EAAEA,SAAU;IAAAE,QAAA,EAEpBE,KAAK,CAACY;EAAK,GAPPZ,KAAK,CAACU,EAQE,CAEnB;AAAC,CACG,CAEZ,CAAC;AAEDzB,QAAQ,CAAC4B,WAAW,GAAG,UAAU","ignoreList":[]}
@@ -50,6 +50,7 @@ const viewportAlignStyles = {
50
50
  alignItems: "flex-end"
51
51
  }
52
52
  };
53
+ // separate hidden measurement from visible content while sharing the shell alignment
53
54
  export const MorphViewport = /*#__PURE__*/React.memo(({
54
55
  autoSize,
55
56
  clipToBounds,
@@ -59,7 +60,10 @@ export const MorphViewport = /*#__PURE__*/React.memo(({
59
60
  measurement,
60
61
  children
61
62
  }) => {
63
+ // compute alignment once so the animated shell and its child share one layout contract
62
64
  const resolvedViewportStyle = useMemo(() => [viewportStyle, viewportAlignStyles[align], clipToBounds ? clippedViewportStyle : unclippedViewportStyle], [align, clipToBounds]);
65
+
66
+ // keep measurement outside the visible viewport so it cannot affect accessibility or layout
63
67
  return /*#__PURE__*/_jsx(View, {
64
68
  style: [shellStyle, shellAlignStyles[align], containerStyle],
65
69
  children: autoSize ? /*#__PURE__*/_jsxs(_Fragment, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useMemo","View","Animated","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","shellStyle","position","alignSelf","viewportStyle","measuredContentStyle","left","top","opacity","flexShrink","clippedViewportStyle","overflow","unclippedViewportStyle","fullWidthViewportStyle","width","shellAlignStyles","center","right","viewportAlignStyles","alignItems","MorphViewport","memo","autoSize","clipToBounds","align","containerStyle","animatedWidthStyle","measurement","children","resolvedViewportStyle","style","accessibilityElementsHidden","collapsable","importantForAccessibility","pointerEvents","displayName"],"sourceRoot":"../../../src","sources":["view/morph-viewport.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,IAAI,QAAQ,cAAc;AACnC,OAAOC,QAAQ,MAAM,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C,MAAMC,UAAU,GAAG;EACjBC,QAAQ,EAAE,UAAU;EACpBC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,aAAa,GAAG;EACpBD,SAAS,EAAE;AACb,CAAU;AAEV,MAAME,oBAA+B,GAAG;EACtCH,QAAQ,EAAE,UAAU;EACpBI,IAAI,EAAE,CAAC;EACPC,GAAG,EAAE,CAAC;EACNC,OAAO,EAAE,CAAC;EACVL,SAAS,EAAE,YAAY;EACvBM,UAAU,EAAE;AACd,CAAC;AAED,MAAMC,oBAA+B,GAAG;EACtCC,QAAQ,EAAE;AACZ,CAAC;AAED,MAAMC,sBAAiC,GAAG;EACxCD,QAAQ,EAAE;AACZ,CAAC;AAED,MAAME,sBAAiC,GAAG;EACxCC,KAAK,EAAE;AACT,CAAC;AAED,MAAMC,gBAAiD,GAAG;EACxDT,IAAI,EAAE;IAAEH,SAAS,EAAE;EAAa,CAAC;EACjCa,MAAM,EAAE;IAAEb,SAAS,EAAE;EAAS,CAAC;EAC/Bc,KAAK,EAAE;IAAEd,SAAS,EAAE;EAAW;AACjC,CAAC;AAED,MAAMe,mBAAoD,GAAG;EAC3DZ,IAAI,EAAE;IAAEa,UAAU,EAAE;EAAa,CAAC;EAClCH,MAAM,EAAE;IAAEG,UAAU,EAAE;EAAS,CAAC;EAChCF,KAAK,EAAE;IAAEE,UAAU,EAAE;EAAW;AAClC,CAAC;AAYD,OAAO,MAAMC,aAAa,gBAAG7B,KAAK,CAAC8B,IAAI,CACrC,CAAC;EACCC,QAAQ;EACRC,YAAY;EACZC,KAAK;EACLC,cAAc;EACdC,kBAAkB;EAClBC,WAAW;EACXC;AACkB,CAAC,KAAK;EACxB,MAAMC,qBAAqB,GAAGrC,OAAO,CACnC,MAAM,CACJY,aAAa,EACbc,mBAAmB,CAACM,KAAK,CAAC,EAC1BD,YAAY,GAAGb,oBAAoB,GAAGE,sBAAsB,CAC7D,EACD,CAACY,KAAK,EAAED,YAAY,CACtB,CAAC;EAED,oBACE3B,IAAA,CAACH,IAAI;IAACqC,KAAK,EAAE,CAAC7B,UAAU,EAAEc,gBAAgB,CAACS,KAAK,CAAC,EAAEC,cAAc,CAAE;IAAAG,QAAA,EAChEN,QAAQ,gBACPtB,KAAA,CAAAF,SAAA;MAAA8B,QAAA,gBACEhC,IAAA,CAACH,IAAI;QACHsC,2BAA2B;QAC3BC,WAAW,EAAE,KAAM;QACnBC,yBAAyB,EAAC,qBAAqB;QAC/CC,aAAa,EAAC,MAAM;QACpBJ,KAAK,EAAEzB,oBAAqB;QAAAuB,QAAA,EAE3BD;MAAW,CACR,CAAC,eACP/B,IAAA,CAACF,QAAQ,CAACD,IAAI;QAACqC,KAAK,EAAE,CAACD,qBAAqB,EAAEH,kBAAkB,CAAE;QAAAE,QAAA,EAC/DA;MAAQ,CACI,CAAC;IAAA,CAChB,CAAC,gBAEHhC,IAAA,CAACH,IAAI;MAACqC,KAAK,EAAE,CAACD,qBAAqB,EAAEhB,sBAAsB,CAAE;MAAAe,QAAA,EAC1DA;IAAQ,CACL;EACP,CACG,CAAC;AAEX,CACF,CAAC;AAEDR,aAAa,CAACe,WAAW,GAAG,eAAe","ignoreList":[]}
1
+ {"version":3,"names":["React","useMemo","View","Animated","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","shellStyle","position","alignSelf","viewportStyle","measuredContentStyle","left","top","opacity","flexShrink","clippedViewportStyle","overflow","unclippedViewportStyle","fullWidthViewportStyle","width","shellAlignStyles","center","right","viewportAlignStyles","alignItems","MorphViewport","memo","autoSize","clipToBounds","align","containerStyle","animatedWidthStyle","measurement","children","resolvedViewportStyle","style","accessibilityElementsHidden","collapsable","importantForAccessibility","pointerEvents","displayName"],"sourceRoot":"../../../src","sources":["view/morph-viewport.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,IAAI,QAAQ,cAAc;AACnC,OAAOC,QAAQ,MAAM,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C,MAAMC,UAAU,GAAG;EACjBC,QAAQ,EAAE,UAAU;EACpBC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,aAAa,GAAG;EACpBD,SAAS,EAAE;AACb,CAAU;AAEV,MAAME,oBAA+B,GAAG;EACtCH,QAAQ,EAAE,UAAU;EACpBI,IAAI,EAAE,CAAC;EACPC,GAAG,EAAE,CAAC;EACNC,OAAO,EAAE,CAAC;EACVL,SAAS,EAAE,YAAY;EACvBM,UAAU,EAAE;AACd,CAAC;AAED,MAAMC,oBAA+B,GAAG;EACtCC,QAAQ,EAAE;AACZ,CAAC;AAED,MAAMC,sBAAiC,GAAG;EACxCD,QAAQ,EAAE;AACZ,CAAC;AAED,MAAME,sBAAiC,GAAG;EACxCC,KAAK,EAAE;AACT,CAAC;AAED,MAAMC,gBAAiD,GAAG;EACxDT,IAAI,EAAE;IAAEH,SAAS,EAAE;EAAa,CAAC;EACjCa,MAAM,EAAE;IAAEb,SAAS,EAAE;EAAS,CAAC;EAC/Bc,KAAK,EAAE;IAAEd,SAAS,EAAE;EAAW;AACjC,CAAC;AAED,MAAMe,mBAAoD,GAAG;EAC3DZ,IAAI,EAAE;IAAEa,UAAU,EAAE;EAAa,CAAC;EAClCH,MAAM,EAAE;IAAEG,UAAU,EAAE;EAAS,CAAC;EAChCF,KAAK,EAAE;IAAEE,UAAU,EAAE;EAAW;AAClC,CAAC;AAYD;AACA,OAAO,MAAMC,aAAa,gBAAG7B,KAAK,CAAC8B,IAAI,CACrC,CAAC;EACCC,QAAQ;EACRC,YAAY;EACZC,KAAK;EACLC,cAAc;EACdC,kBAAkB;EAClBC,WAAW;EACXC;AACkB,CAAC,KAAK;EACxB;EACA,MAAMC,qBAAqB,GAAGrC,OAAO,CACnC,MAAM,CACJY,aAAa,EACbc,mBAAmB,CAACM,KAAK,CAAC,EAC1BD,YAAY,GAAGb,oBAAoB,GAAGE,sBAAsB,CAC7D,EACD,CAACY,KAAK,EAAED,YAAY,CACtB,CAAC;;EAED;EACA,oBACE3B,IAAA,CAACH,IAAI;IAACqC,KAAK,EAAE,CAAC7B,UAAU,EAAEc,gBAAgB,CAACS,KAAK,CAAC,EAAEC,cAAc,CAAE;IAAAG,QAAA,EAChEN,QAAQ,gBACPtB,KAAA,CAAAF,SAAA;MAAA8B,QAAA,gBACEhC,IAAA,CAACH,IAAI;QACHsC,2BAA2B;QAC3BC,WAAW,EAAE,KAAM;QACnBC,yBAAyB,EAAC,qBAAqB;QAC/CC,aAAa,EAAC,MAAM;QACpBJ,KAAK,EAAEzB,oBAAqB;QAAAuB,QAAA,EAE3BD;MAAW,CACR,CAAC,eACP/B,IAAA,CAACF,QAAQ,CAACD,IAAI;QAACqC,KAAK,EAAE,CAACD,qBAAqB,EAAEH,kBAAkB,CAAE;QAAAE,QAAA,EAC/DA;MAAQ,CACI,CAAC;IAAA,CAChB,CAAC,gBAEHhC,IAAA,CAACH,IAAI;MAACqC,KAAK,EAAE,CAACD,qBAAqB,EAAEhB,sBAAsB,CAAE;MAAAe,QAAA,EAC1DA;IAAQ,CACL;EACP,CACG,CAAC;AAEX,CACF,CAAC;AAEDR,aAAa,CAACe,WAAW,GAAG,eAAe","ignoreList":[]}
@@ -18,6 +18,7 @@ const laneTokenStyle = {
18
18
  top: 0,
19
19
  left: 0
20
20
  };
21
+ // render one place-value lane with a hidden layout probe and an animated token
21
22
  export const NumberLane = /*#__PURE__*/React.memo(({
22
23
  unit,
23
24
  tokenKey,
@@ -30,6 +31,7 @@ export const NumberLane = /*#__PURE__*/React.memo(({
30
31
  textStyle,
31
32
  className
32
33
  }) => {
34
+ // punctuation stays in place while digits travel by the shared numeric direction
33
35
  const usesDigitTravel = isAsciiDigit(unit);
34
36
  const verticalOffset = direction > 0 ? travelDistance : direction < 0 ? -travelDistance : 0;
35
37
  const enterTransition = useMemo(() => createShiftTransition({
@@ -54,6 +56,8 @@ export const NumberLane = /*#__PURE__*/React.memo(({
54
56
  fromScale: 1,
55
57
  toScale: 0.6
56
58
  }), [delayMs, motionRecipe.durationMs, motionRecipe.easing, usesDigitTravel, verticalOffset]);
59
+
60
+ // prefix units do not need an absolute lane or a duplicate probe
57
61
  if (isLead) {
58
62
  return /*#__PURE__*/_jsx(Text, {
59
63
  style: textStyle,
@@ -62,7 +66,7 @@ export const NumberLane = /*#__PURE__*/React.memo(({
62
66
  });
63
67
  }
64
68
  return /*#__PURE__*/_jsxs(Animated.View, {
65
- layout: motionRecipe.layoutTransition,
69
+ layout: hasAnimated ? motionRecipe.layoutTransition : undefined,
66
70
  entering: hasAnimated ? motionRecipe.enterTransition : undefined,
67
71
  exiting: motionRecipe.exitTransition,
68
72
  style: laneStyle,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useMemo","Text","Animated","isAsciiDigit","createShiftTransition","jsx","_jsx","jsxs","_jsxs","laneStyle","position","alignSelf","laneProbeStyle","opacity","laneTokenStyle","top","left","NumberLane","memo","unit","tokenKey","isLead","hasAnimated","delayMs","direction","travelDistance","motionRecipe","textStyle","className","usesDigitTravel","verticalOffset","enterTransition","durationMs","easing","fromOpacity","toOpacity","fromTranslateY","toTranslateY","fromScale","toScale","exitTransition","style","children","View","layout","layoutTransition","entering","undefined","exiting","displayName"],"sourceRoot":"../../../src","sources":["view/number-lane.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useMemo","Text","Animated","isAsciiDigit","createShiftTransition","jsx","_jsx","jsxs","_jsxs","laneStyle","position","alignSelf","laneProbeStyle","opacity","laneTokenStyle","top","left","NumberLane","memo","unit","tokenKey","isLead","hasAnimated","delayMs","direction","travelDistance","motionRecipe","textStyle","className","usesDigitTravel","verticalOffset","enterTransition","durationMs","easing","fromOpacity","toOpacity","fromTranslateY","toTranslateY","fromScale","toScale","exitTransition","style","children","View","layout","layoutTransition","undefined","entering","exiting","displayName"],"sourceRoot":"../../../src","sources":["view/number-lane.tsx"],"mappings":"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","ignoreList":[]}
@@ -21,6 +21,7 @@ const rowAlignStyles = {
21
21
  alignSelf: "flex-end"
22
22
  }
23
23
  };
24
+ // arrange numeric lanes from left to right while the hook preserves their identities
24
25
  export const NumberRun = /*#__PURE__*/React.memo(({
25
26
  value,
26
27
  motionRecipe,
@@ -30,6 +31,7 @@ export const NumberRun = /*#__PURE__*/React.memo(({
30
31
  staggerMs,
31
32
  className
32
33
  }) => {
34
+ // the hook owns lane identity while this component owns row placement and timing
33
35
  const {
34
36
  units,
35
37
  laneKeys,
@@ -44,6 +46,8 @@ export const NumberRun = /*#__PURE__*/React.memo(({
44
46
  hasAnimatedRef.current = true;
45
47
  lastValueRef.current = value;
46
48
  }
49
+
50
+ // scale travel from the font while keeping a minimum visible movement
47
51
  const travelDistance = useMemo(() => Math.max(8, Math.round((fontSize ?? 16) * 0.4)), [fontSize]);
48
52
  const hasAnimated = hasAnimatedRef.current;
49
53
  return /*#__PURE__*/_jsx(View, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useMemo","useRef","View","useNumericLanes","NumberLane","jsx","_jsx","rowStyle","flexDirection","alignItems","alignSelf","rowAlignStyles","left","center","right","NumberRun","memo","value","motionRecipe","align","fontSize","textStyle","staggerMs","className","units","laneKeys","direction","leadLength","lastValueRef","hasAnimatedRef","current","travelDistance","Math","max","round","hasAnimated","style","children","map","unit","index","inLead","laneKey","length","tokenKey","isLead","delayMs","displayName"],"sourceRoot":"../../../src","sources":["view/number-run.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AAC9C,SAAyCC,IAAI,QAAQ,cAAc;AACnE,SAASC,eAAe,QAAQ,+BAA4B;AAE5D,SAASC,UAAU,QAAQ,kBAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE3C,MAAMC,QAAQ,GAAG;EACfC,aAAa,EAAE,KAAK;EACpBC,UAAU,EAAE,QAAQ;EACpBC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,cAAc,GAAG;EACrBC,IAAI,EAAE;IAAEF,SAAS,EAAE;EAAa,CAAC;EACjCG,MAAM,EAAE;IAAEH,SAAS,EAAE;EAAS,CAAC;EAC/BI,KAAK,EAAE;IAAEJ,SAAS,EAAE;EAAW;AACjC,CAAU;AAYV,OAAO,MAAMK,SAAS,gBAAGhB,KAAK,CAACiB,IAAI,CACjC,CAAC;EACCC,KAAK;EACLC,YAAY;EACZC,KAAK;EACLC,QAAQ;EACRC,SAAS;EACTC,SAAS;EACTC;AACwB,CAAC,KAAK;EAC9B,MAAM;IAAEC,KAAK;IAAEC,QAAQ;IAAEC,SAAS;IAAEC;EAAW,CAAC,GAAGxB,eAAe,CAACc,KAAK,CAAC;EACzE,MAAMW,YAAY,GAAG3B,MAAM,CAACgB,KAAK,CAAC;EAClC,MAAMY,cAAc,GAAG5B,MAAM,CAAC,KAAK,CAAC;;EAEpC;EACA,IAAIgB,KAAK,KAAKW,YAAY,CAACE,OAAO,EAAE;IAClCD,cAAc,CAACC,OAAO,GAAG,IAAI;IAC7BF,YAAY,CAACE,OAAO,GAAGb,KAAK;EAC9B;EAEA,MAAMc,cAAc,GAAG/B,OAAO,CAC5B,MAAMgC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,KAAK,CAAC,CAACd,QAAQ,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,EACrD,CAACA,QAAQ,CACX,CAAC;EACD,MAAMe,WAAW,GAAGN,cAAc,CAACC,OAAO;EAE1C,oBACExB,IAAA,CAACJ,IAAI;IAACkC,KAAK,EAAE,CAAC7B,QAAQ,EAAEI,cAAc,CAACQ,KAAK,CAAC,CAAE;IAAAkB,QAAA,EAC5Cb,KAAK,CAACc,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;MAC1B,MAAMC,MAAM,GAAGD,KAAK,GAAGb,UAAU;MACjC,MAAMe,OAAO,GAAGD,MAAM,GAClB,QAAQD,KAAK,EAAE,GACf,QAAQhB,KAAK,CAACmB,MAAM,GAAG,CAAC,GAAGH,KAAK,EAAE;MAEtC,oBACElC,IAAA,CAACF,UAAU;QAETmC,IAAI,EAAEA,IAAK;QACXK,QAAQ,EAAEnB,QAAQ,CAACe,KAAK,CAAE;QAC1BK,MAAM,EAAEJ,MAAO;QACfN,WAAW,EAAEA,WAAY;QACzBW,OAAO,EAAEN,KAAK,GAAGlB,SAAU;QAC3BI,SAAS,EAAEA,SAAU;QACrBK,cAAc,EAAEA,cAAe;QAC/Bb,YAAY,EAAEA,YAAa;QAC3BG,SAAS,EAAEA,SAAU;QACrBE,SAAS,EAAEA;MAAU,GAVhBmB,OAWN,CAAC;IAEN,CAAC;EAAC,CACE,CAAC;AAEX,CACF,CAAC;AAED3B,SAAS,CAACgC,WAAW,GAAG,WAAW","ignoreList":[]}
1
+ {"version":3,"names":["React","useMemo","useRef","View","useNumericLanes","NumberLane","jsx","_jsx","rowStyle","flexDirection","alignItems","alignSelf","rowAlignStyles","left","center","right","NumberRun","memo","value","motionRecipe","align","fontSize","textStyle","staggerMs","className","units","laneKeys","direction","leadLength","lastValueRef","hasAnimatedRef","current","travelDistance","Math","max","round","hasAnimated","style","children","map","unit","index","inLead","laneKey","length","tokenKey","isLead","delayMs","displayName"],"sourceRoot":"../../../src","sources":["view/number-run.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AAC9C,SAAyCC,IAAI,QAAQ,cAAc;AACnE,SAASC,eAAe,QAAQ,+BAA4B;AAE5D,SAASC,UAAU,QAAQ,kBAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE3C,MAAMC,QAAQ,GAAG;EACfC,aAAa,EAAE,KAAK;EACpBC,UAAU,EAAE,QAAQ;EACpBC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,cAAc,GAAG;EACrBC,IAAI,EAAE;IAAEF,SAAS,EAAE;EAAa,CAAC;EACjCG,MAAM,EAAE;IAAEH,SAAS,EAAE;EAAS,CAAC;EAC/BI,KAAK,EAAE;IAAEJ,SAAS,EAAE;EAAW;AACjC,CAAU;AAYV;AACA,OAAO,MAAMK,SAAS,gBAAGhB,KAAK,CAACiB,IAAI,CACjC,CAAC;EACCC,KAAK;EACLC,YAAY;EACZC,KAAK;EACLC,QAAQ;EACRC,SAAS;EACTC,SAAS;EACTC;AACwB,CAAC,KAAK;EAC9B;EACA,MAAM;IAAEC,KAAK;IAAEC,QAAQ;IAAEC,SAAS;IAAEC;EAAW,CAAC,GAAGxB,eAAe,CAACc,KAAK,CAAC;EACzE,MAAMW,YAAY,GAAG3B,MAAM,CAACgB,KAAK,CAAC;EAClC,MAAMY,cAAc,GAAG5B,MAAM,CAAC,KAAK,CAAC;;EAEpC;EACA,IAAIgB,KAAK,KAAKW,YAAY,CAACE,OAAO,EAAE;IAClCD,cAAc,CAACC,OAAO,GAAG,IAAI;IAC7BF,YAAY,CAACE,OAAO,GAAGb,KAAK;EAC9B;;EAEA;EACA,MAAMc,cAAc,GAAG/B,OAAO,CAC5B,MAAMgC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,KAAK,CAAC,CAACd,QAAQ,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,EACrD,CAACA,QAAQ,CACX,CAAC;EACD,MAAMe,WAAW,GAAGN,cAAc,CAACC,OAAO;EAE1C,oBACExB,IAAA,CAACJ,IAAI;IAACkC,KAAK,EAAE,CAAC7B,QAAQ,EAAEI,cAAc,CAACQ,KAAK,CAAC,CAAE;IAAAkB,QAAA,EAC5Cb,KAAK,CAACc,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;MAC1B,MAAMC,MAAM,GAAGD,KAAK,GAAGb,UAAU;MACjC,MAAMe,OAAO,GAAGD,MAAM,GAClB,QAAQD,KAAK,EAAE,GACf,QAAQhB,KAAK,CAACmB,MAAM,GAAG,CAAC,GAAGH,KAAK,EAAE;MAEtC,oBACElC,IAAA,CAACF,UAAU;QAETmC,IAAI,EAAEA,IAAK;QACXK,QAAQ,EAAEnB,QAAQ,CAACe,KAAK,CAAE;QAC1BK,MAAM,EAAEJ,MAAO;QACfN,WAAW,EAAEA,WAAY;QACzBW,OAAO,EAAEN,KAAK,GAAGlB,SAAU;QAC3BI,SAAS,EAAEA,SAAU;QACrBK,cAAc,EAAEA,cAAe;QAC/Bb,YAAY,EAAEA,YAAa;QAC3BG,SAAS,EAAEA,SAAU;QACrBE,SAAS,EAAEA;MAAU,GAVhBmB,OAWN,CAAC;IAEN,CAAC;EAAC,CACE,CAAC;AAEX,CACF,CAAC;AAED3B,SAAS,CAACgC,WAAW,GAAG,WAAW","ignoreList":[]}