@sixb/core 0.1.21 → 0.1.22
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.
- package/dist/actions/commit-edits.d.ts +3 -1
- package/dist/actions/commit-edits.d.ts.map +1 -1
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.js +63 -59
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +9 -1
- package/dist/actions/read-facade.d.ts.map +1 -1
- package/dist/actions/request.d.ts +15 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run/context.d.ts +1 -0
- package/dist/actions/run/context.d.ts.map +1 -1
- package/dist/actions/run/execute.d.ts +2 -3
- package/dist/actions/run/execute.d.ts.map +1 -1
- package/dist/actions/run/executor.d.ts +3 -0
- package/dist/actions/run/executor.d.ts.map +1 -1
- package/dist/actions/run/normalize.d.ts +2 -1
- package/dist/actions/run/normalize.d.ts.map +1 -1
- package/dist/actions/run/signals.d.ts +1 -3
- package/dist/actions/run/signals.d.ts.map +1 -1
- package/dist/actions/run/types.d.ts +16 -1
- package/dist/actions/run/types.d.ts.map +1 -1
- package/dist/actions/run-authorization.d.ts +14 -0
- package/dist/actions/run-authorization.d.ts.map +1 -1
- package/dist/actions/types/context.d.ts +17 -1
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/validators.d.ts.map +1 -1
- package/dist/activity/timeline.d.ts +8 -1
- package/dist/activity/timeline.d.ts.map +1 -1
- package/dist/agents/accounting.d.ts +15 -0
- package/dist/agents/accounting.d.ts.map +1 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/agent-mail.d.ts +9 -0
- package/dist/agents/agent-mail.d.ts.map +1 -0
- package/dist/agents/api-gateway.d.ts +5 -0
- package/dist/agents/api-gateway.d.ts.map +1 -1
- package/dist/agents/approval-continuation.d.ts +23 -0
- package/dist/agents/approval-continuation.d.ts.map +1 -0
- package/dist/agents/approval-executor.d.ts +56 -0
- package/dist/agents/approval-executor.d.ts.map +1 -0
- package/dist/agents/approval-outcome.d.ts +8 -0
- package/dist/agents/approval-outcome.d.ts.map +1 -0
- package/dist/agents/approvals.d.ts +210 -0
- package/dist/agents/approvals.d.ts.map +1 -0
- package/dist/agents/authority.d.ts +10 -0
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/builders.d.ts.map +1 -1
- package/dist/agents/cancel.d.ts +23 -0
- package/dist/agents/cancel.d.ts.map +1 -0
- package/dist/agents/child-question.d.ts +18 -0
- package/dist/agents/child-question.d.ts.map +1 -0
- package/dist/agents/children.d.ts +99 -0
- package/dist/agents/children.d.ts.map +1 -0
- package/dist/agents/context/index.js +1 -1
- package/dist/agents/context-compaction.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +13 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +180 -14
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/fork.d.ts +16 -0
- package/dist/agents/fork.d.ts.map +1 -0
- package/dist/agents/ids.d.ts +7 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +19 -8
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +159 -86
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/memory-execution.d.ts +57 -0
- package/dist/agents/memory-execution.d.ts.map +1 -0
- package/dist/agents/memory.d.ts +49 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/message.d.ts +50 -1
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +19 -0
- package/dist/agents/model-loop.d.ts.map +1 -1
- package/dist/agents/model-routing.d.ts +19 -0
- package/dist/agents/model-routing.d.ts.map +1 -0
- package/dist/agents/participants.d.ts +18 -0
- package/dist/agents/participants.d.ts.map +1 -0
- package/dist/agents/reference.d.ts.map +1 -1
- package/dist/agents/request.d.ts +36 -2
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/run-scope.d.ts +51 -0
- package/dist/agents/run-scope.d.ts.map +1 -0
- package/dist/agents/streams/index.d.ts +3 -2
- package/dist/agents/streams/index.d.ts.map +1 -1
- package/dist/agents/streams/index.js +7 -3
- package/dist/agents/streams/index.js.map +1 -1
- package/dist/agents/streams/internal.d.ts +1 -1
- package/dist/agents/streams/internal.d.ts.map +1 -1
- package/dist/agents/streams/internal.js +5 -3
- package/dist/agents/streams/internal.js.map +1 -1
- package/dist/agents/streams/protocol.d.ts +122 -3
- package/dist/agents/streams/protocol.d.ts.map +1 -1
- package/dist/agents/subagent-runs.d.ts +12 -0
- package/dist/agents/subagent-runs.d.ts.map +1 -0
- package/dist/agents/thread-access.d.ts +53 -0
- package/dist/agents/thread-access.d.ts.map +1 -0
- package/dist/agents/tool-definition.d.ts +5 -4
- package/dist/agents/tool-definition.d.ts.map +1 -1
- package/dist/agents/types.d.ts +23 -4
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/artifacts/access.d.ts +52 -0
- package/dist/artifacts/access.d.ts.map +1 -0
- package/dist/artifacts/canvas.d.ts +92 -0
- package/dist/artifacts/canvas.d.ts.map +1 -0
- package/dist/artifacts/csv.d.ts +5 -0
- package/dist/artifacts/csv.d.ts.map +1 -1
- package/dist/artifacts/errors.d.ts +7 -2
- package/dist/artifacts/errors.d.ts.map +1 -1
- package/dist/artifacts/execution.d.ts +102 -7
- package/dist/artifacts/execution.d.ts.map +1 -1
- package/dist/artifacts/formula/check.d.ts +24 -0
- package/dist/artifacts/formula/check.d.ts.map +1 -0
- package/dist/artifacts/formula/evaluate.d.ts +32 -0
- package/dist/artifacts/formula/evaluate.d.ts.map +1 -0
- package/dist/artifacts/formula/index.d.ts +38 -0
- package/dist/artifacts/formula/index.d.ts.map +1 -0
- package/dist/artifacts/formula/parser.d.ts +67 -0
- package/dist/artifacts/formula/parser.d.ts.map +1 -0
- package/dist/artifacts/frames/assets.d.ts +11 -9
- package/dist/artifacts/frames/assets.d.ts.map +1 -1
- package/dist/artifacts/frames/entries.d.ts +19 -0
- package/dist/artifacts/frames/entries.d.ts.map +1 -0
- package/dist/artifacts/frames/grants.d.ts +6 -6
- package/dist/artifacts/frames/grants.d.ts.map +1 -1
- package/dist/artifacts/frames/index.d.ts +4 -2
- package/dist/artifacts/frames/index.d.ts.map +1 -1
- package/dist/artifacts/frames/index.js +444 -51
- package/dist/artifacts/frames/index.js.map +10 -8
- package/dist/artifacts/frames/kit.d.ts +10 -5
- package/dist/artifacts/frames/kit.d.ts.map +1 -1
- package/dist/artifacts/frames/probe.d.ts +16 -12
- package/dist/artifacts/frames/probe.d.ts.map +1 -1
- package/dist/artifacts/frames/protocol.d.ts +79 -10
- package/dist/artifacts/frames/protocol.d.ts.map +1 -1
- package/dist/artifacts/frames/runtime.d.ts +27 -9
- package/dist/artifacts/frames/runtime.d.ts.map +1 -1
- package/dist/artifacts/index.d.ts +11 -5
- package/dist/artifacts/index.d.ts.map +1 -1
- package/dist/artifacts/index.js +128 -6
- package/dist/artifacts/index.js.map +3 -3
- package/dist/artifacts/kinds.d.ts +1 -1
- package/dist/artifacts/kinds.d.ts.map +1 -1
- package/dist/artifacts/limits.d.ts +30 -0
- package/dist/artifacts/limits.d.ts.map +1 -1
- package/dist/artifacts/live-sheet.d.ts +65 -0
- package/dist/artifacts/live-sheet.d.ts.map +1 -0
- package/dist/artifacts/outline.d.ts +27 -1
- package/dist/artifacts/outline.d.ts.map +1 -1
- package/dist/artifacts/publish/index.d.ts +2 -0
- package/dist/artifacts/publish/index.d.ts.map +1 -1
- package/dist/artifacts/publish/index.js +59 -19
- package/dist/artifacts/publish/index.js.map +1 -1
- package/dist/artifacts/publish/publish.d.ts +43 -11
- package/dist/artifacts/publish/publish.d.ts.map +1 -1
- package/dist/artifacts/publish/queries.d.ts +33 -0
- package/dist/artifacts/publish/queries.d.ts.map +1 -0
- package/dist/artifacts/publish/references.d.ts +6 -3
- package/dist/artifacts/publish/references.d.ts.map +1 -1
- package/dist/artifacts/publish/validate/canvas.d.ts +18 -0
- package/dist/artifacts/publish/validate/canvas.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/html.d.ts +20 -0
- package/dist/artifacts/publish/validate/html.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/page.d.ts +15 -0
- package/dist/artifacts/publish/validate/page.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/sheet.d.ts +11 -3
- package/dist/artifacts/publish/validate/sheet.d.ts.map +1 -1
- package/dist/artifacts/publish/validate/slides.d.ts +1 -7
- package/dist/artifacts/publish/validate/slides.d.ts.map +1 -1
- package/dist/artifacts/queries.d.ts +95 -0
- package/dist/artifacts/queries.d.ts.map +1 -0
- package/dist/artifacts/resolve.d.ts +6 -0
- package/dist/artifacts/resolve.d.ts.map +1 -1
- package/dist/artifacts/run-query.d.ts +26 -0
- package/dist/artifacts/run-query.d.ts.map +1 -0
- package/dist/artifacts/serialize-query.d.ts +12 -0
- package/dist/artifacts/serialize-query.d.ts.map +1 -0
- package/dist/artifacts/sheet-rules.d.ts +26 -0
- package/dist/artifacts/sheet-rules.d.ts.map +1 -0
- package/dist/artifacts/tones.d.ts +8 -0
- package/dist/artifacts/tones.d.ts.map +1 -0
- package/dist/artifacts/workbook.d.ts +76 -5
- package/dist/artifacts/workbook.d.ts.map +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +14 -11
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/member-events.d.ts +13 -0
- package/dist/auth/member-events.d.ts.map +1 -0
- package/dist/auth/profile.d.ts +11 -0
- package/dist/auth/profile.d.ts.map +1 -0
- package/dist/auth/runtime.d.ts +31 -3
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/strategy.d.ts +3 -1
- package/dist/auth/strategy.d.ts.map +1 -1
- package/dist/auth/strategy.js +7 -3
- package/dist/auth/strategy.js.map +1 -1
- package/dist/auth/types.d.ts +30 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/decision.d.ts +15 -0
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/event-visibility.d.ts +5 -1
- package/dist/authorization/event-visibility.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +2 -2
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.d.ts +2 -2
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +12 -7
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +19 -1
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/authorization/run-visibility.d.ts +8 -1
- package/dist/authorization/run-visibility.d.ts.map +1 -1
- package/dist/authorization/types.d.ts +14 -0
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/bootstrap/index.js +69 -65
- package/dist/bootstrap/index.js.map +2 -2
- package/dist/{chunk-ky3j490c.js → chunk-02bzjgnt.js} +6 -6
- package/dist/{chunk-ky3j490c.js.map → chunk-02bzjgnt.js.map} +1 -1
- package/dist/{chunk-mfs23znk.js → chunk-07kkp2e1.js} +1 -1
- package/dist/{chunk-c1rxbz5y.js → chunk-098anw4f.js} +21 -19
- package/dist/chunk-098anw4f.js.map +12 -0
- package/dist/{chunk-z58tm0hm.js → chunk-0phpbbvm.js} +3 -3
- package/dist/{chunk-ere85b8y.js → chunk-0xmt5p5y.js} +116 -27
- package/dist/chunk-0xmt5p5y.js.map +14 -0
- package/dist/{chunk-t6f3tdnr.js → chunk-16a9dmfy.js} +33 -2
- package/dist/{chunk-t6f3tdnr.js.map → chunk-16a9dmfy.js.map} +5 -4
- package/dist/chunk-18sk89cg.js +47 -0
- package/dist/chunk-18sk89cg.js.map +10 -0
- package/dist/{chunk-e17zdm62.js → chunk-1t6k1avb.js} +1 -1
- package/dist/chunk-2626mh4m.js +693 -0
- package/dist/chunk-2626mh4m.js.map +19 -0
- package/dist/{chunk-qczk96d9.js → chunk-2adz0h75.js} +13 -4
- package/dist/chunk-2adz0h75.js.map +11 -0
- package/dist/{chunk-kge7k6ey.js → chunk-2fn60nvs.js} +2 -2
- package/dist/{chunk-99nd4rc1.js → chunk-2gjj5dx3.js} +5 -4
- package/dist/{chunk-99nd4rc1.js.map → chunk-2gjj5dx3.js.map} +3 -3
- package/dist/{chunk-mjddfa7k.js → chunk-3fqxbn31.js} +2 -24
- package/dist/{chunk-mjddfa7k.js.map → chunk-3fqxbn31.js.map} +3 -4
- package/dist/{chunk-y0c4e6ex.js → chunk-3gbefjg5.js} +1 -1
- package/dist/{chunk-5hx48dnn.js → chunk-45ngkxkp.js} +52 -31
- package/dist/chunk-45ngkxkp.js.map +13 -0
- package/dist/{chunk-cy4mbddw.js → chunk-48jezz3j.js} +1 -1
- package/dist/{chunk-561r0yc9.js → chunk-4b26qwbg.js} +13 -13
- package/dist/{chunk-561r0yc9.js.map → chunk-4b26qwbg.js.map} +1 -1
- package/dist/{chunk-9k93ah50.js → chunk-4f3ydv7t.js} +33 -69
- package/dist/chunk-4f3ydv7t.js.map +10 -0
- package/dist/chunk-4y26vs3v.js +97 -0
- package/dist/chunk-4y26vs3v.js.map +10 -0
- package/dist/{chunk-4as3wt1c.js → chunk-4ymrcdbm.js} +7 -3
- package/dist/chunk-4ymrcdbm.js.map +12 -0
- package/dist/{chunk-hcbyfxbe.js → chunk-5grk14e5.js} +76 -2
- package/dist/{chunk-hcbyfxbe.js.map → chunk-5grk14e5.js.map} +4 -3
- package/dist/{chunk-8frc8a4j.js → chunk-65pyhyas.js} +90 -83
- package/dist/chunk-65pyhyas.js.map +20 -0
- package/dist/{chunk-hwksyjks.js → chunk-661ezhks.js} +182 -6
- package/dist/chunk-661ezhks.js.map +11 -0
- package/dist/{chunk-447a5c0p.js → chunk-6n69k945.js} +2 -2
- package/dist/{chunk-0bphap9y.js → chunk-6p0pastb.js} +5 -5
- package/dist/{chunk-9j4jw7as.js → chunk-6rrtzea3.js} +18 -5
- package/dist/chunk-6rrtzea3.js.map +14 -0
- package/dist/{chunk-431pyp2c.js → chunk-6y0mkhex.js} +2 -2
- package/dist/{chunk-f4pamkt9.js → chunk-73v685wb.js} +10 -10
- package/dist/{chunk-f4pamkt9.js.map → chunk-73v685wb.js.map} +3 -3
- package/dist/{chunk-akzryx9h.js → chunk-7gr4j2eq.js} +7836 -5047
- package/dist/chunk-7gr4j2eq.js.map +120 -0
- package/dist/{chunk-bk9svbcq.js → chunk-7mc2wkre.js} +386 -86
- package/dist/chunk-7mc2wkre.js.map +50 -0
- package/dist/{chunk-6rqgmkde.js → chunk-7z5p905k.js} +335 -703
- package/dist/chunk-7z5p905k.js.map +22 -0
- package/dist/{chunk-yxd3nnqt.js → chunk-9mab3dvg.js} +26 -2
- package/dist/chunk-9mab3dvg.js.map +11 -0
- package/dist/chunk-9wr3yajk.js +42 -0
- package/dist/chunk-9wr3yajk.js.map +10 -0
- package/dist/chunk-az47zep4.js +41 -0
- package/dist/chunk-az47zep4.js.map +10 -0
- package/dist/{chunk-s7jg7pmn.js → chunk-bab05bhg.js} +1 -1
- package/dist/{chunk-858emn8m.js → chunk-bktev1ds.js} +14 -11
- package/dist/{chunk-858emn8m.js.map → chunk-bktev1ds.js.map} +3 -3
- package/dist/{chunk-dhcv7yxc.js → chunk-c0vk1djt.js} +5 -3
- package/dist/chunk-c0vk1djt.js.map +11 -0
- package/dist/chunk-c69nj7se.js +3 -0
- package/dist/{chunk-7n30ybym.js.map → chunk-c69nj7se.js.map} +1 -1
- package/dist/{chunk-q5e5tv4b.js → chunk-c844dkwd.js} +1 -1
- package/dist/{chunk-g257jwnc.js → chunk-cdk3egjj.js} +17 -4
- package/dist/chunk-cdk3egjj.js.map +12 -0
- package/dist/chunk-cswhawa2.js +113 -0
- package/dist/chunk-cswhawa2.js.map +10 -0
- package/dist/{chunk-cfj9dfbb.js → chunk-d2m879s4.js} +2 -2
- package/dist/{chunk-arns890k.js → chunk-d7vyc7k6.js} +2 -2
- package/dist/chunk-d7vyc7k6.js.map +10 -0
- package/dist/{chunk-q7gn29y3.js → chunk-dp0cdtj2.js} +2 -2
- package/dist/{chunk-6x0pqh32.js → chunk-e5wf5vz0.js} +3 -1
- package/dist/chunk-e5wf5vz0.js.map +10 -0
- package/dist/{chunk-cn0fwwhy.js → chunk-efmm01gj.js} +108 -1045
- package/dist/chunk-efmm01gj.js.map +18 -0
- package/dist/{chunk-918wwnaa.js → chunk-ezne9wc9.js} +1224 -430
- package/dist/chunk-ezne9wc9.js.map +71 -0
- package/dist/{chunk-tbc1ngpd.js → chunk-fe8zwt8b.js} +58 -12
- package/dist/{chunk-tbc1ngpd.js.map → chunk-fe8zwt8b.js.map} +5 -4
- package/dist/{chunk-br3k6qbf.js → chunk-fm62y49k.js} +1 -1
- package/dist/{chunk-nq6gpjt7.js → chunk-fntqb7qy.js} +30 -4
- package/dist/{chunk-nq6gpjt7.js.map → chunk-fntqb7qy.js.map} +5 -5
- package/dist/{chunk-1cc1xaf3.js → chunk-fp2kq35z.js} +26 -10
- package/dist/{chunk-1cc1xaf3.js.map → chunk-fp2kq35z.js.map} +5 -5
- package/dist/{chunk-vvxtn22d.js → chunk-g663fahq.js} +2 -2
- package/dist/{chunk-k43ct2ke.js → chunk-gvj5cd3b.js} +16 -9
- package/dist/chunk-gvj5cd3b.js.map +12 -0
- package/dist/{chunk-rmakanzx.js → chunk-h33shhq6.js} +5 -5
- package/dist/{chunk-nn5xnx3s.js → chunk-h3pbv7n8.js} +1738 -38
- package/dist/chunk-h3pbv7n8.js.map +48 -0
- package/dist/chunk-hn2r7z41.js.map +1 -1
- package/dist/{chunk-pbcbn83d.js → chunk-hqsp2sx4.js} +54 -8
- package/dist/chunk-hqsp2sx4.js.map +14 -0
- package/dist/{chunk-d09e3rax.js → chunk-hwarjrgf.js} +1 -1
- package/dist/{chunk-vf57cr4t.js → chunk-hyesv9dv.js} +1 -1
- package/dist/chunk-hz5d43gn.js +45 -0
- package/dist/chunk-hz5d43gn.js.map +10 -0
- package/dist/{chunk-91mg3nj9.js → chunk-j936th07.js} +86 -41
- package/dist/chunk-j936th07.js.map +12 -0
- package/dist/chunk-kcqpk9w1.js +75 -0
- package/dist/chunk-kcqpk9w1.js.map +10 -0
- package/dist/{chunk-5vems3nx.js → chunk-m2nevja0.js} +2 -2
- package/dist/{chunk-x9v4cx1d.js → chunk-m36fw8ft.js} +1 -1
- package/dist/{chunk-a40ad1ft.js → chunk-mbsbxarb.js} +1 -1
- package/dist/chunk-mzx71snp.js +129 -0
- package/dist/chunk-mzx71snp.js.map +10 -0
- package/dist/{chunk-6aawea28.js → chunk-n8q5j6y5.js} +1 -1
- package/dist/{chunk-d7dnxdep.js → chunk-n9zpx9c6.js} +4 -4
- package/dist/{chunk-xvsc5m8n.js → chunk-npcr0228.js} +1 -1
- package/dist/chunk-nydf3dbe.js +663 -0
- package/dist/chunk-nydf3dbe.js.map +13 -0
- package/dist/chunk-pdt5cw8z.js +233 -0
- package/dist/chunk-pdt5cw8z.js.map +11 -0
- package/dist/{chunk-rj69qcrd.js → chunk-pgrf64hp.js} +55 -7
- package/dist/chunk-pgrf64hp.js.map +12 -0
- package/dist/{chunk-y5tah2kf.js → chunk-q4pmvkg0.js} +1 -1
- package/dist/chunk-qhqgp4jf.js +1418 -0
- package/dist/chunk-qhqgp4jf.js.map +22 -0
- package/dist/{chunk-48qjhh6v.js → chunk-qx00vjrj.js} +19 -60
- package/dist/chunk-qx00vjrj.js.map +13 -0
- package/dist/{chunk-5948n82c.js → chunk-r6szek0x.js} +184 -7
- package/dist/chunk-r6szek0x.js.map +10 -0
- package/dist/{chunk-v4jbb3rs.js → chunk-rap5w0x0.js} +156 -2
- package/dist/chunk-rap5w0x0.js.map +10 -0
- package/dist/{chunk-pfp1txq2.js → chunk-sgx82nnt.js} +5 -31
- package/dist/{chunk-pfp1txq2.js.map → chunk-sgx82nnt.js.map} +3 -4
- package/dist/{chunk-bkpke1sg.js → chunk-t5608tkq.js} +3 -1
- package/dist/{chunk-bkpke1sg.js.map → chunk-t5608tkq.js.map} +3 -3
- package/dist/{chunk-29yx306f.js → chunk-tdxfsg1c.js} +507 -265
- package/dist/chunk-tdxfsg1c.js.map +23 -0
- package/dist/{chunk-d5rjr8c0.js → chunk-vabga7fk.js} +1 -1
- package/dist/{chunk-dhdha526.js → chunk-vhbw5sqm.js} +26 -2
- package/dist/chunk-vhbw5sqm.js.map +10 -0
- package/dist/{chunk-e6k4thh5.js → chunk-vpgwq5nf.js} +98 -12
- package/dist/chunk-vpgwq5nf.js.map +21 -0
- package/dist/{chunk-61y5xs4p.js → chunk-vyt322b6.js} +69 -50
- package/dist/{chunk-61y5xs4p.js.map → chunk-vyt322b6.js.map} +4 -4
- package/dist/chunk-waqk73p1.js +2380 -0
- package/dist/chunk-waqk73p1.js.map +23 -0
- package/dist/chunk-wsc1brye.js +27 -0
- package/dist/chunk-wsc1brye.js.map +10 -0
- package/dist/{chunk-96yw3pwd.js → chunk-y7dbmaqh.js} +28 -2
- package/dist/chunk-y7dbmaqh.js.map +10 -0
- package/dist/{chunk-6vb4st8k.js → chunk-yc9ners4.js} +120 -19
- package/dist/{chunk-6vb4st8k.js.map → chunk-yc9ners4.js.map} +8 -8
- package/dist/{chunk-dvd2fp9q.js → chunk-zbc929zg.js} +28 -4
- package/dist/chunk-zbc929zg.js.map +13 -0
- package/dist/chunk-zrvhsq7f.js +37 -0
- package/dist/chunk-zrvhsq7f.js.map +10 -0
- package/dist/datasets/write.js +5 -5
- package/dist/error-reporting/internal.js +3 -3
- package/dist/errors/catalog.d.ts +26 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +1 -1
- package/dist/events/definitions.d.ts +7 -0
- package/dist/events/definitions.d.ts.map +1 -1
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/index.d.ts +2 -3
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +8 -10
- package/dist/events/index.js.map +1 -1
- package/dist/events/scope.d.ts.map +1 -1
- package/dist/events/scope.js +1 -1
- package/dist/events/selectors/builder.d.ts +12 -1
- package/dist/events/selectors/builder.d.ts.map +1 -1
- package/dist/events/selectors/index.d.ts +2 -2
- package/dist/events/selectors/index.d.ts.map +1 -1
- package/dist/events/selectors/index.js +2 -2
- package/dist/events/selectors/types.d.ts +19 -3
- package/dist/events/selectors/types.d.ts.map +1 -1
- package/dist/events/service.d.ts +17 -2
- package/dist/events/service.d.ts.map +1 -1
- package/dist/events/types/index.d.ts +3 -1
- package/dist/events/types/index.d.ts.map +1 -1
- package/dist/events/types/users.d.ts +63 -0
- package/dist/events/types/users.d.ts.map +1 -0
- package/dist/events/view-conditions.d.ts +34 -0
- package/dist/events/view-conditions.d.ts.map +1 -0
- package/dist/execution/agent.d.ts +15 -0
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +63 -57
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +51 -2
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/lineage.d.ts +7 -0
- package/dist/execution/lineage.d.ts.map +1 -0
- package/dist/execution/object-reader-ontology.d.ts +2 -2
- package/dist/execution/object-reader-ontology.d.ts.map +1 -1
- package/dist/execution/object-reader-security.d.ts +24 -3
- package/dist/execution/object-reader-security.d.ts.map +1 -1
- package/dist/execution/object-reader-users.d.ts +20 -0
- package/dist/execution/object-reader-users.d.ts.map +1 -0
- package/dist/execution/preparation.d.ts +23 -0
- package/dist/execution/preparation.d.ts.map +1 -0
- package/dist/execution/primitive.js +61 -57
- package/dist/execution/primitive.js.map +1 -1
- package/dist/execution/request.d.ts +2 -1
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +64 -56
- package/dist/execution/request.js.map +3 -3
- package/dist/execution/unique-lookup.d.ts +14 -0
- package/dist/execution/unique-lookup.d.ts.map +1 -0
- package/dist/execution/visible-objects.d.ts +12 -0
- package/dist/execution/visible-objects.d.ts.map +1 -0
- package/dist/http/api-routes.d.ts +17 -0
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +32 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +137 -126
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/index.js +5 -5
- package/dist/materialization/errors.d.ts +25 -0
- package/dist/materialization/errors.d.ts.map +1 -1
- package/dist/materialization/event-envelopes.d.ts +5 -0
- package/dist/materialization/event-envelopes.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +1 -1
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +14 -8
- package/dist/materialization/index.js.map +1 -1
- package/dist/materialization/model.d.ts +20 -2
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materializer/edits/commit.d.ts.map +1 -1
- package/dist/materializer/edits/load-state.d.ts +5 -1
- package/dist/materializer/edits/load-state.d.ts.map +1 -1
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/edits/unique-values.d.ts +47 -0
- package/dist/materializer/edits/unique-values.d.ts.map +1 -0
- package/dist/materializer/edits/working-state.d.ts +6 -1
- package/dist/materializer/edits/working-state.d.ts.map +1 -1
- package/dist/materializer/execution/work-records.d.ts +7 -1
- package/dist/materializer/execution/work-records.d.ts.map +1 -1
- package/dist/materializer/index.js +45 -41
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/projections/source-materialization.d.ts +1 -0
- package/dist/materializer/projections/source-materialization.d.ts.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/materializer/shared/projection-run.d.ts +0 -1
- package/dist/materializer/shared/projection-run.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/models/audio/catalog.d.ts +13 -1
- package/dist/models/audio/catalog.d.ts.map +1 -1
- package/dist/models/audio/errors.d.ts +6 -1
- package/dist/models/audio/errors.d.ts.map +1 -1
- package/dist/models/audio/runtime.d.ts.map +1 -1
- package/dist/models/audio/speech.d.ts +8 -0
- package/dist/models/audio/speech.d.ts.map +1 -0
- package/dist/models/audio/types.d.ts +93 -0
- package/dist/models/audio/types.d.ts.map +1 -1
- package/dist/models/calls.d.ts +27 -0
- package/dist/models/calls.d.ts.map +1 -0
- package/dist/models/catalog-index.d.ts +7 -4
- package/dist/models/catalog-index.d.ts.map +1 -1
- package/dist/models/catalog.d.ts +55 -3
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/decision/runtime.d.ts +6 -1
- package/dist/models/decision/runtime.d.ts.map +1 -1
- package/dist/models/decision/validation.d.ts +4 -1
- package/dist/models/decision/validation.d.ts.map +1 -1
- package/dist/models/definitions.d.ts +23 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/events.d.ts +12 -1
- package/dist/models/events.d.ts.map +1 -1
- package/dist/models/execution/binding.d.ts +3 -1
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/index.d.ts +1 -0
- package/dist/models/execution/index.d.ts.map +1 -1
- package/dist/models/execution/index.js +44 -34
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-accounting.d.ts.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +3 -0
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/usage.d.ts.map +1 -1
- package/dist/models/execution.d.ts +4 -2
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/generation-types.d.ts +8 -1
- package/dist/models/generation-types.d.ts.map +1 -1
- package/dist/models/image/catalog.d.ts +13 -0
- package/dist/models/image/catalog.d.ts.map +1 -0
- package/dist/models/image/errors.d.ts +8 -0
- package/dist/models/image/errors.d.ts.map +1 -0
- package/dist/models/image/runtime.d.ts +8 -0
- package/dist/models/image/runtime.d.ts.map +1 -0
- package/dist/models/image/types.d.ts +103 -0
- package/dist/models/image/types.d.ts.map +1 -0
- package/dist/models/index.d.ts +12 -8
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +17 -7
- package/dist/models/index.js.map +1 -1
- package/dist/models/input-file.d.ts +9 -0
- package/dist/models/input-file.d.ts.map +1 -0
- package/dist/models/language-model.d.ts +13 -0
- package/dist/models/language-model.d.ts.map +1 -1
- package/dist/models/pricing.d.ts +25 -10
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/models/rate-card.d.ts +44 -6
- package/dist/models/rate-card.d.ts.map +1 -1
- package/dist/objects/conditional-writes.d.ts +37 -0
- package/dist/objects/conditional-writes.d.ts.map +1 -0
- package/dist/objects/execution.d.ts +2 -0
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.d.ts +1 -0
- package/dist/objects/index.d.ts.map +1 -1
- package/dist/objects/index.js +68 -58
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/authorization.d.ts +3 -0
- package/dist/objects/link/authorization.d.ts.map +1 -1
- package/dist/objects/link/endpoints.d.ts +21 -2
- package/dist/objects/link/endpoints.d.ts.map +1 -1
- package/dist/objects/link/remove.d.ts.map +1 -1
- package/dist/objects/link/upsert-batch.d.ts.map +1 -1
- package/dist/objects/link/upsert.d.ts.map +1 -1
- package/dist/objects/materializer-adapter.d.ts +13 -4
- package/dist/objects/materializer-adapter.d.ts.map +1 -1
- package/dist/objects/object/delete.d.ts +3 -0
- package/dist/objects/object/delete.d.ts.map +1 -1
- package/dist/objects/object/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/upsert.d.ts.map +1 -1
- package/dist/objects/query/current-user.d.ts +17 -0
- package/dist/objects/query/current-user.d.ts.map +1 -0
- package/dist/objects/query/executor.d.ts +14 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +2 -2
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +49 -44
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +19 -1
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/matches-predicate.d.ts +9 -0
- package/dist/objects/query/matches-predicate.d.ts.map +1 -0
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/user-expansions.d.ts +27 -0
- package/dist/objects/query/user-expansions.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/runtime-batch.d.ts +3 -1
- package/dist/objects/runtime-batch.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/query-executor.d.ts +6 -0
- package/dist/objects/sdk/query-executor.d.ts.map +1 -1
- package/dist/objects/serialize.d.ts +39 -0
- package/dist/objects/serialize.d.ts.map +1 -0
- package/dist/objects/unique-violation.d.ts +22 -0
- package/dist/objects/unique-violation.d.ts.map +1 -0
- package/dist/ontology/builders.d.ts +3 -1
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/index.d.ts +2 -2
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +11 -7
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/internal.js +7 -5
- package/dist/ontology/internal.js.map +3 -3
- package/dist/ontology/json-schema.d.ts.map +1 -1
- package/dist/ontology/primitives.d.ts +3 -0
- package/dist/ontology/primitives.d.ts.map +1 -1
- package/dist/ontology/registry.d.ts +6 -0
- package/dist/ontology/registry.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +9 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/unique-values.d.ts +26 -0
- package/dist/ontology/unique-values.d.ts.map +1 -0
- package/dist/ontology/user-ref.d.ts +23 -0
- package/dist/ontology/user-ref.d.ts.map +1 -1
- package/dist/ontology/validation/properties.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +43 -40
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +36 -33
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/registry.d.ts +4 -0
- package/dist/projections/registry.d.ts.map +1 -1
- package/dist/projections/revision.d.ts +15 -0
- package/dist/projections/revision.d.ts.map +1 -1
- package/dist/projections/run-dispatch.d.ts.map +1 -1
- package/dist/projections/types.d.ts +2 -0
- package/dist/projections/types.d.ts.map +1 -1
- package/dist/query.d.ts +4 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/rules/execution.d.ts.map +1 -1
- package/dist/runtime/ai-cost.d.ts +2 -0
- package/dist/runtime/ai-cost.d.ts.map +1 -1
- package/dist/runtime/ai-usage.d.ts +7 -0
- package/dist/runtime/ai-usage.d.ts.map +1 -1
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.js +42 -38
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +2 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +66 -8
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +7 -6
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/schedules/builders.d.ts.map +1 -1
- package/dist/schedules/index.js +3 -3
- package/dist/schedules/runtime.d.ts.map +1 -1
- package/dist/schedules/validation.d.ts.map +1 -1
- package/dist/security/grants.d.ts +12 -4
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/internal.js +1 -1
- package/dist/security/project.d.ts +4 -1
- package/dist/security/project.d.ts.map +1 -1
- package/dist/security/public.js +2 -2
- package/dist/security/registry.d.ts +6 -0
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +47 -9
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/security/view-conditions.d.ts +37 -0
- package/dist/security/view-conditions.d.ts.map +1 -0
- package/dist/shares/execution.d.ts.map +1 -1
- package/dist/shares/internal.js +34 -31
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +2 -2
- package/dist/storage/action-runs/provider.js +1 -1
- package/dist/storage/action-runs/types.d.ts +1 -1
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/agents/errors.d.ts +3 -1
- package/dist/storage/agents/errors.d.ts.map +1 -1
- package/dist/storage/agents/in-memory.d.ts +120 -3
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/index.d.ts +2 -2
- package/dist/storage/agents/index.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts +154 -4
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +60 -5
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +565 -13
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +10 -1
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/groups.d.ts +9 -0
- package/dist/storage/ai-cost/groups.d.ts.map +1 -1
- package/dist/storage/ai-cost/index.d.ts +1 -1
- package/dist/storage/ai-cost/index.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.d.ts +2 -1
- package/dist/storage/ai-cost/provider.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +11 -5
- package/dist/storage/ai-cost/provider.js.map +1 -1
- package/dist/storage/ai-cost/types.d.ts +14 -2
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/validation.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +5 -4
- package/dist/storage/ai-limits/enforcement.js.map +1 -1
- package/dist/storage/ai-limits/provider.d.ts +1 -1
- package/dist/storage/ai-limits/provider.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.js +3 -2
- package/dist/storage/ai-limits/provider.js.map +1 -1
- package/dist/storage/ai-usage/in-memory.d.ts +5 -1
- package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-usage/index.d.ts +2 -2
- package/dist/storage/ai-usage/index.d.ts.map +1 -1
- package/dist/storage/ai-usage/record.d.ts +5 -1
- package/dist/storage/ai-usage/record.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +33 -0
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/usage.d.ts +2 -0
- package/dist/storage/ai-usage/usage.d.ts.map +1 -1
- package/dist/storage/artifacts/errors.d.ts +12 -2
- package/dist/storage/artifacts/errors.d.ts.map +1 -1
- package/dist/storage/artifacts/in-memory.d.ts +23 -2
- package/dist/storage/artifacts/in-memory.d.ts.map +1 -1
- package/dist/storage/artifacts/index.d.ts +2 -2
- package/dist/storage/artifacts/index.d.ts.map +1 -1
- package/dist/storage/artifacts/record.d.ts +19 -2
- package/dist/storage/artifacts/record.d.ts.map +1 -1
- package/dist/storage/artifacts/types.d.ts +87 -8
- package/dist/storage/artifacts/types.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts +3 -2
- package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/users.d.ts +7 -3
- package/dist/storage/auth/in-memory/users.d.ts.map +1 -1
- package/dist/storage/auth/index.d.ts +1 -1
- package/dist/storage/auth/index.d.ts.map +1 -1
- package/dist/storage/auth/types.d.ts +40 -9
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +1 -1
- package/dist/storage/executions/in-memory.d.ts +2 -1
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/index.d.ts +1 -1
- package/dist/storage/executions/index.d.ts.map +1 -1
- package/dist/storage/executions/types.d.ts +15 -0
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/provider.js +15 -12
- package/dist/storage/file-upload-sessions/provider.js.map +1 -1
- package/dist/storage/index.d.ts +13 -11
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +50 -39
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +2 -2
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +19 -8
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/migrations/migrate-storage.d.ts +4 -1
- package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
- package/dist/storage/migrations/prepare-unique-properties.d.ts +18 -0
- package/dist/storage/migrations/prepare-unique-properties.d.ts.map +1 -0
- package/dist/storage/objects/guard.d.ts +1 -1
- package/dist/storage/objects/guard.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/conditional-reader.d.ts +5 -0
- package/dist/storage/objects/in-memory/conditional-reader.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/read-scope.d.ts +3 -9
- package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/read-source.d.ts +10 -1
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/scoped-reader.d.ts +14 -0
- package/dist/storage/objects/in-memory/scoped-reader.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/storage.d.ts +36 -1
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
- package/dist/storage/objects/index.d.ts +2 -2
- package/dist/storage/objects/index.d.ts.map +1 -1
- package/dist/storage/objects/read-scope.d.ts +9 -1
- package/dist/storage/objects/read-scope.d.ts.map +1 -1
- package/dist/storage/objects/types.d.ts +64 -1
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +2 -0
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +1 -0
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/unique-values.d.ts +32 -0
- package/dist/storage/ontology/in-memory/unique-values.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +4 -1
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +34 -1
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts +15 -2
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +1 -1
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +9 -4
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/ontology/unique-values.d.ts +54 -0
- package/dist/storage/ontology/unique-values.d.ts.map +1 -0
- package/dist/storage/operation-scope.d.ts +1 -1
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/in-memory.d.ts +0 -6
- package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/share-grants/provider.js +4 -3
- package/dist/storage/share-grants/provider.js.map +1 -1
- package/dist/storage/types.d.ts +2 -2
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +15 -12
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +42 -39
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/agent-approval-storage-contract.d.ts +17 -0
- package/dist/testing/agent-approval-storage-contract.d.ts.map +1 -0
- package/dist/testing/agent-memory-storage-contract.d.ts +12 -0
- package/dist/testing/agent-memory-storage-contract.d.ts.map +1 -0
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-limit-storage-contract.d.ts +0 -1
- package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -1
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/artifact-storage-contract.d.ts.map +1 -1
- package/dist/testing/auth-storage-contract.d.ts +13 -0
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/broker-contract.d.ts +5 -0
- package/dist/testing/broker-contract.d.ts.map +1 -1
- package/dist/testing/effective-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +9 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +7938 -3743
- package/dist/testing/index.js.map +29 -25
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-conditional-read-scope-contract.d.ts +11 -0
- package/dist/testing/object-conditional-read-scope-contract.d.ts.map +1 -0
- package/dist/testing/object-query-contract.d.ts +0 -2
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts +5 -0
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/testing/sandboxes-contract.d.ts.map +1 -1
- package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
- package/dist/testing/share-session-storage-contract.d.ts.map +1 -1
- package/dist/testing/unique-values-contract.d.ts +21 -0
- package/dist/testing/unique-values-contract.d.ts.map +1 -0
- package/dist/testing/webhook-execution.d.ts +0 -8
- package/dist/testing/webhook-execution.d.ts.map +1 -1
- package/dist/testing/webhook-run-storage-contract.d.ts.map +1 -1
- package/dist/users/execution.d.ts +40 -0
- package/dist/users/execution.d.ts.map +1 -0
- package/dist/users/index.d.ts +3 -0
- package/dist/users/index.d.ts.map +1 -0
- package/dist/webhooks/internal.js +34 -31
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +4 -6
- package/dist/workers/index.js.map +4 -4
- package/dist/workers/queue-worker.d.ts +0 -2
- package/dist/workers/queue-worker.d.ts.map +1 -1
- package/dist/workers/worker.d.ts +0 -2
- package/dist/workers/worker.d.ts.map +1 -1
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +67 -63
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts +12 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +6 -2
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/actions/commit-edits.ts +6 -1
- package/src/actions/execution.ts +42 -15
- package/src/actions/read-facade.ts +33 -0
- package/src/actions/request.ts +224 -71
- package/src/actions/run/context.ts +47 -1
- package/src/actions/run/execute.ts +13 -6
- package/src/actions/run/executor.ts +11 -2
- package/src/actions/run/normalize.ts +12 -2
- package/src/actions/run/phases.ts +2 -0
- package/src/actions/run/run-action.ts +12 -3
- package/src/actions/run/signals.ts +3 -9
- package/src/actions/run/types.ts +17 -1
- package/src/actions/run-authorization.ts +72 -0
- package/src/actions/types/context.ts +20 -3
- package/src/actions/validators.ts +19 -8
- package/src/activity/README.md +5 -2
- package/src/activity/timeline.ts +39 -78
- package/src/agents/accounting.ts +59 -0
- package/src/agents/adapters.ts +10 -0
- package/src/agents/agent-mail.ts +29 -0
- package/src/agents/api-gateway.ts +14 -3
- package/src/agents/approval-continuation.ts +48 -0
- package/src/agents/approval-executor.ts +318 -0
- package/src/agents/approval-outcome.ts +59 -0
- package/src/agents/approvals.ts +566 -0
- package/src/agents/authority.ts +24 -1
- package/src/agents/builders.ts +5 -3
- package/src/agents/cancel.ts +103 -0
- package/src/agents/child-question.ts +46 -0
- package/src/agents/children.ts +404 -0
- package/src/agents/context-compaction.ts +12 -0
- package/src/agents/errors.ts +31 -0
- package/src/agents/execution.ts +788 -90
- package/src/agents/fork.ts +158 -0
- package/src/agents/ids.ts +18 -6
- package/src/agents/index.ts +55 -0
- package/src/agents/memory-execution.ts +186 -0
- package/src/agents/memory.ts +178 -0
- package/src/agents/message.ts +57 -0
- package/src/agents/model-loop.ts +93 -6
- package/src/agents/model-routing.ts +193 -0
- package/src/agents/participants.ts +213 -0
- package/src/agents/reference.ts +2 -0
- package/src/agents/request.ts +398 -69
- package/src/agents/run-scope.ts +134 -0
- package/src/agents/streams/index.ts +5 -0
- package/src/agents/streams/internal.ts +1 -0
- package/src/agents/streams/protocol.ts +385 -7
- package/src/agents/subagent-runs.ts +41 -0
- package/src/agents/thread-access.ts +137 -0
- package/src/agents/tool-definition.ts +5 -3
- package/src/agents/types.ts +35 -10
- package/src/agents/validation.ts +2 -0
- package/src/artifacts/access.ts +125 -0
- package/src/artifacts/canvas.ts +369 -0
- package/src/artifacts/csv.ts +10 -0
- package/src/artifacts/errors.ts +12 -1
- package/src/artifacts/execution.ts +436 -36
- package/src/artifacts/formula/check.ts +171 -0
- package/src/artifacts/formula/evaluate.ts +288 -0
- package/src/artifacts/formula/index.ts +199 -0
- package/src/artifacts/formula/parser.ts +357 -0
- package/src/artifacts/frames/assets.ts +35 -19
- package/src/artifacts/frames/entries.ts +35 -0
- package/src/artifacts/frames/grants.ts +10 -9
- package/src/artifacts/frames/index.ts +8 -2
- package/src/artifacts/frames/kit.ts +191 -14
- package/src/artifacts/frames/probe.ts +66 -18
- package/src/artifacts/frames/protocol.ts +164 -10
- package/src/artifacts/frames/runtime.ts +273 -28
- package/src/artifacts/index.ts +66 -2
- package/src/artifacts/kinds.ts +1 -1
- package/src/artifacts/limits.ts +31 -0
- package/src/artifacts/live-sheet.ts +345 -0
- package/src/artifacts/outline.ts +34 -1
- package/src/artifacts/publish/index.ts +2 -0
- package/src/artifacts/publish/publish.ts +120 -34
- package/src/artifacts/publish/queries.ts +336 -0
- package/src/artifacts/publish/references.ts +18 -13
- package/src/artifacts/publish/validate/canvas.ts +118 -0
- package/src/artifacts/publish/validate/html.ts +78 -0
- package/src/artifacts/publish/validate/page.ts +65 -0
- package/src/artifacts/publish/validate/sheet.ts +115 -69
- package/src/artifacts/publish/validate/slides.ts +11 -63
- package/src/artifacts/queries.ts +512 -0
- package/src/artifacts/resolve.ts +20 -5
- package/src/artifacts/run-query.ts +212 -0
- package/src/artifacts/serialize-query.ts +25 -0
- package/src/artifacts/sheet-rules.ts +180 -0
- package/src/artifacts/tones.ts +20 -0
- package/src/artifacts/workbook.ts +374 -15
- package/src/auth/index.ts +4 -0
- package/src/auth/member-events.ts +114 -0
- package/src/auth/profile.ts +118 -0
- package/src/auth/runtime.ts +190 -9
- package/src/auth/strategy.ts +3 -0
- package/src/auth/types.ts +32 -0
- package/src/authorization/decision.ts +47 -0
- package/src/authorization/event-visibility.ts +17 -16
- package/src/authorization/grant-kinds.ts +32 -0
- package/src/authorization/index.ts +6 -1
- package/src/authorization/resolve.ts +58 -1
- package/src/authorization/run-visibility.ts +8 -1
- package/src/authorization/types.ts +14 -0
- package/src/errors/catalog.ts +26 -1
- package/src/errors/internal.ts +17 -8
- package/src/events/definitions.ts +26 -0
- package/src/events/execution.ts +43 -6
- package/src/events/index.ts +10 -1
- package/src/events/scope.ts +2 -0
- package/src/events/selectors/builder.ts +50 -0
- package/src/events/selectors/index.ts +4 -0
- package/src/events/selectors/types.ts +32 -1
- package/src/events/service.ts +55 -2
- package/src/events/types/index.ts +10 -0
- package/src/events/types/users.ts +73 -0
- package/src/events/view-conditions.ts +241 -0
- package/src/execution/agent.ts +25 -0
- package/src/execution/authorization.ts +70 -0
- package/src/execution/authorized-object-reader.ts +238 -32
- package/src/execution/lineage.ts +14 -0
- package/src/execution/object-reader-ontology.ts +11 -14
- package/src/execution/object-reader-security.ts +134 -10
- package/src/execution/object-reader-users.ts +122 -0
- package/src/execution/preparation.ts +78 -0
- package/src/execution/request.ts +2 -0
- package/src/execution/unique-lookup.ts +55 -0
- package/src/execution/visible-objects.ts +26 -0
- package/src/http/api-routes.ts +206 -7
- package/src/index.ts +99 -2
- package/src/materialization/errors.ts +37 -0
- package/src/materialization/event-envelopes.ts +11 -3
- package/src/materialization/index.ts +1 -0
- package/src/materialization/model.ts +24 -4
- package/src/materializer/README.md +7 -1
- package/src/materializer/edits/commit.ts +56 -12
- package/src/materializer/edits/load-state.ts +15 -7
- package/src/materializer/edits/operations.ts +12 -0
- package/src/materializer/edits/plan.ts +2 -0
- package/src/materializer/edits/unique-values.ts +255 -0
- package/src/materializer/edits/working-state.ts +8 -1
- package/src/materializer/execution/work-records.ts +47 -0
- package/src/materializer/projections/finish-run.ts +0 -1
- package/src/materializer/projections/replace.ts +1 -1
- package/src/materializer/projections/replacement-plan.ts +4 -1
- package/src/materializer/projections/source-materialization.ts +2 -1
- package/src/materializer/shared/normalize.ts +37 -6
- package/src/materializer/shared/projection-run.ts +1 -2
- package/src/materializer/telemetry/append.ts +14 -17
- package/src/materializer/telemetry/plan.ts +2 -0
- package/src/models/audio/catalog.ts +89 -10
- package/src/models/audio/errors.ts +18 -1
- package/src/models/audio/runtime.ts +10 -13
- package/src/models/audio/speech.ts +261 -0
- package/src/models/audio/types.ts +97 -0
- package/src/models/calls.ts +100 -0
- package/src/models/catalog-index.ts +21 -2
- package/src/models/catalog.ts +211 -35
- package/src/models/decision/runtime.ts +21 -22
- package/src/models/decision/validation.ts +4 -1
- package/src/models/definitions.ts +57 -8
- package/src/models/events.ts +72 -1
- package/src/models/execution/README.md +34 -5
- package/src/models/execution/binding.ts +3 -1
- package/src/models/execution/embedding.ts +1 -0
- package/src/models/execution/index.ts +5 -0
- package/src/models/execution/model-call-accounting.ts +3 -1
- package/src/models/execution/model-call-recorder.ts +29 -1
- package/src/models/execution/usage.ts +8 -0
- package/src/models/execution.ts +20 -22
- package/src/models/generation-types.ts +8 -1
- package/src/models/image/catalog.ts +89 -0
- package/src/models/image/errors.ts +19 -0
- package/src/models/image/runtime.ts +335 -0
- package/src/models/image/types.ts +111 -0
- package/src/models/index.ts +38 -4
- package/src/models/{audio/file.ts → input-file.ts} +22 -13
- package/src/models/language-model.ts +13 -0
- package/src/models/pricing.ts +263 -42
- package/src/models/rate-card.ts +161 -12
- package/src/objects/authorized-ontology-view.ts +1 -0
- package/src/objects/conditional-writes.ts +109 -0
- package/src/objects/execution.ts +4 -0
- package/src/objects/index.ts +8 -0
- package/src/objects/link/authorization.ts +12 -3
- package/src/objects/link/endpoints.ts +42 -11
- package/src/objects/link/remove.ts +25 -10
- package/src/objects/link/upsert-batch.ts +2 -0
- package/src/objects/link/upsert.ts +18 -12
- package/src/objects/materializer-adapter.ts +55 -18
- package/src/objects/object/delete.ts +24 -7
- package/src/objects/object/upsert-batch.ts +44 -14
- package/src/objects/object/upsert.ts +23 -5
- package/src/objects/query/current-user.ts +76 -0
- package/src/objects/query/executor.ts +39 -103
- package/src/objects/query/explain.ts +20 -7
- package/src/objects/query/index.ts +2 -0
- package/src/objects/query/ir.ts +20 -0
- package/src/objects/query/links.ts +8 -0
- package/src/objects/query/matches-predicate.ts +108 -0
- package/src/objects/query/normalize.ts +50 -19
- package/src/objects/query/scalar-values.ts +19 -3
- package/src/objects/query/user-expansions.ts +65 -0
- package/src/objects/query/validate.ts +248 -10
- package/src/objects/runtime-batch.ts +8 -2
- package/src/objects/sdk/object-set.ts +12 -1
- package/src/objects/sdk/query-builder.ts +39 -8
- package/src/objects/sdk/query-executor.ts +6 -0
- package/src/objects/serialize.ts +79 -0
- package/src/objects/unique-violation.ts +59 -0
- package/src/objects/vectors/handle.ts +3 -3
- package/src/ontology/builders.ts +3 -0
- package/src/ontology/docs-markdown.ts +1 -0
- package/src/ontology/index.ts +2 -2
- package/src/ontology/json-schema.ts +4 -0
- package/src/ontology/primitives.ts +21 -8
- package/src/ontology/registry.ts +16 -0
- package/src/ontology/types.ts +9 -0
- package/src/ontology/unique-values.ts +84 -0
- package/src/ontology/user-ref.ts +39 -0
- package/src/ontology/validation/properties.ts +43 -0
- package/src/ontology/validation/schema.ts +9 -1
- package/src/projections/registry.ts +16 -10
- package/src/projections/revision.ts +112 -45
- package/src/projections/run-dispatch.ts +38 -25
- package/src/projections/types.ts +2 -0
- package/src/query.ts +5 -0
- package/src/rules/execution.ts +43 -11
- package/src/runtime/ai-cost.ts +30 -0
- package/src/runtime/ai-usage.ts +32 -1
- package/src/runtime/host.ts +18 -1
- package/src/runtime/index.ts +2 -0
- package/src/runtime/resolve-definitions.ts +3 -0
- package/src/runtime/sixb.ts +35 -8
- package/src/runtime/types.ts +99 -9
- package/src/schedules/builders.ts +3 -1
- package/src/schedules/runtime.ts +6 -0
- package/src/schedules/validation.ts +23 -1
- package/src/security/README.md +62 -0
- package/src/security/grants.ts +155 -10
- package/src/security/index.ts +3 -1
- package/src/security/project.ts +6 -1
- package/src/security/registry.ts +32 -7
- package/src/security/types.ts +54 -9
- package/src/security/validation.ts +27 -11
- package/src/security/view-conditions.ts +215 -0
- package/src/shares/execution.ts +43 -10
- package/src/storage/action-runs/types.ts +2 -0
- package/src/storage/agents/errors.ts +3 -0
- package/src/storage/agents/in-memory.ts +779 -32
- package/src/storage/agents/index.ts +42 -0
- package/src/storage/agents/provider.ts +733 -8
- package/src/storage/agents/types.ts +620 -12
- package/src/storage/ai-cost/analytics.ts +60 -7
- package/src/storage/ai-cost/codec.ts +6 -1
- package/src/storage/ai-cost/groups.ts +44 -1
- package/src/storage/ai-cost/index.ts +1 -0
- package/src/storage/ai-cost/provider.ts +2 -0
- package/src/storage/ai-cost/types.ts +18 -1
- package/src/storage/ai-cost/validation.ts +39 -12
- package/src/storage/ai-limits/provider.ts +4 -7
- package/src/storage/ai-usage/in-memory.ts +28 -1
- package/src/storage/ai-usage/index.ts +9 -1
- package/src/storage/ai-usage/record.ts +44 -7
- package/src/storage/ai-usage/types.ts +38 -0
- package/src/storage/ai-usage/usage.ts +15 -1
- package/src/storage/artifacts/errors.ts +13 -1
- package/src/storage/artifacts/in-memory.ts +156 -8
- package/src/storage/artifacts/index.ts +6 -1
- package/src/storage/artifacts/record.ts +61 -1
- package/src/storage/artifacts/types.ts +92 -8
- package/src/storage/auth/in-memory/auth-storage.ts +27 -2
- package/src/storage/auth/in-memory/users.ts +40 -6
- package/src/storage/auth/index.ts +1 -0
- package/src/storage/auth/types.ts +43 -7
- package/src/storage/executions/in-memory.ts +32 -0
- package/src/storage/executions/index.ts +2 -0
- package/src/storage/executions/types.ts +17 -0
- package/src/storage/index.ts +69 -1
- package/src/storage/internal.ts +9 -1
- package/src/storage/migrations/migrate-storage.ts +8 -1
- package/src/storage/migrations/prepare-unique-properties.ts +161 -0
- package/src/storage/objects/guard.ts +7 -3
- package/src/storage/objects/in-memory/conditional-reader.ts +72 -0
- package/src/storage/objects/in-memory/query.ts +4 -105
- package/src/storage/objects/in-memory/read-scope.ts +15 -14
- package/src/storage/objects/in-memory/read-source.ts +11 -1
- package/src/storage/objects/in-memory/scoped-reader.ts +243 -0
- package/src/storage/objects/in-memory/selected-reader.ts +6 -231
- package/src/storage/objects/in-memory/storage.ts +183 -1
- package/src/storage/objects/index.ts +9 -1
- package/src/storage/objects/read-scope.ts +191 -0
- package/src/storage/objects/types.ts +68 -1
- package/src/storage/ontology/in-memory/index.ts +3 -0
- package/src/storage/ontology/in-memory/materializations.ts +35 -0
- package/src/storage/ontology/in-memory/replacement-plans.ts +4 -0
- package/src/storage/ontology/in-memory/unique-values.ts +62 -0
- package/src/storage/ontology/index.ts +10 -0
- package/src/storage/ontology/materializations.ts +35 -1
- package/src/storage/ontology/provider-work.ts +76 -0
- package/src/storage/ontology/provider.ts +3 -0
- package/src/storage/ontology/unique-values.ts +56 -0
- package/src/storage/operation-scope.ts +9 -1
- package/src/storage/projection-runs/in-memory.ts +3 -35
- package/src/storage/types.ts +2 -0
- package/src/testing/agent-approval-storage-contract.ts +1117 -0
- package/src/testing/agent-memory-storage-contract.ts +400 -0
- package/src/testing/agent-storage-contract.ts +1188 -33
- package/src/testing/ai-cost-storage-contract.ts +31 -1
- package/src/testing/ai-limit-storage-contract.ts +9 -7
- package/src/testing/ai-model-call-groups-contract.ts +76 -0
- package/src/testing/ai-usage-storage-contract.ts +120 -13
- package/src/testing/artifact-storage-contract.ts +338 -4
- package/src/testing/auth-storage-contract.ts +550 -73
- package/src/testing/broker-contract.ts +28 -23
- package/src/testing/effective-storage-contract.ts +3 -8
- package/src/testing/execution-storage-contract.ts +53 -0
- package/src/testing/file-upload-session-storage-contract.ts +12 -24
- package/src/testing/index.ts +17 -4
- package/src/testing/lake-storage-contract.ts +22 -28
- package/src/testing/materializer-storage-contract.ts +36 -9
- package/src/testing/object-conditional-read-scope-contract.ts +634 -0
- package/src/testing/object-query-contract.ts +386 -186
- package/src/testing/ontology-storage-contract.ts +230 -21
- package/src/testing/projection-run-storage-contract.ts +8 -18
- package/src/testing/queues-contract.ts +39 -70
- package/src/testing/sandboxes-contract.ts +3 -14
- package/src/testing/share-grant-storage-contract.ts +13 -16
- package/src/testing/share-session-storage-contract.ts +4 -14
- package/src/testing/unique-values-contract.ts +907 -0
- package/src/testing/webhook-execution.ts +1 -1
- package/src/testing/webhook-run-storage-contract.ts +6 -9
- package/src/users/execution.ts +131 -0
- package/src/users/index.ts +2 -0
- package/src/workers/queue-worker.ts +1 -3
- package/src/workers/worker.ts +1 -3
- package/src/workflows/builders.ts +6 -0
- package/src/workflows/request.ts +46 -8
- package/src/workflows/types.ts +6 -2
- package/src/workflows/validation.ts +23 -9
- package/dist/chunk-29yx306f.js.map +0 -22
- package/dist/chunk-3jms7je7.js +0 -14
- package/dist/chunk-3jms7je7.js.map +0 -10
- package/dist/chunk-3qct2mdc.js +0 -297
- package/dist/chunk-3qct2mdc.js.map +0 -12
- package/dist/chunk-48qjhh6v.js.map +0 -13
- package/dist/chunk-4as3wt1c.js.map +0 -12
- package/dist/chunk-5948n82c.js.map +0 -10
- package/dist/chunk-5hx48dnn.js.map +0 -14
- package/dist/chunk-6rqgmkde.js.map +0 -29
- package/dist/chunk-6x0pqh32.js.map +0 -10
- package/dist/chunk-7n30ybym.js +0 -3
- package/dist/chunk-7n440zgt.js +0 -261
- package/dist/chunk-7n440zgt.js.map +0 -12
- package/dist/chunk-7q8t23v4.js +0 -467
- package/dist/chunk-7q8t23v4.js.map +0 -14
- package/dist/chunk-8frc8a4j.js.map +0 -20
- package/dist/chunk-918wwnaa.js.map +0 -68
- package/dist/chunk-91mg3nj9.js.map +0 -12
- package/dist/chunk-96yw3pwd.js.map +0 -10
- package/dist/chunk-9j4jw7as.js.map +0 -14
- package/dist/chunk-9k93ah50.js.map +0 -11
- package/dist/chunk-9kgkfg6v.js +0 -502
- package/dist/chunk-9kgkfg6v.js.map +0 -14
- package/dist/chunk-akzryx9h.js.map +0 -100
- package/dist/chunk-arns890k.js.map +0 -10
- package/dist/chunk-bk9svbcq.js.map +0 -49
- package/dist/chunk-c06hmxyy.js +0 -31
- package/dist/chunk-c06hmxyy.js.map +0 -10
- package/dist/chunk-c1rxbz5y.js.map +0 -12
- package/dist/chunk-cn0fwwhy.js.map +0 -19
- package/dist/chunk-dhcv7yxc.js.map +0 -11
- package/dist/chunk-dhdha526.js.map +0 -10
- package/dist/chunk-dvd2fp9q.js.map +0 -13
- package/dist/chunk-e6k4thh5.js.map +0 -19
- package/dist/chunk-ere85b8y.js.map +0 -15
- package/dist/chunk-g257jwnc.js.map +0 -12
- package/dist/chunk-hwksyjks.js.map +0 -11
- package/dist/chunk-k43ct2ke.js.map +0 -12
- package/dist/chunk-nn5xnx3s.js.map +0 -40
- package/dist/chunk-pbcbn83d.js.map +0 -14
- package/dist/chunk-pqajwytd.js +0 -68
- package/dist/chunk-pqajwytd.js.map +0 -11
- package/dist/chunk-qczk96d9.js.map +0 -11
- package/dist/chunk-rdghfsss.js +0 -39
- package/dist/chunk-rdghfsss.js.map +0 -10
- package/dist/chunk-rj69qcrd.js.map +0 -11
- package/dist/chunk-v4jbb3rs.js.map +0 -10
- package/dist/chunk-yxd3nnqt.js.map +0 -11
- package/dist/events/toStoredEvent.d.ts +0 -9
- package/dist/events/toStoredEvent.d.ts.map +0 -1
- package/dist/models/audio/file.d.ts +0 -9
- package/dist/models/audio/file.d.ts.map +0 -1
- package/src/events/toStoredEvent.ts +0 -33
- /package/dist/{chunk-mfs23znk.js.map → chunk-07kkp2e1.js.map} +0 -0
- /package/dist/{chunk-z58tm0hm.js.map → chunk-0phpbbvm.js.map} +0 -0
- /package/dist/{chunk-e17zdm62.js.map → chunk-1t6k1avb.js.map} +0 -0
- /package/dist/{chunk-kge7k6ey.js.map → chunk-2fn60nvs.js.map} +0 -0
- /package/dist/{chunk-y0c4e6ex.js.map → chunk-3gbefjg5.js.map} +0 -0
- /package/dist/{chunk-cy4mbddw.js.map → chunk-48jezz3j.js.map} +0 -0
- /package/dist/{chunk-twe4dx8p.js → chunk-5tfev0fv.js} +0 -0
- /package/dist/{chunk-twe4dx8p.js.map → chunk-5tfev0fv.js.map} +0 -0
- /package/dist/{chunk-447a5c0p.js.map → chunk-6n69k945.js.map} +0 -0
- /package/dist/{chunk-0bphap9y.js.map → chunk-6p0pastb.js.map} +0 -0
- /package/dist/{chunk-431pyp2c.js.map → chunk-6y0mkhex.js.map} +0 -0
- /package/dist/{chunk-s7jg7pmn.js.map → chunk-bab05bhg.js.map} +0 -0
- /package/dist/{chunk-q5e5tv4b.js.map → chunk-c844dkwd.js.map} +0 -0
- /package/dist/{chunk-cfj9dfbb.js.map → chunk-d2m879s4.js.map} +0 -0
- /package/dist/{chunk-q7gn29y3.js.map → chunk-dp0cdtj2.js.map} +0 -0
- /package/dist/{chunk-br3k6qbf.js.map → chunk-fm62y49k.js.map} +0 -0
- /package/dist/{chunk-vvxtn22d.js.map → chunk-g663fahq.js.map} +0 -0
- /package/dist/{chunk-rmakanzx.js.map → chunk-h33shhq6.js.map} +0 -0
- /package/dist/{chunk-d09e3rax.js.map → chunk-hwarjrgf.js.map} +0 -0
- /package/dist/{chunk-vf57cr4t.js.map → chunk-hyesv9dv.js.map} +0 -0
- /package/dist/{chunk-5vems3nx.js.map → chunk-m2nevja0.js.map} +0 -0
- /package/dist/{chunk-x9v4cx1d.js.map → chunk-m36fw8ft.js.map} +0 -0
- /package/dist/{chunk-a40ad1ft.js.map → chunk-mbsbxarb.js.map} +0 -0
- /package/dist/{chunk-6aawea28.js.map → chunk-n8q5j6y5.js.map} +0 -0
- /package/dist/{chunk-d7dnxdep.js.map → chunk-n9zpx9c6.js.map} +0 -0
- /package/dist/{chunk-xvsc5m8n.js.map → chunk-npcr0228.js.map} +0 -0
- /package/dist/{chunk-y5tah2kf.js.map → chunk-q4pmvkg0.js.map} +0 -0
- /package/dist/{chunk-d5rjr8c0.js.map → chunk-vabga7fk.js.map} +0 -0
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
{
|
|
2
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"],
|
|
3
|
+
"sources": ["../src/artifacts/serialize-query.ts", "../src/artifacts/frames/kit.ts", "../src/artifacts/frames/runtime.ts", "../src/artifacts/frames/assets.ts", "../src/artifacts/frames/entries.ts", "../src/artifacts/frames/grants.ts", "../src/artifacts/frames/probe.ts"],
|
|
4
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 {
|
|
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"
|
|
5
|
+
"import { type SerializedExpandedObject, serializeExpandedObject } from \"../objects/serialize\"\nimport type {\n ArtifactFacetsQueryResult,\n ArtifactObjectsQueryResult,\n ArtifactQueryResult,\n} from \"./queries\"\n\nexport type SerializedArtifactQueryResult =\n | (Omit<ArtifactObjectsQueryResult, \"objects\"> & {\n readonly objects: readonly SerializedExpandedObject[]\n })\n | ArtifactFacetsQueryResult\n\n/**\n * An artifact query's result as `GET /api/artifacts/:id/versions/:v/queries/:name` answers it, and\n * as a page's `sixb.query` resolves: its rows as the query route serializes them, or its facets.\n * The route and the Agent's layout check both serve it, so a page reads the same JSON in either.\n */\nexport function serializeArtifactQueryResult(\n result: ArtifactQueryResult\n): SerializedArtifactQueryResult {\n return result.kind === \"objects\"\n ? { ...result, objects: result.objects.map(serializeExpandedObject) }\n : result\n}\n",
|
|
6
|
+
"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 * What every frame's kit starts from: the theme's tokens, with the light defaults until the app's\n * arrive, and the document's base. The rules a layout adds sit in the same layer, and everything\n * sits in cascade layers, so an artifact's own CSS, unlayered, always wins.\n */\nfunction kit(rules: string): string {\n return `\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 }\n\n *, *::before, *::after { box-sizing: border-box; }\n html, body { margin: 0; padding: 0; }\n body {\n color: var(--foreground);\n font-family: var(--font-sans);\n -webkit-font-smoothing: antialiased;\n }\n\n${rules}}\n`\n}\n\n/**\n * A deck's kit: the stage that shows one slide or all of them, the slide type scale, the layouts a\n * slide picks by class, the slide chrome, and a few components.\n */\nexport const FRAME_DECK_CSS = kit(` :root {\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 body { background: var(--muted); }\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/**\n * A page's kit: what makes plain HTML read as a finished page in the app's theme. A measured type\n * scale; tables, forms, and buttons drawn like the app's; a centered column for `<main>`; and a\n * few components a page picks by class: `.lede`, `.eyebrow`, `.card`, `.grid`, `.stat`, `.tag`,\n * `.callout`. Every rule sits in the kit's layer, so a page's own CSS wins wherever it differs.\n */\nexport const FRAME_PAGE_CSS = kit(` html { color-scheme: light; }\n html.dark { color-scheme: dark; }\n body {\n background: var(--background);\n font-size: 15px;\n line-height: 1.6;\n text-rendering: optimizeLegibility;\n }\n\n /* A page reads in a centered column with room around it, narrower on a phone. */\n main { display: block; max-width: 1120px; margin: 0 auto; padding: 40px 32px 56px; }\n @media (max-width: 640px) { main { padding: 24px 16px 40px; } }\n\n /* Type. */\n :is(h1, h2, h3, h4) { margin: 0 0 0.5em; color: var(--foreground); text-wrap: balance; }\n h1 { font-size: 32px; line-height: 1.15; font-weight: 650; letter-spacing: -0.025em; }\n h2 { margin-top: 1.6em; font-size: 21px; line-height: 1.25; font-weight: 620; letter-spacing: -0.015em; }\n h3 { margin-top: 1.4em; font-size: 16px; line-height: 1.35; font-weight: 600; }\n h4 { font-size: 14px; font-weight: 600; }\n :is(h1, h2, h3, h4):first-child { margin-top: 0; }\n @media (max-width: 640px) { h1 { font-size: 26px; } h2 { font-size: 19px; } }\n p { margin: 0 0 1em; text-wrap: pretty; }\n .lede { max-width: 42em; margin-bottom: 1.6em; font-size: 17px; line-height: 1.55; color: var(--muted-foreground); }\n .eyebrow {\n margin: 0 0 8px;\n font-size: 12px;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--muted-foreground);\n }\n small, .muted, .note { color: var(--muted-foreground); }\n small, .note { font-size: 13px; }\n a { color: var(--foreground); text-decoration-color: color-mix(in oklab, var(--foreground) 35%, transparent); text-underline-offset: 3px; }\n a:hover { text-decoration-color: currentColor; }\n strong { font-weight: 600; }\n hr { margin: 32px 0; border: 0; border-top: 1px solid var(--border); }\n :is(ul, ol) { margin: 0 0 1em; padding-left: 1.25em; }\n li + li { margin-top: 0.25em; }\n code { font-family: var(--font-mono); font-size: 0.88em; padding: 0.1em 0.35em; border-radius: 5px; background: var(--muted); }\n pre { margin: 0 0 1em; padding: 14px 16px; overflow-x: auto; border-radius: var(--radius); background: var(--muted); font-size: 13px; line-height: 1.5; }\n pre code { padding: 0; background: none; }\n img, svg, video, canvas { max-width: 100%; }\n img, video { height: auto; }\n\n /* Tables: hairline rows, quiet headers, numbers aligned. Wide ones scroll in their box. */\n table { width: 100%; border-collapse: collapse; font-size: 14px; font-variant-numeric: tabular-nums; }\n :is(th, td) { padding: 10px 12px; border-bottom: 1px solid var(--border); text-align: left; vertical-align: top; }\n th { font-size: 12px; font-weight: 600; letter-spacing: 0.02em; color: var(--muted-foreground); white-space: nowrap; }\n :is(th, td):first-child { padding-left: 0; }\n :is(th, td):last-child { padding-right: 0; }\n :is(th, td).num, :is(th, td)[data-numeric] { text-align: right; white-space: nowrap; }\n .table-scroll { overflow-x: auto; }\n\n /* Forms and buttons, drawn like the app's. */\n label { display: block; margin-bottom: 6px; font-size: 13px; font-weight: 550; }\n :is(input:not([type=\"checkbox\"], [type=\"radio\"], [type=\"range\"], [type=\"color\"]), select, textarea) {\n width: 100%;\n min-height: 36px;\n padding: 7px 10px;\n border: 1px solid var(--border);\n border-radius: calc(var(--radius) - 2px);\n background: var(--card);\n color: var(--foreground);\n font: inherit;\n font-size: 14px;\n line-height: 1.4;\n box-shadow: 0 1px 1px rgb(0 0 0 / 0.03);\n transition: border-color 0.12s, box-shadow 0.12s;\n }\n :is(input, select, textarea):focus-visible {\n outline: none;\n border-color: color-mix(in oklab, var(--foreground) 45%, var(--border));\n box-shadow: 0 0 0 3px color-mix(in oklab, var(--foreground) 12%, transparent);\n }\n input[type=\"range\"], input[type=\"checkbox\"], input[type=\"radio\"] { accent-color: var(--primary); }\n textarea { min-height: 88px; resize: vertical; }\n button, .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-height: 36px;\n padding: 0 14px;\n border: 1px solid transparent;\n border-radius: calc(var(--radius) - 2px);\n background: var(--primary);\n color: var(--primary-foreground);\n font: inherit;\n font-size: 14px;\n font-weight: 550;\n text-decoration: none;\n cursor: pointer;\n transition: background-color 0.12s, border-color 0.12s, opacity 0.12s;\n }\n :is(button, .button):hover { background: color-mix(in oklab, var(--primary) 88%, var(--background)); }\n :is(button, .button):focus-visible { outline: 2px solid var(--ring, var(--foreground)); outline-offset: 2px; }\n :is(button, .button):disabled { opacity: 0.5; cursor: default; }\n :is(button, .button).secondary { border-color: var(--border); background: var(--card); color: var(--foreground); }\n :is(button, .button).secondary:hover { background: var(--muted); }\n :is(button, .button).ghost { background: transparent; color: var(--foreground); }\n :is(button, .button).ghost:hover { background: var(--muted); }\n fieldset { margin: 0 0 16px; padding: 0; border: 0; }\n .field { margin-bottom: 16px; }\n\n /* Components. */\n .card {\n padding: 20px;\n border: 1px solid var(--border);\n border-radius: var(--radius);\n background: var(--card);\n color: var(--card-foreground);\n box-shadow: 0 1px 2px rgb(0 0 0 / 0.04);\n }\n .card > :last-child { margin-bottom: 0; }\n /* Cards stack with room between them; in a grid or a row, its gap spaces them. */\n .card { margin-bottom: 16px; }\n :is(.grid, .row) > .card { margin-bottom: 0; }\n .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr)); gap: 16px; margin-bottom: 24px; }\n .row { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }\n .stat .label { font-size: 13px; color: var(--muted-foreground); }\n .stat .value { margin-top: 4px; font-size: 30px; line-height: 1.1; font-weight: 650; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }\n .stat .delta { margin-top: 6px; font-size: 13px; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }\n .tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 9px;\n border-radius: 999px;\n background: var(--muted);\n font-size: 12px;\n font-weight: 600;\n line-height: 1.6;\n white-space: nowrap;\n }\n .callout { margin: 0 0 1em; padding: 14px 16px; border-radius: var(--radius); background: var(--muted); }\n .callout > :last-child { margin-bottom: 0; }\n\n /*\n * Another artifact on the page: the app draws it over this box, sized by the page's CSS like any\n * block. Until it does, the box shows where it goes.\n */\n sixb-embed {\n display: block;\n position: relative;\n width: 100%;\n aspect-ratio: 16 / 9;\n margin-bottom: 1em;\n border-radius: var(--radius);\n background: var(--muted);\n }\n sixb-embed[title]::after {\n content: attr(title);\n position: absolute;\n inset: auto 16px 12px;\n font-size: 13px;\n color: var(--muted-foreground);\n }\n img[data-sixb-ref=\"unavailable\"] { display: block; min-width: 120px; min-height: 68px; border-radius: var(--radius); background: var(--muted); }\n`)\n",
|
|
7
|
+
"/**\n * The runtime the frame injects before anything else in an entry's `<head>`. It is served as this\n * function's own source, `(${frameRuntime})()`, so it imports nothing and names nothing outside\n * itself: the protocol string and the keys repeat what `protocol.ts` declares, and a test holds\n * the two together. Its tag names the layout, `data-sixb-layout`.\n *\n * In every layout it applies the theme the app sends, then fires `sixb:theme` on the window for\n * what draws its own colors; answers the app's requests; and tells the app about the links the\n * reader follows, to other artifacts or to web pages, for the app to open them, and where its\n * `<sixb-embed>` boxes are, for the app to draw them over the frame. A deck it also lays out:\n * every `section.slide` is a 1280×720 slide, shown one at a time scaled to fit, or all at once in\n * a grid. The URL's fragment can open it at a slide, and with `sixb-fill` show that slide alone\n * filling the frame, as a thumbnail or an embed does; it tells the app about keys and picks in the\n * overview. A page scrolls as it is: it reports the embeds near its view as it scrolls, and its\n * height as it changes.\n *\n * It gives every layout `window.sixb.state`, where a page keeps JSON values for its reader: each\n * call is a message the app answers, and the app keeps the values. Opened on its own, with no app\n * around it, as the layout check opens a page, the values live in memory until it closes.\n *\n * And `window.sixb.query(name)`, which reads one of the version's queries as the reader: the app\n * runs it and answers with the query route's JSON. Opened on its own, it reads\n * `__sixb/queries/<name>.json` beside the runtime instead, where the layout check serves what the\n * query returned for the Agent's requester.\n *\n * When the objects a query reads change, the app reads it again and tells the frame, which fires\n * `sixb:query` on the window with `detail.name`, for the page to call `sixb.query(name)` again.\n * Opened on its own, nothing tells it: the rows the check served are all there is.\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 /** What a page may keep, as `ARTIFACT_STATE_LIMITS` says: refused here before it is sent. */\n const MAX_KEY_LENGTH = 128\n const MAX_VALUE_BYTES = 65536\n /** A query's name, as `isArtifactQueryName` says: refused here before it is sent. */\n const QUERY_NAME = /^[a-z0-9][a-z0-9-]{0,63}$/\n const root = document.documentElement\n // Only set while the runtime itself runs, so kept for what reads it later.\n const script = document.currentScript as HTMLScriptElement | null\n const deck = script?.getAttribute(\"data-sixb-layout\") !== \"page\"\n const start = new URLSearchParams(window.location.hash.slice(1))\n if (deck) {\n root.classList.add(\"sixb-deck\")\n root.dataset.mode = start.has(\"sixb-fill\") ? \"fill\" : \"slide\"\n }\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 /** A link's address resolved against the page, when it is a web page's: `http:` or `https:`. */\n const webAddress = (href: string): string | null => {\n try {\n const url = new URL(href, document.baseURI)\n return url.protocol === \"http:\" || url.protocol === \"https:\" ? url.href : null\n } catch {\n return null\n }\n }\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 /**\n * The embeds to draw over the frame, once an animation frame, when they move: the shown slide's\n * in a deck; in a page, those within a screen of its view, so a long page mounts what is near.\n */\n let reported = \"\"\n let reporting = false\n\n /** Each element's own id, for the app to keep what it draws there as others come and go. */\n const ids = new WeakMap<Element, number>()\n let lastId = 0\n const idOf = (element: Element): number => {\n const known = ids.get(element)\n if (known !== undefined) return known\n\n lastId += 1\n ids.set(element, lastId)\n return lastId\n }\n\n const reportEmbeds = () => {\n if (reporting || root.dataset.mode === \"fill\") return\n reporting = true\n requestAnimationFrame(() => {\n reporting = false\n const scale = deck ? Number(root.style.getPropertyValue(\"--sixb-scale\")) || 1 : 1\n const scope = deck\n ? root.dataset.mode === \"overview\"\n ? undefined\n : slides()[current - 1]\n : document\n const near = (rect: DOMRect) =>\n deck || (rect.bottom > -window.innerHeight && rect.top < window.innerHeight * 2)\n const embeds = Array.from(scope?.querySelectorAll(\"sixb-embed[src]\") ?? []).flatMap(\n (element) => {\n const id = idOf(element)\n const rect = element.getBoundingClientRect()\n return near(rect)\n ? [\n {\n id,\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 : []\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 /**\n * A page's height as laid out, for a document that shows it to size its frame: its body's, not\n * the document's, which is never less than the frame and so would never let the frame shrink.\n */\n let height = -1\n const reportSize = () => {\n const body = document.body\n if (deck || !body) return\n const style = getComputedStyle(body)\n const next = Math.ceil(\n Math.max(body.scrollHeight, body.getBoundingClientRect().height) +\n (Number.parseFloat(style.marginTop) || 0) +\n (Number.parseFloat(style.marginBottom) || 0)\n )\n if (next === height) return\n height = next\n post({ event: \"size\", params: { height } })\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 // What draws on a canvas, as a chart library does, reads its colors once: it redraws on\n // this, which comes after the page has loaded.\n window.dispatchEvent(\n new CustomEvent(\"sixb:theme\", { detail: { dark: params.dark === true } })\n )\n return\n }\n case \"goto\":\n if (!deck) throw new Error(\"Only a deck has slides.\")\n show(Number(params.slide))\n return\n case \"reload\":\n // After the answer is posted, so the app hears it before the page goes.\n setTimeout(() => window.location.reload())\n return\n case \"query.changed\": {\n // The page reads the new rows itself: what it drew from the old ones is its own.\n const name = String(params.name)\n if (!QUERY_NAME.test(name)) throw new Error(`Unknown query '${name}'.`)\n\n window.dispatchEvent(new CustomEvent(\"sixb:query\", { detail: { name } }))\n return\n }\n case \"scroll\":\n if (deck) throw new Error(\"Only a page scrolls.\")\n window.scrollBy({ left: Number(params.x) || 0, top: Number(params.y) || 0 })\n return\n case \"mode\":\n if (!deck) throw new Error(\"Only a deck has modes.\")\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 /**\n * `sixb.state` and `sixb.query`, promise-based: each call posted numbered, and settled by the\n * app's result with that number.\n */\n const calls = new Map<\n number,\n { resolve: (value: unknown) => void; reject: (error: Error) => void }\n >()\n let called = 0\n const alone = window.parent === window\n const memory = new Map<string, string>()\n const call = (method: string, params: Record<string, unknown>): Promise<unknown> => {\n if (alone) {\n const key = String(params.key)\n const kept = memory.get(key)\n switch (method) {\n case \"state.get\":\n return Promise.resolve(kept === undefined ? undefined : JSON.parse(kept))\n case \"state.set\":\n memory.set(key, JSON.stringify(params.value))\n return Promise.resolve(undefined)\n case \"state.delete\":\n return Promise.resolve(memory.delete(key))\n default:\n return Promise.resolve([...memory.keys()].sort())\n }\n }\n called += 1\n const id = called\n return new Promise((resolve, reject) => {\n calls.set(id, { resolve, reject })\n post({ call: id, method, params })\n })\n }\n // Not `.` or `..`: the app puts the key in a URL's path, where those name another route.\n const checkKey = (key: unknown): string => {\n if (\n typeof key !== \"string\" ||\n key.length === 0 ||\n key.length > MAX_KEY_LENGTH ||\n key === \".\" ||\n key === \"..\"\n ) {\n throw new TypeError(`sixb.state: a key is text of 1 to ${MAX_KEY_LENGTH} characters.`)\n }\n return key\n }\n const state = {\n get: (key: string) => Promise.resolve().then(() => call(\"state.get\", { key: checkKey(key) })),\n set: (key: string, value: unknown) =>\n Promise.resolve().then(() => {\n const json = JSON.stringify(value)\n if (json === undefined) {\n throw new TypeError(\n \"sixb.state: a value is JSON: text, a number, true or false, null, a list, or an object.\"\n )\n }\n if (new TextEncoder().encode(json).byteLength > MAX_VALUE_BYTES) {\n throw new RangeError(\n `sixb.state: a value is at most ${MAX_VALUE_BYTES / 1024} KB as JSON.`\n )\n }\n // As JSON keeps it, so the page reads back what it would after a reload.\n return call(\"state.set\", { key: checkKey(key), value: JSON.parse(json) }).then(() => {})\n }),\n delete: (key: string) =>\n Promise.resolve().then(() => call(\"state.delete\", { key: checkKey(key) })),\n keys: () => call(\"state.keys\", {}),\n }\n\n /**\n * A query's result as the check serves it beside the runtime, `__sixb/queries/<name>.json`:\n * resolved from the runtime's own address, so a canvas's board in its folder finds it too.\n */\n const readQueryFile = async (name: string): Promise<unknown> => {\n const base = script?.src || new URL(\"__sixb/runtime.js\", window.location.href).href\n const response = await fetch(new URL(`queries/${name}.json`, base))\n if (response.ok) return response.json()\n\n if (response.status === 404) {\n throw new Error(`[Sixb] No query '${name}' in this page's version.`)\n }\n const body = (await response.json().catch(() => null)) as { error?: unknown } | null\n throw new Error(\n typeof body?.error === \"string\" ? body.error : `[Sixb] Query '${name}' could not be read.`\n )\n }\n const query = (name: string): Promise<unknown> =>\n Promise.resolve().then(() => {\n if (typeof name !== \"string\" || !QUERY_NAME.test(name)) {\n throw new TypeError(\n \"sixb.query: a query's name is that of its file, queries/<name>.json: lowercase letters, digits and hyphens.\"\n )\n }\n return alone ? readQueryFile(name) : call(\"query.run\", { name })\n })\n\n Object.defineProperty(window, \"sixb\", {\n value: Object.freeze({ state: Object.freeze(state), query }),\n enumerable: true,\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 // The app's answer to a call.\n if (data && data.protocol === PROTOCOL && typeof data.result === \"number\") {\n const pending = calls.get(data.result)\n calls.delete(data.result)\n if (typeof data.error === \"string\") pending?.reject(new Error(data.error))\n else pending?.resolve(data.value)\n return\n }\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 // A deck's keys move it wherever focus is; a page's keys are its own.\n window.addEventListener(\"keydown\", (event) => {\n if (!deck || 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 // A link within the page moves through it, and one the page's own script handled is its.\n if (href.startsWith(\"#\") || event.defaultPrevented) return\n\n // Anything else would leave the frame, which can open no window and navigates nowhere but\n // the frames' origin: the app opens it, an artifact where the reader is and a web page in a\n // new tab.\n event.preventDefault()\n if (/^artifact:/i.test(href.trim())) {\n post({ event: \"open\", params: { address: href.trim() } })\n return\n }\n\n const url = webAddress(href)\n if (url) post({ event: \"link\", params: { url } })\n return\n }\n if (!deck || 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 if (deck) fit()\n reportEmbeds()\n })\n const ready = () => {\n if (!deck) {\n post({ event: \"ready\", params: {} })\n window.addEventListener(\"scroll\", reportEmbeds, { passive: true })\n // What changes the page's height moves its embeds too: content, fonts, and images.\n const resized = new ResizeObserver(() => {\n reportSize()\n reportEmbeds()\n })\n resized.observe(document.documentElement)\n if (document.body) resized.observe(document.body)\n window.addEventListener(\"load\", () => {\n reportSize()\n reportEmbeds()\n })\n reportSize()\n reportEmbeds()\n return\n }\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",
|
|
8
|
+
"import type { ArtifactFrameTarget } from \"../../storage/artifacts/types\"\nimport { isArtifactAddress, parseArtifactAddress } from \"../address\"\nimport { decodeHtmlEntities } from \"../html\"\nimport { FRAME_ASSET_PREFIX } from \"../publish/validate/html\"\nimport type { FrameLayout } from \"./entries\"\nimport { FRAME_DECK_CSS, FRAME_PAGE_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 * a kit per layout, and the runtime. The server serves them to the app's frames, and the Agent's\n * layout check serves them to its browser, so both lay a version out the same way.\n */\nexport const FRAME_ASSETS: Readonly<\n Record<string, { readonly body: string; readonly type: string }>\n> = {\n [`${FRAME_ASSET_PREFIX}deck.css`]: { body: FRAME_DECK_CSS, type: \"text/css; charset=utf-8\" },\n [`${FRAME_ASSET_PREFIX}page.css`]: { body: FRAME_PAGE_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\n/** The kit for the layout and the runtime, which reads the layout from its own tag. */\nfunction injected(layout: FrameLayout, base: string): string {\n return `<link rel=\"stylesheet\" href=\"${base}${FRAME_ASSET_PREFIX}${layout}.css\"><script src=\"${base}${FRAME_ASSET_PREFIX}runtime.js\" data-sixb-layout=\"${layout}\"></script>`\n}\n\n/**\n * The way from an entry back to its frame's root, where `__sixb/` is: none for `index.html`,\n * `../` for a canvas's `boards/home.html`.\n */\nfunction rootOf(entry: string): string {\n return \"../\".repeat(entry.split(\"/\").length - 1)\n}\n\n/**\n * An entry with its layout's kit and the runtime first in its `<head>`, before anything of its\n * own, so its 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. `entry` is where the page\n * is in the version, so an entry in a folder, as a canvas's boards are, finds them.\n */\nexport function injectFrameAssets(html: string, layout: FrameLayout, entry = \"index.html\"): string {\n const assets = injected(layout, rootOf(entry))\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(assets, { 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}${assets}${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, from an entry, of a file one of its frame's targets lends it. */\nfunction frameReferencePath(target: ArtifactFrameTarget, entry: string): string | null {\n const file = parseArtifactAddress(target.address)?.path\n if (!file) return null\n const path = file.split(\"/\").map(encodeURIComponent).join(\"/\")\n return `${rootOf(entry)}${FRAME_REFERENCE_PREFIX}${target.artifactId}@${target.version}/${path}`\n}\n\n/**\n * Points each image an entry 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 entry = \"index.html\"\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, entry) : 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",
|
|
9
|
+
"import type { ArtifactKind } from \"../kinds\"\nimport type { ArtifactOutline } from \"../outline\"\n\n/**\n * How the frame's runtime lays out what it serves: a deck shows 1280×720 slides scaled to fit, one\n * at a time or all at once; a page scrolls like any web page, as a canvas's boards do.\n */\nexport type FrameLayout = \"deck\" | \"page\"\n\n/** The kinds that open in a sandboxed frame, each in its layout. */\nconst FRAME_LAYOUTS: Partial<Readonly<Record<ArtifactKind, FrameLayout>>> = {\n slides: \"deck\",\n page: \"page\",\n canvas: \"page\",\n}\n\n/** A kind's frame layout, or null for a kind Sixb draws natively. */\nexport function frameLayout(kind: ArtifactKind): FrameLayout | null {\n return FRAME_LAYOUTS[kind] ?? null\n}\n\n/**\n * The files of a version its frame serves as pages, with the kit and the runtime first in their\n * `<head>`: a deck's or a page's entry, or each of a canvas's boards; none for a kind that does\n * not open in a frame.\n */\nexport function frameEntries(version: {\n readonly entry: string\n readonly outline: ArtifactOutline\n}): readonly string[] {\n if (version.outline.kind === \"canvas\") {\n return version.outline.items.flatMap((item) => (item.type === \"board\" ? [item.file] : []))\n }\n return frameLayout(version.outline.kind) ? [version.entry] : []\n}\n",
|
|
10
|
+
"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\"\nimport { frameLayout } from \"./entries\"\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 version to a sandboxed frame, with the files it embeds from other\n * artifacts that `read` finds. The token in the link is the credential: only its hash is stored.\n * Whoever asks must already have been allowed to read the version, and `read` reads as them. Only\n * a kind with a frame layout opens in one, 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 (!frameLayout(version.outline.kind)) {\n throw new ArtifactRequestError(\n \"artifact_kind_mismatch\",\n `[Sixb] '${version.artifactId}' is a ${version.outline.kind}, which does not open in a frame. 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 version, and what it may show from other artifacts; `null` once\n * the link is unknown, expired, or its version gone, and for a kind that does not open in a frame.\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 && frameLayout(version.outline.kind) ? { version, targets: grant.targets } : null\n}\n\nfunction hashToken(token: string): string {\n return createHash(\"sha256\").update(token).digest(\"hex\")\n}\n",
|
|
11
|
+
"/** A problem the layout probe found on a slide or a page, where it is, and its text. */\nexport interface LayoutProblem {\n readonly code:\n | \"outside\"\n | \"footer\"\n | \"wide\"\n | \"overlap\"\n | \"clipped\"\n | \"small_text\"\n | \"small_target\"\n | \"contrast\"\n | \"broken_image\"\n /** In the slide's 1280×720 pixels, or the page's from its top left. */\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 a slide the frame shows, laid out at its own size (`sixb-fill`), or the whole page, and\n * returns what a reader would find wrong with it. Run in the frame as its own source,\n * `(${layoutProbe})(3)` or `(${layoutProbe})(\"page\")`, so it names nothing outside itself.\n *\n * - `outside` (a slide): text or an image past the slide's edge, which the slide cuts off.\n * - `footer` (a slide): text or an image over the footer's rule, the source, or the number.\n * - `wide` (a page): text or an image past the window's right edge, outside any box that scrolls\n * sideways, which makes the whole page scroll sideways.\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 on a slide, 12px on a page, as drawn, an SVG's scaled with it.\n * - `small_target` (a page): a button, field, or other control under 24px either way.\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 its host sizes it: it is measured as\n * one, and its content is the app's. A page is measured where the viewport shows it, so the check\n * sizes the viewport to the page first.\n */\nexport function layoutProbe(scope: number | \"page\"): LayoutProblem[] {\n const MAX_PER_CODE = 8\n const page = scope === \"page\"\n const slide = page\n ? document.body\n : document.querySelectorAll<HTMLElement>(\"section.slide\")[scope - 1]\n if (!slide) return []\n const box = page\n ? document.documentElement.getBoundingClientRect()\n : 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; on a page, past the window's right edge. The\n // outermost offender stands for what it holds.\n const footer = getComputedStyle(slide, \"::after\")\n const footerTop =\n page || 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 // A box that scrolls sideways holds what is wider than the window, as a wide table's does.\n const scrolls = (element: Element) => {\n for (let node = element.parentElement; node && node !== slide; node = node.parentElement) {\n if (/auto|scroll/.test(getComputedStyle(node).overflowX)) return true\n }\n return false\n }\n for (const element of content) {\n if (outside.some((parent) => parent.contains(element))) continue\n const rect = element.getBoundingClientRect()\n if (page) {\n if (rect.right > window.innerWidth + 1 && !scrolls(element)) {\n outside.push(element)\n report(\"wide\", element)\n }\n continue\n }\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, or out\n * of the window: 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 x = rect.left + rect.width / 2\n const y = rect.top + rect.height / 2\n // Out of the window, as a wide table's far cells are in the box it scrolls in, nothing is\n // under the point to measure.\n if (x < 0 || y < 0 || x > window.innerWidth || y > window.innerHeight) return null\n const stack = document.elementsFromPoint(x, y)\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 < (page ? 11.5 : 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 // A control a finger or a pointer can miss: WCAG's 24px minimum target, on a page.\n if (page) {\n const controls = slide.querySelectorAll(\n 'button, select, textarea, summary, [role=\"button\"], a.button, input:not([type=\"hidden\"], [type=\"checkbox\"], [type=\"radio\"])'\n )\n for (const control of Array.from(controls)) {\n if (!shown(control)) continue\n const rect = control.getBoundingClientRect()\n if (rect.width < 23.5 || rect.height < 23.5) {\n report(\"small_target\", control, {\n size: Math.round(Math.min(rect.width, rect.height)),\n })\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
12
|
],
|
|
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": "
|
|
13
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAkBO,SAAS,4BAA4B,CAC1C,QAC+B;AAAA,EAC/B,OAAO,OAAO,SAAS,YACnB,KAAK,QAAQ,SAAS,OAAO,QAAQ,IAAI,wBAAuB,EAAE,IAClE;AAAA;;ACvBN,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;AAOzC,SAAS,GAAG,CAAC,OAAuB;AAAA,EAClC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKP,OAAO,QAAQ,KAAK,EACnB,IAAI,EAAE,MAAM,WAAW,OAAO,SAAS,QAAQ,EAC/C,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWV;AAAA;AAAA;AAQK,IAAM,iBAAiB,IAAI;AAAA;AAAA;AAAA;AAAA,oBAId,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;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",
|
|
14
|
+
"debugId": "A2752CC6A0BC7D6F64756E2164756E21",
|
|
13
15
|
"names": []
|
|
14
16
|
}
|
|
@@ -57,10 +57,15 @@ export declare const FRAME_DEFAULT_THEMES: {
|
|
|
57
57
|
};
|
|
58
58
|
};
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
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.
|
|
60
|
+
* A deck's kit: the stage that shows one slide or all of them, the slide type scale, the layouts a
|
|
61
|
+
* slide picks by class, the slide chrome, and a few components.
|
|
64
62
|
*/
|
|
65
|
-
export declare const
|
|
63
|
+
export declare const FRAME_DECK_CSS: string;
|
|
64
|
+
/**
|
|
65
|
+
* A page's kit: what makes plain HTML read as a finished page in the app's theme. A measured type
|
|
66
|
+
* scale; tables, forms, and buttons drawn like the app's; a centered column for `<main>`; and a
|
|
67
|
+
* few components a page picks by class: `.lede`, `.eyebrow`, `.card`, `.grid`, `.stat`, `.tag`,
|
|
68
|
+
* `.callout`. Every rule sits in the kit's layer, so a page's own CSS wins wherever it differs.
|
|
69
|
+
*/
|
|
70
|
+
export declare const FRAME_PAGE_CSS: string;
|
|
66
71
|
//# sourceMappingURL=kit.d.ts.map
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../../src/artifacts/frames/kit.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDvB,CAAA;AAgCV;;;GAGG;AACH,eAAO,MAAM,cAAc,QAgTzB,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QA+JzB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/** A problem the layout probe found on a slide, where it is
|
|
1
|
+
/** A problem the layout probe found on a slide or a page, where it is, and its text. */
|
|
2
2
|
export interface LayoutProblem {
|
|
3
|
-
readonly code: "outside" | "footer" | "overlap" | "clipped" | "small_text" | "contrast" | "broken_image";
|
|
4
|
-
/** In the slide's 1280×720 pixels. */
|
|
3
|
+
readonly code: "outside" | "footer" | "wide" | "overlap" | "clipped" | "small_text" | "small_target" | "contrast" | "broken_image";
|
|
4
|
+
/** In the slide's 1280×720 pixels, or the page's from its top left. */
|
|
5
5
|
readonly rect: {
|
|
6
6
|
readonly x: number;
|
|
7
7
|
readonly y: number;
|
|
@@ -20,22 +20,26 @@ export interface LayoutProblem {
|
|
|
20
20
|
readonly colors?: readonly [string, string];
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Measures
|
|
24
|
-
* reader would find wrong with it. Run in the
|
|
25
|
-
* names nothing outside itself.
|
|
23
|
+
* Measures a slide the frame shows, laid out at its own size (`sixb-fill`), or the whole page, and
|
|
24
|
+
* returns what a reader would find wrong with it. Run in the frame as its own source,
|
|
25
|
+
* `(${layoutProbe})(3)` or `(${layoutProbe})("page")`, so it names nothing outside itself.
|
|
26
26
|
*
|
|
27
|
-
* - `outside
|
|
28
|
-
* - `footer
|
|
27
|
+
* - `outside` (a slide): text or an image past the slide's edge, which the slide cuts off.
|
|
28
|
+
* - `footer` (a slide): text or an image over the footer's rule, the source, or the number.
|
|
29
|
+
* - `wide` (a page): text or an image past the window's right edge, outside any box that scrolls
|
|
30
|
+
* sideways, which makes the whole page scroll sideways.
|
|
29
31
|
* - `overlap`: text drawn over other text, line box on line box.
|
|
30
32
|
* - `clipped`: text its own box cuts off.
|
|
31
|
-
* - `small_text`: text under 18px as drawn, an SVG's scaled with it.
|
|
33
|
+
* - `small_text`: text under 18px on a slide, 12px on a page, as drawn, an SVG's scaled with it.
|
|
34
|
+
* - `small_target` (a page): a button, field, or other control under 24px either way.
|
|
32
35
|
* - `contrast`: text under WCAG AA against the solid colors painted under it, its own box's,
|
|
33
36
|
* any box it overlaps, and an SVG shape's fill (4.5:1, or 3:1 from 24px, or 18.66px bold); text
|
|
34
37
|
* over an image or a gradient is not judged.
|
|
35
38
|
* - `broken_image`: an image of the deck's own that did not load.
|
|
36
39
|
*
|
|
37
|
-
* Another artifact's chart or image is a box here, sized as
|
|
38
|
-
* one, and its content is the app's.
|
|
40
|
+
* Another artifact's chart or image is a box here, sized as its host sizes it: it is measured as
|
|
41
|
+
* one, and its content is the app's. A page is measured where the viewport shows it, so the check
|
|
42
|
+
* sizes the viewport to the page first.
|
|
39
43
|
*/
|
|
40
|
-
export declare function layoutProbe(
|
|
44
|
+
export declare function layoutProbe(scope: number | "page"): LayoutProblem[];
|
|
41
45
|
//# sourceMappingURL=probe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/artifacts/frames/probe.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/artifacts/frames/probe.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EACT,SAAS,GACT,QAAQ,GACR,MAAM,GACN,SAAS,GACT,SAAS,GACT,YAAY,GACZ,cAAc,GACd,UAAU,GACV,cAAc,CAAA;IAClB,uEAAuE;IACvE,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;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,EAAE,CA+SnE"}
|