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,653 @@
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
+ //! Generic types for the handling of [images].
6
+ //!
7
+ //! [images]: https://drafts.csswg.org/css-images/#image-values
8
+
9
+ use crate::color::mix::ColorInterpolationMethod;
10
+ use crate::custom_properties;
11
+ use crate::derives::*;
12
+ use crate::values::generics::NonNegative;
13
+ use crate::values::generics::{color::GenericLightDark, position::PositionComponent, Optional};
14
+ use crate::values::serialize_atom_identifier;
15
+ use crate::{Atom, Zero};
16
+ use servo_arc::Arc;
17
+ use std::fmt::{self, Write};
18
+ use style_traits::{CssWriter, ToCss};
19
+ /// An `<image> | none` value.
20
+ ///
21
+ /// https://drafts.csswg.org/css-images/#image-values
22
+ #[derive(Clone, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToResolvedValue, ToShmem)]
23
+ #[repr(C, u8)]
24
+ pub enum GenericImage<G, ImageUrl, Color, Percentage, Resolution> {
25
+ /// `none` variant.
26
+ None,
27
+
28
+ /// A `<url()>` image.
29
+ Url(ImageUrl),
30
+
31
+ /// A `<gradient>` image. Gradients are rather large, and not nearly as
32
+ /// common as urls, so we box them here to keep the size of this enum sane.
33
+ Gradient(Box<G>),
34
+
35
+ /// A `-moz-element(# <element-id>)`
36
+ #[cfg(feature = "gecko")]
37
+ #[css(function = "-moz-element")]
38
+ Element(Atom),
39
+
40
+ /// A `-moz-symbolic-icon(<icon-id>)`
41
+ /// NOTE(emilio): #[css(skip)] only really affects SpecifiedValueInfo, which we want because
42
+ /// this is chrome-only.
43
+ #[cfg(feature = "gecko")]
44
+ #[css(function, skip)]
45
+ MozSymbolicIcon(Atom),
46
+
47
+ /// A paint worklet image.
48
+ /// <https://drafts.css-houdini.org/css-paint-api/>
49
+ #[cfg(feature = "servo")]
50
+ PaintWorklet(Box<PaintWorklet>),
51
+
52
+ /// A `<cross-fade()>` image. Storing this directly inside of
53
+ /// GenericImage increases the size by 8 bytes so we box it here
54
+ /// and store images directly inside of cross-fade instead of
55
+ /// boxing them there.
56
+ CrossFade(Box<GenericCrossFade<Self, Color, Percentage>>),
57
+
58
+ /// An `image-set()` function.
59
+ ImageSet(Box<GenericImageSet<Self, Resolution>>),
60
+
61
+ /// A `light-dark()` function.
62
+ LightDark(Box<GenericLightDark<Self>>),
63
+
64
+ /// An `image(<color>)` function.
65
+ #[css(function)]
66
+ Image(#[value_info(skip)] Box<Color>),
67
+ }
68
+
69
+ pub use self::GenericImage as Image;
70
+
71
+ /// <https://drafts.csswg.org/css-images-4/#cross-fade-function>
72
+ #[derive(
73
+ Clone, Debug, MallocSizeOf, PartialEq, ToResolvedValue, ToShmem, ToCss, ToComputedValue,
74
+ )]
75
+ #[css(comma, function = "cross-fade")]
76
+ #[repr(C)]
77
+ pub struct GenericCrossFade<Image, Color, Percentage> {
78
+ /// All of the image percent pairings passed as arguments to
79
+ /// cross-fade.
80
+ #[css(iterable)]
81
+ pub elements: crate::OwnedSlice<GenericCrossFadeElement<Image, Color, Percentage>>,
82
+ }
83
+
84
+ /// An optional percent and a cross fade image.
85
+ #[derive(
86
+ Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem, ToCss,
87
+ )]
88
+ #[repr(C)]
89
+ pub struct GenericCrossFadeElement<Image, Color, Percentage> {
90
+ /// The percent of the final image that `image` will be.
91
+ pub percent: Optional<Percentage>,
92
+ /// A color or image that will be blended when cross-fade is
93
+ /// evaluated.
94
+ pub image: GenericCrossFadeImage<Image, Color>,
95
+ }
96
+
97
+ /// An image or a color. `cross-fade` takes either when blending
98
+ /// images together.
99
+ #[derive(
100
+ Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem, ToCss,
101
+ )]
102
+ #[repr(C, u8)]
103
+ pub enum GenericCrossFadeImage<I, C> {
104
+ /// A boxed image value. Boxing provides indirection so images can
105
+ /// be cross-fades and cross-fades can be images.
106
+ Image(I),
107
+ /// A color value.
108
+ Color(C),
109
+ }
110
+
111
+ pub use self::GenericCrossFade as CrossFade;
112
+ pub use self::GenericCrossFadeElement as CrossFadeElement;
113
+ pub use self::GenericCrossFadeImage as CrossFadeImage;
114
+
115
+ /// https://drafts.csswg.org/css-images-4/#image-set-notation
116
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss, ToResolvedValue, ToShmem)]
117
+ #[css(comma, function = "image-set")]
118
+ #[repr(C)]
119
+ pub struct GenericImageSet<Image, Resolution> {
120
+ /// The index of the selected candidate. usize::MAX for specified values or invalid images.
121
+ #[css(skip)]
122
+ pub selected_index: usize,
123
+
124
+ /// All of the image and resolution pairs.
125
+ #[css(iterable)]
126
+ pub items: crate::OwnedSlice<GenericImageSetItem<Image, Resolution>>,
127
+ }
128
+
129
+ /// An optional percent and a cross fade image.
130
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem)]
131
+ #[repr(C)]
132
+ pub struct GenericImageSetItem<Image, Resolution> {
133
+ /// `<image>`. `<string>` is converted to `Image::Url` at parse time.
134
+ pub image: Image,
135
+ /// The `<resolution>`.
136
+ ///
137
+ /// TODO: Skip serialization if it is 1x.
138
+ pub resolution: Resolution,
139
+
140
+ /// The `type(<string>)`
141
+ /// (Optional) Specify the image's MIME type
142
+ pub mime_type: crate::OwnedStr,
143
+
144
+ /// True if mime_type has been specified
145
+ pub has_mime_type: bool,
146
+ }
147
+
148
+ impl<I: style_traits::ToCss, R: style_traits::ToCss> ToCss for GenericImageSetItem<I, R> {
149
+ fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
150
+ where
151
+ W: fmt::Write,
152
+ {
153
+ self.image.to_css(dest)?;
154
+ dest.write_char(' ')?;
155
+ self.resolution.to_css(dest)?;
156
+
157
+ if self.has_mime_type {
158
+ dest.write_char(' ')?;
159
+ dest.write_str("type(")?;
160
+ self.mime_type.to_css(dest)?;
161
+ dest.write_char(')')?;
162
+ }
163
+ Ok(())
164
+ }
165
+ }
166
+
167
+ pub use self::GenericImageSet as ImageSet;
168
+ pub use self::GenericImageSetItem as ImageSetItem;
169
+
170
+ /// State flags stored on each variant of a Gradient.
171
+ #[derive(
172
+ Clone, Copy, Debug, Default, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem,
173
+ )]
174
+ #[repr(C)]
175
+ pub struct GradientFlags(u8);
176
+ bitflags! {
177
+ impl GradientFlags: u8 {
178
+ /// Set if this is a repeating gradient.
179
+ const REPEATING = 1 << 0;
180
+ /// Set if the color interpolation method matches the default for the items.
181
+ const HAS_DEFAULT_COLOR_INTERPOLATION_METHOD = 1 << 1;
182
+ }
183
+ }
184
+
185
+ /// A CSS gradient.
186
+ /// <https://drafts.csswg.org/css-images/#gradients>
187
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem)]
188
+ #[repr(C)]
189
+ pub enum GenericGradient<
190
+ LineDirection,
191
+ Length,
192
+ LengthPercentage,
193
+ Position,
194
+ Angle,
195
+ AngleOrPercentage,
196
+ Color,
197
+ > {
198
+ /// A linear gradient.
199
+ Linear {
200
+ /// Line direction
201
+ direction: LineDirection,
202
+ /// Method to use for color interpolation.
203
+ color_interpolation_method: ColorInterpolationMethod,
204
+ /// The color stops and interpolation hints.
205
+ items: crate::OwnedSlice<GenericGradientItem<Color, LengthPercentage>>,
206
+ /// State flags for the gradient.
207
+ flags: GradientFlags,
208
+ /// Compatibility mode.
209
+ compat_mode: GradientCompatMode,
210
+ },
211
+ /// A radial gradient.
212
+ Radial {
213
+ /// Shape of gradient
214
+ shape: GenericEndingShape<NonNegative<Length>, NonNegative<LengthPercentage>>,
215
+ /// Center of gradient
216
+ position: Position,
217
+ /// Method to use for color interpolation.
218
+ color_interpolation_method: ColorInterpolationMethod,
219
+ /// The color stops and interpolation hints.
220
+ items: crate::OwnedSlice<GenericGradientItem<Color, LengthPercentage>>,
221
+ /// State flags for the gradient.
222
+ flags: GradientFlags,
223
+ /// Compatibility mode.
224
+ compat_mode: GradientCompatMode,
225
+ },
226
+ /// A conic gradient.
227
+ Conic {
228
+ /// Start angle of gradient
229
+ angle: Angle,
230
+ /// Center of gradient
231
+ position: Position,
232
+ /// Method to use for color interpolation.
233
+ color_interpolation_method: ColorInterpolationMethod,
234
+ /// The color stops and interpolation hints.
235
+ items: crate::OwnedSlice<GenericGradientItem<Color, AngleOrPercentage>>,
236
+ /// State flags for the gradient.
237
+ flags: GradientFlags,
238
+ },
239
+ }
240
+
241
+ pub use self::GenericGradient as Gradient;
242
+
243
+ #[derive(
244
+ Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem,
245
+ )]
246
+ #[repr(u8)]
247
+ /// Whether we used the modern notation or the compatibility `-webkit`, `-moz` prefixes.
248
+ pub enum GradientCompatMode {
249
+ /// Modern syntax.
250
+ Modern,
251
+ /// `-webkit` prefix.
252
+ WebKit,
253
+ /// `-moz` prefix
254
+ Moz,
255
+ }
256
+
257
+ /// A radial gradient's ending shape.
258
+ #[derive(
259
+ Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss, ToResolvedValue, ToShmem,
260
+ )]
261
+ #[repr(C, u8)]
262
+ pub enum GenericEndingShape<NonNegativeLength, NonNegativeLengthPercentage> {
263
+ /// A circular gradient.
264
+ Circle(GenericCircle<NonNegativeLength>),
265
+ /// An elliptic gradient.
266
+ Ellipse(GenericEllipse<NonNegativeLengthPercentage>),
267
+ }
268
+
269
+ pub use self::GenericEndingShape as EndingShape;
270
+
271
+ /// A circle shape.
272
+ #[derive(
273
+ Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem,
274
+ )]
275
+ #[repr(C, u8)]
276
+ pub enum GenericCircle<NonNegativeLength> {
277
+ /// A circle radius.
278
+ Radius(NonNegativeLength),
279
+ /// A circle extent.
280
+ Extent(ShapeExtent),
281
+ }
282
+
283
+ pub use self::GenericCircle as Circle;
284
+
285
+ /// An ellipse shape.
286
+ #[derive(
287
+ Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss, ToResolvedValue, ToShmem,
288
+ )]
289
+ #[repr(C, u8)]
290
+ pub enum GenericEllipse<NonNegativeLengthPercentage> {
291
+ /// An ellipse pair of radii.
292
+ Radii(NonNegativeLengthPercentage, NonNegativeLengthPercentage),
293
+ /// An ellipse extent.
294
+ Extent(ShapeExtent),
295
+ }
296
+
297
+ pub use self::GenericEllipse as Ellipse;
298
+
299
+ /// <https://drafts.csswg.org/css-images/#typedef-extent-keyword>
300
+ #[allow(missing_docs)]
301
+ #[derive(
302
+ Clone,
303
+ Copy,
304
+ Debug,
305
+ Deserialize,
306
+ Eq,
307
+ MallocSizeOf,
308
+ Parse,
309
+ PartialEq,
310
+ Serialize,
311
+ ToComputedValue,
312
+ ToCss,
313
+ ToResolvedValue,
314
+ ToShmem,
315
+ )]
316
+ #[repr(u8)]
317
+ pub enum ShapeExtent {
318
+ ClosestSide,
319
+ FarthestSide,
320
+ ClosestCorner,
321
+ FarthestCorner,
322
+ Contain,
323
+ Cover,
324
+ }
325
+
326
+ /// A gradient item.
327
+ /// <https://drafts.csswg.org/css-images-4/#color-stop-syntax>
328
+ #[derive(
329
+ Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss, ToResolvedValue, ToShmem,
330
+ )]
331
+ #[repr(C, u8)]
332
+ pub enum GenericGradientItem<Color, T> {
333
+ /// A simple color stop, without position.
334
+ SimpleColorStop(Color),
335
+ /// A complex color stop, with a position.
336
+ ComplexColorStop {
337
+ /// The color for the stop.
338
+ color: Color,
339
+ /// The position for the stop.
340
+ position: T,
341
+ },
342
+ /// An interpolation hint.
343
+ InterpolationHint(T),
344
+ }
345
+
346
+ pub use self::GenericGradientItem as GradientItem;
347
+
348
+ /// A color stop.
349
+ /// <https://drafts.csswg.org/css-images/#typedef-color-stop-list>
350
+ #[derive(
351
+ Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss, ToResolvedValue, ToShmem,
352
+ )]
353
+ pub struct ColorStop<Color, T> {
354
+ /// The color of this stop.
355
+ pub color: Color,
356
+ /// The position of this stop.
357
+ pub position: Option<T>,
358
+ }
359
+
360
+ impl<Color, T> ColorStop<Color, T> {
361
+ /// Convert the color stop into an appropriate `GradientItem`.
362
+ #[inline]
363
+ pub fn into_item(self) -> GradientItem<Color, T> {
364
+ match self.position {
365
+ Some(position) => GradientItem::ComplexColorStop {
366
+ color: self.color,
367
+ position,
368
+ },
369
+ None => GradientItem::SimpleColorStop(self.color),
370
+ }
371
+ }
372
+ }
373
+
374
+ /// Specified values for a paint worklet.
375
+ /// <https://drafts.css-houdini.org/css-paint-api/>
376
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem)]
377
+ pub struct PaintWorklet {
378
+ /// The name the worklet was registered with.
379
+ pub name: Atom,
380
+ /// The arguments for the worklet.
381
+ /// TODO: store a parsed representation of the arguments.
382
+ #[ignore_malloc_size_of = "Arc"]
383
+ #[compute(no_field_bound)]
384
+ #[resolve(no_field_bound)]
385
+ pub arguments: Vec<Arc<custom_properties::SpecifiedValue>>,
386
+ }
387
+
388
+ impl ::style_traits::SpecifiedValueInfo for PaintWorklet {}
389
+
390
+ impl ToCss for PaintWorklet {
391
+ fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
392
+ where
393
+ W: Write,
394
+ {
395
+ dest.write_str("paint(")?;
396
+ serialize_atom_identifier(&self.name, dest)?;
397
+ for argument in &self.arguments {
398
+ dest.write_str(", ")?;
399
+ argument.to_css(dest)?;
400
+ }
401
+ dest.write_char(')')
402
+ }
403
+ }
404
+
405
+ impl<G, U, C, P, Resolution> fmt::Debug for Image<G, U, C, P, Resolution>
406
+ where
407
+ Image<G, U, C, P, Resolution>: ToCss,
408
+ {
409
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
410
+ self.to_css(&mut CssWriter::new(f))
411
+ }
412
+ }
413
+
414
+ impl<G, U, C, P, Resolution> ToCss for Image<G, U, C, P, Resolution>
415
+ where
416
+ G: ToCss,
417
+ U: ToCss,
418
+ C: ToCss,
419
+ P: ToCss,
420
+ Resolution: ToCss,
421
+ {
422
+ fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
423
+ where
424
+ W: Write,
425
+ {
426
+ match *self {
427
+ Image::None => dest.write_str("none"),
428
+ Image::Url(ref url) => url.to_css(dest),
429
+ Image::Gradient(ref gradient) => gradient.to_css(dest),
430
+ #[cfg(feature = "servo")]
431
+ Image::PaintWorklet(ref paint_worklet) => paint_worklet.to_css(dest),
432
+ #[cfg(feature = "gecko")]
433
+ Image::Element(ref selector) => {
434
+ dest.write_str("-moz-element(#")?;
435
+ serialize_atom_identifier(selector, dest)?;
436
+ dest.write_char(')')
437
+ },
438
+ #[cfg(feature = "gecko")]
439
+ Image::MozSymbolicIcon(ref id) => {
440
+ dest.write_str("-moz-symbolic-icon(")?;
441
+ serialize_atom_identifier(id, dest)?;
442
+ dest.write_char(')')
443
+ },
444
+ Image::Image(ref color) => {
445
+ dest.write_str("image(")?;
446
+ color.to_css(dest)?;
447
+ dest.write_char(')')
448
+ },
449
+ Image::ImageSet(ref is) => is.to_css(dest),
450
+ Image::CrossFade(ref cf) => cf.to_css(dest),
451
+ Image::LightDark(ref ld) => ld.to_css(dest),
452
+ }
453
+ }
454
+ }
455
+
456
+ impl<D, L, LP, P, A: Zero, AoP, C> ToCss for Gradient<D, L, LP, P, A, AoP, C>
457
+ where
458
+ D: LineDirection,
459
+ L: ToCss,
460
+ LP: ToCss,
461
+ P: PositionComponent + ToCss,
462
+ A: ToCss,
463
+ AoP: ToCss,
464
+ C: ToCss,
465
+ {
466
+ fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
467
+ where
468
+ W: Write,
469
+ {
470
+ let (compat_mode, repeating, has_default_color_interpolation_method) = match *self {
471
+ Gradient::Linear {
472
+ compat_mode, flags, ..
473
+ }
474
+ | Gradient::Radial {
475
+ compat_mode, flags, ..
476
+ } => (
477
+ compat_mode,
478
+ flags.contains(GradientFlags::REPEATING),
479
+ flags.contains(GradientFlags::HAS_DEFAULT_COLOR_INTERPOLATION_METHOD),
480
+ ),
481
+ Gradient::Conic { flags, .. } => (
482
+ GradientCompatMode::Modern,
483
+ flags.contains(GradientFlags::REPEATING),
484
+ flags.contains(GradientFlags::HAS_DEFAULT_COLOR_INTERPOLATION_METHOD),
485
+ ),
486
+ };
487
+
488
+ match compat_mode {
489
+ GradientCompatMode::WebKit => dest.write_str("-webkit-")?,
490
+ GradientCompatMode::Moz => dest.write_str("-moz-")?,
491
+ _ => {},
492
+ }
493
+
494
+ if repeating {
495
+ dest.write_str("repeating-")?;
496
+ }
497
+
498
+ match *self {
499
+ Gradient::Linear {
500
+ ref direction,
501
+ ref color_interpolation_method,
502
+ ref items,
503
+ compat_mode,
504
+ ..
505
+ } => {
506
+ dest.write_str("linear-gradient(")?;
507
+ let mut skip_comma = true;
508
+ if !direction.points_downwards(compat_mode) {
509
+ direction.to_css(dest, compat_mode)?;
510
+ skip_comma = false;
511
+ }
512
+ if !has_default_color_interpolation_method {
513
+ if !skip_comma {
514
+ dest.write_char(' ')?;
515
+ }
516
+ color_interpolation_method.to_css(dest)?;
517
+ skip_comma = false;
518
+ }
519
+ for item in &**items {
520
+ if !skip_comma {
521
+ dest.write_str(", ")?;
522
+ }
523
+ skip_comma = false;
524
+ item.to_css(dest)?;
525
+ }
526
+ },
527
+ Gradient::Radial {
528
+ ref shape,
529
+ ref position,
530
+ ref color_interpolation_method,
531
+ ref items,
532
+ compat_mode,
533
+ ..
534
+ } => {
535
+ dest.write_str("radial-gradient(")?;
536
+ let omit_shape = match *shape {
537
+ EndingShape::Ellipse(Ellipse::Extent(ShapeExtent::Cover))
538
+ | EndingShape::Ellipse(Ellipse::Extent(ShapeExtent::FarthestCorner)) => true,
539
+ _ => false,
540
+ };
541
+ let omit_position = position.is_center();
542
+ if compat_mode == GradientCompatMode::Modern {
543
+ if !omit_shape {
544
+ shape.to_css(dest)?;
545
+ if !omit_position {
546
+ dest.write_char(' ')?;
547
+ }
548
+ }
549
+ if !omit_position {
550
+ dest.write_str("at ")?;
551
+ position.to_css(dest)?;
552
+ }
553
+ } else {
554
+ if !omit_position {
555
+ position.to_css(dest)?;
556
+ if !omit_shape {
557
+ dest.write_str(", ")?;
558
+ }
559
+ }
560
+ if !omit_shape {
561
+ shape.to_css(dest)?;
562
+ }
563
+ }
564
+ if !has_default_color_interpolation_method {
565
+ if !omit_shape || !omit_position {
566
+ dest.write_char(' ')?;
567
+ }
568
+ color_interpolation_method.to_css(dest)?;
569
+ }
570
+
571
+ let mut skip_comma =
572
+ omit_shape && omit_position && has_default_color_interpolation_method;
573
+ for item in &**items {
574
+ if !skip_comma {
575
+ dest.write_str(", ")?;
576
+ }
577
+ skip_comma = false;
578
+ item.to_css(dest)?;
579
+ }
580
+ },
581
+ Gradient::Conic {
582
+ ref angle,
583
+ ref position,
584
+ ref color_interpolation_method,
585
+ ref items,
586
+ ..
587
+ } => {
588
+ dest.write_str("conic-gradient(")?;
589
+ let omit_angle = angle.is_zero();
590
+ let omit_position = position.is_center();
591
+ if !omit_angle {
592
+ dest.write_str("from ")?;
593
+ angle.to_css(dest)?;
594
+ if !omit_position {
595
+ dest.write_char(' ')?;
596
+ }
597
+ }
598
+ if !omit_position {
599
+ dest.write_str("at ")?;
600
+ position.to_css(dest)?;
601
+ }
602
+ if !has_default_color_interpolation_method {
603
+ if !omit_angle || !omit_position {
604
+ dest.write_char(' ')?;
605
+ }
606
+ color_interpolation_method.to_css(dest)?;
607
+ }
608
+ let mut skip_comma =
609
+ omit_angle && omit_position && has_default_color_interpolation_method;
610
+ for item in &**items {
611
+ if !skip_comma {
612
+ dest.write_str(", ")?;
613
+ }
614
+ skip_comma = false;
615
+ item.to_css(dest)?;
616
+ }
617
+ },
618
+ }
619
+ dest.write_char(')')
620
+ }
621
+ }
622
+
623
+ /// The direction of a linear gradient.
624
+ pub trait LineDirection {
625
+ /// Whether this direction points towards, and thus can be omitted.
626
+ fn points_downwards(&self, compat_mode: GradientCompatMode) -> bool;
627
+
628
+ /// Serialises this direction according to the compatibility mode.
629
+ fn to_css<W>(&self, dest: &mut CssWriter<W>, compat_mode: GradientCompatMode) -> fmt::Result
630
+ where
631
+ W: Write;
632
+ }
633
+
634
+ impl<L> ToCss for Circle<L>
635
+ where
636
+ L: ToCss,
637
+ {
638
+ fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
639
+ where
640
+ W: Write,
641
+ {
642
+ match *self {
643
+ Circle::Extent(ShapeExtent::FarthestCorner) | Circle::Extent(ShapeExtent::Cover) => {
644
+ dest.write_str("circle")
645
+ },
646
+ Circle::Extent(keyword) => {
647
+ dest.write_str("circle ")?;
648
+ keyword.to_css(dest)
649
+ },
650
+ Circle::Radius(ref length) => length.to_css(dest),
651
+ }
652
+ }
653
+ }