chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 12:25:07 +08:00
commit a26e856398
1681 changed files with 296950 additions and 0 deletions
@@ -0,0 +1,16 @@
<!doctype html>
<html>
<head>
<script type="module">
import "/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js";
import perspective from "/node_modules/@perspective-dev/client/dist/cdn/perspective.js";
window.WORKER = perspective.worker();
</script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/node_modules/@fontsource/roboto-mono/400.css" />
</head>
<body>
<perspective-viewer></perspective-viewer>
</body>
</html>
@@ -0,0 +1,44 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/node_modules/@fontsource/roboto-mono/400.css" />
</head>
<body>
<script type="module">
import perspective from "/node_modules/@perspective-dev/client/dist/cdn/perspective.js";
import "/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js";
class TestChartPlugin extends customElements.get("perspective-viewer-plugin") {
get_static_config() {
return {
name: "test chart",
select_mode: "toggle",
config_column_names: ["X Axis", "Y Axis", "Color", "Size", "Tooltip"],
min_config_columns: 2,
};
}
}
customElements.define("test-chart-plugin", TestChartPlugin);
const Viewer = customElements.get("perspective-viewer");
Viewer.registerPlugin("test-chart-plugin");
const viewer = document.createElement("perspective-viewer");
document.body.appendChild(viewer);
let resp = await fetch("/node_modules/@perspective-dev/test/assets/superstore.csv");
let csv = await resp.text();
const worker = await perspective.worker();
const table = worker.table(csv, {
index: "Row ID",
name: "load-viewer-csv",
});
await viewer.load(table);
window.__TEST_WORKER__ = worker;
window.__TEST_PERSPECTIVE_READY__ = true;
</script>
</body>
</html>
@@ -0,0 +1,48 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/node_modules/@fontsource/roboto-mono/400.css" />
</head>
<body>
<script type="module">
import perspective from "/node_modules/@perspective-dev/client/dist/cdn/perspective.js";
import "/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js";
class TestColumnSettingsPlugin extends customElements.get("perspective-viewer-plugin") {
get_static_config() {
return {
name: "test column settings",
select_mode: "select",
config_column_names: [],
can_render_column_styles: true,
};
}
column_style_controls(type, group) {
return {};
}
}
customElements.define("test-column-settings-plugin", TestColumnSettingsPlugin);
const Viewer = customElements.get("perspective-viewer");
Viewer.registerPlugin("test-column-settings-plugin");
const viewer = document.createElement("perspective-viewer");
document.body.appendChild(viewer);
let resp = await fetch("/node_modules/@perspective-dev/test/assets/superstore.csv");
let csv = await resp.text();
const worker = await perspective.worker();
const table = worker.table(csv, {
index: "Row ID",
name: "load-viewer-csv",
});
await viewer.load(table);
window.__TEST_WORKER__ = worker;
window.__TEST_PERSPECTIVE_READY__ = true;
</script>
</body>
</html>
@@ -0,0 +1,141 @@
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
// ┃ This file is part of the Perspective library, distributed under the terms ┃
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
import "/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js";
import perspective from "/node_modules/@perspective-dev/client/dist/cdn/perspective.js";
const BasePlugin = customElements.get("perspective-viewer-plugin");
class DebugStyledPlugin extends BasePlugin {
get_static_config() {
return {
name: "Debug Styled",
select_mode: "toggle",
config_column_names: ["Columns"],
priority: 1,
can_render_column_styles: true,
};
}
plugin_config_schema() {
return {
fields: [
{
kind: "Enum",
key: "edit_mode",
default: "READ_ONLY",
variants: [
{ value: "EDIT", label: "Edit" },
{ value: "READ_ONLY", label: "Read-only" },
],
},
],
};
}
column_config_schema(type) {
const fields = [];
if (type === "integer" || type === "float") {
fields.push({
kind: "ColorRange",
key_pos: "pos_fg_color",
key_neg: "neg_fg_color",
default_pos: "#2771a8",
default_neg: "#ff471e",
is_gradient: false,
});
fields.push({ kind: "NumberFormat" });
} else if (type === "date") {
fields.push({ kind: "DatetimeFormat" });
} else if (type === "datetime") {
fields.push({ kind: "DatetimeFormat" });
fields.push({
kind: "Enum",
key: "datetime_color_mode",
default: "none",
variants: [
{ value: "none", label: "None" },
{ value: "foreground", label: "Foreground" },
],
});
} else if (type === "string") {
fields.push({ kind: "StringFormat" });
}
return { fields };
}
restore(token, columns_config) {
this._restored_plugin_config = token;
this._restored_columns_config = columns_config;
this._restore_count = (this._restore_count ?? 0) + 1;
}
async update(view) {
return this.draw(view);
}
async draw(view) {
this._draw_count = (this._draw_count ?? 0) + 1;
const num_rows = await view.num_rows();
this.textContent = `${this.get_static_config().name}: ${num_rows} rows`;
}
}
class DebugAltPlugin extends DebugStyledPlugin {
get_static_config() {
return {
name: "Debug Alt",
select_mode: "select",
priority: 0,
can_render_column_styles: false,
};
}
plugin_config_schema() {
return { fields: [] };
}
column_config_schema() {
return { fields: [] };
}
}
customElements.define("perspective-viewer-debug-styled", DebugStyledPlugin);
customElements.define("perspective-viewer-debug-alt", DebugAltPlugin);
const Viewer = customElements.get("perspective-viewer");
Viewer.registerPlugin("perspective-viewer-debug-styled");
Viewer.registerPlugin("perspective-viewer-debug-alt");
async function load() {
const resp = await fetch(
"/node_modules/@perspective-dev/test/assets/superstore.csv",
);
const csv = await resp.text();
const viewer = document.querySelector("perspective-viewer");
const worker = await perspective.worker();
const table = worker.table(csv, {
index: "Row ID",
name: "load-viewer-csv",
});
if (viewer) {
await viewer.load(table);
}
window.__TEST_WORKER__ = worker;
}
await load();
window.__TEST_PERSPECTIVE_READY__ = true;
@@ -0,0 +1,48 @@
<!doctype html>
<html>
<head>
<script type="module" src="/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js"></script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/node_modules/@fontsource/roboto-mono/400.css" />
</head>
<body>
<perspective-viewer> </perspective-viewer>
<script type="module">
import perspective from "/node_modules/@perspective-dev/client/dist/cdn/perspective.js";
window.WORKER = perspective.worker();
const datetime_range_data = [
{
v: new Date(2020, 2, 1),
w: new Date(2020, 2, 1, 12, 30, 55),
x: 1,
y: "a",
z: true,
}, // 2020/03/01 12:30:55 GMT-0400
{
v: new Date(2020, 9, 1),
w: new Date(2020, 9, 1, 15, 30, 55),
x: 2,
y: "b",
z: false,
}, // 2020/10/01 15:30:55 GMT-0400
{
v: new Date(2020, 10, 1),
w: new Date(2020, 10, 1, 19, 30, 55),
x: 3,
y: "c",
z: true,
}, // 2020/11/01 19:30:55 GMT-0500
{
v: new Date(2020, 11, 1),
w: new Date(2020, 11, 1, 23, 30, 55),
x: 4,
y: "d",
z: false,
}, // 2020/12/01 23:30:55 GMT-0500
];
const table = window.WORKER.table(datetime_range_data);
document.querySelector("perspective-viewer").load(table);
</script>
</body>
</html>
@@ -0,0 +1,43 @@
<!doctype html>
<html>
<head>
<script type="module" src="/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js"></script>
<script type="module">
await customElements.whenDefined("perspective-viewer-plugin");
const BASE = customElements.get("perspective-viewer-plugin");
class TestChartPluginHighPriority extends BASE {
get_static_config() {
return {
name: "HighPriority",
config_column_names: [],
priority: 10,
};
}
}
class TestChartPluginLowPriority extends BASE {
get_static_config() {
return {
name: "LowPriority",
config_column_names: [],
priority: -10,
};
}
}
customElements.define("low-priority", TestChartPluginLowPriority);
customElements.define("high-priority", TestChartPluginHighPriority);
await customElements.whenDefined("perspective-viewer").then((viewer) => {
viewer.registerPlugin("low-priority");
viewer.registerPlugin("high-priority");
});
</script>
<script type="module" src="/node_modules/@perspective-dev/test/load-viewer-csv.js"></script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
</head>
<body>
<perspective-viewer></perspective-viewer>
</body>
</html>
@@ -0,0 +1,49 @@
<!doctype html>
<html>
<head>
<script type="module" src="/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js"></script>
<script type="module">
await customElements.whenDefined("perspective-viewer-plugin");
const BASE = customElements.get("perspective-viewer-plugin");
class TestPluginImplementsResize extends BASE {
get_static_config() {
return {
name: "Resizing Plugin",
select_mode: "select",
config_column_names: [],
};
}
async draw(view) {
this._view = view;
console.log(await this._view.num_rows());
return await super.draw(view);
}
async update(view) {
this._view = view;
console.log(await this._view.num_rows());
return await super.update(view);
}
async resize(view) {
console.log(await this._view.num_rows());
await this._view.to_csv();
}
}
customElements.define("resize-plugin", TestPluginImplementsResize);
await customElements.whenDefined("perspective-viewer").then((viewer) => {
viewer.registerPlugin("resize-plugin");
});
</script>
<script type="module" src="/node_modules/@perspective-dev/test/load-viewer-csv.js"></script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
</head>
<body>
<perspective-viewer></perspective-viewer>
</body>
</html>
@@ -0,0 +1,16 @@
<!doctype html>
<html>
<head>
<script type="module" src="/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js"></script>
<script type="module" src="/node_modules/@perspective-dev/viewer-charts/dist/cdn/perspective-viewer-charts.js"></script>
<script type="module" src="/node_modules/@perspective-dev/viewer-datagrid/dist/cdn/perspective-viewer-datagrid.js"></script>
<script type="module" src="/node_modules/@perspective-dev/test/load-viewer-csv.js"></script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/@fontsource/roboto-mono/400.css" />
</head>
<body>
<perspective-viewer> </perspective-viewer>
</body>
</html>
@@ -0,0 +1,12 @@
<!doctype html>
<html>
<head>
<script type="module" src="./debug_plugins.js"></script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/node_modules/@fontsource/roboto-mono/400.css" />
</head>
<body>
<perspective-viewer></perspective-viewer>
</body>
</html>
@@ -0,0 +1,28 @@
<!doctype html>
<html>
<head>
<script type="module">
import "/node_modules/@perspective-dev/viewer/dist/esm/perspective-viewer.inline.js";
import perspective from "/node_modules/@perspective-dev/client/dist/cdn/perspective.js";
async function load() {
let resp = await fetch("/node_modules/@perspective-dev/test/assets/superstore.csv");
let csv = await resp.text();
const viewer = document.querySelector("perspective-viewer");
const worker = await perspective.worker();
const table = worker.table(csv, { index: "Row ID" });
await viewer.load(table);
window.__TEST_WORKER__ = worker;
}
await load();
window.__TEST_PERSPECTIVE_READY__ = true;
</script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/node_modules/@fontsource/roboto-mono/400.css" />
</head>
<body>
<perspective-viewer></perspective-viewer>
</body>
</html>
@@ -0,0 +1,21 @@
<!doctype html>
<html>
<head>
<script type="module" src="http://localhost:6598/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js"></script>
<script type="module" src="http://localhost:6598/node_modules/@perspective-dev/test/load-viewer-csv-single-threaded.js"></script>
<link rel="stylesheet" href="http://localhost:6598/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="http://localhost:6598/node_modules/@fontsource/roboto-mono/400.css" />
<style>
perspective-viewer {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
</style>
</head>
<body>
<perspective-viewer></perspective-viewer>
</body>
</html>
@@ -0,0 +1,13 @@
<!doctype html>
<html>
<head>
<script type="module" src="/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js"></script>
<script type="module" src="/node_modules/@perspective-dev/test/load-viewer-csv.js"></script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/node_modules/@fontsource/roboto-mono/400.css" />
</head>
<body>
<perspective-viewer></perspective-viewer>
</body>
</html>
@@ -0,0 +1,11 @@
<!doctype html>
<html>
<head>
<script type="module" src="/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js"></script>
<script type="module" src="/node_modules/@perspective-dev/test/load-viewer.js"></script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/node_modules/@fontsource/roboto-mono/400.css" />
</head>
<body></body>
</html>
@@ -0,0 +1,19 @@
<!doctype html>
<html>
<head>
<script type="module" src="/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js"></script>
<script type="module" src="/node_modules/@perspective-dev/test/load-viewer-csv.js"></script>
<link rel="stylesheet" href="../css/demo.css" />
<link rel="stylesheet" href="/node_modules/@perspective-dev/viewer/dist/css/pro.css" />
<link rel="stylesheet" href="/node_modules/@fontsource/roboto-mono/400.css" />
<style>
perspective-viewer {
top: 50px !important;
}
</style>
</head>
<body>
<input />
<perspective-viewer></perspective-viewer>
</body>
</html>