spaday-regular-table 0.2.0__tar.gz → 0.2.1__tar.gz
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.
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/.gitignore +5 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/PKG-INFO +2 -2
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/build.mjs +9 -3
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/package.json +7 -5
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/pnpm-lock.yaml +133 -1
- spaday_regular_table-0.2.1/js/src/css/theme.css +51 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/src/html/index.html +1 -0
- spaday_regular_table-0.2.1/js/src/ts/define-guard.ts +19 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/src/ts/index.ts +4 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tests/index.spec.js +72 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/bundle.mjs +1 -1
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tsconfig.json +2 -2
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/pyproject.toml +3 -3
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/__init__.py +2 -2
- spaday_regular_table-0.2.1/spaday_regular_table/extension/cdn/index.js +2 -0
- spaday_regular_table-0.2.1/spaday_regular_table/extension/cdn/index.js.map +7 -0
- spaday_regular_table-0.2.1/spaday_regular_table/extension/css/index.css +0 -0
- spaday_regular_table-0.2.1/spaday_regular_table/extension/css/theme.css +1 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/extension/index.html +1 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/tests/test_all.py +2 -0
- spaday_regular_table-0.2.0/spaday_regular_table/extension/cdn/index.js +0 -1202
- spaday_regular_table-0.2.0/spaday_regular_table/extension/cdn/index.js.map +0 -7
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/LICENSE +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/README.md +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/.oxfmtrc.json +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/.oxlintrc.json +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/playwright.config.js +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/pnpm-workspace.yaml +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/src/css/index.css +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/src/ts/css.d.ts +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/css.mjs +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/externals.mjs +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/getarg.mjs +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/html.mjs +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/components.cem.json +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/components.py +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/example.py +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/extension/css/material.css +0 -0
- {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/tests/test_example.py +0 -0
|
@@ -13,6 +13,10 @@ __pycache__/
|
|
|
13
13
|
*.exp
|
|
14
14
|
*.lib
|
|
15
15
|
|
|
16
|
+
# vcpkg
|
|
17
|
+
vcpkg/
|
|
18
|
+
vcpkg_installed/
|
|
19
|
+
|
|
16
20
|
# Rust
|
|
17
21
|
target
|
|
18
22
|
target-capi
|
|
@@ -142,6 +146,7 @@ spaday_regular_table/labextension
|
|
|
142
146
|
|
|
143
147
|
# Emscripten SDK (locally installed)
|
|
144
148
|
emsdk
|
|
149
|
+
.pyodide_build/
|
|
145
150
|
|
|
146
151
|
# Mac
|
|
147
152
|
.DS_Store
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: spaday-regular-table
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: regular-table for spaday
|
|
5
5
|
Project-URL: Repository, https://github.com/1kbgz/spaday-regular-table
|
|
6
6
|
Project-URL: Homepage, https://github.com/1kbgz/spaday-regular-table
|
|
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
17
17
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
18
18
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
19
19
|
Requires-Python: >=3.11
|
|
20
|
-
Requires-Dist: spaday
|
|
20
|
+
Requires-Dist: spaday<1.0,>=0.6.0
|
|
21
21
|
Provides-Extra: develop
|
|
22
22
|
Requires-Dist: build; extra == 'develop'
|
|
23
23
|
Requires-Dist: bump-my-version; extra == 'develop'
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { bundle } from "./tools/bundle.mjs";
|
|
2
|
+
import { bundle_css } from "./tools/css.mjs";
|
|
2
3
|
import { node_modules_external } from "./tools/externals.mjs";
|
|
3
4
|
|
|
4
5
|
import fs from "fs";
|
|
@@ -23,12 +24,17 @@ async function build() {
|
|
|
23
24
|
force: true,
|
|
24
25
|
});
|
|
25
26
|
|
|
27
|
+
// Bundle css (incl. theme.css, the mode-aware wa-dark / wa-light overrides loaded after material.css)
|
|
28
|
+
await bundle_css("src/css");
|
|
29
|
+
|
|
26
30
|
// Copy HTML
|
|
27
31
|
await cpy("src/html/*", "dist/");
|
|
28
32
|
|
|
29
33
|
// Copy images
|
|
30
|
-
fs.
|
|
31
|
-
|
|
34
|
+
if (fs.existsSync("src/img")) {
|
|
35
|
+
fs.mkdirSync("dist/img", { recursive: true });
|
|
36
|
+
await cpy("src/img/*", "dist/img");
|
|
37
|
+
}
|
|
32
38
|
|
|
33
39
|
await cpy("node_modules/regular-table/dist/css/material.css", "dist/css", {
|
|
34
40
|
flat: true,
|
|
@@ -45,4 +51,4 @@ async function build() {
|
|
|
45
51
|
});
|
|
46
52
|
}
|
|
47
53
|
|
|
48
|
-
build();
|
|
54
|
+
await build();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spaday-regular-table",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "regular-table for spaday",
|
|
5
5
|
"repository": "git@github.com:1kbgz/spaday-regular-table.git",
|
|
6
6
|
"author": "1kbgz <dev@1kbgz.com>",
|
|
@@ -18,8 +18,7 @@
|
|
|
18
18
|
"./package.json": "./package.json"
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
|
-
"dist/**/*"
|
|
22
|
-
"index.d.ts"
|
|
21
|
+
"dist/**/*"
|
|
23
22
|
],
|
|
24
23
|
"types": "./dist/esm/index.d.ts",
|
|
25
24
|
"publishConfig": {
|
|
@@ -27,7 +26,9 @@
|
|
|
27
26
|
},
|
|
28
27
|
"scripts": {
|
|
29
28
|
"build:debug": "node build.mjs --debug",
|
|
30
|
-
"build": "node build.mjs",
|
|
29
|
+
"build:prod": "node build.mjs",
|
|
30
|
+
"build:types": "tsc",
|
|
31
|
+
"build": "npm-run-all build:prod build:types",
|
|
31
32
|
"clean": "rm -rf dist playwright-report ../spaday_regular_table/extension",
|
|
32
33
|
"dev": "npm-run-all -p start watch",
|
|
33
34
|
"lint": "oxlint . && oxfmt --check \"src/**/*.{js,ts,jsx,tsx,css}\" \"tests/**/*.{js,ts,jsx,tsx}\" \"*.mjs\" \"*.json\"",
|
|
@@ -40,13 +41,14 @@
|
|
|
40
41
|
"watch": "nodemon --watch src -e ts,css,html --exec \"pnpm build:debug\""
|
|
41
42
|
},
|
|
42
43
|
"dependencies": {
|
|
43
|
-
"regular-table": "
|
|
44
|
+
"regular-table": "=0.9.0"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
47
|
"@playwright/test": "^1.62.0",
|
|
47
48
|
"cpy": "^13.2.2",
|
|
48
49
|
"esbuild": "^0.28.1",
|
|
49
50
|
"http-server": "^14.1.1",
|
|
51
|
+
"lightningcss": "^1.33.0",
|
|
50
52
|
"nodemon": "^3.1.10",
|
|
51
53
|
"npm-run-all": "^4.1.5",
|
|
52
54
|
"oxfmt": "^0.63.0",
|
|
@@ -9,7 +9,7 @@ importers:
|
|
|
9
9
|
.:
|
|
10
10
|
dependencies:
|
|
11
11
|
regular-table:
|
|
12
|
-
specifier:
|
|
12
|
+
specifier: '=0.9.0'
|
|
13
13
|
version: 0.9.0
|
|
14
14
|
devDependencies:
|
|
15
15
|
'@playwright/test':
|
|
@@ -24,6 +24,9 @@ importers:
|
|
|
24
24
|
http-server:
|
|
25
25
|
specifier: ^14.1.1
|
|
26
26
|
version: 14.1.1(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)
|
|
27
|
+
lightningcss:
|
|
28
|
+
specifier: ^1.33.0
|
|
29
|
+
version: 1.33.0
|
|
27
30
|
nodemon:
|
|
28
31
|
specifier: ^3.1.10
|
|
29
32
|
version: 3.1.14
|
|
@@ -725,6 +728,10 @@ packages:
|
|
|
725
728
|
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
|
|
726
729
|
engines: {node: '>= 0.4'}
|
|
727
730
|
|
|
731
|
+
detect-libc@2.1.2:
|
|
732
|
+
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
|
|
733
|
+
engines: {node: '>=8'}
|
|
734
|
+
|
|
728
735
|
dunder-proto@1.0.1:
|
|
729
736
|
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
|
|
730
737
|
engines: {node: '>= 0.4'}
|
|
@@ -1045,6 +1052,80 @@ packages:
|
|
|
1045
1052
|
resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==}
|
|
1046
1053
|
engines: {node: '>=12.20'}
|
|
1047
1054
|
|
|
1055
|
+
lightningcss-android-arm64@1.33.0:
|
|
1056
|
+
resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==}
|
|
1057
|
+
engines: {node: '>= 12.0.0'}
|
|
1058
|
+
cpu: [arm64]
|
|
1059
|
+
os: [android]
|
|
1060
|
+
|
|
1061
|
+
lightningcss-darwin-arm64@1.33.0:
|
|
1062
|
+
resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==}
|
|
1063
|
+
engines: {node: '>= 12.0.0'}
|
|
1064
|
+
cpu: [arm64]
|
|
1065
|
+
os: [darwin]
|
|
1066
|
+
|
|
1067
|
+
lightningcss-darwin-x64@1.33.0:
|
|
1068
|
+
resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==}
|
|
1069
|
+
engines: {node: '>= 12.0.0'}
|
|
1070
|
+
cpu: [x64]
|
|
1071
|
+
os: [darwin]
|
|
1072
|
+
|
|
1073
|
+
lightningcss-freebsd-x64@1.33.0:
|
|
1074
|
+
resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==}
|
|
1075
|
+
engines: {node: '>= 12.0.0'}
|
|
1076
|
+
cpu: [x64]
|
|
1077
|
+
os: [freebsd]
|
|
1078
|
+
|
|
1079
|
+
lightningcss-linux-arm-gnueabihf@1.33.0:
|
|
1080
|
+
resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==}
|
|
1081
|
+
engines: {node: '>= 12.0.0'}
|
|
1082
|
+
cpu: [arm]
|
|
1083
|
+
os: [linux]
|
|
1084
|
+
|
|
1085
|
+
lightningcss-linux-arm64-gnu@1.33.0:
|
|
1086
|
+
resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==}
|
|
1087
|
+
engines: {node: '>= 12.0.0'}
|
|
1088
|
+
cpu: [arm64]
|
|
1089
|
+
os: [linux]
|
|
1090
|
+
libc: [glibc]
|
|
1091
|
+
|
|
1092
|
+
lightningcss-linux-arm64-musl@1.33.0:
|
|
1093
|
+
resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==}
|
|
1094
|
+
engines: {node: '>= 12.0.0'}
|
|
1095
|
+
cpu: [arm64]
|
|
1096
|
+
os: [linux]
|
|
1097
|
+
libc: [musl]
|
|
1098
|
+
|
|
1099
|
+
lightningcss-linux-x64-gnu@1.33.0:
|
|
1100
|
+
resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==}
|
|
1101
|
+
engines: {node: '>= 12.0.0'}
|
|
1102
|
+
cpu: [x64]
|
|
1103
|
+
os: [linux]
|
|
1104
|
+
libc: [glibc]
|
|
1105
|
+
|
|
1106
|
+
lightningcss-linux-x64-musl@1.33.0:
|
|
1107
|
+
resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==}
|
|
1108
|
+
engines: {node: '>= 12.0.0'}
|
|
1109
|
+
cpu: [x64]
|
|
1110
|
+
os: [linux]
|
|
1111
|
+
libc: [musl]
|
|
1112
|
+
|
|
1113
|
+
lightningcss-win32-arm64-msvc@1.33.0:
|
|
1114
|
+
resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==}
|
|
1115
|
+
engines: {node: '>= 12.0.0'}
|
|
1116
|
+
cpu: [arm64]
|
|
1117
|
+
os: [win32]
|
|
1118
|
+
|
|
1119
|
+
lightningcss-win32-x64-msvc@1.33.0:
|
|
1120
|
+
resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==}
|
|
1121
|
+
engines: {node: '>= 12.0.0'}
|
|
1122
|
+
cpu: [x64]
|
|
1123
|
+
os: [win32]
|
|
1124
|
+
|
|
1125
|
+
lightningcss@1.33.0:
|
|
1126
|
+
resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==}
|
|
1127
|
+
engines: {node: '>= 12.0.0'}
|
|
1128
|
+
|
|
1048
1129
|
load-json-file@4.0.0:
|
|
1049
1130
|
resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
|
|
1050
1131
|
engines: {node: '>=4'}
|
|
@@ -1906,6 +1987,8 @@ snapshots:
|
|
|
1906
1987
|
has-property-descriptors: 1.0.2
|
|
1907
1988
|
object-keys: 1.1.1
|
|
1908
1989
|
|
|
1990
|
+
detect-libc@2.1.2: {}
|
|
1991
|
+
|
|
1909
1992
|
dunder-proto@1.0.1:
|
|
1910
1993
|
dependencies:
|
|
1911
1994
|
call-bind-apply-helpers: 1.0.2
|
|
@@ -2332,6 +2415,55 @@ snapshots:
|
|
|
2332
2415
|
|
|
2333
2416
|
junk@4.0.1: {}
|
|
2334
2417
|
|
|
2418
|
+
lightningcss-android-arm64@1.33.0:
|
|
2419
|
+
optional: true
|
|
2420
|
+
|
|
2421
|
+
lightningcss-darwin-arm64@1.33.0:
|
|
2422
|
+
optional: true
|
|
2423
|
+
|
|
2424
|
+
lightningcss-darwin-x64@1.33.0:
|
|
2425
|
+
optional: true
|
|
2426
|
+
|
|
2427
|
+
lightningcss-freebsd-x64@1.33.0:
|
|
2428
|
+
optional: true
|
|
2429
|
+
|
|
2430
|
+
lightningcss-linux-arm-gnueabihf@1.33.0:
|
|
2431
|
+
optional: true
|
|
2432
|
+
|
|
2433
|
+
lightningcss-linux-arm64-gnu@1.33.0:
|
|
2434
|
+
optional: true
|
|
2435
|
+
|
|
2436
|
+
lightningcss-linux-arm64-musl@1.33.0:
|
|
2437
|
+
optional: true
|
|
2438
|
+
|
|
2439
|
+
lightningcss-linux-x64-gnu@1.33.0:
|
|
2440
|
+
optional: true
|
|
2441
|
+
|
|
2442
|
+
lightningcss-linux-x64-musl@1.33.0:
|
|
2443
|
+
optional: true
|
|
2444
|
+
|
|
2445
|
+
lightningcss-win32-arm64-msvc@1.33.0:
|
|
2446
|
+
optional: true
|
|
2447
|
+
|
|
2448
|
+
lightningcss-win32-x64-msvc@1.33.0:
|
|
2449
|
+
optional: true
|
|
2450
|
+
|
|
2451
|
+
lightningcss@1.33.0:
|
|
2452
|
+
dependencies:
|
|
2453
|
+
detect-libc: 2.1.2
|
|
2454
|
+
optionalDependencies:
|
|
2455
|
+
lightningcss-android-arm64: 1.33.0
|
|
2456
|
+
lightningcss-darwin-arm64: 1.33.0
|
|
2457
|
+
lightningcss-darwin-x64: 1.33.0
|
|
2458
|
+
lightningcss-freebsd-x64: 1.33.0
|
|
2459
|
+
lightningcss-linux-arm-gnueabihf: 1.33.0
|
|
2460
|
+
lightningcss-linux-arm64-gnu: 1.33.0
|
|
2461
|
+
lightningcss-linux-arm64-musl: 1.33.0
|
|
2462
|
+
lightningcss-linux-x64-gnu: 1.33.0
|
|
2463
|
+
lightningcss-linux-x64-musl: 1.33.0
|
|
2464
|
+
lightningcss-win32-arm64-msvc: 1.33.0
|
|
2465
|
+
lightningcss-win32-x64-msvc: 1.33.0
|
|
2466
|
+
|
|
2335
2467
|
load-json-file@4.0.0:
|
|
2336
2468
|
dependencies:
|
|
2337
2469
|
graceful-fs: 4.2.11
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* Mode-aware colors for regular-table's material theme, following spaday's page-mode
|
|
2
|
+
* convention: `wa-dark` on the root re-themes the table, `wa-light` flips a nested
|
|
3
|
+
* island back. Values defer to the spaday shell's --spa-* tokens where one fits, so an
|
|
4
|
+
* application that re-themes the shell carries the table with it; the fallbacks keep a
|
|
5
|
+
* standalone page coherent. Loaded after material.css — selectors match its rules so
|
|
6
|
+
* these win the cascade. */
|
|
7
|
+
|
|
8
|
+
regular-table table {
|
|
9
|
+
color: var(--spa-muted, #666);
|
|
10
|
+
}
|
|
11
|
+
regular-table thead tr:last-child th {
|
|
12
|
+
border-bottom: 1px solid var(--spa-border, #ddd);
|
|
13
|
+
}
|
|
14
|
+
regular-table tr:hover td {
|
|
15
|
+
background: var(--spa-surface-2, #eee);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
:where(.wa-dark) regular-table table {
|
|
19
|
+
color: var(--spa-muted, #9aa3ad);
|
|
20
|
+
}
|
|
21
|
+
:where(.wa-dark) regular-table thead tr:last-child th {
|
|
22
|
+
border-bottom: 1px solid var(--spa-border, #333b45);
|
|
23
|
+
}
|
|
24
|
+
:where(.wa-dark) regular-table tr:hover td {
|
|
25
|
+
background: var(--spa-surface-2, #1d232b);
|
|
26
|
+
}
|
|
27
|
+
:where(.wa-dark) regular-table tr:hover {
|
|
28
|
+
color: #dfe3e8;
|
|
29
|
+
}
|
|
30
|
+
:where(.wa-dark) regular-table:hover {
|
|
31
|
+
scrollbar-color: rgba(255, 255, 255, 0.3) transparent;
|
|
32
|
+
}
|
|
33
|
+
:where(.wa-dark) regular-table:hover::-webkit-scrollbar-thumb {
|
|
34
|
+
background-color: rgba(255, 255, 255, 0.15);
|
|
35
|
+
}
|
|
36
|
+
:where(.wa-dark) regular-table::-webkit-scrollbar-thumb:hover {
|
|
37
|
+
background-color: rgba(255, 255, 255, 0.3);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
:where(.wa-light) regular-table table {
|
|
41
|
+
color: var(--spa-muted, #666);
|
|
42
|
+
}
|
|
43
|
+
:where(.wa-light) regular-table thead tr:last-child th {
|
|
44
|
+
border-bottom: 1px solid var(--spa-border, #ddd);
|
|
45
|
+
}
|
|
46
|
+
:where(.wa-light) regular-table tr:hover td {
|
|
47
|
+
background: var(--spa-surface-2, #eee);
|
|
48
|
+
}
|
|
49
|
+
:where(.wa-light) regular-table tr:hover {
|
|
50
|
+
color: #333;
|
|
51
|
+
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
8
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="css/material.css" />
|
|
10
|
+
<link rel="stylesheet" type="text/css" href="css/theme.css" />
|
|
10
11
|
<script type="module" src="cdn/index.js"></script>
|
|
11
12
|
</head>
|
|
12
13
|
<body></body>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// The regular-table engine registers the <regular-table> custom element as an import
|
|
2
|
+
// side effect, and other bundles inline their own copy of the engine (notably
|
|
3
|
+
// spaday-perspective, whose viewer-datagrid plugin bundles regular-table). Whichever
|
|
4
|
+
// bundle loads second would throw NotSupportedError from customElements.define and die
|
|
5
|
+
// wholesale. Make define idempotent while our engine import runs so the first
|
|
6
|
+
// registration of a tag wins and later duplicates are ignored instead of fatal.
|
|
7
|
+
const original = customElements.define.bind(customElements);
|
|
8
|
+
|
|
9
|
+
customElements.define = (
|
|
10
|
+
name: string,
|
|
11
|
+
ctor: CustomElementConstructor,
|
|
12
|
+
options?: ElementDefinitionOptions,
|
|
13
|
+
) => {
|
|
14
|
+
if (!customElements.get(name)) original(name, ctor, options);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export function restoreDefine(): void {
|
|
18
|
+
customElements.define = original;
|
|
19
|
+
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
// the guard must execute before the engine import registers its element
|
|
2
|
+
import { restoreDefine } from "./define-guard";
|
|
1
3
|
import "regular-table";
|
|
2
4
|
import type { RegularTableElement } from "regular-table";
|
|
3
5
|
|
|
6
|
+
restoreDefine();
|
|
7
|
+
|
|
4
8
|
type Row = Record<string, unknown>;
|
|
5
9
|
type CellRenderer = {
|
|
6
10
|
tag?: string;
|
|
@@ -169,3 +169,75 @@ test("runs the Python table with streaming and row actions", async ({
|
|
|
169
169
|
await page.getByRole("button", { name: "Insert row" }).click();
|
|
170
170
|
await expect(page.locator(".action-status")).toContainText("Server inserted");
|
|
171
171
|
});
|
|
172
|
+
|
|
173
|
+
test("the material theme follows the wa-dark page mode", async ({ page }) => {
|
|
174
|
+
await page.goto("/dist/index.html");
|
|
175
|
+
await page.evaluate(() => {
|
|
176
|
+
const table = document.createElement("spaday-regular-table");
|
|
177
|
+
table.style.cssText = "display:block;width:400px;height:200px";
|
|
178
|
+
table.columns = ["id"];
|
|
179
|
+
table.rows = [{ id: 1 }, { id: 2 }];
|
|
180
|
+
document.body.appendChild(table);
|
|
181
|
+
});
|
|
182
|
+
const th = page
|
|
183
|
+
.locator("spaday-regular-table thead tr:last-child th")
|
|
184
|
+
.first();
|
|
185
|
+
const inner = page.locator("spaday-regular-table table").first();
|
|
186
|
+
await expect(th).toBeVisible();
|
|
187
|
+
await expect(th).toHaveCSS("border-bottom-color", "rgb(221, 221, 221)"); // material's light #ddd
|
|
188
|
+
await expect(inner).toHaveCSS("color", "rgb(102, 102, 102)"); // #666
|
|
189
|
+
|
|
190
|
+
await page.evaluate(() => document.documentElement.classList.add("wa-dark"));
|
|
191
|
+
await expect(th).toHaveCSS("border-bottom-color", "rgb(51, 59, 69)"); // #333b45, the shell's dark border
|
|
192
|
+
await expect(inner).toHaveCSS("color", "rgb(154, 163, 173)"); // #9aa3ad, the shell's dark muted
|
|
193
|
+
|
|
194
|
+
// a wa-light island flips back
|
|
195
|
+
await page.evaluate(() => {
|
|
196
|
+
const island = document.createElement("div");
|
|
197
|
+
island.className = "wa-light";
|
|
198
|
+
island.appendChild(document.querySelector("spaday-regular-table"));
|
|
199
|
+
document.body.appendChild(island);
|
|
200
|
+
});
|
|
201
|
+
await expect(th).toHaveCSS("border-bottom-color", "rgb(221, 221, 221)");
|
|
202
|
+
|
|
203
|
+
await page.evaluate(() =>
|
|
204
|
+
document.documentElement.classList.remove("wa-dark"),
|
|
205
|
+
);
|
|
206
|
+
await expect(inner).toHaveCSS("color", "rgb(102, 102, 102)");
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
test("survives another bundle registering regular-table first", async ({
|
|
210
|
+
page,
|
|
211
|
+
}) => {
|
|
212
|
+
await page.goto("/dist/index.html");
|
|
213
|
+
const r = await page.evaluate(async () => {
|
|
214
|
+
// simulate spaday-perspective's viewer-datagrid having won the registration
|
|
215
|
+
// race for the regular-table engine element
|
|
216
|
+
const rig = document.createElement("iframe");
|
|
217
|
+
document.body.appendChild(rig);
|
|
218
|
+
const win = rig.contentWindow;
|
|
219
|
+
const errors = [];
|
|
220
|
+
win.addEventListener("error", (e) => errors.push(String(e.message)));
|
|
221
|
+
win.customElements.define(
|
|
222
|
+
"regular-table",
|
|
223
|
+
class extends win.HTMLElement {},
|
|
224
|
+
);
|
|
225
|
+
let imported = true;
|
|
226
|
+
try {
|
|
227
|
+
await win.eval(`import("${location.origin}/dist/cdn/index.js")`);
|
|
228
|
+
} catch (error) {
|
|
229
|
+
imported = false;
|
|
230
|
+
errors.push(String(error));
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
imported,
|
|
234
|
+
wrapperDefined: !!win.customElements.get("spaday-regular-table"),
|
|
235
|
+
defineRestored: String(win.customElements.define).includes("native code"),
|
|
236
|
+
errors,
|
|
237
|
+
};
|
|
238
|
+
});
|
|
239
|
+
expect(r.errors).toEqual([]);
|
|
240
|
+
expect(r.imported).toBe(true); // the bundle no longer dies on the duplicate define
|
|
241
|
+
expect(r.wrapperDefined).toBe(true);
|
|
242
|
+
expect(r.defineRestored).toBe(true); // the guard did not leak past the engine import
|
|
243
|
+
});
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
"noFallthroughCasesInSwitch": true,
|
|
15
15
|
"outDir": "./dist/esm",
|
|
16
16
|
"resolveJsonModule": true,
|
|
17
|
-
"rootDir": "
|
|
17
|
+
"rootDir": "./src/ts",
|
|
18
18
|
"skipLibCheck": true,
|
|
19
19
|
"strict": true,
|
|
20
20
|
"target": "ES2020",
|
|
21
21
|
"useDefineForClassFields": true
|
|
22
22
|
},
|
|
23
|
-
"include": ["./src/ts/*.ts"
|
|
23
|
+
"include": ["./src/ts/*.ts"]
|
|
24
24
|
}
|
|
@@ -13,7 +13,7 @@ authors = [
|
|
|
13
13
|
description = "regular-table for spaday"
|
|
14
14
|
readme = "README.md"
|
|
15
15
|
license = { text = "Apache-2.0" }
|
|
16
|
-
version = "0.2.
|
|
16
|
+
version = "0.2.1"
|
|
17
17
|
requires-python = ">=3.11"
|
|
18
18
|
keywords = []
|
|
19
19
|
|
|
@@ -30,7 +30,7 @@ classifiers = [
|
|
|
30
30
|
]
|
|
31
31
|
|
|
32
32
|
dependencies = [
|
|
33
|
-
"spaday>=0.6.0",
|
|
33
|
+
"spaday>=0.6.0,<1.0",
|
|
34
34
|
]
|
|
35
35
|
|
|
36
36
|
[project.entry-points."spaday.component_packages"]
|
|
@@ -69,7 +69,7 @@ Repository = "https://github.com/1kbgz/spaday-regular-table"
|
|
|
69
69
|
Homepage = "https://github.com/1kbgz/spaday-regular-table"
|
|
70
70
|
|
|
71
71
|
[tool.bumpversion]
|
|
72
|
-
current_version = "0.2.
|
|
72
|
+
current_version = "0.2.1"
|
|
73
73
|
commit = true
|
|
74
74
|
tag = true
|
|
75
75
|
commit_args = "-s"
|
|
@@ -6,7 +6,7 @@ from spaday.component import Child
|
|
|
6
6
|
|
|
7
7
|
from .components import SpadayRegularTable
|
|
8
8
|
|
|
9
|
-
__version__ = "0.2.
|
|
9
|
+
__version__ = "0.2.1"
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class RegularTable(SpadayRegularTable):
|
|
@@ -42,7 +42,7 @@ class RegularTable(SpadayRegularTable):
|
|
|
42
42
|
package = ComponentPackage(
|
|
43
43
|
name="regular-table",
|
|
44
44
|
assets_dir=Path(__file__).parent / "extension",
|
|
45
|
-
assets=(("css", "css/material.css"), ("js", "cdn/index.js")),
|
|
45
|
+
assets=(("css", "css/material.css"), ("css", "css/theme.css"), ("js", "cdn/index.js")),
|
|
46
46
|
components=(RegularTable,),
|
|
47
47
|
)
|
|
48
48
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var K=customElements.define.bind(customElements);customElements.define=(e,t,i)=>{customElements.get(e)||K(e,t,i)};function Y(){customElements.define=K}var q=0,$=0,J=performance.now();function it(){let e=performance.now(),t=e-J,i=q,s=$*1e3/t,r=1e3/i,l=$;return q=0,$=0,J=e,{avg:i,real_fps:s,virtual_fps:r,num_frames:l,elapsed:t}}function st(e){q=(q*$+e)/($+1),$+=1}var T=new Map;async function rt(e){return await new Promise(requestAnimationFrame),await T.get(e)?.promise}async function B(e,t){if(T.has(e)&&(await T.get(e)?.promise,T.has(e))){await T.get(e)?.promise;return}T.set(e,Promise.withResolvers());try{return await t()}finally{let i=T.get(e);T.delete(e),i?.resolve(void 0)}}var lt=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,ht=lt?5e6:1e7,ot=":host{position:absolute;top:0px;left:0px;right:0px;bottom:0px;overflow:scroll;overflow-anchor:none;overscroll-behavior:none;-webkit-overflow-scrolling:touch;}div.rt-virtual-panel{position:absolute;top:0;left:0;right:0;pointer-events:none;}div.rt-scroll-table-clip{position:sticky;contain:strict;overflow-anchor:none;width:100%;height:100%;}slot{position:absolute;overflow:hidden;overflow-anchor:none;}",nt=":host ::slotted(table){--regular-table--transform-x:0px;--regular-table--transform-y:0px;--regular-table--clip-x:0px;--regular-table--clip-y:0px;}",at="--regular-table--clip-x",dt="--regular-table--clip-y",ct="--regular-table--transform-x",ut="--regular-table--transform-y",mt='<div class="rt-virtual-panel"></div><div class="rt-scroll-table-clip"><slot></slot></div>',_t=1,ft=class extends HTMLElement{f;a;i;r;G;q;_;b;p;U;s;e;t;it;st;table_model;n;T;Y;h;o;async draw(e={}){return typeof e.throttle<"u"&&!e.throttle?await Z.call(this,e):await B(this,()=>Z.call(this,e))}async flush(){do await rt(this);while(this.T)}async predraw(e,t,i={}){let{invalid_viewport:s=!0,preserve_width:r=!1,cache:l=!1,scroll_left:h=this.scrollLeft,scroll_top:o=this.scrollTop,container_height:d=t,throttle:c}=i,n=()=>Object.assign(()=>!0,{inline:!0}),a=async()=>(await this.draw({invalid_viewport:s,preserve_width:r,cache:l,throttle:c}),n());if(!this.t)return console.warn("data listener not configured"),n();let{num_columns:m,num_rows:g}=await this.j(l);if(!this.e.row_height)return await a();let u=g||0,v=m||0,f=this.K(()=>e,()=>t,()=>d);this.r=f;let _=Math.round(this.P(u)),x=Number.isFinite(f.containerHeight)?Math.min(o,Math.max(0,_-f.containerHeight)):o,w,y,L=!1,b=!1;for(let z=0;z<2;z++){let H=this.t.row_headers_length,C=this.Z(u,v,x,h),k=this.Ce(C,v);if(k===void 0)return await a();if(C.end_col=Math.min(v,k+_t),z===0){let{invalid_row:M,invalid_column:R}=this.J(C);b=!!(this.p||R),L=b||M||s}else if(Math.floor(C.start_col)===Math.floor(w.start_col)&&Math.ceil(C.end_col)<=Math.ceil(w.end_col)){C.end_col=w.end_col,w=C;break}if(w=C,!L)break;y=await this.t.view(Math.floor(w.start_col),Math.floor(w.start_row),Math.ceil(w.end_col),Math.ceil(w.end_row));let p=y.num_row_headers??y.row_headers?.[0]?.length??0;if(p===H)break;this.t.row_headers_length=p}let S=this.t;return Object.assign(()=>{if(this.r=f,this.Q(w),this.ee(s,u,v,r),!L||y===void 0)return this.w(w),!0;let z=!0,H=()=>{z&&(this.w(w),z=!1);for(let k of this.n)k({detail:this})},C=this.table_model.draw_sync(f,S,this.U,r,w,v,y,H);return this.te(w,u,v,r,b),S===this.t&&(this.p=!1),C||this.draw({invalid_viewport:!0}),C},{inline:!1})}async j(e){e||this.table_model.Te();let t=await this.table_model.Se(this.t);return this.Y=t.num_columns||0,this.e.row_height=t.row_height||this.e.row_height,t.num_row_headers!==void 0&&(this.t.row_headers_length=t.num_row_headers),t.num_column_headers!==void 0&&(this.t.column_headers_length=t.num_column_headers),t}K(e,t,i){let s=this.i==="none"||this.i==="horizontal";return{width:this.i==="none"||this.i==="vertical"?1/0:e(),height:s?1/0:t(),containerHeight:s?1/0:i()}}ee(e,t,i,s){this.ie(t),s||this.se(e,i)}te(e,t,i,s,r){this.w(e);let l=this.e.row_height;this.table_model.header.reset_header_cache(),l!==this.e.row_height&&this.ie(t),s||this.se(r,i)}Ce(e,t){if(this.i==="none"||this.i==="vertical")return e.end_col;let{indices:i,override:s}=this.e,r=n=>s[n]??i[n],l=this.t.row_headers_length,h=0;for(let n=0;n<l;n++){let a=r(n);if(a===void 0)return;h+=a}let o=Math.floor(e.start_col),d=i[l+o]??0,c=o;for(;c<t&&h-d<=this.r.width;){let n=r(l+c);if(n===void 0)return;h+=n,c++}return c}Ee(){if(this._===void 0||this.b===void 0||!this.t||this.i==="none"||this.i==="vertical"||this.b>=(this.Y??0))return;let{indices:e,override:t}=this.e,i=this.t.row_headers_length,s=0;for(let l=0;l<i;l++)s+=e[l]||0;for(let l=this._;l<this.b;l++){let h=i+l,o=t[h]??e[h];if(o===void 0)return;s+=o}let r=e[i+this._];s-(r??0)<=this.r.width&&this.draw({invalid_viewport:!0})}xe(){if(!this.o){this.o=[document.createElement("table"),document.createElement("td")],this.o[0].style.visibility="hidden",this.o[0].style.position="absolute";let e=document.createElement("tbody"),t=document.createElement("tr");this.o[1].textContent="X",t.appendChild(this.o[1]),e.appendChild(t),this.o[0].appendChild(e)}this.appendChild(this.o[0]),this.e.row_height=this.o[1].offsetHeight,this.o[0].remove()}Le(){if(this.attachShadow({mode:"open"}),!this.shadowRoot)return;let e=new CSSStyleSheet;e.replaceSync(ot);let t=new CSSStyleSheet;t.replaceSync(nt),this.f=t.cssRules[0],this.shadowRoot.adoptedStyleSheets=[e,t],this.shadowRoot.innerHTML=mt;let[i,s]=this.shadowRoot.children;this.s=s,this.a=i,this.ne()}ne(){this.s&&(this.i==="both"||this.i==="vertical"?this.s.style.top="0px":this.s.style.removeProperty("top"),this.i==="both"||this.i==="horizontal"?this.s.style.left="0px":this.s.style.removeProperty("left"),this.i!=="both"?this.s.style.contain="none":this.s.style.removeProperty("contain"))}Z(e,t,i,s){let{start_row:r,end_row:l}=this.He(e,i),{start_col:h,end_col:o}=this.V(t,s);return{start_col:h,end_col:o,start_row:r,end_row:l}}J({start_col:e,end_col:t,start_row:i,end_row:s}){i=Math.floor(i),s=Math.ceil(s),e=Math.floor(e),t=Math.ceil(t);let r=this._!==e,l=this.G!==i||this.q!==s||this.b!==t;return{invalid_column:r,invalid_row:l}}Q({start_col:e,end_col:t,start_row:i,end_row:s}){this._=Math.floor(e),this.b=Math.ceil(t),this.G=Math.floor(i),this.q=Math.ceil(s)}se(e,t){if(e)if(this.i==="vertical"||this.i==="none"){let i=0;for(let s of this.e.indices)i+=s||0;this.a.style.width=i.toPrecision(10)+"px"}else{let i=this.Re(t);if(i!==0){let s=this.r.width+i+2;this.a.style.width=s.toPrecision(10)+"px"}else this.a.style.width="1px"}}ie(e){let t=this.P(e);this.a.style.height=`${t.toPrecision(10)}px`}P(e){let{row_height:t=0}=this.e,i=this.t.column_headers_length*t;return Math.min(ht,e*t+i)}w(e){let t=(this.e.row_height||0)*(e.start_row%1)||0,i=(this.table_model.c||0)+Math.floor(e.start_col),s=(this.e.indices[i]??this.table_model.Ae())*(e.start_col%1)||0;this.f.style.setProperty(at,`${s}px`),this.f.style.setProperty(dt,`${t}px`),this.f.style.setProperty(ct,`${-s}px`),this.f.style.setProperty(ut,`${-t}px`)}V(e,t){if(this.i==="none"||this.i==="vertical")return{start_col:0,end_col:1/0};{let i=this.Pe(t),s=this.table_model.num_columns()||Math.min(e,Math.ceil(this.r.width/60)),r=i+s+1;return{start_col:i,end_col:r}}}He(e,t){let{height:i,containerHeight:s}=this.r,r=this.e.row_height||0,l=this.t.column_headers_length,h=Math.round(this.P(e)),o=Math.max(1,h-s),d=Math.max(Math.ceil(t),0)/o,c=i/r-l,n=Math.max(0,(e||0)-c)*d,a=Math.max(0,Math.min(n+c,e));return{start_row:n,end_row:a}}Pe(e){let t=this.t.row_headers_length,i=0,s=0,r=0;for(;s<e;){let l=this.e.indices[i+t];r=e-s,i+=1,s+=l!==void 0?l:60}return i+=r/(this.e.indices[i+t-1]||60),Math.max(0,i-1)}Ve(e){let t=0;if(this.t.row_headers_length>0)for(let r of this.e.indices.slice(0,this.t.row_headers_length))t+=r||0;let i=this.t.row_headers_length,s=e;for(;t<this.r.width&&s>=0;)s--,t+=this.e.indices[s+i]||60;return Math.min(e-1,s+1)}Re(e){let t=this.t.row_headers_length,i=this.Ve(e),s=t,r=0;for(;s<i+t;)r+=this.e.indices[s]||60,s++;if(s<this.e.indices.length){let l=0,h=this.t.row_headers_length;for(let o=0;o<h&&o<this.e.indices.length;o++)l+=this.e.indices[o]||0;r+=Math.max(0,(this.e.indices[s]||0)-(this.r.width-(l||0))||0)}return r}};async function Z(e){let t=performance.now(),{invalid_viewport:i=!0,preserve_width:s=!1}=e,{num_columns:r,num_rows:l}=await this.j(e.cache);this.e.row_height||this.xe();let h=l||0,o=r||0;this.r=this.K(()=>this.s.clientWidth,()=>this.s.clientHeight,()=>this.clientHeight),this.ee(i,h,o,s);let d=this.Z(h,o,this.scrollTop,this.scrollLeft),{invalid_row:c,invalid_column:n}=this.J(d);this.Q(d);let a=this.p||n;if(a||c||i){let m=!0;await this.table_model.draw(this.r,this.t,this.U,s,d,o,async()=>{m&&(this.w(d),m=!1);for(let g of this.n)await g({detail:this})}),this.te(d,h,o,s,a),this.p=!1}else this.w(d);st(performance.now()-t)}var P=new WeakMap,N=new WeakMap,G=class{e;De;table;cells;rows;constructor(e,t,i){this.e=e,this.De=t,this.table=i,this.cells=[],this.rows=[]}num_columns(){return this.S(Math.max(0,this.rows.length-1)).row_container.length}num_rows(){return this.cells.length}nt(e,t){P.set(e,t)}D(e,t){let i=N.get(e);i!==t&&(i!==void 0&&e.classList.remove(`rt-col-${i}`),e.classList.add(`rt-col-${t}`),N.set(e,t))}g(e){let t=N.get(e);t!==void 0&&(e.classList.remove(`rt-col-${t}`),N.delete(e))}M(e){if(!e)return{value:void 0};let t=P.get(e);return t||(t={value:void 0},P.set(e,t)),t}re(e,t){let{tr:i,row_container:s}=this.S(e),r=s[t];return r&&(i.removeChild(r),s.splice(t,1,void 0)),r}v(e,t){if(!(e<0||t<0))return this.cells[e]?.[t]}S(e){let t=this.rows[e];t||(t=this.rows[e]=document.createElement("tr"),this.table.appendChild(t));let i=this.cells[e];return i||(i=this.cells[e]=[]),{tr:t,row_container:i}}z(e="TD",t,i){let{tr:s,row_container:r}=this.S(t),l=r[i];if(!l)if(i<r.length){l=r[i]=document.createElement(e);let h=r.slice(i+1).find(o=>o);s.insertBefore(l,h||null)}else l=r[i]=document.createElement(e),s.appendChild(l);if(l.tagName!==e){let h=document.createElement(e);s.replaceChild(h,l),this.cells[t].splice(i,1,h),l=h}return l}oe(e){for(let t=0;t<this.rows.length;t++){let i=this.rows[t],s=this.cells[t];s.length=(Array.isArray(e)?e[t]:e)||0;let r=this.cells[t].filter(h=>h!==void 0).length,l=[];for(let h=r;h<i.children.length;h++)l.push(i.children[h]);for(let h of l)h.remove()}}E(e){e=Math.min(e,this.rows.length);let t=[];for(let i=e;i<this.table.children.length;i++)t.push(this.table.children[i]);for(let i of t)i.remove();this.rows.length=e,this.cells.length=e}},wt=!1,gt=class extends ft{le;ae;he;de;L;O;ce;ue;register_listeners(){this.addEventListener("mousedown",this.ze.bind(this)),this.addEventListener("scroll",this.W.bind(this),{passive:!0}),this.Oe()}async W(e){if(e.stopPropagation(),this.ce=this.scrollLeft,this.ue=this.scrollTop,this.T){this.O=!0;return}this.T=!0;let t=this.s.clientWidth,i=this.s.clientHeight,s=this.clientHeight;try{await B(this,async()=>{do{this.O=!1;let r=await this.predraw(t,i,{invalid_viewport:!1,cache:!0,throttle:!1,container_height:s,scroll_left:this.ce,scroll_top:this.ue});r.inline||(await new Promise(requestAnimationFrame),r())}while(this.O)})}finally{this.T=!1}this.dispatchEvent(new CustomEvent("regular-table-scroll"))}Oe(){this.addEventListener("mousewheel",this.We.bind(this),{passive:!0}),wt&&(this.addEventListener("touchmove",this.ke.bind(this)),this.addEventListener("touchstart",this.Be.bind(this),{passive:!0}))}We(e){if(!window.hasOwnProperty("safari"))return;let t=e,{clientWidth:i,clientHeight:s,scrollTop:r,scrollLeft:l}=this;t.preventDefault(),t.returnValue=!1;let h=Math.max(1,this.a.offsetHeight-s),o=Math.max(1,this.a.offsetWidth-i);this.scrollTop=Math.max(0,Math.min(h,r+t.deltaY)),this.scrollLeft=Math.max(0,Math.min(o,l+t.deltaX)),this.W(t)}ke(e){e.stopPropagation(),e.preventDefault(),e.returnValue=!1;let{clientWidth:t,clientHeight:i}=this,s=Math.max(1,this.a.offsetHeight-i),r=Math.max(1,this.a.offsetWidth-t);this.scrollTop=Math.min(s,(this.le||0)+((this.he||0)-e.touches[0].pageY)),this.scrollLeft=Math.min(r,(this.ae||0)+((this.de||0)-e.touches[0].pageX)),this.W(e)}Be(e){this.he=e.touches[0].pageY,this.de=e.touches[0].pageX,this.le=this.scrollTop,this.ae=this.scrollLeft}async Fe(e){let t=e.target,i=t.classList.contains("rt-column-resize");for(;t.tagName!=="TD"&&t.tagName!=="TH";)if(t=t.parentElement,!this.contains(t))return;let s=P.get(t);if(i&&s){e.stopImmediatePropagation(),e.shiftKey?(this.e.override={},this.e.auto=[],this.e.indices=[]):(delete this.e.override[s.size_key],this.e.auto[s.size_key]=void 0,this.e.indices[s.size_key]=void 0),this.table_model.updateColumnWidthStyles({start_row:0,end_row:0,...this.V(0,this.scrollLeft)},this.t.row_headers_length);for(let r of e.shiftKey?[this.table_model.header.cells[this.table_model.header.cells.length-1],...this.table_model.body.cells]:this.table_model.body.cells)for(let l of e.shiftKey?r:[r[s.virtual_x]])l&&(l.classList.remove("rt-cell-clip"),this.h||this.table_model.body.g(l));await this.draw({cache:!0})}}async $e(e){if(e.button!==0)return;let t=e.target,i=t.classList.contains("rt-column-resize");for(;t.tagName!=="TD"&&t.tagName!=="TH";)if(t=t.parentElement,!this.contains(t))return;let s=P.get(t);i&&s&&(this.Ne(e,t,s),e.stopImmediatePropagation())}async ze(e){let t=performance.now();this.L&&t-this.L<500?(this.L=t,await this.Fe(e)):(this.L=t,await this.$e(e))}Ne(e,t,i){let{virtual_x:s,size_key:r}=i,l=e.pageX,h=(s||0)+t.colSpan-1,o=this.table_model.header.get_column_header(h),d=this.e.indices[r||0]||0,c=a=>B(this,async()=>await this.Ie(a,o,l,d,r||0,h)),n=()=>{document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",n);let a=this.e.override[r||0],m=this.e.indices[r||0]!==a;this.e.indices[r||0]=a,m&&this.draw({cache:!0})};document.addEventListener("mousemove",c),document.addEventListener("mouseup",n)}async Ie(e,t,i,s,r,l){await new Promise(requestAnimationFrame);let h=e.pageX-i,o=Math.max(1,s+h);if(this.e.override[r]=o,h<0)await this.draw({preserve_width:!0,throttle:!1,cache:!0});else{this.table_model.updateColumnWidthStyles({start_row:0,end_row:0,...this.V(0,this.scrollLeft)},this.t.row_headers_length);let d=(this.e.auto[r]||0)>o;t.classList.toggle("rt-cell-clip",d);for(let c of this.table_model.body.cells){let n=c[l];n&&(n.classList.toggle("rt-cell-clip",d),this.h||(d?this.table_model.body.D(n,r):this.table_model.body.g(n)))}}}},Q=new WeakMap,pt=class extends G{l;d;H;constructor(e,t,i,s){super(e,t,i),this.l=[],this.d=[],this.H=s}me(e,t,i){let s=this.z("TH",t,e[t]||0);e[t]+=1;let r=Q.get(s);if(r!==void 0&&r.value===i&&s.lastChild===r.resize&&s.firstChild===(i instanceof HTMLElement?i:r.span))return s;if(s.removeAttribute("colspan"),s.textContent="",r===void 0){let l=document.createElement("span");l.className="rt-column-resize",r={value:void 0,span:document.createElement("span"),resize:l},Q.set(s,r)}return i instanceof HTMLElement?s.appendChild(i):(r.span.textContent=String(i??""),s.appendChild(r.span)),s.appendChild(r.resize),r.value=i,s}Xe(e,t,i){let s=this.M(i);return this.g(i),s.column_header=e,s.value=t,s}Ge(e,t,i,s){let r=this.M(i);if(r.column_header=e,r.value=t,r.size_key=Array.isArray(s)?s[0]:s,!Array.isArray(s)||s.length<=1){this.D(i,r.size_key||0),this.H?.(i);let l=this.e.override[r.size_key||0],h=this.e.auto[r.size_key||0]||0;i.classList.toggle("rt-cell-clip",!!l&&h>l)}else this.g(i);return r}get_column_header(e){return this.z("TH",this.num_rows()-1,e)}draw(e,t,i,s,r,l,h,o,d){let c=t?.length;if(c===0)return;let n,a,m,g;o=typeof o>"u"?c-1:o;for(let u=0;u<c;u++){if(m=t[u]?t[u]:"",this.d[u]=this.d[u]||0,u<o)d&&this.l?.[u]?.[0]?.value===m?(n=this.l[u][1],this.l[u][2]+=1,i===1&&(this.l[u][0].row_header_x=Array.isArray(r)?r[0]:r)):(this.fe(u),n=this.me(this.d,u,m),a=this.Xe(t,m,n),this.l[u]=[a,n,1]);else{n=this.me(this.d,u,m),a=this.Ge(e.length>0?e:t,m,n,r),typeof g>"u"&&(g={th:n,metadata:a});for(let[v]of this.l)v.size_key=a.size_key;n.removeAttribute("colspan")}this.S(u).tr.classList.toggle("rt-autosize",u===o),n.classList.toggle("rt-group-corner",s===void 0),a&&(a.x=typeof s>"u"?s:Math.floor(s),a.column_header_y=u,a.x0=Math.floor(l),a.virtual_x=h,i===1?(a.type="corner",a.row_header_x=Array.isArray(r)?r[0]:r):(a.type="column_header",delete a.row_header_x))}return this.E(this.d.length),g=g||{th:n,metadata:a},g}fe(e){let t=this.l[e];if(!t)return;let[,i,s]=t;if(s>1){let r=String(s);i.getAttribute("colspan")!==r&&i.setAttribute("colspan",r)}else i.hasAttribute("colspan")&&i.removeAttribute("colspan")}flush_colspans(){for(let e=0;e<this.l.length;e++)this.fe(e)}clean(){this.flush_colspans(),this.oe(this.d)}reset_header_cache(){this.d=[],this.l=[]}},vt=class extends G{h;_e(e,t,i,s,{column_name:r},{ridx_offset:l},h){let o=this.z(e,t,s),d=this.M(o);d.y=t+Math.floor(l);let c=d.size_key=h||0;e==="TD"&&(d.column_header=r);let n=this.e.override[c],a=!!n&&(this.e.auto[c]||0)>n;return o.classList.toggle("rt-cell-clip",a),this.h||a?this.D(o,c):this.g(o),d.value!==i&&(i instanceof HTMLElement?(o.textContent="",o.appendChild(i)):o.textContent=String(i??"")),d.value=i,{td:o,metadata:d}}draw(e,t,i,s=!1,r,l,h,o){let{cidx:d,column_data:c,row_headers:n,column_data_listener_metadata:a}=t,{row_height:m}=i,g,u=[],v=[],f=0,_=[],x=s?i.row_headers_length??1:1,w=(i.ridx_offset??0)%1!==0?1:0,y=!1,L=Math.floor(i.ridx_offset),b=Math.ceil(i.y1),S=Math.ceil(i.x1),z=r===void 0?r:Math.floor(r),H=l===void 0?void 0:Math.floor(l),C=Math.floor((r??0)-(l??0));for(let p=0;p<x;p++){f=0,y=!1;let M=d+p;for(let R of c){let A;if(s){let E=R,O=E[p],j=u[p]||1,F=this.v(f-j,M),tt=this.M(F),U=_[f]||1,V=this.v(f,M-U),et=this.M(V);if(o&&V&&(et.value===O||O===void 0)&&!V.hasAttribute("rowspan")){let D=_[f]=U+1;V.setAttribute("colspan",String(D)),this.re(f,M)}else if(o&&F&&tt.value===O&&!F.hasAttribute("colspan")){let D=u[p]=j+1;F.setAttribute("rowspan",String(D)),this.re(f,M)}else{A=this._e("TH",f,O,M,t,i,p);let D=A.td,W=A.metadata;D.style.display="",D.removeAttribute("rowspan"),D.removeAttribute("colspan"),W.type="row_header",W.row_header=E,W.row_header_x=p,W.y0=L,W.y1=b,W.virtual_x=p,H!==void 0&&(W.x0=H),u[p]=1,_[f]=1,v[p]=A}}else{A=this._e("TD",f,R,d,t,i,h??0);let E=A.metadata;a&&(E.user=a[f]),E.type="body",E.x=z||0,E.x1=S,E.row_header=n?.[f]||[],E.y0=L,E.y1=b,E.dx=C,E.dy=(E.y??0)-L,E.virtual_x=d,H!==void 0&&(E.x0=H),v[0]=A}if(f++,g=A?A.metadata:g,m=m||A?.td.offsetHeight,(f-w)*(m??0)>e){y=!0;break}}}let k=y?f:f+w;if(k>f){let p=this.rows[f],M=this.rows[f-1];(o&&(i.row_headers_length??0)>0||!p||!M||p.children.length!==M.children.length||p.querySelector("[colspan],[rowspan]")!==null||M.querySelector("[colspan],[rowspan]")!==null)&&(k=f)}return this.E(k),{tds:v,ridx:k,drawn_ridx:f,row_height:m}}clean({ridx:e,cidx:t,drawn_ridx:i=e}){if(this.E(e),this.oe(t),i<this.rows.length){let s=this.rows[i],r=this.rows[i-1],l=n=>n?.children[n.children.length-1],h=l(s),o=l(r),d=h&&P.get(h),c=o&&P.get(o);(!d||!c||d.x!==c.x||s.children.length!==r.children.length)&&this.E(i)}}},yt=class{e;c=0;header;body;qe(e,t){let{start_row:i=0,start_col:s=0,end_col:r=0,end_row:l=0}=e,h=this.e.indices[(this.c||0)+Math.floor(e.start_col)]??0;return{viewport_width:0,selected_id:t,ridx_offset:i,sub_cell_offset:h,x0:s,x1:r,y1:l,row_height:this.e.row_height,row_headers_length:this.c}}Ae(){let e=0,t=0;for(let i of this.e.indices)i&&(e+=i,t++);return t?e/t:60}Ue(e,t,i,s,r,l,h,o,d,c){let n=[`${t}`],a=[],m={column_name:n,cidx:0,column_data:e,row_headers:e,first_col:!0},g=Math.floor(h),u=this.body.draw(s,m,{...r,x0:0},!0,void 0,void 0,g,c),v=[];for(let _=0;_<t;_++){let x=this.header.draw(n,Array(i).fill(""),1,void 0,_,h,_,o,d);x&&v.push(x)}for(let _=0;_<v.length;_++){let{th:x}=v[_];r.viewport_width+=this.e.indices[_]||x.offsetWidth}r.row_height=r.row_height||u.row_height;let f=e[0].length;if(!l)for(let _=0;_<t;_++){let{td:x,metadata:w}=u.tds[_]||{},{th:y,metadata:L}=v[_]||{};(x||y)&&a.push([y||x,L||w])}return{cont_body:u,first_col:!1,Ye:f,last_cells:a}}je(e,t,i,s,r,l){let h=0,o=0;for(;this.e.indices.length>r+l+h+1&&o+t.viewport_width<i;)h++,o+=this.e.indices[r+l+h]||0;if(o+t.viewport_width<i){let d=Math.min(s,e.start_col+5);e.end_col=Math.max(1,Math.min(s,d))}else e.end_col=Math.max(1,Math.min(s,e.start_col+h))}Ke(e,t,i,s,r,l,h,o,d,c){let n=t.column_headers?.[e]||[],a=t.data[e],m=t.metadata?.[e],g={column_name:n,cidx:i,column_data:a,column_data_listener_metadata:m,row_headers:t.row_headers,first_col:h},u=e+s,v=i+Math.floor(s),f=this.header.draw(n,n,void 0,u,v,s,i,o,d),_=this.body.draw(r,g,l,!1,u,s,v,c);return{cont_head:f,cont_body:_}}async Ze(e,t,i,s,r,l,h,o,d){let c=Math.max(s+Math.floor(d),0),n=structuredClone(e);n.start_col=c,this.je(n,r,l,h,o,d);let a=await t(Math.floor(n.start_col),Math.floor(n.start_row),Math.ceil(n.end_col),Math.ceil(n.end_row)),m,g;if(typeof a.column_header_merge_depth<"u"&&(m=a.column_header_merge_depth),typeof a.merge_headers<"u"&&(g=a.merge_headers),a.data.length===0)return{column_header_merge_depth:m,merge_headers:g};e.end_col=n.start_col+a.data.length;for(let u=0;u<a.data.length;u++)i.data[s+u]=a.data[u],a.metadata&&i.metadata&&(i.metadata[s+u]=a.metadata[u]),i.column_headers&&a.column_headers?.[u]&&(i.column_headers[s+u]=a.column_headers[u]);return{column_header_merge_depth:m,merge_headers:g}}R(e,t){this.body.clean({ridx:e?.ridx||0,cidx:t,drawn_ridx:e?.drawn_ridx??e?.ridx??0}),this.header.clean()}},bt=0,Mt=class extends yt{table;u;k=new Map;A=new Map;B;C;Je;m;be=new WeakSet;pe={};F=!1;we;constructor(e,t,i){super(),this.e=t,this.clear(i);let[s]=i.children,[r,l]=s.children;this.table=s,this.B=`rt-scope-${bt++}`,this.table.classList.add(this.B),this.m=new ResizeObserver(this.Qe.bind(this)),this.header=new pt(t,e,r,h=>this.H(h)),this.body=new vt(t,e,l)}dispose(){this.m?.disconnect()}H(e){!this.m||this.be.has(e)||(this.be.add(e),this.m.observe(e))}Qe(e){if(this.F){for(let s of e)this.m.unobserve(s.target),this.m.observe(s.target);return}let t=this.table.currentCSSZoom??1,i=[];for(let s of e){let r=N.get(s.target);if(r===void 0||this.e.override[r]!==void 0)continue;let l=s.target.getBoundingClientRect().width/t;l&&this.e.indices[r]!==l&&i.push([r,l])}if(i.length>0){this.ge();for(let[s,r]of i)this.e.indices[s]=r,this.e.auto[s]=r,this.$(s);this.we?.()}}num_columns(){return this.header.num_columns()}clear(e){e.innerHTML='<table cellspacing="0"><thead></thead><tbody></tbody></table>'}N(e){for(let[,t]of e){let i=t?.size_key;if(i===void 0)return!0;let s=this.e.override[i];if(s!==void 0){if(this.pe[i]!==s)return!0}else if(!this.e.indices[i])return!0}return!1}autosize_cells(e,t){let i=this.table.currentCSSZoom??1,s=[];for(let[r,l]of e){let h=r.getBoundingClientRect();s.push({cell:r,metadata:l,box:h})}for(let{metadata:r,box:l}of s)if(this.e.row_height=t??Math.max(10,Math.min(this.e.row_height??l.height/i,l.height/i)),r?.size_key!==void 0){this.e.indices[r.size_key]=l.width/i;let h=this.e.override[r.size_key];l.width/i&&h===void 0&&(this.e.auto[r.size_key]=l.width/i),h!==void 0&&(this.pe[r.size_key]=h)}}updateColumnWidthStyles(e,t){if(!this.ge())return;let i;for(i=0;i<t;i++)this.$(i);let s=Math.floor(e.start_col);for(let r=i;r<i+(Math.floor(e.end_col)-s);r++)this.$(r+s)}$(e){let t=this.e.override[e],i=this.e.auto[e];t!==void 0?this.Me(e,t,t):i!==void 0?this.Me(e,i,void 0):this.et(e)}ge(){let e=this.table.getRootNode();if(!(!e||!e.adoptedStyleSheets))return this.u||(this.u=new CSSStyleSheet),e.adoptedStyleSheets.includes(this.u)||(e.adoptedStyleSheets=[...e.adoptedStyleSheets,this.u]),this.u}tt(e){let t=this.k.get(e);if(t)return t;let i=this.u;if(!i)return;let s=i.cssRules.length;return i.insertRule(`.${this.B} .rt-col-${e}{}`,s),t=i.cssRules[s],this.k.set(e,t),t}Me(e,t,i){let s=i===void 0?`${t}`:`${t}|${i}`;if(this.A.get(e)===s)return;let r=this.tt(e);r&&(r.style.minWidth=`${t}px`,i===void 0?r.style.removeProperty("max-width"):r.style.maxWidth=`${i}px`,this.A.set(e,s))}et(e){if(this.A.get(e)==="")return;let t=this.k.get(e);t&&(t.style.removeProperty("min-width"),t.style.removeProperty("max-width")),this.A.set(e,"")}async Se(e){return this.C?this.C:await e.view(0,0,0,0)}Te(){this.C=void 0,this.Je=void 0}async draw(e,t,i,s,r,l,h){let o=this.C=await t.view(Math.floor(r.start_col),Math.floor(r.start_row),Math.ceil(r.end_col),Math.ceil(r.end_row)),d=this.ve(e,t,i,s,r,l,o);this.F=!0;try{let c=d.next();for(;!c.done;)await h(),c=d.next(c.value==="style"?void 0:await c.value.fetch())}finally{this.F=!1,d.return(!1)}}draw_sync(e,t,i,s,r,l,h,o){this.C=h;let d=this.ve(e,t,i,s,r,l,h),c=d.next();for(;!c.done;)c.value==="style"&&o(),c=d.next();return c.value}*ve(e,t,i,s,r,l,h){let{width:o,height:d}=e,{column_header_merge_depth:c,merge_headers:n="both"}=h,a=n==="both"||n==="row",m=n==="both"||n==="column",g=r.start_col??0;if(h.row_headers){let b=0;for(let S of h.row_headers)S.length>b&&(b=S.length);this.c=b;for(let S=0;S<h.row_headers.length;S++)h.row_headers[S].length=this.c||0}t.row_headers_length=h.num_row_headers??h.row_headers?.[0]?.length??0,t.column_headers_length=h.num_column_headers??h.column_headers?.[0]?.length??0;let{view:u,row_headers_length:v,column_headers_length:f}=t,_=this.qe(r,i),x,w=0,y=[],L=!0;if(h.row_headers?.length){let b=this.Ue(h.row_headers,v,f,d,_,s,g,c,m,a);x=b.cont_body,L=b.first_col,w=b.Ye,y=b.last_cells}try{let b=0,S=0,z=l-r.start_col,H=this.e.indices.some(Boolean);for(;b<z;){if(!h.data[b]){this.header.flush_colspans(),this.updateColumnWidthStyles(r,t.row_headers_length);let M=yield{fetch:()=>this.Ze(r,u,h,b,_,o,l,w,g)};if(M?.column_header_merge_depth!==void 0&&(c=M.column_header_merge_depth),M?.merge_headers!==void 0&&(n=M.merge_headers),!h.data[b])return this.R(x,w),this.updateColumnWidthStyles(r,t.row_headers_length),yield"style",this.N(y)&&this.autosize_cells(y,this.e.row_height),this.I(_,o)}let{cont_head:C,cont_body:k}=this.Ke(b,h,w,g,d,_,L,c,m,a);if(x=k,L=!1,!s)for(let{td:M,metadata:R}of x.tds)y.push([C?.th||M,C?.metadata||R]);let p=this.e.indices[w+Math.floor(g)]||(H?S:0);if(!p){if(p=C?.th?.offsetWidth||0,!p)for(let{td:M}of x.tds)p+=M?.offsetWidth||0;S=p}if(_.viewport_width+=p,_.row_height=_.row_height||x.row_height,w++,b++,this.I(_,o)){if(this.R(x,w),this.updateColumnWidthStyles(r,t.row_headers_length),yield"style",s)return!0;_.viewport_width=0,this.N(y)&&this.autosize_cells(y,this.e.row_height),S=0;let M=_.row_headers_length||0;for(let R=0;R<y.length;R++){let A=R<M?R:Math.floor(g)+R;_.viewport_width+=this.e.indices[A]||0}if(this.I(_,o))return!0}}return this.R(x,w),this.updateColumnWidthStyles(r,t.row_headers_length),yield"style",this.N(y)&&this.autosize_cells(y,this.e.row_height),!0}finally{this.R(x,w)}}I(e,t){return e.viewport_width-e.sub_cell_offset>t}},xt=["both","horizontal","vertical","none"],Ct=class extends gt{X;constructor(){super(),this.e={auto:[],override:{},indices:[]},this.n=[],this.X=!1}connectedCallback(){this.X||(this.Le(),this.register_listeners(),this.setAttribute("tabindex","0"),this.X=!0,this.ye())}ye(){this.table_model?.dispose(),this.table_model=new Mt(this.s,this.e,this),this.table_model.we=()=>this.Ee(),this.table_model.body.h=this.h}resetAutoSize(e){(!e||e.auto)&&(this.e.auto=[]),(!e||e.override)&&(this.e.override={}),(!e||e.indices)&&(this.e.indices=[]),(!e||e.row_height)&&(this.e.row_height=void 0)}saveColumnSizes(){return structuredClone(this.e.override)}restoreColumnSizes(e){this.e.override=structuredClone(e)}clear(){this.ye()}addStyleListener(e){this.n.push(e);let t=!0;return()=>{if(!t)return;t=!1,this.n=this.n.slice();let i=this.n.indexOf(e);this.n.splice(i,1)}}removeStyleListener(e){let t=this.n.length;this.n=this.n.filter(i=>i!==e),console.assert(this.n.length===t-1,"No listener found")}getMeta(e){if(e!==void 0){if(e instanceof HTMLElement)return P.get(e);if("row_header_x"in e&&e.row_header_x&&e.row_header_x>=0){if(e.row_header_x<this.t.row_headers_length){let t=this.table_model.body.v(e.y,e.row_header_x);return this.getMeta(t)}}else if("column_header_y"in e&&e.column_header_y>=0){if(e.column_header_y<this.t.column_headers_length){let t=this.table_model.header.v(e.column_header_y,e.x);return this.getMeta(t)}}else if("dx"in e)return this.getMeta(this.table_model.body.v(e.dy,e.dx+(this.table_model.c||0)))}}getDrawFPS(){return it()}async scrollToCell(e,t){if(!this.t){console.warn("data listener not configured");return}let i=this.e.row_height||0;this.scrollTop=Math.ceil(i*t);let s=0;for(;e>0;)e--,s+=this.e.indices[e+this.t.row_headers_length]||60;this.scrollLeft=Math.ceil(s),await new Promise(requestAnimationFrame),await this.flush()}setDataListener(e,{virtual_mode:t="both",preserve_state:i=!1,column_classes:s=!1}={}){console.assert(xt.indexOf(t)>-1,`Unknown virtual_mode ${t}; valid options are "both" (default), "horizontal", "vertical" or "none"`);let r=this.i!==t;i?(console.assert(!r,"preserve_state called with modified virtual_mode"),this.t.view=e):(this.i=t,this.h=s,this.table_model&&(this.table_model.body.h=s),this.p=!0,this.t={view:e,row_headers_length:0,column_headers_length:0},r&&this.ne())}};document.createElement("regular-table").constructor===HTMLElement&&window.customElements.define("regular-table",Ct);Y();function I(e){return e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean"?e:e===void 0?"":JSON.stringify(e)}function St(e,t){if(!t?.format)return String(I(e)??"");let i=Number(e);if(!Number.isFinite(i))return String(I(e)??"");let s=Math.max(0,t.digits??(t.format==="percent"?2:0)),r=t.signed?Math.abs(i):i,l=t.format==="number"?r.toLocaleString(void 0,{minimumFractionDigits:s,maximumFractionDigits:s}):`${Math.abs(i).toFixed(s)}%`;return!t.signed||i===0?i<0&&t.format==="percent"?`-${l}`:l:`${i>0?"+":"-"}${l}`}var X=class extends HTMLElement{#t=null;#e=[];#i=[];#l=!1;#d="both";#h=null;#o;#_=null;#n;#a=null;#r=null;#c=!1;connectedCallback(){this.style.display||="block",this.style.position||="relative",this.#g(),this.#f(),this.#s(!1)}disconnectedCallback(){this.#r?.close(),this.#r=null}get rows(){return this.#e}set rows(t){this.#e=Array.isArray(t)?t:[],this.#l||this.#u(),this.#s(!0)}get rowPatch(){return this.#_}set rowPatch(t){if(this.#_=t,!(!t||!Array.isArray(t.operations))&&!(t.revision!==void 0&&t.revision===this.#n)&&!(typeof t.revision=="number"&&typeof this.#n=="number"&&t.revision<this.#n)){this.#n=t.revision;for(let i of t.operations)i.type==="update"&&this.updateRow(i.index,i.changes),i.type==="insert"&&this.insertRow(i.index,i.row),i.type==="remove"&&this.removeRow(i.index);t.operations.length&&this.dispatchEvent(new CustomEvent("row-patch",{bubbles:!0,composed:!0,detail:t}))}}get streamUrl(){return this.#a}set streamUrl(t){this.#a=t||null,this.#f()}updateRow(t,i){return!Number.isInteger(t)||t<0||t>=this.#e.length?!1:(this.#e[t]={...this.#e[t],...i},this.#m(t===0),!0)}insertRow(t,i){return!Number.isInteger(t)||t<0||t>this.#e.length?!1:(this.#e.splice(t,0,i),this.#m(t===0),!0)}removeRow(t){if(!Number.isInteger(t)||t<0||t>=this.#e.length)return;let[i]=this.#e.splice(t,1);return this.#m(t===0),i}getMeta(t){if(!this.#t)return;let i=t.closest("td,th");if(!(i instanceof HTMLElement))return;let s=this.#t.getMeta(i);if(s)return{...s,column:s.x===void 0?void 0:this.#i[s.x]?.key,row:s.y===void 0?void 0:this.#e[s.y]}}get columns(){return this.#i}set columns(t){this.#l=Array.isArray(t)&&t.length>0,this.#i=this.#l?t.map(i=>typeof i=="string"?{key:i,label:i}:{key:i.key,label:i.label??i.key,cell:i.cell}):[],this.#l||this.#u(),this.#t?.resetAutoSize(),this.#s(!1)}get virtualMode(){return this.#d}set virtualMode(t){this.#d=["both","horizontal","vertical","none"].includes(t)?t:"both",this.#w(),this.#s(!1)}get rowHeader(){return this.#h}set rowHeader(t){this.#h=t||null,this.#t?.resetAutoSize(),this.#s(!1)}get rowHeight(){return this.#o}set rowHeight(t){this.#o=t&&t>0?t:void 0,this.#t?.resetAutoSize({row_height:!0,auto:!1,override:!1,indices:!1}),this.#s(!0)}#g(){this.#t||(this.#t=document.createElement("regular-table"),this.#t.addEventListener("click",t=>this.#y(t)),this.#t.addStyleListener(()=>{this.#v(),this.dispatchEvent(new CustomEvent("table-draw",{bubbles:!0,composed:!0}))}),this.appendChild(this.#t),this.#w())}#f(){this.#r?.close(),this.#r=null,!(!this.isConnected||!this.#a)&&(this.#r=new EventSource(this.#a),this.#r.addEventListener("message",t=>{try{let i=JSON.parse(t.data);if(!i||!Array.isArray(i.operations))throw new Error;this.rowPatch=i}catch{this.dispatchEvent(new CustomEvent("row-stream-error",{bubbles:!0,composed:!0,detail:{data:t.data}}))}}))}#u(){let t=this.#e[0];this.#i=t?Object.keys(t).filter(i=>i!==this.#h).map(i=>({key:i,label:i})):[]}#m(t){if(!this.#l&&t){this.#u(),this.#t?.resetAutoSize(),this.#s(!1);return}this.#s(!0)}#w(){this.#t&&this.#t.setDataListener(async(t,i,s,r)=>this.#p(t,i,s,r),{virtual_mode:this.#d,column_classes:!0})}#p(t,i,s,r){let l=Math.max(0,i),h=Math.min(this.#e.length,r),o=this.#i.slice(t,s),d=o.map(({key:n})=>{let a=[];for(let m=l;m<h;m+=1)a.push(I(this.#e[m]?.[n]));return a}),c={num_rows:this.#e.length,num_columns:this.#i.length,data:d,column_headers:o.map(({label:n})=>[n])};return this.#h&&(c.row_headers=this.#e.slice(l,h).map(n=>[I(n[this.#h])])),this.#o&&(c.row_height=this.#o),c}#s(t){!this.isConnected||!this.#t||this.#c||(this.#c=!0,requestAnimationFrame(()=>{this.#c=!1,this.#t?.draw({preserve_width:t})}))}#v(){if(this.#t)for(let t of this.#t.querySelectorAll("tbody td")){let i=t,s=i.dataset.spadayClasses?.split(" ").filter(Boolean)??[];i.classList.remove(...s),delete i.dataset.spadayClasses;let r=this.#t.getMeta(i);if(r?.x===void 0)continue;let l=this.#i[r.x]?.cell;if(!l)continue;let h=[l.cell_class],o=Number(r.value);Number.isFinite(o)&&h.push(o>=0?l.positive_class:l.negative_class);let d=h.filter(a=>!!a);i.classList.add(...d),d.length&&(i.dataset.spadayClasses=d.join(" "));let c=St(r.value,l);if(!l.tag){i.textContent=c;continue}let n=document.createElement(l.tag);l.class&&(n.className=l.class),l.title&&(n.title=l.title);for(let[a,m]of Object.entries(l.attributes??{}))n.setAttribute(a,m);n.textContent=c,i.replaceChildren(n)}}#y(t){let i=t.target;if(!(i instanceof HTMLElement))return;let s=this.getMeta(i);if(!s)return;this.dispatchEvent(new CustomEvent("cell-click",{bubbles:!0,composed:!0,detail:s}));let r=s.x===void 0?void 0:this.#i[s.x]?.cell;r?.event&&r.event!=="cell-click"&&this.dispatchEvent(new CustomEvent(r.event,{bubbles:!0,composed:!0,detail:s}))}};customElements.get("spaday-regular-table")||customElements.define("spaday-regular-table",X);export{X as SpadayRegularTable};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|