@riebeckite/plugin-vega-lite 0.0.31 → 0.0.32

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/client.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ type ClientContext = {
2
+ root?: ParentNode;
3
+ signal?: AbortSignal;
4
+ };
1
5
  /**
2
6
  * Renders every server-emitted `[data-vega-lite]` figure in the browser.
3
7
  *
@@ -6,4 +10,5 @@
6
10
  * `<details>`) when JavaScript is disabled. A broken payload or a Vega error
7
11
  * reveals the fallback for that figure without affecting the rest of the page.
8
12
  */
9
- export declare function initVegaLite(): Promise<void>;
13
+ export declare function initVegaLite(context?: ClientContext): Promise<undefined | (() => void)>;
14
+ export {};
package/dist/client.js CHANGED
@@ -1,9 +1,10 @@
1
1
  // client.ts
2
2
  var FIGURE_SELECTOR = "[data-vega-lite]";
3
3
  var CANVAS_SELECTOR = "[data-vega-lite-canvas]";
4
- async function initVegaLite() {
4
+ async function initVegaLite(context = {}) {
5
+ const root = context.root ?? document;
5
6
  const figures = Array.from(
6
- document.querySelectorAll(FIGURE_SELECTOR)
7
+ root.querySelectorAll(FIGURE_SELECTOR)
7
8
  );
8
9
  if (figures.length === 0) return;
9
10
  let embed;
@@ -18,33 +19,46 @@ async function initVegaLite() {
18
19
  for (const figure of figures) revealFallback(figure);
19
20
  return;
20
21
  }
22
+ if (context.signal?.aborted) return;
23
+ const views = [];
21
24
  for (const figure of figures) {
22
- await renderFigure(embed, figure);
25
+ if (context.signal?.aborted || !figure.isConnected) return;
26
+ const view = await renderFigure(embed, figure, context.signal);
27
+ if (view) views.push(view);
23
28
  }
29
+ return () => {
30
+ for (const view of views) view.finalize();
31
+ };
24
32
  }
25
- async function renderFigure(embed, figure) {
33
+ async function renderFigure(embed, figure, signal) {
26
34
  const canvas = figure.querySelector(CANVAS_SELECTOR);
27
35
  const serialized = figure.dataset.vegaLiteSpec;
28
36
  if (!canvas || !serialized) {
29
37
  revealFallback(figure);
30
- return;
38
+ return void 0;
31
39
  }
32
40
  let spec;
33
41
  try {
34
42
  spec = JSON.parse(serialized);
35
43
  } catch {
36
44
  revealFallback(figure);
37
- return;
45
+ return void 0;
38
46
  }
39
47
  try {
40
- await embed(
48
+ const result = await embed(
41
49
  canvas,
42
50
  spec,
43
51
  buildEmbedOptions(figure)
44
52
  );
53
+ if (signal?.aborted || !figure.isConnected) {
54
+ result.view.finalize();
55
+ return void 0;
56
+ }
45
57
  figure.dataset.vegaLite = "rendered";
58
+ return result.view;
46
59
  } catch {
47
60
  revealFallback(figure);
61
+ return void 0;
48
62
  }
49
63
  }
50
64
  function buildEmbedOptions(figure) {
package/dist/index.js CHANGED
@@ -6,50 +6,20 @@ import {
6
6
  } from "@riebeckite/core";
7
7
 
8
8
  // src/hast.ts
9
- function visitElements(node, visitor, parent, index) {
10
- if (isElementNode(node)) visitor(node, parent, index);
11
- for (const [childIndex, child] of [...getChildren(node)].entries()) {
12
- visitElements(
13
- child,
14
- visitor,
15
- hasChildren(node) ? node : parent,
16
- childIndex
17
- );
18
- }
19
- }
20
- function element(tagName, properties = {}, children = []) {
21
- return { type: "element", tagName, properties, children };
22
- }
23
- function text(value) {
24
- return { type: "text", value };
25
- }
26
- function getTextContent(node) {
27
- if (node.type === "text" && "value" in node && typeof node.value === "string") {
28
- return node.value;
29
- }
30
- return getChildren(node).map(getTextContent).join("");
31
- }
32
- function getStringProperty(node, key) {
33
- const value = node.properties?.[key];
34
- if (typeof value === "string") return value;
35
- if (Array.isArray(value)) return value.join(" ");
36
- return null;
37
- }
38
- function hasClass(node, className) {
39
- const value = node.properties?.className;
40
- const classes = Array.isArray(value) ? value.map(String) : typeof value === "string" ? value.split(/\s+/) : [];
41
- return classes.includes(className);
42
- }
43
- function isElementNode(node) {
44
- return node.type === "element";
45
- }
46
- function hasChildren(node) {
47
- return Array.isArray(node.children);
48
- }
49
- function getChildren(node) {
50
- const children = node.children;
51
- return Array.isArray(children) ? children : [];
52
- }
9
+ import {
10
+ element as sharedElement,
11
+ getStringProperty as sharedGetStringProperty,
12
+ getTextContent as sharedGetTextContent,
13
+ hasClass as sharedHasClass,
14
+ text as sharedText,
15
+ visitElements as sharedVisitElements
16
+ } from "@riebeckite/diagram";
17
+ var element = sharedElement;
18
+ var text = sharedText;
19
+ var getTextContent = sharedGetTextContent;
20
+ var getStringProperty = sharedGetStringProperty;
21
+ var hasClass = sharedHasClass;
22
+ var visitElements = sharedVisitElements;
53
23
 
54
24
  // src/rehype.ts
55
25
  var DEFAULT_CLASS_NAME = "rb-vega-lite";
@@ -210,7 +180,10 @@ function vegaLite(options = {}) {
210
180
  createClientEntry(
211
181
  "vega-lite",
212
182
  "@riebeckite/plugin-vega-lite/client",
213
- "initVegaLite"
183
+ "initVegaLite",
184
+ void 0,
185
+ void 0,
186
+ "context"
214
187
  )
215
188
  ]
216
189
  });
@@ -1,7 +1,7 @@
1
1
  import type { ElementNode, HastNode, ParentNode, TextNode } from "./types.js";
2
- export declare function visitElements(node: HastNode, visitor: (node: ElementNode, parent?: ParentNode, index?: number) => void, parent?: ParentNode, index?: number): void;
3
- export declare function element(tagName: string, properties?: Record<string, unknown>, children?: HastNode[]): ElementNode;
4
- export declare function text(value: string): TextNode;
5
- export declare function getTextContent(node: HastNode): string;
6
- export declare function getStringProperty(node: ElementNode, key: string): string | null;
7
- export declare function hasClass(node: ElementNode, className: string): boolean;
2
+ export declare const element: (tagName: string, properties?: Record<string, unknown>, children?: HastNode[]) => ElementNode;
3
+ export declare const text: (value: string) => TextNode;
4
+ export declare const getTextContent: (node: HastNode) => string;
5
+ export declare const getStringProperty: (node: ElementNode, key: string) => string | null;
6
+ export declare const hasClass: (node: ElementNode, className: string) => boolean;
7
+ export declare const visitElements: (node: HastNode, visitor: (node: ElementNode, parent?: ParentNode, index?: number) => void, parent?: ParentNode, index?: number) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riebeckite/plugin-vega-lite",
3
- "version": "0.0.31",
3
+ "version": "0.0.32",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -24,7 +24,8 @@
24
24
  "vega": "^6.4.0",
25
25
  "vega-embed": "^7.3.0",
26
26
  "vega-lite": "^6.4.3",
27
- "@riebeckite/core": "0.0.31"
27
+ "@riebeckite/core": "0.0.32",
28
+ "@riebeckite/diagram": "0.0.32"
28
29
  },
29
30
  "publishConfig": {
30
31
  "access": "public"