@sixb/core 0.1.20 → 0.1.21

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 (681) hide show
  1. package/dist/actions/execution.d.ts.map +1 -1
  2. package/dist/actions/index.js +54 -47
  3. package/dist/actions/index.js.map +1 -1
  4. package/dist/actions/request.d.ts.map +1 -1
  5. package/dist/actions/run-authorization.d.ts +9 -0
  6. package/dist/actions/run-authorization.d.ts.map +1 -1
  7. package/dist/activity/connection.d.ts +62 -0
  8. package/dist/activity/connection.d.ts.map +1 -0
  9. package/dist/activity/device.d.ts +8 -0
  10. package/dist/activity/device.d.ts.map +1 -0
  11. package/dist/activity/execution.d.ts +48 -0
  12. package/dist/activity/execution.d.ts.map +1 -0
  13. package/dist/activity/service.d.ts +79 -0
  14. package/dist/activity/service.d.ts.map +1 -0
  15. package/dist/activity/shares.d.ts +24 -0
  16. package/dist/activity/shares.d.ts.map +1 -0
  17. package/dist/activity/timeline.d.ts +96 -0
  18. package/dist/activity/timeline.d.ts.map +1 -0
  19. package/dist/agents/index.d.ts +2 -1
  20. package/dist/agents/index.d.ts.map +1 -1
  21. package/dist/agents/index.js +63 -50
  22. package/dist/agents/index.js.map +1 -1
  23. package/dist/agents/request.d.ts.map +1 -1
  24. package/dist/agents/skills.d.ts.map +1 -1
  25. package/dist/agents/streams/index.js +3 -3
  26. package/dist/agents/streams/internal.js +3 -3
  27. package/dist/agents/types.d.ts +8 -8
  28. package/dist/agents/types.d.ts.map +1 -1
  29. package/dist/agents/validation.d.ts +1 -1
  30. package/dist/agents/validation.d.ts.map +1 -1
  31. package/dist/artifacts/address.d.ts +48 -0
  32. package/dist/artifacts/address.d.ts.map +1 -0
  33. package/dist/artifacts/csv.d.ts +22 -0
  34. package/dist/artifacts/csv.d.ts.map +1 -0
  35. package/dist/artifacts/errors.d.ts +11 -0
  36. package/dist/artifacts/errors.d.ts.map +1 -0
  37. package/dist/artifacts/execution.d.ts +43 -0
  38. package/dist/artifacts/execution.d.ts.map +1 -0
  39. package/dist/artifacts/frames/assets.d.ts +28 -0
  40. package/dist/artifacts/frames/assets.d.ts.map +1 -0
  41. package/dist/artifacts/frames/grants.d.ts +37 -0
  42. package/dist/artifacts/frames/grants.d.ts.map +1 -0
  43. package/dist/artifacts/frames/index.d.ts +10 -0
  44. package/dist/artifacts/frames/index.d.ts.map +1 -0
  45. package/dist/artifacts/frames/index.js +892 -0
  46. package/dist/artifacts/frames/index.js.map +14 -0
  47. package/dist/artifacts/frames/kit.d.ts +66 -0
  48. package/dist/artifacts/frames/kit.d.ts.map +1 -0
  49. package/dist/artifacts/frames/probe.d.ts +41 -0
  50. package/dist/artifacts/frames/probe.d.ts.map +1 -0
  51. package/dist/artifacts/frames/protocol.d.ts +98 -0
  52. package/dist/artifacts/frames/protocol.d.ts.map +1 -0
  53. package/dist/artifacts/frames/runtime.d.ts +13 -0
  54. package/dist/artifacts/frames/runtime.d.ts.map +1 -0
  55. package/dist/artifacts/html.d.ts +6 -0
  56. package/dist/artifacts/html.d.ts.map +1 -0
  57. package/dist/artifacts/ids.d.ts +5 -0
  58. package/dist/artifacts/ids.d.ts.map +1 -0
  59. package/dist/artifacts/index.d.ts +16 -0
  60. package/dist/artifacts/index.d.ts.map +1 -0
  61. package/dist/artifacts/index.js +125 -0
  62. package/dist/artifacts/index.js.map +10 -0
  63. package/dist/artifacts/kinds.d.ts +5 -0
  64. package/dist/artifacts/kinds.d.ts.map +1 -0
  65. package/dist/artifacts/limits.d.ts +28 -0
  66. package/dist/artifacts/limits.d.ts.map +1 -0
  67. package/dist/artifacts/outline.d.ts +44 -0
  68. package/dist/artifacts/outline.d.ts.map +1 -0
  69. package/dist/artifacts/publish/files.d.ts +15 -0
  70. package/dist/artifacts/publish/files.d.ts.map +1 -0
  71. package/dist/artifacts/publish/index.d.ts +5 -0
  72. package/dist/artifacts/publish/index.d.ts.map +1 -0
  73. package/dist/artifacts/publish/index.js +36 -0
  74. package/dist/artifacts/publish/index.js.map +9 -0
  75. package/dist/artifacts/publish/publish.d.ts +52 -0
  76. package/dist/artifacts/publish/publish.d.ts.map +1 -0
  77. package/dist/artifacts/publish/references.d.ts +27 -0
  78. package/dist/artifacts/publish/references.d.ts.map +1 -0
  79. package/dist/artifacts/publish/validate/document.d.ts +17 -0
  80. package/dist/artifacts/publish/validate/document.d.ts.map +1 -0
  81. package/dist/artifacts/publish/validate/file.d.ts +8 -0
  82. package/dist/artifacts/publish/validate/file.d.ts.map +1 -0
  83. package/dist/artifacts/publish/validate/sheet.d.ts +15 -0
  84. package/dist/artifacts/publish/validate/sheet.d.ts.map +1 -0
  85. package/dist/artifacts/publish/validate/slides.d.ts +21 -0
  86. package/dist/artifacts/publish/validate/slides.d.ts.map +1 -0
  87. package/dist/artifacts/references.d.ts +12 -0
  88. package/dist/artifacts/references.d.ts.map +1 -0
  89. package/dist/artifacts/resolve.d.ts +41 -0
  90. package/dist/artifacts/resolve.d.ts.map +1 -0
  91. package/dist/artifacts/theme.d.ts +19 -0
  92. package/dist/artifacts/theme.d.ts.map +1 -0
  93. package/dist/artifacts/warnings.d.ts +11 -0
  94. package/dist/artifacts/warnings.d.ts.map +1 -0
  95. package/dist/artifacts/workbook.d.ts +64 -0
  96. package/dist/artifacts/workbook.d.ts.map +1 -0
  97. package/dist/auth/index.js +10 -10
  98. package/dist/authorization/decision.d.ts +2 -0
  99. package/dist/authorization/decision.d.ts.map +1 -1
  100. package/dist/authorization/grant-kinds.d.ts +2 -2
  101. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  102. package/dist/authorization/index.js +6 -6
  103. package/dist/blob-storage/browser.js +1 -1
  104. package/dist/blob-storage/index.js +2 -2
  105. package/dist/blob-storage/internal.d.ts +1 -1
  106. package/dist/blob-storage/internal.d.ts.map +1 -1
  107. package/dist/blob-storage/internal.js +11 -5
  108. package/dist/blob-storage/internal.js.map +1 -1
  109. package/dist/blob-storage/media-type.d.ts +12 -0
  110. package/dist/blob-storage/media-type.d.ts.map +1 -1
  111. package/dist/bootstrap/index.js +53 -47
  112. package/dist/bootstrap/index.js.map +2 -2
  113. package/dist/{chunk-xfs8x8m9.js → chunk-0bphap9y.js} +5 -5
  114. package/dist/{chunk-1zq2p6g0.js → chunk-1cc1xaf3.js} +3 -3
  115. package/dist/chunk-3jms7je7.js +14 -0
  116. package/dist/chunk-3jms7je7.js.map +10 -0
  117. package/dist/{chunk-s54c868q.js → chunk-3qct2mdc.js} +3 -13
  118. package/dist/chunk-3qct2mdc.js.map +12 -0
  119. package/dist/{chunk-t7x8dmn0.js → chunk-431pyp2c.js} +3 -3
  120. package/dist/{chunk-c85m1hyj.js → chunk-447a5c0p.js} +2 -2
  121. package/dist/chunk-48qjhh6v.js +185 -0
  122. package/dist/chunk-48qjhh6v.js.map +13 -0
  123. package/dist/{chunk-ren4kg2j.js → chunk-561r0yc9.js} +8 -8
  124. package/dist/{chunk-5e43w60z.js → chunk-5948n82c.js} +2 -2
  125. package/dist/{chunk-yzwja0mj.js → chunk-5hx48dnn.js} +2 -2
  126. package/dist/{chunk-x6m907x7.js → chunk-5vems3nx.js} +5 -6
  127. package/dist/{chunk-x6m907x7.js.map → chunk-5vems3nx.js.map} +3 -3
  128. package/dist/{chunk-0rbyz4qy.js → chunk-61y5xs4p.js} +560 -164
  129. package/dist/{chunk-0rbyz4qy.js.map → chunk-61y5xs4p.js.map} +12 -9
  130. package/dist/chunk-65abf64x.js +13 -0
  131. package/dist/chunk-65abf64x.js.map +10 -0
  132. package/dist/{chunk-z3y5kg1x.js → chunk-6eqsgvxk.js} +3 -3
  133. package/dist/{chunk-z3y5kg1x.js.map → chunk-6eqsgvxk.js.map} +2 -2
  134. package/dist/chunk-6rqgmkde.js +2028 -0
  135. package/dist/chunk-6rqgmkde.js.map +29 -0
  136. package/dist/{chunk-d0bqz29d.js → chunk-6vb4st8k.js} +8 -4
  137. package/dist/{chunk-d0bqz29d.js.map → chunk-6vb4st8k.js.map} +3 -3
  138. package/dist/chunk-7q8t23v4.js +467 -0
  139. package/dist/chunk-7q8t23v4.js.map +14 -0
  140. package/dist/{chunk-5j58wjct.js → chunk-858emn8m.js} +6 -6
  141. package/dist/{chunk-hvsb78a1.js → chunk-8frc8a4j.js} +26 -26
  142. package/dist/{chunk-hvsb78a1.js.map → chunk-8frc8a4j.js.map} +2 -2
  143. package/dist/{chunk-3zxk45er.js → chunk-8ncg20rd.js} +3 -68
  144. package/dist/{chunk-3zxk45er.js.map → chunk-8ncg20rd.js.map} +4 -5
  145. package/dist/{chunk-n33z5bjw.js → chunk-918wwnaa.js} +490 -24
  146. package/dist/{chunk-n33z5bjw.js.map → chunk-918wwnaa.js.map} +13 -11
  147. package/dist/{chunk-rrzt8jdy.js → chunk-9j4jw7as.js} +103 -110
  148. package/dist/chunk-9j4jw7as.js.map +14 -0
  149. package/dist/chunk-9kgkfg6v.js +502 -0
  150. package/dist/chunk-9kgkfg6v.js.map +14 -0
  151. package/dist/chunk-a3faa34j.js +74 -0
  152. package/dist/chunk-a3faa34j.js.map +10 -0
  153. package/dist/{chunk-6c6sn0bh.js → chunk-akzryx9h.js} +335 -1167
  154. package/dist/{chunk-6c6sn0bh.js.map → chunk-akzryx9h.js.map} +18 -24
  155. package/dist/chunk-arns890k.js +10 -0
  156. package/dist/chunk-arns890k.js.map +10 -0
  157. package/dist/{chunk-hjzdd750.js → chunk-bk9svbcq.js} +11 -11
  158. package/dist/{chunk-hjzdd750.js.map → chunk-bk9svbcq.js.map} +2 -2
  159. package/dist/{chunk-hkc3jct7.js → chunk-c06hmxyy.js} +2 -10
  160. package/dist/chunk-c06hmxyy.js.map +10 -0
  161. package/dist/{chunk-6p49a5cq.js → chunk-c1rxbz5y.js} +3 -3
  162. package/dist/chunk-cfj9dfbb.js +288 -0
  163. package/dist/chunk-cfj9dfbb.js.map +12 -0
  164. package/dist/{chunk-bx9q3cwv.js → chunk-cn0fwwhy.js} +7 -7
  165. package/dist/{chunk-bx9q3cwv.js.map → chunk-cn0fwwhy.js.map} +1 -1
  166. package/dist/{chunk-gc4ntf7d.js → chunk-cwdzcv37.js} +1 -1
  167. package/dist/{chunk-fa02jy15.js → chunk-cy4mbddw.js} +1 -1
  168. package/dist/{chunk-9w055r5b.js → chunk-d09e3rax.js} +1 -1
  169. package/dist/chunk-d5rjr8c0.js +176 -0
  170. package/dist/chunk-d5rjr8c0.js.map +12 -0
  171. package/dist/{chunk-dk8tkk5f.js → chunk-d7dnxdep.js} +3 -3
  172. package/dist/{chunk-b38szspf.js → chunk-dhcv7yxc.js} +1 -1
  173. package/dist/{chunk-b38szspf.js.map → chunk-dhcv7yxc.js.map} +1 -1
  174. package/dist/{chunk-gsjm1wms.js → chunk-dhdha526.js} +8 -2
  175. package/dist/chunk-dhdha526.js.map +10 -0
  176. package/dist/{chunk-8mx7qw3y.js → chunk-dvd2fp9q.js} +2 -2
  177. package/dist/{chunk-8mx7qw3y.js.map → chunk-dvd2fp9q.js.map} +3 -3
  178. package/dist/{chunk-way52z4h.js → chunk-e17zdm62.js} +6 -12
  179. package/dist/{chunk-way52z4h.js.map → chunk-e17zdm62.js.map} +3 -4
  180. package/dist/{chunk-tpn40322.js → chunk-e6k4thh5.js} +11 -10
  181. package/dist/{chunk-tpn40322.js.map → chunk-e6k4thh5.js.map} +3 -3
  182. package/dist/{chunk-tw03bsmb.js → chunk-eptrvnby.js} +224 -3
  183. package/dist/chunk-eptrvnby.js.map +12 -0
  184. package/dist/{chunk-es1gxsbf.js → chunk-f4pamkt9.js} +8 -10
  185. package/dist/chunk-f4pamkt9.js.map +12 -0
  186. package/dist/chunk-ff5xkv0p.js +211 -0
  187. package/dist/chunk-ff5xkv0p.js.map +10 -0
  188. package/dist/{chunk-d09tj99x.js → chunk-g257jwnc.js} +10 -4
  189. package/dist/{chunk-d09tj99x.js.map → chunk-g257jwnc.js.map} +3 -3
  190. package/dist/chunk-g5bvzyyr.js +32 -0
  191. package/dist/chunk-g5bvzyyr.js.map +10 -0
  192. package/dist/chunk-hke9aeen.js +9 -0
  193. package/dist/chunk-hke9aeen.js.map +10 -0
  194. package/dist/{chunk-1sr8ryzk.js → chunk-hwksyjks.js} +122 -1
  195. package/dist/{chunk-1sr8ryzk.js.map → chunk-hwksyjks.js.map} +3 -3
  196. package/dist/chunk-jcfw4h7m.js +9 -0
  197. package/dist/chunk-jcfw4h7m.js.map +10 -0
  198. package/dist/{chunk-k6q3n2sc.js → chunk-k43ct2ke.js} +20 -11
  199. package/dist/chunk-k43ct2ke.js.map +12 -0
  200. package/dist/{chunk-3t2hgbgd.js → chunk-kge7k6ey.js} +40 -8
  201. package/dist/chunk-kge7k6ey.js.map +15 -0
  202. package/dist/{chunk-tg2cw67r.js → chunk-ky3j490c.js} +2 -2
  203. package/dist/chunk-mjddfa7k.js +129 -0
  204. package/dist/chunk-mjddfa7k.js.map +12 -0
  205. package/dist/{chunk-vpq4shxz.js → chunk-nn5xnx3s.js} +45 -10
  206. package/dist/{chunk-vpq4shxz.js.map → chunk-nn5xnx3s.js.map} +7 -6
  207. package/dist/{chunk-0yh890a4.js → chunk-q5e5tv4b.js} +35 -7
  208. package/dist/{chunk-0yh890a4.js.map → chunk-q5e5tv4b.js.map} +3 -3
  209. package/dist/{chunk-vyf9kfqf.js → chunk-q7gn29y3.js} +1 -1
  210. package/dist/{chunk-yevzdx4y.js → chunk-rmakanzx.js} +10 -12
  211. package/dist/{chunk-yevzdx4y.js.map → chunk-rmakanzx.js.map} +3 -4
  212. package/dist/{chunk-v9xd5wzd.js → chunk-s7jg7pmn.js} +1 -1
  213. package/dist/chunk-tbc1ngpd.js +642 -0
  214. package/dist/chunk-tbc1ngpd.js.map +18 -0
  215. package/dist/chunk-twe4dx8p.js +676 -0
  216. package/dist/chunk-twe4dx8p.js.map +15 -0
  217. package/dist/{chunk-9dmt152s.js → chunk-vf57cr4t.js} +2 -2
  218. package/dist/{chunk-9ybhtmg4.js → chunk-vvxtn22d.js} +1 -1
  219. package/dist/{chunk-jhm3zsa7.js → chunk-wkv3h3q7.js} +64 -2
  220. package/dist/{chunk-jhm3zsa7.js.map → chunk-wkv3h3q7.js.map} +3 -3
  221. package/dist/chunk-x0v3jd47.js +124 -0
  222. package/dist/chunk-x0v3jd47.js.map +10 -0
  223. package/dist/{chunk-7t429e3f.js → chunk-xvsc5m8n.js} +1 -1
  224. package/dist/{chunk-z4m0yz8c.js → chunk-y5tah2kf.js} +1 -1
  225. package/dist/{chunk-fkgc1wt8.js → chunk-z58tm0hm.js} +2 -2
  226. package/dist/datasets/builders.d.ts +15 -2
  227. package/dist/datasets/builders.d.ts.map +1 -1
  228. package/dist/datasets/column-index.d.ts +7 -0
  229. package/dist/datasets/column-index.d.ts.map +1 -0
  230. package/dist/datasets/execution.d.ts +3 -2
  231. package/dist/datasets/execution.d.ts.map +1 -1
  232. package/dist/datasets/write.js +8 -8
  233. package/dist/error-reporting/internal.js +4 -4
  234. package/dist/errors/internal.d.ts +1 -0
  235. package/dist/errors/internal.d.ts.map +1 -1
  236. package/dist/errors/internal.js +7 -4
  237. package/dist/errors/internal.js.map +1 -1
  238. package/dist/events/execution.d.ts +12 -2
  239. package/dist/events/execution.d.ts.map +1 -1
  240. package/dist/events/index.js +4 -4
  241. package/dist/execution/agent.js +56 -49
  242. package/dist/execution/agent.js.map +1 -1
  243. package/dist/execution/authorized-object-reader.d.ts +52 -11
  244. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  245. package/dist/execution/object-reader-clearance.d.ts +41 -0
  246. package/dist/execution/object-reader-clearance.d.ts.map +1 -0
  247. package/dist/execution/object-reader-ontology.d.ts +12 -0
  248. package/dist/execution/object-reader-ontology.d.ts.map +1 -0
  249. package/dist/execution/object-reader-security.d.ts +45 -0
  250. package/dist/execution/object-reader-security.d.ts.map +1 -0
  251. package/dist/execution/primitive.js +54 -47
  252. package/dist/execution/primitive.js.map +1 -1
  253. package/dist/execution/request.js +48 -41
  254. package/dist/execution/request.js.map +2 -2
  255. package/dist/http/api-routes.d.ts.map +1 -1
  256. package/dist/http/index.js +1 -1
  257. package/dist/index.d.ts +20 -4
  258. package/dist/index.d.ts.map +1 -1
  259. package/dist/index.js +112 -97
  260. package/dist/index.js.map +1 -1
  261. package/dist/lake-storage/in-memory.d.ts +1 -0
  262. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  263. package/dist/lake-storage/index.d.ts +6 -3
  264. package/dist/lake-storage/index.d.ts.map +1 -1
  265. package/dist/lake-storage/index.js +21 -13
  266. package/dist/lake-storage/index.js.map +1 -1
  267. package/dist/lake-storage/lineage.d.ts +94 -0
  268. package/dist/lake-storage/lineage.d.ts.map +1 -0
  269. package/dist/lake-storage/sql-transforms.d.ts +45 -0
  270. package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
  271. package/dist/lake-storage/types.d.ts +55 -1
  272. package/dist/lake-storage/types.d.ts.map +1 -1
  273. package/dist/lake-storage/version-inputs.d.ts +14 -3
  274. package/dist/lake-storage/version-inputs.d.ts.map +1 -1
  275. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  276. package/dist/materializer/index.js +31 -30
  277. package/dist/materializer/index.js.map +1 -1
  278. package/dist/models/execution/index.js +25 -24
  279. package/dist/models/execution/index.js.map +1 -1
  280. package/dist/objects/clearance-redaction.d.ts +27 -0
  281. package/dist/objects/clearance-redaction.d.ts.map +1 -0
  282. package/dist/objects/index.js +54 -47
  283. package/dist/objects/index.js.map +1 -1
  284. package/dist/objects/link/authorization.d.ts +8 -5
  285. package/dist/objects/link/authorization.d.ts.map +1 -1
  286. package/dist/objects/link/upsert-batch.d.ts.map +1 -1
  287. package/dist/objects/object/delete.d.ts.map +1 -1
  288. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  289. package/dist/objects/object/upsert.d.ts.map +1 -1
  290. package/dist/objects/property-clearance.d.ts +47 -24
  291. package/dist/objects/property-clearance.d.ts.map +1 -1
  292. package/dist/objects/query/clearance-admission.d.ts +10 -0
  293. package/dist/objects/query/clearance-admission.d.ts.map +1 -0
  294. package/dist/objects/query/index.js +29 -28
  295. package/dist/objects/query/index.js.map +1 -1
  296. package/dist/objects/query/link-query-clearance.d.ts +21 -0
  297. package/dist/objects/query/link-query-clearance.d.ts.map +1 -0
  298. package/dist/ontology/builders.d.ts.map +1 -1
  299. package/dist/ontology/docs-markdown.d.ts +1 -1
  300. package/dist/ontology/docs-markdown.d.ts.map +1 -1
  301. package/dist/ontology/index.js +7 -7
  302. package/dist/ontology/internal.js +4 -4
  303. package/dist/ontology/internal.js.map +1 -1
  304. package/dist/pipelines/index.d.ts +2 -0
  305. package/dist/pipelines/index.d.ts.map +1 -1
  306. package/dist/pipelines/index.js +47 -35
  307. package/dist/pipelines/index.js.map +1 -1
  308. package/dist/pipelines/lineage.d.ts +17 -0
  309. package/dist/pipelines/lineage.d.ts.map +1 -0
  310. package/dist/projections/internal.d.ts +2 -2
  311. package/dist/projections/internal.js +30 -29
  312. package/dist/projections/internal.js.map +1 -1
  313. package/dist/runtime/create.d.ts +3 -0
  314. package/dist/runtime/create.d.ts.map +1 -1
  315. package/dist/runtime/host.d.ts +6 -0
  316. package/dist/runtime/host.d.ts.map +1 -1
  317. package/dist/runtime/internal.d.ts +2 -0
  318. package/dist/runtime/internal.d.ts.map +1 -1
  319. package/dist/runtime/internal.js +46 -42
  320. package/dist/runtime/internal.js.map +1 -1
  321. package/dist/runtime/ontology-mutations.d.ts +2 -0
  322. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  323. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  324. package/dist/runtime/sixb.d.ts +8 -0
  325. package/dist/runtime/sixb.d.ts.map +1 -1
  326. package/dist/sandboxes/auth.d.ts +16 -0
  327. package/dist/sandboxes/auth.d.ts.map +1 -1
  328. package/dist/sandboxes/config.d.ts.map +1 -1
  329. package/dist/sandboxes/configuration.d.ts +26 -0
  330. package/dist/sandboxes/configuration.d.ts.map +1 -1
  331. package/dist/sandboxes/index.d.ts +1 -1
  332. package/dist/sandboxes/index.d.ts.map +1 -1
  333. package/dist/sandboxes/index.js +14 -13
  334. package/dist/sandboxes/index.js.map +1 -1
  335. package/dist/sandboxes/sandbox.d.ts +28 -5
  336. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  337. package/dist/security/applied-markings-contribution.d.ts +58 -0
  338. package/dist/security/applied-markings-contribution.d.ts.map +1 -0
  339. package/dist/security/applied-markings-host.d.ts +10 -0
  340. package/dist/security/applied-markings-host.d.ts.map +1 -0
  341. package/dist/security/applied-markings-snapshot.d.ts +67 -0
  342. package/dist/security/applied-markings-snapshot.d.ts.map +1 -0
  343. package/dist/security/applied-markings.d.ts +73 -0
  344. package/dist/security/applied-markings.d.ts.map +1 -0
  345. package/dist/security/dataset-version-markings.d.ts +47 -0
  346. package/dist/security/dataset-version-markings.d.ts.map +1 -0
  347. package/dist/security/grants.d.ts +3 -2
  348. package/dist/security/grants.d.ts.map +1 -1
  349. package/dist/security/index.d.ts +2 -1
  350. package/dist/security/index.d.ts.map +1 -1
  351. package/dist/security/internal.d.ts +15 -0
  352. package/dist/security/internal.d.ts.map +1 -0
  353. package/dist/security/internal.js +135 -0
  354. package/dist/security/internal.js.map +10 -0
  355. package/dist/security/marking-propagation.d.ts +62 -0
  356. package/dist/security/marking-propagation.d.ts.map +1 -0
  357. package/dist/security/marking-sets.d.ts +14 -0
  358. package/dist/security/marking-sets.d.ts.map +1 -0
  359. package/dist/security/markings.d.ts +6 -3
  360. package/dist/security/markings.d.ts.map +1 -1
  361. package/dist/security/pipeline-markings.d.ts +20 -0
  362. package/dist/security/pipeline-markings.d.ts.map +1 -0
  363. package/dist/security/project.d.ts +4 -0
  364. package/dist/security/project.d.ts.map +1 -0
  365. package/dist/security/projection-markings.d.ts +71 -0
  366. package/dist/security/projection-markings.d.ts.map +1 -0
  367. package/dist/security/public.js +2 -2
  368. package/dist/security/redactions.d.ts +4 -1
  369. package/dist/security/redactions.d.ts.map +1 -1
  370. package/dist/security/types.d.ts +22 -2
  371. package/dist/security/types.d.ts.map +1 -1
  372. package/dist/security/validation.d.ts.map +1 -1
  373. package/dist/shares/internal.js +24 -23
  374. package/dist/shares/internal.js.map +2 -2
  375. package/dist/storage/action-runs/failure.js +3 -3
  376. package/dist/storage/action-runs/in-memory.d.ts +4 -0
  377. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  378. package/dist/storage/action-runs/types.d.ts +8 -0
  379. package/dist/storage/action-runs/types.d.ts.map +1 -1
  380. package/dist/storage/activity/in-memory.d.ts +55 -0
  381. package/dist/storage/activity/in-memory.d.ts.map +1 -0
  382. package/dist/storage/activity/index.d.ts +3 -0
  383. package/dist/storage/activity/index.d.ts.map +1 -0
  384. package/dist/storage/activity/policy.d.ts +96 -0
  385. package/dist/storage/activity/policy.d.ts.map +1 -0
  386. package/dist/storage/activity/types.d.ts +191 -0
  387. package/dist/storage/activity/types.d.ts.map +1 -0
  388. package/dist/storage/agents/in-memory.d.ts +4 -0
  389. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  390. package/dist/storage/agents/provider.d.ts.map +1 -1
  391. package/dist/storage/agents/provider.js +2 -5
  392. package/dist/storage/agents/provider.js.map +1 -1
  393. package/dist/storage/agents/types.d.ts +9 -8
  394. package/dist/storage/agents/types.d.ts.map +1 -1
  395. package/dist/storage/ai-limits/enforcement.js +3 -3
  396. package/dist/storage/artifacts/errors.d.ts +8 -0
  397. package/dist/storage/artifacts/errors.d.ts.map +1 -0
  398. package/dist/storage/artifacts/in-memory.d.ts +34 -0
  399. package/dist/storage/artifacts/in-memory.d.ts.map +1 -0
  400. package/dist/storage/artifacts/index.d.ts +5 -0
  401. package/dist/storage/artifacts/index.d.ts.map +1 -0
  402. package/dist/storage/artifacts/record.d.ts +17 -0
  403. package/dist/storage/artifacts/record.d.ts.map +1 -0
  404. package/dist/storage/artifacts/types.d.ts +184 -0
  405. package/dist/storage/artifacts/types.d.ts.map +1 -0
  406. package/dist/storage/auth/in-memory/sessions.d.ts +2 -1
  407. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  408. package/dist/storage/auth/index.d.ts +1 -1
  409. package/dist/storage/auth/index.d.ts.map +1 -1
  410. package/dist/storage/auth/types.d.ts +19 -0
  411. package/dist/storage/auth/types.d.ts.map +1 -1
  412. package/dist/storage/connector-connections/provider.js +2 -2
  413. package/dist/storage/executions/in-memory.d.ts +2 -1
  414. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  415. package/dist/storage/executions/index.d.ts +1 -1
  416. package/dist/storage/executions/index.d.ts.map +1 -1
  417. package/dist/storage/executions/provider.d.ts +2 -0
  418. package/dist/storage/executions/provider.d.ts.map +1 -1
  419. package/dist/storage/executions/provider.js +9 -223
  420. package/dist/storage/executions/provider.js.map +3 -4
  421. package/dist/storage/executions/types.d.ts +31 -0
  422. package/dist/storage/executions/types.d.ts.map +1 -1
  423. package/dist/storage/file-upload-sessions/provider.js +11 -11
  424. package/dist/storage/in-memory/index.d.ts +8 -0
  425. package/dist/storage/in-memory/index.d.ts.map +1 -1
  426. package/dist/storage/index.d.ts +6 -4
  427. package/dist/storage/index.d.ts.map +1 -1
  428. package/dist/storage/index.js +54 -53
  429. package/dist/storage/index.js.map +1 -1
  430. package/dist/storage/internal.d.ts +3 -0
  431. package/dist/storage/internal.d.ts.map +1 -1
  432. package/dist/storage/internal.js +66 -16
  433. package/dist/storage/internal.js.map +1 -1
  434. package/dist/storage/ontology/in-memory/sources.d.ts +2 -1
  435. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  436. package/dist/storage/ontology/index.d.ts +1 -1
  437. package/dist/storage/ontology/index.d.ts.map +1 -1
  438. package/dist/storage/ontology/sources.d.ts +15 -0
  439. package/dist/storage/ontology/sources.d.ts.map +1 -1
  440. package/dist/storage/projection-runs/provider.js +3 -3
  441. package/dist/storage/share-grants/in-memory.d.ts +2 -1
  442. package/dist/storage/share-grants/in-memory.d.ts.map +1 -1
  443. package/dist/storage/share-grants/index.d.ts +1 -1
  444. package/dist/storage/share-grants/index.d.ts.map +1 -1
  445. package/dist/storage/share-grants/types.d.ts +6 -0
  446. package/dist/storage/share-grants/types.d.ts.map +1 -1
  447. package/dist/storage/types.d.ts +4 -0
  448. package/dist/storage/types.d.ts.map +1 -1
  449. package/dist/storage/workflow-runs/in-memory.d.ts +4 -0
  450. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  451. package/dist/storage/workflow-runs/provider.js +13 -12
  452. package/dist/storage/workflow-runs/provider.js.map +1 -1
  453. package/dist/storage/workflow-runs/types.d.ts +5 -0
  454. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  455. package/dist/syncs/index.js +35 -34
  456. package/dist/syncs/index.js.map +1 -1
  457. package/dist/testing/action-run-storage-contract.d.ts.map +1 -1
  458. package/dist/testing/activity-storage-contract.d.ts +14 -0
  459. package/dist/testing/activity-storage-contract.d.ts.map +1 -0
  460. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  461. package/dist/testing/artifact-storage-contract.d.ts +13 -0
  462. package/dist/testing/artifact-storage-contract.d.ts.map +1 -0
  463. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  464. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  465. package/dist/testing/index.d.ts +2 -0
  466. package/dist/testing/index.d.ts.map +1 -1
  467. package/dist/testing/index.js +4488 -3137
  468. package/dist/testing/index.js.map +14 -12
  469. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
  470. package/dist/testing/lake-storage-contract.d.ts +2 -0
  471. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  472. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  473. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
  474. package/dist/webhooks/internal.js +27 -26
  475. package/dist/webhooks/internal.js.map +2 -2
  476. package/dist/workers/index.js +2 -2
  477. package/dist/workflows/builders.d.ts.map +1 -1
  478. package/dist/workflows/index.js +57 -51
  479. package/dist/workflows/index.js.map +1 -1
  480. package/dist/workflows/types.d.ts +9 -0
  481. package/dist/workflows/types.d.ts.map +1 -1
  482. package/dist/workflows/validation.d.ts +7 -0
  483. package/dist/workflows/validation.d.ts.map +1 -1
  484. package/package.json +25 -1
  485. package/src/actions/execution.ts +18 -13
  486. package/src/actions/request.ts +18 -3
  487. package/src/actions/run-authorization.ts +23 -0
  488. package/src/activity/README.md +155 -0
  489. package/src/activity/connection.ts +217 -0
  490. package/src/activity/device.ts +41 -0
  491. package/src/activity/execution.ts +210 -0
  492. package/src/activity/service.ts +274 -0
  493. package/src/activity/shares.ts +62 -0
  494. package/src/activity/timeline.ts +424 -0
  495. package/src/agents/index.ts +8 -3
  496. package/src/agents/request.ts +5 -0
  497. package/src/agents/skills.ts +6 -0
  498. package/src/agents/types.ts +8 -8
  499. package/src/agents/validation.ts +2 -0
  500. package/src/artifacts/address.ts +132 -0
  501. package/src/artifacts/csv.ts +108 -0
  502. package/src/artifacts/errors.ts +21 -0
  503. package/src/artifacts/execution.ts +153 -0
  504. package/src/artifacts/frames/assets.ts +88 -0
  505. package/src/artifacts/frames/grants.ts +124 -0
  506. package/src/artifacts/frames/index.ts +15 -0
  507. package/src/artifacts/frames/kit.ts +392 -0
  508. package/src/artifacts/frames/probe.ts +309 -0
  509. package/src/artifacts/frames/protocol.ts +174 -0
  510. package/src/artifacts/frames/runtime.ts +213 -0
  511. package/src/artifacts/html.ts +25 -0
  512. package/src/artifacts/ids.ts +18 -0
  513. package/src/artifacts/index.ts +61 -0
  514. package/src/artifacts/kinds.ts +8 -0
  515. package/src/artifacts/limits.ts +27 -0
  516. package/src/artifacts/outline.ts +62 -0
  517. package/src/artifacts/publish/files.ts +87 -0
  518. package/src/artifacts/publish/index.ts +12 -0
  519. package/src/artifacts/publish/publish.ts +250 -0
  520. package/src/artifacts/publish/references.ts +130 -0
  521. package/src/artifacts/publish/validate/document.ts +114 -0
  522. package/src/artifacts/publish/validate/file.ts +19 -0
  523. package/src/artifacts/publish/validate/sheet.ts +251 -0
  524. package/src/artifacts/publish/validate/slides.ts +134 -0
  525. package/src/artifacts/references.ts +11 -0
  526. package/src/artifacts/resolve.ts +97 -0
  527. package/src/artifacts/theme.ts +116 -0
  528. package/src/artifacts/warnings.ts +10 -0
  529. package/src/artifacts/workbook.ts +315 -0
  530. package/src/authorization/decision.ts +5 -0
  531. package/src/authorization/grant-kinds.ts +14 -2
  532. package/src/blob-storage/internal.ts +1 -1
  533. package/src/blob-storage/media-type.ts +69 -0
  534. package/src/datasets/builders.ts +66 -2
  535. package/src/datasets/column-index.ts +19 -0
  536. package/src/datasets/execution.ts +23 -9
  537. package/src/errors/internal.ts +1 -0
  538. package/src/events/execution.ts +134 -21
  539. package/src/execution/authorized-object-reader.ts +270 -256
  540. package/src/execution/object-reader-clearance.ts +91 -0
  541. package/src/execution/object-reader-ontology.ts +63 -0
  542. package/src/execution/object-reader-security.ts +146 -0
  543. package/src/http/api-routes.ts +125 -0
  544. package/src/index.ts +71 -3
  545. package/src/lake-storage/in-memory.ts +26 -3
  546. package/src/lake-storage/index.ts +13 -1
  547. package/src/lake-storage/lineage.ts +385 -0
  548. package/src/lake-storage/sql-transforms.ts +45 -0
  549. package/src/lake-storage/types.ts +59 -1
  550. package/src/lake-storage/version-inputs.ts +35 -6
  551. package/src/maintenance/ontology-maintenance.ts +15 -0
  552. package/src/objects/clearance-redaction.ts +138 -0
  553. package/src/objects/link/authorization.ts +27 -7
  554. package/src/objects/link/remove.ts +2 -2
  555. package/src/objects/link/upsert-batch.ts +7 -5
  556. package/src/objects/link/upsert.ts +2 -2
  557. package/src/objects/object/delete.ts +2 -0
  558. package/src/objects/object/upsert-batch.ts +2 -4
  559. package/src/objects/object/upsert.ts +2 -3
  560. package/src/objects/property-clearance.ts +171 -152
  561. package/src/objects/query/clearance-admission.ts +112 -0
  562. package/src/objects/query/link-query-clearance.ts +73 -0
  563. package/src/ontology/builders.ts +12 -1
  564. package/src/ontology/docs-markdown.ts +1 -1
  565. package/src/pipelines/index.ts +2 -0
  566. package/src/pipelines/lineage.ts +45 -0
  567. package/src/projections/internal.ts +2 -2
  568. package/src/runtime/create.ts +4 -0
  569. package/src/runtime/host.ts +55 -0
  570. package/src/runtime/internal.ts +2 -0
  571. package/src/runtime/ontology-mutations.ts +19 -4
  572. package/src/runtime/resolve-definitions.ts +66 -3
  573. package/src/runtime/sixb.ts +18 -1
  574. package/src/sandboxes/README.md +29 -7
  575. package/src/sandboxes/auth.ts +16 -0
  576. package/src/sandboxes/config.ts +2 -7
  577. package/src/sandboxes/configuration.ts +61 -7
  578. package/src/sandboxes/index.ts +1 -0
  579. package/src/sandboxes/sandbox.ts +27 -5
  580. package/src/security/applied-markings-contribution.ts +277 -0
  581. package/src/security/applied-markings-host.ts +41 -0
  582. package/src/security/applied-markings-snapshot.ts +235 -0
  583. package/src/security/applied-markings.ts +405 -0
  584. package/src/security/dataset-version-markings.ts +163 -0
  585. package/src/security/grants.ts +39 -4
  586. package/src/security/index.ts +3 -0
  587. package/src/security/internal.ts +18 -0
  588. package/src/security/marking-propagation.ts +255 -0
  589. package/src/security/marking-sets.ts +42 -0
  590. package/src/security/markings.ts +29 -178
  591. package/src/security/pipeline-markings.ts +175 -0
  592. package/src/security/project.ts +8 -0
  593. package/src/security/projection-markings.ts +421 -0
  594. package/src/security/redactions.ts +7 -2
  595. package/src/security/types.ts +20 -2
  596. package/src/security/validation.ts +11 -4
  597. package/src/storage/action-runs/in-memory.ts +18 -0
  598. package/src/storage/action-runs/types.ts +8 -0
  599. package/src/storage/activity/in-memory.ts +374 -0
  600. package/src/storage/activity/index.ts +27 -0
  601. package/src/storage/activity/policy.ts +430 -0
  602. package/src/storage/activity/types.ts +211 -0
  603. package/src/storage/agents/in-memory.ts +10 -0
  604. package/src/storage/agents/provider.ts +2 -13
  605. package/src/storage/agents/types.ts +9 -16
  606. package/src/storage/artifacts/errors.ts +16 -0
  607. package/src/storage/artifacts/in-memory.ts +240 -0
  608. package/src/storage/artifacts/index.ts +30 -0
  609. package/src/storage/artifacts/record.ts +200 -0
  610. package/src/storage/artifacts/types.ts +209 -0
  611. package/src/storage/auth/in-memory/sessions.ts +21 -0
  612. package/src/storage/auth/index.ts +2 -0
  613. package/src/storage/auth/types.ts +18 -0
  614. package/src/storage/executions/in-memory.ts +61 -1
  615. package/src/storage/executions/index.ts +3 -0
  616. package/src/storage/executions/provider.ts +12 -0
  617. package/src/storage/executions/types.ts +30 -0
  618. package/src/storage/in-memory/index.ts +16 -0
  619. package/src/storage/index.ts +63 -0
  620. package/src/storage/internal.ts +30 -0
  621. package/src/storage/ontology/in-memory/sources.ts +23 -0
  622. package/src/storage/ontology/index.ts +2 -0
  623. package/src/storage/ontology/sources.ts +17 -0
  624. package/src/storage/share-grants/in-memory.ts +8 -0
  625. package/src/storage/share-grants/index.ts +1 -0
  626. package/src/storage/share-grants/types.ts +8 -0
  627. package/src/storage/types.ts +4 -0
  628. package/src/storage/workflow-runs/in-memory.ts +16 -0
  629. package/src/storage/workflow-runs/types.ts +5 -0
  630. package/src/testing/action-run-storage-contract.ts +25 -0
  631. package/src/testing/activity-storage-contract.ts +840 -0
  632. package/src/testing/agent-storage-contract.ts +22 -21
  633. package/src/testing/artifact-storage-contract.ts +517 -0
  634. package/src/testing/auth-storage-contract.ts +47 -0
  635. package/src/testing/execution-storage-contract.ts +147 -1
  636. package/src/testing/index.ts +9 -0
  637. package/src/testing/lake-merge-storage-contract.ts +38 -0
  638. package/src/testing/lake-storage-contract.ts +247 -2
  639. package/src/testing/materializer-storage-contract.ts +1 -0
  640. package/src/testing/ontology-storage-contract.ts +57 -2
  641. package/src/testing/share-grant-storage-contract.ts +15 -0
  642. package/src/workflows/builders.ts +14 -0
  643. package/src/workflows/types.ts +9 -0
  644. package/src/workflows/validation.ts +72 -0
  645. package/dist/chunk-1k89ecfr.js +0 -85
  646. package/dist/chunk-1k89ecfr.js.map +0 -10
  647. package/dist/chunk-3t2hgbgd.js.map +0 -15
  648. package/dist/chunk-4vyr1j8f.js +0 -128
  649. package/dist/chunk-4vyr1j8f.js.map +0 -11
  650. package/dist/chunk-9gyp8hg1.js +0 -363
  651. package/dist/chunk-9gyp8hg1.js.map +0 -14
  652. package/dist/chunk-es1gxsbf.js.map +0 -13
  653. package/dist/chunk-gsjm1wms.js.map +0 -10
  654. package/dist/chunk-hkc3jct7.js.map +0 -10
  655. package/dist/chunk-k6q3n2sc.js.map +0 -12
  656. package/dist/chunk-rrzt8jdy.js.map +0 -14
  657. package/dist/chunk-s16apyk9.js +0 -256
  658. package/dist/chunk-s16apyk9.js.map +0 -16
  659. package/dist/chunk-s54c868q.js.map +0 -12
  660. package/dist/chunk-tw03bsmb.js.map +0 -11
  661. /package/dist/{chunk-xfs8x8m9.js.map → chunk-0bphap9y.js.map} +0 -0
  662. /package/dist/{chunk-1zq2p6g0.js.map → chunk-1cc1xaf3.js.map} +0 -0
  663. /package/dist/{chunk-t7x8dmn0.js.map → chunk-431pyp2c.js.map} +0 -0
  664. /package/dist/{chunk-c85m1hyj.js.map → chunk-447a5c0p.js.map} +0 -0
  665. /package/dist/{chunk-ren4kg2j.js.map → chunk-561r0yc9.js.map} +0 -0
  666. /package/dist/{chunk-5e43w60z.js.map → chunk-5948n82c.js.map} +0 -0
  667. /package/dist/{chunk-yzwja0mj.js.map → chunk-5hx48dnn.js.map} +0 -0
  668. /package/dist/{chunk-5j58wjct.js.map → chunk-858emn8m.js.map} +0 -0
  669. /package/dist/{chunk-6p49a5cq.js.map → chunk-c1rxbz5y.js.map} +0 -0
  670. /package/dist/{chunk-gc4ntf7d.js.map → chunk-cwdzcv37.js.map} +0 -0
  671. /package/dist/{chunk-fa02jy15.js.map → chunk-cy4mbddw.js.map} +0 -0
  672. /package/dist/{chunk-9w055r5b.js.map → chunk-d09e3rax.js.map} +0 -0
  673. /package/dist/{chunk-dk8tkk5f.js.map → chunk-d7dnxdep.js.map} +0 -0
  674. /package/dist/{chunk-tg2cw67r.js.map → chunk-ky3j490c.js.map} +0 -0
  675. /package/dist/{chunk-vyf9kfqf.js.map → chunk-q7gn29y3.js.map} +0 -0
  676. /package/dist/{chunk-v9xd5wzd.js.map → chunk-s7jg7pmn.js.map} +0 -0
  677. /package/dist/{chunk-9dmt152s.js.map → chunk-vf57cr4t.js.map} +0 -0
  678. /package/dist/{chunk-9ybhtmg4.js.map → chunk-vvxtn22d.js.map} +0 -0
  679. /package/dist/{chunk-7t429e3f.js.map → chunk-xvsc5m8n.js.map} +0 -0
  680. /package/dist/{chunk-z4m0yz8c.js.map → chunk-y5tah2kf.js.map} +0 -0
  681. /package/dist/{chunk-fkgc1wt8.js.map → chunk-z58tm0hm.js.map} +0 -0
@@ -0,0 +1,14 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/artifacts/frames/kit.ts", "../src/artifacts/frames/runtime.ts", "../src/artifacts/frames/assets.ts", "../src/artifacts/frames/grants.ts", "../src/artifacts/frames/probe.ts"],
4
+ "sourcesContent": [
5
+ "const FONTS = {\n \"--font-sans\":\n '\"SF Pro Text\", \"SF Pro Display\", \"Segoe UI Variable Text\", \"Segoe UI\", system-ui, sans-serif',\n \"--font-serif\": 'ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif',\n \"--font-mono\": '\"SF Mono\", \"Geist Mono\", \"JetBrains Mono\", ui-monospace, monospace',\n} as const\n\n/**\n * Sixb's default theme, light and dark: the values `@sixb/ui`'s globals.css gives the tokens the\n * app sends into a frame, which an artifact's theme may set. The kit starts from the light one\n * until the app's arrive, and the layout check measures a deck in both, since a deck follows the\n * app's mode and the project's own theme is out of the sandbox's reach.\n */\nexport const FRAME_DEFAULT_THEMES = {\n light: {\n dark: false,\n tokens: {\n \"--background\": \"#fafafa\",\n \"--foreground\": \"#101010\",\n \"--card\": \"#ffffff\",\n \"--card-foreground\": \"#101010\",\n \"--muted\": \"#f4f4f4\",\n \"--muted-foreground\": \"#5f5f5f\",\n \"--primary\": \"#0a0a0a\",\n \"--primary-foreground\": \"#ffffff\",\n \"--accent\": \"#f0f0f0\",\n \"--accent-foreground\": \"#202020\",\n \"--border\": \"#e2e2e2\",\n \"--chart-1\": \"#101010\",\n \"--chart-2\": \"#404040\",\n \"--chart-3\": \"#737373\",\n \"--chart-4\": \"#a3a3a3\",\n \"--chart-5\": \"#d4d4d4\",\n ...FONTS,\n \"--radius\": \"0.5rem\",\n },\n },\n dark: {\n dark: true,\n tokens: {\n \"--background\": \"#0a0a0a\",\n \"--foreground\": \"#f4f4f4\",\n \"--card\": \"#141414\",\n \"--card-foreground\": \"#f4f4f4\",\n \"--muted\": \"#1c1c1c\",\n \"--muted-foreground\": \"#8a8a8a\",\n \"--primary\": \"#f4f4f4\",\n \"--primary-foreground\": \"#0a0a0a\",\n \"--accent\": \"#1c1c1c\",\n \"--accent-foreground\": \"#f4f4f4\",\n \"--border\": \"#262626\",\n \"--chart-1\": \"#f4f4f4\",\n \"--chart-2\": \"#c4c4c4\",\n \"--chart-3\": \"#8a8a8a\",\n \"--chart-4\": \"#5f5f5f\",\n \"--chart-5\": \"#404040\",\n ...FONTS,\n // `.dark` keeps the light radius.\n \"--radius\": \"0.5rem\",\n },\n },\n} as const\n\nconst LIGHT = FRAME_DEFAULT_THEMES.light.tokens\n\n/**\n * The kit the frame injects into a deck: the stage that shows one slide or all of them, the slide\n * type scale, the layouts a slide picks by class, the slide chrome, and a few components. It reads\n * the app's theme tokens, which the app sends into the frame, with the light defaults until they\n * arrive. Everything sits in cascade layers, so the deck's own CSS, unlayered, always wins.\n */\nexport const FRAME_KIT_CSS = `\n@layer sixb-kit, sixb-theme;\n\n@layer sixb-kit {\n :root {\n${Object.entries(LIGHT)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join(\"\\n\")}\n --sixb-scale: 1;\n --sixb-overview-scale: 0.25;\n --sixb-columns: 4;\n --sixb-stage: ${LIGHT[\"--muted\"]};\n --sixb-stage-border: ${LIGHT[\"--border\"]};\n --sixb-stage-foreground: ${LIGHT[\"--foreground\"]};\n }\n\n *, *::before, *::after { box-sizing: border-box; }\n html, body { margin: 0; padding: 0; }\n body {\n background: var(--muted);\n color: var(--foreground);\n font-family: var(--font-sans);\n -webkit-font-smoothing: antialiased;\n }\n\n /*\n * The stage: a slide's size and scale, which slides show, and the stage around them, in the\n * app's colors (--sixb-stage and its kin, which only the app's theme sets). A deck's own CSS, unlayered,\n * wins over everything else in the kit, so these alone are important: an important declaration\n * in a layer wins over every unlayered one, a deck's own important ones included. Otherwise a\n * deck that sets display on its closing slide shows it under every other, and one that sets its\n * body's background repaints the stage.\n */\n html.sixb-deck section.slide { width: 1280px !important; height: 720px !important; flex: none !important; }\n\n /* One slide at a time, scaled to fit and centered on the stage. */\n html.sixb-deck:not([data-mode=\"overview\"]),\n html.sixb-deck:not([data-mode=\"overview\"]) body { height: 100% !important; overflow: hidden !important; }\n html.sixb-deck:not([data-mode=\"overview\"]) body {\n margin: 0 !important;\n padding: 0 !important;\n display: grid !important;\n place-items: center !important;\n background: var(--sixb-stage) !important;\n }\n html.sixb-deck:not([data-mode=\"overview\"]) section.slide { zoom: var(--sixb-scale) !important; }\n html.sixb-deck:not([data-mode=\"overview\"]) section.slide:not([data-current]) { display: none !important; }\n html.sixb-deck[data-mode=\"slide\"] section.slide {\n border-radius: calc(10px / var(--sixb-scale)) !important;\n box-shadow: 0 0 0 calc(1px / var(--sixb-scale)) var(--sixb-stage-border) !important;\n }\n /* Filled, the slide is the whole frame, as a thumbnail or an embed shows it; presented, it\n fills the page on black. */\n html.sixb-deck:is([data-mode=\"fill\"], [data-mode=\"present\"]) section.slide {\n border-radius: 0 !important;\n box-shadow: none !important;\n }\n html.sixb-deck[data-mode=\"present\"] body { background: #000 !important; }\n\n /* Every slide in a grid. */\n html.sixb-deck[data-mode=\"overview\"],\n html.sixb-deck[data-mode=\"overview\"] body { height: 100% !important; overflow: auto !important; }\n html.sixb-deck[data-mode=\"overview\"] body {\n margin: 0 !important;\n display: grid !important;\n grid-template-columns: repeat(var(--sixb-columns), max-content) !important;\n justify-content: center !important;\n align-content: start !important;\n gap: 16px !important;\n padding: 16px !important;\n background: var(--sixb-stage) !important;\n }\n html.sixb-deck[data-mode=\"overview\"] section.slide {\n zoom: var(--sixb-overview-scale) !important;\n cursor: pointer;\n border-radius: calc(6px / var(--sixb-overview-scale)) !important;\n box-shadow: 0 0 0 calc(1px / var(--sixb-overview-scale)) var(--sixb-stage-border) !important;\n }\n html.sixb-deck[data-mode=\"overview\"] section.slide[data-current] {\n box-shadow: 0 0 0 calc(1px / var(--sixb-overview-scale)) var(--sixb-stage-foreground) !important;\n outline: calc(2px / var(--sixb-overview-scale)) solid var(--sixb-stage-foreground) !important;\n outline-offset: calc(2px / var(--sixb-overview-scale)) !important;\n }\n\n /*\n * A slide: 1280×720. Its footer, a rule with the source and the slide's number, sits in the\n * bottom padding, so content never runs into it.\n */\n section.slide {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 28px;\n width: 1280px;\n height: 720px;\n flex: none;\n padding: 72px 96px 140px;\n overflow: hidden;\n background: var(--background);\n color: var(--foreground);\n font-size: 28px;\n line-height: 1.4;\n }\n\n /* Type: nothing on a slide is smaller than 18px. */\n section.slide :is(h1, h2, h3) { margin: 0; text-wrap: balance; }\n section.slide h1 { font-size: 72px; line-height: 1; font-weight: 650; letter-spacing: -0.035em; }\n section.slide h2 { max-width: 1000px; font-size: 46px; line-height: 1.08; font-weight: 600; letter-spacing: -0.025em; }\n section.slide h3 { font-size: 30px; line-height: 1.2; font-weight: 600; letter-spacing: -0.01em; }\n section.slide p { margin: 0; max-width: 34em; }\n section.slide :is(ul, ol) {\n margin: 0;\n padding-left: 30px;\n display: flex;\n flex-direction: column;\n gap: 22px;\n font-size: 30px;\n line-height: 1.35;\n letter-spacing: -0.01em;\n }\n section.slide li { padding-left: 6px; }\n section.slide li::marker { color: var(--muted-foreground); }\n section.slide strong { font-weight: 600; }\n section.slide a { color: inherit; text-decoration-thickness: 2px; text-underline-offset: 5px; }\n section.slide small, section.slide .note { font-size: 20px; color: var(--muted-foreground); }\n section.slide img, section.slide svg, section.slide video { max-width: 100%; max-height: 100%; }\n /* A figure's default 40px margins would squeeze a chart and its labels below the type floor. */\n section.slide figure { margin: 0; }\n section.slide code { font-family: var(--font-mono); font-size: 0.85em; }\n\n /* Chrome: a label above the heading (two spans sit at either end), and the footer. */\n section.slide .eyebrow {\n display: flex;\n justify-content: space-between;\n gap: 24px;\n margin: 0;\n max-width: none;\n font-size: 20px;\n line-height: 1.3;\n letter-spacing: 0.01em;\n color: var(--muted-foreground);\n }\n section.slide .eyebrow + :is(h1, h2) { margin-top: -12px; }\n section.slide::after {\n content: attr(data-number);\n position: absolute;\n left: 96px;\n right: 96px;\n bottom: 64px;\n padding-top: 22px;\n border-top: 1px solid var(--border);\n text-align: right;\n font-size: 18px;\n line-height: 1.4;\n font-variant-numeric: tabular-nums;\n color: var(--muted-foreground);\n }\n section.slide.no-number::after { content: \"\"; }\n section.slide.no-number:not(:has(.source))::after { display: none; }\n section.slide .source {\n position: absolute;\n left: 96px;\n right: calc(96px + 3em);\n bottom: 64px;\n z-index: 1;\n max-width: none;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: 18px;\n line-height: 1.4;\n font-variant-numeric: tabular-nums;\n color: var(--muted-foreground);\n }\n\n /* Layouts. */\n section.slide.title > .eyebrow { margin-bottom: auto; }\n section.slide.title h1 { margin-top: 0; font-size: 132px; line-height: 0.92; letter-spacing: -0.04em; max-width: 9em; }\n section.slide.title > p:not(.eyebrow, .source) { font-size: 36px; line-height: 1.25; letter-spacing: -0.01em; color: var(--muted-foreground); max-width: 24em; text-wrap: balance; }\n\n section.slide.section { justify-content: flex-end; }\n section.slide.section h2 { font-size: 72px; line-height: 1; letter-spacing: -0.035em; max-width: 13em; }\n\n section.slide.split {\n display: grid;\n grid-template-columns: 5fr 6fr;\n grid-template-rows: auto 1fr;\n column-gap: 80px;\n row-gap: 28px;\n }\n section.slide.split:has(> .eyebrow) { grid-template-rows: auto auto 1fr; }\n section.slide.split > :is(h1, h2, .eyebrow) { grid-column: 1 / -1; }\n section.slide.split > * { min-width: 0; min-height: 0; }\n section.slide.split > :not(h1, h2, .eyebrow) { align-self: center; }\n\n section.slide.stat > .value { margin-top: auto; }\n section.slide.stat .value {\n font-size: 144px;\n line-height: 0.9;\n font-weight: 600;\n letter-spacing: -0.045em;\n font-variant-numeric: tabular-nums;\n color: var(--primary);\n }\n section.slide.stat .label { font-size: 26px; line-height: 1.35; color: var(--muted-foreground); }\n section.slide.stat .stats {\n margin-top: auto;\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: minmax(0, 1fr);\n gap: 64px;\n padding-bottom: 16px;\n }\n section.slide.stat .stats > * {\n display: flex;\n flex-direction: column;\n gap: 14px;\n padding-top: 28px;\n border-top: 2px solid var(--foreground);\n }\n section.slide.stat .stats:has(> :nth-child(3)) .value { font-size: 96px; }\n section.slide.stat .stats:has(> :nth-child(4)) .value { font-size: 80px; }\n\n section.slide.quote { justify-content: center; }\n section.slide.quote blockquote {\n margin: 0;\n font-family: var(--font-serif);\n font-size: 52px;\n line-height: 1.2;\n letter-spacing: -0.01em;\n max-width: 22em;\n text-wrap: balance;\n }\n section.slide.quote cite { font-style: normal; font-size: 24px; color: var(--muted-foreground); }\n\n section.slide.image > :is(img, figure) { flex: 1; min-height: 0; margin: 0; object-fit: contain; }\n section.slide.image.bleed { padding: 0; }\n section.slide.image.bleed > img { width: 100%; height: 100%; object-fit: cover; }\n section.slide.image.bleed::after, section.slide.image.bleed .source { display: none; }\n\n section.slide.chart > :is(figure, svg, img, .chart) { flex: 1; min-height: 0; margin: 0; }\n section.slide.chart figure { display: flex; flex-direction: column; gap: 20px; }\n section.slide.chart figure > :is(svg, img) { flex: 1; min-height: 0; width: 100%; }\n section.slide figcaption { font-size: 20px; color: var(--muted-foreground); }\n\n section.slide.table table { width: 100%; border-collapse: collapse; font-size: 26px; font-variant-numeric: tabular-nums; }\n section.slide.table :is(th, td) { padding: 14px 16px; border-bottom: 1px solid var(--border); text-align: left; }\n section.slide.table :is(th, td):first-child { padding-left: 0; }\n section.slide.table :is(th, td):last-child { padding-right: 0; }\n section.slide.table th { font-size: 20px; font-weight: 500; color: var(--muted-foreground); }\n section.slide.table :is(th, td).num, section.slide.table :is(th, td)[data-numeric] { text-align: right; }\n\n /*\n * Another artifact on the slide: the app draws it over this box, sized by the deck's CSS like\n * any block. Until it does, and in a thumbnail, the box shows where it goes.\n */\n sixb-embed {\n display: block;\n position: relative;\n width: 100%;\n min-width: 0;\n aspect-ratio: 16 / 9;\n border-radius: 12px;\n background: color-mix(in oklab, var(--muted) 80%, transparent);\n }\n sixb-embed[title]::after {\n content: attr(title);\n position: absolute;\n inset: auto 24px 20px;\n font-size: 20px;\n color: var(--muted-foreground);\n }\n section.slide.chart > sixb-embed,\n section.slide.chart figure > sixb-embed { flex: 1; min-height: 0; aspect-ratio: auto; }\n /* An image from another artifact its reader cannot see. */\n section.slide img[data-sixb-ref=\"unavailable\"] {\n display: block;\n min-width: 160px;\n min-height: 90px;\n border-radius: 12px;\n background: var(--muted);\n }\n\n /* Components. */\n section.slide .legend {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 8px 24px;\n margin: 0;\n padding: 0;\n list-style: none;\n font-size: 20px;\n line-height: 1.3;\n letter-spacing: 0;\n color: var(--muted-foreground);\n }\n section.slide .legend > * { display: flex; align-items: center; gap: 8px; padding: 0; }\n section.slide .legend > *::before {\n content: \"\";\n width: 0.8em;\n height: 0.8em;\n border-radius: 2px;\n background: var(--swatch, var(--chart-1));\n }\n section.slide .callout {\n padding: 24px 28px;\n border-radius: var(--radius);\n background: var(--muted);\n font-size: 26px;\n }\n section.slide .tag {\n display: inline-block;\n padding: 4px 12px;\n border-radius: 999px;\n background: var(--muted);\n font-size: 18px;\n font-weight: 600;\n }\n}\n`\n",
6
+ "/**\n * The runtime the frame injects into a deck before anything else in its `<head>`. It is served as\n * this function's own source, `(${frameRuntime})()`, so it imports nothing and names nothing\n * outside itself: the protocol string and the keys repeat what `protocol.ts` declares, and a test\n * holds the two together.\n *\n * It lays the deck out: every `section.slide` is a 1280×720 slide, shown one at a time scaled to\n * fit, or all at once in a grid. The URL's fragment can open it at a slide, and with `sixb-fill`\n * show that slide alone filling the frame, as a thumbnail or an embed does. It applies the theme the app sends, answers the app's requests,\n * and tells the app about keys, picks in the overview, and links to other artifacts.\n */\nexport function frameRuntime(): void {\n const PROTOCOL = \"sixb-frame/1\"\n const WIDTH = 1280\n const HEIGHT = 720\n const KEYS = [\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"PageUp\",\n \"PageDown\",\n \"Home\",\n \"End\",\n \" \",\n \"Escape\",\n ]\n const root = document.documentElement\n const start = new URLSearchParams(window.location.hash.slice(1))\n root.classList.add(\"sixb-deck\")\n root.dataset.mode = start.has(\"sixb-fill\") ? \"fill\" : \"slide\"\n let current = Number(start.get(\"sixb-slide\")) || 1\n\n const slides = (): HTMLElement[] =>\n Array.from(document.querySelectorAll<HTMLElement>(\"section.slide\"))\n const post = (message: Record<string, unknown>) =>\n window.parent.postMessage({ protocol: PROTOCOL, ...message }, \"*\")\n\n /** The scale that fits a slide in the window, and the one that fits a column of the grid. */\n const fit = () => {\n const columns = window.innerWidth < 720 ? 2 : window.innerWidth < 1100 ? 3 : 4\n const gap = 16\n // A slide keeps a margin around it, so its edge reads against the stage; filled or presented,\n // it has none.\n const margin =\n root.dataset.mode === \"fill\" || root.dataset.mode === \"present\"\n ? 0\n : Math.min(32, window.innerWidth * 0.04)\n root.style.setProperty(\n \"--sixb-scale\",\n String(\n Math.min(\n (window.innerWidth - margin * 2) / WIDTH,\n (window.innerHeight - margin * 2) / HEIGHT\n )\n )\n )\n root.style.setProperty(\"--sixb-columns\", String(columns))\n root.style.setProperty(\n \"--sixb-overview-scale\",\n String((window.innerWidth - gap * (columns + 1)) / columns / WIDTH)\n )\n }\n\n /** The shown slide's embeds, for the app to draw over the frame; once a frame, when they move. */\n let reported = \"\"\n let reporting = false\n const reportEmbeds = () => {\n if (reporting || root.dataset.mode === \"fill\") return\n reporting = true\n requestAnimationFrame(() => {\n reporting = false\n const scale = Number(root.style.getPropertyValue(\"--sixb-scale\")) || 1\n const slide = root.dataset.mode === \"overview\" ? undefined : slides()[current - 1]\n const embeds = Array.from(slide?.querySelectorAll(\"sixb-embed[src]\") ?? []).map((element) => {\n const rect = element.getBoundingClientRect()\n return {\n address: (element.getAttribute(\"src\") ?? \"\").trim(),\n rect: { x: rect.left, y: rect.top, width: rect.width, height: rect.height },\n scale,\n }\n })\n const next = JSON.stringify(embeds)\n if (next === reported) return\n reported = next\n post({ event: \"embeds\", params: { embeds } })\n })\n }\n\n const show = (slide: number) => {\n const all = slides()\n current = Math.min(Math.max(1, Math.round(slide) || 1), Math.max(1, all.length))\n all.forEach((element, index) => {\n element.toggleAttribute(\"data-current\", index + 1 === current)\n })\n if (root.dataset.mode === \"overview\") {\n all[current - 1]?.scrollIntoView({ block: \"nearest\" })\n }\n reportEmbeds()\n }\n\n const handle = (method: string, params: Record<string, unknown>) => {\n switch (method) {\n case \"theme\": {\n // In the theme's layer, not inline: the deck's own CSS, unlayered, still wins.\n const tokens = (params.tokens ?? {}) as Record<string, string>\n const declarations = Object.entries(tokens)\n .filter(\n ([name, value]) =>\n /^--[a-z0-9-]+$/.test(name) && typeof value === \"string\" && !/[;{}<]/.test(value)\n )\n .map(([name, value]) => `${name}: ${value};`)\n // The stage is the app's, in the app's colors, whatever a deck makes of its own tokens.\n for (const [stage, token] of [\n [\"--sixb-stage\", \"--muted\"],\n [\"--sixb-stage-border\", \"--border\"],\n [\"--sixb-stage-foreground\", \"--foreground\"],\n ]) {\n const value = declarations.find((declaration) => declaration.startsWith(`${token}:`))\n if (value) declarations.push(`${stage}${value.slice(token.length)}`)\n }\n let style = document.getElementById(\"sixb-theme\")\n if (!style) {\n style = document.createElement(\"style\")\n style.id = \"sixb-theme\"\n document.head.append(style)\n }\n style.textContent = `@layer sixb-theme { :root { ${declarations.join(\" \")} color-scheme: ${params.dark === true ? \"dark\" : \"light\"}; } }`\n root.classList.toggle(\"dark\", params.dark === true)\n return\n }\n case \"goto\":\n show(Number(params.slide))\n return\n case \"mode\":\n if (root.dataset.mode === \"fill\") return\n root.dataset.mode =\n params.mode === \"overview\" || params.mode === \"present\" ? params.mode : \"slide\"\n fit()\n show(current)\n return\n default:\n throw new Error(`Unknown method '${method}'.`)\n }\n }\n\n window.addEventListener(\"message\", (event) => {\n if (event.source !== window.parent) return\n const data = event.data as Record<string, unknown> | null\n // Requests only: at the top level, as in the layout check, the frame's own answers come back\n // to it, and answering an answer would trade error messages with itself for good.\n if (!data || data.protocol !== PROTOCOL || typeof data.id !== \"number\") return\n if (typeof data.method !== \"string\") return\n try {\n handle(String(data.method), (data.params ?? {}) as Record<string, unknown>)\n post({ id: data.id })\n } catch (error) {\n post({ id: data.id, error: error instanceof Error ? error.message : String(error) })\n }\n })\n\n window.addEventListener(\"keydown\", (event) => {\n if (event.metaKey || event.ctrlKey || event.altKey) return\n const target = event.target as HTMLElement | null\n if (target?.closest(\"input, textarea, select, [contenteditable]\")) return\n if (!KEYS.includes(event.key)) return\n event.preventDefault()\n post({ event: \"key\", params: { key: event.key } })\n })\n\n document.addEventListener(\"click\", (event) => {\n const target = event.target as HTMLElement | null\n const link = target?.closest<HTMLAnchorElement>(\"a[href]\")\n if (link) {\n const href = link.getAttribute(\"href\") ?? \"\"\n if (/^artifact:/i.test(href.trim())) {\n event.preventDefault()\n post({ event: \"open\", params: { address: href.trim() } })\n } else if (!href.startsWith(\"#\")) {\n // Outside the frame: a link opens in its own tab.\n link.target = \"_blank\"\n link.rel = \"noopener noreferrer\"\n }\n return\n }\n if (root.dataset.mode !== \"overview\") return\n const slide = target?.closest<HTMLElement>(\"section.slide\")\n if (!slide) return\n post({ event: \"select\", params: { slide: slides().indexOf(slide) + 1 } })\n })\n\n window.addEventListener(\"resize\", () => {\n fit()\n reportEmbeds()\n })\n const ready = () => {\n slides().forEach((element, index) => {\n element.dataset.number = String(index + 1)\n })\n fit()\n show(current)\n post({ event: \"ready\", params: { slides: slides().length } })\n // Fonts and images that arrive later move what is laid out after them.\n const resized = new ResizeObserver(reportEmbeds)\n for (const element of Array.from(document.querySelectorAll(\"section.slide > *, sixb-embed\"))) {\n resized.observe(element)\n }\n window.addEventListener(\"load\", reportEmbeds)\n document.fonts?.ready.then(reportEmbeds)\n }\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", ready)\n else ready()\n}\n",
7
+ "import type { ArtifactFrameTarget } from \"../../storage/artifacts/types\"\nimport { isArtifactAddress, parseArtifactAddress } from \"../address\"\nimport { decodeHtmlEntities } from \"../html\"\nimport { FRAME_ASSET_PREFIX } from \"../publish/validate/slides\"\nimport { FRAME_KIT_CSS } from \"./kit\"\nimport { frameRuntime } from \"./runtime\"\n\n/**\n * The files a frame gets besides the version's own, under `__sixb/`, which a version may not use.\n * The server serves them to the app's frames, and the Agent's layout check serves them to its\n * browser, so both lay a deck out the same way.\n */\nexport const FRAME_ASSETS: Readonly<\n Record<string, { readonly body: string; readonly type: string }>\n> = {\n [`${FRAME_ASSET_PREFIX}kit.css`]: { body: FRAME_KIT_CSS, type: \"text/css; charset=utf-8\" },\n [`${FRAME_ASSET_PREFIX}runtime.js`]: {\n body: `(${frameRuntime.toString()})()\\n`,\n type: \"text/javascript; charset=utf-8\",\n },\n}\n\nconst INJECTED = `<link rel=\"stylesheet\" href=\"${FRAME_ASSET_PREFIX}kit.css\"><script src=\"${FRAME_ASSET_PREFIX}runtime.js\"></script>`\n\n/**\n * A deck's entry with the kit and the runtime first in its `<head>`, before anything of its own,\n * so the deck's styles and scripts build on them. Exactly once, whatever the markup: in `<head>`\n * when the page has one, else first in `<html>`, else right after the doctype, so a page without\n * either still renders in standards mode. Each element is looked for by parsing, not by matching\n * text, so a `<head>` inside a comment or a script's string is not one.\n */\nexport function injectFrameAssets(html: string): string {\n for (const selector of [\"head\", \"html\"]) {\n let injected = false\n const rewritten = new HTMLRewriter()\n .on(selector, {\n element(element) {\n if (injected) return\n injected = true\n element.prepend(INJECTED, { html: true })\n },\n })\n .transform(html)\n if (injected) return rewritten\n }\n const doctype = /^\\s*<!doctype[^>]*>/i.exec(html)?.[0] ?? \"\"\n return `${doctype}${INJECTED}${html.slice(doctype.length)}`\n}\n\n/** Where a frame serves a file another artifact lends it: `__sixb/ref/<id>@<version>/<path>`. */\nexport const FRAME_REFERENCE_PREFIX = `${FRAME_ASSET_PREFIX}ref/`\n\n/** The path, under a frame's base, of a file one of its targets lends it. */\nfunction frameReferencePath(target: ArtifactFrameTarget): string | null {\n const file = parseArtifactAddress(target.address)?.path\n if (!file) return null\n const path = file.split(\"/\").map(encodeURIComponent).join(\"/\")\n return `${FRAME_REFERENCE_PREFIX}${target.artifactId}@${target.version}/${path}`\n}\n\n/**\n * Points each image a deck shows from another artifact (`<img src=\"artifact:…\">`) at the copy its\n * frame serves, marked `data-sixb-ref`. An image its reader cannot see, or that the frame has\n * no target for, loses its source and is marked unavailable: the kit draws it as an empty box.\n * Addresses are compared as publishing recorded them, with their entities decoded.\n */\nexport function rewriteFrameReferences(\n html: string,\n targets: readonly ArtifactFrameTarget[]\n): string {\n return new HTMLRewriter()\n .on(\"img[src]\", {\n element(element) {\n const source = decodeHtmlEntities(element.getAttribute(\"src\") ?? \"\").trim()\n if (!isArtifactAddress(source)) return\n const target = targets.find((candidate) => candidate.address === source)\n const path = target ? frameReferencePath(target) : null\n if (path) {\n element.setAttribute(\"src\", path)\n element.setAttribute(\"data-sixb-ref\", \"\")\n } else {\n element.removeAttribute(\"src\")\n element.setAttribute(\"data-sixb-ref\", \"unavailable\")\n }\n },\n })\n .transform(html)\n}\n",
8
+ "import { createHash, randomBytes } from \"node:crypto\"\nimport type {\n ArtifactFrameTarget,\n ArtifactStorage,\n ArtifactVersionRecord,\n} from \"../../storage/artifacts/types\"\nimport { parseArtifactAddress } from \"../address\"\nimport { ArtifactRequestError } from \"../errors\"\n\n/** Path prefix of the route that serves a version's files to its frame. */\nexport const ARTIFACT_FRAME_ROUTE_PREFIX = \"/api/artifact-frames/\"\n\n/** A frame link lasts an hour; the app asks for a new one before it runs out. */\nconst FRAME_LIFETIME_MS = 60 * 60 * 1000\n/** 32 random bytes in base64url. */\nconst TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/\n\nexport interface ArtifactFrame {\n /** The frame's base, ending in `/`: the version's files are served under it by their paths. */\n readonly path: string\n readonly expiresAt: Date\n}\n\ntype ReadArtifactVersion = (\n artifactId: string,\n version: number | \"latest\"\n) => Promise<ArtifactVersionRecord | null>\n\n/**\n * Issues a link that serves a deck's version to a sandboxed frame, with the files it embeds from\n * other artifacts that `read` finds. The token in the link is the credential: only its hash is\n * stored. Whoever asks must already have been allowed to read the version, and `read` reads as\n * them. Only a deck opens in a frame, since the frame serves its entry as a page.\n */\nexport async function createArtifactFrame(input: {\n readonly projectId: string\n readonly storage: ArtifactStorage\n readonly version: ArtifactVersionRecord\n readonly read?: ReadArtifactVersion\n readonly now?: Date\n}): Promise<ArtifactFrame> {\n const { version } = input\n if (version.outline.kind !== \"slides\") {\n throw new ArtifactRequestError(\n \"artifact_kind_mismatch\",\n `[Sixb] Only a deck opens in a frame; '${version.artifactId}' is a ${version.outline.kind}. Read its files instead.`\n )\n }\n const createdAt = input.now ?? new Date()\n const expiresAt = new Date(createdAt.getTime() + FRAME_LIFETIME_MS)\n const token = randomBytes(32).toString(\"base64url\")\n await input.storage.createFrameGrant({\n projectId: input.projectId,\n tokenHash: hashToken(token),\n artifactId: version.artifactId,\n version: version.version,\n targets: input.read ? await frameTargets(version, input.read) : [],\n createdAt,\n expiresAt,\n })\n return { path: `${ARTIFACT_FRAME_ROUTE_PREFIX}${token}/`, expiresAt }\n}\n\n/**\n * The files from other artifacts a version's frame may show its reader: each file it embeds\n * (`<img src=\"artifact:…/figure.svg\">`) that `read`, as the reader, finds, at the version the\n * address pins or the latest. A chart, range, or section is drawn by the app over the frame, under\n * the reader's own session, and needs nothing here.\n */\nasync function frameTargets(\n version: ArtifactVersionRecord,\n read: ReadArtifactVersion\n): Promise<ArtifactFrameTarget[]> {\n const targets: ArtifactFrameTarget[] = []\n for (const reference of version.references) {\n if (\n reference.as !== \"embed\" ||\n targets.some((target) => target.address === reference.address)\n ) {\n continue\n }\n const address = parseArtifactAddress(reference.address)\n if (!address?.path) continue\n const target = await read(address.artifactId, address.version ?? \"latest\").catch(() => null)\n if (!target?.files.some((file) => file.path === address.path)) continue\n targets.push({\n address: reference.address,\n artifactId: target.artifactId,\n version: target.version,\n })\n }\n return targets\n}\n\n/**\n * What a frame link serves: its deck's version, and what it may show from other artifacts; `null`\n * once the link is unknown, expired, or its version gone, and for a version that is not a deck.\n */\nexport async function resolveArtifactFrame(input: {\n readonly projectId: string\n readonly storage: ArtifactStorage\n readonly token: string\n readonly now?: Date\n}): Promise<{\n readonly version: ArtifactVersionRecord\n readonly targets: readonly ArtifactFrameTarget[]\n} | null> {\n if (!TOKEN_PATTERN.test(input.token)) return null\n const grant = await input.storage.findFrameGrant({\n projectId: input.projectId,\n tokenHash: hashToken(input.token),\n })\n if (!grant || grant.expiresAt <= (input.now ?? new Date())) return null\n const version = await input.storage.getVersion({\n projectId: input.projectId,\n artifactId: grant.artifactId,\n version: grant.version,\n })\n return version?.outline.kind === \"slides\" ? { version, targets: grant.targets } : null\n}\n\nfunction hashToken(token: string): string {\n return createHash(\"sha256\").update(token).digest(\"hex\")\n}\n",
9
+ "/** A problem the layout probe found on a slide, where it is on the slide, and its text. */\nexport interface LayoutProblem {\n readonly code:\n | \"outside\"\n | \"footer\"\n | \"overlap\"\n | \"clipped\"\n | \"small_text\"\n | \"contrast\"\n | \"broken_image\"\n /** In the slide's 1280×720 pixels. */\n readonly rect: {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n }\n /** The element's text, shortened, or its tag when it has none. */\n readonly text: string\n /** The element as CSS names it, `p.eyebrow`: the same problem on many slides shares it. */\n readonly selector: string\n /** `small_text`: its size in pixels. `contrast`: the ratio, and the two colors. */\n readonly size?: number\n /** `overlap`: the text it overlaps. */\n readonly other?: string\n readonly ratio?: number\n readonly colors?: readonly [string, string]\n}\n\n/**\n * Measures the slide the frame shows, laid out at its own size (`sixb-fill`), and returns what a\n * reader would find wrong with it. Run in the page as its own source, `(${layoutProbe})(3)`, so it\n * names nothing outside itself.\n *\n * - `outside`: text or an image past the slide's edge, which the slide cuts off.\n * - `footer`: text or an image over the footer's rule, the source, or the number.\n * - `overlap`: text drawn over other text, line box on line box.\n * - `clipped`: text its own box cuts off.\n * - `small_text`: text under 18px as drawn, an SVG's scaled with it.\n * - `contrast`: text under WCAG AA against the solid colors painted under it, its own box's,\n * any box it overlaps, and an SVG shape's fill (4.5:1, or 3:1 from 24px, or 18.66px bold); text\n * over an image or a gradient is not judged.\n * - `broken_image`: an image of the deck's own that did not load.\n *\n * Another artifact's chart or image is a box here, sized as the deck sizes it: it is measured as\n * one, and its content is the app's.\n */\nexport function layoutProbe(slideNumber: number): LayoutProblem[] {\n const MAX_PER_CODE = 8\n const slide = document.querySelectorAll<HTMLElement>(\"section.slide\")[slideNumber - 1]\n if (!slide) return []\n const box = slide.getBoundingClientRect()\n const problems: LayoutProblem[] = []\n const counts = new Map<string, number>()\n const selector = (element: Element) =>\n element instanceof SVGElement && element.tagName.toLowerCase() !== \"svg\"\n ? `svg ${element.tagName.toLowerCase()}`\n : [element.tagName.toLowerCase(), ...Array.from(element.classList).slice(0, 2)].join(\".\")\n const report = (\n code: LayoutProblem[\"code\"],\n element: Element,\n details: Pick<LayoutProblem, \"size\" | \"ratio\" | \"colors\" | \"other\"> & { text?: string } = {}\n ) => {\n const count = counts.get(code) ?? 0\n if (count >= MAX_PER_CODE) return\n counts.set(code, count + 1)\n problems.push({\n code,\n rect: at(element.getBoundingClientRect()),\n selector: selector(element),\n ...details,\n text: details.text ?? describe(element),\n })\n }\n const at = (rect: DOMRect) => ({\n x: Math.round(rect.left - box.left),\n y: Math.round(rect.top - box.top),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n })\n // The text as a reader sees it: a line break separates words.\n const describe = (element: Element) =>\n (element instanceof HTMLElement ? element.innerText : (element.textContent ?? \"\"))\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 60) || element.tagName.toLowerCase()\n const shown = (element: Element) => {\n const style = getComputedStyle(element)\n if (style.display === \"none\" || style.visibility === \"hidden\" || style.opacity === \"0\") {\n return false\n }\n const rect = element.getBoundingClientRect()\n return rect.width > 0 && rect.height > 0\n }\n const ownText = (element: Element) =>\n Array.from(element.childNodes).some(\n (node) => node.nodeType === Node.TEXT_NODE && (node.textContent ?? \"\").trim() !== \"\"\n )\n const media = (element: Element) =>\n /^(img|svg|canvas|video|picture|table|sixb-embed)$/i.test(element.tagName)\n\n // What a reader sees: elements with text of their own, and media. Each judged once.\n const elements = Array.from(slide.querySelectorAll(\"*\")).filter(\n (element) => !element.closest(\"svg *, .source\") && shown(element)\n )\n const content = elements.filter((element) => ownText(element) || media(element))\n const svgText = Array.from(slide.querySelectorAll<SVGTextContentElement>(\"svg text\")).filter(\n (element) => (element.textContent ?? \"\").trim() !== \"\" && shown(element)\n )\n\n // Past the slide's edge, or over the footer. The outermost offender stands for what it holds.\n const footer = getComputedStyle(slide, \"::after\")\n const footerTop =\n footer.content === \"none\" || footer.display === \"none\"\n ? Number.POSITIVE_INFINITY\n : box.bottom -\n Number.parseFloat(footer.bottom) -\n Number.parseFloat(footer.paddingTop) -\n Number.parseFloat(footer.lineHeight) -\n Number.parseFloat(footer.borderTopWidth)\n const outside: Element[] = []\n for (const element of content) {\n if (outside.some((parent) => parent.contains(element))) continue\n const rect = element.getBoundingClientRect()\n if (\n rect.left < box.left - 1 ||\n rect.top < box.top - 1 ||\n rect.right > box.right + 1 ||\n rect.bottom > box.bottom + 1\n ) {\n outside.push(element)\n report(\"outside\", element)\n } else if (rect.bottom > footerTop + 1 && rect.top < box.bottom) {\n outside.push(element)\n report(\"footer\", element)\n }\n }\n\n // Text over text: the lines each element's own text draws, against every other's. A range's\n // rectangle spans the font's whole ascent and descent, which a tight line-height (a stat's\n // number) leaves well outside its line: each is cut to its line-height around its middle.\n const lines = content\n .filter((element) => ownText(element) && !outside.some((parent) => parent.contains(element)))\n .map((element) => {\n const lineHeight = Number.parseFloat(getComputedStyle(element).lineHeight)\n const rects: DOMRect[] = []\n for (const node of Array.from(element.childNodes)) {\n if (node.nodeType !== Node.TEXT_NODE || (node.textContent ?? \"\").trim() === \"\") continue\n const range = document.createRange()\n range.selectNodeContents(node)\n for (const rect of Array.from(range.getClientRects())) {\n if (rect.width === 0) continue\n const inset =\n Number.isFinite(lineHeight) && rect.height > lineHeight\n ? (rect.height - lineHeight) / 2\n : 0\n rects.push(new DOMRect(rect.x, rect.y + inset, rect.width, rect.height - inset * 2))\n }\n }\n return { element, rects }\n })\n const crosses = (a: DOMRect, b: DOMRect) =>\n Math.min(a.right, b.right) - Math.max(a.left, b.left) > 3 &&\n Math.min(a.bottom, b.bottom) - Math.max(a.top, b.top) > 3\n const overlapping = new Set<Element>()\n for (const [index, a] of lines.entries()) {\n for (const b of lines.slice(index + 1)) {\n if (overlapping.has(a.element) || overlapping.has(b.element)) continue\n if (a.rects.some((rectA) => b.rects.some((rectB) => crosses(rectA, rectB)))) {\n overlapping.add(a.element)\n overlapping.add(b.element)\n report(\"overlap\", b.element, { other: describe(a.element) })\n }\n }\n }\n\n // Cut off by its own box.\n for (const element of elements) {\n if (outside.some((parent) => parent.contains(element) || element.contains(parent))) continue\n const style = getComputedStyle(element)\n const clips = /hidden|clip/.test(`${style.overflowX} ${style.overflowY}`)\n if (!clips || (element.textContent ?? \"\").trim() === \"\") continue\n const wraps = style.textOverflow === \"ellipsis\" && style.whiteSpace === \"nowrap\"\n if (\n !wraps &&\n (element.scrollHeight > element.clientHeight + 2 ||\n element.scrollWidth > element.clientWidth + 2)\n ) {\n report(\"clipped\", element)\n }\n }\n\n // Colors as the screen shows them: any CSS color, through a canvas pixel.\n const canvas = document.createElement(\"canvas\")\n canvas.width = 1\n canvas.height = 1\n const context = canvas.getContext(\"2d\", { willReadFrequently: true })\n const rgba = (color: string): [number, number, number, number] | null => {\n if (!context) return null\n context.clearRect(0, 0, 1, 1)\n context.fillStyle = \"rgba(0, 0, 0, 0)\"\n context.fillStyle = color\n context.fillRect(0, 0, 1, 1)\n const [r = 0, g = 0, b = 0, a = 0] = context.getImageData(0, 0, 1, 1).data\n return [r, g, b, a / 255]\n }\n const over = (\n top: [number, number, number, number],\n under: [number, number, number, number]\n ): [number, number, number, number] => [\n top[0] * top[3] + under[0] * (1 - top[3]),\n top[1] * top[3] + under[1] * (1 - top[3]),\n top[2] * top[3] + under[2] * (1 - top[3]),\n 1,\n ]\n /**\n * The solid color painted under an element's text, or null over an image or a gradient: every\n * box under its center, top to bottom, its own and its ancestors' and any it overlaps, until an\n * opaque one.\n */\n const background = (element: Element): [number, number, number, number] | null => {\n const layers: [number, number, number, number][] = []\n const rect = element.getBoundingClientRect()\n const stack = document.elementsFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2)\n // An SVG's text is not hit between its glyphs: then everything under the point counts.\n const start = Math.max(0, stack.indexOf(element))\n const under = stack.slice(start)\n // A photo or a video paints colors no style names.\n const pictures = under.filter((node) => /^(img|picture|video|canvas)$/i.test(node.tagName))\n for (const node of under) {\n if (pictures.includes(node)) return null\n // A box holding the picture paints under it, though its ::before, a scrim over the photo,\n // puts it above the picture in the stack.\n if (pictures.some((picture) => node.contains(picture))) continue\n const style = getComputedStyle(node)\n // An SVG shape paints with its fill: a chart's label sits on its bar.\n const shape = node instanceof SVGGeometryElement\n const paint = shape ? style.fill : style.backgroundColor\n if ((!shape && style.backgroundImage !== \"none\") || paint.startsWith(\"url(\")) return null\n const color = rgba(paint)\n if (color && shape) color[3] *= Number.parseFloat(style.fillOpacity) || 0\n if (color && color[3] > 0) {\n layers.push(color)\n if (color[3] >= 0.99) break\n }\n }\n return layers.reduceRight<[number, number, number, number]>(\n (under, top) => over(top, under),\n [255, 255, 255, 1]\n )\n }\n const luminance = ([r, g, b]: readonly number[]) => {\n const channel = (value = 0) => {\n const c = value / 255\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n }\n return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b)\n }\n const hex = (color: readonly number[]) =>\n `#${color\n .slice(0, 3)\n .map((value) => Math.round(value).toString(16).padStart(2, \"0\"))\n .join(\"\")}`\n\n // Text: its size as drawn, and its contrast.\n const texts: { element: Element; size: number; ink: string }[] = [\n ...content\n .filter((element) => ownText(element))\n .map((element) => {\n const style = getComputedStyle(element)\n return { element, size: Number.parseFloat(style.fontSize), ink: style.color }\n }),\n ...svgText.map((element) => {\n const style = getComputedStyle(element)\n const scale = element.getScreenCTM()?.a ?? 1\n return { element, size: Number.parseFloat(style.fontSize) * scale, ink: style.fill }\n }),\n ]\n for (const { element, size, ink } of texts) {\n if (outside.some((parent) => parent.contains(element))) continue\n if (size < 17.5) {\n report(\"small_text\", element, { size: Math.round(size * 10) / 10 })\n }\n const color = rgba(ink)\n const behind = background(element)\n if (!color || color[3] === 0 || !behind) continue\n const solid = over(color, behind)\n const [light, dark] = [luminance(solid), luminance(behind)].sort((a, b) => b - a)\n const ratio = ((light ?? 0) + 0.05) / ((dark ?? 0) + 0.05)\n const bold = Number.parseInt(getComputedStyle(element).fontWeight, 10) >= 700\n const needed = size >= 24 || (bold && size >= 18.66) ? 3 : 4.5\n if (ratio < needed) {\n report(\"contrast\", element, {\n ratio: Math.round(ratio * 100) / 100,\n colors: [hex(solid), hex(behind)],\n })\n }\n }\n\n // An image from another artifact is the app's to load, not the deck's.\n for (const image of Array.from(\n slide.querySelectorAll<HTMLImageElement>(\"img:not([data-sixb-ref])\")\n )) {\n if (image.getAttribute(\"src\") && image.complete && image.naturalWidth === 0) {\n report(\"broken_image\", image, { text: image.getAttribute(\"src\") ?? \"img\" })\n }\n }\n return problems\n}\n"
10
+ ],
11
+ "mappings": ";;;;;;;;;;;;;;AAAA,IAAM,QAAQ;AAAA,EACZ,eACE;AAAA,EACF,gBAAgB;AAAA,EAChB,eAAe;AACjB;AAQO,IAAM,uBAAuB;AAAA,EAClC,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,WAAW;AAAA,MACX,sBAAsB;AAAA,MACtB,aAAa;AAAA,MACb,wBAAwB;AAAA,MACxB,YAAY;AAAA,MACZ,uBAAuB;AAAA,MACvB,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,SACV;AAAA,MACH,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,WAAW;AAAA,MACX,sBAAsB;AAAA,MACtB,aAAa;AAAA,MACb,wBAAwB;AAAA,MACxB,YAAY;AAAA,MACZ,uBAAuB;AAAA,MACvB,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,SACV;AAAA,MAEH,YAAY;AAAA,IACd;AAAA,EACF;AACF;AAEA,IAAM,QAAQ,qBAAqB,MAAM;AAQlC,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3B,OAAO,QAAQ,KAAK,EACnB,IAAI,EAAE,MAAM,WAAW,OAAO,SAAS,QAAQ,EAC/C,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA;AAAA,oBAIQ,MAAM;AAAA,2BACC,MAAM;AAAA,+BACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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",
12
+ "debugId": "87504D80B2F871CF64756E2164756E21",
13
+ "names": []
14
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Sixb's default theme, light and dark: the values `@sixb/ui`'s globals.css gives the tokens the
3
+ * app sends into a frame, which an artifact's theme may set. The kit starts from the light one
4
+ * until the app's arrive, and the layout check measures a deck in both, since a deck follows the
5
+ * app's mode and the project's own theme is out of the sandbox's reach.
6
+ */
7
+ export declare const FRAME_DEFAULT_THEMES: {
8
+ readonly light: {
9
+ readonly dark: false;
10
+ readonly tokens: {
11
+ readonly "--radius": "0.5rem";
12
+ readonly "--font-sans": "\"SF Pro Text\", \"SF Pro Display\", \"Segoe UI Variable Text\", \"Segoe UI\", system-ui, sans-serif";
13
+ readonly "--font-serif": "ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif";
14
+ readonly "--font-mono": "\"SF Mono\", \"Geist Mono\", \"JetBrains Mono\", ui-monospace, monospace";
15
+ readonly "--background": "#fafafa";
16
+ readonly "--foreground": "#101010";
17
+ readonly "--card": "#ffffff";
18
+ readonly "--card-foreground": "#101010";
19
+ readonly "--muted": "#f4f4f4";
20
+ readonly "--muted-foreground": "#5f5f5f";
21
+ readonly "--primary": "#0a0a0a";
22
+ readonly "--primary-foreground": "#ffffff";
23
+ readonly "--accent": "#f0f0f0";
24
+ readonly "--accent-foreground": "#202020";
25
+ readonly "--border": "#e2e2e2";
26
+ readonly "--chart-1": "#101010";
27
+ readonly "--chart-2": "#404040";
28
+ readonly "--chart-3": "#737373";
29
+ readonly "--chart-4": "#a3a3a3";
30
+ readonly "--chart-5": "#d4d4d4";
31
+ };
32
+ };
33
+ readonly dark: {
34
+ readonly dark: true;
35
+ readonly tokens: {
36
+ readonly "--radius": "0.5rem";
37
+ readonly "--font-sans": "\"SF Pro Text\", \"SF Pro Display\", \"Segoe UI Variable Text\", \"Segoe UI\", system-ui, sans-serif";
38
+ readonly "--font-serif": "ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif";
39
+ readonly "--font-mono": "\"SF Mono\", \"Geist Mono\", \"JetBrains Mono\", ui-monospace, monospace";
40
+ readonly "--background": "#0a0a0a";
41
+ readonly "--foreground": "#f4f4f4";
42
+ readonly "--card": "#141414";
43
+ readonly "--card-foreground": "#f4f4f4";
44
+ readonly "--muted": "#1c1c1c";
45
+ readonly "--muted-foreground": "#8a8a8a";
46
+ readonly "--primary": "#f4f4f4";
47
+ readonly "--primary-foreground": "#0a0a0a";
48
+ readonly "--accent": "#1c1c1c";
49
+ readonly "--accent-foreground": "#f4f4f4";
50
+ readonly "--border": "#262626";
51
+ readonly "--chart-1": "#f4f4f4";
52
+ readonly "--chart-2": "#c4c4c4";
53
+ readonly "--chart-3": "#8a8a8a";
54
+ readonly "--chart-4": "#5f5f5f";
55
+ readonly "--chart-5": "#404040";
56
+ };
57
+ };
58
+ };
59
+ /**
60
+ * The kit the frame injects into a deck: the stage that shows one slide or all of them, the slide
61
+ * type scale, the layouts a slide picks by class, the slide chrome, and a few components. It reads
62
+ * the app's theme tokens, which the app sends into the frame, with the light defaults until they
63
+ * arrive. Everything sits in cascade layers, so the deck's own CSS, unlayered, always wins.
64
+ */
65
+ export declare const FRAME_KIT_CSS: string;
66
+ //# sourceMappingURL=kit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../../src/artifacts/frames/kit.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDvB,CAAA;AAIV;;;;;GAKG;AACH,eAAO,MAAM,aAAa,QAgUzB,CAAA"}
@@ -0,0 +1,41 @@
1
+ /** A problem the layout probe found on a slide, where it is on the slide, and its text. */
2
+ export interface LayoutProblem {
3
+ readonly code: "outside" | "footer" | "overlap" | "clipped" | "small_text" | "contrast" | "broken_image";
4
+ /** In the slide's 1280×720 pixels. */
5
+ readonly rect: {
6
+ readonly x: number;
7
+ readonly y: number;
8
+ readonly width: number;
9
+ readonly height: number;
10
+ };
11
+ /** The element's text, shortened, or its tag when it has none. */
12
+ readonly text: string;
13
+ /** The element as CSS names it, `p.eyebrow`: the same problem on many slides shares it. */
14
+ readonly selector: string;
15
+ /** `small_text`: its size in pixels. `contrast`: the ratio, and the two colors. */
16
+ readonly size?: number;
17
+ /** `overlap`: the text it overlaps. */
18
+ readonly other?: string;
19
+ readonly ratio?: number;
20
+ readonly colors?: readonly [string, string];
21
+ }
22
+ /**
23
+ * Measures the slide the frame shows, laid out at its own size (`sixb-fill`), and returns what a
24
+ * reader would find wrong with it. Run in the page as its own source, `(${layoutProbe})(3)`, so it
25
+ * names nothing outside itself.
26
+ *
27
+ * - `outside`: text or an image past the slide's edge, which the slide cuts off.
28
+ * - `footer`: text or an image over the footer's rule, the source, or the number.
29
+ * - `overlap`: text drawn over other text, line box on line box.
30
+ * - `clipped`: text its own box cuts off.
31
+ * - `small_text`: text under 18px as drawn, an SVG's scaled with it.
32
+ * - `contrast`: text under WCAG AA against the solid colors painted under it, its own box's,
33
+ * any box it overlaps, and an SVG shape's fill (4.5:1, or 3:1 from 24px, or 18.66px bold); text
34
+ * over an image or a gradient is not judged.
35
+ * - `broken_image`: an image of the deck's own that did not load.
36
+ *
37
+ * Another artifact's chart or image is a box here, sized as the deck sizes it: it is measured as
38
+ * one, and its content is the app's.
39
+ */
40
+ export declare function layoutProbe(slideNumber: number): LayoutProblem[];
41
+ //# sourceMappingURL=probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/artifacts/frames/probe.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EACT,SAAS,GACT,QAAQ,GACR,SAAS,GACT,SAAS,GACT,YAAY,GACZ,UAAU,GACV,cAAc,CAAA;IAClB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,mFAAmF;IACnF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC5C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE,CAqQhE"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Messages between the app and a deck in its sandboxed frame. The app asks; the frame answers
3
+ * each request by its id, and tells the app what happened inside it as events. Later abilities
4
+ * are new methods and events, not a new protocol.
5
+ */
6
+ export declare const FRAME_PROTOCOL = "sixb-frame/1";
7
+ /**
8
+ * A deck shows one slide scaled to fit on its stage, every slide in a grid, or one slide filling
9
+ * the page to present it.
10
+ */
11
+ export type DeckMode = "slide" | "overview" | "present";
12
+ /**
13
+ * How a frame opens, set in its URL so the first paint is right: at a slide, and with `fill`, that
14
+ * slide alone filling the frame with no stage around it, as a thumbnail or an embed shows it.
15
+ */
16
+ export interface FrameStart {
17
+ readonly slide?: number;
18
+ readonly fill?: boolean;
19
+ }
20
+ /** The fragment that carries a frame's start: `#sixb-slide=3&sixb-fill`. */
21
+ export declare function frameStartHash(start: FrameStart): string;
22
+ /** What the app asks of the frame. */
23
+ export type FrameRequest = FrameRequestOf<"theme", {
24
+ readonly tokens: Readonly<Record<string, string>>;
25
+ readonly dark: boolean;
26
+ }> | FrameRequestOf<"goto", {
27
+ readonly slide: number;
28
+ }> | FrameRequestOf<"mode", {
29
+ readonly mode: DeckMode;
30
+ }>;
31
+ interface FrameRequestOf<Method extends string, Params> {
32
+ readonly protocol: typeof FRAME_PROTOCOL;
33
+ readonly id: number;
34
+ readonly method: Method;
35
+ readonly params: Params;
36
+ }
37
+ /** The frame's answer to one request. */
38
+ export interface FrameResponse {
39
+ readonly protocol: typeof FRAME_PROTOCOL;
40
+ readonly id: number;
41
+ readonly error?: string;
42
+ }
43
+ /** What happened inside the frame. */
44
+ export type FrameEvent = FrameEventOf<"ready", {
45
+ readonly slides: number;
46
+ }>
47
+ /** The reader picked a slide in the overview. */
48
+ | FrameEventOf<"select", {
49
+ readonly slide: number;
50
+ }>
51
+ /** A key the app handles, pressed while the frame had focus. */
52
+ | FrameEventOf<"key", {
53
+ readonly key: string;
54
+ }>
55
+ /** A link to another artifact, which opens where the reader is. */
56
+ | FrameEventOf<"open", {
57
+ readonly address: string;
58
+ }>
59
+ /**
60
+ * Where the shown slide's `<sixb-embed>` boxes are, for the app to draw each over the frame: in
61
+ * the frame's pixels, with the scale the slide is drawn at. Empty in the overview, where an
62
+ * embed stays a placeholder, as it does in a filled frame, which never reports.
63
+ */
64
+ | FrameEventOf<"embeds", {
65
+ readonly embeds: readonly FrameEmbed[];
66
+ }>;
67
+ /** One `<sixb-embed>` on the shown slide. */
68
+ export interface FrameEmbed {
69
+ readonly address: string;
70
+ readonly rect: {
71
+ readonly x: number;
72
+ readonly y: number;
73
+ readonly width: number;
74
+ readonly height: number;
75
+ };
76
+ /** The slide's scale: the embed is drawn at `rect / scale`, then scaled with the slide. */
77
+ readonly scale: number;
78
+ }
79
+ interface FrameEventOf<Event extends string, Params> {
80
+ readonly protocol: typeof FRAME_PROTOCOL;
81
+ readonly event: Event;
82
+ readonly params: Params;
83
+ }
84
+ /** Keys the frame passes to the app, so a deck navigates the same with focus in it or not. */
85
+ export declare const DECK_KEYS: readonly ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "PageUp", "PageDown", "Home", "End", " ", "Escape"];
86
+ /**
87
+ * The theme tokens the app sends into a frame, read from the viewer as it is themed: the ones an
88
+ * artifact's theme may set.
89
+ */
90
+ export declare const FRAME_THEME_TOKENS: readonly string[];
91
+ /**
92
+ * A message from a frame as an event, or null when it is not one this protocol sends. A deck runs
93
+ * its own scripts, so anything it posts is checked for the shape the app relies on: whole slide
94
+ * numbers, a key the app handles, finite boxes, and no more embeds than a version may record.
95
+ */
96
+ export declare function parseFrameEvent(data: unknown): FrameEvent | null;
97
+ export {};
98
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/artifacts/frames/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The runtime the frame injects into a deck before anything else in its `<head>`. It is served as
3
+ * this function's own source, `(${frameRuntime})()`, so it imports nothing and names nothing
4
+ * outside itself: the protocol string and the keys repeat what `protocol.ts` declares, and a test
5
+ * holds the two together.
6
+ *
7
+ * It lays the deck out: every `section.slide` is a 1280×720 slide, shown one at a time scaled to
8
+ * fit, or all at once in a grid. The URL's fragment can open it at a slide, and with `sixb-fill`
9
+ * show that slide alone filling the frame, as a thumbnail or an embed does. It applies the theme the app sends, answers the app's requests,
10
+ * and tells the app about keys, picks in the overview, and links to other artifacts.
11
+ */
12
+ export declare function frameRuntime(): void;
13
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/artifacts/frames/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAyMnC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Text or an attribute as the browser reads it. HTMLRewriter hands both over as written in the
3
+ * HTML, entities included, so `artifact:…#Q3%20&amp;%20Q4` must read `&` before it is resolved.
4
+ */
5
+ export declare function decodeHtmlEntities(value: string): string;
6
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/artifacts/html.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWxD"}
@@ -0,0 +1,5 @@
1
+ /** A new artifact id, such as `art_k3m9q2x7tp`. */
2
+ export declare function createArtifactId(): string;
3
+ /** Whether `value` has the shape of an artifact id; whether that artifact exists is another matter. */
4
+ export declare function isArtifactId(value: string): boolean;
5
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/artifacts/ids.ts"],"names":[],"mappings":"AAIA,mDAAmD;AACnD,wBAAgB,gBAAgB,IAAI,MAAM,CAKzC;AAID,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * What a client needs to show an artifact the way publishing read it: the kinds and what each
3
+ * holds, the slugs its headings get, its theme, a sheet's workbook and CSV, the limits a version
4
+ * keeps within, the `artifact:` addresses that point into it, and the messages a viewer and a
5
+ * deck's frame exchange, versioned as `sixb-frame/1`. Browser-safe: no storage, no Bun APIs.
6
+ */
7
+ export { type ArtifactAddress, type CellRange, formatArtifactAddress, isArtifactAddress, parseArtifactAddress, parseSheetPart, type SheetPart, } from "./address";
8
+ export { CsvParseError, type CsvTable, parseCsv } from "./csv";
9
+ export { type DeckMode, FRAME_PROTOCOL, FRAME_THEME_TOKENS, type FrameEmbed, type FrameEvent, type FrameRequest, type FrameResponse, type FrameStart, frameStartHash, parseFrameEvent, } from "./frames/protocol";
10
+ export { ARTIFACT_KINDS, type ArtifactKind } from "./kinds";
11
+ export { ARTIFACT_LIMITS } from "./limits";
12
+ export { type ArtifactOutline, createHeadingSlugger, type DocumentHeading, type DocumentOutline, type FileOutline, type SheetOutline, type SheetSummary, type SlidesOutline, } from "./outline";
13
+ export { type ArtifactAddressTarget, type ResolvedArtifactPart, resolveArtifactAddress, } from "./resolve";
14
+ export { ARTIFACT_THEME_FILE, type ArtifactTheme, parseArtifactTheme } from "./theme";
15
+ export { NUMERIC_COLUMN_TYPES, parseSheetDate, parseSheetNumber, parseWorkbook, type SheetChartType, type SheetColumnFormat, type SheetColumnType, sheetFilePath, WORKBOOK_FILE, type Workbook, type WorkbookChart, type WorkbookSheet, } from "./workbook";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/artifacts/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,KAAK,SAAS,GACf,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC9D,OAAO,EACL,KAAK,QAAQ,EACb,cAAc,EACd,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,cAAc,EACd,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EACL,KAAK,eAAe,EACpB,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,sBAAsB,GACvB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACrF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,aAAa,EACb,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAA"}
@@ -0,0 +1,125 @@
1
+ // @bun
2
+ import {
3
+ ARTIFACT_LIMITS2,
4
+ isArtifactAddress2,
5
+ parseArtifactAddress2,
6
+ formatArtifactAddress2,
7
+ parseSheetPart2
8
+ } from "../chunk-mjddfa7k.js";
9
+ import {
10
+ ARTIFACT_THEME_FILE2,
11
+ ARTIFACT_THEME_TOKENS,
12
+ parseArtifactTheme2,
13
+ resolveArtifactAddress2,
14
+ createHeadingSlugger2,
15
+ CsvParseError2,
16
+ parseCsv2,
17
+ WORKBOOK_FILE2,
18
+ NUMERIC_COLUMN_TYPES2,
19
+ sheetFilePath2,
20
+ parseWorkbook2,
21
+ parseSheetNumber2,
22
+ parseSheetDate2
23
+ } from "../chunk-7q8t23v4.js";
24
+ import {
25
+ ARTIFACT_KINDS2
26
+ } from "../chunk-arns890k.js";
27
+ // src/artifacts/frames/protocol.ts
28
+ var FRAME_PROTOCOL = "sixb-frame/1";
29
+ function frameStartHash(start) {
30
+ const params = [];
31
+ if (start.slide !== undefined && start.slide > 1)
32
+ params.push(`sixb-slide=${Math.round(start.slide)}`);
33
+ if (start.fill)
34
+ params.push("sixb-fill");
35
+ return params.length > 0 ? `#${params.join("&")}` : "";
36
+ }
37
+ var DECK_KEYS = [
38
+ "ArrowLeft",
39
+ "ArrowRight",
40
+ "ArrowUp",
41
+ "ArrowDown",
42
+ "PageUp",
43
+ "PageDown",
44
+ "Home",
45
+ "End",
46
+ " ",
47
+ "Escape"
48
+ ];
49
+ var FRAME_THEME_TOKENS = ARTIFACT_THEME_TOKENS;
50
+ function parseFrameEvent(data) {
51
+ if (!isRecord(data) || data.protocol !== FRAME_PROTOCOL || !isRecord(data.params))
52
+ return null;
53
+ const { params } = data;
54
+ switch (data.event) {
55
+ case "ready":
56
+ return isCount(params.slides) ? event("ready", { slides: params.slides }) : null;
57
+ case "select":
58
+ return isCount(params.slide) && params.slide > 0 ? event("select", { slide: params.slide }) : null;
59
+ case "key":
60
+ return typeof params.key === "string" && DECK_KEYS.includes(params.key) ? event("key", { key: params.key }) : null;
61
+ case "open":
62
+ return isAddress(params.address) ? event("open", { address: params.address }) : null;
63
+ case "embeds": {
64
+ const { embeds } = params;
65
+ if (!Array.isArray(embeds) || embeds.length > ARTIFACT_LIMITS2.maxReferences)
66
+ return null;
67
+ const parsed = [];
68
+ for (const embed of embeds) {
69
+ if (!isRecord(embed) || !isAddress(embed.address) || !isRecord(embed.rect))
70
+ return null;
71
+ const { x, y, width, height } = embed.rect;
72
+ if (![x, y, width, height, embed.scale].every(Number.isFinite))
73
+ return null;
74
+ if (Number(width) < 0 || Number(height) < 0 || Number(embed.scale) <= 0)
75
+ return null;
76
+ parsed.push({
77
+ address: embed.address,
78
+ rect: { x: Number(x), y: Number(y), width: Number(width), height: Number(height) },
79
+ scale: Number(embed.scale)
80
+ });
81
+ }
82
+ return event("embeds", { embeds: parsed });
83
+ }
84
+ default:
85
+ return null;
86
+ }
87
+ }
88
+ function event(name, params) {
89
+ return { protocol: FRAME_PROTOCOL, event: name, params };
90
+ }
91
+ function isRecord(value) {
92
+ return typeof value === "object" && value !== null;
93
+ }
94
+ function isCount(value) {
95
+ return Number.isSafeInteger(value) && Number(value) >= 0;
96
+ }
97
+ function isAddress(value) {
98
+ return typeof value === "string" && value.length <= 2048;
99
+ }
100
+ export {
101
+ ARTIFACT_KINDS2 as ARTIFACT_KINDS,
102
+ ARTIFACT_LIMITS2 as ARTIFACT_LIMITS,
103
+ ARTIFACT_THEME_FILE2 as ARTIFACT_THEME_FILE,
104
+ CsvParseError2 as CsvParseError,
105
+ FRAME_PROTOCOL,
106
+ FRAME_THEME_TOKENS,
107
+ NUMERIC_COLUMN_TYPES2 as NUMERIC_COLUMN_TYPES,
108
+ WORKBOOK_FILE2 as WORKBOOK_FILE,
109
+ createHeadingSlugger2 as createHeadingSlugger,
110
+ formatArtifactAddress2 as formatArtifactAddress,
111
+ frameStartHash,
112
+ isArtifactAddress2 as isArtifactAddress,
113
+ parseArtifactAddress2 as parseArtifactAddress,
114
+ parseArtifactTheme2 as parseArtifactTheme,
115
+ parseCsv2 as parseCsv,
116
+ parseFrameEvent,
117
+ parseSheetDate2 as parseSheetDate,
118
+ parseSheetNumber2 as parseSheetNumber,
119
+ parseSheetPart2 as parseSheetPart,
120
+ parseWorkbook2 as parseWorkbook,
121
+ resolveArtifactAddress2 as resolveArtifactAddress,
122
+ sheetFilePath2 as sheetFilePath
123
+ };
124
+
125
+ //# debugId=1770743F29E57C2A64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/artifacts/frames/protocol.ts"],
4
+ "sourcesContent": [
5
+ "import { ARTIFACT_LIMITS } from \"../limits\"\nimport { ARTIFACT_THEME_TOKENS } from \"../theme\"\n\n/**\n * Messages between the app and a deck in its sandboxed frame. The app asks; the frame answers\n * each request by its id, and tells the app what happened inside it as events. Later abilities\n * are new methods and events, not a new protocol.\n */\nexport const FRAME_PROTOCOL = \"sixb-frame/1\"\n\n/**\n * A deck shows one slide scaled to fit on its stage, every slide in a grid, or one slide filling\n * the page to present it.\n */\nexport type DeckMode = \"slide\" | \"overview\" | \"present\"\n\n/**\n * How a frame opens, set in its URL so the first paint is right: at a slide, and with `fill`, that\n * slide alone filling the frame with no stage around it, as a thumbnail or an embed shows it.\n */\nexport interface FrameStart {\n readonly slide?: number\n readonly fill?: boolean\n}\n\n/** The fragment that carries a frame's start: `#sixb-slide=3&sixb-fill`. */\nexport function frameStartHash(start: FrameStart): string {\n const params: string[] = []\n if (start.slide !== undefined && start.slide > 1)\n params.push(`sixb-slide=${Math.round(start.slide)}`)\n if (start.fill) params.push(\"sixb-fill\")\n return params.length > 0 ? `#${params.join(\"&\")}` : \"\"\n}\n\n/** What the app asks of the frame. */\nexport type FrameRequest =\n | FrameRequestOf<\n \"theme\",\n { readonly tokens: Readonly<Record<string, string>>; readonly dark: boolean }\n >\n | FrameRequestOf<\"goto\", { readonly slide: number }>\n | FrameRequestOf<\"mode\", { readonly mode: DeckMode }>\n\ninterface FrameRequestOf<Method extends string, Params> {\n readonly protocol: typeof FRAME_PROTOCOL\n readonly id: number\n readonly method: Method\n readonly params: Params\n}\n\n/** The frame's answer to one request. */\nexport interface FrameResponse {\n readonly protocol: typeof FRAME_PROTOCOL\n readonly id: number\n readonly error?: string\n}\n\n/** What happened inside the frame. */\nexport type FrameEvent =\n | FrameEventOf<\"ready\", { readonly slides: number }>\n /** The reader picked a slide in the overview. */\n | FrameEventOf<\"select\", { readonly slide: number }>\n /** A key the app handles, pressed while the frame had focus. */\n | FrameEventOf<\"key\", { readonly key: string }>\n /** A link to another artifact, which opens where the reader is. */\n | FrameEventOf<\"open\", { readonly address: string }>\n /**\n * Where the shown slide's `<sixb-embed>` boxes are, for the app to draw each over the frame: in\n * the frame's pixels, with the scale the slide is drawn at. Empty in the overview, where an\n * embed stays a placeholder, as it does in a filled frame, which never reports.\n */\n | FrameEventOf<\"embeds\", { readonly embeds: readonly FrameEmbed[] }>\n\n/** One `<sixb-embed>` on the shown slide. */\nexport interface FrameEmbed {\n readonly address: string\n readonly rect: {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n }\n /** The slide's scale: the embed is drawn at `rect / scale`, then scaled with the slide. */\n readonly scale: number\n}\n\ninterface FrameEventOf<Event extends string, Params> {\n readonly protocol: typeof FRAME_PROTOCOL\n readonly event: Event\n readonly params: Params\n}\n\n/** Keys the frame passes to the app, so a deck navigates the same with focus in it or not. */\nexport const DECK_KEYS = [\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"PageUp\",\n \"PageDown\",\n \"Home\",\n \"End\",\n \" \",\n \"Escape\",\n] as const\n\n/**\n * The theme tokens the app sends into a frame, read from the viewer as it is themed: the ones an\n * artifact's theme may set.\n */\nexport const FRAME_THEME_TOKENS = ARTIFACT_THEME_TOKENS\n\n/**\n * A message from a frame as an event, or null when it is not one this protocol sends. A deck runs\n * its own scripts, so anything it posts is checked for the shape the app relies on: whole slide\n * numbers, a key the app handles, finite boxes, and no more embeds than a version may record.\n */\nexport function parseFrameEvent(data: unknown): FrameEvent | null {\n if (!isRecord(data) || data.protocol !== FRAME_PROTOCOL || !isRecord(data.params)) return null\n const { params } = data\n switch (data.event) {\n case \"ready\":\n return isCount(params.slides) ? event(\"ready\", { slides: params.slides }) : null\n case \"select\":\n return isCount(params.slide) && params.slide > 0\n ? event(\"select\", { slide: params.slide })\n : null\n case \"key\":\n return typeof params.key === \"string\" && (DECK_KEYS as readonly string[]).includes(params.key)\n ? event(\"key\", { key: params.key })\n : null\n case \"open\":\n return isAddress(params.address) ? event(\"open\", { address: params.address }) : null\n case \"embeds\": {\n const { embeds } = params\n if (!Array.isArray(embeds) || embeds.length > ARTIFACT_LIMITS.maxReferences) return null\n const parsed: FrameEmbed[] = []\n for (const embed of embeds) {\n if (!isRecord(embed) || !isAddress(embed.address) || !isRecord(embed.rect)) return null\n const { x, y, width, height } = embed.rect\n if (![x, y, width, height, embed.scale].every(Number.isFinite)) return null\n if (Number(width) < 0 || Number(height) < 0 || Number(embed.scale) <= 0) return null\n parsed.push({\n address: embed.address,\n rect: { x: Number(x), y: Number(y), width: Number(width), height: Number(height) },\n scale: Number(embed.scale),\n })\n }\n return event(\"embeds\", { embeds: parsed })\n }\n default:\n return null\n }\n}\n\nfunction event<Name extends FrameEvent[\"event\"]>(\n name: Name,\n params: Extract<FrameEvent, { event: Name }>[\"params\"]\n): FrameEvent {\n return { protocol: FRAME_PROTOCOL, event: name, params } as FrameEvent\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null\n}\n\nfunction isCount(value: unknown): value is number {\n return Number.isSafeInteger(value) && Number(value) >= 0\n}\n\n/** Long enough for any address a version can record; the app resolves it before using it. */\nfunction isAddress(value: unknown): value is string {\n return typeof value === \"string\" && value.length <= 2048\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "1770743F29E57C2A64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,5 @@
1
+ /** The kinds of artifact Sixb renders. An artifact's kind is fixed when it is created. */
2
+ export declare const ARTIFACT_KINDS: readonly ["document", "sheet", "slides", "file"];
3
+ export type ArtifactKind = (typeof ARTIFACT_KINDS)[number];
4
+ export declare function isArtifactKind(value: unknown): value is ArtifactKind;
5
+ //# sourceMappingURL=kinds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../../src/artifacts/kinds.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,eAAO,MAAM,cAAc,kDAAmD,CAAA;AAE9E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE"}