@getv.design/embed 0.1.4 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -17
- package/THIRD_PARTY_NOTICES.txt +1 -1
- package/dist/auto.d.ts +24 -0
- package/dist/auto.js +2 -0
- package/dist/chunks/chunk-ACHGJ7UR.js +2 -0
- package/dist/chunks/{chunk-E3UBMQLG.js → chunk-H7KHX34X.js} +1 -1
- package/dist/chunks/chunk-JIHH634P.js +10 -0
- package/dist/chunks/chunk-JWI4TIMM.js +4 -0
- package/dist/chunks/chunk-P57LNVS3.js +3 -0
- package/dist/chunks/chunk-UAVO4POT.js +6 -0
- package/dist/chunks/fonts.js +4 -4
- package/dist/cli.js +29 -0
- package/dist/edit.js +256 -29
- package/dist/index.js +2 -2
- package/dist/markdown-it.d.ts +16 -0
- package/dist/markdown-it.js +2 -0
- package/dist/markdown.d.ts +19 -0
- package/dist/markdown.js +2 -0
- package/dist/marked.d.ts +14 -0
- package/dist/marked.js +2 -0
- package/dist/rehype.d.ts +19 -0
- package/dist/rehype.js +2 -0
- package/dist/static.d.ts +29 -2
- package/dist/static.js +2 -2
- package/dist/types.d.ts +127 -0
- package/dist/view.js +3 -3
- package/edit.css +215 -0
- package/fonts.css +127 -0
- package/markdown.css +72 -0
- package/package.json +30 -2
- package/dist/chunks/chunk-5NSMF3ZC.js +0 -8
- package/dist/chunks/chunk-QFKGWML4.js +0 -2
- package/dist/chunks/chunk-WT7EGVYI.js +0 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @getv.design/embed v0.1.
|
|
2
|
-
import{a as y}from"./chunks/chunk-
|
|
1
|
+
/*! @getv.design/embed v0.3.1. Free to use under the vDesign Embed Licence. © 2026 Sagar Saini. https://getv.design/docs/licence/ */
|
|
2
|
+
import{a as y}from"./chunks/chunk-ACHGJ7UR.js";import"./chunks/chunk-H7KHX34X.js";var d=["view","edit","play"];async function l(a,i,e){let o=e?.mode;if(!d.includes(o))throw new TypeError(`mount: mode must be one of ${d.join(", ")}; got ${String(o)}.`);if(o==="edit"){let{edit:t}=await import("./edit.js");return t(a,i,e)}let{view:s}=await import("./view.js"),n=await s(a,i,e);if(o==="view")return n;let r;try{r=await n.play(e.page===void 0?{}:{page:e.page})}catch(t){throw n.destroy(),t}return{goTo:t=>r.goTo(t),destroy(){r.destroy(),n.destroy()}}}export{l as mount,y as version};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { MarkdownItOptions } from './types.js';
|
|
2
|
+
export type { FenceOptions, FenceRenderOptions, MarkdownItOptions, Problem, Renderer, } from './types.js';
|
|
3
|
+
export { createRenderer } from './static.js';
|
|
4
|
+
/**
|
|
5
|
+
* The slice of markdown-it this plugin touches, typed loosely on purpose: any
|
|
6
|
+
* markdown-it instance, whatever its version and whichever `@types` describe
|
|
7
|
+
* it, is accepted by `md.use(vdesignMarkdownIt)`.
|
|
8
|
+
*/
|
|
9
|
+
interface MarkdownItLike {
|
|
10
|
+
renderer: {
|
|
11
|
+
rules: object;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** `md.use(vdesignMarkdownIt, options)`. */
|
|
15
|
+
export declare function vdesignMarkdownIt(md: MarkdownItLike, options?: MarkdownItOptions): void;
|
|
16
|
+
export default vdesignMarkdownIt;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! @getv.design/embed v0.3.1. Free to use under the vDesign Embed Licence. © 2026 Sagar Saini. https://getv.design/docs/licence/ */
|
|
2
|
+
import{a as f,b as p,d as u}from"./chunks/chunk-JWI4TIMM.js";import{e as F}from"./chunks/chunk-P57LNVS3.js";import"./chunks/chunk-UAVO4POT.js";import"./chunks/chunk-JIHH634P.js";import"./chunks/chunk-ACHGJ7UR.js";import"./chunks/chunk-H7KHX34X.js";function I(l,t={}){let o=l.renderer.rules,s=o.fence,i=new WeakMap;o.fence=(n,c,k,d,g)=>{let e=n[c];if(!e||!p(e.info))return s?s(n,c,k,d,g):"";let r=t.idPrefix;r||(r=i.get(n)??f(),i.set(n,r));let{resolveSrc:a,...w}=t;return u(e.content,e.info,{...w,idPrefix:r,...e.attrs?{attributes:e.attrs}:{},...a?{resolveSrc:m=>a(m,d)}:{}})}}var b=I;export{F as createRenderer,b as default,I as vdesignMarkdownIt};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FenceOptions, FenceRenderOptions } from './types.js';
|
|
2
|
+
export type { FenceOptions, FenceRenderOptions, Problem, Renderer } from './types.js';
|
|
3
|
+
export { createRenderer } from './static.js';
|
|
4
|
+
/** Ids for one page of HTML: each fence on it gets its own prefix. */
|
|
5
|
+
export declare function createFenceIds(prefix?: string): () => string;
|
|
6
|
+
/** The language a fence must name. `vdesign` is accepted too, for hosts that know `vd` as something else. */
|
|
7
|
+
export declare function isVdFence(info: string | undefined | null): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The attributes after the language: `key=value`, `key="quoted value"`, or a
|
|
10
|
+
* bare `key` for a flag. Unknown keys are ignored, so adding one later breaks
|
|
11
|
+
* no fence written today.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseInfo(info: string): FenceOptions;
|
|
14
|
+
/**
|
|
15
|
+
* A fence to HTML. `info` is the whole info string (`vd page=1`) or options
|
|
16
|
+
* already parsed. Never throws: a fence that cannot be drawn comes back as
|
|
17
|
+
* its code block, with what was wrong.
|
|
18
|
+
*/
|
|
19
|
+
export declare function renderFence(body: string, info: string | FenceOptions, options?: FenceRenderOptions): string;
|
package/dist/markdown.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! @getv.design/embed v0.3.1. Free to use under the vDesign Embed Licence. © 2026 Sagar Saini. https://getv.design/docs/licence/ */
|
|
2
|
+
import{a as b,b as c,c as d,d as e}from"./chunks/chunk-JWI4TIMM.js";import{e as a}from"./chunks/chunk-P57LNVS3.js";import"./chunks/chunk-UAVO4POT.js";import"./chunks/chunk-JIHH634P.js";import"./chunks/chunk-ACHGJ7UR.js";import"./chunks/chunk-H7KHX34X.js";export{b as createFenceIds,a as createRenderer,c as isVdFence,d as parseInfo,e as renderFence};
|
package/dist/marked.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FenceRenderOptions } from './types.js';
|
|
2
|
+
export type { FenceOptions, FenceRenderOptions, Problem, Renderer } from './types.js';
|
|
3
|
+
export { createRenderer } from './static.js';
|
|
4
|
+
interface CodeToken {
|
|
5
|
+
text: string;
|
|
6
|
+
lang?: string;
|
|
7
|
+
}
|
|
8
|
+
/** A marked extension. Returning `false` hands the block back to marked's own renderer. */
|
|
9
|
+
export declare function vdesignMarked(options?: FenceRenderOptions): {
|
|
10
|
+
renderer: {
|
|
11
|
+
code(this: unknown, token: CodeToken | string, info?: string): string | false;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export default vdesignMarked;
|
package/dist/marked.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! @getv.design/embed v0.3.1. Free to use under the vDesign Embed Licence. © 2026 Sagar Saini. https://getv.design/docs/licence/ */
|
|
2
|
+
import{a as t,b as i,d as o}from"./chunks/chunk-JWI4TIMM.js";import{e as f}from"./chunks/chunk-P57LNVS3.js";import"./chunks/chunk-UAVO4POT.js";import"./chunks/chunk-JIHH634P.js";import"./chunks/chunk-ACHGJ7UR.js";import"./chunks/chunk-H7KHX34X.js";function p(r={}){let s=r.idPrefix??t();return{renderer:{code(e,d){let c=typeof e=="string"?e:e.text,n=typeof e=="string"?d:e.lang;return i(n)?o(c,n??"vd",{...r,idPrefix:s}):!1}}}}var a=p;export{f as createRenderer,a as default,p as vdesignMarked};
|
package/dist/rehype.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { RehypeOptions } from './types.js';
|
|
2
|
+
export type { FenceOptions, FenceRenderOptions, Problem, RehypeOptions, Renderer, } from './types.js';
|
|
3
|
+
interface HastNode {
|
|
4
|
+
type: string;
|
|
5
|
+
tagName?: string;
|
|
6
|
+
value?: string;
|
|
7
|
+
properties?: Record<string, unknown>;
|
|
8
|
+
data?: {
|
|
9
|
+
meta?: unknown;
|
|
10
|
+
};
|
|
11
|
+
children?: HastNode[];
|
|
12
|
+
}
|
|
13
|
+
interface VFileLike {
|
|
14
|
+
path?: string;
|
|
15
|
+
history?: string[];
|
|
16
|
+
}
|
|
17
|
+
/** `.use(rehypeVdesign, options)`. */
|
|
18
|
+
export declare function rehypeVdesign(options?: RehypeOptions): (tree: HastNode, file?: VFileLike) => Promise<void>;
|
|
19
|
+
export default rehypeVdesign;
|
package/dist/rehype.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! @getv.design/embed v0.3.1. Free to use under the vDesign Embed Licence. © 2026 Sagar Saini. https://getv.design/docs/licence/ */
|
|
2
|
+
import{a as h,d as m}from"./chunks/chunk-JWI4TIMM.js";import{e as g}from"./chunks/chunk-P57LNVS3.js";import"./chunks/chunk-UAVO4POT.js";import"./chunks/chunk-JIHH634P.js";import"./chunks/chunk-ACHGJ7UR.js";import"./chunks/chunk-H7KHX34X.js";function x(e={}){let n,i=()=>e.renderer?Promise.resolve(e.renderer):n??=g({fonts:e.fonts??"exact",...e.fontBase===void 0?{}:{fontBase:e.fontBase}});return async(t,r)=>{let s=r?.path??r?.history?.at(-1);if(e.include&&!e.include(s))return;let o=[];if(v(t,(d,l,a)=>{if(d.type!=="element"||d.tagName!=="pre"||!l)return;let c=d.children?.find(p=>p.type==="element");c?.tagName!=="code"||!F(c)||o.push({parent:l,index:a,code:c})}),o.length===0)return;let u=await i(),f={...e};for(let d of["resolveSrc","fonts","fontBase","include"])delete f[d];let N=e.idPrefix??h(),R=e.resolveSrc??k;for(let{parent:d,index:l,code:a}of o){let c=typeof a.data?.meta=="string"?a.data.meta:"",p=m(y(a),`vd ${c}`,{...f,renderer:u,idPrefix:N,resolveSrc:H=>R(H,s)});d.children[l]={type:"raw",value:p}}}}var B=x;function F(e){let n=e.properties?.className;return(Array.isArray(n)?n:typeof n=="string"?n.split(/\s+/):[]).some(t=>t==="language-vd"||t==="language-vdesign")}function y(e){return e.type==="text"?e.value??"":(e.children??[]).map(y).join("")}function v(e,n,i,t=0){n(e,i,t),e.children?.forEach((r,s)=>v(r,n,e,s))}function k(e,n){let i=globalThis,t=i.process?.getBuiltinModule?.("node:fs"),r=i.process?.getBuiltinModule?.("node:path"),s=i.process?.cwd?.();if(!t||!r||s===void 0||/^[a-z][a-z0-9+.-]*:/i.test(e)||e.includes("\\")||!/\.vd(\.svg)?$/i.test(e))return;let o=n===void 0?s:r.dirname(r.resolve(s,n));try{let u=t.realpathSync(r.resolve(o,e)),f=t.realpathSync(s);return u.startsWith(f+r.sep)?t.readFileSync(u,"utf8"):void 0}catch{return}}export{B as default,x as rehypeVdesign};
|
package/dist/static.d.ts
CHANGED
|
@@ -1,7 +1,34 @@
|
|
|
1
|
-
import type { ParseResult, RenderSvgOptions, Source } from './types.js';
|
|
2
|
-
export type { ParseResult, Problem, RenderSvgOptions, Source, VdDocument } from './types.js';
|
|
1
|
+
import type { Outline, ParseResult, Renderer, RendererOptions, RenderSvgOptions, Source } from './types.js';
|
|
2
|
+
export type { Outline, OutlinePage, ParseResult, Problem, Renderer, RendererOptions, RendererRenderOptions, RenderSvgOptions, Source, VdDocument, } from './types.js';
|
|
3
3
|
export { version } from './version.js';
|
|
4
4
|
/** Read `.vd` text. Never throws: what is wrong comes back as `problems`. */
|
|
5
5
|
export declare function parse(text: string): ParseResult;
|
|
6
6
|
/** Draw a document, or one of its pages, as a standalone SVG. */
|
|
7
7
|
export declare function renderSvg(source: Source, options?: RenderSvgOptions): Promise<string>;
|
|
8
|
+
/**
|
|
9
|
+
* The `.vd` text in `text`: itself for a `.vd`, the design it carries for a
|
|
10
|
+
* `.vd.svg`, `undefined` for an SVG that carries none. For copying a design
|
|
11
|
+
* out of an SVG as text.
|
|
12
|
+
*/
|
|
13
|
+
export declare function designOf(text: string): string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* A document's title and pages, each with the line its `frame` is written on:
|
|
16
|
+
* what an editor needs for an outline, breadcrumbs, and keeping a preview on
|
|
17
|
+
* the page the cursor is in. Never throws.
|
|
18
|
+
*
|
|
19
|
+
* The line is found by reading the text for the page's top-level `frame`
|
|
20
|
+
* line, never by evaluating anything, so it is as cheap as parsing.
|
|
21
|
+
*/
|
|
22
|
+
export declare function outline(text: string): Outline;
|
|
23
|
+
/**
|
|
24
|
+
* A renderer that draws synchronously once it exists. Exact fonts are fetched
|
|
25
|
+
* here, all of them, because which ones a later document needs is not known
|
|
26
|
+
* yet and the render cannot wait to find out.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createRenderer(options?: RendererOptions): Promise<Renderer>;
|
|
29
|
+
/**
|
|
30
|
+
* The renderer with no font files, made synchronously: what the Markdown
|
|
31
|
+
* adapters use when a host does not hand them one, because a markdown-it
|
|
32
|
+
* plugin is installed in a synchronous call.
|
|
33
|
+
*/
|
|
34
|
+
export declare function approximateRenderer(): Renderer;
|
package/dist/static.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @getv.design/embed v0.1.
|
|
2
|
-
import{a as
|
|
1
|
+
/*! @getv.design/embed v0.3.1. Free to use under the vDesign Embed Licence. © 2026 Sagar Saini. https://getv.design/docs/licence/ */
|
|
2
|
+
import{a as b,b as c,c as d,d as e,e as f,f as g}from"./chunks/chunk-P57LNVS3.js";import"./chunks/chunk-UAVO4POT.js";import"./chunks/chunk-JIHH634P.js";import{a}from"./chunks/chunk-ACHGJ7UR.js";import"./chunks/chunk-H7KHX34X.js";export{g as approximateRenderer,f as createRenderer,d as designOf,e as outline,b as parse,c as renderSvg,a as version};
|
package/dist/types.d.ts
CHANGED
|
@@ -59,6 +59,57 @@ export interface RenderSvgOptions {
|
|
|
59
59
|
* load. Empty when nothing is.
|
|
60
60
|
*/
|
|
61
61
|
onProblems?: (problems: Problem[]) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Put in front of every id the SVG defines for itself (clips, shadows,
|
|
64
|
+
* gradients) and of every reference to one. Two SVGs inline in one page
|
|
65
|
+
* otherwise share those names, and the second one's shapes clip to the
|
|
66
|
+
* first one's rectangles. The `/markdown` entries give each fence its own.
|
|
67
|
+
*/
|
|
68
|
+
idPrefix?: string;
|
|
69
|
+
}
|
|
70
|
+
/** A page in `outline()`: what `view()` calls a page, and where it starts in the text. */
|
|
71
|
+
export interface OutlinePage {
|
|
72
|
+
id: string;
|
|
73
|
+
name?: string;
|
|
74
|
+
/**
|
|
75
|
+
* The 1-based line of the page's `frame` line in the text given, which for
|
|
76
|
+
* a `.vd.svg` counts the SVG's own lines. Undefined only if the frame could
|
|
77
|
+
* not be found, which a document `parse` accepted does not do.
|
|
78
|
+
*/
|
|
79
|
+
line?: number;
|
|
80
|
+
}
|
|
81
|
+
export interface Outline {
|
|
82
|
+
title?: string;
|
|
83
|
+
/** In play order: top-level frames that are not hidden. */
|
|
84
|
+
pages: OutlinePage[];
|
|
85
|
+
problems: Problem[];
|
|
86
|
+
}
|
|
87
|
+
export interface RendererOptions {
|
|
88
|
+
/**
|
|
89
|
+
* `'approximate'` (the default) needs no font files. `'exact'` fetches every
|
|
90
|
+
* bundled face once, before `createRenderer` resolves, so each later render
|
|
91
|
+
* can lay text out from them without waiting. That is all 18 faces, about
|
|
92
|
+
* 2.6 MB: meant for a build step or an editor's preview, not a web page.
|
|
93
|
+
*/
|
|
94
|
+
fonts?: 'exact' | 'approximate';
|
|
95
|
+
/** As for `renderSvg`. */
|
|
96
|
+
fontBase?: string | URL;
|
|
97
|
+
}
|
|
98
|
+
export interface RendererRenderOptions {
|
|
99
|
+
page?: string | number;
|
|
100
|
+
idPrefix?: string;
|
|
101
|
+
onProblems?: (problems: Problem[]) => void;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Renders synchronously, for a caller that cannot wait: a markdown-it rule
|
|
105
|
+
* returns a string. Under `fonts: 'exact'` a document that needs a face that
|
|
106
|
+
* did not load draws approximately and `onProblems` hears `fonts-unavailable`.
|
|
107
|
+
*/
|
|
108
|
+
export interface Renderer {
|
|
109
|
+
/** `.vd` or `.vd.svg` text, or a parsed document, to an SVG string. Throws a `RangeError` for a missing page. */
|
|
110
|
+
renderSvg(source: string | VdDocument, options?: RendererRenderOptions): string;
|
|
111
|
+
/** What `createRenderer` was asked for, and what it got: `'approximate'` if the faces would not load. */
|
|
112
|
+
readonly fonts: 'exact' | 'approximate';
|
|
62
113
|
}
|
|
63
114
|
export interface ViewOptions {
|
|
64
115
|
/**
|
|
@@ -220,4 +271,80 @@ export type MountMode = 'view' | 'edit' | 'play';
|
|
|
220
271
|
export type MountOptions = {
|
|
221
272
|
mode: MountMode;
|
|
222
273
|
} & EditOptions;
|
|
274
|
+
/** What a fence's info string asks for: ` ```vd page=pricing mode=view source `. */
|
|
275
|
+
export interface FenceOptions {
|
|
276
|
+
/** One page, by id or 0-based index (a number written as digits). Default: the whole document. */
|
|
277
|
+
page?: string | number;
|
|
278
|
+
/** A file to draw instead of the body, resolved by `resolveSrc`. */
|
|
279
|
+
src?: string;
|
|
280
|
+
/** The live view's height in CSS pixels. Default: the drawing's own aspect ratio. */
|
|
281
|
+
height?: number;
|
|
282
|
+
/** `'view'` hydrates into a live view; `'static'` stays an SVG. Default: the adapter's `mode`. */
|
|
283
|
+
mode?: 'static' | 'view';
|
|
284
|
+
/** Also show the `.vd` text, folded, under the drawing. */
|
|
285
|
+
source?: boolean;
|
|
286
|
+
/** The drawing's accessible name. Default: the document's title. */
|
|
287
|
+
alt?: string;
|
|
288
|
+
}
|
|
289
|
+
export interface FenceRenderOptions {
|
|
290
|
+
/** Default: a renderer with no font files (`approximateRenderer()`). `createRenderer` makes an exact one. */
|
|
291
|
+
renderer?: Renderer;
|
|
292
|
+
/** Read a fence's `src=`. Without it, or when it returns `undefined`, the fence shows a problem. */
|
|
293
|
+
resolveSrc?: (src: string) => string | undefined;
|
|
294
|
+
/** For fences that do not say. Default `'static'`. */
|
|
295
|
+
mode?: 'static' | 'view';
|
|
296
|
+
/**
|
|
297
|
+
* `'inline'` (the default) puts the SVG in the page: its text can be selected
|
|
298
|
+
* and searched. `'img'` wraps it in `<img src="data:…">`: isolated from the
|
|
299
|
+
* page's CSS, and what a mail client or a CMS that strips `<svg>` accepts.
|
|
300
|
+
*/
|
|
301
|
+
output?: 'inline' | 'img';
|
|
302
|
+
/**
|
|
303
|
+
* `false` for a page whose content security policy refuses `style=""`. A
|
|
304
|
+
* drawing that needs one (a blend mode) is then wrapped as an `<img>`,
|
|
305
|
+
* which the policy does not reach into. Default `true`.
|
|
306
|
+
*/
|
|
307
|
+
inlineStyles?: boolean;
|
|
308
|
+
/** The most text and nodes one fence may hold. Past either it stays a code block. */
|
|
309
|
+
limits?: {
|
|
310
|
+
bytes?: number;
|
|
311
|
+
nodes?: number;
|
|
312
|
+
};
|
|
313
|
+
/** A fresh prefix for each drawing's ids. Default: `vd1-`, `vd2-`, … per call of `createFenceIds`. */
|
|
314
|
+
idPrefix?: () => string;
|
|
315
|
+
/**
|
|
316
|
+
* Extra attributes for the `<figure>`, as the host's own code block would
|
|
317
|
+
* have carried them: VS Code's preview marks blocks `class="code-line"
|
|
318
|
+
* data-line="12"` to keep its scroll in step with the editor.
|
|
319
|
+
*/
|
|
320
|
+
attributes?: readonly (readonly [string, string])[];
|
|
321
|
+
}
|
|
322
|
+
export interface MarkdownItOptions extends Omit<FenceRenderOptions, 'resolveSrc'> {
|
|
323
|
+
/** Read a fence's `src=`. `env` is what the host passed to `md.render(text, env)`. */
|
|
324
|
+
resolveSrc?: (src: string, env: unknown) => string | undefined;
|
|
325
|
+
}
|
|
326
|
+
export interface RehypeOptions extends Omit<FenceRenderOptions, 'resolveSrc' | 'renderer'> {
|
|
327
|
+
/** Default `'exact'`. Ignored when `renderer` is given. */
|
|
328
|
+
fonts?: RendererOptions['fonts'];
|
|
329
|
+
fontBase?: RendererOptions['fontBase'];
|
|
330
|
+
renderer?: Renderer;
|
|
331
|
+
/**
|
|
332
|
+
* Read a fence's `src=`. `path` is the Markdown file's own path when the
|
|
333
|
+
* pipeline knows it. Default, in Node: the file, relative to the Markdown.
|
|
334
|
+
*/
|
|
335
|
+
resolveSrc?: (src: string, path: string | undefined) => string | undefined;
|
|
336
|
+
/**
|
|
337
|
+
* Which Markdown files to draw fences in, by path. Default: all of them. For
|
|
338
|
+
* a site whose reference pages quote DSL to teach it, where the reader came
|
|
339
|
+
* for the code, not the picture.
|
|
340
|
+
*/
|
|
341
|
+
include?: (path: string | undefined) => boolean;
|
|
342
|
+
}
|
|
343
|
+
export interface HydrateOptions {
|
|
344
|
+
/** Passed to each view. Default `'exact'`, from `fontBase`. */
|
|
345
|
+
fonts?: ViewOptions['fonts'];
|
|
346
|
+
fontBase?: ViewOptions['fontBase'];
|
|
347
|
+
surface?: ViewOptions['surface'];
|
|
348
|
+
onLink?: ViewOptions['onLink'];
|
|
349
|
+
}
|
|
223
350
|
export {};
|
package/dist/view.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @getv.design/embed v0.1.
|
|
2
|
-
import{
|
|
1
|
+
/*! @getv.design/embed v0.3.1. Free to use under the vDesign Embed Licence. © 2026 Sagar Saini. https://getv.design/docs/licence/ */
|
|
2
|
+
import{c as Ct,e as Ye,f as de,g as Ae,h as It,i as Ne}from"./chunks/chunk-UAVO4POT.js";import{A as At,B as Ke,E as Mt,F as Tt,G as Ot,H as _t,I as We,J as Lt,K as Pt,a as ft,b as ut,c as De,d as pt,e as Be,f as He,g as ht,h as je,i as mt,j as gt,k as yt,l as wt,n as xt,p as vt,t as Ue,u as bt,v as Et,w as St,x as kt,y as Ge,z as Fe}from"./chunks/chunk-JIHH634P.js";import{a as yn,b as lt}from"./chunks/chunk-ACHGJ7UR.js";import"./chunks/chunk-H7KHX34X.js";var wn=.8,xn=.2;function qe(e,t){let r=e.createElement("canvas").getContext("2d"),n=At(),p=new Map,a=new Map,y=new Set;function u(l){return`${l.italic?"italic ":""}${l.weight} ${l.size}px ${l.family}`}function g(){p.clear(),a.clear()}return{advance(l,w){if(!r)return n.advance(l,w);let b=u(w),A=`${b}\0${w.letterSpacing}\0${l}`,L=p.get(A);if(L!==void 0)return L;r.font=b;let x=r.measureText(l).width+w.letterSpacing*[...l].length;return p.set(A,x),x},metrics(l){if(!r)return n.metrics(l);let w=u(l),b=a.get(w);if(b)return b;r.font=w;let A=r.measureText("Hxg"),L=A.fontBoundingBoxAscent??l.size*wn,x=A.fontBoundingBoxDescent??l.size*xn,V={ascent:L,descent:x,lineGap:0};return a.set(w,V),V},load(l,w){let b=e.fonts;if(!b||typeof FontFace!="function")return!1;let A=!1;for(let L of Object.values(l.fonts))for(let x of vn(L)){let V=`${L.family}\0${x.src}\0${x.weight??400}\0${x.style??"normal"}`;if(y.has(V))continue;y.add(V);let _=x.src.startsWith("data:")?void 0:w?.(x.src),M={weight:String(x.weight??400),style:x.style??"normal"},H=Q=>{let R=new FontFace(L.family,typeof Q=="string"?`url(${Q})`:bn(Q),M);b.add(R),R.load().then(()=>{g(),t?.()},()=>{b.delete(R)})};_===void 0?H(x.src):(A=!0,_.then(H,()=>{}))}return A},invalidate:g,destroy(){g(),y.clear()}}}function vn(e){return e.faces??[]}function bn(e){return e instanceof Uint8Array?e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength):e}var ze={x:0,y:0,zoom:1},Dt=.02,Ft=64;function Me(e){return Number.isFinite(e)?Math.min(Math.max(e,Dt),Ft):1}function $e(e,t){return{x:(t.x-e.x)/e.zoom,y:(t.y-e.y)/e.zoom}}function Ze(e,t){return{x:t.x*e.zoom+e.x,y:t.y*e.zoom+e.y}}function Te(e,t,o){let r=Me(e.zoom*o),n=$e(e,t);return{zoom:r,x:t.x-n.x*r,y:t.y-n.y*r}}function ye(e,t,o){return{...e,x:e.x+t,y:e.y+o}}function Xe(e){return`translate(${e.x} ${e.y}) scale(${e.zoom})`}function le(e,t,o){let r={width:Math.max(1,t.width-o*2),height:Math.max(1,t.height-o*2)};if(e.width<=0||e.height<=0)return ze;let n=Me(Math.min(r.width/e.width,r.height/e.height));return{zoom:n,x:(t.width-e.width*n)/2-(e.x??0)*n,y:(t.height-e.height*n)/2-(e.y??0)*n}}var ne="http://www.w3.org/2000/svg",Nt="vd-viewer-styles",zt=`
|
|
3
3
|
.vd-viewer {
|
|
4
4
|
position: relative;
|
|
5
5
|
overflow: hidden;
|
|
@@ -98,4 +98,4 @@ import{b as ut,c as ze,d as ce,e as Ee,f as pt,g as Le}from"./chunks/chunk-WT7EG
|
|
|
98
98
|
.vd-viewer--interacting .vd-viewer__page {
|
|
99
99
|
filter: none;
|
|
100
100
|
}
|
|
101
|
-
`;function wt(e){if(e.getElementById(gt))return;let t=e.createElement("style");t.id=gt,t.textContent=yt,e.head.appendChild(t)}function vt(e,t,r,i){return t?nn(e,t,r,i):tn(e,r,i)}function tn(e,t,r){let i=Ve(e,r);return{measurer:i,update:n=>{i.load(n,t)},afterPaint:()=>{},destroy:()=>i.destroy()}}var xt=new WeakMap;function nn(e,t,r,i){let n,u,s,m=()=>{if(!n)throw new Error("canvasFonts: update() before measuring");return n};return{measurer:{advance:(g,l)=>m().measurer.advance(g,l),metrics:g=>m().measurer.metrics(g),itemize:g=>m().measurer.itemize(g)},update(g){n&&g.fonts===u||(s?.(),n?.dispose(),n=t.forDocument(g,r?{loader:r}:{}),u=g.fonts,s=n.onChange(i))},afterPaint(){let g=e.fonts;if(!n||!g||typeof FontFace!="function")return;let l=xt.get(e);l||xt.set(e,l=new Set);for(let p of n.usedFaces()){if(l.has(p.id))continue;l.add(p.id);let M=new FontFace(p.id,rn(p.bytes),{weight:String(p.weight),style:p.style});g.add(M),M.load().catch(()=>g.delete(M))}},destroy(){s?.(),n?.dispose(),n=void 0}}}function rn(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}var on=.01,sn=.004,bt=40,an=16;function Ae(e,t){wt(e.ownerDocument);let r=t.document,i=a=>vt(e.ownerDocument,a,t.loadFont,()=>{z(r)}),n=i(t.fonts),u={advance:(a,v)=>n.measurer.advance(a,v),metrics:a=>n.measurer.metrics(a),itemize:a=>n.measurer.itemize?.(a)??[a]};n.update(r);let s=_e(r),m=()=>t.resolveAsset?{measure:u,resolveAsset:t.resolveAsset}:{measure:u},f=Ne(r,s,m()),g=t.camera??Pe,l=t.interactive??!0,p=t.wheel??"always";e.classList.add("vd-viewer"),t.surface&&(e.style.background=t.surface);let M=e.ownerDocument.createElementNS(J,"svg");M.setAttribute("class","vd-viewer__surface"),M.setAttribute("width","100%"),M.setAttribute("height","100%");let S=e.ownerDocument.createElementNS(J,"g");S.setAttribute("class","vd-viewer__camera"),S.style.isolation="isolate",M.appendChild(S);let O=e.ownerDocument.createElementNS(J,"defs");S.appendChild(O);let w=e.ownerDocument.createElementNS(J,"rect");w.setAttribute("class","vd-viewer__page"),S.appendChild(w),e.appendChild(M);let N=new Map;function _(){S.setAttribute("transform",$e(g))}function x(){X();let a=f.background!==void 0;A(w,"x",String(f.x)),A(w,"y",String(f.y)),A(w,"width",String(a?f.width:0)),A(w,"height",String(a?f.height:0)),I(w,"fill",f.background??null);let v=new Set,L=w;for(let E of f.items){v.add(E.id);let b=N.get(E.id);(!b||b.tagName!==Et(E))&&(b?.remove(),b=e.ownerDocument.createElementNS(J,Et(E)),b.setAttribute("data-vd-id",E.id),N.set(E.id,b)),fn(b,E),L.nextSibling!==b&&S.insertBefore(b,L.nextSibling),L=b}for(let[E,b]of N)v.has(E)||(b.remove(),N.delete(E));n.afterPaint(),t.onSceneChange?.(f,r)}let R=new Map;function X(){let a=[...f.gradients.map(at),...f.items.filter(b=>b.shadows.length>0).map(b=>dt(b)),...f.clips.map(st)],v=new Set(a);for(let[b,H]of R)v.has(b)||(H.remove(),R.delete(b));let L=a.filter(b=>!R.has(b));if(L.length===0)return;[...new DOMParser().parseFromString(`<svg xmlns="${J}">${L.join("")}</svg>`,"image/svg+xml").documentElement.children].forEach((b,H)=>{let d=e.ownerDocument.importNode(b,!0);O.appendChild(d),R.set(L[H],d)})}function z(a){r=a,n.update(r),s=_e(r),f=Ne(r,s,m()),x()}function G(a){let v=e.getBoundingClientRect();return{x:a.clientX-v.left,y:a.clientY-v.top}}let C=0,j=0;function Y(){e.classList.add("vd-viewer--interacting"),j&&clearTimeout(j),j=setTimeout(()=>{j=0,e.classList.remove("vd-viewer--interacting")},180)}function Z(){C&&(cancelAnimationFrame(C),C=0),_(),t.onCameraChange?.(g)}function te(a){g=a,Z()}function $(a){g=a,Y(),!C&&(C=requestAnimationFrame(()=>{C=0,_(),t.onCameraChange?.(g)}))}let Q=null,B=null,fe=!1,K=a=>{if(p==="modifier"&&!a.ctrlKey&&!a.metaKey)return;a.preventDefault();let v=G(a),L=a.deltaMode===1?an:a.deltaMode===2?e.clientHeight||800:1,E=a.deltaX*L,b=a.deltaY*L;if(a.ctrlKey||a.metaKey){let H=a.ctrlKey?on:sn,d=Math.max(-bt,Math.min(bt,b));$(De(g,v,Math.exp(-d*H)));return}if(a.shiftKey&&E===0){$(ke(g,-b,0));return}$(ke(g,-E,-b))},ge=a=>{(a.button===1||a.button===0&&fe)&&(a.preventDefault(),Q=a.pointerId,B=G(a),e.setPointerCapture(a.pointerId))},pe=a=>{if(Q!==a.pointerId||!B)return;let v=G(a);$(ke(g,v.x-B.x,v.y-B.y)),B=v},ne=a=>{Q===a.pointerId&&(Q=null,B=null,e.hasPointerCapture(a.pointerId)&&e.releasePointerCapture(a.pointerId))},W=a=>{a.code==="Space"&&(fe=!0)},re=a=>{a.code==="Space"&&(fe=!1)};l&&(e.addEventListener("wheel",K,{passive:!1}),e.addEventListener("pointerdown",ge),e.addEventListener("pointermove",pe),e.addEventListener("pointerup",ne),e.addEventListener("pointercancel",ne),e.ownerDocument.addEventListener("keydown",W),e.ownerDocument.addEventListener("keyup",re)),_(),x();let se={element:e,surface:M,update:z,getDocument:()=>r,getScene:()=>f,getResolution:()=>s,getMeasurer:()=>u,setFonts(a){n.destroy(),n=i(a),z(r)},getCamera:()=>g,setCamera:te,zoomBy(a,v){let L=e.getBoundingClientRect(),E=v??{x:L.width/2,y:L.height/2};te(De(g,E,a))},fitToContent(a=32){let v=e.getBoundingClientRect();te(de({x:f.x,y:f.y,width:f.width,height:f.height},{width:v.width||f.width,height:v.height||f.height},a))},screenToDocument:a=>Ce(g,a),documentToScreen:a=>Re(g,a),pointerPoint:G,hitTest(a,v){for(let L=f.items.length-1;L>=0;L--){let E=f.items[L];if(E&&xn(E,a,wn/g.zoom)&&(!v||v(E.id)))return E.id}return null},linkAt(a,v){for(let L=f.items.length-1;L>=0;L--){let E=f.items[L];if(E?.kind!=="text"||v&&!v(E.id))continue;let b=E.rotation===0?a:Ie(a,{x:E.x+E.w/2,y:E.y+E.h/2},-E.rotation);for(let H of E.lines){if(b.y<H.y||b.y>H.y+H.h)continue;let d=H.spans.find(y=>b.x>=y.x&&b.x<=y.x+y.w);if(d)return d.style.link}}},itemOf:a=>f.items.find(v=>v.id===a),elementOf:a=>N.get(a),destroy(){l&&(e.removeEventListener("wheel",K),e.removeEventListener("pointerdown",ge),e.removeEventListener("pointermove",pe),e.removeEventListener("pointerup",ne),e.removeEventListener("pointercancel",ne),e.ownerDocument.removeEventListener("keydown",W),e.ownerDocument.removeEventListener("keyup",re)),C&&cancelAnimationFrame(C),j&&clearTimeout(j),C=0,j=0,n.destroy(),e.classList.remove("vd-viewer--interacting"),M.remove(),N.clear(),e.classList.remove("vd-viewer")}};return t.autoFit&&se.fitToContent(),se}var cn="vd-clip-";function dn(e){return cn+e}function kt(e){return`url(#${dn(e)})`}function Et(e){return lt(e)?"g":Be(e)}function Be(e){switch(e.kind){case"ellipse":return"ellipse";case"frame":return"rect";case"image":return e.href===void 0?"rect":"image";case"rect":return"rect";case"text":return"text";case"vector":return"path"}}function fn(e,t){if(e.tagName!=="g"){St(e,t);return}I(e,"clip-path",t.clip===void 0?null:kt(t.clip)),e.style.mixBlendMode=t.blend==="normal"?"":t.blend;let r=e.firstElementChild;(!r||r.tagName!==Be(t))&&(r?.remove(),r=e.ownerDocument.createElementNS(J,Be(t)),e.appendChild(r)),St(r,{...t,clip:void 0,blend:"normal"})}function St(e,t){switch(I(e,"clip-path",t.clip===void 0?null:kt(t.clip)),I(e,"transform",t.rotation===0?null:ft(t)),e.style.mixBlendMode=t.blend==="normal"?"":t.blend,e.style.filter=t.shadows.length>0?`url(#${ct}${t.id})`:"",t.kind){case"ellipse":gn(e,t);return;case"frame":ln(e,t);return;case"image":un(e,t);return;case"rect":mn(e,t);return;case"text":hn(e,t);return;case"vector":yn(e,t);return}}function ln(e,t){A(e,"class","vd-viewer__page"),A(e,"x",String(t.x)),A(e,"y",String(t.y)),A(e,"width",String(t.w)),A(e,"height",String(t.h)),I(e,"fill",t.background??null)}function un(e,t){if(A(e,"x",String(t.x)),A(e,"y",String(t.y)),A(e,"width",String(t.w)),A(e,"height",String(t.h)),I(e,"opacity",t.opacity<1?String(t.opacity):null),t.href===void 0){A(e,"class","vd-viewer__missing"),I(e,"rx",t.radius>0?String(t.radius):null);return}A(e,"href",t.href),A(e,"preserveAspectRatio",pn[t.fit])}var pn={cover:"xMidYMid slice",contain:"xMidYMid meet",fill:"none"};function hn(e,t){I(e,"opacity",t.opacity<1?String(t.opacity):null),A(e,"xml:space","preserve");let r=t.lines.flatMap(n=>n.spans).filter(n=>n.text!==""),i=e.ownerDocument;for(;e.childNodes.length>r.length;)e.lastChild?.remove();for(;e.childNodes.length<r.length;)e.appendChild(i.createElementNS(J,"tspan"));r.forEach((n,u)=>{let s=e.childNodes[u];s.textContent!==n.text&&(s.textContent=n.text),A(s,"x",String(n.x)),A(s,"y",String(n.y)),A(s,"font-family",n.style.family),A(s,"font-size",String(n.style.size)),A(s,"fill",n.style.fill),I(s,"font-weight",n.style.weight===400?null:String(n.style.weight)),I(s,"font-style",n.style.italic?"italic":null),I(s,"letter-spacing",n.style.letterSpacing===0?null:String(n.style.letterSpacing)),I(s,"data-vd-link",n.style.link??null);let m=[n.style.underline?"underline":"",n.style.strike?"line-through":""].filter(Boolean).join(" ");I(s,"text-decoration",m===""?null:m)})}function mn(e,t){I(e,"class",null),A(e,"x",String(t.x)),A(e,"y",String(t.y)),A(e,"width",String(t.w)),A(e,"height",String(t.h)),A(e,"fill",t.fill),I(e,"rx",t.radius>0?String(t.radius):null),I(e,"stroke",t.stroke??null),I(e,"stroke-width",t.stroke&&t.strokeWidth>0?String(t.strokeWidth):null),I(e,"opacity",t.opacity<1?String(t.opacity):null)}function At(e,t){A(e,"fill",t.fill),I(e,"stroke",t.stroke??null),I(e,"stroke-width",t.stroke&&t.strokeWidth>0?String(t.strokeWidth):null),I(e,"opacity",t.opacity<1?String(t.opacity):null)}function gn(e,t){A(e,"cx",String(t.x+t.w/2)),A(e,"cy",String(t.y+t.h/2)),A(e,"rx",String(t.w/2)),A(e,"ry",String(t.h/2)),At(e,t)}function yn(e,t){A(e,"d",t.d),At(e,t),I(e,"fill-rule",t.rule==="nonzero"?null:t.rule),I(e,"stroke-linecap",t.cap==="butt"?null:t.cap),I(e,"stroke-linejoin",t.join==="miter"?null:t.join)}function A(e,t,r){e.getAttribute(t)!==r&&e.setAttribute(t,r)}function I(e,t,r){r===null?e.hasAttribute(t)&&e.removeAttribute(t):A(e,t,r)}var wn=4;function xn(e,t,r){let i=e.rotation===0?t:Ie(t,{x:e.x+e.w/2,y:e.y+e.h/2},-e.rotation),n=i.x>=e.x&&i.x<=e.x+e.w&&i.y>=e.y&&i.y<=e.y+e.h;if(e.kind==="ellipse"){let u=e.stroke!==void 0?e.strokeWidth/2:0,s=e.w/2+u,m=e.h/2+u;if(s<=0||m<=0)return!1;let f=(i.x-(e.x+e.w/2))/s,g=(i.y-(e.y+e.h/2))/m;return f*f+g*g<=1}if(e.kind==="vector"){let u=e.stroke!==void 0&&e.strokeWidth>0;return nt(e.contours,i,{fill:e.fill!=="none",rule:e.rule,reach:(u?e.strokeWidth/2:0)+r})}return n}function xe(e,t){let r=new Map;for(let n of t.items)n.kind==="frame"&&n.w>0&&n.h>0&&r.set(n.id,{id:n.id,x:n.x,y:n.y,w:n.w,h:n.h});let i=e.root.children.flatMap(n=>{let u=n.type==="frame"?r.get(n.id):void 0;return u&&n.type==="frame"?[{...u,skip:n.skip===!0}]:[]});return i.length===0?[{id:null,x:t.x,y:t.y,w:t.width,h:t.height,skip:!1}]:i.every(n=>n.skip)?i.map(n=>({...n,skip:!1})):i}function Mt(e,t){return e.root.children.find(i=>i.type==="frame"&&Je(i,t)!==void 0)?.id}function Ot(e,t){let r=t===void 0?-1:e.findIndex(i=>i.id===t);return r!==-1?r:Math.max(0,e.findIndex(i=>!i.skip))}function ve(e,t,r){for(let i=t+r;i>=0&&i<e.length;i+=r)if(!e[i]?.skip)return i;return t}function Tt(e){return e.filter(t=>!t.skip).length}function He(e,t){return e[t]?.skip!==!1?null:e.slice(0,t+1).filter(r=>!r.skip).length}function _t(e,t){if(!/^\d+$/.test(e))return null;let r=Number(e),i=t.findIndex((n,u)=>He(t,u)===r);return i===-1?null:i}function Lt(e,t,r){let i=Mt(e,r),n=t.findIndex(u=>u.id!==null&&u.id===i);return n===-1?null:n}var vn="cubic-bezier(0.2, 0, 0, 1)",bn="cubic-bezier(0.4, 0, 1, 1)",Pt="cubic-bezier(0.4, 0, 0.2, 1)";function Ct(e,t,r,i,n){let u={opacity:r},s=En(e,t,i,n);if(e==="cut")return{keyframes:t==="enter"?[{visibility:"hidden"},{visibility:"hidden"}]:[{visibility:"visible"},{visibility:"visible"}],easing:"linear"};if(e==="pop"){let m=`${n.x}px ${n.y}px`;u.scale="1",u.transformOrigin=m}else(e==="rise"||e==="drop")&&(u.translate="0 0");return t==="enter"?{keyframes:[s,u],easing:vn}:{keyframes:[u,s],easing:bn}}function En(e,t,r,i){switch(e){case"rise":return{opacity:0,translate:`0 ${t==="enter"?r:-r}px`};case"drop":return{opacity:0,translate:`0 ${t==="enter"?-r:r}px`};case"pop":return{opacity:0,scale:String(.85),transformOrigin:`${i.x}px ${i.y}px`};case"fade":case"cut":return{opacity:0}}}function Dt(e,t){let r=t==="forward"?"-100%":"100%",i=t==="forward"?"100%":"-100%";switch(e){case"cut":return null;case"fade":return{still:[{opacity:1},{opacity:0}],live:null,stillOnTop:!0};case"push":return{still:[{translate:"0 0"},{translate:`${r} 0`}],live:[{translate:`${i} 0`},{translate:"0 0"}],stillOnTop:!1};case"slide":return t==="forward"?{still:null,live:[{translate:"100% 0"},{translate:"0 0"}],stillOnTop:!1}:{still:[{translate:"0 0"},{translate:"100% 0"}],live:null,stillOnTop:!0}}}var Sn={enter:"cut",duration:0,steps:[[]],clicks:new Map,scroll:!1};function je(e){let t=new Map,r=new Map,i=new Map;Xe(e.root,(m,f)=>{f&&(r.set(m.id,f.id),i.set(f.id,[...i.get(f.id)??[],m.id]))});let n=tt(e),u=et(e);for(let[m,f]of Object.entries(e.motion??{})){if(!u.has(m))continue;let g=[[]],l=new Map;for(let p of f.lines){if(p.id===m||n.get(p.id)!==m)continue;let M=p.go===void 0?void 0:Qe(p.go);M&&l.set(p.id,M);let S=p.enter!==void 0?"enter":p.exit!==void 0?"exit":null,O=p.enter??p.exit;S===null||O===void 0||(p.step&&g.push([]),g.at(-1).push({id:p.id,kind:S,effect:O,duration:O==="cut"?0:p.duration??Fe,delay:p.delay??0,together:p.together===!0}))}t.set(m,{enter:f.enter??"cut",duration:f.duration??Fe,steps:g,clicks:l,scroll:f.scroll===!0})}let s=m=>[m,...(i.get(m)??[]).flatMap(f=>s(f))];return{pages:t,parents:r,within:s}}function Ft(e,t){let r=t?.id;return(r?e.pages.get(r):void 0)??Sn}function Ue(e){let t=0,r=0;return e.map((i,n)=>(t=(n===0?0:i.together?t:r)+i.delay,r=t+i.duration,{build:i,at:t}))}function It(e){return Math.max(0,...Ue(e).map(({build:t,at:r})=>r+t.duration))}function me(e,t){let r=new Set,i=new Set;for(let n of e.steps.flat())i.has(n.id)||(i.add(n.id),n.kind==="enter"&&r.add(n.id));for(let n of e.steps.slice(0,t).flat())n.kind==="enter"?r.delete(n.id):r.add(n.id);return r}function Nt(e,t,r){for(let i=r;i!==void 0;i=e.parents.get(i)){let n=t.clicks.get(i);if(n)return{id:i,target:n}}}function zt(e,t,r){let i=[...e];for(;i.length>0;){let n=i.pop(),u=t.findIndex(s=>s.id!==null&&s.id===n);if(u!==-1&&u!==r)return{index:u,history:i}}return null}function Vt(e,t,r){let i=Se(t.width/Math.max(1,e.w));if(e.h*i<=t.height)return{camera:de({x:e.x,y:e.y,width:e.w,height:e.h},t,0),top:0,max:0};let n=e.h-t.height/i,u=Math.min(Math.max(0,r),n),s=(t.width-e.w*i)/2-e.x*i;return{camera:{zoom:i,x:s,y:0-(e.y+u)*i},top:u,max:n}}var Me=.9,Ke=.1;function Rt(e,t){return e.deltaMode===1?e.deltaY*16:e.deltaMode===2?e.deltaY*t.height:e.deltaY}var An=1500,Mn=2e3,On=200,Tn=50;function We(e,t){let r=e.ownerDocument;e.classList.add("vd-player"),e.tabIndex=-1;let i=new Set,n=new Set,u=!1,s=Ae(e,{document:t.document,interactive:!1,surface:"#000",...t.fonts?{fonts:t.fonts}:{},...t.loadFont?{loadFont:t.loadFont}:{},...t.resolveAsset?{resolveAsset:t.resolveAsset}:{},onSceneChange:()=>{u&&K()}}),m=r.createElementNS(J,"path");m.setAttribute("class","vd-player__mask"),m.setAttribute("fill","#000"),m.setAttribute("fill-rule","evenodd"),s.surface.appendChild(m);let f=r.createElement("div");f.className="vd-player__counter",f.setAttribute("aria-live","polite"),e.appendChild(f);let g=je(t.document),l=xe(t.document,s.getScene()),p=Ot(l,t.start),M=[],S=0,O=[],w,N=0,_="",x=0,R=0,X=1,z=new Map,G,C=0,j,Y,Z=r.defaultView,te=()=>typeof s.surface.animate=="function"&&!(Z?.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1),$=()=>Ft(g,l[p]);function Q(){let o=e.getBoundingClientRect(),c=l[p];return{width:o.width||c?.w||1,height:o.height||c?.h||1}}function B(){let o=l[p];if(!o)return;let c=Q(),h=de({x:o.x,y:o.y,width:o.w,height:o.h},c,0);if(R=0,$().scroll){let q=Vt(o,c,x);h=q.camera,x=q.top,R=q.max}X=h.zoom,s.setCamera(h);let T=o.x*h.zoom+h.x,D=o.y*h.zoom+h.y,F=o.w*h.zoom,U=o.h*h.zoom;m.setAttribute("d",`M0 0H${c.width}V${c.height}H0ZM${T} ${D}h${F}v${U}h${-F}Z`),m.dataset.slide=o.id??""}function fe(){let o=He(l,p),c=Tt(l);f.textContent=o===null?"Skipped":`${o} / ${c}`,f.classList.add("vd-player__counter--shown"),j&&clearTimeout(j),j=setTimeout(()=>f.classList.remove("vd-player__counter--shown"),An),t.onChange?.(o,c)}function K(){let o=new Set;for(let c of i)for(let h of g.within(c))o.add(h);n=o;for(let c of s.surface.querySelectorAll("[data-vd-hidden]")){let h=c.getAttribute("data-vd-id");(h===null||!o.has(h))&&c.removeAttribute("data-vd-hidden")}for(let c of o)s.elementOf(c)?.setAttribute("data-vd-hidden","")}function ge(o){return g.within(o).flatMap(c=>{let h=s.elementOf(c);return h?[h]:[]})}function pe(o){let c=1/0,h=1/0,T=-1/0,D=-1/0;for(let F of g.within(o)){let U=s.itemOf(F);U&&(c=Math.min(c,U.x),h=Math.min(h,U.y),T=Math.max(T,U.x+U.w),D=Math.max(D,U.y+U.h))}return Number.isFinite(c)?{x:(c+T)/2,y:(h+D)/2}:{x:0,y:0}}function ne(){if(!(O.length===0&&!w)){N+=1,S===0&&(S=1),i=me($(),S),K();for(let o of O)o.cancel();O=[],w?.remove(),w=void 0}}function W(){return O.length===0&&!w?!1:(ne(),!0)}function re(o,c){return new Promise(h=>{let T=!1,D=()=>{T||(T=!0,h())};Promise.all(o.map(F=>F.finished)).then(D,()=>{T=!0}),setTimeout(()=>{if(!T){for(let F of o)(F.playState==="running"||F.playState==="paused")&&F.finish();D()}},c+Tn)})}function se(o,c,h){if(o===p||!l[o])return;let T=$(),D=l[p]?.id;D&&z.set(D,G===void 0?x:C),v(),p=o;let F=$(),U=l[o]?.id;x=c||!U?0:z.get(U)??0;let q=h==="forward"?F:T,P=te()?Dt(q.enter,h):null;if(P&&(w=s.surface.cloneNode(!0),w.classList.add("vd-player__still"),w.setAttribute("aria-hidden","true"),P.stillOnTop?s.surface.after(w):s.surface.before(w)),B(),S=c?0:F.steps.length,i=me(F,S),K(),fe(),!P||!w){c&&a();return}let be={duration:q.duration,easing:Pt},le=[];P.still&&le.push(w.animate(P.still,{...be,fill:"forwards"})),P.live&&le.push(s.surface.animate(P.live,be)),O.push(...le);let he=N;re(le,q.duration).then(()=>{if(he===N){O=O.filter(ue=>!le.includes(ue));for(let ue of le)ue.cancel();w?.remove(),w=void 0,c&&a()}})}function a(){let o=$(),c=o.steps[S];if(c===void 0)return;S+=1;let h=me(o,S);if(c.length===0)return;if(!te()){i=h,K();return}let T=new Set(c.filter(P=>P.kind==="enter").map(P=>P.id));i=new Set([...me(o,S-1)].filter(P=>!T.has(P))),K();let D=l[p],F=.04*Math.min(D?.w??0,D?.h??0),U=N,q=[];for(let{build:P,at:be}of Ue(c)){let le=pe(P.id),he=[];for(let ue of ge(P.id)){let Ze=Number(ue.getAttribute("opacity")??1),{keyframes:Yt,easing:Zt}=Ct(P.effect,P.kind,Number.isFinite(Ze)?Ze:1,F,le);he.push(ue.animate(Yt,{duration:P.duration,delay:be,easing:Zt,fill:P.kind==="enter"?"backwards":"forwards"}))}q.push(...he),P.kind==="exit"&&he.length>0&&re(he,be+P.duration).then(()=>{if(U===N){i.add(P.id),K();for(let ue of he)ue.cancel()}})}O.push(...q),re(q,It(c)).then(()=>{if(U===N){O=O.filter(P=>!q.includes(P)),i=h,K();for(let P of q)P.cancel()}})}function v(){G!==void 0&&Z?.cancelAnimationFrame(G),G=void 0}function L(o){if(v(),C=Math.min(Math.max(0,o),R),!te()||!Z?.requestAnimationFrame){x=C,B();return}let c=x,h,T=D=>{h??=D;let F=Math.min(1,(D-h)/On);x=c+(C-c)*(1-(1-F)**3),B(),G=F<1?Z.requestAnimationFrame(T):void 0};G=Z.requestAnimationFrame(T)}function E(o,c){if(W())return;let h=G===void 0?x:C;if(!(o>0?x>=R-.5:x<=.5)){L(h+o*Q().height/X);return}c||(o>0?d():y())}function b(o){if(!(!$().scroll||R<=0))switch(o.key){case" ":return o.shiftKey?-Me:Me;case"PageDown":return Me;case"PageUp":return-Me;case"ArrowDown":return Ke;case"ArrowUp":return-Ke;default:return}}function H(o){let c=Math.min(Math.max(0,o),l.length-1);if(c===p)return;let h=l[p]?.id;h&&M.push(h),se(c,!0,"forward")}function d(){if(!W()){if(S<$().steps.length){a();return}H(ve(l,p,1))}}function y(){if(W())return;let o=zt(M,l,p);if(o){M=o.history,se(o.index,!1,"back");return}se(ve(l,p,-1),!1,"back")}function k(o){switch(o.kind){case"url":t.onLink?.(o.url);return;case"back":y();return;case"next":H(ve(l,p,1));return;case"frame":{let c=Lt(s.getDocument(),l,o.id);c===null?d():V(c,o.id)}}}function V(o,c){let h=o===p;h||H(o);let T=l[p];if(!T||!$().scroll)return;let D=T.id===c?void 0:s.itemOf(c),F=D?D.y-T.y:0;h?L(F):(x=F,B())}function ie(o){let c=l[p];if(!c||o.x<c.x||o.y<c.y||o.x>c.x+c.w||o.y>c.y+c.h)return;let h=U=>!n.has(U),T=s.hitTest(o,h),D=T===null?void 0:Nt(g,$(),T);if(D)return D.target;let F=s.linkAt(o,h);return F===void 0?void 0:Te(F)}let oe=o=>{if(o.stopPropagation(),o.metaKey||o.ctrlKey||o.altKey)return;let c=o.key,h=b(o);if(h!==void 0){_="",E(h,o.repeat),o.preventDefault();return}if(/^\d$/.test(c))_+=c;else if(c==="Enter"&&_!==""){let T=_t(_,l);_="",!W()&&T!==null&&H(T)}else if(c==="Escape")_!==""?_="":t.onExit?.();else if(["ArrowRight","ArrowDown","PageDown"," ","Enter"].includes(c))_="",d();else if(["ArrowLeft","ArrowUp","PageUp","Backspace"].includes(c))_="",y();else if(c==="Home")W()||H(ve(l,-1,1));else if(c==="End")W()||H(ve(l,l.length,-1));else return;o.preventDefault()},ee=o=>{if(W())return;let c=ie(s.screenToDocument(s.pointerPoint(o)));c?k(c):d()},ye=o=>{!$().scroll||R<=0||(o.preventDefault(),!(w||o.ctrlKey||o.metaKey)&&(v(),x=Math.min(Math.max(0,x+Rt(o,Q())/X),R),B()))},we=o=>{if(e.classList.remove("vd-player--idle"),Y&&clearTimeout(Y),Y=setTimeout(()=>e.classList.add("vd-player--idle"),Mn),!o)return;let c=s.screenToDocument(s.pointerPoint(o));e.classList.toggle("vd-player--link",ie(c)!==void 0)},ae=Z&&"ResizeObserver"in Z?new Z.ResizeObserver(()=>B()):void 0;return ae?.observe(e),e.addEventListener("keydown",oe),e.addEventListener("click",ee),e.addEventListener("pointermove",we),e.addEventListener("wheel",ye,{passive:!1}),u=!0,B(),i=me($(),0),K(),fe(),we(),e.focus({preventScroll:!0}),a(),{viewer:s,index:()=>p,count:()=>l.length,next:d,back:y,go(o){ne(),H(o)},update(o){if(o===s.getDocument())return;ne();let c=l[p]?.id;s.update(o),g=je(o),l=xe(o,s.getScene());let h=l.findIndex(T=>T.id===c);p=h===-1?Math.min(p,l.length-1):h,h===-1&&(v(),x=0),B(),S=$().steps.length,i=me($(),S),K()},refit:B,destroy(){N+=1,v();for(let o of O)o.cancel();O=[],w?.remove(),ae?.disconnect(),e.removeEventListener("wheel",ye),e.removeEventListener("keydown",oe),e.removeEventListener("click",ee),e.removeEventListener("pointermove",we),j&&clearTimeout(j),Y&&clearTimeout(Y),m.remove(),f.remove(),s.destroy(),e.classList.remove("vd-player","vd-player--idle","vd-player--link"),e.removeAttribute("tabindex")}}}function $t(e){let t=e,r=new Map,i=typeof URL.createObjectURL=="function"&&typeof URL.revokeObjectURL=="function";return{resolve(n){let u=r.get(n.hash);if(u!==void 0)return u;let s=t.get(n.hash);if(s===void 0)return;if(!i)return rt(n.type,s);let m;try{m=it(s)}catch{return}let f=URL.createObjectURL(new Blob([m],{type:n.type}));return r.set(n.hash,f),f},replace(n){t=n;for(let[u,s]of r)n.has(u)||(URL.revokeObjectURL(s),r.delete(u))},destroy(){for(let n of r.values())URL.revokeObjectURL(n);r.clear(),t=new Map}}}var Ge=["page","content","none"],Bt=24;function Oe(e){let t=e.getBoundingClientRect();return{width:t.width,height:t.height}}function Ht(e,t){let r=t===void 0?void 0:e.itemOf(t);if(!(!r||r.w<=0||r.h<=0))return{x:r.x,y:r.y,width:r.w,height:r.h}}function jt(e,t,r,i){if(r==="none")return;let n=r==="page"?Ht(e,i):void 0;if(!n){e.fitToContent(Bt);return}let u=Oe(t);e.setCamera(de(n,{width:u.width||n.width,height:u.height||n.height},Bt))}function Ut(e,t,r){let i=Ht(e,r);if(!i)return;let n=e.getCamera(),u=Oe(t),s=u.width||i.width*n.zoom,m=u.height||i.height*n.zoom;e.setCamera({zoom:n.zoom,x:s/2-(i.x+i.width/2)*n.zoom,y:m/2-(i.y+i.height/2)*n.zoom})}var Ye=Symbol.for("vdesign.embed.handover");function Kt(e){return e[Ye]}var Wt=["exact","browser"],Gt=["ready","problems","page","fonts"];async function _n(e,t){try{let{exactFontsAt:r}=await import("./chunks/fonts.js"),i=r(e);return(await i.ensure(t)).length===0?i:void 0}catch{return}}async function Pr(e,t,r={}){let i=r.fit??"page";if(!Ge.includes(i))throw new TypeError(`view: fit must be one of ${Ge.join(", ")}; got ${String(i)}.`);let n=r.fonts??"exact";if(!Wt.includes(n))throw new TypeError(`view: fonts must be one of ${Wt.join(", ")}; got ${String(n)}.`);let u=n==="exact"?pt(r.fontBase,qe,e.ownerDocument.baseURI):void 0,s=Kt(r),m=await ze(t),f=s?.page!==void 0&&ce(m.document).some(d=>d.id===s.page)?s.page:r.page===void 0?ce(m.document)[0]?.id:Ee(m.document,r.page).id,g=s?.exact&&u?await _n(u,m.document):void 0,l=e.ownerDocument,p=l.defaultView,M=$t(m.blocks),S=m.blocks,O=[...m.problems],w,N=()=>w?[...O,w]:[...O],_=l.createElement("div");_.className="vd-embed",_.style.width="100%",_.style.height="100%",e.appendChild(_);let x=Ae(_,{document:m.document,interactive:r.interactive??!0,wheel:"modifier",resolveAsset:d=>M.resolve(d),...r.surface?{surface:r.surface}:{},...s?{camera:s.camera}:{},...g?{fonts:g.library}:{}}),R={ready:new Set,problems:new Set,page:new Set,fonts:new Set},X=!1,z=!1,G=0,C,j,Y=g,Z=n==="browser"?"browser":void 0,te;function $(){X=!0;for(let d of R.ready)d()}function Q(){for(let d of R.problems)d(N())}function B(d){Z=d;for(let y of R.fonts)y(d)}function fe(){return te??=(async()=>{if(u)try{let{exactFontsAt:d}=await import("./chunks/fonts.js");return d(u)}catch{return}})(),te}function K(d){Y=void 0,x.setFonts(void 0),C?.fonts(void 0),w=d,Q(),B("browser")}async function ge(){let d=await fe();if(!z){if(!d){K(Le([],u?"the fonts chunk would not load":"no fontBase was given and this build has no default"));return}for(;;){let y=x.getDocument(),k=await d.ensure(y);if(z)return;if(k.length>0){K(Le(k));return}if(x.getDocument()===y)break}Y=d,x.setFonts(d.library),C?.fonts(d),B("exact")}}function pe(){let d=ne(f);if(d)for(let y of R.page)y(d)}function ne(d){let y=ce(x.getDocument()).find(k=>k.id===d);if(y)return y.name===void 0?{id:y.id}:{id:y.id,name:y.name}}let W=()=>jt(x,_,i,f),re=()=>Ut(x,_,f);function se(d){if(z)return;let y=Ee(x.getDocument(),d).id,k=y!==f;f=y,i==="page"?W():re(),k&&pe()}function a(d){r.onLink?r.onLink(d):p?.open(d,"_blank","noopener,noreferrer")}let v=d=>{if(d.button!==0||C)return;let y=x.linkAt(x.screenToDocument(x.pointerPoint(d)));if(y===void 0)return;let k=Te(y);if(k){if(d.preventDefault(),k.kind==="frame"){ce(x.getDocument()).some(V=>V.id===k.id)&&se(k.id);return}a(k.url)}};_.addEventListener("click",v);let L=Oe(_),E=p&&"ResizeObserver"in p?new p.ResizeObserver(()=>{let d=Oe(_);d.width===L.width&&d.height===L.height||(L=d,W())}):void 0;E?.observe(_),s||(i==="none"&&f!==void 0&&r.page!==void 0?re():W()),$(),g?B("exact"):n==="exact"&&ge();let b={async load(d){if(z)throw new Error("view: this view was destroyed.");let y=++G,k=await ze(d),V=Y,ie=V?await V.ensure(k.document):[];if(j&&await j||z||y!==G)return;ie.length>0&&Y===V&&K(Le(ie)),M.replace(k.blocks),S=k.blocks,x.update(k.document),O=[...k.problems],C?.update(k.document),ce(k.document).some(ee=>ee.id===f)||(f=ce(k.document)[0]?.id,i==="page"?W():re(),pe()),Q(),$()},pages:()=>ce(x.getDocument()).map(d=>d.name===void 0?{id:d.id}:{id:d.id,name:d.name}),goTo:se,fit:()=>{z||W()},play(d={}){if(z)return Promise.reject(new Error("view: this view was destroyed."));try{return C?.stop(),Promise.resolve(H(x.getDocument(),d.page))}catch(y){return Promise.reject(y instanceof Error?y:new Error(String(y)))}},async edit(d={}){if(z)throw new Error("view: this view was destroyed.");if(j)throw new Error("view: edit() is already opening an editor.");let y;j=new Promise(V=>y=V);let k=!1;try{let{edit:V}=await import("./edit.js");if(z)throw new Error("view: this view was destroyed.");let ie={camera:x.getCamera(),page:f,exact:Y!==void 0},oe=ut(x.getDocument(),S,O),ee=await V(e,oe,{...r,...d,[Ye]:ie});if(z)throw ee.destroy(),new Error("view: this view was destroyed.");return k=!0,b.destroy(),ee}finally{j=void 0,y(k)}},on(d,y){if(!Gt.includes(d))throw new TypeError(`view: on() takes one of ${Gt.join(", ")}; got ${String(d)}.`);let k=R[d];if(k.add(y),d==="ready"&&X&&queueMicrotask(()=>{k.has(y)&&y()}),d==="problems"&&queueMicrotask(()=>{k.has(y)&&y(N())}),d==="fonts"&&Z!==void 0){let V=Z;queueMicrotask(()=>{k.has(y)&&y(V)})}return()=>{k.delete(y)}},destroy(){if(!z){z=!0,C?.stop(),_.removeEventListener("click",v),E?.disconnect(),x.destroy(),M.destroy(),_.remove();for(let d of Object.values(R))d.clear()}}};function H(d,y){let k=y===void 0?f:Ee(d,y).id,V=l.createElement("div");V.className="vd-embed__play",V.style.position="absolute",V.style.inset="0";let ie=o=>o.stopPropagation();V.addEventListener("wheel",ie);let oe=l.activeElement;_.appendChild(V);let ee=!1,ye=()=>{if(ee)return;ee=!0,C===we&&(C=void 0),ae.destroy(),V.removeEventListener("wheel",ie);let o=V.contains(l.activeElement);V.remove(),o&&oe&&"focus"in oe&&typeof oe.focus=="function"&&oe.focus({preventScroll:!0})},we={stop:ye,update:o=>ae.update(o),fonts:o=>ae.viewer.setFonts(o?.library)},ae=We(V,{document:d,resolveAsset:o=>M.resolve(o),...Y?{fonts:Y.library}:{},...k===void 0?{}:{start:k},onExit:ye,onLink:a});return C=we,{goTo(o){if(ee)return;let c=ae.viewer.getDocument(),h=Ee(c,o).id,T=xe(c,ae.viewer.getScene()).findIndex(D=>D.id===h);T!==-1&&ae.go(T)},destroy:ye}}return b}export{qt as version,Pr as view};
|
|
101
|
+
`;function $t(e){if(e.getElementById(Nt))return;let t=e.createElement("style");t.id=Nt,t.textContent=zt,e.head.appendChild(t)}function Vt(e,t,o,r){return t?Sn(e,t,o,r):En(e,o,r)}function En(e,t,o){let r=qe(e,o);return{measurer:r,update:n=>{r.load(n,t)},afterPaint:()=>{},destroy:()=>r.destroy()}}var Rt=new WeakMap;function Sn(e,t,o,r){let n,p,a,y=()=>{if(!n)throw new Error("canvasFonts: update() before measuring");return n};return{measurer:{advance:(g,l)=>y().measurer.advance(g,l),metrics:g=>y().measurer.metrics(g),itemize:g=>y().measurer.itemize(g)},update(g){n&&g.fonts===p||(a?.(),n?.dispose(),n=t.forDocument(g,o?{loader:o}:{}),p=g.fonts,a=n.onChange(r))},afterPaint(){let g=e.fonts;if(!n||!g||typeof FontFace!="function")return;let l=Rt.get(e);l||Rt.set(e,l=new Set);for(let w of n.usedFaces()){if(l.has(w.id))continue;l.add(w.id);let b=new FontFace(w.id,kn(w.bytes),{weight:String(w.weight),style:w.style});g.add(b),b.load().catch(()=>g.delete(b))}},destroy(){a?.(),n?.dispose(),n=void 0}}}function kn(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}var An=.01,Mn=.004,Bt=40,Tn=16;function Oe(e,t){$t(e.ownerDocument);let o=t.document,r=i=>Vt(e.ownerDocument,i,t.loadFont,()=>{j(o)}),n=r(t.fonts),p={advance:(i,f)=>n.measurer.advance(i,f),metrics:i=>n.measurer.metrics(i),itemize:i=>n.measurer.itemize?.(i)??[i]};n.update(o);let a=Fe(o),y=()=>t.resolveAsset?{measure:p,resolveAsset:t.resolveAsset}:{measure:p},u=Ke(o,a,y()),g=t.camera??ze,l=t.interactive??!0,w=t.wheel??"always";e.classList.add("vd-viewer"),t.surface&&(e.style.background=t.surface);let b=e.ownerDocument.createElementNS(ne,"svg");b.setAttribute("class","vd-viewer__surface"),b.setAttribute("width","100%"),b.setAttribute("height","100%");let A=e.ownerDocument.createElementNS(ne,"g");A.setAttribute("class","vd-viewer__camera"),A.style.isolation="isolate",b.appendChild(A);let L=e.ownerDocument.createElementNS(ne,"defs");A.appendChild(L);let x=e.ownerDocument.createElementNS(ne,"rect");x.setAttribute("class","vd-viewer__page"),A.appendChild(x),e.appendChild(b);let V=new Map,_=null;function M(){let i=t.sample;return _&&i?i(u,_.timeline,_.t,{doc:o,resolution:a,options:y()}):u}function H(){A.setAttribute("transform",Xe(g))}function Q(i=!0){let f=M();ee(f);let O=u.background!==void 0;T(x,"x",String(u.x)),T(x,"y",String(u.y)),T(x,"width",String(O?u.width:0)),T(x,"height",String(O?u.height:0)),F(x,"fill",u.background??null);let E=new Set,I=x;for(let k of f.items){let N=k.part===void 0?k.id:`${k.id}\0${k.part}`;E.add(N);let C=V.get(N);(!C||C.tagName!==Ht(k))&&(C?.remove(),C=e.ownerDocument.createElementNS(ne,Ht(k)),C.setAttribute("data-vd-id",k.id),V.set(N,C)),Ln(C,k),I.nextSibling!==C&&A.insertBefore(C,I.nextSibling),I=C}for(let[k,N]of V)E.has(k)||(N.remove(),V.delete(k));n.afterPaint(),i&&t.onSceneChange?.(u,o)}let R=new Map;function ee(i){let f=[...i.gradients.map(Tt),...[...new Map(i.items.filter(k=>k.shadows.length>0).map(k=>[k.id,k])).values()].map(k=>_t(k)),...i.clips.map(Mt)],O=new Set(f);for(let[k,N]of R)O.has(k)||(N.remove(),R.delete(k));let E=f.filter(k=>!R.has(k));if(E.length===0)return;[...new DOMParser().parseFromString(`<svg xmlns="${ne}">${E.join("")}</svg>`,"image/svg+xml").documentElement.children].forEach((k,N)=>{let C=e.ownerDocument.importNode(k,!0);L.appendChild(C),R.set(E[N],C)})}function j(i){o=i,n.update(o),a=Fe(o),u=Ke(o,a,y()),Q()}function G(i){let f=e.getBoundingClientRect();return{x:i.clientX-f.left,y:i.clientY-f.top}}let B=0,D=0;function ae(){e.classList.add("vd-viewer--interacting"),D&&clearTimeout(D),D=setTimeout(()=>{D=0,e.classList.remove("vd-viewer--interacting")},180)}function U(){B&&(cancelAnimationFrame(B),B=0),H(),t.onCameraChange?.(g)}function h(i){g=i,U()}function X(i){g=i,ae(),!B&&(B=requestAnimationFrame(()=>{B=0,H(),t.onCameraChange?.(g)}))}let se=null,Y=null,fe=!1,ue=l&&w==="always",re=new Map,K=null,ie=()=>{let[i,f]=[...re.values()];return!i||!f?null:{mid:{x:(i.x+f.x)/2,y:(i.y+f.y)/2},distance:Math.hypot(i.x-f.x,i.y-f.y)}},pe=i=>{let f=re.get(i.pointerId);if(!f)return;let O=G(i);if(re.set(i.pointerId,O),re.size===1){X(ye(g,O.x-f.x,O.y-f.y));return}let E=ie();if(K&&E){let I=ye(g,E.mid.x-K.mid.x,E.mid.y-K.mid.y);X(K.distance>0?Te(I,E.mid,E.distance/K.distance):I)}K=E},J=i=>{re.delete(i.pointerId)&&(e.hasPointerCapture(i.pointerId)&&e.releasePointerCapture(i.pointerId),K=ie())},he=i=>{if(w==="modifier"&&!i.ctrlKey&&!i.metaKey)return;i.preventDefault();let f=G(i),O=i.deltaMode===1?Tn:i.deltaMode===2?e.clientHeight||800:1,E=i.deltaX*O,I=i.deltaY*O;if(i.ctrlKey||i.metaKey){let k=i.ctrlKey?An:Mn,N=Math.max(-Bt,Math.min(Bt,I));X(Te(g,f,Math.exp(-N*k)));return}if(i.shiftKey&&E===0){X(ye(g,-I,0));return}X(ye(g,-E,-I))},q=i=>{if(i.pointerType==="touch"){if(!ue)return;i.preventDefault(),re.set(i.pointerId,G(i)),e.setPointerCapture(i.pointerId),K=ie();return}(i.button===1||i.button===0&&fe)&&(i.preventDefault(),se=i.pointerId,Y=G(i),e.setPointerCapture(i.pointerId))},ge=i=>{if(i.pointerType==="touch"){pe(i);return}if(se!==i.pointerId||!Y)return;let f=G(i);X(ye(g,f.x-Y.x,f.y-Y.y)),Y=f},ce=i=>{if(i.pointerType==="touch"){J(i);return}se===i.pointerId&&(se=null,Y=null,e.hasPointerCapture(i.pointerId)&&e.releasePointerCapture(i.pointerId))},me=i=>{i.code==="Space"&&(fe=!0)},d=i=>{i.code==="Space"&&(fe=!1)};ue&&(e.style.touchAction="none"),l&&(e.addEventListener("wheel",he,{passive:!1}),e.addEventListener("pointerdown",q),e.addEventListener("pointermove",ge),e.addEventListener("pointerup",ce),e.addEventListener("pointercancel",ce),e.ownerDocument.addEventListener("keydown",me),e.ownerDocument.addEventListener("keyup",d)),H(),Q();let v={element:e,surface:b,update:j,getDocument:()=>o,getScene:()=>u,setTime(i){i===null&&_===null||(_=i,Q(!1))},getTime:()=>_,getResolution:()=>a,getMeasurer:()=>p,setFonts(i){n.destroy(),n=r(i),j(o)},getCamera:()=>g,setCamera:h,zoomBy(i,f){let O=e.getBoundingClientRect(),E=f??{x:O.width/2,y:O.height/2};h(Te(g,E,i))},fitToContent(i=32){let f=e.getBoundingClientRect();h(le({x:u.x,y:u.y,width:u.width,height:u.height},{width:f.width||u.width,height:f.height||u.height},i))},screenToDocument:i=>$e(g,i),documentToScreen:i=>Ze(g,i),pointerPoint:G,hitTest(i,f){for(let O=u.items.length-1;O>=0;O--){let E=u.items[O];if(E&&Vn(E,i,Rn/g.zoom)&&(!f||f(E.id)))return E.id}return null},linkAt(i,f){for(let O=u.items.length-1;O>=0;O--){let E=u.items[O];if(E?.kind!=="text"||f&&!f(E.id))continue;let I=E.rotation===0?i:Ge(i,{x:E.x+E.w/2,y:E.y+E.h/2},-E.rotation);for(let k of E.lines){if(I.y<k.y||I.y>k.y+k.h)continue;let N=k.spans.find(C=>I.x>=C.x&&I.x<=C.x+C.w);if(N)return N.style.link}}},itemOf:i=>u.items.find(f=>f.id===i),elementOf:i=>V.get(i),destroy(){l&&(e.removeEventListener("wheel",he),e.removeEventListener("pointerdown",q),e.removeEventListener("pointermove",ge),e.removeEventListener("pointerup",ce),e.removeEventListener("pointercancel",ce),e.ownerDocument.removeEventListener("keydown",me),e.ownerDocument.removeEventListener("keyup",d)),B&&cancelAnimationFrame(B),D&&clearTimeout(D),B=0,D=0,n.destroy(),e.classList.remove("vd-viewer--interacting"),b.remove(),V.clear(),e.classList.remove("vd-viewer")}};return t.autoFit&&v.fitToContent(),v}var On="vd-clip-";function _n(e){return On+e}function Ut(e){return`url(#${_n(e)})`}function Ht(e){return Lt(e)||e.pose!==void 0?"g":Je(e)}function Je(e){switch(e.kind){case"ellipse":return"ellipse";case"frame":return"rect";case"image":return e.href===void 0?"rect":"image";case"rect":return"rect";case"text":return"text";case"vector":return"path"}}function Ln(e,t){if(e.tagName!=="g"){jt(e,t);return}F(e,"clip-path",t.clip===void 0?null:Ut(t.clip)),e.style.mixBlendMode=t.blend==="normal"?"":t.blend;let o=t.pose;F(e,"opacity",o&&o.opacity<1?String(o.opacity):null);let r=e.firstElementChild;if((!r||r.tagName!==Je(t))&&(r?.remove(),r=e.ownerDocument.createElementNS(ne,Je(t)),e.appendChild(r)),jt(r,{...t,clip:void 0,blend:"normal"}),o){let n=t.rotation===0?"":` ${We(t)}`;T(r,"transform",`${Pt(o)}${n}`),t.kind==="vector"&&Pn(r,t)}}function Pn(e,t){let o=t.pose?.trace;if(o!==void 0&&t.stroke!==void 0){let n=yt(t.contours)+1;T(e,"stroke-dasharray",`${n} ${n}`),T(e,"stroke-dashoffset",String(n*(1-o)))}let r=t.pose?.fillOpacity;F(e,"fill-opacity",r!==void 0&&r<1?String(r):null)}function jt(e,t){switch(F(e,"clip-path",t.clip===void 0?null:Ut(t.clip)),F(e,"transform",t.rotation===0?null:We(t)),e.style.mixBlendMode=t.blend==="normal"?"":t.blend,e.style.filter=t.shadows.length>0?`url(#${Ot}${t.id})`:"",t.kind){case"ellipse":zn(e,t);return;case"frame":Cn(e,t);return;case"image":In(e,t);return;case"rect":Nn(e,t);return;case"text":Fn(e,t);return;case"vector":$n(e,t);return}}function Cn(e,t){T(e,"class","vd-viewer__page"),T(e,"x",String(t.x)),T(e,"y",String(t.y)),T(e,"width",String(t.w)),T(e,"height",String(t.h)),F(e,"fill",t.background??null)}function In(e,t){if(T(e,"x",String(t.x)),T(e,"y",String(t.y)),T(e,"width",String(t.w)),T(e,"height",String(t.h)),F(e,"opacity",t.opacity<1?String(t.opacity):null),t.href===void 0){T(e,"class","vd-viewer__missing"),F(e,"rx",t.radius>0?String(t.radius):null);return}T(e,"href",t.href),T(e,"preserveAspectRatio",Dn[t.fit])}var Dn={cover:"xMidYMid slice",contain:"xMidYMid meet",fill:"none"};function Fn(e,t){F(e,"opacity",t.opacity<1?String(t.opacity):null),T(e,"xml:space","preserve");let o=t.lines.flatMap(n=>n.spans).filter(n=>n.text!==""),r=e.ownerDocument;for(;e.childNodes.length>o.length;)e.lastChild?.remove();for(;e.childNodes.length<o.length;)e.appendChild(r.createElementNS(ne,"tspan"));o.forEach((n,p)=>{let a=e.childNodes[p];a.textContent!==n.text&&(a.textContent=n.text),T(a,"x",String(n.x)),T(a,"y",String(n.y)),T(a,"font-family",n.style.family),T(a,"font-size",String(n.style.size)),T(a,"fill",n.style.fill),F(a,"font-weight",n.style.weight===400?null:String(n.style.weight)),F(a,"font-style",n.style.italic?"italic":null),F(a,"letter-spacing",n.style.letterSpacing===0?null:String(n.style.letterSpacing)),F(a,"data-vd-link",n.style.link??null);let y=[n.style.underline?"underline":"",n.style.strike?"line-through":""].filter(Boolean).join(" ");F(a,"text-decoration",y===""?null:y)})}function Nn(e,t){F(e,"class",null),T(e,"x",String(t.x)),T(e,"y",String(t.y)),T(e,"width",String(t.w)),T(e,"height",String(t.h)),T(e,"fill",t.fill),F(e,"rx",t.radius>0?String(t.radius):null),F(e,"stroke",t.stroke??null),F(e,"stroke-width",t.stroke&&t.strokeWidth>0?String(t.strokeWidth):null),F(e,"opacity",t.opacity<1?String(t.opacity):null)}function Gt(e,t){T(e,"fill",t.fill),F(e,"stroke",t.stroke??null),F(e,"stroke-width",t.stroke&&t.strokeWidth>0?String(t.strokeWidth):null),F(e,"opacity",t.opacity<1?String(t.opacity):null)}function zn(e,t){T(e,"cx",String(t.x+t.w/2)),T(e,"cy",String(t.y+t.h/2)),T(e,"rx",String(t.w/2)),T(e,"ry",String(t.h/2)),Gt(e,t)}function $n(e,t){T(e,"d",t.d),Gt(e,t),F(e,"fill-rule",t.rule==="nonzero"?null:t.rule),F(e,"stroke-linecap",t.cap==="butt"?null:t.cap),F(e,"stroke-linejoin",t.join==="miter"?null:t.join)}function T(e,t,o){e.getAttribute(t)!==o&&e.setAttribute(t,o)}function F(e,t,o){o===null?e.hasAttribute(t)&&e.removeAttribute(t):T(e,t,o)}var Rn=4;function Vn(e,t,o){let r=e.rotation===0?t:Ge(t,{x:e.x+e.w/2,y:e.y+e.h/2},-e.rotation),n=r.x>=e.x&&r.x<=e.x+e.w&&r.y>=e.y&&r.y<=e.y+e.h;if(e.kind==="ellipse"){let p=e.stroke!==void 0?e.strokeWidth/2:0,a=e.w/2+p,y=e.h/2+p;if(a<=0||y<=0)return!1;let u=(r.x-(e.x+e.w/2))/a,g=(r.y-(e.y+e.h/2))/y;return u*u+g*g<=1}if(e.kind==="vector"){let p=e.stroke!==void 0&&e.strokeWidth>0;return wt(e.contours,r,{fill:e.fill!=="none",rule:e.rule,reach:(p?e.strokeWidth/2:0)+o})}return n}function be(e,t){let o=new Map;for(let n of t.items)n.kind==="frame"&&n.w>0&&n.h>0&&o.set(n.id,{id:n.id,x:n.x,y:n.y,w:n.w,h:n.h});let r=e.root.children.flatMap(n=>{let p=n.type==="frame"?o.get(n.id):void 0;return p&&n.type==="frame"?[{...p,skip:n.skip===!0}]:[]});return r.length===0?[{id:null,x:t.x,y:t.y,w:t.width,h:t.height,skip:!1}]:r.every(n=>n.skip)?r.map(n=>({...n,skip:!1})):r}function Kt(e,t){return e.root.children.find(r=>r.type==="frame"&&ut(r,t)!==void 0)?.id}function Wt(e,t){let o=t===void 0?-1:e.findIndex(r=>r.id===t);return o!==-1?o:Math.max(0,e.findIndex(r=>!r.skip))}function Ee(e,t,o){for(let r=t+o;r>=0&&r<e.length;r+=o)if(!e[r]?.skip)return r;return t}function Yt(e){return e.filter(t=>!t.skip).length}function Qe(e,t){return e[t]?.skip!==!1?null:e.slice(0,t+1).filter(o=>!o.skip).length}function qt(e,t){if(!/^\d+$/.test(e))return null;let o=Number(e),r=t.findIndex((n,p)=>Qe(t,p)===o);return r===-1?null:r}function Zt(e,t,o){let r=Kt(e,o),n=t.findIndex(p=>p.id!==null&&p.id===r);return n===-1?null:n}var Bn=et(Et),Hn=et(St),Xt=et(kt);function et(e){return`cubic-bezier(${e.join(", ")})`}function Jt(e,t,o,r,n){let p={opacity:o},a=jn(e,t,r,n);if(e==="cut")return{keyframes:t==="enter"?[{visibility:"hidden"},{visibility:"hidden"}]:[{visibility:"visible"},{visibility:"visible"}],easing:"linear"};if(e==="pop"){let y=`${n.x}px ${n.y}px`;p.scale="1",p.transformOrigin=y}else(e==="rise"||e==="drop")&&(p.translate="0 0");return t==="enter"?{keyframes:[a,p],easing:Bn}:{keyframes:[p,a],easing:Hn}}function jn(e,t,o,r){switch(e){case"rise":return{opacity:0,translate:`0 ${t==="enter"?o:-o}px`};case"drop":return{opacity:0,translate:`0 ${t==="enter"?-o:o}px`};case"pop":return{opacity:0,scale:String(bt),transformOrigin:`${r.x}px ${r.y}px`};case"fade":case"cut":case"wipe":case"grow":case"count":case"draw":return{opacity:0}}}function Qt(e,t){let o=t==="forward"?"-100%":"100%",r=t==="forward"?"100%":"-100%";switch(e){case"cut":return null;case"fade":return{still:[{opacity:1},{opacity:0}],live:null,stillOnTop:!0};case"push":return{still:[{translate:"0 0"},{translate:`${o} 0`}],live:[{translate:`${r} 0`},{translate:"0 0"}],stillOnTop:!1};case"slide":return t==="forward"?{still:null,live:[{translate:"100% 0"},{translate:"0 0"}],stillOnTop:!1}:{still:[{translate:"0 0"},{translate:"100% 0"}],live:null,stillOnTop:!0}}}var Un={enter:"cut",duration:0,steps:[[]],clicks:new Map,scroll:!1};function tt(e){let t=new Map,o=new Map,r=new Map;ft(e.root,(y,u)=>{u&&(o.set(y.id,u.id),r.set(u.id,[...r.get(u.id)??[],y.id]))});let n=gt(e),p=mt(e);for(let[y,u]of Object.entries(e.motion??{})){if(!p.has(y))continue;let g=[[]],l=new Map,w=pt(u);for(let b of u.lines){if(b.id===y||n.get(b.id)!==y)continue;let A=b.go===void 0?void 0:ht(b.go);A&&l.set(b.id,A);let L=b.enter!==void 0?"enter":b.exit!==void 0?"exit":null,x=b.enter??b.exit;L===null||x===void 0||(b.step&&g.push([]),g.at(-1).push({id:b.id,kind:L,effect:x,duration:x==="cut"?0:Be(b.duration,w,He),delay:Be(b.delay,w,0),together:b.together===!0}))}t.set(y,{enter:u.enter??"cut",duration:u.duration??He,steps:g,clicks:l,scroll:u.scroll===!0})}let a=y=>[y,...(r.get(y)??[]).flatMap(u=>a(u))];return{pages:t,parents:o,within:a}}function en(e,t){let o=t?.id;return(o?e.pages.get(o):void 0)??Un}function nt(e){let t=0,o=0;return e.map((r,n)=>(t=(n===0?0:r.together?t:o)+r.delay,o=t+r.duration,{build:r,at:t}))}function tn(e){return Math.max(0,...nt(e).map(({build:t,at:o})=>o+t.duration))}function we(e,t){let o=new Set,r=new Set;for(let n of e.steps.flat())r.has(n.id)||(r.add(n.id),n.kind==="enter"&&o.add(n.id));for(let n of e.steps.slice(0,t).flat())n.kind==="enter"?o.delete(n.id):o.add(n.id);return o}function nn(e,t,o){for(let r=o;r!==void 0;r=e.parents.get(r)){let n=t.clicks.get(r);if(n)return{id:r,target:n}}}function rn(e,t,o){let r=[...e];for(;r.length>0;){let n=r.pop(),p=t.findIndex(a=>a.id!==null&&a.id===n);if(p!==-1&&p!==o)return{index:p,history:r}}return null}function on(e,t,o){let r=Me(t.width/Math.max(1,e.w));if(e.h*r<=t.height)return{camera:le({x:e.x,y:e.y,width:e.w,height:e.h},t,0),top:0,max:0};let n=e.h-t.height/r,p=Math.min(Math.max(0,o),n),a=(t.width-e.w*r)/2-e.x*r;return{camera:{zoom:r,x:a,y:0-(e.y+p)*r},top:p,max:n}}var _e=.9,rt=.1;function sn(e,t){return e.deltaMode===1?e.deltaY*16:e.deltaMode===2?e.deltaY*t.height:e.deltaY}var Gn=1500,Kn=2e3,Wn=200,Yn=50;function it(e,t){let o=e.ownerDocument;e.classList.add("vd-player"),e.tabIndex=-1;let r=new Set,n=new Set,p=!1,a=Oe(e,{document:t.document,...t.timeline?{sample:t.timeline.sample}:{},interactive:!1,surface:"#000",...t.fonts?{fonts:t.fonts}:{},...t.loadFont?{loadFont:t.loadFont}:{},...t.resolveAsset?{resolveAsset:t.resolveAsset}:{},onSceneChange:()=>{p&&q()}}),y=o.createElementNS(ne,"path");y.setAttribute("class","vd-player__mask"),y.setAttribute("fill","#000"),y.setAttribute("fill-rule","evenodd"),a.surface.appendChild(y);let u=o.createElement("div");u.className="vd-player__counter",u.setAttribute("aria-live","polite"),e.appendChild(u);let g=tt(t.document),l=be(t.document,a.getScene()),w=Wt(l,t.start),b=[],A=0,L=[],x,V=0,_="",M=0,H=0,Q=1,R=new Map,ee,j=0,G,B,D=o.defaultView,ae=()=>typeof a.surface.animate=="function"&&!(D?.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1),U=()=>en(g,l[w]),h;function X(){let s=l[w]?.id;if(!t.timeline||!s)return;let c=a.getDocument();return je(c.motion?.[s])?t.timeline.of(c,s):void 0}function se(s,c){return Math.min(s.length,...s.steps.filter(m=>m>c))}function Y(){h&&(a.setTime({timeline:h.timeline,t:h.t}),h.timeline.camera&&J())}function fe(s){if(!h||(h.frame=0,!h.playing))return;let c=h.last===0?0:s-h.last;h.last=s;let m=se(h.timeline,h.t);h.t=Math.min(m,t.sound?.position()??h.t+c),h.t>=m&&(h.playing=!1,t.sound?.stop()),Y(),h.playing&&(h.frame=D?.requestAnimationFrame(fe)??0)}function ue(){if(h){if(!ae()||!D?.requestAnimationFrame){h.t=se(h.timeline,h.t),Y();return}h.playing=!0,h.last=0,t.sound?.play(h.timeline,h.t),h.frame=D.requestAnimationFrame(fe)}}function re(){h?.frame&&D?.cancelAnimationFrame(h.frame),h=void 0,t.sound?.stop(),a.setTime(null)}function K(s,c){h={timeline:s,t:c?0:s.length,playing:!1,last:0,frame:0},t.sound?.prepare(a.getDocument(),s),Y(),c&&ue()}function ie(){let s=X();s?(A=U().steps.length,K(s,!0)):f()}function pe(){let s=e.getBoundingClientRect(),c=l[w];return{width:s.width||c?.w||1,height:s.height||c?.h||1}}function J(){let s=l[w];if(!s)return;let c=pe(),m=h?.timeline.camera&&t.timeline?t.timeline.camera(h.timeline,h.t,a.getScene(),{doc:a.getDocument(),resolution:a.getResolution()}):{x:s.x,y:s.y,w:s.w,h:s.h},S=le({x:m.x,y:m.y,width:m.w,height:m.h},c,0);if(H=0,U().scroll){let P=on(s,c,M);S=P.camera,M=P.top,H=P.max}Q=S.zoom,a.setCamera(S);let z=m.x*S.zoom+S.x,$=m.y*S.zoom+S.y,W=m.w*S.zoom,oe=m.h*S.zoom;y.setAttribute("d",`M0 0H${c.width}V${c.height}H0ZM${z} ${$}h${W}v${oe}h${-W}Z`),y.dataset.slide=s.id??""}function he(){let s=Qe(l,w),c=Yt(l);u.textContent=s===null?"Skipped":`${s} / ${c}`,u.classList.add("vd-player__counter--shown"),G&&clearTimeout(G),G=setTimeout(()=>u.classList.remove("vd-player__counter--shown"),Gn),t.onChange?.(s,c)}function q(){let s=new Set;for(let c of r)for(let m of g.within(c))s.add(m);n=s;for(let c of a.surface.querySelectorAll("[data-vd-hidden]")){let m=c.getAttribute("data-vd-id");(m===null||!s.has(m))&&c.removeAttribute("data-vd-hidden")}for(let c of s)a.elementOf(c)?.setAttribute("data-vd-hidden","")}function ge(s){return g.within(s).flatMap(c=>{let m=a.elementOf(c);return m?[m]:[]})}function ce(s){let c=1/0,m=1/0,S=-1/0,z=-1/0;for(let $ of g.within(s)){let W=a.itemOf($);W&&(c=Math.min(c,W.x),m=Math.min(m,W.y),S=Math.max(S,W.x+W.w),z=Math.max(z,W.y+W.h))}return Number.isFinite(c)?{x:(c+S)/2,y:(m+z)/2}:{x:0,y:0}}function me(){if(!(L.length===0&&!x)){V+=1,A===0&&(A=1),r=we(U(),A),q();for(let s of L)s.cancel();L=[],x?.remove(),x=void 0}}function d(){return L.length===0&&!x?!1:(me(),!0)}function v(s,c){return new Promise(m=>{let S=!1,z=()=>{S||(S=!0,m())};Promise.all(s.map($=>$.finished)).then(z,()=>{S=!0}),setTimeout(()=>{if(!S){for(let $ of s)($.playState==="running"||$.playState==="paused")&&$.finish();z()}},c+Yn)})}function i(s,c,m){if(s===w||!l[s])return;let S=U(),z=l[w]?.id;z&&R.set(z,ee===void 0?M:j),O(),w=s;let $=U(),W=l[s]?.id;M=c||!W?0:R.get(W)??0;let oe=m==="forward"?$:S,P=ae()?Qt(oe.enter,m):null;P&&(x=a.surface.cloneNode(!0),x.classList.add("vd-player__still"),x.setAttribute("aria-hidden","true"),P.stillOnTop?a.surface.after(x):a.surface.before(x)),re();let ke=X();if(J(),ke?(A=$.steps.length,r=new Set,K(ke,!1),c&&h&&(h.t=0),Y()):(A=c?0:$.steps.length,r=we($,A)),q(),he(),!P||!x){c&&ie();return}let Ie={duration:oe.duration,easing:Xt},te=[];P.still&&te.push(x.animate(P.still,{...Ie,fill:"forwards"})),P.live&&te.push(a.surface.animate(P.live,Ie)),L.push(...te);let xe=V;v(te,oe.duration).then(()=>{if(xe===V){L=L.filter(ve=>!te.includes(ve));for(let ve of te)ve.cancel();x?.remove(),x=void 0,c&&ie()}})}function f(){let s=U(),c=s.steps[A];if(c===void 0)return;A+=1;let m=we(s,A);if(c.length===0)return;if(!ae()){r=m,q();return}let S=new Set(c.filter(P=>P.kind==="enter").map(P=>P.id));r=new Set([...we(s,A-1)].filter(P=>!S.has(P))),q();let z=l[w],$=Ue*Math.min(z?.w??0,z?.h??0),W=V,oe=[];for(let{build:P,at:ke}of nt(c)){let Ie=ce(P.id),te=[];for(let xe of ge(P.id)){let ve=Number(xe.getAttribute("opacity")??1),{keyframes:mn,easing:gn}=Jt(P.effect,P.kind,Number.isFinite(ve)?ve:1,$,Ie);te.push(xe.animate(mn,{duration:P.duration,delay:ke,easing:gn,fill:P.kind==="enter"?"backwards":"forwards"}))}oe.push(...te),P.kind==="exit"&&te.length>0&&v(te,ke+P.duration).then(()=>{if(W===V){r.add(P.id),q();for(let xe of te)xe.cancel()}})}L.push(...oe),v(oe,tn(c)).then(()=>{if(W===V){L=L.filter(P=>!oe.includes(P)),r=m,q();for(let P of oe)P.cancel()}})}function O(){ee!==void 0&&D?.cancelAnimationFrame(ee),ee=void 0}function E(s){if(O(),j=Math.min(Math.max(0,s),H),!ae()||!D?.requestAnimationFrame){M=j,J();return}let c=M,m,S=z=>{m??=z;let $=Math.min(1,(z-m)/Wn);M=c+(j-c)*(1-(1-$)**3),J(),ee=$<1?D.requestAnimationFrame(S):void 0};ee=D.requestAnimationFrame(S)}function I(s,c){if(d())return;let m=ee===void 0?M:j;if(!(s>0?M>=H-.5:M<=.5)){E(m+s*pe().height/Q);return}c||(s>0?C():Z())}function k(s){if(!(!U().scroll||H<=0))switch(s.key){case" ":return s.shiftKey?-_e:_e;case"PageDown":return _e;case"PageUp":return-_e;case"ArrowDown":return rt;case"ArrowUp":return-rt;default:return}}function N(s){let c=Math.min(Math.max(0,s),l.length-1);if(c===w)return;let m=l[w]?.id;m&&b.push(m),i(c,!0,"forward")}function C(){if(!d()){if(h){if(h.playing){h.frame&&D?.cancelAnimationFrame(h.frame),h.playing=!1,t.sound?.stop(),h.t=se(h.timeline,h.t),Y();return}if(h.t<h.timeline.length){ue();return}}if(A<U().steps.length){f();return}N(Ee(l,w,1))}}function Z(){if(d())return;let s=rn(b,l,w);if(s){b=s.history,i(s.index,!1,"back");return}i(Ee(l,w,-1),!1,"back")}function Pe(s){switch(s.kind){case"url":t.onLink?.(s.url);return;case"back":Z();return;case"next":N(Ee(l,w,1));return;case"frame":{let c=Zt(a.getDocument(),l,s.id);c===null?C():Re(c,s.id)}}}function Re(s,c){let m=s===w;m||N(s);let S=l[w];if(!S||!U().scroll)return;let z=S.id===c?void 0:a.itemOf(c),$=z?z.y-S.y:0;m?E($):(M=$,J())}function Se(s){let c=l[w];if(!c||s.x<c.x||s.y<c.y||s.x>c.x+c.w||s.y>c.y+c.h)return;let m=W=>!n.has(W),S=a.hitTest(s,m),z=S===null?void 0:nn(g,U(),S);if(z)return z.target;let $=a.linkAt(s,m);return $===void 0?void 0:De($)}let Ce=s=>{if(s.stopPropagation(),s.metaKey||s.ctrlKey||s.altKey)return;let c=s.key,m=k(s);if(m!==void 0){_="",I(m,s.repeat),s.preventDefault();return}if(/^\d$/.test(c))_+=c;else if(c==="Enter"&&_!==""){let S=qt(_,l);_="",!d()&&S!==null&&N(S)}else if(c==="Escape")_!==""?_="":t.onExit?.();else if(["ArrowRight","ArrowDown","PageDown"," ","Enter"].includes(c))_="",C();else if(["ArrowLeft","ArrowUp","PageUp","Backspace"].includes(c))_="",Z();else if(c==="Home")d()||N(Ee(l,-1,1));else if(c==="End")d()||N(Ee(l,l.length,-1));else return;s.preventDefault()},at=s=>{if(d())return;let c=Se(a.screenToDocument(a.pointerPoint(s)));c?Pe(c):C()},ct=s=>{!U().scroll||H<=0||(s.preventDefault(),!(x||s.ctrlKey||s.metaKey)&&(O(),M=Math.min(Math.max(0,M+sn(s,pe())/Q),H),J()))},Ve=s=>{if(e.classList.remove("vd-player--idle"),B&&clearTimeout(B),B=setTimeout(()=>e.classList.add("vd-player--idle"),Kn),!s)return;let c=a.screenToDocument(a.pointerPoint(s));e.classList.toggle("vd-player--link",Se(c)!==void 0)},dt=D&&"ResizeObserver"in D?new D.ResizeObserver(()=>J()):void 0;return dt?.observe(e),e.addEventListener("keydown",Ce),e.addEventListener("click",at),e.addEventListener("pointermove",Ve),e.addEventListener("wheel",ct,{passive:!1}),p=!0,J(),r=X()?new Set:we(U(),0),q(),he(),Ve(),e.focus({preventScroll:!0}),ie(),{viewer:a,index:()=>w,count:()=>l.length,next:C,back:Z,go(s){me(),N(s)},update(s){if(s===a.getDocument())return;me();let c=l[w]?.id;a.update(s),g=tt(s),l=be(s,a.getScene());let m=l.findIndex(z=>z.id===c);w=m===-1?Math.min(w,l.length-1):m,m===-1&&(O(),M=0),re();let S=X();S&&K(S,!1),J(),A=U().steps.length,r=S?new Set:we(U(),A),q()},refit:J,destroy(){V+=1,O(),h?.frame&&D?.cancelAnimationFrame(h.frame),h=void 0,t.sound?.stop();for(let s of L)s.cancel();L=[],x?.remove(),dt?.disconnect(),e.removeEventListener("wheel",ct),e.removeEventListener("keydown",Ce),e.removeEventListener("click",at),e.removeEventListener("pointermove",Ve),G&&clearTimeout(G),B&&clearTimeout(B),y.remove(),u.remove(),a.destroy(),e.classList.remove("vd-player","vd-player--idle","vd-player--link"),e.removeAttribute("tabindex")}}}function an(e){let t=e,o=new Map,r=typeof URL.createObjectURL=="function"&&typeof URL.revokeObjectURL=="function";return{resolve(n){let p=o.get(n.hash);if(p!==void 0)return p;let a=t.get(n.hash);if(a===void 0)return;if(!r)return xt(n.type,a);let y;try{y=vt(a)}catch{return}let u=URL.createObjectURL(new Blob([y],{type:n.type}));return o.set(n.hash,u),u},replace(n){t=n;for(let[p,a]of o)n.has(p)||(URL.revokeObjectURL(a),o.delete(p))},destroy(){for(let n of o.values())URL.revokeObjectURL(n);o.clear(),t=new Map}}}var ot=["page","content","none"],cn=24;function Le(e){let t=e.getBoundingClientRect();return{width:t.width,height:t.height}}function dn(e,t){let o=t===void 0?void 0:e.itemOf(t);if(!(!o||o.w<=0||o.h<=0))return{x:o.x,y:o.y,width:o.w,height:o.h}}function ln(e,t,o,r){if(o==="none")return;let n=o==="page"?dn(e,r):void 0;if(!n){e.fitToContent(cn);return}let p=Le(t);e.setCamera(le(n,{width:p.width||n.width,height:p.height||n.height},cn))}function fn(e,t,o){let r=dn(e,o);if(!r)return;let n=e.getCamera(),p=Le(t),a=p.width||r.width*n.zoom,y=p.height||r.height*n.zoom;e.setCamera({zoom:n.zoom,x:a/2-(r.x+r.width/2)*n.zoom,y:y/2-(r.y+r.height/2)*n.zoom})}var st=Symbol.for("vdesign.embed.handover");function un(e){return e[st]}var pn=["exact","browser"],hn=["ready","problems","page","fonts"];async function qn(e,t){try{let{exactFontsAt:o}=await import("./chunks/fonts.js"),r=o(e);return(await r.ensure(t)).length===0?r:void 0}catch{return}}async function Jr(e,t,o={}){let r=o.fit??"page";if(!ot.includes(r))throw new TypeError(`view: fit must be one of ${ot.join(", ")}; got ${String(r)}.`);let n=o.fonts??"exact";if(!pn.includes(n))throw new TypeError(`view: fonts must be one of ${pn.join(", ")}; got ${String(n)}.`);let p=n==="exact"?It(o.fontBase,lt,e.ownerDocument.baseURI):void 0,a=un(o),y=await Ye(t),u=a?.page!==void 0&&de(y.document).some(d=>d.id===a.page)?a.page:o.page===void 0?de(y.document)[0]?.id:Ae(y.document,o.page).id,g=a?.exact&&p?await qn(p,y.document):void 0,l=e.ownerDocument,w=l.defaultView,b=an(y.blocks),A=y.blocks,L=[...y.problems],x,V=()=>x?[...L,x]:[...L],_=l.createElement("div");_.className="vd-embed",_.style.width="100%",_.style.height="100%",e.appendChild(_);let M=Oe(_,{document:y.document,interactive:o.interactive??!0,wheel:"modifier",resolveAsset:d=>b.resolve(d),...o.surface?{surface:o.surface}:{},...a?{camera:a.camera}:{},...g?{fonts:g.library}:{}}),H={ready:new Set,problems:new Set,page:new Set,fonts:new Set},Q=!1,R=!1,ee=0,j,G,B=g,D=n==="browser"?"browser":void 0,ae;function U(){Q=!0;for(let d of H.ready)d()}function h(){for(let d of H.problems)d(V())}function X(d){D=d;for(let v of H.fonts)v(d)}function se(){return ae??=(async()=>{if(p)try{let{exactFontsAt:d}=await import("./chunks/fonts.js");return d(p)}catch{return}})(),ae}function Y(d){B=void 0,M.setFonts(void 0),j?.fonts(void 0),x=d,h(),X("browser")}async function fe(){let d=await se();if(!R){if(!d){Y(Ne([],p?"the fonts chunk would not load":"no fontBase was given and this build has no default"));return}for(;;){let v=M.getDocument(),i=await d.ensure(v);if(R)return;if(i.length>0){Y(Ne(i));return}if(M.getDocument()===v)break}B=d,M.setFonts(d.library),j?.fonts(d),X("exact")}}function ue(){let d=re(u);if(d)for(let v of H.page)v(d)}function re(d){let v=de(M.getDocument()).find(i=>i.id===d);if(v)return v.name===void 0?{id:v.id}:{id:v.id,name:v.name}}let K=()=>ln(M,_,r,u),ie=()=>fn(M,_,u);function pe(d){if(R)return;let v=Ae(M.getDocument(),d).id,i=v!==u;u=v,r==="page"?K():ie(),i&&ue()}function J(d){o.onLink?o.onLink(d):w?.open(d,"_blank","noopener,noreferrer")}let he=d=>{if(d.button!==0||j)return;let v=M.linkAt(M.screenToDocument(M.pointerPoint(d)));if(v===void 0)return;let i=De(v);if(i){if(d.preventDefault(),i.kind==="frame"){de(M.getDocument()).some(f=>f.id===i.id)&&pe(i.id);return}J(i.url)}};_.addEventListener("click",he);let q=Le(_),ge=w&&"ResizeObserver"in w?new w.ResizeObserver(()=>{let d=Le(_);d.width===q.width&&d.height===q.height||(q=d,K())}):void 0;ge?.observe(_),a||(r==="none"&&u!==void 0&&o.page!==void 0?ie():K()),U(),g?X("exact"):n==="exact"&&fe();let ce={async load(d){if(R)throw new Error("view: this view was destroyed.");let v=++ee,i=await Ye(d),f=B,O=f?await f.ensure(i.document):[];if(G&&await G||R||v!==ee)return;O.length>0&&B===f&&Y(Ne(O)),b.replace(i.blocks),A=i.blocks,M.update(i.document),L=[...i.problems],j?.update(i.document),de(i.document).some(I=>I.id===u)||(u=de(i.document)[0]?.id,r==="page"?K():ie(),ue()),h(),U()},pages:()=>de(M.getDocument()).map(d=>d.name===void 0?{id:d.id}:{id:d.id,name:d.name}),goTo:pe,fit:()=>{R||K()},play(d={}){if(R)return Promise.reject(new Error("view: this view was destroyed."));try{return j?.stop(),Promise.resolve(me(M.getDocument(),d.page))}catch(v){return Promise.reject(v instanceof Error?v:new Error(String(v)))}},async edit(d={}){if(R)throw new Error("view: this view was destroyed.");if(G)throw new Error("view: edit() is already opening an editor.");let v;G=new Promise(f=>v=f);let i=!1;try{let{edit:f}=await import("./edit.js");if(R)throw new Error("view: this view was destroyed.");let O={camera:M.getCamera(),page:u,exact:B!==void 0},E=Ct(M.getDocument(),A,L),I=await f(e,E,{...o,...d,[st]:O});if(R)throw I.destroy(),new Error("view: this view was destroyed.");return i=!0,ce.destroy(),I}finally{G=void 0,v(i)}},on(d,v){if(!hn.includes(d))throw new TypeError(`view: on() takes one of ${hn.join(", ")}; got ${String(d)}.`);let i=H[d];if(i.add(v),d==="ready"&&Q&&queueMicrotask(()=>{i.has(v)&&v()}),d==="problems"&&queueMicrotask(()=>{i.has(v)&&v(V())}),d==="fonts"&&D!==void 0){let f=D;queueMicrotask(()=>{i.has(v)&&v(f)})}return()=>{i.delete(v)}},destroy(){if(!R){R=!0,j?.stop(),_.removeEventListener("click",he),ge?.disconnect(),M.destroy(),b.destroy(),_.remove();for(let d of Object.values(H))d.clear()}}};function me(d,v){let i=v===void 0?u:Ae(d,v).id,f=l.createElement("div");f.className="vd-embed__play",f.style.position="absolute",f.style.inset="0";let O=Z=>Z.stopPropagation();f.addEventListener("wheel",O);let E=l.activeElement;_.appendChild(f);let I=!1,k=()=>{if(I)return;I=!0,j===N&&(j=void 0),C.destroy(),f.removeEventListener("wheel",O);let Z=f.contains(l.activeElement);f.remove(),Z&&E&&"focus"in E&&typeof E.focus=="function"&&E.focus({preventScroll:!0})},N={stop:k,update:Z=>C.update(Z),fonts:Z=>C.viewer.setFonts(Z?.library)},C=it(f,{document:d,resolveAsset:Z=>b.resolve(Z),...B?{fonts:B.library}:{},...i===void 0?{}:{start:i},onExit:k,onLink:J});return j=N,{goTo(Z){if(I)return;let Pe=C.viewer.getDocument(),Re=Ae(Pe,Z).id,Se=be(Pe,C.viewer.getScene()).findIndex(Ce=>Ce.id===Re);Se!==-1&&C.go(Se)},destroy:k}}return ce}export{yn as version,Jr as view};
|