pagyra-js 0.0.1

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 (540) hide show
  1. package/.eslintrc.json +30 -0
  2. package/CHANGELOG.md +13 -0
  3. package/README.md +275 -0
  4. package/UA_Styles_Chromium.md +93 -0
  5. package/_ext/woff2_conversion/brotli-decode.d.ts +139 -0
  6. package/_ext/woff2_conversion/brotli-encode.d.ts +129 -0
  7. package/_ext/woff2_conversion/brotli-port.d.ts +12 -0
  8. package/_ext/woff2_conversion/brotli-shared-dictionary.d.ts +25 -0
  9. package/_ext/woff2_conversion/brotli-types.d.ts +15 -0
  10. package/_ext/woff2_conversion/woff2-common.d.ts +37 -0
  11. package/_ext/woff2_conversion/woff2-decode.d.ts +32 -0
  12. package/_ext/woff2_conversion/woff2-encode.d.ts +31 -0
  13. package/_ext/woff2_conversion/woff2-output.d.ts +39 -0
  14. package/_ext/woff2_original_cpp/brotli/brotli.c +1559 -0
  15. package/_ext/woff2_original_cpp/brotli/brotli.md +116 -0
  16. package/_ext/woff2_original_cpp/brotli/decode.h +409 -0
  17. package/_ext/woff2_original_cpp/brotli/encode.h +505 -0
  18. package/_ext/woff2_original_cpp/brotli/port.h +302 -0
  19. package/_ext/woff2_original_cpp/brotli/shared_dictionary.h +100 -0
  20. package/_ext/woff2_original_cpp/brotli/types.h +83 -0
  21. package/_ext/woff2_original_cpp/cmake/FindBrotliDec.cmake +35 -0
  22. package/_ext/woff2_original_cpp/cmake/FindBrotliEnc.cmake +35 -0
  23. package/_ext/woff2_original_cpp/include/woff2/decode.h +36 -0
  24. package/_ext/woff2_original_cpp/include/woff2/encode.h +43 -0
  25. package/_ext/woff2_original_cpp/include/woff2/output.h +86 -0
  26. package/_ext/woff2_original_cpp/src/buffer.h +164 -0
  27. package/_ext/woff2_original_cpp/src/convert_woff2ttf_fuzzer.cc +13 -0
  28. package/_ext/woff2_original_cpp/src/convert_woff2ttf_fuzzer_new_entry.cc +12 -0
  29. package/_ext/woff2_original_cpp/src/file.h +30 -0
  30. package/_ext/woff2_original_cpp/src/font.cc +400 -0
  31. package/_ext/woff2_original_cpp/src/font.h +105 -0
  32. package/_ext/woff2_original_cpp/src/glyph.cc +383 -0
  33. package/_ext/woff2_original_cpp/src/glyph.h +71 -0
  34. package/_ext/woff2_original_cpp/src/normalize.cc +314 -0
  35. package/_ext/woff2_original_cpp/src/normalize.h +39 -0
  36. package/_ext/woff2_original_cpp/src/port.h +66 -0
  37. package/_ext/woff2_original_cpp/src/round.h +27 -0
  38. package/_ext/woff2_original_cpp/src/store_bytes.h +55 -0
  39. package/_ext/woff2_original_cpp/src/table_tags.cc +82 -0
  40. package/_ext/woff2_original_cpp/src/table_tags.h +30 -0
  41. package/_ext/woff2_original_cpp/src/transform.cc +430 -0
  42. package/_ext/woff2_original_cpp/src/transform.h +26 -0
  43. package/_ext/woff2_original_cpp/src/variable_length.cc +129 -0
  44. package/_ext/woff2_original_cpp/src/variable_length.h +30 -0
  45. package/_ext/woff2_original_cpp/src/woff2_common.cc +50 -0
  46. package/_ext/woff2_original_cpp/src/woff2_common.h +64 -0
  47. package/_ext/woff2_original_cpp/src/woff2_compress.cc +43 -0
  48. package/_ext/woff2_original_cpp/src/woff2_dec.cc +1398 -0
  49. package/_ext/woff2_original_cpp/src/woff2_decompress.cc +41 -0
  50. package/_ext/woff2_original_cpp/src/woff2_enc.cc +458 -0
  51. package/_ext/woff2_original_cpp/src/woff2_info.cc +142 -0
  52. package/_ext/woff2_original_cpp/src/woff2_out.cc +63 -0
  53. package/assets/fonts/ttf/arimo/Arimo-Bold.ttf +0 -0
  54. package/assets/fonts/ttf/arimo/Arimo-BoldItalic.ttf +0 -0
  55. package/assets/fonts/ttf/arimo/Arimo-Italic.ttf +0 -0
  56. package/assets/fonts/ttf/arimo/Arimo-Regular.ttf +0 -0
  57. package/assets/fonts/ttf/cinzeldecorative/CinzelDecorative-Black.ttf +0 -0
  58. package/assets/fonts/ttf/cinzeldecorative/CinzelDecorative-Bold.ttf +0 -0
  59. package/assets/fonts/ttf/cinzeldecorative/CinzelDecorative-Regular.ttf +0 -0
  60. package/assets/fonts/ttf/dejavu/DejaVuSans.ttf +0 -0
  61. package/assets/fonts/ttf/firecode/FiraCode-Bold.ttf +0 -0
  62. package/assets/fonts/ttf/firecode/FiraCode-Light.ttf +0 -0
  63. package/assets/fonts/ttf/firecode/FiraCode-Medium.ttf +0 -0
  64. package/assets/fonts/ttf/firecode/FiraCode-Regular.ttf +0 -0
  65. package/assets/fonts/ttf/firecode/FiraCode-SemiBold.ttf +0 -0
  66. package/assets/fonts/ttf/notoemoji/NotoEmoji-Bold.ttf +0 -0
  67. package/assets/fonts/ttf/notoemoji/NotoEmoji-Light.ttf +0 -0
  68. package/assets/fonts/ttf/notoemoji/NotoEmoji-Medium.ttf +0 -0
  69. package/assets/fonts/ttf/notoemoji/NotoEmoji-Regular.ttf +0 -0
  70. package/assets/fonts/ttf/notoemoji/NotoEmoji-SemiBold.ttf +0 -0
  71. package/assets/fonts/ttf/notosans/NotoSans-Regular.ttf +0 -0
  72. package/assets/fonts/ttf/roboto/Roboto-Bold.ttf +0 -0
  73. package/assets/fonts/ttf/roboto/Roboto-BoldItalic.ttf +0 -0
  74. package/assets/fonts/ttf/roboto/Roboto-Italic.ttf +0 -0
  75. package/assets/fonts/ttf/roboto/Roboto-Regular.ttf +0 -0
  76. package/assets/fonts/ttf/stixtwomath/STIXTwoMath-Regular.ttf +0 -0
  77. package/assets/fonts/ttf/tinos/Tinos-Bold.ttf +0 -0
  78. package/assets/fonts/ttf/tinos/Tinos-BoldItalic.ttf +0 -0
  79. package/assets/fonts/ttf/tinos/Tinos-Italic.ttf +0 -0
  80. package/assets/fonts/ttf/tinos/Tinos-Regular.ttf +0 -0
  81. package/assets/fonts/woff/lato/lato-latin-400-italic.woff +0 -0
  82. package/assets/fonts/woff/lato/lato-latin-400-normal.woff +0 -0
  83. package/assets/fonts/woff/lato/lato-latin-700-italic.woff +0 -0
  84. package/assets/fonts/woff/lato/lato-latin-700-normal.woff +0 -0
  85. package/assets/fonts/woff2/caveat/Caveat-Bold.woff2 +0 -0
  86. package/assets/fonts/woff2/caveat/Caveat-Regular.woff2 +0 -0
  87. package/assets/fonts/woff2/lato/lato-latin-400-italic.woff2 +0 -0
  88. package/assets/fonts/woff2/lato/lato-latin-400-normal.woff2 +0 -0
  89. package/assets/fonts/woff2/lato/lato-latin-700-italic.woff2 +0 -0
  90. package/assets/fonts/woff2/lato/lato-latin-700-normal.woff2 +0 -0
  91. package/docs/AGENTS.md +288 -0
  92. package/docs/BACKGROUND-REPEAT-IMPLEMENTATION.md +127 -0
  93. package/docs/BACKGROUND-REPEAT-REFERENCE.md +127 -0
  94. package/docs/BACKGROUND-REPEAT-SPACE-ROUND.md +164 -0
  95. package/docs/css-properties-support.md +256 -0
  96. package/docs/src_modules_table.md +172 -0
  97. package/docs/text-overlap-fix.md +85 -0
  98. package/docs/text-overlap-investigation.md +27 -0
  99. package/eslint.config.js +36 -0
  100. package/glyph_measure.htm +1458 -0
  101. package/package.json +50 -0
  102. package/playground/browser-entry.ts +2 -0
  103. package/playground/exports/background-text-debug.pdf +0 -0
  104. package/playground/public/app.js +875 -0
  105. package/playground/public/assets/1.webp +0 -0
  106. package/playground/public/examples/accents-test.html +24 -0
  107. package/playground/public/examples/advanced-selectors-demo.html +118 -0
  108. package/playground/public/examples/background-advanced-showcase.html +82 -0
  109. package/playground/public/examples/background-clip-text.html +36 -0
  110. package/playground/public/examples/background-origin-showcase.html +137 -0
  111. package/playground/public/examples/background-position-showcase.html +83 -0
  112. package/playground/public/examples/background-repeat-showcase.html +83 -0
  113. package/playground/public/examples/background-repeat-space-round.html +348 -0
  114. package/playground/public/examples/background-size-showcase.html +82 -0
  115. package/playground/public/examples/background-text-debug.html +18 -0
  116. package/playground/public/examples/baseline-test.html +24 -0
  117. package/playground/public/examples/bold-showcase.html +150 -0
  118. package/playground/public/examples/bold-strike-example.html +12 -0
  119. package/playground/public/examples/border-collapse-test.html +23 -0
  120. package/playground/public/examples/centered-shadow-div.html +72 -0
  121. package/playground/public/examples/css-variables.html +50 -0
  122. package/playground/public/examples/debug-accents.html +11 -0
  123. package/playground/public/examples/debug-text-overlap.html +46 -0
  124. package/playground/public/examples/flex-gap-column.html +130 -0
  125. package/playground/public/examples/flex-gap-row.html +137 -0
  126. package/playground/public/examples/flex-padding-test.html +29 -0
  127. package/playground/public/examples/flexbox-text-test.html +193 -0
  128. package/playground/public/examples/fonts-demo.html +126 -0
  129. package/playground/public/examples/footer-example.html +4 -0
  130. package/playground/public/examples/gradient-text.html +54 -0
  131. package/playground/public/examples/grid-gap-demo.html +156 -0
  132. package/playground/public/examples/header-example.html +4 -0
  133. package/playground/public/examples/header-footer-example.html +27 -0
  134. package/playground/public/examples/image-showcase.html +33 -0
  135. package/playground/public/examples/justify-text.html +22 -0
  136. package/playground/public/examples/linear-gradient-example.html +38 -0
  137. package/playground/public/examples/lorem-span.html +14 -0
  138. package/playground/public/examples/margin-block-showcase.html +21 -0
  139. package/playground/public/examples/margin-inline-showcase.html +21 -0
  140. package/playground/public/examples/monthly-summary.html +95 -0
  141. package/playground/public/examples/multi-page-lorem.html +190 -0
  142. package/playground/public/examples/opacity-debug.html +39 -0
  143. package/playground/public/examples/opacity-example.html +70 -0
  144. package/playground/public/examples/png-image-example.html +13 -0
  145. package/playground/public/examples/red-rectangle.html +18 -0
  146. package/playground/public/examples/repro.html +24 -0
  147. package/playground/public/examples/rounded-borders-test.html +24 -0
  148. package/playground/public/examples/simple-list.html +89 -0
  149. package/playground/public/examples/simple-svg.html +37 -0
  150. package/playground/public/examples/simple-table.html +52 -0
  151. package/playground/public/examples/skew-div.html +138 -0
  152. package/playground/public/examples/skew-text.html +21 -0
  153. package/playground/public/examples/starter-report.css +51 -0
  154. package/playground/public/examples/starter-report.html +23 -0
  155. package/playground/public/examples/svg-aspect-ratio-showcase.html +116 -0
  156. package/playground/public/examples/svg-gradients-linear.html +28 -0
  157. package/playground/public/examples/svg-gradients-radial.html +29 -0
  158. package/playground/public/examples/svg-gradients-showcase.html +66 -0
  159. package/playground/public/examples/svg-image-path-test.html +43 -0
  160. package/playground/public/examples/svg-images-clipping.html +27 -0
  161. package/playground/public/examples/svg-path-gallery.html +118 -0
  162. package/playground/public/examples/svg-radial-transform-demo.html +78 -0
  163. package/playground/public/examples/svg-transform-stack.html +103 -0
  164. package/playground/public/examples/svg-transforms-demo.html +127 -0
  165. package/playground/public/examples/table-merge-test.html +34 -0
  166. package/playground/public/examples/text-decoration-showcase.html +138 -0
  167. package/playground/public/examples/text-indent-showcase.html +137 -0
  168. package/playground/public/examples/text-shadow-example.html +29 -0
  169. package/playground/public/examples/very-complex-css.html +293 -0
  170. package/playground/public/examples/webp-example.html +13 -0
  171. package/playground/public/examples/z-index-demo.html +93 -0
  172. package/playground/public/examples.json +240 -0
  173. package/playground/public/images/dice.png +0 -0
  174. package/playground/public/images/duck.jpg +0 -0
  175. package/playground/public/index.html +149 -0
  176. package/playground/public/mode.js +1 -0
  177. package/playground/public/styles.css +382 -0
  178. package/playground/public/tmp-h2-debug.html +33 -0
  179. package/playground/public/tmp-italic-debug.html +32 -0
  180. package/playground/public/vendor/codemirror/codemirror.min.css +1 -0
  181. package/playground/public/vendor/codemirror/codemirror.min.js +1 -0
  182. package/playground/public/vendor/codemirror/css.min.js +1 -0
  183. package/playground/public/vendor/codemirror/darcula.min.css +1 -0
  184. package/playground/public/vendor/codemirror/htmlmixed.min.js +1 -0
  185. package/playground/public/vendor/codemirror/javascript.min.js +1 -0
  186. package/playground/public/vendor/codemirror/xml.min.js +1 -0
  187. package/playground/public/vendor/pagyra-playground-browser.js +165966 -0
  188. package/playground/public/vendor/pagyra-playground-browser.js.map +7 -0
  189. package/playground/server.d.ts +1 -0
  190. package/playground/server.js +68 -0
  191. package/playground/server.ts +128 -0
  192. package/scripts/browser-build.ts +101 -0
  193. package/scripts/build-browser-bundle.ts +52 -0
  194. package/scripts/glyph-comparison/simulate.ts +744 -0
  195. package/scripts/playground-browser-server.ts +57 -0
  196. package/scripts/probe-roboto.ts +6 -0
  197. package/scripts/render-playground-example.ts +121 -0
  198. package/scripts/run-glyph-atlas-tuner-runner.mjs +113 -0
  199. package/scripts/run-glyph-atlas-tuner.ts +141 -0
  200. package/scripts/top-ts-files.ps1 +39 -0
  201. package/scripts/top-ts-files.sh +37 -0
  202. package/scripts/woff2_info.ps1 +132 -0
  203. package/src/browser-entry.ts +14 -0
  204. package/src/compression/adler32.ts +45 -0
  205. package/src/compression/brotli/brotli.ts +463 -0
  206. package/src/compression/brotli/index.ts +15 -0
  207. package/src/compression/brotli/transform.ts +184 -0
  208. package/src/compression/brotli/types.ts +58 -0
  209. package/src/compression/brotli/utils.ts +157 -0
  210. package/src/compression/brotli/vendor/bit_reader.js +124 -0
  211. package/src/compression/brotli/vendor/context.js +250 -0
  212. package/src/compression/brotli/vendor/decode.d.ts +2 -0
  213. package/src/compression/brotli/vendor/decode.js +938 -0
  214. package/src/compression/brotli/vendor/dictionary-data.js +9469 -0
  215. package/src/compression/brotli/vendor/dictionary.js +36 -0
  216. package/src/compression/brotli/vendor/huffman.js +123 -0
  217. package/src/compression/brotli/vendor/package.json +3 -0
  218. package/src/compression/brotli/vendor/prefix.js +60 -0
  219. package/src/compression/brotli/vendor/streams.js +31 -0
  220. package/src/compression/brotli/vendor/transform.js +247 -0
  221. package/src/compression/brotli/vendor-decode.d.ts +4 -0
  222. package/src/compression/brotli/woff2-glyf-transform.ts +623 -0
  223. package/src/compression/decompress.ts +16 -0
  224. package/src/compression/deflate.ts +295 -0
  225. package/src/compression/index.ts +4 -0
  226. package/src/compression/types.ts +26 -0
  227. package/src/compression/utils.ts +107 -0
  228. package/src/core.ts +18 -0
  229. package/src/css/apply-declarations.ts +86 -0
  230. package/src/css/background-types.ts +65 -0
  231. package/src/css/browser-defaults.ts +16 -0
  232. package/src/css/clip-path-types.ts +13 -0
  233. package/src/css/compute-style.ts +494 -0
  234. package/src/css/css-unit-resolver.ts +65 -0
  235. package/src/css/custom-properties.ts +215 -0
  236. package/src/css/enums.ts +127 -0
  237. package/src/css/font-face-parser.ts +233 -0
  238. package/src/css/font-weight.ts +65 -0
  239. package/src/css/inline-style-parser.ts +27 -0
  240. package/src/css/layout-property-resolver.ts +75 -0
  241. package/src/css/length.ts +141 -0
  242. package/src/css/line-height.ts +96 -0
  243. package/src/css/named-colors.ts +150 -0
  244. package/src/css/parsers/background-parser-extended.ts +111 -0
  245. package/src/css/parsers/background-parser.ts +456 -0
  246. package/src/css/parsers/border-block-parser.ts +26 -0
  247. package/src/css/parsers/border-inline-parser.ts +26 -0
  248. package/src/css/parsers/border-parser-extended.ts +256 -0
  249. package/src/css/parsers/border-parser.ts +175 -0
  250. package/src/css/parsers/box-shadow-parser.ts +106 -0
  251. package/src/css/parsers/clip-path-parser.ts +92 -0
  252. package/src/css/parsers/color-parser.ts +14 -0
  253. package/src/css/parsers/dimension-parser.ts +117 -0
  254. package/src/css/parsers/display-flex-parser.ts +59 -0
  255. package/src/css/parsers/flex-parser.ts +144 -0
  256. package/src/css/parsers/font-parser.ts +40 -0
  257. package/src/css/parsers/gradient-parser.ts +366 -0
  258. package/src/css/parsers/grid-parser-extended.ts +55 -0
  259. package/src/css/parsers/grid-parser.ts +218 -0
  260. package/src/css/parsers/length-parser.ts +95 -0
  261. package/src/css/parsers/list-style-parser.ts +39 -0
  262. package/src/css/parsers/margin-block-parser.ts +12 -0
  263. package/src/css/parsers/margin-inline-parser.ts +12 -0
  264. package/src/css/parsers/margin-parser.ts +30 -0
  265. package/src/css/parsers/opacity-parser.ts +32 -0
  266. package/src/css/parsers/overflow-wrap-parser.ts +38 -0
  267. package/src/css/parsers/padding-block-parser.ts +12 -0
  268. package/src/css/parsers/padding-inline-parser.ts +12 -0
  269. package/src/css/parsers/padding-parser.ts +30 -0
  270. package/src/css/parsers/position-parser.ts +75 -0
  271. package/src/css/parsers/register-parsers.ts +302 -0
  272. package/src/css/parsers/registry.ts +18 -0
  273. package/src/css/parsers/text-parser-extended.ts +144 -0
  274. package/src/css/parsers/text-parser.ts +25 -0
  275. package/src/css/parsers/text-shadow-parser.ts +94 -0
  276. package/src/css/properties/box-model.ts +82 -0
  277. package/src/css/properties/flexbox.ts +44 -0
  278. package/src/css/properties/gap.ts +14 -0
  279. package/src/css/properties/grid.ts +94 -0
  280. package/src/css/properties/layout.ts +59 -0
  281. package/src/css/properties/misc.ts +44 -0
  282. package/src/css/properties/typography.ts +71 -0
  283. package/src/css/properties/visual.ts +68 -0
  284. package/src/css/selectors/matcher.ts +219 -0
  285. package/src/css/selectors/parser.ts +163 -0
  286. package/src/css/selectors/simple-key.ts +31 -0
  287. package/src/css/selectors/specificity.ts +41 -0
  288. package/src/css/selectors/types.ts +31 -0
  289. package/src/css/shorthands/border-shorthand.ts +68 -0
  290. package/src/css/shorthands/box-shorthand.ts +33 -0
  291. package/src/css/style-inheritance.ts +50 -0
  292. package/src/css/style.ts +402 -0
  293. package/src/css/ua-defaults/base-defaults.ts +266 -0
  294. package/src/css/ua-defaults/browser-defaults.ts +134 -0
  295. package/src/css/ua-defaults/element-defaults.ts +374 -0
  296. package/src/css/ua-defaults/types.ts +43 -0
  297. package/src/css/unit-conversion.ts +24 -0
  298. package/src/css/utils.ts +108 -0
  299. package/src/css/viewport.ts +17 -0
  300. package/src/debug/audit.ts +20 -0
  301. package/src/debug/ids.ts +13 -0
  302. package/src/debug/log.js +28 -0
  303. package/src/debug/log.ts +52 -0
  304. package/src/debug/tree.ts +57 -0
  305. package/src/dom/node.ts +133 -0
  306. package/src/environment/browser-environment.ts +78 -0
  307. package/src/environment/environment.ts +35 -0
  308. package/src/environment/global.ts +13 -0
  309. package/src/environment/node-environment.browser.ts +28 -0
  310. package/src/environment/node-environment.ts +64 -0
  311. package/src/fonts/detector.ts +28 -0
  312. package/src/fonts/engines/ttf-engine.ts +28 -0
  313. package/src/fonts/engines/woff-engine.ts +38 -0
  314. package/src/fonts/engines/woff2-engine.ts +41 -0
  315. package/src/fonts/extractors/metrics-extractor.ts +362 -0
  316. package/src/fonts/font-registry-resolver.ts +132 -0
  317. package/src/fonts/index.ts +3 -0
  318. package/src/fonts/orchestrator.ts +92 -0
  319. package/src/fonts/parsers/base-parser.ts +23 -0
  320. package/src/fonts/types.ts +85 -0
  321. package/src/fonts/utils/ttf-reconstructor.ts +120 -0
  322. package/src/fonts/woff/decoder.ts +105 -0
  323. package/src/fonts/woff2/buffer.ts +106 -0
  324. package/src/fonts/woff2/decoder.ts +981 -0
  325. package/src/geometry/box.ts +48 -0
  326. package/src/geometry/matrix.ts +59 -0
  327. package/src/html/css/parse-css.ts +85 -0
  328. package/src/html/dom-converter.ts +433 -0
  329. package/src/html/image-converter.ts +200 -0
  330. package/src/html-to-pdf.ts +410 -0
  331. package/src/image/base-decoder.ts +149 -0
  332. package/src/image/image-service.ts +188 -0
  333. package/src/image/jpeg-decoder.ts +73 -0
  334. package/src/image/png-decoder.ts +550 -0
  335. package/src/image/types.ts +20 -0
  336. package/src/image/webp-decoder.ts +242 -0
  337. package/src/image/webp-huffman.ts +218 -0
  338. package/src/image/webp-riff-parser.ts +54 -0
  339. package/src/image/webp-vp8l-decoder.ts +199 -0
  340. package/src/index.ts +35 -0
  341. package/src/layout/context/float-context.ts +62 -0
  342. package/src/layout/context/layout-environment.ts +29 -0
  343. package/src/layout/debug.ts +18 -0
  344. package/src/layout/inline/bounding-box-calculator.ts +132 -0
  345. package/src/layout/inline/font-baseline-calculator.ts +76 -0
  346. package/src/layout/inline/inline-utils.ts +94 -0
  347. package/src/layout/inline/layout.ts +285 -0
  348. package/src/layout/inline/line_breaker.ts +109 -0
  349. package/src/layout/inline/measurement.ts +144 -0
  350. package/src/layout/inline/run-placer.ts +139 -0
  351. package/src/layout/inline/text-alignment.ts +70 -0
  352. package/src/layout/inline/tokenizer.ts +195 -0
  353. package/src/layout/inline/types.ts +76 -0
  354. package/src/layout/pipeline/context-factory.ts +16 -0
  355. package/src/layout/pipeline/default-engine.ts +24 -0
  356. package/src/layout/pipeline/engine.ts +59 -0
  357. package/src/layout/pipeline/layout-tree.ts +13 -0
  358. package/src/layout/pipeline/out-of-flow-manager.ts +73 -0
  359. package/src/layout/pipeline/strategy.ts +12 -0
  360. package/src/layout/pipeline/text-metrics-initializer.ts +13 -0
  361. package/src/layout/strategies/block.ts +236 -0
  362. package/src/layout/strategies/display-none.ts +14 -0
  363. package/src/layout/strategies/fallback.ts +15 -0
  364. package/src/layout/strategies/flex.ts +477 -0
  365. package/src/layout/strategies/fragmentation.ts +17 -0
  366. package/src/layout/strategies/grid.ts +247 -0
  367. package/src/layout/strategies/image.ts +342 -0
  368. package/src/layout/strategies/inline.ts +128 -0
  369. package/src/layout/strategies/table.ts +595 -0
  370. package/src/layout/table/cell_layout.ts +31 -0
  371. package/src/layout/table/diagnostics.ts +19 -0
  372. package/src/layout/text-run.ts +42 -0
  373. package/src/layout/utils/content-measurer.ts +117 -0
  374. package/src/layout/utils/display-utils.ts +24 -0
  375. package/src/layout/utils/floats.ts +98 -0
  376. package/src/layout/utils/gap-calculator.ts +167 -0
  377. package/src/layout/utils/inline-formatter.ts +31 -0
  378. package/src/layout/utils/inline-formatting.ts +9 -0
  379. package/src/layout/utils/margin.ts +140 -0
  380. package/src/layout/utils/node-math.ts +237 -0
  381. package/src/layout/utils/overflow.ts +14 -0
  382. package/src/layout/utils/sizing.ts +12 -0
  383. package/src/layout/utils/text-metrics.ts +361 -0
  384. package/src/logging/debug.ts +58 -0
  385. package/src/pdf/font/base14/widths-courier-bold.ts +159 -0
  386. package/src/pdf/font/base14/widths-courier.ts +159 -0
  387. package/src/pdf/font/base14/widths-helvetica-bold.ts +158 -0
  388. package/src/pdf/font/base14/widths-helvetica.ts +158 -0
  389. package/src/pdf/font/base14/widths-times-bold.ts +158 -0
  390. package/src/pdf/font/base14/widths-times-roman.ts +158 -0
  391. package/src/pdf/font/base14/widths-types.ts +25 -0
  392. package/src/pdf/font/base14-widths.ts +32 -0
  393. package/src/pdf/font/blur.ts +81 -0
  394. package/src/pdf/font/builtin-fonts.browser.ts +262 -0
  395. package/src/pdf/font/builtin-fonts.ts +126 -0
  396. package/src/pdf/font/composite-glyph-parser.ts +242 -0
  397. package/src/pdf/font/embedder.ts +395 -0
  398. package/src/pdf/font/font-config.ts +190 -0
  399. package/src/pdf/font/font-registry.ts +263 -0
  400. package/src/pdf/font/font-subset.ts +258 -0
  401. package/src/pdf/font/glyph-atlas-maxrects.ts +305 -0
  402. package/src/pdf/font/glyph-atlas-tuner.ts +98 -0
  403. package/src/pdf/font/glyph-atlas.ts +226 -0
  404. package/src/pdf/font/glyph-cache.ts +127 -0
  405. package/src/pdf/font/loca-reader.ts +109 -0
  406. package/src/pdf/font/managers/font-resource-manager.ts +73 -0
  407. package/src/pdf/font/managers/subset-resource-manager.ts +164 -0
  408. package/src/pdf/font/rasterizer.ts +270 -0
  409. package/src/pdf/font/resolvers/base-font-mapper.ts +77 -0
  410. package/src/pdf/font/resolvers/family-resolver.ts +33 -0
  411. package/src/pdf/font/resolvers/weight-style-applicator.ts +63 -0
  412. package/src/pdf/font/simple-glyph-parser.ts +289 -0
  413. package/src/pdf/font/to-unicode.ts +109 -0
  414. package/src/pdf/font/transformation-matrix.ts +136 -0
  415. package/src/pdf/font/ttf-cmap.ts +180 -0
  416. package/src/pdf/font/ttf-global-metrics.ts +58 -0
  417. package/src/pdf/font/ttf-glyf.ts +125 -0
  418. package/src/pdf/font/ttf-glyph-metrics.ts +43 -0
  419. package/src/pdf/font/ttf-lite.ts +269 -0
  420. package/src/pdf/font/ttf-table-parser.ts +132 -0
  421. package/src/pdf/font/ttf-table-provider.ts +61 -0
  422. package/src/pdf/font/widths.ts +79 -0
  423. package/src/pdf/font-subset/font-registry.ts +127 -0
  424. package/src/pdf/header-footer-layout.ts +153 -0
  425. package/src/pdf/header-footer-painter.ts +209 -0
  426. package/src/pdf/header-footer-renderer.ts +357 -0
  427. package/src/pdf/header-footer-tokens.ts +55 -0
  428. package/src/pdf/header-footer.ts +25 -0
  429. package/src/pdf/layout-tree-builder.ts +261 -0
  430. package/src/pdf/page-painter.ts +241 -0
  431. package/src/pdf/pagination.ts +155 -0
  432. package/src/pdf/primitives/pdf-builder.ts +378 -0
  433. package/src/pdf/primitives/pdf-bytes.ts +40 -0
  434. package/src/pdf/primitives/pdf-document.ts +108 -0
  435. package/src/pdf/primitives/pdf-reference-manager.ts +47 -0
  436. package/src/pdf/primitives/pdf-resource-registries.ts +255 -0
  437. package/src/pdf/primitives/pdf-serializers.ts +194 -0
  438. package/src/pdf/primitives/pdf-types.ts +73 -0
  439. package/src/pdf/render.ts +210 -0
  440. package/src/pdf/renderer/box-painter.ts +236 -0
  441. package/src/pdf/renderer/page-paint.ts +102 -0
  442. package/src/pdf/renderer/paint-box-shadows.ts +218 -0
  443. package/src/pdf/renderer/radius.ts +58 -0
  444. package/src/pdf/renderers/graphics-state-manager.ts +40 -0
  445. package/src/pdf/renderers/image-renderer.ts +127 -0
  446. package/src/pdf/renderers/radius-utils.ts +80 -0
  447. package/src/pdf/renderers/rectangle-renderer.ts +129 -0
  448. package/src/pdf/renderers/rounded-rect-path.ts +120 -0
  449. package/src/pdf/renderers/shape-renderer.ts +563 -0
  450. package/src/pdf/renderers/shape-utils.ts +194 -0
  451. package/src/pdf/renderers/text-decoration-renderer.ts +313 -0
  452. package/src/pdf/renderers/text-encoder.ts +41 -0
  453. package/src/pdf/renderers/text-font-resolver.ts +75 -0
  454. package/src/pdf/renderers/text-renderer-utils.ts +28 -0
  455. package/src/pdf/renderers/text-renderer.ts +391 -0
  456. package/src/pdf/renderers/text-shadow-renderer.ts +300 -0
  457. package/src/pdf/shading/gradient-service.ts +525 -0
  458. package/src/pdf/shading/index.ts +1 -0
  459. package/src/pdf/stacking/build-stacking-contexts.ts +93 -0
  460. package/src/pdf/stacking/resolve-paint-order.ts +157 -0
  461. package/src/pdf/stacking/types.ts +40 -0
  462. package/src/pdf/svg/aspect-ratio.ts +81 -0
  463. package/src/pdf/svg/coordinate-mapper.ts +81 -0
  464. package/src/pdf/svg/geometry-builder.ts +45 -0
  465. package/src/pdf/svg/render-svg.ts +296 -0
  466. package/src/pdf/svg/shape-renderer.ts +463 -0
  467. package/src/pdf/svg/style-computer.ts +246 -0
  468. package/src/pdf/transform-adapter.ts +26 -0
  469. package/src/pdf/types.ts +377 -0
  470. package/src/pdf/utils/background-layer-resolver.ts +439 -0
  471. package/src/pdf/utils/background-tiles.ts +192 -0
  472. package/src/pdf/utils/border-dashes.ts +109 -0
  473. package/src/pdf/utils/border-radius-utils.ts +86 -0
  474. package/src/pdf/utils/box-dimensions-utils.ts +47 -0
  475. package/src/pdf/utils/clip-path-resolver.ts +50 -0
  476. package/src/pdf/utils/clipping-path-builder.ts +190 -0
  477. package/src/pdf/utils/color-utils.ts +102 -0
  478. package/src/pdf/utils/coordinate-transformer.ts +30 -0
  479. package/src/pdf/utils/drop-shadow-raster.ts +233 -0
  480. package/src/pdf/utils/encoding.ts +98 -0
  481. package/src/pdf/utils/glyph-atlas-registrar.ts +13 -0
  482. package/src/pdf/utils/glyph-run-renderer.ts +129 -0
  483. package/src/pdf/utils/image-command-partitioner.ts +28 -0
  484. package/src/pdf/utils/image-matrix-builder.ts +31 -0
  485. package/src/pdf/utils/image-utils.ts +26 -0
  486. package/src/pdf/utils/list-utils.ts +194 -0
  487. package/src/pdf/utils/node-text-run-factory.ts +202 -0
  488. package/src/pdf/utils/page-resource-registrar.ts +46 -0
  489. package/src/pdf/utils/result-combiner.ts +102 -0
  490. package/src/pdf/utils/shadow-utils.ts +127 -0
  491. package/src/pdf/utils/text-alignment-resolver.ts +76 -0
  492. package/src/pdf/utils/text-decoration-utils.ts +64 -0
  493. package/src/pdf/utils/text-layout-adjuster.ts +185 -0
  494. package/src/pdf/utils/text-utils.ts +193 -0
  495. package/src/pdf/utils/transform-scope-manager.ts +69 -0
  496. package/src/render/offset.ts +170 -0
  497. package/src/shim/empty.ts +2 -0
  498. package/src/shim/fs-empty.ts +5 -0
  499. package/src/shim/url-empty.ts +7 -0
  500. package/src/shim/zlib-empty.ts +9 -0
  501. package/src/style/shorthands/index.ts +19 -0
  502. package/src/style/ua/defaults.ts +69 -0
  503. package/src/svg/index.ts +4 -0
  504. package/src/svg/parser-registry.ts +71 -0
  505. package/src/svg/parser.ts +486 -0
  506. package/src/svg/path-data.ts +515 -0
  507. package/src/svg/types.ts +194 -0
  508. package/src/text/line-breaker.ts +321 -0
  509. package/src/text/text-transform.ts +43 -0
  510. package/src/text/text.ts +33 -0
  511. package/src/transform/css-parser.ts +95 -0
  512. package/src/types/fonts.ts +62 -0
  513. package/src/types/public.ts +19 -0
  514. package/src/units/page-utils.ts +58 -0
  515. package/src/units/units.ts +50 -0
  516. package/src/utils/base64.ts +24 -0
  517. package/test-output.txt +79 -0
  518. package/tests/css/background-parser.spec.ts +14 -0
  519. package/tests/css/clip-path-parser.spec.ts +66 -0
  520. package/tests/environment/path-resolution.spec.ts +104 -0
  521. package/tests/helpers/ai-layout-diagnostics.ts +141 -0
  522. package/tests/helpers/render-utils.ts +52 -0
  523. package/tests/helpers/text-geometry.ts +56 -0
  524. package/tests/layout/custom-properties.test.ts +38 -0
  525. package/tests/layout/gap-calculator.spec.ts +196 -0
  526. package/tests/layout/inline-background-alignment.spec.ts +93 -0
  527. package/tests/layout/inline-fragments.spec.ts +26 -0
  528. package/tests/layout/run-placer-baseline.spec.ts +108 -0
  529. package/tests/pdf/alignments.spec.ts +26 -0
  530. package/tests/pdf/background-clip.spec.ts +57 -0
  531. package/tests/pdf/background-repeat-space-round.spec.ts +35 -0
  532. package/tests/pdf/background-repeat.spec.ts +137 -0
  533. package/tests/pdf/border-radius.spec.ts +151 -0
  534. package/tests/pdf/clip-path.spec.ts +92 -0
  535. package/tests/pdf/radial-gradient.spec.ts +50 -0
  536. package/tests/pdf/svg-stroke-dash.spec.ts +81 -0
  537. package/tests/pdf/text-transform-matrix.spec.ts +43 -0
  538. package/tsconfig.json +17 -0
  539. package/types/fonts.js +10 -0
  540. package/vitest.config.ts +9 -0
@@ -0,0 +1,348 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Background Repeat: Space & Round Modes</title>
7
+ <style>
8
+ body {
9
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
10
+ margin: 20px;
11
+ background: #f5f5f5;
12
+ }
13
+
14
+ h1 {
15
+ color: #2c3e50;
16
+ border-bottom: 3px solid #3498db;
17
+ padding-bottom: 10px;
18
+ }
19
+
20
+ h2 {
21
+ color: #34495e;
22
+ margin-top: 30px;
23
+ }
24
+
25
+ .intro {
26
+ background: white;
27
+ padding: 20px;
28
+ border-radius: 8px;
29
+ margin-bottom: 30px;
30
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
31
+ }
32
+
33
+ .comparison-grid {
34
+ display: grid;
35
+ grid-template-columns: repeat(2, 1fr);
36
+ gap: 20px;
37
+ margin-bottom: 40px;
38
+ }
39
+
40
+ .example-card {
41
+ background: white;
42
+ border-radius: 8px;
43
+ overflow: hidden;
44
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
45
+ }
46
+
47
+ .example-header {
48
+ background: #34495e;
49
+ color: white;
50
+ padding: 12px 20px;
51
+ font-weight: bold;
52
+ }
53
+
54
+ .example-desc {
55
+ padding: 15px 20px;
56
+ background: #ecf0f1;
57
+ font-size: 14px;
58
+ color: #555;
59
+ }
60
+
61
+ .example-box {
62
+ height: 200px;
63
+ margin: 20px;
64
+ border: 3px solid #3498db;
65
+ position: relative;
66
+ border-radius: 4px;
67
+ }
68
+
69
+ /* Space Mode Examples */
70
+ .space-example-1 {
71
+ background-image: url('../images/duck.jpg');
72
+ background-size: 60px 60px;
73
+ background-repeat: space;
74
+ }
75
+
76
+ .space-example-2 {
77
+ background-image: linear-gradient(45deg, #3498db 25%, #2ecc71 25%, #2ecc71 50%, #3498db 50%, #3498db 75%, #2ecc71 75%);
78
+ background-size: 40px 40px;
79
+ background-repeat: space;
80
+ }
81
+
82
+ .space-example-3 {
83
+ background-image: url('../images/duck.jpg');
84
+ background-size: 80px 80px;
85
+ background-repeat: space;
86
+ }
87
+
88
+ /* Round Mode Examples */
89
+ .round-example-1 {
90
+ background-image: url('../images/duck.jpg');
91
+ background-size: 70px 70px;
92
+ background-repeat: round;
93
+ }
94
+
95
+ .round-example-2 {
96
+ background-image: linear-gradient(135deg, #e74c3c 25%, #f39c12 25%, #f39c12 50%, #e74c3c 50%, #e74c3c 75%, #f39c12 75%);
97
+ background-size: 45px 45px;
98
+ background-repeat: round;
99
+ }
100
+
101
+ .round-example-3 {
102
+ background-image: url('../images/duck.jpg');
103
+ background-size: 90px 90px;
104
+ background-repeat: round;
105
+ }
106
+
107
+ /* Comparison Examples */
108
+ .repeat-standard {
109
+ background-image: url('../images/duck.jpg');
110
+ background-size: 60px 60px;
111
+ background-repeat: repeat;
112
+ }
113
+
114
+ .repeat-space {
115
+ background-image: url('../images/duck.jpg');
116
+ background-size: 60px 60px;
117
+ background-repeat: space;
118
+ }
119
+
120
+ .repeat-round {
121
+ background-image: url('../images/duck.jpg');
122
+ background-size: 60px 60px;
123
+ background-repeat: round;
124
+ }
125
+
126
+ .overlay-label {
127
+ position: absolute;
128
+ bottom: 10px;
129
+ right: 10px;
130
+ background: rgba(0,0,0,0.7);
131
+ color: white;
132
+ padding: 8px 15px;
133
+ border-radius: 4px;
134
+ font-size: 12px;
135
+ font-weight: bold;
136
+ }
137
+
138
+ .code-example {
139
+ background: #2c3e50;
140
+ color: #ecf0f1;
141
+ padding: 15px;
142
+ border-radius: 4px;
143
+ font-family: 'Courier New', monospace;
144
+ margin: 15px 20px;
145
+ font-size: 13px;
146
+ overflow-x: auto;
147
+ }
148
+
149
+ .highlight {
150
+ color: #f39c12;
151
+ font-weight: bold;
152
+ }
153
+
154
+ .section-divider {
155
+ height: 2px;
156
+ background: linear-gradient(to right, #3498db, #2ecc71);
157
+ margin: 40px 0;
158
+ }
159
+
160
+ @media print {
161
+ body {
162
+ background: white;
163
+ }
164
+ .example-card {
165
+ page-break-inside: avoid;
166
+ }
167
+ }
168
+ </style>
169
+ </head>
170
+ <body>
171
+ <h1>🎨 Background Repeat: Space & Round Modes</h1>
172
+
173
+ <div class="intro">
174
+ <h3>Advanced Background Tiling</h3>
175
+ <p>
176
+ The <code>space</code> and <code>round</code> values for <code>background-repeat</code>
177
+ provide sophisticated control over how background images tile within their containers.
178
+ </p>
179
+ <ul>
180
+ <li><strong>space:</strong> Tiles are repeated with even spacing between them. The first and last tiles touch the container edges.</li>
181
+ <li><strong>round:</strong> Tiles are scaled (stretched or shrunk) to fit perfectly without gaps or clipping.</li>
182
+ </ul>
183
+ </div>
184
+
185
+ <h2>📐 Space Mode Examples</h2>
186
+ <p>Tiles distributed with even spacing between them:</p>
187
+
188
+ <div class="comparison-grid">
189
+ <div class="example-card">
190
+ <div class="example-header">Space Mode - Photo Pattern</div>
191
+ <div class="example-desc">
192
+ 60×60px tiles with even spacing. Notice how tiles maintain their original size.
193
+ </div>
194
+ <div class="example-box space-example-1">
195
+ <div class="overlay-label">background-repeat: space</div>
196
+ </div>
197
+ <div class="code-example">
198
+ background-size: <span class="highlight">60px 60px</span>;<br>
199
+ background-repeat: <span class="highlight">space</span>;
200
+ </div>
201
+ </div>
202
+
203
+ <div class="example-card">
204
+ <div class="example-header">Space Mode - Gradient Pattern</div>
205
+ <div class="example-desc">
206
+ 40×40px pattern tiles with calculated spacing to fit container perfectly.
207
+ </div>
208
+ <div class="example-box space-example-2">
209
+ <div class="overlay-label">background-repeat: space</div>
210
+ </div>
211
+ <div class="code-example">
212
+ background-size: <span class="highlight">40px 40px</span>;<br>
213
+ background-repeat: <span class="highlight">space</span>;
214
+ </div>
215
+ </div>
216
+
217
+ <div class="example-card">
218
+ <div class="example-header">Space Mode - Larger Tiles</div>
219
+ <div class="example-desc">
220
+ 80×80px tiles. Fewer tiles with wider spacing between them.
221
+ </div>
222
+ <div class="example-box space-example-3">
223
+ <div class="overlay-label">background-repeat: space</div>
224
+ </div>
225
+ <div class="code-example">
226
+ background-size: <span class="highlight">80px 80px</span>;<br>
227
+ background-repeat: <span class="highlight">space</span>;
228
+ </div>
229
+ </div>
230
+ </div>
231
+
232
+ <div class="section-divider"></div>
233
+
234
+ <h2>🔄 Round Mode Examples</h2>
235
+ <p>Tiles scaled to fit perfectly without gaps:</p>
236
+
237
+ <div class="comparison-grid">
238
+ <div class="example-card">
239
+ <div class="example-header">Round Mode - Photo Pattern</div>
240
+ <div class="example-desc">
241
+ 70×70px tiles scaled to fit. Tiles may be slightly larger or smaller than specified.
242
+ </div>
243
+ <div class="example-box round-example-1">
244
+ <div class="overlay-label">background-repeat: round</div>
245
+ </div>
246
+ <div class="code-example">
247
+ background-size: <span class="highlight">70px 70px</span>;<br>
248
+ background-repeat: <span class="highlight">round</span>;
249
+ </div>
250
+ </div>
251
+
252
+ <div class="example-card">
253
+ <div class="example-header">Round Mode - Gradient Pattern</div>
254
+ <div class="example-desc">
255
+ 45×45px pattern tiles stretched/shrunk to fill container edge-to-edge.
256
+ </div>
257
+ <div class="example-box round-example-2">
258
+ <div class="overlay-label">background-repeat: round</div>
259
+ </div>
260
+ <div class="code-example">
261
+ background-size: <span class="highlight">45px 45px</span>;<br>
262
+ background-repeat: <span class="highlight">round</span>;
263
+ </div>
264
+ </div>
265
+
266
+ <div class="example-card">
267
+ <div class="example-header">Round Mode - Larger Tiles</div>
268
+ <div class="example-desc">
269
+ 90×90px tiles scaled down to fit more tiles without clipping.
270
+ </div>
271
+ <div class="example-box round-example-3">
272
+ <div class="overlay-label">background-repeat: round</div>
273
+ </div>
274
+ <div class="code-example">
275
+ background-size: <span class="highlight">90px 90px</span>;<br>
276
+ background-repeat: <span class="highlight">round</span>;
277
+ </div>
278
+ </div>
279
+ </div>
280
+
281
+ <div class="section-divider"></div>
282
+
283
+ <h2>⚖️ Side-by-Side Comparison</h2>
284
+ <p>Compare all three modes with identical 60×60px tiles:</p>
285
+
286
+ <div class="comparison-grid">
287
+ <div class="example-card">
288
+ <div class="example-header">Standard Repeat</div>
289
+ <div class="example-desc">
290
+ Default behavior: tiles repeat, potentially clipping at edges.
291
+ </div>
292
+ <div class="example-box repeat-standard">
293
+ <div class="overlay-label">repeat</div>
294
+ </div>
295
+ </div>
296
+
297
+ <div class="example-card">
298
+ <div class="example-header">Space Mode</div>
299
+ <div class="example-desc">
300
+ Tiles maintain size, distributed with even spacing.
301
+ </div>
302
+ <div class="example-box repeat-space">
303
+ <div class="overlay-label">space</div>
304
+ </div>
305
+ </div>
306
+
307
+ <div class="example-card">
308
+ <div class="example-header">Round Mode</div>
309
+ <div class="example-desc">
310
+ Tiles scaled to fit perfectly, no gaps or clipping.
311
+ </div>
312
+ <div class="example-box repeat-round">
313
+ <div class="overlay-label">round</div>
314
+ </div>
315
+ </div>
316
+ </div>
317
+
318
+ <div class="intro" style="margin-top: 40px;">
319
+ <h3>🎯 Key Differences</h3>
320
+ <table style="width: 100%; border-collapse: collapse;">
321
+ <tr style="background: #ecf0f1;">
322
+ <th style="padding: 10px; text-align: left; border: 1px solid #bdc3c7;">Mode</th>
323
+ <th style="padding: 10px; text-align: left; border: 1px solid #bdc3c7;">Tile Size</th>
324
+ <th style="padding: 10px; text-align: left; border: 1px solid #bdc3c7;">Edge Behavior</th>
325
+ <th style="padding: 10px; text-align: left; border: 1px solid #bdc3c7;">Best Use Case</th>
326
+ </tr>
327
+ <tr>
328
+ <td style="padding: 10px; border: 1px solid #bdc3c7;"><strong>repeat</strong></td>
329
+ <td style="padding: 10px; border: 1px solid #bdc3c7;">Original</td>
330
+ <td style="padding: 10px; border: 1px solid #bdc3c7;">May clip</td>
331
+ <td style="padding: 10px; border: 1px solid #bdc3c7;">Seamless patterns</td>
332
+ </tr>
333
+ <tr style="background: #f9f9f9;">
334
+ <td style="padding: 10px; border: 1px solid #bdc3c7;"><strong>space</strong></td>
335
+ <td style="padding: 10px; border: 1px solid #bdc3c7;">Original</td>
336
+ <td style="padding: 10px; border: 1px solid #bdc3c7;">Never clips</td>
337
+ <td style="padding: 10px; border: 1px solid #bdc3c7;">Distinct elements with spacing</td>
338
+ </tr>
339
+ <tr>
340
+ <td style="padding: 10px; border: 1px solid #bdc3c7;"><strong>round</strong></td>
341
+ <td style="padding: 10px; border: 1px solid #bdc3c7;">Scaled</td>
342
+ <td style="padding: 10px; border: 1px solid #bdc3c7;">Perfect fit</td>
343
+ <td style="padding: 10px; border: 1px solid #bdc3c7;">Flexible patterns, tile effects</td>
344
+ </tr>
345
+ </table>
346
+ </div>
347
+ </body>
348
+ </html>
@@ -0,0 +1,82 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Background Size Examples</title>
7
+ <style>
8
+ body {
9
+ font-family: Arial, sans-serif;
10
+ margin: 20px;
11
+ }
12
+
13
+ .example {
14
+ margin: 20px 0;
15
+ padding: 10px;
16
+ border: 1px solid #ccc;
17
+ }
18
+
19
+ .description {
20
+ color: #555;
21
+ margin-bottom: 12px;
22
+ }
23
+
24
+ .bg-box {
25
+ width: 300px;
26
+ height: 200px;
27
+ border: 2px solid #333;
28
+ margin: 10px 0;
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: center;
32
+ color: white;
33
+ font-weight: bold;
34
+ text-shadow: 1px 1px 2px rgba(0,0,0,0.7);
35
+ background-image: url('../images/duck.jpg');
36
+ background-repeat: no-repeat;
37
+ }
38
+
39
+ .bg-cover {
40
+ background-size: cover;
41
+ }
42
+
43
+ .bg-contain {
44
+ background-size: contain;
45
+ }
46
+
47
+ .bg-auto {
48
+ background-size: auto;
49
+ }
50
+
51
+ .bg-50-percent {
52
+ background-size: 50% 50%;
53
+ }
54
+ </style>
55
+ </head>
56
+ <body>
57
+ <h1>Background Size Examples</h1>
58
+ <p class="description">
59
+ Demonstrates how different <code>background-size</code> values affect an image inside a fixed box.
60
+ </p>
61
+
62
+ <div class="example">
63
+ <h2>Cover</h2>
64
+ <div class="bg-box bg-cover">Cover (fills entire area)</div>
65
+ </div>
66
+
67
+ <div class="example">
68
+ <h2>Contain</h2>
69
+ <div class="bg-box bg-contain">Contain (fits within area)</div>
70
+ </div>
71
+
72
+ <div class="example">
73
+ <h2>Auto</h2>
74
+ <div class="bg-box bg-auto">Auto (original size)</div>
75
+ </div>
76
+
77
+ <div class="example">
78
+ <h2>Percentage Size</h2>
79
+ <div class="bg-box bg-50-percent">50% 50%</div>
80
+ </div>
81
+ </body>
82
+ </html>
@@ -0,0 +1,18 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Background + Text Debug</title>
6
+ <style>
7
+ body { font: 12pt Arial, sans-serif; }
8
+ .highlight { background-color: yellow; padding: 4pt; }
9
+ .box { background-color: lightblue; margin: 10pt; }
10
+ </style>
11
+ </head>
12
+ <body>
13
+ <p>Normal text before. <span class="highlight">Highlighted text here.</span> Normal text after.</p>
14
+ <div class="box">
15
+ <p>This is text inside a div with background.</p>
16
+ </div>
17
+ </body>
18
+ </html>
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <style>
6
+ * {
7
+ margin: 0;
8
+ padding: 0;
9
+ }
10
+ </style>
11
+ </head>
12
+
13
+ <body>
14
+ <div style="
15
+ padding: 2mm 4mm;
16
+ border-radius: 6mm;
17
+ background: linear-gradient(135deg, #7c3aed, #06b6d4);
18
+ color: #fff;
19
+ letter-spacing: .03em;
20
+ font-weight: bold;
21
+ ">HTML→PDF Stress</div>
22
+ </body>
23
+
24
+ </html>
@@ -0,0 +1,150 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <style>
6
+ body {
7
+ font-family: "Times New Roman", serif;
8
+ margin: 32px;
9
+ line-height: 1.4;
10
+ color: #1f1f1f;
11
+ }
12
+
13
+ h1,
14
+ h2 {
15
+ margin-bottom: 0.4em;
16
+ }
17
+
18
+ section {
19
+ margin-bottom: 1.6em;
20
+ }
21
+
22
+ .weights-grid {
23
+ display: grid;
24
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
25
+ gap: 12px;
26
+ margin: 16px 0;
27
+ }
28
+
29
+ .sample {
30
+ border: 1px solid #d0d0d0;
31
+ border-radius: 8px;
32
+ padding: 12px;
33
+ background: #fafafa;
34
+ }
35
+
36
+ .sample span {
37
+ display: block;
38
+ margin-top: 4px;
39
+ font-size: 14px;
40
+ color: #555;
41
+ font-weight: 400;
42
+ }
43
+
44
+ .weight-300 {
45
+ font-weight: 300;
46
+ }
47
+
48
+ .weight-400 {
49
+ font-weight: 400;
50
+ }
51
+
52
+ .weight-500 {
53
+ font-weight: 500;
54
+ }
55
+
56
+ .weight-600 {
57
+ font-weight: 600;
58
+ }
59
+
60
+ .weight-700 {
61
+ font-weight: 700;
62
+ }
63
+
64
+ .weight-800 {
65
+ font-weight: 800;
66
+ }
67
+
68
+ article p {
69
+ margin: 0.6em 0;
70
+ }
71
+ </style>
72
+ </head>
73
+ <body>
74
+ <main>
75
+ <h1>Bold Text Showcase</h1>
76
+ <p>
77
+ This example highlights how Pagyra now respects
78
+ <strong>semantic bold text</strong>, numeric <code>font-weight</code> values,
79
+ and relative keywords such as <em>bolder</em> and <em>lighter</em>.
80
+ </p>
81
+
82
+ <section>
83
+ <h2>Semantic &amp; Relative Weights</h2>
84
+ <article>
85
+ <p>
86
+ Default body copy sits at <span class="weight-400">400 weight</span>.
87
+ Inside this sentence a <strong>strong element</strong> promotes emphasis,
88
+ while <span style="font-weight: bolder">this phrase steps up</span>
89
+ relative to its parent.
90
+ </p>
91
+ <p style="font-weight: 600">
92
+ Parent weight of 600 means <span style="font-weight: lighter">lighter</span>
93
+ will drop a tier, and <span style="font-weight: bolder">bolder</span> rises one tier.
94
+ </p>
95
+ </article>
96
+ </section>
97
+
98
+ <section>
99
+ <h2>Numeric Weight Samples</h2>
100
+ <div class="weights-grid">
101
+ <div class="sample weight-300">
102
+ Weight 300
103
+ <span>Light text for captions</span>
104
+ </div>
105
+ <div class="sample weight-400">
106
+ Weight 400
107
+ <span>Regular paragraph weight</span>
108
+ </div>
109
+ <div class="sample weight-500">
110
+ Weight 500
111
+ <span>Medium emphasis</span>
112
+ </div>
113
+ <div class="sample weight-600">
114
+ Weight 600
115
+ <span>Strong sub-heading</span>
116
+ </div>
117
+ <div class="sample weight-700">
118
+ Weight 700
119
+ <span>Traditional bold</span>
120
+ </div>
121
+ <div class="sample weight-800">
122
+ Weight 800
123
+ <span>Extra bold highlights</span>
124
+ </div>
125
+ </div>
126
+ </section>
127
+
128
+ <section>
129
+ <h2>Report Snippet</h2>
130
+ <p>
131
+ <span class="weight-600">Executive Summary:</span>
132
+ <span>
133
+ Revenue grew 8.2% in Q3 with <strong>retail</strong> outperforming
134
+ wholesale by 3.4% points. Marketing spend remained
135
+ <span style="font-weight: 500">slightly elevated</span> to support
136
+ holiday campaigns.
137
+ </span>
138
+ </p>
139
+ <p>
140
+ <span class="weight-600">Action Items:</span>
141
+ <span>
142
+ Finalize <span style="font-weight: 600">Black Friday</span> pricing,
143
+ shift budget to the <span style="font-weight: bolder">highest ROI</span> ad sets,
144
+ and monitor conversion rates daily.
145
+ </span>
146
+ </p>
147
+ </section>
148
+ </main>
149
+ </body>
150
+ </html>
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Bold and Strike Example</title>
6
+ </head>
7
+ <body>
8
+ <div>
9
+ <p>This is a paragraph with <b>bold text</b> and <s>strikethrough text</s> to demonstrate formatting options.</p>
10
+ </div>
11
+ </body>
12
+ </html>
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Border Collapse Test</title>
6
+ </head>
7
+ <body>
8
+ <table style="width: 100%; border-collapse: collapse; border: 1px solid #000; font-family: 'Times New Roman', serif; font-size: 11pt;">
9
+ <tbody>
10
+ <tr>
11
+ <td style="border: 1px solid #000; padding: 6px;">11/01/2024</td>
12
+ <td style="border: 1px solid #000; padding: 6px;">Casaco Térmico Impermeável</td>
13
+ <td style="border: 1px solid #000; padding: 6px; text-align: center;">120,00</td>
14
+ <td style="border: 1px solid #000; padding: 6px; text-align: right;">648,00</td>
15
+ </tr>
16
+ <tr style="font-weight: bold; background-color: #f0f0f0;">
17
+ <td colspan="3" style="border: 1px solid #000; padding: 8px; text-align: right;">TOTAL DOS DANOS MATERIAIS:</td>
18
+ <td style="border: 1px solid #000; padding: 8px; text-align: right;">1.620,00</td>
19
+ </tr>
20
+ </tbody>
21
+ </table>
22
+ </body>
23
+ </html>