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.
Files changed (39) hide show
  1. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/.gitignore +5 -0
  2. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/PKG-INFO +2 -2
  3. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/build.mjs +9 -3
  4. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/package.json +7 -5
  5. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/pnpm-lock.yaml +133 -1
  6. spaday_regular_table-0.2.1/js/src/css/theme.css +51 -0
  7. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/src/html/index.html +1 -0
  8. spaday_regular_table-0.2.1/js/src/ts/define-guard.ts +19 -0
  9. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/src/ts/index.ts +4 -0
  10. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tests/index.spec.js +72 -0
  11. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/bundle.mjs +1 -1
  12. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tsconfig.json +2 -2
  13. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/pyproject.toml +3 -3
  14. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/__init__.py +2 -2
  15. spaday_regular_table-0.2.1/spaday_regular_table/extension/cdn/index.js +2 -0
  16. spaday_regular_table-0.2.1/spaday_regular_table/extension/cdn/index.js.map +7 -0
  17. spaday_regular_table-0.2.1/spaday_regular_table/extension/css/index.css +0 -0
  18. spaday_regular_table-0.2.1/spaday_regular_table/extension/css/theme.css +1 -0
  19. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/extension/index.html +1 -0
  20. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/tests/test_all.py +2 -0
  21. spaday_regular_table-0.2.0/spaday_regular_table/extension/cdn/index.js +0 -1202
  22. spaday_regular_table-0.2.0/spaday_regular_table/extension/cdn/index.js.map +0 -7
  23. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/LICENSE +0 -0
  24. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/README.md +0 -0
  25. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/.oxfmtrc.json +0 -0
  26. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/.oxlintrc.json +0 -0
  27. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/playwright.config.js +0 -0
  28. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/pnpm-workspace.yaml +0 -0
  29. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/src/css/index.css +0 -0
  30. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/src/ts/css.d.ts +0 -0
  31. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/css.mjs +0 -0
  32. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/externals.mjs +0 -0
  33. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/getarg.mjs +0 -0
  34. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/js/tools/html.mjs +0 -0
  35. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/components.cem.json +0 -0
  36. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/components.py +0 -0
  37. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/example.py +0 -0
  38. {spaday_regular_table-0.2.0 → spaday_regular_table-0.2.1}/spaday_regular_table/extension/css/material.css +0 -0
  39. {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.0
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>=0.6.0
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.mkdirSync("dist/img", { recursive: true });
31
- await cpy("src/img/*", "dist/img");
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.0",
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": "^0.9.0"
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: ^0.9.0
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
+ });
@@ -23,7 +23,7 @@ const DEFAULT_BUILD = {
23
23
  target: ["es2022"],
24
24
  bundle: true,
25
25
  format: "esm",
26
- minify: DEBUG,
26
+ minify: !DEBUG,
27
27
  sourcemap: true,
28
28
  metafile: true,
29
29
  entryNames: "[name]",
@@ -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", "./tests/*.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.0"
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.0"
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.0"
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