@velumo/renderer-dom 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/background-renderer.d.ts +16 -0
- package/dist/background-renderer.d.ts.map +1 -0
- package/dist/background-renderer.js +41 -0
- package/dist/background-renderer.js.map +1 -0
- package/dist/camera-adapter.d.ts +16 -0
- package/dist/camera-adapter.d.ts.map +1 -0
- package/dist/camera-adapter.js +13 -0
- package/dist/camera-adapter.js.map +1 -0
- package/dist/default-theme.d.ts +5 -0
- package/dist/default-theme.d.ts.map +1 -0
- package/dist/default-theme.js +579 -0
- package/dist/default-theme.js.map +1 -0
- package/dist/dom-renderer.d.ts +62 -0
- package/dist/dom-renderer.d.ts.map +1 -0
- package/dist/dom-renderer.js +306 -0
- package/dist/dom-renderer.js.map +1 -0
- package/dist/html-sanitize.d.ts +18 -0
- package/dist/html-sanitize.d.ts.map +1 -0
- package/dist/html-sanitize.js +379 -0
- package/dist/html-sanitize.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/layout-renderer.d.ts +16 -0
- package/dist/layout-renderer.d.ts.map +1 -0
- package/dist/layout-renderer.js +450 -0
- package/dist/layout-renderer.js.map +1 -0
- package/dist/slide-thumbnail.d.ts +63 -0
- package/dist/slide-thumbnail.d.ts.map +1 -0
- package/dist/slide-thumbnail.js +93 -0
- package/dist/slide-thumbnail.js.map +1 -0
- package/dist/spatial-renderer.d.ts +18 -0
- package/dist/spatial-renderer.d.ts.map +1 -0
- package/dist/spatial-renderer.js +36 -0
- package/dist/spatial-renderer.js.map +1 -0
- package/dist/theme-fonts.d.ts +8 -0
- package/dist/theme-fonts.d.ts.map +1 -0
- package/dist/theme-fonts.js +68 -0
- package/dist/theme-fonts.js.map +1 -0
- package/dist/theme-tokens.d.ts +3 -0
- package/dist/theme-tokens.d.ts.map +1 -0
- package/dist/theme-tokens.js +43 -0
- package/dist/theme-tokens.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +20 -0
- package/src/background-renderer.ts +77 -0
- package/src/camera-adapter.ts +21 -0
- package/src/default-theme.ts +582 -0
- package/src/dom-renderer.ts +486 -0
- package/src/html-sanitize.ts +446 -0
- package/src/index.ts +25 -0
- package/src/layout-renderer.ts +721 -0
- package/src/slide-thumbnail.ts +146 -0
- package/src/spatial-renderer.ts +62 -0
- package/src/theme-fonts.ts +75 -0
- package/src/theme-tokens.ts +66 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Background } from "@velumo/core";
|
|
2
|
+
export interface BackgroundRendererElement {
|
|
3
|
+
setAttribute(name: string, value: string): void;
|
|
4
|
+
appendChild(child: BackgroundRendererElement): void;
|
|
5
|
+
readonly style?: {
|
|
6
|
+
setProperty(name: string, value: string): void;
|
|
7
|
+
};
|
|
8
|
+
textContent: string;
|
|
9
|
+
parentNode?: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface BackgroundRendererFactories {
|
|
12
|
+
createElement(tagName: string): BackgroundRendererElement;
|
|
13
|
+
setStyleProperty(element: BackgroundRendererElement, property: string, value: string): void;
|
|
14
|
+
}
|
|
15
|
+
export declare function renderBackground(background: Background, factories: BackgroundRendererFactories): BackgroundRendererElement;
|
|
16
|
+
//# sourceMappingURL=background-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-renderer.d.ts","sourceRoot":"","sources":["../src/background-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiC,MAAM,cAAc,CAAC;AAE9E,MAAM,WAAW,yBAAyB;IACxC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,WAAW,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,yBAAyB,CAAC;IAC1D,gBAAgB,CACd,OAAO,EAAE,yBAAyB,EAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,IAAI,CAAC;CACT;AAqBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,2BAA2B,GACrC,yBAAyB,CAmC3B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
function stopsToCss(stops) {
|
|
2
|
+
return stops
|
|
3
|
+
.map((stop) => stop.at === undefined ? stop.color : `${stop.color} ${stop.at}%`)
|
|
4
|
+
.join(", ");
|
|
5
|
+
}
|
|
6
|
+
function layerToGradientCss(layer) {
|
|
7
|
+
const stops = stopsToCss(layer.stops);
|
|
8
|
+
if (layer.type === "linear") {
|
|
9
|
+
return `linear-gradient(${layer.angle ?? 180}deg, ${stops})`;
|
|
10
|
+
}
|
|
11
|
+
const shape = layer.shape ?? "circle";
|
|
12
|
+
const x = layer.position?.x ?? 50;
|
|
13
|
+
const y = layer.position?.y ?? 50;
|
|
14
|
+
return `radial-gradient(${shape} at ${x}% ${y}%, ${stops})`;
|
|
15
|
+
}
|
|
16
|
+
export function renderBackground(background, factories) {
|
|
17
|
+
const container = factories.createElement("div");
|
|
18
|
+
container.setAttribute("data-velumo-background", "");
|
|
19
|
+
factories.setStyleProperty(container, "position", "absolute");
|
|
20
|
+
factories.setStyleProperty(container, "inset", "0");
|
|
21
|
+
factories.setStyleProperty(container, "z-index", "-1");
|
|
22
|
+
if (background.color !== undefined) {
|
|
23
|
+
factories.setStyleProperty(container, "background-color", background.color);
|
|
24
|
+
}
|
|
25
|
+
for (const layer of background.layers ?? []) {
|
|
26
|
+
const layerElement = factories.createElement("div");
|
|
27
|
+
layerElement.setAttribute("data-velumo-background-layer", "");
|
|
28
|
+
factories.setStyleProperty(layerElement, "position", "absolute");
|
|
29
|
+
factories.setStyleProperty(layerElement, "inset", "0");
|
|
30
|
+
factories.setStyleProperty(layerElement, "background", layerToGradientCss(layer));
|
|
31
|
+
if (layer.opacity !== undefined) {
|
|
32
|
+
factories.setStyleProperty(layerElement, "opacity", String(layer.opacity));
|
|
33
|
+
}
|
|
34
|
+
if (layer.blend !== undefined && layer.blend !== "normal") {
|
|
35
|
+
factories.setStyleProperty(layerElement, "mix-blend-mode", layer.blend);
|
|
36
|
+
}
|
|
37
|
+
container.appendChild(layerElement);
|
|
38
|
+
}
|
|
39
|
+
return container;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=background-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-renderer.js","sourceRoot":"","sources":["../src/background-renderer.ts"],"names":[],"mappings":"AAmBA,SAAS,UAAU,CAAC,KAA8B;IAChD,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CACjE;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAsB;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,mBAAmB,KAAK,CAAC,KAAK,IAAI,GAAG,QAAQ,KAAK,GAAG,CAAC;IAC/D,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,mBAAmB,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,UAAsB,EACtB,SAAsC;IAEtC,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,SAAS,CAAC,YAAY,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IACrD,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9D,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACpD,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAEvD,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACnC,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpD,YAAY,CAAC,YAAY,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;QAC9D,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACjE,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACvD,SAAS,CAAC,gBAAgB,CACxB,YAAY,EACZ,YAAY,EACZ,kBAAkB,CAAC,KAAK,CAAC,CAC1B,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,SAAS,CAAC,gBAAgB,CACxB,YAAY,EACZ,SAAS,EACT,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CACtB,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1D,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1E,CAAC;QACD,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ResolvedView } from "@velumo/runtime";
|
|
2
|
+
export interface DomCameraRoot {
|
|
3
|
+
style: {
|
|
4
|
+
transform: string;
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Apply a percent-world camera view to the world layer.
|
|
9
|
+
*
|
|
10
|
+
* The world layer fills the viewport (width/height 100%) with
|
|
11
|
+
* `transform-origin: 0 0`, and its content is positioned in 0-100 percent.
|
|
12
|
+
* To center world point (x, y) at `zoom`, translate by (50 - zoom*x)% /
|
|
13
|
+
* (50 - zoom*y)% (percent of the layer's own box = the viewport) then scale.
|
|
14
|
+
*/
|
|
15
|
+
export declare function applyCameraToDomRoot(root: DomCameraRoot, view: ResolvedView): void;
|
|
16
|
+
//# sourceMappingURL=camera-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera-adapter.d.ts","sourceRoot":"","sources":["../src/camera-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,YAAY,GACjB,IAAI,CAGN"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply a percent-world camera view to the world layer.
|
|
3
|
+
*
|
|
4
|
+
* The world layer fills the viewport (width/height 100%) with
|
|
5
|
+
* `transform-origin: 0 0`, and its content is positioned in 0-100 percent.
|
|
6
|
+
* To center world point (x, y) at `zoom`, translate by (50 - zoom*x)% /
|
|
7
|
+
* (50 - zoom*y)% (percent of the layer's own box = the viewport) then scale.
|
|
8
|
+
*/
|
|
9
|
+
export function applyCameraToDomRoot(root, view) {
|
|
10
|
+
const { x, y, zoom } = view;
|
|
11
|
+
root.style.transform = `translate(${50 - zoom * x}%, ${50 - zoom * y}%) scale(${zoom})`;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=camera-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera-adapter.js","sourceRoot":"","sources":["../src/camera-adapter.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAmB,EACnB,IAAkB;IAElB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-theme.d.ts","sourceRoot":"","sources":["../src/default-theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAE/C,eAAO,MAAM,YAAY,EAAE,KA4E1B,CAAC;AAEF,eAAO,MAAM,eAAe,QAmfpB,CAAC"}
|