blitz-pdf 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +355 -2
  3. package/THIRD_PARTY_NOTICES.md +25 -0
  4. package/assets/icon.svg +4 -0
  5. package/dist/api.d.ts +7 -0
  6. package/dist/api.d.ts.map +1 -0
  7. package/dist/api.js +46 -0
  8. package/dist/api.js.map +1 -0
  9. package/dist/assets.d.ts +7 -0
  10. package/dist/assets.d.ts.map +1 -0
  11. package/dist/assets.js +52 -0
  12. package/dist/assets.js.map +1 -0
  13. package/dist/browser.d.ts +3 -0
  14. package/dist/browser.d.ts.map +1 -0
  15. package/dist/browser.js +3 -0
  16. package/dist/browser.js.map +1 -0
  17. package/dist/node.d.ts +3 -0
  18. package/dist/node.d.ts.map +1 -0
  19. package/dist/node.js +10 -0
  20. package/dist/node.js.map +1 -0
  21. package/dist/options.d.ts +24 -0
  22. package/dist/options.d.ts.map +1 -0
  23. package/dist/options.js +135 -0
  24. package/dist/options.js.map +1 -0
  25. package/dist/types.d.ts +51 -0
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +2 -0
  28. package/dist/types.js.map +1 -0
  29. package/examples/bun.ts +8 -0
  30. package/examples/german-invoice/README.md +70 -0
  31. package/examples/german-invoice/data.mjs +83 -0
  32. package/examples/german-invoice/invoice.css +59 -0
  33. package/examples/german-invoice/template.mjs +49 -0
  34. package/examples/german-invoice.mjs +20 -0
  35. package/examples/invoice.html +29 -0
  36. package/examples/node.mjs +8 -0
  37. package/examples/pagination.html +40 -0
  38. package/examples/pagination.mjs +8 -0
  39. package/licenses/DejaVu.txt +187 -0
  40. package/licenses/RUST_DEPENDENCIES.txt +11577 -0
  41. package/package.json +89 -4
  42. package/src/api.ts +44 -0
  43. package/src/assets.ts +43 -0
  44. package/src/browser.ts +6 -0
  45. package/src/node.ts +12 -0
  46. package/src/options.ts +101 -0
  47. package/src/types.ts +49 -0
  48. package/vendor/README.md +17 -0
  49. package/vendor/stylo/.cargo-ok +1 -0
  50. package/vendor/stylo/.cargo_vcs_info.json +6 -0
  51. package/vendor/stylo/Cargo.lock +1485 -0
  52. package/vendor/stylo/Cargo.toml +274 -0
  53. package/vendor/stylo/LICENSE +373 -0
  54. package/vendor/stylo/README.md +6 -0
  55. package/vendor/stylo/applicable_declarations.rs +328 -0
  56. package/vendor/stylo/author_styles.rs +79 -0
  57. package/vendor/stylo/bezier.rs +176 -0
  58. package/vendor/stylo/bloom.rs +414 -0
  59. package/vendor/stylo/build.rs +91 -0
  60. package/vendor/stylo/build_gecko.rs +393 -0
  61. package/vendor/stylo/color/color_function.rs +601 -0
  62. package/vendor/stylo/color/component.rs +207 -0
  63. package/vendor/stylo/color/convert.rs +935 -0
  64. package/vendor/stylo/color/gamut/raytrace.rs +265 -0
  65. package/vendor/stylo/color/gamut.rs +227 -0
  66. package/vendor/stylo/color/mix.rs +645 -0
  67. package/vendor/stylo/color/mod.rs +750 -0
  68. package/vendor/stylo/color/parsing.rs +770 -0
  69. package/vendor/stylo/color/to_css.rs +297 -0
  70. package/vendor/stylo/context.rs +716 -0
  71. package/vendor/stylo/counter_style/mod.rs +754 -0
  72. package/vendor/stylo/counter_style/predefined.rs +61 -0
  73. package/vendor/stylo/counter_style/update_predefined.py +35 -0
  74. package/vendor/stylo/custom_properties.rs +2023 -0
  75. package/vendor/stylo/custom_properties_map.rs +220 -0
  76. package/vendor/stylo/data.rs +693 -0
  77. package/vendor/stylo/device/gecko.rs +486 -0
  78. package/vendor/stylo/device/mod.rs +304 -0
  79. package/vendor/stylo/device/servo.rs +507 -0
  80. package/vendor/stylo/dom.rs +1164 -0
  81. package/vendor/stylo/dom_apis.rs +937 -0
  82. package/vendor/stylo/driver.rs +172 -0
  83. package/vendor/stylo/error_reporting.rs +484 -0
  84. package/vendor/stylo/font_face.rs +558 -0
  85. package/vendor/stylo/font_metrics.rs +124 -0
  86. package/vendor/stylo/gecko/anon_boxes.toml +113 -0
  87. package/vendor/stylo/gecko/arc_types.rs +211 -0
  88. package/vendor/stylo/gecko/conversions.rs +59 -0
  89. package/vendor/stylo/gecko/data.rs +222 -0
  90. package/vendor/stylo/gecko/media_features.rs +971 -0
  91. package/vendor/stylo/gecko/mod.rs +20 -0
  92. package/vendor/stylo/gecko/non_ts_pseudo_class_list.rs +119 -0
  93. package/vendor/stylo/gecko/pseudo_element.rs +640 -0
  94. package/vendor/stylo/gecko/pseudo_element_definition.mako.rs +298 -0
  95. package/vendor/stylo/gecko/pseudo_elements.py +137 -0
  96. package/vendor/stylo/gecko/pseudo_elements.toml +197 -0
  97. package/vendor/stylo/gecko/regen_pseudo_elements.py +33 -0
  98. package/vendor/stylo/gecko/restyle_damage.rs +127 -0
  99. package/vendor/stylo/gecko/selector_parser.rs +627 -0
  100. package/vendor/stylo/gecko/snapshot.rs +202 -0
  101. package/vendor/stylo/gecko/snapshot_helpers.rs +334 -0
  102. package/vendor/stylo/gecko/traversal.rs +52 -0
  103. package/vendor/stylo/gecko/wrapper.rs +2258 -0
  104. package/vendor/stylo/gecko_bindings/mod.rs +34 -0
  105. package/vendor/stylo/gecko_bindings/sugar/mod.rs +12 -0
  106. package/vendor/stylo/gecko_bindings/sugar/ns_com_ptr.rs +15 -0
  107. package/vendor/stylo/gecko_bindings/sugar/ns_compatibility.rs +19 -0
  108. package/vendor/stylo/gecko_bindings/sugar/ns_style_auto_array.rs +111 -0
  109. package/vendor/stylo/gecko_bindings/sugar/origin_flags.rs +31 -0
  110. package/vendor/stylo/gecko_bindings/sugar/ownership.rs +70 -0
  111. package/vendor/stylo/gecko_bindings/sugar/refptr.rs +299 -0
  112. package/vendor/stylo/gecko_string_cache/mod.rs +543 -0
  113. package/vendor/stylo/gecko_string_cache/namespace.rs +106 -0
  114. package/vendor/stylo/global_style_data.rs +224 -0
  115. package/vendor/stylo/invalidation/element/document_state.rs +156 -0
  116. package/vendor/stylo/invalidation/element/element_wrapper.rs +432 -0
  117. package/vendor/stylo/invalidation/element/invalidation_map.rs +1631 -0
  118. package/vendor/stylo/invalidation/element/invalidator.rs +1470 -0
  119. package/vendor/stylo/invalidation/element/mod.rs +13 -0
  120. package/vendor/stylo/invalidation/element/relative_selector.rs +1399 -0
  121. package/vendor/stylo/invalidation/element/restyle_hints.rs +226 -0
  122. package/vendor/stylo/invalidation/element/state_and_attributes.rs +756 -0
  123. package/vendor/stylo/invalidation/media_queries.rs +144 -0
  124. package/vendor/stylo/invalidation/mod.rs +10 -0
  125. package/vendor/stylo/invalidation/stylesheets.rs +745 -0
  126. package/vendor/stylo/invalidation/viewport_units.rs +71 -0
  127. package/vendor/stylo/lib.rs +336 -0
  128. package/vendor/stylo/logical_geometry.rs +1684 -0
  129. package/vendor/stylo/macros.rs +70 -0
  130. package/vendor/stylo/matching.rs +1226 -0
  131. package/vendor/stylo/media_queries/media_list.rs +168 -0
  132. package/vendor/stylo/media_queries/media_query.rs +190 -0
  133. package/vendor/stylo/media_queries/mod.rs +13 -0
  134. package/vendor/stylo/parallel.rs +205 -0
  135. package/vendor/stylo/parser.rs +276 -0
  136. package/vendor/stylo/piecewise_linear.rs +282 -0
  137. package/vendor/stylo/prefs.rs +33 -0
  138. package/vendor/stylo/properties/build.py +119 -0
  139. package/vendor/stylo/properties/cascade.rs +2704 -0
  140. package/vendor/stylo/properties/computed_value_flags.rs +206 -0
  141. package/vendor/stylo/properties/counted_unknown_properties.py +104 -0
  142. package/vendor/stylo/properties/counter_style_descriptors.toml +45 -0
  143. package/vendor/stylo/properties/data.py +1375 -0
  144. package/vendor/stylo/properties/declaration_block.rs +1788 -0
  145. package/vendor/stylo/properties/font_face_descriptors.toml +50 -0
  146. package/vendor/stylo/properties/gecko.mako.rs +1555 -0
  147. package/vendor/stylo/properties/helpers/animated_properties.mako.rs +800 -0
  148. package/vendor/stylo/properties/helpers.mako.rs +812 -0
  149. package/vendor/stylo/properties/longhands.toml +4305 -0
  150. package/vendor/stylo/properties/mod.rs +1857 -0
  151. package/vendor/stylo/properties/properties.html.mako +31 -0
  152. package/vendor/stylo/properties/properties.mako.rs +3103 -0
  153. package/vendor/stylo/properties/property_descriptors.toml +18 -0
  154. package/vendor/stylo/properties/shorthands.rs +4241 -0
  155. package/vendor/stylo/properties/shorthands.toml +575 -0
  156. package/vendor/stylo/properties/vendored_python/mako-1.3.10-py3-none-any.whl +0 -0
  157. package/vendor/stylo/properties/vendored_python/markupsafe/LICENSE.txt +28 -0
  158. package/vendor/stylo/properties/vendored_python/markupsafe/__init__.py +384 -0
  159. package/vendor/stylo/properties/vendored_python/toml-0.10.2-py2.py3-none-any.whl +0 -0
  160. package/vendor/stylo/properties/view_transition_descriptors.toml +11 -0
  161. package/vendor/stylo/properties_and_values/mod.rs +12 -0
  162. package/vendor/stylo/properties_and_values/registry.rs +65 -0
  163. package/vendor/stylo/properties_and_values/rule.rs +331 -0
  164. package/vendor/stylo/properties_and_values/syntax/ascii.rs +60 -0
  165. package/vendor/stylo/properties_and_values/syntax/data_type.rs +146 -0
  166. package/vendor/stylo/properties_and_values/syntax/mod.rs +437 -0
  167. package/vendor/stylo/properties_and_values/value.rs +758 -0
  168. package/vendor/stylo/queries/condition.rs +996 -0
  169. package/vendor/stylo/queries/feature.rs +199 -0
  170. package/vendor/stylo/queries/feature_expression.rs +1170 -0
  171. package/vendor/stylo/queries/mod.rs +19 -0
  172. package/vendor/stylo/queries/values.rs +46 -0
  173. package/vendor/stylo/rule_cache.rs +267 -0
  174. package/vendor/stylo/rule_collector.rs +554 -0
  175. package/vendor/stylo/rule_tree/core.rs +787 -0
  176. package/vendor/stylo/rule_tree/level.rs +396 -0
  177. package/vendor/stylo/rule_tree/map.rs +201 -0
  178. package/vendor/stylo/rule_tree/mod.rs +427 -0
  179. package/vendor/stylo/rule_tree/source.rs +80 -0
  180. package/vendor/stylo/rule_tree/unsafe_box.rs +78 -0
  181. package/vendor/stylo/scoped_tls.rs +80 -0
  182. package/vendor/stylo/selector_map.rs +1050 -0
  183. package/vendor/stylo/selector_parser.rs +305 -0
  184. package/vendor/stylo/servo/animation.rs +1922 -0
  185. package/vendor/stylo/servo/attr.rs +714 -0
  186. package/vendor/stylo/servo/encoding_support.rs +81 -0
  187. package/vendor/stylo/servo/media_features.rs +254 -0
  188. package/vendor/stylo/servo/mod.rs +16 -0
  189. package/vendor/stylo/servo/restyle_damage.rs +215 -0
  190. package/vendor/stylo/servo/selector_parser.rs +1036 -0
  191. package/vendor/stylo/servo/shadow_parts.rs +207 -0
  192. package/vendor/stylo/shared_lock.rs +271 -0
  193. package/vendor/stylo/sharing/checks.rs +281 -0
  194. package/vendor/stylo/sharing/mod.rs +1000 -0
  195. package/vendor/stylo/simple_buckets_map.rs +52 -0
  196. package/vendor/stylo/str.rs +168 -0
  197. package/vendor/stylo/style_adjuster.rs +1086 -0
  198. package/vendor/stylo/style_resolver.rs +658 -0
  199. package/vendor/stylo/stylesheet_set.rs +658 -0
  200. package/vendor/stylo/stylesheets/appearance_base_rule.rs +51 -0
  201. package/vendor/stylo/stylesheets/container_rule.rs +769 -0
  202. package/vendor/stylo/stylesheets/counter_style_rule.rs +7 -0
  203. package/vendor/stylo/stylesheets/document_rule.rs +272 -0
  204. package/vendor/stylo/stylesheets/font_face_rule.rs +7 -0
  205. package/vendor/stylo/stylesheets/font_feature_values_rule.rs +481 -0
  206. package/vendor/stylo/stylesheets/font_palette_values_rule.rs +304 -0
  207. package/vendor/stylo/stylesheets/import_rule.rs +259 -0
  208. package/vendor/stylo/stylesheets/keyframes_rule.rs +733 -0
  209. package/vendor/stylo/stylesheets/layer_rule.rs +221 -0
  210. package/vendor/stylo/stylesheets/loader.rs +29 -0
  211. package/vendor/stylo/stylesheets/margin_rule.rs +190 -0
  212. package/vendor/stylo/stylesheets/media_rule.rs +191 -0
  213. package/vendor/stylo/stylesheets/mod.rs +918 -0
  214. package/vendor/stylo/stylesheets/namespace_rule.rs +43 -0
  215. package/vendor/stylo/stylesheets/nested_declarations_rule.rs +51 -0
  216. package/vendor/stylo/stylesheets/origin.rs +249 -0
  217. package/vendor/stylo/stylesheets/page_rule.rs +354 -0
  218. package/vendor/stylo/stylesheets/position_try_rule.rs +68 -0
  219. package/vendor/stylo/stylesheets/property_rule.rs +5 -0
  220. package/vendor/stylo/stylesheets/rule_list.rs +167 -0
  221. package/vendor/stylo/stylesheets/rule_parser.rs +1189 -0
  222. package/vendor/stylo/stylesheets/rules_iterator.rs +397 -0
  223. package/vendor/stylo/stylesheets/scope_rule.rs +511 -0
  224. package/vendor/stylo/stylesheets/starting_style_rule.rs +54 -0
  225. package/vendor/stylo/stylesheets/style_rule.rs +80 -0
  226. package/vendor/stylo/stylesheets/stylesheet.rs +570 -0
  227. package/vendor/stylo/stylesheets/supports_rule.rs +486 -0
  228. package/vendor/stylo/stylesheets/view_transition_rule.rs +81 -0
  229. package/vendor/stylo/stylist.rs +5076 -0
  230. package/vendor/stylo/thread_state.rs +87 -0
  231. package/vendor/stylo/traversal.rs +765 -0
  232. package/vendor/stylo/traversal_flags.rs +68 -0
  233. package/vendor/stylo/typed_om/mod.rs +981 -0
  234. package/vendor/stylo/typed_om/numeric.rs +128 -0
  235. package/vendor/stylo/typed_om/numeric_declaration.rs +93 -0
  236. package/vendor/stylo/typed_om/numeric_type.rs +640 -0
  237. package/vendor/stylo/typed_om/sum_value.rs +426 -0
  238. package/vendor/stylo/url/gecko.rs +367 -0
  239. package/vendor/stylo/url/mod.rs +71 -0
  240. package/vendor/stylo/url/servo.rs +239 -0
  241. package/vendor/stylo/use_counters/mod.rs +137 -0
  242. package/vendor/stylo/values/animated/color.rs +103 -0
  243. package/vendor/stylo/values/animated/effects.rs +26 -0
  244. package/vendor/stylo/values/animated/font.rs +37 -0
  245. package/vendor/stylo/values/animated/grid.rs +161 -0
  246. package/vendor/stylo/values/animated/lists.rs +141 -0
  247. package/vendor/stylo/values/animated/mod.rs +550 -0
  248. package/vendor/stylo/values/animated/svg.rs +46 -0
  249. package/vendor/stylo/values/animated/text.rs +58 -0
  250. package/vendor/stylo/values/animated/transform.rs +1592 -0
  251. package/vendor/stylo/values/computed/align.rs +90 -0
  252. package/vendor/stylo/values/computed/angle.rs +130 -0
  253. package/vendor/stylo/values/computed/animation.rs +124 -0
  254. package/vendor/stylo/values/computed/background.rs +13 -0
  255. package/vendor/stylo/values/computed/basic_shape.rs +267 -0
  256. package/vendor/stylo/values/computed/border.rs +163 -0
  257. package/vendor/stylo/values/computed/box.rs +267 -0
  258. package/vendor/stylo/values/computed/calc.rs +334 -0
  259. package/vendor/stylo/values/computed/color.rs +161 -0
  260. package/vendor/stylo/values/computed/column.rs +11 -0
  261. package/vendor/stylo/values/computed/corner_shape.rs +155 -0
  262. package/vendor/stylo/values/computed/counters.rs +26 -0
  263. package/vendor/stylo/values/computed/easing.rs +109 -0
  264. package/vendor/stylo/values/computed/effects.rs +30 -0
  265. package/vendor/stylo/values/computed/flex.rs +19 -0
  266. package/vendor/stylo/values/computed/font.rs +1517 -0
  267. package/vendor/stylo/values/computed/image.rs +273 -0
  268. package/vendor/stylo/values/computed/length.rs +576 -0
  269. package/vendor/stylo/values/computed/length_percentage.rs +1055 -0
  270. package/vendor/stylo/values/computed/list.rs +16 -0
  271. package/vendor/stylo/values/computed/mod.rs +1141 -0
  272. package/vendor/stylo/values/computed/motion.rs +73 -0
  273. package/vendor/stylo/values/computed/outline.rs +7 -0
  274. package/vendor/stylo/values/computed/page.rs +77 -0
  275. package/vendor/stylo/values/computed/param.rs +9 -0
  276. package/vendor/stylo/values/computed/percentage.rs +143 -0
  277. package/vendor/stylo/values/computed/position.rs +273 -0
  278. package/vendor/stylo/values/computed/ratio.rs +88 -0
  279. package/vendor/stylo/values/computed/rect.rs +19 -0
  280. package/vendor/stylo/values/computed/resolution.rs +76 -0
  281. package/vendor/stylo/values/computed/svg.rs +66 -0
  282. package/vendor/stylo/values/computed/table.rs +7 -0
  283. package/vendor/stylo/values/computed/text.rs +199 -0
  284. package/vendor/stylo/values/computed/time.rs +83 -0
  285. package/vendor/stylo/values/computed/transform.rs +559 -0
  286. package/vendor/stylo/values/computed/tree_counting.rs +30 -0
  287. package/vendor/stylo/values/computed/ui.rs +23 -0
  288. package/vendor/stylo/values/computed/url.rs +12 -0
  289. package/vendor/stylo/values/distance.rs +139 -0
  290. package/vendor/stylo/values/generics/animation.rs +363 -0
  291. package/vendor/stylo/values/generics/background.rs +65 -0
  292. package/vendor/stylo/values/generics/basic_shape.rs +1389 -0
  293. package/vendor/stylo/values/generics/border.rs +303 -0
  294. package/vendor/stylo/values/generics/box.rs +552 -0
  295. package/vendor/stylo/values/generics/calc.rs +2986 -0
  296. package/vendor/stylo/values/generics/color.rs +318 -0
  297. package/vendor/stylo/values/generics/column.rs +44 -0
  298. package/vendor/stylo/values/generics/counters.rs +320 -0
  299. package/vendor/stylo/values/generics/easing.rs +132 -0
  300. package/vendor/stylo/values/generics/effects.rs +131 -0
  301. package/vendor/stylo/values/generics/flex.rs +34 -0
  302. package/vendor/stylo/values/generics/font.rs +376 -0
  303. package/vendor/stylo/values/generics/grid.rs +962 -0
  304. package/vendor/stylo/values/generics/image.rs +653 -0
  305. package/vendor/stylo/values/generics/length.rs +656 -0
  306. package/vendor/stylo/values/generics/mod.rs +303 -0
  307. package/vendor/stylo/values/generics/motion.rs +274 -0
  308. package/vendor/stylo/values/generics/page.rs +167 -0
  309. package/vendor/stylo/values/generics/position.rs +669 -0
  310. package/vendor/stylo/values/generics/ratio.rs +88 -0
  311. package/vendor/stylo/values/generics/rect.rs +147 -0
  312. package/vendor/stylo/values/generics/size.rs +102 -0
  313. package/vendor/stylo/values/generics/svg.rs +226 -0
  314. package/vendor/stylo/values/generics/text.rs +268 -0
  315. package/vendor/stylo/values/generics/transform.rs +1157 -0
  316. package/vendor/stylo/values/generics/ui.rs +147 -0
  317. package/vendor/stylo/values/generics/url.rs +51 -0
  318. package/vendor/stylo/values/mod.rs +820 -0
  319. package/vendor/stylo/values/resolved/animation.rs +33 -0
  320. package/vendor/stylo/values/resolved/color.rs +53 -0
  321. package/vendor/stylo/values/resolved/counters.rs +45 -0
  322. package/vendor/stylo/values/resolved/mod.rs +316 -0
  323. package/vendor/stylo/values/specified/align.rs +711 -0
  324. package/vendor/stylo/values/specified/angle.rs +407 -0
  325. package/vendor/stylo/values/specified/animation.rs +921 -0
  326. package/vendor/stylo/values/specified/background.rs +270 -0
  327. package/vendor/stylo/values/specified/basic_shape.rs +986 -0
  328. package/vendor/stylo/values/specified/border.rs +430 -0
  329. package/vendor/stylo/values/specified/box.rs +2231 -0
  330. package/vendor/stylo/values/specified/calc.rs +1657 -0
  331. package/vendor/stylo/values/specified/color.rs +1210 -0
  332. package/vendor/stylo/values/specified/column.rs +11 -0
  333. package/vendor/stylo/values/specified/corner_shape.rs +152 -0
  334. package/vendor/stylo/values/specified/counters.rs +242 -0
  335. package/vendor/stylo/values/specified/easing.rs +225 -0
  336. package/vendor/stylo/values/specified/effects.rs +421 -0
  337. package/vendor/stylo/values/specified/flex.rs +42 -0
  338. package/vendor/stylo/values/specified/font.rs +2103 -0
  339. package/vendor/stylo/values/specified/frequency.rs +39 -0
  340. package/vendor/stylo/values/specified/grid.rs +407 -0
  341. package/vendor/stylo/values/specified/image.rs +1385 -0
  342. package/vendor/stylo/values/specified/intersection_observer.rs +80 -0
  343. package/vendor/stylo/values/specified/length.rs +2024 -0
  344. package/vendor/stylo/values/specified/list.rs +190 -0
  345. package/vendor/stylo/values/specified/mod.rs +531 -0
  346. package/vendor/stylo/values/specified/motion.rs +316 -0
  347. package/vendor/stylo/values/specified/number.rs +603 -0
  348. package/vendor/stylo/values/specified/outline.rs +69 -0
  349. package/vendor/stylo/values/specified/page.rs +94 -0
  350. package/vendor/stylo/values/specified/param.rs +121 -0
  351. package/vendor/stylo/values/specified/percentage.rs +364 -0
  352. package/vendor/stylo/values/specified/position.rs +2247 -0
  353. package/vendor/stylo/values/specified/ratio.rs +29 -0
  354. package/vendor/stylo/values/specified/rect.rs +28 -0
  355. package/vendor/stylo/values/specified/resolution.rs +237 -0
  356. package/vendor/stylo/values/specified/source_size_list.rs +135 -0
  357. package/vendor/stylo/values/specified/svg.rs +427 -0
  358. package/vendor/stylo/values/specified/svg_path.rs +1115 -0
  359. package/vendor/stylo/values/specified/table.rs +38 -0
  360. package/vendor/stylo/values/specified/text.rs +1561 -0
  361. package/vendor/stylo/values/specified/time.rs +313 -0
  362. package/vendor/stylo/values/specified/transform.rs +599 -0
  363. package/vendor/stylo/values/specified/tree_counting.rs +32 -0
  364. package/vendor/stylo/values/specified/ui.rs +344 -0
  365. package/vendor/stylo/values/specified/url.rs +12 -0
  366. package/vendor/stylo/values/tagged_numeric.rs +253 -0
  367. package/wasm/blitz_pdf.d.ts +67 -0
  368. package/wasm/blitz_pdf.js +699 -0
  369. package/wasm/blitz_pdf_bg.wasm +0 -0
  370. package/wasm/blitz_pdf_bg.wasm.d.ts +20 -0
@@ -0,0 +1,550 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+
5
+ //! Animated values.
6
+ //!
7
+ //! Some values, notably colors, cannot be interpolated directly with their
8
+ //! computed values and need yet another intermediate representation. This
9
+ //! module's raison d'être is to ultimately contain all these types.
10
+
11
+ use crate::color::AbsoluteColor;
12
+ use crate::properties::{ComputedValues, PropertyId};
13
+ use crate::values::computed::url::ComputedUrl;
14
+ use crate::values::computed::{Angle, Image, Length};
15
+ use crate::values::generics::{ClampToNonNegative, NonNegative};
16
+ use crate::values::specified::SVGPathData;
17
+ use crate::values::CSSFloat;
18
+ use app_units::Au;
19
+ use smallvec::SmallVec;
20
+ use std::cmp;
21
+
22
+ pub mod color;
23
+ pub mod effects;
24
+ mod font;
25
+ mod grid;
26
+ pub mod lists;
27
+ mod svg;
28
+ pub mod text;
29
+ pub mod transform;
30
+
31
+ /// The category a property falls into for ordering purposes.
32
+ ///
33
+ /// https://drafts.csswg.org/web-animations/#calculating-computed-keyframes
34
+ #[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)]
35
+ enum PropertyCategory {
36
+ Custom,
37
+ PhysicalLonghand,
38
+ LogicalLonghand,
39
+ Shorthand,
40
+ }
41
+
42
+ impl PropertyCategory {
43
+ fn of(id: &PropertyId) -> Self {
44
+ match *id {
45
+ PropertyId::NonCustom(id) => match id.longhand_or_shorthand() {
46
+ Ok(id) => {
47
+ if id.is_logical() {
48
+ PropertyCategory::LogicalLonghand
49
+ } else {
50
+ PropertyCategory::PhysicalLonghand
51
+ }
52
+ },
53
+ Err(..) => PropertyCategory::Shorthand,
54
+ },
55
+ PropertyId::Custom(..) => PropertyCategory::Custom,
56
+ }
57
+ }
58
+ }
59
+
60
+ /// A comparator to sort PropertyIds such that physical longhands are sorted
61
+ /// before logical longhands and shorthands, shorthands with fewer components
62
+ /// are sorted before shorthands with more components, and otherwise shorthands
63
+ /// are sorted by IDL name as defined by [Web Animations][property-order].
64
+ ///
65
+ /// Using this allows us to prioritize values specified by longhands (or smaller
66
+ /// shorthand subsets) when longhands and shorthands are both specified on the
67
+ /// one keyframe.
68
+ ///
69
+ /// [property-order] https://drafts.csswg.org/web-animations/#calculating-computed-keyframes
70
+ pub fn compare_property_priority(a: &PropertyId, b: &PropertyId) -> cmp::Ordering {
71
+ let a_category = PropertyCategory::of(a);
72
+ let b_category = PropertyCategory::of(b);
73
+
74
+ if a_category != b_category {
75
+ return a_category.cmp(&b_category);
76
+ }
77
+
78
+ if a_category != PropertyCategory::Shorthand {
79
+ return cmp::Ordering::Equal;
80
+ }
81
+
82
+ let a = a.as_shorthand().unwrap();
83
+ let b = b.as_shorthand().unwrap();
84
+ // Within shorthands, sort by the number of subproperties, then by IDL
85
+ // name.
86
+ let subprop_count_a = a.longhands().count();
87
+ let subprop_count_b = b.longhands().count();
88
+ subprop_count_a
89
+ .cmp(&subprop_count_b)
90
+ .then_with(|| a.idl_name_sort_order().cmp(&b.idl_name_sort_order()))
91
+ }
92
+
93
+ /// A helper function to animate two multiplicative factor.
94
+ pub fn animate_multiplicative_factor(
95
+ this: CSSFloat,
96
+ other: CSSFloat,
97
+ procedure: Procedure,
98
+ ) -> Result<CSSFloat, ()> {
99
+ Ok((this - 1.).animate(&(other - 1.), procedure)? + 1.)
100
+ }
101
+
102
+ /// Animate from one value to another.
103
+ ///
104
+ /// This trait is derivable with `#[derive(Animate)]`. The derived
105
+ /// implementation uses a `match` expression with identical patterns for both
106
+ /// `self` and `other`, calling `Animate::animate` on each fields of the values.
107
+ /// If a field is annotated with `#[animation(constant)]`, the two values should
108
+ /// be equal or an error is returned.
109
+ ///
110
+ /// If a variant is annotated with `#[animation(error)]`, the corresponding
111
+ /// `match` arm returns an error.
112
+ ///
113
+ /// Trait bounds for type parameter `Foo` can be opted out of with
114
+ /// `#[animation(no_bound(Foo))]` on the type definition, trait bounds for
115
+ /// fields can be opted into with `#[animation(field_bound)]` on the field.
116
+ pub trait Animate: Sized {
117
+ /// Animate a value towards another one, given an animation procedure.
118
+ fn animate(&self, other: &Self, procedure: Procedure) -> Result<Self, ()>;
119
+ }
120
+
121
+ /// An animation procedure.
122
+ ///
123
+ /// <https://drafts.csswg.org/web-animations/#procedures-for-animating-properties>
124
+ #[allow(missing_docs)]
125
+ #[derive(Clone, Copy, Debug, PartialEq)]
126
+ pub enum Procedure {
127
+ /// <https://drafts.csswg.org/web-animations/#animation-interpolation>
128
+ Interpolate { progress: f64 },
129
+ /// <https://drafts.csswg.org/web-animations/#animation-addition>
130
+ Add,
131
+ /// <https://drafts.csswg.org/web-animations/#animation-accumulation>
132
+ Accumulate { count: u64 },
133
+ }
134
+
135
+ /// The context needed to provide an animated value from a computed value.
136
+ pub struct Context<'a> {
137
+ /// The computed style we're taking the value from.
138
+ pub style: &'a ComputedValues,
139
+ }
140
+
141
+ /// Conversion between computed values and intermediate values for animations.
142
+ ///
143
+ /// Notably, colors are represented as four floats during animations.
144
+ ///
145
+ /// This trait is derivable with `#[derive(ToAnimatedValue)]`.
146
+ pub trait ToAnimatedValue {
147
+ /// The type of the animated value.
148
+ type AnimatedValue;
149
+
150
+ /// Converts this value to an animated value.
151
+ fn to_animated_value(self, context: &Context) -> Self::AnimatedValue;
152
+
153
+ /// Converts back an animated value into a computed value.
154
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self;
155
+ }
156
+
157
+ /// Returns a value similar to `self` that represents zero.
158
+ ///
159
+ /// This trait is derivable with `#[derive(ToAnimatedValue)]`. If a field is
160
+ /// annotated with `#[animation(constant)]`, a clone of its value will be used
161
+ /// instead of calling `ToAnimatedZero::to_animated_zero` on it.
162
+ ///
163
+ /// If a variant is annotated with `#[animation(error)]`, the corresponding
164
+ /// `match` arm is not generated.
165
+ ///
166
+ /// Trait bounds for type parameter `Foo` can be opted out of with
167
+ /// `#[animation(no_bound(Foo))]` on the type definition.
168
+ pub trait ToAnimatedZero: Sized {
169
+ /// Returns a value that, when added with an underlying value, will produce the underlying
170
+ /// value. This is used for SMIL animation's "by-animation" where SMIL first interpolates from
171
+ /// the zero value to the 'by' value, and then adds the result to the underlying value.
172
+ ///
173
+ /// This is not the necessarily the same as the initial value of a property. For example, the
174
+ /// initial value of 'stroke-width' is 1, but the zero value is 0, since adding 1 to the
175
+ /// underlying value will not produce the underlying value.
176
+ fn to_animated_zero(&self) -> Result<Self, ()>;
177
+ }
178
+
179
+ impl Procedure {
180
+ /// Returns this procedure as a pair of weights.
181
+ ///
182
+ /// This is useful for animations that don't animate differently
183
+ /// depending on the used procedure.
184
+ #[inline]
185
+ pub fn weights(self) -> (f64, f64) {
186
+ match self {
187
+ Procedure::Interpolate { progress } => (1. - progress, progress),
188
+ Procedure::Add => (1., 1.),
189
+ Procedure::Accumulate { count } => (count as f64, 1.),
190
+ }
191
+ }
192
+ }
193
+
194
+ /// <https://drafts.csswg.org/css-transitions/#animtype-number>
195
+ impl Animate for i32 {
196
+ #[inline]
197
+ fn animate(&self, other: &Self, procedure: Procedure) -> Result<Self, ()> {
198
+ Ok(((*self as f64).animate(&(*other as f64), procedure)? + 0.5).floor() as i32)
199
+ }
200
+ }
201
+
202
+ /// <https://drafts.csswg.org/css-transitions/#animtype-number>
203
+ impl Animate for f32 {
204
+ #[inline]
205
+ fn animate(&self, other: &Self, procedure: Procedure) -> Result<Self, ()> {
206
+ let ret = (*self as f64).animate(&(*other as f64), procedure)?;
207
+ Ok(ret.min(f32::MAX as f64).max(f32::MIN as f64) as f32)
208
+ }
209
+ }
210
+
211
+ /// <https://drafts.csswg.org/css-transitions/#animtype-number>
212
+ impl Animate for f64 {
213
+ #[inline]
214
+ fn animate(&self, other: &Self, procedure: Procedure) -> Result<Self, ()> {
215
+ let (self_weight, other_weight) = procedure.weights();
216
+
217
+ let ret = *self * self_weight + *other * other_weight;
218
+ Ok(ret.min(f64::MAX).max(f64::MIN))
219
+ }
220
+ }
221
+
222
+ impl<T> Animate for Option<T>
223
+ where
224
+ T: Animate,
225
+ {
226
+ #[inline]
227
+ fn animate(&self, other: &Self, procedure: Procedure) -> Result<Self, ()> {
228
+ match (self.as_ref(), other.as_ref()) {
229
+ (Some(this), Some(other)) => Ok(Some(this.animate(other, procedure)?)),
230
+ (None, None) => Ok(None),
231
+ _ => Err(()),
232
+ }
233
+ }
234
+ }
235
+
236
+ impl<T: ToAnimatedValue + ClampToNonNegative> ToAnimatedValue for NonNegative<T> {
237
+ type AnimatedValue = NonNegative<<T as ToAnimatedValue>::AnimatedValue>;
238
+
239
+ #[inline]
240
+ fn to_animated_value(self, cx: &crate::values::animated::Context) -> Self::AnimatedValue {
241
+ NonNegative(self.0.to_animated_value(cx))
242
+ }
243
+
244
+ #[inline]
245
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
246
+ Self(<T as ToAnimatedValue>::from_animated_value(animated.0).clamp_to_non_negative())
247
+ }
248
+ }
249
+
250
+ impl ToAnimatedValue for Au {
251
+ type AnimatedValue = Length;
252
+
253
+ #[inline]
254
+ fn to_animated_value(self, context: &Context) -> Self::AnimatedValue {
255
+ Length::new(self.to_f32_px()).to_animated_value(context)
256
+ }
257
+
258
+ #[inline]
259
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
260
+ Au::from_f32_px(Length::from_animated_value(animated).px())
261
+ }
262
+ }
263
+
264
+ impl<T: Animate> Animate for Box<T> {
265
+ #[inline]
266
+ fn animate(&self, other: &Self, procedure: Procedure) -> Result<Self, ()> {
267
+ Ok(Box::new((**self).animate(other, procedure)?))
268
+ }
269
+ }
270
+
271
+ impl<T> ToAnimatedValue for Option<T>
272
+ where
273
+ T: ToAnimatedValue,
274
+ {
275
+ type AnimatedValue = Option<<T as ToAnimatedValue>::AnimatedValue>;
276
+
277
+ #[inline]
278
+ fn to_animated_value(self, context: &Context) -> Self::AnimatedValue {
279
+ self.map(|v| T::to_animated_value(v, context))
280
+ }
281
+
282
+ #[inline]
283
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
284
+ animated.map(T::from_animated_value)
285
+ }
286
+ }
287
+
288
+ impl<T> ToAnimatedValue for Vec<T>
289
+ where
290
+ T: ToAnimatedValue,
291
+ {
292
+ type AnimatedValue = Vec<<T as ToAnimatedValue>::AnimatedValue>;
293
+
294
+ #[inline]
295
+ fn to_animated_value(self, context: &Context) -> Self::AnimatedValue {
296
+ self.into_iter()
297
+ .map(|v| v.to_animated_value(context))
298
+ .collect()
299
+ }
300
+
301
+ #[inline]
302
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
303
+ animated.into_iter().map(T::from_animated_value).collect()
304
+ }
305
+ }
306
+
307
+ impl<T> ToAnimatedValue for thin_vec::ThinVec<T>
308
+ where
309
+ T: ToAnimatedValue,
310
+ {
311
+ type AnimatedValue = thin_vec::ThinVec<<T as ToAnimatedValue>::AnimatedValue>;
312
+
313
+ #[inline]
314
+ fn to_animated_value(self, context: &Context) -> Self::AnimatedValue {
315
+ self.into_iter()
316
+ .map(|v| v.to_animated_value(context))
317
+ .collect()
318
+ }
319
+
320
+ #[inline]
321
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
322
+ animated.into_iter().map(T::from_animated_value).collect()
323
+ }
324
+ }
325
+
326
+ impl<T> ToAnimatedValue for Box<T>
327
+ where
328
+ T: ToAnimatedValue,
329
+ {
330
+ type AnimatedValue = Box<<T as ToAnimatedValue>::AnimatedValue>;
331
+
332
+ #[inline]
333
+ fn to_animated_value(self, context: &Context) -> Self::AnimatedValue {
334
+ Box::new((*self).to_animated_value(context))
335
+ }
336
+
337
+ #[inline]
338
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
339
+ Box::new(T::from_animated_value(*animated))
340
+ }
341
+ }
342
+
343
+ impl<T> ToAnimatedValue for Box<[T]>
344
+ where
345
+ T: ToAnimatedValue,
346
+ {
347
+ type AnimatedValue = Box<[<T as ToAnimatedValue>::AnimatedValue]>;
348
+
349
+ #[inline]
350
+ fn to_animated_value(self, context: &Context) -> Self::AnimatedValue {
351
+ self.into_vec()
352
+ .into_iter()
353
+ .map(|v| v.to_animated_value(context))
354
+ .collect()
355
+ }
356
+
357
+ #[inline]
358
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
359
+ animated
360
+ .into_vec()
361
+ .into_iter()
362
+ .map(T::from_animated_value)
363
+ .collect()
364
+ }
365
+ }
366
+
367
+ impl<T> ToAnimatedValue for crate::OwnedSlice<T>
368
+ where
369
+ T: ToAnimatedValue,
370
+ {
371
+ type AnimatedValue = crate::OwnedSlice<<T as ToAnimatedValue>::AnimatedValue>;
372
+
373
+ #[inline]
374
+ fn to_animated_value(self, context: &Context) -> Self::AnimatedValue {
375
+ self.into_box().to_animated_value(context).into()
376
+ }
377
+
378
+ #[inline]
379
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
380
+ Self::from(Box::from_animated_value(animated.into_box()))
381
+ }
382
+ }
383
+
384
+ impl<T> ToAnimatedValue for SmallVec<[T; 1]>
385
+ where
386
+ T: ToAnimatedValue,
387
+ {
388
+ type AnimatedValue = SmallVec<[T::AnimatedValue; 1]>;
389
+
390
+ #[inline]
391
+ fn to_animated_value(self, context: &Context) -> Self::AnimatedValue {
392
+ self.into_iter()
393
+ .map(|v| v.to_animated_value(context))
394
+ .collect()
395
+ }
396
+
397
+ #[inline]
398
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
399
+ animated.into_iter().map(T::from_animated_value).collect()
400
+ }
401
+ }
402
+
403
+ macro_rules! trivial_to_animated_value {
404
+ ($ty:ty) => {
405
+ impl $crate::values::animated::ToAnimatedValue for $ty {
406
+ type AnimatedValue = Self;
407
+
408
+ #[inline]
409
+ fn to_animated_value(self, _: &Context) -> Self {
410
+ self
411
+ }
412
+
413
+ #[inline]
414
+ fn from_animated_value(animated: Self::AnimatedValue) -> Self {
415
+ animated
416
+ }
417
+ }
418
+ };
419
+ }
420
+
421
+ trivial_to_animated_value!(crate::Atom);
422
+ trivial_to_animated_value!(Angle);
423
+ trivial_to_animated_value!(ComputedUrl);
424
+ trivial_to_animated_value!(bool);
425
+ trivial_to_animated_value!(f32);
426
+ trivial_to_animated_value!(i32);
427
+ trivial_to_animated_value!(u8);
428
+ trivial_to_animated_value!(u16);
429
+ trivial_to_animated_value!(u32);
430
+ trivial_to_animated_value!(usize);
431
+ trivial_to_animated_value!(AbsoluteColor);
432
+ trivial_to_animated_value!(crate::values::generics::color::ColorMixFlags);
433
+ // Note: This implementation is for ToAnimatedValue of ShapeSource.
434
+ //
435
+ // SVGPathData uses Box<[T]>. If we want to derive ToAnimatedValue for all the
436
+ // types, we have to do "impl ToAnimatedValue for Box<[T]>" first.
437
+ // However, the general version of "impl ToAnimatedValue for Box<[T]>" needs to
438
+ // clone |T| and convert it into |T::AnimatedValue|. However, for SVGPathData
439
+ // that is unnecessary--moving |T| is sufficient. So here, we implement this
440
+ // trait manually.
441
+ trivial_to_animated_value!(SVGPathData);
442
+ // FIXME: Bug 1514342, Image is not animatable, but we still need to implement
443
+ // this to avoid adding this derive to generic::Image and all its arms. We can
444
+ // drop this after landing Bug 1514342.
445
+ trivial_to_animated_value!(Image);
446
+
447
+ impl ToAnimatedZero for Au {
448
+ #[inline]
449
+ fn to_animated_zero(&self) -> Result<Self, ()> {
450
+ Ok(Au(0))
451
+ }
452
+ }
453
+
454
+ impl ToAnimatedZero for f32 {
455
+ #[inline]
456
+ fn to_animated_zero(&self) -> Result<Self, ()> {
457
+ Ok(0.)
458
+ }
459
+ }
460
+
461
+ impl ToAnimatedZero for f64 {
462
+ #[inline]
463
+ fn to_animated_zero(&self) -> Result<Self, ()> {
464
+ Ok(0.)
465
+ }
466
+ }
467
+
468
+ impl ToAnimatedZero for i32 {
469
+ #[inline]
470
+ fn to_animated_zero(&self) -> Result<Self, ()> {
471
+ Ok(0)
472
+ }
473
+ }
474
+
475
+ impl<T> ToAnimatedZero for Box<T>
476
+ where
477
+ T: ToAnimatedZero,
478
+ {
479
+ #[inline]
480
+ fn to_animated_zero(&self) -> Result<Self, ()> {
481
+ Ok(Box::new((**self).to_animated_zero()?))
482
+ }
483
+ }
484
+
485
+ impl<T> ToAnimatedZero for Option<T>
486
+ where
487
+ T: ToAnimatedZero,
488
+ {
489
+ #[inline]
490
+ fn to_animated_zero(&self) -> Result<Self, ()> {
491
+ match *self {
492
+ Some(ref value) => Ok(Some(value.to_animated_zero()?)),
493
+ None => Ok(None),
494
+ }
495
+ }
496
+ }
497
+
498
+ impl<T> ToAnimatedZero for Vec<T>
499
+ where
500
+ T: ToAnimatedZero,
501
+ {
502
+ #[inline]
503
+ fn to_animated_zero(&self) -> Result<Self, ()> {
504
+ self.iter().map(|v| v.to_animated_zero()).collect()
505
+ }
506
+ }
507
+
508
+ impl<T> ToAnimatedZero for thin_vec::ThinVec<T>
509
+ where
510
+ T: ToAnimatedZero,
511
+ {
512
+ #[inline]
513
+ fn to_animated_zero(&self) -> Result<Self, ()> {
514
+ self.iter().map(|v| v.to_animated_zero()).collect()
515
+ }
516
+ }
517
+
518
+ impl<T> ToAnimatedZero for Box<[T]>
519
+ where
520
+ T: ToAnimatedZero,
521
+ {
522
+ #[inline]
523
+ fn to_animated_zero(&self) -> Result<Self, ()> {
524
+ self.iter().map(|v| v.to_animated_zero()).collect()
525
+ }
526
+ }
527
+
528
+ impl<T> ToAnimatedZero for crate::OwnedSlice<T>
529
+ where
530
+ T: ToAnimatedZero,
531
+ {
532
+ #[inline]
533
+ fn to_animated_zero(&self) -> Result<Self, ()> {
534
+ self.iter().map(|v| v.to_animated_zero()).collect()
535
+ }
536
+ }
537
+
538
+ impl<T> ToAnimatedZero for crate::ArcSlice<T>
539
+ where
540
+ T: ToAnimatedZero,
541
+ {
542
+ #[inline]
543
+ fn to_animated_zero(&self) -> Result<Self, ()> {
544
+ let v = self
545
+ .iter()
546
+ .map(|v| v.to_animated_zero())
547
+ .collect::<Result<Vec<_>, _>>()?;
548
+ Ok(crate::ArcSlice::from_iter(v.into_iter()))
549
+ }
550
+ }
@@ -0,0 +1,46 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+
5
+ //! Animation implementations for various SVG-related types.
6
+
7
+ use super::{Animate, Procedure};
8
+ use crate::values::distance::{ComputeSquaredDistance, SquaredDistance};
9
+ use crate::values::generics::svg::SVGStrokeDashArray;
10
+
11
+ /// <https://www.w3.org/TR/SVG11/painting.html#StrokeDasharrayProperty>
12
+ impl<L> Animate for SVGStrokeDashArray<L>
13
+ where
14
+ L: Clone + Animate,
15
+ {
16
+ #[inline]
17
+ fn animate(&self, other: &Self, procedure: Procedure) -> Result<Self, ()> {
18
+ if matches!(procedure, Procedure::Add | Procedure::Accumulate { .. }) {
19
+ // Non-additive.
20
+ return Err(());
21
+ }
22
+ match (self, other) {
23
+ (SVGStrokeDashArray::Values(this), SVGStrokeDashArray::Values(other)) => {
24
+ Ok(SVGStrokeDashArray::Values(
25
+ super::lists::repeatable_list::animate(this, other, procedure)?,
26
+ ))
27
+ },
28
+ _ => Err(()),
29
+ }
30
+ }
31
+ }
32
+
33
+ impl<L> ComputeSquaredDistance for SVGStrokeDashArray<L>
34
+ where
35
+ L: ComputeSquaredDistance,
36
+ {
37
+ #[inline]
38
+ fn compute_squared_distance(&self, other: &Self) -> Result<SquaredDistance, ()> {
39
+ match (self, other) {
40
+ (SVGStrokeDashArray::Values(this), SVGStrokeDashArray::Values(other)) => {
41
+ super::lists::repeatable_list::squared_distance(this, other)
42
+ },
43
+ _ => Err(()),
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,58 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+
5
+ //! Animation implementations for text-related types.
6
+
7
+ use super::{Animate, Procedure, ToAnimatedZero};
8
+ use crate::values::computed::LengthPercentage;
9
+ use crate::values::{ComputeSquaredDistance, MallocSizeOf, SquaredDistance};
10
+
11
+ /// A `text-decoration-inset` value for animation: we resolve `auto` to a pair of lengths,
12
+ /// but record whether the original value was actually `auto`.
13
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
14
+ pub struct TextDecorationInset {
15
+ /// The inset at the start of the decoration.
16
+ pub start: LengthPercentage,
17
+ /// The inset at the end of the decoration.
18
+ pub end: LengthPercentage,
19
+ /// Whether this represents a resolved `auto` value.
20
+ pub is_auto: bool,
21
+ }
22
+
23
+ impl Animate for TextDecorationInset {
24
+ fn animate(&self, other: &Self, procedure: Procedure) -> Result<Self, ()> {
25
+ Ok(if self.is_auto && other.is_auto {
26
+ self.clone()
27
+ } else {
28
+ Self {
29
+ start: self.start.animate(&other.start, procedure)?,
30
+ end: self.end.animate(&other.end, procedure)?,
31
+ is_auto: false,
32
+ }
33
+ })
34
+ }
35
+ }
36
+
37
+ impl ComputeSquaredDistance for TextDecorationInset {
38
+ #[inline]
39
+ fn compute_squared_distance(&self, other: &Self) -> Result<SquaredDistance, ()> {
40
+ Ok(if self.is_auto && other.is_auto {
41
+ SquaredDistance::from_sqrt(0.)
42
+ } else {
43
+ self.start.compute_squared_distance(&other.start)?
44
+ + self.end.compute_squared_distance(&other.end)?
45
+ })
46
+ }
47
+ }
48
+
49
+ impl ToAnimatedZero for TextDecorationInset {
50
+ #[inline]
51
+ fn to_animated_zero(&self) -> Result<Self, ()> {
52
+ Ok(Self {
53
+ start: self.start.to_animated_zero()?,
54
+ end: self.end.to_animated_zero()?,
55
+ is_auto: false,
56
+ })
57
+ }
58
+ }