@shopify/react-native-skia 0.1.222 → 0.1.223

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 (210) hide show
  1. package/cpp/api/JsiSkApi.h +5 -0
  2. package/cpp/api/JsiSkFontMgrFactory.h +9 -4
  3. package/cpp/api/JsiSkParagraph.h +135 -0
  4. package/cpp/api/JsiSkParagraphBuilder.h +159 -0
  5. package/cpp/api/JsiSkParagraphStyle.h +124 -0
  6. package/cpp/api/JsiSkStrutStyle.h +96 -0
  7. package/cpp/api/JsiSkTextStyle.h +185 -0
  8. package/cpp/jsi/JsiHostObject.h +21 -0
  9. package/cpp/rnskia/dom/JsiDomApi.h +4 -0
  10. package/cpp/rnskia/dom/nodes/JsiParagraphNode.h +62 -0
  11. package/cpp/rnskia/dom/props/ParagraphProp.h +45 -0
  12. package/cpp/skia/modules/skunicode/include/SkUnicode.h +312 -0
  13. package/cpp/skia/src/base/SkTInternalLList.h +304 -0
  14. package/cpp/skia/src/base/SkUTF.h +95 -0
  15. package/cpp/skia/src/core/SkLRUCache.h +130 -0
  16. package/lib/commonjs/dom/nodes/JsiSkDOM.d.ts +2 -0
  17. package/lib/commonjs/dom/nodes/JsiSkDOM.js +7 -0
  18. package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
  19. package/lib/commonjs/dom/nodes/drawings/ParagraphNode.d.ts +8 -0
  20. package/lib/commonjs/dom/nodes/drawings/ParagraphNode.js +41 -0
  21. package/lib/commonjs/dom/nodes/drawings/ParagraphNode.js.map +1 -0
  22. package/lib/commonjs/dom/types/NodeType.d.ts +2 -1
  23. package/lib/commonjs/dom/types/NodeType.js +1 -0
  24. package/lib/commonjs/dom/types/NodeType.js.map +1 -1
  25. package/lib/commonjs/dom/types/Paragraph.d.ts +8 -0
  26. package/lib/commonjs/dom/types/Paragraph.js +6 -0
  27. package/lib/commonjs/dom/types/Paragraph.js.map +1 -0
  28. package/lib/commonjs/dom/types/SkDOM.d.ts +2 -0
  29. package/lib/commonjs/dom/types/SkDOM.js.map +1 -1
  30. package/lib/commonjs/dom/types/index.d.ts +1 -0
  31. package/lib/commonjs/dom/types/index.js +13 -0
  32. package/lib/commonjs/dom/types/index.js.map +1 -1
  33. package/lib/commonjs/renderer/HostComponents.d.ts +3 -1
  34. package/lib/commonjs/renderer/HostComponents.js +4 -0
  35. package/lib/commonjs/renderer/HostComponents.js.map +1 -1
  36. package/lib/commonjs/renderer/components/index.d.ts +1 -0
  37. package/lib/commonjs/renderer/components/index.js +13 -0
  38. package/lib/commonjs/renderer/components/index.js.map +1 -1
  39. package/lib/commonjs/renderer/components/paragraph/Paragraph.d.ts +4 -0
  40. package/lib/commonjs/renderer/components/paragraph/Paragraph.js +17 -0
  41. package/lib/commonjs/renderer/components/paragraph/Paragraph.js.map +1 -0
  42. package/lib/commonjs/renderer/components/paragraph/index.d.ts +1 -0
  43. package/lib/commonjs/renderer/components/paragraph/index.js +19 -0
  44. package/lib/commonjs/renderer/components/paragraph/index.js.map +1 -0
  45. package/lib/commonjs/skia/types/Paragraph/Paragraph.d.ts +56 -0
  46. package/lib/commonjs/skia/types/Paragraph/Paragraph.js +6 -0
  47. package/lib/commonjs/skia/types/Paragraph/Paragraph.js.map +1 -0
  48. package/lib/commonjs/skia/types/Paragraph/ParagraphBuilder.d.ts +60 -0
  49. package/lib/commonjs/skia/types/Paragraph/ParagraphBuilder.js +18 -0
  50. package/lib/commonjs/skia/types/Paragraph/ParagraphBuilder.js.map +1 -0
  51. package/lib/commonjs/skia/types/Paragraph/ParagraphStyle.d.ts +41 -0
  52. package/lib/commonjs/skia/types/Paragraph/ParagraphStyle.js +36 -0
  53. package/lib/commonjs/skia/types/Paragraph/ParagraphStyle.js.map +1 -0
  54. package/lib/commonjs/skia/types/Paragraph/TextStyle.d.ts +62 -0
  55. package/lib/commonjs/skia/types/Paragraph/TextStyle.js +35 -0
  56. package/lib/commonjs/skia/types/Paragraph/TextStyle.js.map +1 -0
  57. package/lib/commonjs/skia/types/Paragraph/index.d.ts +6 -0
  58. package/lib/commonjs/skia/types/Paragraph/index.js +84 -0
  59. package/lib/commonjs/skia/types/Paragraph/index.js.map +1 -0
  60. package/lib/commonjs/skia/types/Skia.d.ts +2 -0
  61. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  62. package/lib/commonjs/skia/types/index.d.ts +1 -0
  63. package/lib/commonjs/skia/types/index.js +13 -0
  64. package/lib/commonjs/skia/types/index.js.map +1 -1
  65. package/lib/commonjs/skia/web/JsiSkParagraph.d.ts +16 -0
  66. package/lib/commonjs/skia/web/JsiSkParagraph.js +91 -0
  67. package/lib/commonjs/skia/web/JsiSkParagraph.js.map +1 -0
  68. package/lib/commonjs/skia/web/JsiSkParagraphBuilder.d.ts +15 -0
  69. package/lib/commonjs/skia/web/JsiSkParagraphBuilder.js +85 -0
  70. package/lib/commonjs/skia/web/JsiSkParagraphBuilder.js.map +1 -0
  71. package/lib/commonjs/skia/web/JsiSkParagraphBuilderFactory.d.ts +8 -0
  72. package/lib/commonjs/skia/web/JsiSkParagraphBuilderFactory.js +34 -0
  73. package/lib/commonjs/skia/web/JsiSkParagraphBuilderFactory.js.map +1 -0
  74. package/lib/commonjs/skia/web/JsiSkParagraphStyle.d.ts +5 -0
  75. package/lib/commonjs/skia/web/JsiSkParagraphStyle.js +59 -0
  76. package/lib/commonjs/skia/web/JsiSkParagraphStyle.js.map +1 -0
  77. package/lib/commonjs/skia/web/JsiSkTextStyle.d.ts +5 -0
  78. package/lib/commonjs/skia/web/JsiSkTextStyle.js +54 -0
  79. package/lib/commonjs/skia/web/JsiSkTextStyle.js.map +1 -0
  80. package/lib/commonjs/skia/web/JsiSkia.js +4 -1
  81. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  82. package/lib/module/dom/nodes/JsiSkDOM.d.ts +2 -0
  83. package/lib/module/dom/nodes/JsiSkDOM.js +6 -0
  84. package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
  85. package/lib/module/dom/nodes/drawings/ParagraphNode.d.ts +8 -0
  86. package/lib/module/dom/nodes/drawings/ParagraphNode.js +30 -0
  87. package/lib/module/dom/nodes/drawings/ParagraphNode.js.map +1 -0
  88. package/lib/module/dom/types/NodeType.d.ts +2 -1
  89. package/lib/module/dom/types/NodeType.js +1 -0
  90. package/lib/module/dom/types/NodeType.js.map +1 -1
  91. package/lib/module/dom/types/Paragraph.d.ts +8 -0
  92. package/lib/module/dom/types/Paragraph.js +2 -0
  93. package/lib/module/dom/types/Paragraph.js.map +1 -0
  94. package/lib/module/dom/types/SkDOM.d.ts +2 -0
  95. package/lib/module/dom/types/SkDOM.js.map +1 -1
  96. package/lib/module/dom/types/index.d.ts +1 -0
  97. package/lib/module/dom/types/index.js +1 -0
  98. package/lib/module/dom/types/index.js.map +1 -1
  99. package/lib/module/renderer/HostComponents.d.ts +3 -1
  100. package/lib/module/renderer/HostComponents.js +4 -0
  101. package/lib/module/renderer/HostComponents.js.map +1 -1
  102. package/lib/module/renderer/components/index.d.ts +1 -0
  103. package/lib/module/renderer/components/index.js +1 -0
  104. package/lib/module/renderer/components/index.js.map +1 -1
  105. package/lib/module/renderer/components/paragraph/Paragraph.d.ts +4 -0
  106. package/lib/module/renderer/components/paragraph/Paragraph.js +5 -0
  107. package/lib/module/renderer/components/paragraph/Paragraph.js.map +1 -0
  108. package/lib/module/renderer/components/paragraph/index.d.ts +1 -0
  109. package/lib/module/renderer/components/paragraph/index.js +2 -0
  110. package/lib/module/renderer/components/paragraph/index.js.map +1 -0
  111. package/lib/module/skia/types/Paragraph/Paragraph.d.ts +56 -0
  112. package/lib/module/skia/types/Paragraph/Paragraph.js +2 -0
  113. package/lib/module/skia/types/Paragraph/Paragraph.js.map +1 -0
  114. package/lib/module/skia/types/Paragraph/ParagraphBuilder.d.ts +60 -0
  115. package/lib/module/skia/types/Paragraph/ParagraphBuilder.js +11 -0
  116. package/lib/module/skia/types/Paragraph/ParagraphBuilder.js.map +1 -0
  117. package/lib/module/skia/types/Paragraph/ParagraphStyle.d.ts +41 -0
  118. package/lib/module/skia/types/Paragraph/ParagraphStyle.js +27 -0
  119. package/lib/module/skia/types/Paragraph/ParagraphStyle.js.map +1 -0
  120. package/lib/module/skia/types/Paragraph/TextStyle.d.ts +62 -0
  121. package/lib/module/skia/types/Paragraph/TextStyle.js +26 -0
  122. package/lib/module/skia/types/Paragraph/TextStyle.js.map +1 -0
  123. package/lib/module/skia/types/Paragraph/index.d.ts +6 -0
  124. package/lib/module/skia/types/Paragraph/index.js +7 -0
  125. package/lib/module/skia/types/Paragraph/index.js.map +1 -0
  126. package/lib/module/skia/types/Skia.d.ts +2 -0
  127. package/lib/module/skia/types/Skia.js.map +1 -1
  128. package/lib/module/skia/types/index.d.ts +1 -0
  129. package/lib/module/skia/types/index.js +1 -0
  130. package/lib/module/skia/types/index.js.map +1 -1
  131. package/lib/module/skia/web/JsiSkParagraph.d.ts +16 -0
  132. package/lib/module/skia/web/JsiSkParagraph.js +81 -0
  133. package/lib/module/skia/web/JsiSkParagraph.js.map +1 -0
  134. package/lib/module/skia/web/JsiSkParagraphBuilder.d.ts +15 -0
  135. package/lib/module/skia/web/JsiSkParagraphBuilder.js +73 -0
  136. package/lib/module/skia/web/JsiSkParagraphBuilder.js.map +1 -0
  137. package/lib/module/skia/web/JsiSkParagraphBuilderFactory.d.ts +8 -0
  138. package/lib/module/skia/web/JsiSkParagraphBuilderFactory.js +21 -0
  139. package/lib/module/skia/web/JsiSkParagraphBuilderFactory.js.map +1 -0
  140. package/lib/module/skia/web/JsiSkParagraphStyle.d.ts +5 -0
  141. package/lib/module/skia/web/JsiSkParagraphStyle.js +49 -0
  142. package/lib/module/skia/web/JsiSkParagraphStyle.js.map +1 -0
  143. package/lib/module/skia/web/JsiSkTextStyle.d.ts +5 -0
  144. package/lib/module/skia/web/JsiSkTextStyle.js +45 -0
  145. package/lib/module/skia/web/JsiSkTextStyle.js.map +1 -0
  146. package/lib/module/skia/web/JsiSkia.js +3 -1
  147. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  148. package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +2 -0
  149. package/lib/typescript/src/dom/nodes/drawings/ParagraphNode.d.ts +8 -0
  150. package/lib/typescript/src/dom/types/NodeType.d.ts +2 -1
  151. package/lib/typescript/src/dom/types/Paragraph.d.ts +8 -0
  152. package/lib/typescript/src/dom/types/SkDOM.d.ts +2 -0
  153. package/lib/typescript/src/dom/types/index.d.ts +1 -0
  154. package/lib/typescript/src/renderer/HostComponents.d.ts +3 -1
  155. package/lib/typescript/src/renderer/components/index.d.ts +1 -0
  156. package/lib/typescript/src/renderer/components/paragraph/Paragraph.d.ts +4 -0
  157. package/lib/typescript/src/renderer/components/paragraph/index.d.ts +1 -0
  158. package/lib/typescript/src/skia/types/Paragraph/Paragraph.d.ts +56 -0
  159. package/lib/typescript/src/skia/types/Paragraph/ParagraphBuilder.d.ts +60 -0
  160. package/lib/typescript/src/skia/types/Paragraph/ParagraphStyle.d.ts +41 -0
  161. package/lib/typescript/src/skia/types/Paragraph/TextStyle.d.ts +62 -0
  162. package/lib/typescript/src/skia/types/Paragraph/index.d.ts +6 -0
  163. package/lib/typescript/src/skia/types/Skia.d.ts +2 -0
  164. package/lib/typescript/src/skia/types/index.d.ts +1 -0
  165. package/lib/typescript/src/skia/web/JsiSkParagraph.d.ts +16 -0
  166. package/lib/typescript/src/skia/web/JsiSkParagraphBuilder.d.ts +15 -0
  167. package/lib/typescript/src/skia/web/JsiSkParagraphBuilderFactory.d.ts +8 -0
  168. package/lib/typescript/src/skia/web/JsiSkParagraphStyle.d.ts +5 -0
  169. package/lib/typescript/src/skia/web/JsiSkTextStyle.d.ts +5 -0
  170. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  171. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  172. package/libs/ios/libskottie.xcframework/Info.plist +5 -5
  173. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  174. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  175. package/libs/ios/libskparagraph.xcframework/Info.plist +5 -5
  176. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  177. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  178. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  179. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  180. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  181. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  182. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  183. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  184. package/libs/ios/libsvg.xcframework/Info.plist +5 -5
  185. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  186. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  187. package/package.json +1 -1
  188. package/src/dom/nodes/JsiSkDOM.ts +9 -0
  189. package/src/dom/nodes/drawings/ParagraphNode.ts +22 -0
  190. package/src/dom/types/NodeType.ts +3 -0
  191. package/src/dom/types/Paragraph.ts +10 -0
  192. package/src/dom/types/SkDOM.ts +4 -0
  193. package/src/dom/types/index.ts +1 -0
  194. package/src/renderer/HostComponents.ts +10 -0
  195. package/src/renderer/components/index.ts +2 -0
  196. package/src/renderer/components/paragraph/Paragraph.tsx +8 -0
  197. package/src/renderer/components/paragraph/index.ts +1 -0
  198. package/src/skia/types/Paragraph/Paragraph.ts +59 -0
  199. package/src/skia/types/Paragraph/ParagraphBuilder.ts +96 -0
  200. package/src/skia/types/Paragraph/ParagraphStyle.ts +45 -0
  201. package/src/skia/types/Paragraph/TextStyle.ts +70 -0
  202. package/src/skia/types/Paragraph/index.ts +6 -0
  203. package/src/skia/types/Skia.ts +3 -0
  204. package/src/skia/types/index.ts +1 -0
  205. package/src/skia/web/JsiSkParagraph.ts +69 -0
  206. package/src/skia/web/JsiSkParagraphBuilder.ts +99 -0
  207. package/src/skia/web/JsiSkParagraphBuilderFactory.ts +42 -0
  208. package/src/skia/web/JsiSkParagraphStyle.ts +65 -0
  209. package/src/skia/web/JsiSkTextStyle.ts +53 -0
  210. package/src/skia/web/JsiSkia.ts +2 -0
@@ -0,0 +1,96 @@
1
+ import type { SkJSIInstance } from "../JsiInstance";
2
+ import type { SkPaint } from "../Paint";
3
+
4
+ import type { SkParagraph } from "./Paragraph";
5
+ import type { SkParagraphStyle } from "./ParagraphStyle";
6
+ import type { SkTextStyle, TextBaseline } from "./TextStyle";
7
+ import type { SkTypefaceFontProvider } from "./TypefaceFontProvider";
8
+
9
+ export interface ParagraphBuilderFactory {
10
+ /**
11
+ * Creates a new ParagraphBuilder object from custom fonts.
12
+ * @param paragraphStyle Initial paragraph style
13
+ * @param typefaceProvider Typeface provider
14
+ */
15
+ Make(
16
+ paragraphStyle?: SkParagraphStyle,
17
+ typefaceProvider?: SkTypefaceFontProvider
18
+ ): SkParagraphBuilder;
19
+ }
20
+
21
+ export enum PlaceholderAlignment {
22
+ /// Match the baseline of the placeholder with the baseline.
23
+ Baseline = 0,
24
+
25
+ /// Align the bottom edge of the placeholder with the baseline such that the
26
+ /// placeholder sits on top of the baseline.
27
+ AboveBaseline,
28
+
29
+ /// Align the top edge of the placeholder with the baseline specified in
30
+ /// such that the placeholder hangs below the baseline.
31
+ BelowBaseline,
32
+
33
+ /// Align the top edge of the placeholder with the top edge of the font.
34
+ /// When the placeholder is very tall, the extra space will hang from
35
+ /// the top and extend through the bottom of the line.
36
+ Top,
37
+
38
+ /// Align the bottom edge of the placeholder with the top edge of the font.
39
+ /// When the placeholder is very tall, the extra space will rise from
40
+ /// the bottom and extend through the top of the line.
41
+ Bottom,
42
+
43
+ /// Align the middle of the placeholder with the middle of the text. When the
44
+ /// placeholder is very tall, the extra space will grow equally from
45
+ /// the top and bottom of the line.
46
+ Middle,
47
+ }
48
+
49
+ export interface SkParagraphBuilder extends SkJSIInstance<"ParagraphBuilder"> {
50
+ /**
51
+ * Creates a Paragraph object from the builder and the inputs given to the builder.
52
+ */
53
+ build(): SkParagraph;
54
+ /**
55
+ * Restores the builder to its initial empty state.
56
+ */
57
+ reset(): void;
58
+ /**
59
+ * Pushes a text-style to the builder
60
+ * @param style Style to push
61
+ * @param foregroundPaint Foreground paint object
62
+ * @param backgroundPaint Background paint object
63
+ * @returns The builder
64
+ */
65
+ pushStyle: (
66
+ style: SkTextStyle,
67
+ foregroundPaint?: SkPaint | undefined,
68
+ backgroundPaint?: SkPaint | undefined
69
+ ) => SkParagraphBuilder;
70
+ /**
71
+ * Pops the current text style from the builder
72
+ * @returns The builder
73
+ */
74
+ pop: () => SkParagraphBuilder;
75
+ /**
76
+ * Adds text to the builder
77
+ * @param text
78
+ * @returns The builder
79
+ */
80
+ addText: (text: string) => SkParagraphBuilder;
81
+ /**
82
+ * Pushes the information required to leave an open space.
83
+ * @param width
84
+ * @param height
85
+ * @param alignment
86
+ * @param baseline
87
+ * @param offset
88
+ */
89
+ addPlaceholder(
90
+ width?: number,
91
+ height?: number,
92
+ alignment?: PlaceholderAlignment,
93
+ baseline?: TextBaseline,
94
+ offset?: number
95
+ ): SkParagraphBuilder;
96
+ }
@@ -0,0 +1,45 @@
1
+ import type { SkTextFontStyle, SkTextStyle } from "./TextStyle";
2
+
3
+ export enum SkTextDirection {
4
+ RTL = 0,
5
+ LTR = 1,
6
+ }
7
+ export enum SkTextAlign {
8
+ Left = 0,
9
+ Right,
10
+ Center,
11
+ Justify,
12
+ Start,
13
+ End,
14
+ }
15
+
16
+ export interface SkStrutStyle {
17
+ strutEnabled?: boolean;
18
+ fontFamilies?: string[];
19
+ fontStyle?: SkTextFontStyle;
20
+ fontSize?: number;
21
+ heightMultiplier?: number;
22
+ halfLeading?: boolean;
23
+ leading?: number;
24
+ forceStrutHeight?: boolean;
25
+ }
26
+
27
+ export enum SkTextHeightBehavior {
28
+ All = 0x0,
29
+ DisableFirstAscent = 0x1,
30
+ DisableLastDescent = 0x2,
31
+ DisableAll = 0x1 | 0x2,
32
+ }
33
+
34
+ export interface SkParagraphStyle {
35
+ disableHinting?: boolean;
36
+ ellipsis?: string;
37
+ heightMultiplier?: number;
38
+ maxLines?: number;
39
+ replaceTabCharacters?: boolean;
40
+ strutStyle?: SkStrutStyle;
41
+ textAlign?: SkTextAlign;
42
+ textDirection?: SkTextDirection;
43
+ textHeightBehavior?: SkTextHeightBehavior;
44
+ textStyle?: SkTextStyle;
45
+ }
@@ -0,0 +1,70 @@
1
+ import type { SkColor } from "../Color";
2
+ import type { FontSlant, FontWeight, FontWidth } from "../Font";
3
+ import type { SkPoint } from "../Point";
4
+
5
+ export enum TextDecoration {
6
+ NoDecoration = 0x0,
7
+ Underline = 0x1,
8
+ Overline = 0x2,
9
+ LineThrough = 0x4,
10
+ }
11
+
12
+ export enum TextDecorationStyle {
13
+ Solid = 0,
14
+ Double,
15
+ Dotted,
16
+ Dashed,
17
+ Wavy,
18
+ }
19
+
20
+ export interface SkTextShadow {
21
+ color?: SkColor;
22
+ /**
23
+ * 2d array for x and y offset. Defaults to [0, 0]
24
+ */
25
+ offset?: SkPoint;
26
+ blurRadius?: number;
27
+ }
28
+
29
+ export interface SkTextFontFeatures {
30
+ name: string;
31
+ value: number;
32
+ }
33
+
34
+ export interface SkTextFontStyle {
35
+ weight?: FontWeight;
36
+ width?: FontWidth;
37
+ slant?: FontSlant;
38
+ }
39
+
40
+ export interface SkTextFontVariations {
41
+ axis: string;
42
+ value: number;
43
+ }
44
+
45
+ export enum TextBaseline {
46
+ Alphabetic = 0,
47
+ Ideographic,
48
+ }
49
+
50
+ export interface SkTextStyle {
51
+ backgroundColor?: SkColor;
52
+ color?: SkColor;
53
+ decoration?: number;
54
+ decorationColor?: SkColor;
55
+ decorationThickness?: number;
56
+ decorationStyle?: TextDecoration;
57
+ fontFamilies?: string[];
58
+ fontFeatures?: SkTextFontFeatures[];
59
+ fontSize?: number;
60
+ fontStyle?: SkTextFontStyle;
61
+ fontVariations?: SkTextFontVariations[];
62
+ foregroundColor?: SkColor;
63
+ heightMultiplier?: number;
64
+ halfLeading?: boolean;
65
+ letterSpacing?: number;
66
+ locale?: string;
67
+ shadows?: SkTextShadow[];
68
+ textBaseline?: TextBaseline;
69
+ wordSpacing?: number;
70
+ }
@@ -0,0 +1,6 @@
1
+ export * from "./TypefaceFontProvider";
2
+ export * from "./TypefaceFontProviderFactory";
3
+ export * from "./Paragraph";
4
+ export * from "./ParagraphBuilder";
5
+ export * from "./ParagraphStyle";
6
+ export * from "./TextStyle";
@@ -29,6 +29,7 @@ import type { PictureFactory, SkPictureRecorder } from "./Picture";
29
29
  import type { Color, SkColor } from "./Color";
30
30
  import type { TypefaceFontProviderFactory } from "./Paragraph/TypefaceFontProviderFactory";
31
31
  import type { AnimatedImageFactory } from "./AnimatedImage";
32
+ import type { ParagraphBuilderFactory } from "./Paragraph/ParagraphBuilder";
32
33
 
33
34
  /**
34
35
  * Declares the interface for the native Skia API
@@ -84,4 +85,6 @@ export interface Skia {
84
85
  SVG: SVGFactory;
85
86
  TextBlob: TextBlobFactory;
86
87
  Surface: SurfaceFactory;
88
+ // Paragraph
89
+ ParagraphBuilder: ParagraphBuilderFactory;
87
90
  }
@@ -27,3 +27,4 @@ export * from "./JsiInstance";
27
27
  export * from "./Skia";
28
28
  export * from "./TextBlob";
29
29
  export * from "./Size";
30
+ export * from "./Paragraph";
@@ -0,0 +1,69 @@
1
+ import type { CanvasKit, Paragraph } from "canvaskit-wasm";
2
+
3
+ import type { SkRect, SkRectWithDirection, SkParagraph } from "../types";
4
+
5
+ import { HostObject } from "./Host";
6
+ import type { JsiSkCanvas } from "./JsiSkCanvas";
7
+
8
+ export class JsiSkParagraph
9
+ extends HostObject<Paragraph, "Paragraph">
10
+ implements SkParagraph
11
+ {
12
+ constructor(CanvasKit: CanvasKit, ref: Paragraph) {
13
+ super(CanvasKit, ref, "Paragraph");
14
+ }
15
+
16
+ layout(width: number): void {
17
+ this.ref.layout(width);
18
+ }
19
+ paint(canvas: JsiSkCanvas, x: number, y: number): void {
20
+ canvas.ref.drawParagraph(this.ref, x, y);
21
+ }
22
+ getHeight(): number {
23
+ return this.ref.getHeight();
24
+ }
25
+ getMaxWidth(): number {
26
+ return this.ref.getMaxWidth();
27
+ }
28
+ getGlyphPositionAtCoordinate(x: number, y: number): number {
29
+ return this.ref.getGlyphPositionAtCoordinate(x, y).pos;
30
+ }
31
+ getRectsForPlaceholders(): SkRectWithDirection[] {
32
+ return this.ref.getRectsForPlaceholders().map(({ rect, dir }) => ({
33
+ rect: {
34
+ x: rect.at(0)!,
35
+ y: rect.at(1)!,
36
+ width: rect.at(2)!,
37
+ height: rect.at(3)!,
38
+ },
39
+ direction: dir.value,
40
+ }));
41
+ }
42
+ getRectsForRange(start: number, end: number): SkRect[] {
43
+ return this.ref
44
+ .getRectsForRange(
45
+ start,
46
+ end,
47
+ { value: 0 } /** kTight */,
48
+ { value: 0 } /** kTight */
49
+ )
50
+ .map(({ rect }) => ({
51
+ x: rect[0],
52
+ y: rect[1],
53
+ width: rect[2],
54
+ height: rect[3],
55
+ }));
56
+ }
57
+ getLineMetrics(): SkRect[] {
58
+ return this.ref.getLineMetrics().map((r, index) => ({
59
+ x: r.left,
60
+ y: index * r.height,
61
+ width: r.width,
62
+ height: r.height,
63
+ }));
64
+ }
65
+
66
+ dispose() {
67
+ this.ref.delete();
68
+ }
69
+ }
@@ -0,0 +1,99 @@
1
+ import type {
2
+ CanvasKit,
3
+ InputColor,
4
+ Paint,
5
+ ParagraphBuilder,
6
+ TextStyle,
7
+ } from "canvaskit-wasm";
8
+
9
+ import type {
10
+ SkParagraphBuilder,
11
+ SkParagraph,
12
+ SkTextStyle,
13
+ SkPaint,
14
+ } from "../types";
15
+ import { PlaceholderAlignment, TextBaseline } from "../types";
16
+
17
+ import { HostObject } from "./Host";
18
+ import { JsiSkParagraph } from "./JsiSkParagraph";
19
+ import { JsiSkTextStyle } from "./JsiSkTextStyle";
20
+ import { JsiSkPaint } from "./JsiSkPaint";
21
+
22
+ export class JsiSkParagraphBuilder
23
+ extends HostObject<ParagraphBuilder, "ParagraphBuilder">
24
+ implements SkParagraphBuilder
25
+ {
26
+ constructor(CanvasKit: CanvasKit, ref: ParagraphBuilder) {
27
+ super(CanvasKit, ref, "ParagraphBuilder");
28
+ }
29
+
30
+ addPlaceholder(
31
+ width: number | undefined = 0,
32
+ height: number | undefined = 0,
33
+ alignment: PlaceholderAlignment | undefined = PlaceholderAlignment.Baseline,
34
+ baseline: TextBaseline | undefined = TextBaseline.Alphabetic,
35
+ offset: number | undefined = 0
36
+ ): SkParagraphBuilder {
37
+ this.ref.addPlaceholder(
38
+ width,
39
+ height,
40
+ { value: alignment },
41
+ { value: baseline },
42
+ offset
43
+ );
44
+ return this;
45
+ }
46
+ addText(text: string): SkParagraphBuilder {
47
+ this.ref.addText(text);
48
+ return this;
49
+ }
50
+
51
+ build(): SkParagraph {
52
+ return new JsiSkParagraph(this.CanvasKit, this.ref.build());
53
+ }
54
+
55
+ reset(): void {
56
+ this.ref.reset();
57
+ }
58
+
59
+ pushStyle(
60
+ style: SkTextStyle,
61
+ foregroundPaint?: SkPaint | undefined,
62
+ backgroundPaint?: SkPaint | undefined
63
+ ): SkParagraphBuilder {
64
+ const textStyle: TextStyle = JsiSkTextStyle.toTextStyle(style);
65
+ if (foregroundPaint || backgroundPaint) {
66
+ // Due the canvaskit API not exposing textStyle methods,
67
+ // we set the default paint color to black for the foreground
68
+ // and transparent for the background
69
+ const fg: Paint = foregroundPaint
70
+ ? JsiSkPaint.fromValue(foregroundPaint)
71
+ : this.makePaint(textStyle.color ?? Float32Array.of(0, 0, 0, 1));
72
+ const bg: Paint = backgroundPaint
73
+ ? JsiSkPaint.fromValue(backgroundPaint)
74
+ : this.makePaint(
75
+ textStyle.backgroundColor ?? Float32Array.of(0, 0, 0, 0)
76
+ );
77
+ this.ref.pushPaintStyle(new this.CanvasKit.TextStyle(textStyle), fg, bg);
78
+ } else {
79
+ this.ref.pushStyle(new this.CanvasKit.TextStyle(textStyle));
80
+ }
81
+
82
+ return this;
83
+ }
84
+
85
+ pop(): SkParagraphBuilder {
86
+ this.ref.pop();
87
+ return this;
88
+ }
89
+
90
+ dispose() {
91
+ this.ref.delete();
92
+ }
93
+
94
+ private makePaint(color: InputColor) {
95
+ const paint = new this.CanvasKit.Paint();
96
+ paint.setColor(color);
97
+ return paint;
98
+ }
99
+ }
@@ -0,0 +1,42 @@
1
+ import type { CanvasKit } from "canvaskit-wasm";
2
+
3
+ import type {
4
+ ParagraphBuilderFactory,
5
+ SkParagraphStyle,
6
+ SkTypefaceFontProvider,
7
+ } from "../types";
8
+
9
+ import { Host } from "./Host";
10
+ import { JsiSkParagraphBuilder } from "./JsiSkParagraphBuilder";
11
+ import { JsiSkParagraphStyle } from "./JsiSkParagraphStyle";
12
+ import { JsiSkTypeface } from "./JsiSkTypeface";
13
+
14
+ export class JsiSkParagraphBuilderFactory
15
+ extends Host
16
+ implements ParagraphBuilderFactory
17
+ {
18
+ constructor(CanvasKit: CanvasKit) {
19
+ super(CanvasKit);
20
+ }
21
+
22
+ Make(
23
+ paragraphStyle: SkParagraphStyle,
24
+ typefaceProvider?: SkTypefaceFontProvider
25
+ ) {
26
+ const style = new this.CanvasKit.ParagraphStyle(
27
+ JsiSkParagraphStyle.toParagraphStyle(this.CanvasKit, paragraphStyle ?? {})
28
+ );
29
+ if (typefaceProvider === undefined) {
30
+ throw new Error(
31
+ "SkTypefaceFontProvider is required on React Native Web."
32
+ );
33
+ }
34
+ return new JsiSkParagraphBuilder(
35
+ this.CanvasKit,
36
+ this.CanvasKit.ParagraphBuilder.MakeFromFontProvider(
37
+ style,
38
+ JsiSkTypeface.fromValue(typefaceProvider)
39
+ )
40
+ );
41
+ }
42
+ }
@@ -0,0 +1,65 @@
1
+ import type { CanvasKit, ParagraphStyle } from "canvaskit-wasm";
2
+
3
+ import { SkTextDirection, type SkParagraphStyle } from "../types";
4
+
5
+ export class JsiSkParagraphStyle {
6
+ static toParagraphStyle(
7
+ ck: CanvasKit,
8
+ value: SkParagraphStyle
9
+ ): ParagraphStyle {
10
+ // Seems like we need to provide the textStyle.color value, otherwise
11
+ // the constructor crashes.
12
+ const ps = new ck.ParagraphStyle({ textStyle: { color: ck.BLACK } });
13
+
14
+ ps.disableHinting = value.disableHinting ?? ps.disableHinting;
15
+ ps.ellipsis = value.ellipsis ?? ps.ellipsis;
16
+ ps.heightMultiplier = value.heightMultiplier ?? ps.heightMultiplier;
17
+ ps.maxLines = value.maxLines ?? ps.maxLines;
18
+ ps.replaceTabCharacters =
19
+ value.replaceTabCharacters ?? ps.replaceTabCharacters;
20
+ ps.textAlign =
21
+ value.textAlign !== undefined
22
+ ? { value: value.textAlign }
23
+ : undefined ?? ps.textAlign;
24
+ ps.textDirection =
25
+ value.textDirection !== undefined
26
+ ? { value: value.textDirection === SkTextDirection.LTR ? 1 : 0 }
27
+ : ps.textDirection;
28
+ ps.textHeightBehavior =
29
+ value.textHeightBehavior !== undefined
30
+ ? { value: value.textHeightBehavior }
31
+ : ps.textHeightBehavior;
32
+
33
+ ps.strutStyle = ps.strutStyle ?? {};
34
+ ps.strutStyle.fontFamilies =
35
+ value.strutStyle?.fontFamilies ?? ps.strutStyle.fontFamilies;
36
+ ps.strutStyle.fontSize =
37
+ value.strutStyle?.fontSize ?? ps.strutStyle.fontSize;
38
+ ps.strutStyle.heightMultiplier =
39
+ value.strutStyle?.heightMultiplier ?? ps.strutStyle.heightMultiplier;
40
+ ps.strutStyle.leading = value.strutStyle?.leading ?? ps.strutStyle.leading;
41
+ ps.strutStyle.forceStrutHeight =
42
+ value.strutStyle?.forceStrutHeight ?? ps.strutStyle.forceStrutHeight;
43
+
44
+ ps.strutStyle.fontStyle = ps.strutStyle.fontStyle ?? {};
45
+
46
+ ps.strutStyle.fontStyle.slant =
47
+ value.strutStyle?.fontStyle?.slant !== undefined
48
+ ? { value: value.strutStyle.fontStyle.slant }
49
+ : ps.strutStyle.fontStyle.slant;
50
+ ps.strutStyle.fontStyle.width =
51
+ value.strutStyle?.fontStyle?.width !== undefined
52
+ ? { value: value.strutStyle.fontStyle.width }
53
+ : ps.strutStyle.fontStyle.width;
54
+ ps.strutStyle.fontStyle.weight =
55
+ value.strutStyle?.fontStyle?.weight !== undefined
56
+ ? { value: value.strutStyle.fontStyle.weight }
57
+ : ps.strutStyle.fontStyle.weight;
58
+ ps.strutStyle.halfLeading =
59
+ value.strutStyle?.halfLeading ?? ps.strutStyle.halfLeading;
60
+ ps.strutStyle.strutEnabled =
61
+ value.strutStyle?.strutEnabled ?? ps.strutStyle.strutEnabled;
62
+
63
+ return ps;
64
+ }
65
+ }
@@ -0,0 +1,53 @@
1
+ import type { TextStyle } from "canvaskit-wasm";
2
+
3
+ import type { SkTextStyle } from "../types";
4
+
5
+ export class JsiSkTextStyle {
6
+ static toTextStyle(value: SkTextStyle): TextStyle {
7
+ return {
8
+ backgroundColor: value.backgroundColor,
9
+ color: value.color,
10
+ decoration: value.decoration,
11
+ decorationColor: value.decorationColor,
12
+ decorationStyle: value.decorationStyle
13
+ ? { value: value.decorationStyle }
14
+ : undefined,
15
+ decorationThickness: value.decorationThickness,
16
+ fontFamilies: value.fontFamilies,
17
+ fontSize: value.fontSize,
18
+ fontStyle: value.fontStyle
19
+ ? {
20
+ slant: value.fontStyle.slant
21
+ ? { value: value.fontStyle.slant }
22
+ : undefined,
23
+ weight: value.fontStyle.weight
24
+ ? { value: value.fontStyle.weight }
25
+ : undefined,
26
+ width: value.fontStyle.width
27
+ ? { value: value.fontStyle.width }
28
+ : undefined,
29
+ }
30
+ : undefined,
31
+ fontFeatures: value.fontFeatures,
32
+ foregroundColor: value.foregroundColor,
33
+ fontVariations: value.fontVariations,
34
+ halfLeading: value.halfLeading,
35
+ heightMultiplier: value.heightMultiplier,
36
+ letterSpacing: value.letterSpacing,
37
+ locale: value.locale,
38
+ shadows: value.shadows
39
+ ? value.shadows.map((shadow) => ({
40
+ blurRadius: shadow.blurRadius,
41
+ color: shadow.color,
42
+ offset: shadow.offset
43
+ ? [shadow.offset.x, shadow.offset.y]
44
+ : undefined,
45
+ }))
46
+ : undefined,
47
+ textBaseline: value.textBaseline
48
+ ? { value: value.textBaseline }
49
+ : undefined,
50
+ wordSpacing: value.wordSpacing,
51
+ };
52
+ }
53
+ }
@@ -40,6 +40,7 @@ import { JsiSkTypeface } from "./JsiSkTypeface";
40
40
  import { JsiSkTypefaceFontProviderFactory } from "./JsiSkTypefaceFontProviderFactory";
41
41
  import { JsiSkFontMgrFactory } from "./JsiSkFontMgrFactory";
42
42
  import { JsiSkAnimatedImageFactory } from "./JsiSkAnimatedImageFactory";
43
+ import { JsiSkParagraphBuilderFactory } from "./JsiSkParagraphBuilderFactory";
43
44
 
44
45
  export const JsiSkApi = (CanvasKit: CanvasKit): Skia => ({
45
46
  Point: (x: number, y: number) =>
@@ -108,4 +109,5 @@ export const JsiSkApi = (CanvasKit: CanvasKit): Skia => ({
108
109
  Surface: new JsiSkSurfaceFactory(CanvasKit),
109
110
  TypefaceFontProvider: new JsiSkTypefaceFontProviderFactory(CanvasKit),
110
111
  FontMgr: new JsiSkFontMgrFactory(CanvasKit),
112
+ ParagraphBuilder: new JsiSkParagraphBuilderFactory(CanvasKit),
111
113
  });