blitz-pdf 0.1.3 → 0.1.5

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 (114) hide show
  1. package/README.md +35 -6
  2. package/THIRD_PARTY_NOTICES.md +5 -2
  3. package/dist/api.d.ts +9 -1
  4. package/dist/api.d.ts.map +1 -1
  5. package/dist/api.js +25 -27
  6. package/dist/api.js.map +1 -1
  7. package/dist/browser.d.ts +1 -1
  8. package/dist/browser.d.ts.map +1 -1
  9. package/dist/browser.js +13 -1
  10. package/dist/browser.js.map +1 -1
  11. package/dist/node-worker.d.ts +2 -0
  12. package/dist/node-worker.d.ts.map +1 -0
  13. package/dist/node-worker.js +10 -0
  14. package/dist/node-worker.js.map +1 -0
  15. package/dist/node.d.ts +1 -1
  16. package/dist/node.d.ts.map +1 -1
  17. package/dist/node.js +18 -6
  18. package/dist/node.js.map +1 -1
  19. package/dist/render.d.ts +8 -0
  20. package/dist/render.d.ts.map +1 -0
  21. package/dist/render.js +28 -0
  22. package/dist/render.js.map +1 -0
  23. package/dist/wasm.d.ts +3 -0
  24. package/dist/wasm.d.ts.map +1 -0
  25. package/dist/wasm.js +18 -0
  26. package/dist/wasm.js.map +1 -0
  27. package/dist/worker-host.d.ts +16 -0
  28. package/dist/worker-host.d.ts.map +1 -0
  29. package/dist/worker-host.js +31 -0
  30. package/dist/worker-host.js.map +1 -0
  31. package/dist/worker-protocol.d.ts +22 -0
  32. package/dist/worker-protocol.d.ts.map +1 -0
  33. package/dist/worker-protocol.js +2 -0
  34. package/dist/worker-protocol.js.map +1 -0
  35. package/dist/worker-runtime.d.ts +8 -0
  36. package/dist/worker-runtime.d.ts.map +1 -0
  37. package/dist/worker-runtime.js +34 -0
  38. package/dist/worker-runtime.js.map +1 -0
  39. package/dist/worker.d.ts +2 -0
  40. package/dist/worker.d.ts.map +1 -0
  41. package/dist/worker.js +7 -0
  42. package/dist/worker.js.map +1 -0
  43. package/docs/layout-regressions.md +65 -0
  44. package/docs/pagination-regressions.md +7 -6
  45. package/package.json +5 -2
  46. package/src/api.ts +33 -22
  47. package/src/browser.ts +13 -3
  48. package/src/node-worker.ts +9 -0
  49. package/src/node.ts +13 -4
  50. package/src/render.ts +28 -0
  51. package/src/wasm.ts +17 -0
  52. package/src/worker-host.ts +45 -0
  53. package/src/worker-protocol.ts +10 -0
  54. package/src/worker-runtime.ts +35 -0
  55. package/src/worker.ts +12 -0
  56. package/vendor/README.md +35 -0
  57. package/vendor/blitz-dom/Cargo.toml +113 -0
  58. package/vendor/blitz-dom/LICENSE-APACHE +176 -0
  59. package/vendor/blitz-dom/LICENSE-MIT +23 -0
  60. package/vendor/blitz-dom/assets/default.css +1142 -0
  61. package/vendor/blitz-dom/assets/moz-bullet-font.otf +0 -0
  62. package/vendor/blitz-dom/src/accessibility.rs +255 -0
  63. package/vendor/blitz-dom/src/config.rs +97 -0
  64. package/vendor/blitz-dom/src/cssom.rs +971 -0
  65. package/vendor/blitz-dom/src/debug.rs +206 -0
  66. package/vendor/blitz-dom/src/document.rs +3395 -0
  67. package/vendor/blitz-dom/src/events/driver.rs +427 -0
  68. package/vendor/blitz-dom/src/events/focus.rs +40 -0
  69. package/vendor/blitz-dom/src/events/ime.rs +31 -0
  70. package/vendor/blitz-dom/src/events/keyboard.rs +174 -0
  71. package/vendor/blitz-dom/src/events/mod.rs +315 -0
  72. package/vendor/blitz-dom/src/events/pointer.rs +849 -0
  73. package/vendor/blitz-dom/src/font_metrics.rs +177 -0
  74. package/vendor/blitz-dom/src/form.rs +463 -0
  75. package/vendor/blitz-dom/src/html.rs +38 -0
  76. package/vendor/blitz-dom/src/iframe.rs +186 -0
  77. package/vendor/blitz-dom/src/layout/construct.rs +1328 -0
  78. package/vendor/blitz-dom/src/layout/damage.rs +642 -0
  79. package/vendor/blitz-dom/src/layout/inline.rs +1160 -0
  80. package/vendor/blitz-dom/src/layout/list.rs +237 -0
  81. package/vendor/blitz-dom/src/layout/mod.rs +969 -0
  82. package/vendor/blitz-dom/src/layout/paint_tree.rs +462 -0
  83. package/vendor/blitz-dom/src/layout/replaced.rs +439 -0
  84. package/vendor/blitz-dom/src/layout/table.rs +967 -0
  85. package/vendor/blitz-dom/src/layout/text_transform.rs +979 -0
  86. package/vendor/blitz-dom/src/layout/writing_mode.rs +437 -0
  87. package/vendor/blitz-dom/src/lib.rs +160 -0
  88. package/vendor/blitz-dom/src/mutator.rs +1818 -0
  89. package/vendor/blitz-dom/src/net.rs +649 -0
  90. package/vendor/blitz-dom/src/node/attributes.rs +60 -0
  91. package/vendor/blitz-dom/src/node/custom_widget.rs +178 -0
  92. package/vendor/blitz-dom/src/node/element.rs +1106 -0
  93. package/vendor/blitz-dom/src/node/mod.rs +30 -0
  94. package/vendor/blitz-dom/src/node/node.rs +2036 -0
  95. package/vendor/blitz-dom/src/node/scrollbar.rs +237 -0
  96. package/vendor/blitz-dom/src/node/serialize.rs +225 -0
  97. package/vendor/blitz-dom/src/node/stylo_data.rs +142 -0
  98. package/vendor/blitz-dom/src/node/svg.rs +265 -0
  99. package/vendor/blitz-dom/src/node/text.rs +804 -0
  100. package/vendor/blitz-dom/src/query_selector.rs +275 -0
  101. package/vendor/blitz-dom/src/resolve.rs +474 -0
  102. package/vendor/blitz-dom/src/resolved_style.rs +797 -0
  103. package/vendor/blitz-dom/src/scrolling.rs +780 -0
  104. package/vendor/blitz-dom/src/selection.rs +122 -0
  105. package/vendor/blitz-dom/src/stylo.rs +1518 -0
  106. package/vendor/blitz-dom/src/stylo_device.rs +88 -0
  107. package/vendor/blitz-dom/src/stylo_to_cursor_icon.rs +49 -0
  108. package/vendor/blitz-dom/src/stylo_to_kurbo.rs +129 -0
  109. package/vendor/blitz-dom/src/stylo_to_parley.rs +655 -0
  110. package/vendor/blitz-dom/src/traversal.rs +600 -0
  111. package/vendor/blitz-dom/src/tree.rs +136 -0
  112. package/vendor/blitz-dom/src/url.rs +63 -0
  113. package/vendor/blitz-dom/src/util.rs +256 -0
  114. package/wasm/blitz_pdf_bg.wasm +0 -0
@@ -0,0 +1,206 @@
1
+ use blitz_traits::node_id::NodeId;
2
+ use parley::layout::PositionedLayoutItem;
3
+
4
+ use crate::BaseDocument;
5
+ use crate::layout::TaffyDebugTree;
6
+
7
+ impl BaseDocument {
8
+ pub fn print_taffy_tree(&self) {
9
+ let root_id = crate::taffy_node_id(self.root_element().id);
10
+ taffy::print_tree(&TaffyDebugTree(self), root_id);
11
+ for &node_id in &self.sub_document_nodes {
12
+ if let Some(sub_doc) = self.nodes[node_id].subdoc() {
13
+ println!("\n=== Subdocument (node {node_id:?}) ===");
14
+ sub_doc.inner().print_taffy_tree();
15
+ }
16
+ }
17
+ }
18
+
19
+ pub fn debug_log_node(&self, node_id: NodeId) {
20
+ let node = &self.nodes[node_id];
21
+
22
+ #[cfg(feature = "tracing")]
23
+ {
24
+ tracing::info!("Layout: {:?}", node.final_layout());
25
+ tracing::info!("Display: {:?}", node.taffy_display());
26
+ }
27
+
28
+ println!("\nNode {} {}", node.id, node.node_debug_str());
29
+
30
+ println!("Attrs:");
31
+
32
+ for attr in node.attrs().into_iter().flatten() {
33
+ println!(" {}: {}", attr.name.local, attr.value);
34
+ }
35
+
36
+ if node.flags.is_inline_root() {
37
+ let inline_layout = &node
38
+ .data
39
+ .downcast_element()
40
+ .unwrap()
41
+ .inline_layout_data
42
+ .as_ref()
43
+ .unwrap();
44
+
45
+ println!(
46
+ "Size: {}x{}",
47
+ inline_layout.layout.width(),
48
+ inline_layout.layout.height()
49
+ );
50
+ println!("Text content: {:?}", inline_layout.text);
51
+ println!("Inline Boxes:");
52
+ for ibox in inline_layout.layout.inline_boxes() {
53
+ print!("(id: {}) ", ibox.id);
54
+ }
55
+ println!();
56
+ println!("Lines:");
57
+ for (i, line) in inline_layout.layout.lines().enumerate() {
58
+ let metrics = line.metrics();
59
+ let x = metrics.inline_min_coord;
60
+ let y = metrics.block_min_coord;
61
+ let w = metrics.inline_max_coord - metrics.inline_min_coord;
62
+ let h = metrics.block_max_coord - metrics.block_min_coord;
63
+ println!("Line {i}: x:{x} y:{y} width:{w} height:{h}");
64
+ for item in line.items() {
65
+ print!(" ");
66
+ match item {
67
+ PositionedLayoutItem::GlyphRun(run) => {
68
+ print!(
69
+ "RUN (x: {}, w: {}) ",
70
+ run.offset().round(),
71
+ run.run().advance()
72
+ )
73
+ }
74
+ PositionedLayoutItem::InlineBox(ibox) => print!(
75
+ "BOX {:?} (id: {} x: {} y: {} w: {}, h: {})",
76
+ ibox.kind,
77
+ ibox.id,
78
+ ibox.x.round(),
79
+ ibox.y.round(),
80
+ ibox.width.round(),
81
+ ibox.height.round()
82
+ ),
83
+ }
84
+ println!();
85
+ }
86
+ }
87
+ }
88
+
89
+ let layout = node.final_layout();
90
+ println!("Layout:");
91
+ println!(
92
+ " x: {x} y: {y} w: {width} h: {height} overflow: l:{ol} r:{or} t:{ot} b:{ob}",
93
+ x = layout.location.x,
94
+ y = layout.location.y,
95
+ width = layout.size.width,
96
+ height = layout.size.height,
97
+ ol = layout.scrollable_overflow_rect.left,
98
+ or = layout.scrollable_overflow_rect.right,
99
+ ot = layout.scrollable_overflow_rect.top,
100
+ ob = layout.scrollable_overflow_rect.bottom,
101
+ );
102
+ println!(
103
+ " border: l:{l} r:{r} t:{t} b:{b}",
104
+ l = layout.border.left,
105
+ r = layout.border.right,
106
+ t = layout.border.top,
107
+ b = layout.border.bottom,
108
+ );
109
+ println!(
110
+ " padding: l:{l} r:{r} t:{t} b:{b}",
111
+ l = layout.padding.left,
112
+ r = layout.padding.right,
113
+ t = layout.padding.top,
114
+ b = layout.padding.bottom,
115
+ );
116
+ println!(
117
+ " margin: l:{l} r:{r} t:{t} b:{b}",
118
+ l = layout.margin.left,
119
+ r = layout.margin.right,
120
+ t = layout.margin.top,
121
+ b = layout.margin.bottom,
122
+ );
123
+ println!("Parent: {:?}", node.parent);
124
+
125
+ let children: Vec<_> = node
126
+ .children
127
+ .iter()
128
+ .map(|id| &self.nodes[*id])
129
+ .map(|node| (node.id, node.order(), node.node_debug_str()))
130
+ .collect();
131
+ println!("Children: {children:?}");
132
+
133
+ println!("Layout Parent: {:?}", node.layout_parent.get());
134
+
135
+ let layout_children: Option<Vec<_>> = node.layout_children.borrow().as_ref().map(|lc| {
136
+ lc.iter()
137
+ .map(|id| &self.nodes[*id])
138
+ .map(|node| (node.id, node.order(), node.node_debug_str()))
139
+ .collect()
140
+ });
141
+ if let Some(layout_children) = layout_children {
142
+ println!("Layout Children: {layout_children:?}");
143
+ }
144
+
145
+ let paint_children: Option<Vec<_>> = node.paint_children.borrow().as_ref().map(|lc| {
146
+ lc.iter()
147
+ .map(|id| &self.nodes[*id])
148
+ .map(|node| (node.id, node.order(), node.node_debug_str()))
149
+ .collect()
150
+ });
151
+ if let Some(paint_children) = paint_children {
152
+ println!("Paint Children: {paint_children:?}");
153
+ }
154
+ // taffy::print_tree(&self.dom, node_id.into());
155
+ }
156
+ }
157
+
158
+ #[cfg(test)]
159
+ mod tests {
160
+ use super::*;
161
+ use crate::{DocumentConfig, qual_name, taffy_node_id};
162
+ use blitz_traits::shell::{ColorScheme, Viewport};
163
+ use taffy::{PrintTree, TraversePartialTree};
164
+
165
+ #[test]
166
+ fn prints_tree_from_shared_document_reference() {
167
+ let mut doc = BaseDocument::new(DocumentConfig {
168
+ viewport: Some(Viewport::new(400, 300, 1.0, ColorScheme::Light)),
169
+ ..Default::default()
170
+ });
171
+ let root = doc.root_node().id;
172
+ let mut mutator = doc.mutate();
173
+ let html = mutator.create_element(qual_name!("html", html), vec![]);
174
+ let body = mutator.create_element(qual_name!("body", html), vec![]);
175
+ let child = mutator.create_element(qual_name!("div", html), vec![]);
176
+ mutator.set_style_property(child, "height", "20px");
177
+ mutator.append_children(body, &[child]);
178
+ mutator.append_children(html, &[body]);
179
+ mutator.append_children(root, &[html]);
180
+ drop(mutator);
181
+ doc.resolve(0.0);
182
+
183
+ let doc: &BaseDocument = &doc;
184
+ doc.print_taffy_tree();
185
+
186
+ let tree = TaffyDebugTree(doc);
187
+ let body_id = taffy_node_id(body);
188
+ let child_id = taffy_node_id(child);
189
+ assert_eq!(tree.child_count(body_id), 1);
190
+ assert_eq!(tree.get_child_id(body_id, 0), child_id);
191
+ assert_eq!(tree.child_ids(body_id).collect::<Vec<_>>(), [child_id]);
192
+ assert_eq!(tree.child_count(child_id), 0);
193
+ assert_eq!(tree.child_ids(child_id).count(), 0);
194
+ assert_eq!(tree.get_final_layout(child_id).size.height, 20.0);
195
+ assert_eq!(
196
+ tree.get_final_layout(child_id),
197
+ *doc.nodes[child].final_layout()
198
+ );
199
+
200
+ let mut output = Vec::new();
201
+ taffy::write_tree(&mut output, &tree, taffy_node_id(html)).unwrap();
202
+ let output = String::from_utf8(output).unwrap();
203
+ assert_eq!(output.lines().count(), 4);
204
+ assert!(output.contains("BLOCK"));
205
+ }
206
+ }