hyper-html-api 0.14.0 → 0.15.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 (415) hide show
  1. package/conformance/MANIFEST.json +2 -2
  2. package/conformance/cases/codec-form-nested.error.json +5 -0
  3. package/conformance/cases/codec-form-nested.html +4 -0
  4. package/conformance/cases/codec-form-nested.meta +6 -0
  5. package/conformance/cases/codec-form-nested.parsed.json +5 -0
  6. package/conformance/cases/codec-form-star.error.json +5 -0
  7. package/conformance/cases/codec-form-star.html +4 -0
  8. package/conformance/cases/codec-form-star.meta +6 -0
  9. package/conformance/cases/codec-form-star.parsed.json +3 -0
  10. package/conformance/cases/codec-form-under-v1.error.json +5 -0
  11. package/conformance/cases/codec-form-under-v1.html +4 -0
  12. package/conformance/cases/codec-form-under-v1.meta +6 -0
  13. package/conformance/cases/codec-form-under-v1.parsed.json +3 -0
  14. package/conformance/cases/codec-unknown-name.error.json +5 -0
  15. package/conformance/cases/codec-unknown-name.html +4 -0
  16. package/conformance/cases/codec-unknown-name.meta +6 -0
  17. package/conformance/cases/codec-unknown-name.parsed.json +3 -0
  18. package/conformance/cases/tag-version-2-plain.expected.json +7 -0
  19. package/conformance/cases/tag-version-2-plain.html +5 -0
  20. package/conformance/cases/tag-version-2-plain.meta +6 -0
  21. package/conformance/cases/tag-version-2-plain.parsed.json +4 -0
  22. package/conformance/cases/tag-wrong-version.error.json +1 -1
  23. package/conformance/cases/tag-wrong-version.html +1 -1
  24. package/conformance/sheet/body-data-write.body.json +3 -0
  25. package/conformance/sheet/body-data-write.data.json +3 -0
  26. package/conformance/sheet/body-data-write.html +25 -0
  27. package/conformance/sheet/body-data-write.meta +5 -0
  28. package/conformance/sheet/body-patch-key-in-rules.body.json +3 -0
  29. package/conformance/sheet/body-patch-key-in-rules.data.json +13 -0
  30. package/conformance/sheet/body-patch-key-in-rules.html +18 -0
  31. package/conformance/sheet/body-patch-key-in-rules.meta +5 -0
  32. package/conformance/sheet/body-patch-not-array.body.json +3 -0
  33. package/conformance/sheet/body-patch-not-array.data.json +3 -0
  34. package/conformance/sheet/body-patch-not-array.html +25 -0
  35. package/conformance/sheet/body-patch-not-array.meta +5 -0
  36. package/conformance/sheet/body-patch-on-sheet.body.json +3 -0
  37. package/conformance/sheet/body-patch-on-sheet.data.json +14 -0
  38. package/conformance/sheet/body-patch-on-sheet.html +25 -0
  39. package/conformance/sheet/body-patch-on-sheet.meta +5 -0
  40. package/conformance/sheet/body-patch-version-1.body.json +3 -0
  41. package/conformance/sheet/body-patch-version-1.data.json +13 -0
  42. package/conformance/sheet/body-patch-version-1.html +4 -0
  43. package/conformance/sheet/body-patch-version-1.meta +5 -0
  44. package/conformance/sheet/body-patch-with-other-key.body.json +3 -0
  45. package/conformance/sheet/body-patch-with-other-key.data.json +14 -0
  46. package/conformance/sheet/body-patch-with-other-key.html +25 -0
  47. package/conformance/sheet/body-patch-with-other-key.meta +5 -0
  48. package/conformance/sheet/body-patch-without-operation-id.body.json +3 -0
  49. package/conformance/sheet/body-patch-without-operation-id.data.json +13 -0
  50. package/conformance/sheet/body-patch-without-operation-id.html +25 -0
  51. package/conformance/sheet/body-patch-without-operation-id.meta +5 -0
  52. package/conformance/sheet/params-bad-range.error.json +6 -0
  53. package/conformance/sheet/params-bad-range.html +25 -0
  54. package/conformance/sheet/params-bad-range.meta +6 -0
  55. package/conformance/sheet/params-bad-render.error.json +6 -0
  56. package/conformance/sheet/params-bad-render.html +25 -0
  57. package/conformance/sheet/params-bad-render.meta +6 -0
  58. package/conformance/sheet/params-bad-shape.error.json +6 -0
  59. package/conformance/sheet/params-bad-shape.html +25 -0
  60. package/conformance/sheet/params-bad-shape.meta +6 -0
  61. package/conformance/sheet/params-cache-buster.expected.json +128 -0
  62. package/conformance/sheet/params-cache-buster.html +25 -0
  63. package/conformance/sheet/params-cache-buster.meta +6 -0
  64. package/conformance/sheet/params-data-alone.expected.json +128 -0
  65. package/conformance/sheet/params-data-alone.html +25 -0
  66. package/conformance/sheet/params-data-alone.meta +6 -0
  67. package/conformance/sheet/params-empty.error.json +6 -0
  68. package/conformance/sheet/params-empty.html +25 -0
  69. package/conformance/sheet/params-empty.meta +6 -0
  70. package/conformance/sheet/params-index.expected.json +19 -0
  71. package/conformance/sheet/params-index.html +25 -0
  72. package/conformance/sheet/params-index.meta +6 -0
  73. package/conformance/sheet/params-none.expected.json +128 -0
  74. package/conformance/sheet/params-none.html +25 -0
  75. package/conformance/sheet/params-none.meta +6 -0
  76. package/conformance/sheet/params-range.expected.json +17 -0
  77. package/conformance/sheet/params-range.html +25 -0
  78. package/conformance/sheet/params-range.meta +6 -0
  79. package/conformance/sheet/params-render-without-range.error.json +6 -0
  80. package/conformance/sheet/params-render-without-range.html +25 -0
  81. package/conformance/sheet/params-render-without-range.meta +6 -0
  82. package/conformance/sheet/params-repeated.error.json +6 -0
  83. package/conformance/sheet/params-repeated.html +25 -0
  84. package/conformance/sheet/params-repeated.meta +6 -0
  85. package/conformance/sheet/params-unknown-sheet.error.json +6 -0
  86. package/conformance/sheet/params-unknown-sheet.html +25 -0
  87. package/conformance/sheet/params-unknown-sheet.meta +6 -0
  88. package/conformance/sheet/params-with-data.error.json +6 -0
  89. package/conformance/sheet/params-with-data.html +25 -0
  90. package/conformance/sheet/params-with-data.meta +6 -0
  91. package/conformance/sheet/sheet-contract-cells.expected.json +57 -0
  92. package/conformance/sheet/sheet-contract-cells.html +10 -0
  93. package/conformance/sheet/sheet-contract-cells.meta +6 -0
  94. package/conformance/sheet/sheet-contract-formulas.expected.json +29 -0
  95. package/conformance/sheet/sheet-contract-formulas.html +10 -0
  96. package/conformance/sheet/sheet-contract-formulas.meta +6 -0
  97. package/conformance/sheet/sheet-contract-values.expected.json +29 -0
  98. package/conformance/sheet/sheet-contract-values.html +10 -0
  99. package/conformance/sheet/sheet-contract-values.meta +6 -0
  100. package/conformance/sheet/sheet-contract-whole.expected.json +59 -0
  101. package/conformance/sheet/sheet-contract-whole.html +10 -0
  102. package/conformance/sheet/sheet-contract-whole.meta +5 -0
  103. package/conformance/sheet/sheet-hostile-01.expected.json +18 -0
  104. package/conformance/sheet/sheet-hostile-01.html +6 -0
  105. package/conformance/sheet/sheet-hostile-01.meta +5 -0
  106. package/conformance/sheet/sheet-hostile-02.expected.json +18 -0
  107. package/conformance/sheet/sheet-hostile-02.html +6 -0
  108. package/conformance/sheet/sheet-hostile-02.meta +5 -0
  109. package/conformance/sheet/sheet-hostile-03.expected.json +18 -0
  110. package/conformance/sheet/sheet-hostile-03.html +6 -0
  111. package/conformance/sheet/sheet-hostile-03.meta +5 -0
  112. package/conformance/sheet/sheet-hostile-04.expected.json +18 -0
  113. package/conformance/sheet/sheet-hostile-04.html +6 -0
  114. package/conformance/sheet/sheet-hostile-04.meta +5 -0
  115. package/conformance/sheet/sheet-hostile-05.expected.json +18 -0
  116. package/conformance/sheet/sheet-hostile-05.html +6 -0
  117. package/conformance/sheet/sheet-hostile-05.meta +5 -0
  118. package/conformance/sheet/sheet-hostile-06.expected.json +21 -0
  119. package/conformance/sheet/sheet-hostile-06.html +6 -0
  120. package/conformance/sheet/sheet-hostile-06.meta +5 -0
  121. package/conformance/sheet/sheet-hostile-07.expected.json +21 -0
  122. package/conformance/sheet/sheet-hostile-07.html +6 -0
  123. package/conformance/sheet/sheet-hostile-07.meta +5 -0
  124. package/conformance/sheet/sheet-hostile-08.expected.json +21 -0
  125. package/conformance/sheet/sheet-hostile-08.html +6 -0
  126. package/conformance/sheet/sheet-hostile-08.meta +5 -0
  127. package/conformance/sheet/sheet-hostile-09.expected.json +21 -0
  128. package/conformance/sheet/sheet-hostile-09.html +6 -0
  129. package/conformance/sheet/sheet-hostile-09.meta +5 -0
  130. package/conformance/sheet/sheet-hostile-10.expected.json +21 -0
  131. package/conformance/sheet/sheet-hostile-10.html +6 -0
  132. package/conformance/sheet/sheet-hostile-10.meta +5 -0
  133. package/conformance/sheet/sheet-hostile-11.expected.json +22 -0
  134. package/conformance/sheet/sheet-hostile-11.html +6 -0
  135. package/conformance/sheet/sheet-hostile-11.meta +5 -0
  136. package/conformance/sheet/sheet-hostile-12.expected.json +18 -0
  137. package/conformance/sheet/sheet-hostile-12.html +6 -0
  138. package/conformance/sheet/sheet-hostile-12.meta +5 -0
  139. package/conformance/sheet/sheet-hostile-13.expected.json +18 -0
  140. package/conformance/sheet/sheet-hostile-13.html +6 -0
  141. package/conformance/sheet/sheet-hostile-13.meta +5 -0
  142. package/conformance/sheet/sheet-hostile-14.expected.json +21 -0
  143. package/conformance/sheet/sheet-hostile-14.html +6 -0
  144. package/conformance/sheet/sheet-hostile-14.meta +5 -0
  145. package/conformance/sheet/sheet-hostile-15.expected.json +18 -0
  146. package/conformance/sheet/sheet-hostile-15.html +0 -0
  147. package/conformance/sheet/sheet-hostile-15.meta +5 -0
  148. package/conformance/sheet/sheet-hostile-16.expected.json +18 -0
  149. package/conformance/sheet/sheet-hostile-16.html +6 -0
  150. package/conformance/sheet/sheet-hostile-16.meta +5 -0
  151. package/conformance/sheet/sheet-hostile-17.expected.json +18 -0
  152. package/conformance/sheet/sheet-hostile-17.html +6 -0
  153. package/conformance/sheet/sheet-hostile-17.meta +5 -0
  154. package/conformance/sheet/sheet-hostile-18.expected.json +18 -0
  155. package/conformance/sheet/sheet-hostile-18.html +6 -0
  156. package/conformance/sheet/sheet-hostile-18.meta +5 -0
  157. package/conformance/sheet/sheet-hostile-19.expected.json +18 -0
  158. package/conformance/sheet/sheet-hostile-19.html +6 -0
  159. package/conformance/sheet/sheet-hostile-19.meta +5 -0
  160. package/conformance/sheet/sheet-hostile-20.expected.json +16 -0
  161. package/conformance/sheet/sheet-hostile-20.html +6 -0
  162. package/conformance/sheet/sheet-hostile-20.meta +5 -0
  163. package/conformance/sheet/sheet-hostile-21.expected.json +18 -0
  164. package/conformance/sheet/sheet-hostile-21.html +6 -0
  165. package/conformance/sheet/sheet-hostile-21.meta +5 -0
  166. package/conformance/sheet/sheet-hostile-22.expected.json +21 -0
  167. package/conformance/sheet/sheet-hostile-22.html +6 -0
  168. package/conformance/sheet/sheet-hostile-22.meta +5 -0
  169. package/conformance/sheet/sheet-hostile-23.expected.json +18 -0
  170. package/conformance/sheet/sheet-hostile-23.html +6 -0
  171. package/conformance/sheet/sheet-hostile-23.meta +5 -0
  172. package/conformance/sheet/sheet-hostile-24.expected.json +18 -0
  173. package/conformance/sheet/sheet-hostile-24.html +6 -0
  174. package/conformance/sheet/sheet-hostile-24.meta +5 -0
  175. package/conformance/sheet/sheet-hostile-25.expected.json +18 -0
  176. package/conformance/sheet/sheet-hostile-25.html +6 -0
  177. package/conformance/sheet/sheet-hostile-25.meta +5 -0
  178. package/conformance/sheet/sheet-hostile-26.expected.json +18 -0
  179. package/conformance/sheet/sheet-hostile-26.html +6 -0
  180. package/conformance/sheet/sheet-hostile-26.meta +5 -0
  181. package/conformance/sheet/sheet-hostile-27.expected.json +24 -0
  182. package/conformance/sheet/sheet-hostile-27.html +7 -0
  183. package/conformance/sheet/sheet-hostile-27.meta +5 -0
  184. package/conformance/sheet/sheet-hostile-28.expected.json +18 -0
  185. package/conformance/sheet/sheet-hostile-28.html +6 -0
  186. package/conformance/sheet/sheet-hostile-28.meta +5 -0
  187. package/conformance/sheet/sheet-hostile-29.expected.json +18 -0
  188. package/conformance/sheet/sheet-hostile-29.html +6 -0
  189. package/conformance/sheet/sheet-hostile-29.meta +5 -0
  190. package/conformance/sheet/sheet-hostile-30.expected.json +18 -0
  191. package/conformance/sheet/sheet-hostile-30.html +6 -0
  192. package/conformance/sheet/sheet-hostile-30.meta +5 -0
  193. package/conformance/sheet/sheet-hostile-31.expected.json +19 -0
  194. package/conformance/sheet/sheet-hostile-31.html +6 -0
  195. package/conformance/sheet/sheet-hostile-31.meta +5 -0
  196. package/conformance/sheet/sheet-hostile-32.expected.json +24 -0
  197. package/conformance/sheet/sheet-hostile-32.html +6 -0
  198. package/conformance/sheet/sheet-hostile-32.meta +5 -0
  199. package/conformance/sheet/sheet-hostile-33.expected.json +18 -0
  200. package/conformance/sheet/sheet-hostile-33.html +6 -0
  201. package/conformance/sheet/sheet-hostile-33.meta +5 -0
  202. package/conformance/sheet/sheet-hostile-34.expected.json +24 -0
  203. package/conformance/sheet/sheet-hostile-34.html +8 -0
  204. package/conformance/sheet/sheet-hostile-34.meta +5 -0
  205. package/conformance/sheet/sheet-hostile-35.expected.json +24 -0
  206. package/conformance/sheet/sheet-hostile-35.html +8 -0
  207. package/conformance/sheet/sheet-hostile-35.meta +5 -0
  208. package/conformance/sheet/sheet-patch-append.after.html +27 -0
  209. package/conformance/sheet/sheet-patch-append.after.json +143 -0
  210. package/conformance/sheet/sheet-patch-append.data.json +15 -0
  211. package/conformance/sheet/sheet-patch-append.html +25 -0
  212. package/conformance/sheet/sheet-patch-append.meta +5 -0
  213. package/conformance/sheet/sheet-patch-append.write.json +7 -0
  214. package/conformance/sheet/sheet-patch-bad-range.data.json +11 -0
  215. package/conformance/sheet/sheet-patch-bad-range.error.json +6 -0
  216. package/conformance/sheet/sheet-patch-bad-range.html +25 -0
  217. package/conformance/sheet/sheet-patch-bad-range.meta +5 -0
  218. package/conformance/sheet/sheet-patch-bad-value.data.json +13 -0
  219. package/conformance/sheet/sheet-patch-bad-value.error.json +6 -0
  220. package/conformance/sheet/sheet-patch-bad-value.html +25 -0
  221. package/conformance/sheet/sheet-patch-bad-value.meta +5 -0
  222. package/conformance/sheet/sheet-patch-clean-tab-beside-edited.after.html +25 -0
  223. package/conformance/sheet/sheet-patch-clean-tab-beside-edited.after.json +129 -0
  224. package/conformance/sheet/sheet-patch-clean-tab-beside-edited.data.json +11 -0
  225. package/conformance/sheet/sheet-patch-clean-tab-beside-edited.html +25 -0
  226. package/conformance/sheet/sheet-patch-clean-tab-beside-edited.meta +5 -0
  227. package/conformance/sheet/sheet-patch-clean-tab-beside-edited.write.json +7 -0
  228. package/conformance/sheet/sheet-patch-covered-cell.data.json +10 -0
  229. package/conformance/sheet/sheet-patch-covered-cell.error.json +6 -0
  230. package/conformance/sheet/sheet-patch-covered-cell.html +10 -0
  231. package/conformance/sheet/sheet-patch-covered-cell.meta +5 -0
  232. package/conformance/sheet/sheet-patch-empty.data.json +1 -0
  233. package/conformance/sheet/sheet-patch-empty.error.json +6 -0
  234. package/conformance/sheet/sheet-patch-empty.html +25 -0
  235. package/conformance/sheet/sheet-patch-empty.meta +5 -0
  236. package/conformance/sheet/sheet-patch-fallback-route.after.html +24 -0
  237. package/conformance/sheet/sheet-patch-fallback-route.after.json +86 -0
  238. package/conformance/sheet/sheet-patch-fallback-route.data.json +10 -0
  239. package/conformance/sheet/sheet-patch-fallback-route.html +24 -0
  240. package/conformance/sheet/sheet-patch-fallback-route.meta +5 -0
  241. package/conformance/sheet/sheet-patch-fallback-route.write.json +7 -0
  242. package/conformance/sheet/sheet-patch-first-tab.after.html +25 -0
  243. package/conformance/sheet/sheet-patch-first-tab.after.json +129 -0
  244. package/conformance/sheet/sheet-patch-first-tab.data.json +10 -0
  245. package/conformance/sheet/sheet-patch-first-tab.html +25 -0
  246. package/conformance/sheet/sheet-patch-first-tab.meta +5 -0
  247. package/conformance/sheet/sheet-patch-first-tab.write.json +7 -0
  248. package/conformance/sheet/sheet-patch-formula.after.html +25 -0
  249. package/conformance/sheet/sheet-patch-formula.after.json +128 -0
  250. package/conformance/sheet/sheet-patch-formula.data.json +11 -0
  251. package/conformance/sheet/sheet-patch-formula.html +25 -0
  252. package/conformance/sheet/sheet-patch-formula.meta +5 -0
  253. package/conformance/sheet/sheet-patch-formula.write.json +7 -0
  254. package/conformance/sheet/sheet-patch-no-sheet-rule.data.json +10 -0
  255. package/conformance/sheet/sheet-patch-no-sheet-rule.error.json +6 -0
  256. package/conformance/sheet/sheet-patch-no-sheet-rule.html +18 -0
  257. package/conformance/sheet/sheet-patch-no-sheet-rule.meta +5 -0
  258. package/conformance/sheet/sheet-patch-no-values.data.json +6 -0
  259. package/conformance/sheet/sheet-patch-no-values.error.json +6 -0
  260. package/conformance/sheet/sheet-patch-no-values.html +25 -0
  261. package/conformance/sheet/sheet-patch-no-values.meta +5 -0
  262. package/conformance/sheet/sheet-patch-not-canonical.data.json +11 -0
  263. package/conformance/sheet/sheet-patch-not-canonical.error.json +6 -0
  264. package/conformance/sheet/sheet-patch-not-canonical.html +25 -0
  265. package/conformance/sheet/sheet-patch-not-canonical.meta +5 -0
  266. package/conformance/sheet/sheet-patch-outside-sheet.data.json +11 -0
  267. package/conformance/sheet/sheet-patch-outside-sheet.error.json +6 -0
  268. package/conformance/sheet/sheet-patch-outside-sheet.html +25 -0
  269. package/conformance/sheet/sheet-patch-outside-sheet.meta +5 -0
  270. package/conformance/sheet/sheet-patch-range.after.html +25 -0
  271. package/conformance/sheet/sheet-patch-range.after.json +126 -0
  272. package/conformance/sheet/sheet-patch-range.data.json +11 -0
  273. package/conformance/sheet/sheet-patch-range.html +25 -0
  274. package/conformance/sheet/sheet-patch-range.meta +5 -0
  275. package/conformance/sheet/sheet-patch-range.write.json +7 -0
  276. package/conformance/sheet/sheet-patch-two-tabs.after.html +25 -0
  277. package/conformance/sheet/sheet-patch-two-tabs.after.json +130 -0
  278. package/conformance/sheet/sheet-patch-two-tabs.data.json +20 -0
  279. package/conformance/sheet/sheet-patch-two-tabs.html +25 -0
  280. package/conformance/sheet/sheet-patch-two-tabs.meta +5 -0
  281. package/conformance/sheet/sheet-patch-two-tabs.write.json +7 -0
  282. package/conformance/sheet/sheet-patch-typed.after.html +25 -0
  283. package/conformance/sheet/sheet-patch-typed.after.json +121 -0
  284. package/conformance/sheet/sheet-patch-typed.data.json +13 -0
  285. package/conformance/sheet/sheet-patch-typed.html +25 -0
  286. package/conformance/sheet/sheet-patch-typed.meta +5 -0
  287. package/conformance/sheet/sheet-patch-typed.write.json +7 -0
  288. package/conformance/sheet/sheet-patch-unknown-sheet.data.json +11 -0
  289. package/conformance/sheet/sheet-patch-unknown-sheet.error.json +6 -0
  290. package/conformance/sheet/sheet-patch-unknown-sheet.html +25 -0
  291. package/conformance/sheet/sheet-patch-unknown-sheet.meta +5 -0
  292. package/conformance/sheet/sheet-read-bad-range.error.json +6 -0
  293. package/conformance/sheet/sheet-read-bad-range.html +25 -0
  294. package/conformance/sheet/sheet-read-bad-range.meta +6 -0
  295. package/conformance/sheet/sheet-read-bad-render.error.json +6 -0
  296. package/conformance/sheet/sheet-read-bad-render.html +25 -0
  297. package/conformance/sheet/sheet-read-bad-render.meta +6 -0
  298. package/conformance/sheet/sheet-read-digest.expected.json +91 -0
  299. package/conformance/sheet/sheet-read-digest.html +25 -0
  300. package/conformance/sheet/sheet-read-digest.meta +6 -0
  301. package/conformance/sheet/sheet-read-empty.expected.json +11 -0
  302. package/conformance/sheet/sheet-read-empty.html +6 -0
  303. package/conformance/sheet/sheet-read-empty.meta +5 -0
  304. package/conformance/sheet/sheet-read-escapes.expected.json +108 -0
  305. package/conformance/sheet/sheet-read-escapes.html +22 -0
  306. package/conformance/sheet/sheet-read-escapes.meta +5 -0
  307. package/conformance/sheet/sheet-read-formulas-formatted.expected.json +298 -0
  308. package/conformance/sheet/sheet-read-formulas-formatted.html +16 -0
  309. package/conformance/sheet/sheet-read-formulas-formatted.meta +5 -0
  310. package/conformance/sheet/sheet-read-grid-in-comment.expected.json +85 -0
  311. package/conformance/sheet/sheet-read-grid-in-comment.html +24 -0
  312. package/conformance/sheet/sheet-read-grid-in-comment.meta +5 -0
  313. package/conformance/sheet/sheet-read-grid-in-script.expected.json +85 -0
  314. package/conformance/sheet/sheet-read-grid-in-script.html +24 -0
  315. package/conformance/sheet/sheet-read-grid-in-script.meta +5 -0
  316. package/conformance/sheet/sheet-read-grid-in-template.expected.json +85 -0
  317. package/conformance/sheet/sheet-read-grid-in-template.html +24 -0
  318. package/conformance/sheet/sheet-read-grid-in-template.meta +5 -0
  319. package/conformance/sheet/sheet-read-grid-in-textarea.expected.json +85 -0
  320. package/conformance/sheet/sheet-read-grid-in-textarea.html +24 -0
  321. package/conformance/sheet/sheet-read-grid-in-textarea.meta +5 -0
  322. package/conformance/sheet/sheet-read-grid-outside-read-by-rule.expected.json +94 -0
  323. package/conformance/sheet/sheet-read-grid-outside-read-by-rule.html +24 -0
  324. package/conformance/sheet/sheet-read-grid-outside-read-by-rule.meta +5 -0
  325. package/conformance/sheet/sheet-read-grid-outside-sheet.expected.json +85 -0
  326. package/conformance/sheet/sheet-read-grid-outside-sheet.html +24 -0
  327. package/conformance/sheet/sheet-read-grid-outside-sheet.meta +5 -0
  328. package/conformance/sheet/sheet-read-hand-edited.expected.json +85 -0
  329. package/conformance/sheet/sheet-read-hand-edited.html +18 -0
  330. package/conformance/sheet/sheet-read-hand-edited.meta +5 -0
  331. package/conformance/sheet/sheet-read-index.expected.json +19 -0
  332. package/conformance/sheet/sheet-read-index.html +25 -0
  333. package/conformance/sheet/sheet-read-index.meta +6 -0
  334. package/conformance/sheet/sheet-read-merged.expected.json +59 -0
  335. package/conformance/sheet/sheet-read-merged.html +10 -0
  336. package/conformance/sheet/sheet-read-merged.meta +5 -0
  337. package/conformance/sheet/sheet-read-no-tag.error.json +5 -0
  338. package/conformance/sheet/sheet-read-no-tag.html +18 -0
  339. package/conformance/sheet/sheet-read-no-tag.meta +5 -0
  340. package/conformance/sheet/sheet-read-padded-name-index.expected.json +19 -0
  341. package/conformance/sheet/sheet-read-padded-name-index.html +25 -0
  342. package/conformance/sheet/sheet-read-padded-name-index.meta +6 -0
  343. package/conformance/sheet/sheet-read-padded-name-lookup.expected.json +83 -0
  344. package/conformance/sheet/sheet-read-padded-name-lookup.html +25 -0
  345. package/conformance/sheet/sheet-read-padded-name-lookup.meta +6 -0
  346. package/conformance/sheet/sheet-read-padded-name-trimmed-lookup.error.json +6 -0
  347. package/conformance/sheet/sheet-read-padded-name-trimmed-lookup.html +25 -0
  348. package/conformance/sheet/sheet-read-padded-name-trimmed-lookup.meta +6 -0
  349. package/conformance/sheet/sheet-read-padded-name.expected.json +128 -0
  350. package/conformance/sheet/sheet-read-padded-name.html +25 -0
  351. package/conformance/sheet/sheet-read-padded-name.meta +5 -0
  352. package/conformance/sheet/sheet-read-range-cells.expected.json +55 -0
  353. package/conformance/sheet/sheet-read-range-cells.html +25 -0
  354. package/conformance/sheet/sheet-read-range-cells.meta +6 -0
  355. package/conformance/sheet/sheet-read-range-first-tab.expected.json +12 -0
  356. package/conformance/sheet/sheet-read-range-first-tab.html +25 -0
  357. package/conformance/sheet/sheet-read-range-first-tab.meta +6 -0
  358. package/conformance/sheet/sheet-read-range-formulas.expected.json +24 -0
  359. package/conformance/sheet/sheet-read-range-formulas.html +25 -0
  360. package/conformance/sheet/sheet-read-range-formulas.meta +6 -0
  361. package/conformance/sheet/sheet-read-range-values.expected.json +24 -0
  362. package/conformance/sheet/sheet-read-range-values.html +25 -0
  363. package/conformance/sheet/sheet-read-range-values.meta +6 -0
  364. package/conformance/sheet/sheet-read-sheet-by-id.expected.json +46 -0
  365. package/conformance/sheet/sheet-read-sheet-by-id.html +25 -0
  366. package/conformance/sheet/sheet-read-sheet-by-id.meta +6 -0
  367. package/conformance/sheet/sheet-read-sheet-by-name.expected.json +46 -0
  368. package/conformance/sheet/sheet-read-sheet-by-name.html +25 -0
  369. package/conformance/sheet/sheet-read-sheet-by-name.meta +6 -0
  370. package/conformance/sheet/sheet-read-styled.expected.json +48 -0
  371. package/conformance/sheet/sheet-read-styled.html +10 -0
  372. package/conformance/sheet/sheet-read-styled.meta +5 -0
  373. package/conformance/sheet/sheet-read-tiny.expected.json +85 -0
  374. package/conformance/sheet/sheet-read-tiny.html +18 -0
  375. package/conformance/sheet/sheet-read-tiny.meta +5 -0
  376. package/conformance/sheet/sheet-read-two-tabs.expected.json +128 -0
  377. package/conformance/sheet/sheet-read-two-tabs.html +25 -0
  378. package/conformance/sheet/sheet-read-two-tabs.meta +5 -0
  379. package/conformance/sheet/sheet-read-unknown-sheet.error.json +6 -0
  380. package/conformance/sheet/sheet-read-unknown-sheet.html +25 -0
  381. package/conformance/sheet/sheet-read-unknown-sheet.meta +6 -0
  382. package/conformance/sheet/sheet-read-version-1-codec.error.json +5 -0
  383. package/conformance/sheet/sheet-read-version-1-codec.html +25 -0
  384. package/conformance/sheet/sheet-read-version-1-codec.meta +5 -0
  385. package/conformance/sheet/sheet-write-whole-refused.data.json +3 -0
  386. package/conformance/sheet/sheet-write-whole-refused.error.json +7 -0
  387. package/conformance/sheet/sheet-write-whole-refused.html +25 -0
  388. package/conformance/sheet/sheet-write-whole-refused.meta +5 -0
  389. package/conformance/sheet-guard-extraction.json +616 -0
  390. package/conformance/sheet-guard.json +32362 -0
  391. package/conformance/sheet-read-shapes.json +1 -0
  392. package/dist/hyper-html-api.engine.esm.js +1 -1
  393. package/dist/hyper-html-api.engine.min.js +1 -1
  394. package/dist/hyper-html-api.min.js +7 -7
  395. package/dist/hyper-html-api.upgrade.min.js +2 -2
  396. package/package.json +5 -3
  397. package/src/codecs/sheet.js +127 -0
  398. package/src/codecs/sheet.vendor.js +887 -0
  399. package/src/dom-api.js +20 -11
  400. package/src/engine/apply.js +12 -1
  401. package/src/engine/codecs.js +80 -0
  402. package/src/engine/errors.js +20 -1
  403. package/src/engine/extract.js +11 -0
  404. package/src/engine/index.js +9 -5
  405. package/src/engine/round-trip.js +16 -10
  406. package/src/engine/rule-syntax.js +16 -0
  407. package/src/engine/rules-tag.js +3 -2
  408. package/src/engine/write-plan.js +2 -0
  409. package/src/patch-document.js +122 -0
  410. package/src/read.js +163 -0
  411. package/src/upgrade/codec-carry.js +23 -0
  412. package/src/upgrade/extract-all.js +12 -3
  413. package/src/upgrade/migrate.js +30 -3
  414. package/src/upgrade/rules-tags.js +4 -4
  415. package/src/write.js +44 -5
@@ -0,0 +1,298 @@
1
+ {
2
+ "title": "Book",
3
+ "sheets": [
4
+ {
5
+ "id": "s1",
6
+ "name": "Budget",
7
+ "cols": [
8
+ "ff-c0",
9
+ "ff-c1",
10
+ "ff-c2",
11
+ "ff-c3",
12
+ "ff-c4"
13
+ ],
14
+ "rows": [
15
+ {
16
+ "id": "ff-r1",
17
+ "cells": [
18
+ 7,
19
+ {
20
+ "f": "=A1*1.5",
21
+ "v": 10.5,
22
+ "text": "$10.50",
23
+ "fmt": "$#,##0.00"
24
+ },
25
+ {
26
+ "f": "=A1/70",
27
+ "v": 0.1,
28
+ "text": "10%",
29
+ "fmt": "0%"
30
+ },
31
+ {
32
+ "f": "=DATE(2026,1,1)",
33
+ "v": 46023,
34
+ "text": "Jan 1, 2026",
35
+ "fmt": "mmm d, yyyy"
36
+ },
37
+ {
38
+ "f": "=A1>35",
39
+ "v": false
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "id": "ff-r2",
45
+ "cells": [
46
+ 14,
47
+ {
48
+ "f": "=A2*1.5",
49
+ "v": 21,
50
+ "text": "$21.00",
51
+ "fmt": "$#,##0.00"
52
+ },
53
+ {
54
+ "f": "=A2/70",
55
+ "v": 0.2,
56
+ "text": "20%",
57
+ "fmt": "0%"
58
+ },
59
+ {
60
+ "f": "=DATE(2026,1,2)",
61
+ "v": 46024,
62
+ "text": "Jan 2, 2026",
63
+ "fmt": "mmm d, yyyy"
64
+ },
65
+ {
66
+ "f": "=A2>35",
67
+ "v": false
68
+ }
69
+ ]
70
+ },
71
+ {
72
+ "id": "ff-r3",
73
+ "cells": [
74
+ 21,
75
+ {
76
+ "f": "=A3*1.5",
77
+ "v": 31.5,
78
+ "text": "$31.50",
79
+ "fmt": "$#,##0.00"
80
+ },
81
+ {
82
+ "f": "=A3/70",
83
+ "v": 0.3,
84
+ "text": "30%",
85
+ "fmt": "0%"
86
+ },
87
+ {
88
+ "f": "=DATE(2026,1,3)",
89
+ "v": 46025,
90
+ "text": "Jan 3, 2026",
91
+ "fmt": "mmm d, yyyy"
92
+ },
93
+ {
94
+ "f": "=A3>35",
95
+ "v": false
96
+ }
97
+ ]
98
+ },
99
+ {
100
+ "id": "ff-r4",
101
+ "cells": [
102
+ 28,
103
+ {
104
+ "f": "=A4*1.5",
105
+ "v": 42,
106
+ "text": "$42.00",
107
+ "fmt": "$#,##0.00"
108
+ },
109
+ {
110
+ "f": "=A4/70",
111
+ "v": 0.4,
112
+ "text": "40%",
113
+ "fmt": "0%"
114
+ },
115
+ {
116
+ "f": "=DATE(2026,1,4)",
117
+ "v": 46026,
118
+ "text": "Jan 4, 2026",
119
+ "fmt": "mmm d, yyyy"
120
+ },
121
+ {
122
+ "f": "=A4>35",
123
+ "v": false
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ "id": "ff-r5",
129
+ "cells": [
130
+ 35,
131
+ {
132
+ "f": "=A5*1.5",
133
+ "v": 52.5,
134
+ "text": "$52.50",
135
+ "fmt": "$#,##0.00"
136
+ },
137
+ {
138
+ "f": "=A5/70",
139
+ "v": 0.5,
140
+ "text": "50%",
141
+ "fmt": "0%"
142
+ },
143
+ {
144
+ "f": "=DATE(2026,1,5)",
145
+ "v": 46027,
146
+ "text": "Jan 5, 2026",
147
+ "fmt": "mmm d, yyyy"
148
+ },
149
+ {
150
+ "f": "=A5>35",
151
+ "v": false
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ "id": "ff-r6",
157
+ "cells": [
158
+ 42,
159
+ {
160
+ "f": "=A6*1.5",
161
+ "v": 63,
162
+ "text": "$63.00",
163
+ "fmt": "$#,##0.00"
164
+ },
165
+ {
166
+ "f": "=A6/70",
167
+ "v": 0.6,
168
+ "text": "60%",
169
+ "fmt": "0%"
170
+ },
171
+ {
172
+ "f": "=DATE(2026,1,6)",
173
+ "v": 46028,
174
+ "text": "Jan 6, 2026",
175
+ "fmt": "mmm d, yyyy"
176
+ },
177
+ {
178
+ "f": "=A6>35",
179
+ "v": true
180
+ }
181
+ ]
182
+ },
183
+ {
184
+ "id": "ff-r7",
185
+ "cells": [
186
+ 49,
187
+ {
188
+ "f": "=A7*1.5",
189
+ "v": 73.5,
190
+ "text": "$73.50",
191
+ "fmt": "$#,##0.00"
192
+ },
193
+ {
194
+ "f": "=A7/70",
195
+ "v": 0.7,
196
+ "text": "70%",
197
+ "fmt": "0%"
198
+ },
199
+ {
200
+ "f": "=DATE(2026,1,7)",
201
+ "v": 46029,
202
+ "text": "Jan 7, 2026",
203
+ "fmt": "mmm d, yyyy"
204
+ },
205
+ {
206
+ "f": "=A7>35",
207
+ "v": true
208
+ }
209
+ ]
210
+ },
211
+ {
212
+ "id": "ff-r8",
213
+ "cells": [
214
+ 56,
215
+ {
216
+ "f": "=A8*1.5",
217
+ "v": 84,
218
+ "text": "$84.00",
219
+ "fmt": "$#,##0.00"
220
+ },
221
+ {
222
+ "f": "=A8/70",
223
+ "v": 0.8,
224
+ "text": "80%",
225
+ "fmt": "0%"
226
+ },
227
+ {
228
+ "f": "=DATE(2026,1,8)",
229
+ "v": 46030,
230
+ "text": "Jan 8, 2026",
231
+ "fmt": "mmm d, yyyy"
232
+ },
233
+ {
234
+ "f": "=A8>35",
235
+ "v": true
236
+ }
237
+ ]
238
+ },
239
+ {
240
+ "id": "ff-r9",
241
+ "cells": [
242
+ 63,
243
+ {
244
+ "f": "=A9*1.5",
245
+ "v": 94.5,
246
+ "text": "$94.50",
247
+ "fmt": "$#,##0.00"
248
+ },
249
+ {
250
+ "f": "=A9/70",
251
+ "v": 0.9,
252
+ "text": "90%",
253
+ "fmt": "0%"
254
+ },
255
+ {
256
+ "f": "=DATE(2026,1,9)",
257
+ "v": 46031,
258
+ "text": "Jan 9, 2026",
259
+ "fmt": "mmm d, yyyy"
260
+ },
261
+ {
262
+ "f": "=A9>35",
263
+ "v": true
264
+ }
265
+ ]
266
+ },
267
+ {
268
+ "id": "ff-r10",
269
+ "cells": [
270
+ 70,
271
+ {
272
+ "f": "=A10*1.5",
273
+ "v": 105,
274
+ "text": "$105.00",
275
+ "fmt": "$#,##0.00"
276
+ },
277
+ {
278
+ "f": "=A10/70",
279
+ "v": 1,
280
+ "text": "100%",
281
+ "fmt": "0%"
282
+ },
283
+ {
284
+ "f": "=DATE(2026,1,10)",
285
+ "v": 46032,
286
+ "text": "Jan 10, 2026",
287
+ "fmt": "mmm d, yyyy"
288
+ },
289
+ {
290
+ "f": "=A10>35",
291
+ "v": true
292
+ }
293
+ ]
294
+ }
295
+ ]
296
+ }
297
+ ]
298
+ }
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html><head><script type="application/json" data-rules-name="api" data-rules-version="2">{"title":"h1","sheets":"[items=sheets]@codec(sheet)"}</script></head><body><h1>Book</h1><main sap data-rev="12"><div items="sheets">
3
+ <section item data-id="s1" data-pos="V"><h2 bind="name">Budget</h2><table grid><colgroup><col data-id="ff-c0" data-pos="8"><col data-id="ff-c1" data-pos="G" fmt="$#,##0.00"><col data-id="ff-c2" data-pos="V" fmt="0%"><col data-id="ff-c3" data-pos="d" fmt="mmm d, yyyy"><col data-id="ff-c4" data-pos="l"></colgroup>
4
+ <tbody>
5
+ <tr data-id="ff-r1" data-pos="4"><td n>7</td><td n f="=A1*1.5" v="10.5" fmt="$#,##0.00">$10.50</td><td n f="=A1/70" v="0.1" fmt="0%">10%</td><td n f="=DATE(2026,1,1)" v="46023" fmt="mmm d, yyyy">Jan 1, 2026</td><td f="=A1>35">FALSE</td></tr>
6
+ <tr data-id="ff-r2" data-pos="8"><td n>14</td><td n f="=A2*1.5" v="21" fmt="$#,##0.00">$21.00</td><td n f="=A2/70" v="0.2" fmt="0%">20%</td><td n f="=DATE(2026,1,2)" v="46024" fmt="mmm d, yyyy">Jan 2, 2026</td><td f="=A2>35">FALSE</td></tr>
7
+ <tr data-id="ff-r3" data-pos="G"><td n>21</td><td n f="=A3*1.5" v="31.5" fmt="$#,##0.00">$31.50</td><td n f="=A3/70" v="0.3" fmt="0%">30%</td><td n f="=DATE(2026,1,3)" v="46025" fmt="mmm d, yyyy">Jan 3, 2026</td><td f="=A3>35">FALSE</td></tr>
8
+ <tr data-id="ff-r4" data-pos="K"><td n>28</td><td n f="=A4*1.5" v="42" fmt="$#,##0.00">$42.00</td><td n f="=A4/70" v="0.4" fmt="0%">40%</td><td n f="=DATE(2026,1,4)" v="46026" fmt="mmm d, yyyy">Jan 4, 2026</td><td f="=A4>35">FALSE</td></tr>
9
+ <tr data-id="ff-r5" data-pos="O"><td n>35</td><td n f="=A5*1.5" v="52.5" fmt="$#,##0.00">$52.50</td><td n f="=A5/70" v="0.5" fmt="0%">50%</td><td n f="=DATE(2026,1,5)" v="46027" fmt="mmm d, yyyy">Jan 5, 2026</td><td f="=A5>35">FALSE</td></tr>
10
+ <tr data-id="ff-r6" data-pos="V"><td n>42</td><td n f="=A6*1.5" v="63" fmt="$#,##0.00">$63.00</td><td n f="=A6/70" v="0.6" fmt="0%">60%</td><td n f="=DATE(2026,1,6)" v="46028" fmt="mmm d, yyyy">Jan 6, 2026</td><td f="=A6>35">TRUE</td></tr>
11
+ <tr data-id="ff-r7" data-pos="Z"><td n>49</td><td n f="=A7*1.5" v="73.5" fmt="$#,##0.00">$73.50</td><td n f="=A7/70" v="0.7" fmt="0%">70%</td><td n f="=DATE(2026,1,7)" v="46029" fmt="mmm d, yyyy">Jan 7, 2026</td><td f="=A7>35">TRUE</td></tr>
12
+ <tr data-id="ff-r8" data-pos="d"><td n>56</td><td n f="=A8*1.5" v="84" fmt="$#,##0.00">$84.00</td><td n f="=A8/70" v="0.8" fmt="0%">80%</td><td n f="=DATE(2026,1,8)" v="46030" fmt="mmm d, yyyy">Jan 8, 2026</td><td f="=A8>35">TRUE</td></tr>
13
+ <tr data-id="ff-r9" data-pos="l"><td n>63</td><td n f="=A9*1.5" v="94.5" fmt="$#,##0.00">$94.50</td><td n f="=A9/70" v="0.9" fmt="0%">90%</td><td n f="=DATE(2026,1,9)" v="46031" fmt="mmm d, yyyy">Jan 9, 2026</td><td f="=A9>35">TRUE</td></tr>
14
+ <tr data-id="ff-r10" data-pos="t"><td n>70</td><td n f="=A10*1.5" v="105" fmt="$#,##0.00">$105.00</td><td n f="=A10/70" v="1" fmt="0%">100%</td><td n f="=DATE(2026,1,10)" v="46032" fmt="mmm d, yyyy">Jan 10, 2026</td><td f="=A10>35">TRUE</td></tr>
15
+ </tbody></table></section>
16
+ </div></main></body></html>
@@ -0,0 +1,5 @@
1
+ tier: 1
2
+ face: read
3
+ token: api
4
+ expect: ok
5
+ note: the whole read of one tab (formulas-formatted fixture)
@@ -0,0 +1,85 @@
1
+ {
2
+ "title": "Book",
3
+ "sheets": [
4
+ {
5
+ "id": "s1",
6
+ "name": "Budget",
7
+ "cols": [
8
+ "ca",
9
+ "cb",
10
+ "cc"
11
+ ],
12
+ "rows": [
13
+ {
14
+ "id": "r1",
15
+ "cells": [
16
+ {
17
+ "v": "Item",
18
+ "style": "font-weight:bold"
19
+ },
20
+ "Cost",
21
+ "Share"
22
+ ]
23
+ },
24
+ {
25
+ "id": "r2",
26
+ "cells": [
27
+ "Rent",
28
+ {
29
+ "v": 1200,
30
+ "text": "$1,200.00"
31
+ },
32
+ {
33
+ "f": "=B2/B$5",
34
+ "v": 0.8,
35
+ "text": "80%"
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ "id": "r3",
41
+ "cells": [
42
+ "Food",
43
+ {
44
+ "v": 300,
45
+ "text": "$300.00"
46
+ },
47
+ {
48
+ "f": "=B3/B$5",
49
+ "v": 0.2,
50
+ "text": "20%"
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "id": "r4",
56
+ "cells": []
57
+ },
58
+ {
59
+ "id": "r5",
60
+ "cells": [
61
+ {
62
+ "v": "Total",
63
+ "style": "font-weight:bold"
64
+ },
65
+ {
66
+ "f": "=SUM(B2:B3)",
67
+ "v": 1500,
68
+ "text": "$1,500.00"
69
+ }
70
+ ]
71
+ },
72
+ {
73
+ "id": "r6",
74
+ "cells": [
75
+ {
76
+ "v": "Prices as of November",
77
+ "style": "text-align:center",
78
+ "colspan": 3
79
+ }
80
+ ]
81
+ }
82
+ ]
83
+ }
84
+ ]
85
+ }
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html><head><script type="application/json" data-rules-name="api" data-rules-version="2">{"title":"h1","sheets":"[items=sheets]@codec(sheet)"}</script></head><body><h1>Book</h1><!-- <table grid freeze-cols="2"><colgroup><col data-id="st-c0" data-pos="G" style="width:120px"><col data-id="st-c1" data-pos="V" fmt="0.0%"><col data-id="st-c2" data-pos="l"></colgroup>
3
+ <thead>
4
+ <tr data-id="st-r1" data-pos="G" style="font-weight:bold;background:#eef"><td>Name</td><td>Share</td><td>Note</td></tr>
5
+ </thead><tbody>
6
+ <tr data-id="st-r2" data-pos="V"><td style="color:#c00">Red</td><td n v="0.125" style="text-align:right;font-style:italic">12.5%</td><td style="text-decoration:underline;white-space:nowrap">underlined</td></tr>
7
+ <tr data-id="st-r3" data-pos="l" style="border-bottom:1px solid #999"><td>last</td></tr>
8
+ </tbody></table> --><main sap data-rev="12"><div items="sheets">
9
+ <section item data-id="s1" data-pos="V"><h2 bind="name">Budget</h2><table grid freeze-cols="1"><colgroup><col data-id="ca" data-pos="G" style="width:180px"><col data-id="cb" data-pos="V" fmt="$#,##0.00"><col data-id="cc" data-pos="l" fmt="0%"></colgroup>
10
+ <thead>
11
+ <tr data-id="r1" data-pos="8"><td style="font-weight:bold">Item</td><td>Cost</td><td>Share</td></tr>
12
+ </thead><tbody>
13
+ <tr data-id="r2" data-pos="G"><td>Rent</td><td n v="1200">$1,200.00</td><td n f="=B2/B$5" v="0.8">80%</td></tr>
14
+ <tr data-id="r3" data-pos="O"><td>Food</td><td n v="300">$300.00</td><td n f="=B3/B$5" v="0.2">20%</td></tr>
15
+ <tr data-id="r4" data-pos="V"></tr>
16
+ <tr data-id="r5" data-pos="d"><td style="font-weight:bold">Total</td><td n f="=SUM(B2:B3)" v="1500">$1,500.00</td></tr>
17
+ <tr data-id="r6" data-pos="l"><td colspan="3" style="text-align:center">Prices as of November</td><td hidden></td><td hidden></td></tr>
18
+ </tbody></table>
19
+ <table grid><colgroup><col data-id="cd" data-pos="G"><col data-id="ce" data-pos="V"></colgroup>
20
+ <tbody>
21
+ <tr data-id="r7" data-pos="G"><td>Lisbon</td><td n v="46095" fmt="mmm d, yyyy">Mar 14, 2026</td></tr>
22
+ <tr data-id="r8" data-pos="V"><td>Budget left</td><td n f="=5000-Budget!B5" v="3500" fmt="$#,##0.00">$3,500.00</td></tr>
23
+ </tbody></table></section>
24
+ </div></main></body></html>
@@ -0,0 +1,5 @@
1
+ tier: 1
2
+ face: read
3
+ token: api
4
+ expect: ok
5
+ note: a grid in a comment reads through the tree, not the codec scan
@@ -0,0 +1,85 @@
1
+ {
2
+ "title": "Book",
3
+ "sheets": [
4
+ {
5
+ "id": "s1",
6
+ "name": "Budget",
7
+ "cols": [
8
+ "ca",
9
+ "cb",
10
+ "cc"
11
+ ],
12
+ "rows": [
13
+ {
14
+ "id": "r1",
15
+ "cells": [
16
+ {
17
+ "v": "Item",
18
+ "style": "font-weight:bold"
19
+ },
20
+ "Cost",
21
+ "Share"
22
+ ]
23
+ },
24
+ {
25
+ "id": "r2",
26
+ "cells": [
27
+ "Rent",
28
+ {
29
+ "v": 1200,
30
+ "text": "$1,200.00"
31
+ },
32
+ {
33
+ "f": "=B2/B$5",
34
+ "v": 0.8,
35
+ "text": "80%"
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ "id": "r3",
41
+ "cells": [
42
+ "Food",
43
+ {
44
+ "v": 300,
45
+ "text": "$300.00"
46
+ },
47
+ {
48
+ "f": "=B3/B$5",
49
+ "v": 0.2,
50
+ "text": "20%"
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "id": "r4",
56
+ "cells": []
57
+ },
58
+ {
59
+ "id": "r5",
60
+ "cells": [
61
+ {
62
+ "v": "Total",
63
+ "style": "font-weight:bold"
64
+ },
65
+ {
66
+ "f": "=SUM(B2:B3)",
67
+ "v": 1500,
68
+ "text": "$1,500.00"
69
+ }
70
+ ]
71
+ },
72
+ {
73
+ "id": "r6",
74
+ "cells": [
75
+ {
76
+ "v": "Prices as of November",
77
+ "style": "text-align:center",
78
+ "colspan": 3
79
+ }
80
+ ]
81
+ }
82
+ ]
83
+ }
84
+ ]
85
+ }
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html><head><script type="application/json" data-rules-name="api" data-rules-version="2">{"title":"h1","sheets":"[items=sheets]@codec(sheet)"}</script></head><body><h1>Book</h1><script type="text/plain"><table grid freeze-cols="2"><colgroup><col data-id="st-c0" data-pos="G" style="width:120px"><col data-id="st-c1" data-pos="V" fmt="0.0%"><col data-id="st-c2" data-pos="l"></colgroup>
3
+ <thead>
4
+ <tr data-id="st-r1" data-pos="G" style="font-weight:bold;background:#eef"><td>Name</td><td>Share</td><td>Note</td></tr>
5
+ </thead><tbody>
6
+ <tr data-id="st-r2" data-pos="V"><td style="color:#c00">Red</td><td n v="0.125" style="text-align:right;font-style:italic">12.5%</td><td style="text-decoration:underline;white-space:nowrap">underlined</td></tr>
7
+ <tr data-id="st-r3" data-pos="l" style="border-bottom:1px solid #999"><td>last</td></tr>
8
+ </tbody></table></script><main sap data-rev="12"><div items="sheets">
9
+ <section item data-id="s1" data-pos="V"><h2 bind="name">Budget</h2><table grid freeze-cols="1"><colgroup><col data-id="ca" data-pos="G" style="width:180px"><col data-id="cb" data-pos="V" fmt="$#,##0.00"><col data-id="cc" data-pos="l" fmt="0%"></colgroup>
10
+ <thead>
11
+ <tr data-id="r1" data-pos="8"><td style="font-weight:bold">Item</td><td>Cost</td><td>Share</td></tr>
12
+ </thead><tbody>
13
+ <tr data-id="r2" data-pos="G"><td>Rent</td><td n v="1200">$1,200.00</td><td n f="=B2/B$5" v="0.8">80%</td></tr>
14
+ <tr data-id="r3" data-pos="O"><td>Food</td><td n v="300">$300.00</td><td n f="=B3/B$5" v="0.2">20%</td></tr>
15
+ <tr data-id="r4" data-pos="V"></tr>
16
+ <tr data-id="r5" data-pos="d"><td style="font-weight:bold">Total</td><td n f="=SUM(B2:B3)" v="1500">$1,500.00</td></tr>
17
+ <tr data-id="r6" data-pos="l"><td colspan="3" style="text-align:center">Prices as of November</td><td hidden></td><td hidden></td></tr>
18
+ </tbody></table>
19
+ <table grid><colgroup><col data-id="cd" data-pos="G"><col data-id="ce" data-pos="V"></colgroup>
20
+ <tbody>
21
+ <tr data-id="r7" data-pos="G"><td>Lisbon</td><td n v="46095" fmt="mmm d, yyyy">Mar 14, 2026</td></tr>
22
+ <tr data-id="r8" data-pos="V"><td>Budget left</td><td n f="=5000-Budget!B5" v="3500" fmt="$#,##0.00">$3,500.00</td></tr>
23
+ </tbody></table></section>
24
+ </div></main></body></html>
@@ -0,0 +1,5 @@
1
+ tier: 1
2
+ face: read
3
+ token: api
4
+ expect: ok
5
+ note: a grid in a script element reads through the tree
@@ -0,0 +1,85 @@
1
+ {
2
+ "title": "Book",
3
+ "sheets": [
4
+ {
5
+ "id": "s1",
6
+ "name": "Budget",
7
+ "cols": [
8
+ "ca",
9
+ "cb",
10
+ "cc"
11
+ ],
12
+ "rows": [
13
+ {
14
+ "id": "r1",
15
+ "cells": [
16
+ {
17
+ "v": "Item",
18
+ "style": "font-weight:bold"
19
+ },
20
+ "Cost",
21
+ "Share"
22
+ ]
23
+ },
24
+ {
25
+ "id": "r2",
26
+ "cells": [
27
+ "Rent",
28
+ {
29
+ "v": 1200,
30
+ "text": "$1,200.00"
31
+ },
32
+ {
33
+ "f": "=B2/B$5",
34
+ "v": 0.8,
35
+ "text": "80%"
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ "id": "r3",
41
+ "cells": [
42
+ "Food",
43
+ {
44
+ "v": 300,
45
+ "text": "$300.00"
46
+ },
47
+ {
48
+ "f": "=B3/B$5",
49
+ "v": 0.2,
50
+ "text": "20%"
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "id": "r4",
56
+ "cells": []
57
+ },
58
+ {
59
+ "id": "r5",
60
+ "cells": [
61
+ {
62
+ "v": "Total",
63
+ "style": "font-weight:bold"
64
+ },
65
+ {
66
+ "f": "=SUM(B2:B3)",
67
+ "v": 1500,
68
+ "text": "$1,500.00"
69
+ }
70
+ ]
71
+ },
72
+ {
73
+ "id": "r6",
74
+ "cells": [
75
+ {
76
+ "v": "Prices as of November",
77
+ "style": "text-align:center",
78
+ "colspan": 3
79
+ }
80
+ ]
81
+ }
82
+ ]
83
+ }
84
+ ]
85
+ }
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html><head><script type="application/json" data-rules-name="api" data-rules-version="2">{"title":"h1","sheets":"[items=sheets]@codec(sheet)"}</script></head><body><h1>Book</h1><template><table grid freeze-cols="2"><colgroup><col data-id="st-c0" data-pos="G" style="width:120px"><col data-id="st-c1" data-pos="V" fmt="0.0%"><col data-id="st-c2" data-pos="l"></colgroup>
3
+ <thead>
4
+ <tr data-id="st-r1" data-pos="G" style="font-weight:bold;background:#eef"><td>Name</td><td>Share</td><td>Note</td></tr>
5
+ </thead><tbody>
6
+ <tr data-id="st-r2" data-pos="V"><td style="color:#c00">Red</td><td n v="0.125" style="text-align:right;font-style:italic">12.5%</td><td style="text-decoration:underline;white-space:nowrap">underlined</td></tr>
7
+ <tr data-id="st-r3" data-pos="l" style="border-bottom:1px solid #999"><td>last</td></tr>
8
+ </tbody></table></template><main sap data-rev="12"><div items="sheets">
9
+ <section item data-id="s1" data-pos="V"><h2 bind="name">Budget</h2><table grid freeze-cols="1"><colgroup><col data-id="ca" data-pos="G" style="width:180px"><col data-id="cb" data-pos="V" fmt="$#,##0.00"><col data-id="cc" data-pos="l" fmt="0%"></colgroup>
10
+ <thead>
11
+ <tr data-id="r1" data-pos="8"><td style="font-weight:bold">Item</td><td>Cost</td><td>Share</td></tr>
12
+ </thead><tbody>
13
+ <tr data-id="r2" data-pos="G"><td>Rent</td><td n v="1200">$1,200.00</td><td n f="=B2/B$5" v="0.8">80%</td></tr>
14
+ <tr data-id="r3" data-pos="O"><td>Food</td><td n v="300">$300.00</td><td n f="=B3/B$5" v="0.2">20%</td></tr>
15
+ <tr data-id="r4" data-pos="V"></tr>
16
+ <tr data-id="r5" data-pos="d"><td style="font-weight:bold">Total</td><td n f="=SUM(B2:B3)" v="1500">$1,500.00</td></tr>
17
+ <tr data-id="r6" data-pos="l"><td colspan="3" style="text-align:center">Prices as of November</td><td hidden></td><td hidden></td></tr>
18
+ </tbody></table>
19
+ <table grid><colgroup><col data-id="cd" data-pos="G"><col data-id="ce" data-pos="V"></colgroup>
20
+ <tbody>
21
+ <tr data-id="r7" data-pos="G"><td>Lisbon</td><td n v="46095" fmt="mmm d, yyyy">Mar 14, 2026</td></tr>
22
+ <tr data-id="r8" data-pos="V"><td>Budget left</td><td n f="=5000-Budget!B5" v="3500" fmt="$#,##0.00">$3,500.00</td></tr>
23
+ </tbody></table></section>
24
+ </div></main></body></html>