@facet-coverage/core 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +5 -4
  2. package/dist/cli/commands/serve.d.ts +12 -0
  3. package/dist/cli/commands/serve.d.ts.map +1 -0
  4. package/dist/cli/commands/serve.js +76 -0
  5. package/dist/cli/commands/serve.js.map +1 -0
  6. package/dist/cli/index.js +10 -0
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/client/index.js +60 -0
  9. package/dist/core/FacetParser.d.ts +5 -4
  10. package/dist/core/FacetParser.d.ts.map +1 -1
  11. package/dist/core/FacetParser.js +43 -31
  12. package/dist/core/FacetParser.js.map +1 -1
  13. package/dist/server/DevServer.d.ts +48 -0
  14. package/dist/server/DevServer.d.ts.map +1 -0
  15. package/dist/server/DevServer.js +126 -0
  16. package/dist/server/DevServer.js.map +1 -0
  17. package/dist/server/HotReloadManager.d.ts +49 -0
  18. package/dist/server/HotReloadManager.d.ts.map +1 -0
  19. package/dist/server/HotReloadManager.js +187 -0
  20. package/dist/server/HotReloadManager.js.map +1 -0
  21. package/dist/server/index.d.ts +3 -0
  22. package/dist/server/index.d.ts.map +1 -0
  23. package/dist/server/index.js +6 -0
  24. package/dist/server/index.js.map +1 -0
  25. package/dist/server/routes.d.ts +12 -0
  26. package/dist/server/routes.d.ts.map +1 -0
  27. package/dist/server/routes.js +272 -0
  28. package/dist/server/routes.js.map +1 -0
  29. package/dist/server/views/Dashboard.d.ts +6 -0
  30. package/dist/server/views/Dashboard.d.ts.map +1 -0
  31. package/dist/server/views/Dashboard.js +121 -0
  32. package/dist/server/views/Dashboard.js.map +1 -0
  33. package/dist/server/views/FacetPage.d.ts +6 -0
  34. package/dist/server/views/FacetPage.d.ts.map +1 -0
  35. package/dist/server/views/FacetPage.js +190 -0
  36. package/dist/server/views/FacetPage.js.map +1 -0
  37. package/dist/server/views/FeaturePage.d.ts +6 -0
  38. package/dist/server/views/FeaturePage.d.ts.map +1 -0
  39. package/dist/server/views/FeaturePage.js +98 -0
  40. package/dist/server/views/FeaturePage.js.map +1 -0
  41. package/dist/server/views/Layout.d.ts +17 -0
  42. package/dist/server/views/Layout.d.ts.map +1 -0
  43. package/dist/server/views/Layout.js +59 -0
  44. package/dist/server/views/Layout.js.map +1 -0
  45. package/dist/server/views/Sidebar.d.ts +6 -0
  46. package/dist/server/views/Sidebar.d.ts.map +1 -0
  47. package/dist/server/views/Sidebar.js +59 -0
  48. package/dist/server/views/Sidebar.js.map +1 -0
  49. package/dist/server/views/TestPanel.d.ts +6 -0
  50. package/dist/server/views/TestPanel.d.ts.map +1 -0
  51. package/dist/server/views/TestPanel.js +69 -0
  52. package/dist/server/views/TestPanel.js.map +1 -0
  53. package/dist/server/views/scripts.d.ts +5 -0
  54. package/dist/server/views/scripts.d.ts.map +1 -0
  55. package/dist/server/views/scripts.js +203 -0
  56. package/dist/server/views/scripts.js.map +1 -0
  57. package/dist/server/views/styles.d.ts +6 -0
  58. package/dist/server/views/styles.d.ts.map +1 -0
  59. package/dist/server/views/styles.js +608 -0
  60. package/dist/server/views/styles.js.map +1 -0
  61. package/dist/types.d.ts +7 -7
  62. package/dist/types.d.ts.map +1 -1
  63. package/package.json +9 -4
package/README.md CHANGED
@@ -43,10 +43,10 @@ Users should complete purchases without creating an account.
43
43
 
44
44
  **Compliance Team** — `facets/compliance.md`
45
45
  ```markdown
46
- ## PCI-DSS Payment Requirements {#pci-dss}
47
- 1. **Encryption in transit** {#tls} - TLS 1.2+ required
48
- 2. **No CVV storage** {#cvv} - Never store CVV
49
- 3. **Card masking** {#masking} - Show only last 4 digits
46
+ ## PCI-DSS Payment Requirements
47
+ 1. **Encryption in transit** [](#tls) - TLS 1.2+ required
48
+ 2. **No CVV storage** [](#cvv) - Never store CVV
49
+ 3. **Card masking** [](#masking) - Show only last 4 digits
50
50
  ```
51
51
 
52
52
  **UX Team** — `facets/ux.md`
@@ -130,6 +130,7 @@ Overall: 83% (5/6)
130
130
  - **Type-safe linking** - Generated TypeScript types prevent broken references
131
131
  - **Framework agnostic** - Works with Jest, Vitest, Playwright, Mocha, Bun
132
132
  - **Gap detection** - See what's untested across all stakeholder perspectives
133
+ - **Live dashboard** - `facet serve` for real-time coverage with hot reload
133
134
  - **CI-ready** - Threshold enforcement and JSON output for pipelines
134
135
 
135
136
  ---
@@ -0,0 +1,12 @@
1
+ interface ServeOptions {
2
+ port?: string;
3
+ host?: string;
4
+ config?: string;
5
+ open?: boolean;
6
+ }
7
+ /**
8
+ * Start the documentation server with hot reload
9
+ */
10
+ export declare function serveCommand(options?: ServeOptions): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAKA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAmCD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C5E"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serveCommand = serveCommand;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const index_js_1 = require("../../server/index.js");
7
+ const config_js_1 = require("../utils/config.js");
8
+ /**
9
+ * Find the facet-coverage package root
10
+ */
11
+ function findPackageRoot() {
12
+ // Start from the directory of this file and go up to find package.json
13
+ let dir = (0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)(__dirname))); // Go up from cli/commands to root
14
+ // For development: check if we're in the source tree
15
+ if ((0, fs_1.existsSync)((0, path_1.join)(dir, 'package.json')) && (0, fs_1.existsSync)((0, path_1.join)(dir, 'src/server/client'))) {
16
+ return dir;
17
+ }
18
+ // For installed package: find from node_modules
19
+ dir = (0, path_1.dirname)(__dirname);
20
+ while (dir !== '/' && dir !== '.') {
21
+ if ((0, fs_1.existsSync)((0, path_1.join)(dir, 'package.json'))) {
22
+ const pkgPath = (0, path_1.join)(dir, 'package.json');
23
+ try {
24
+ const pkg = require(pkgPath);
25
+ if (pkg.name === '@facet-coverage/core') {
26
+ return dir;
27
+ }
28
+ }
29
+ catch {
30
+ // Continue searching
31
+ }
32
+ }
33
+ dir = (0, path_1.dirname)(dir);
34
+ }
35
+ // Fallback: assume running from repo root
36
+ return process.cwd();
37
+ }
38
+ /**
39
+ * Start the documentation server with hot reload
40
+ */
41
+ async function serveCommand(options = {}) {
42
+ const cwd = process.cwd();
43
+ // Load config
44
+ const config = await (0, config_js_1.loadConfig)(options.config, cwd);
45
+ // Find the package root (where client source is)
46
+ const packageRoot = findPackageRoot();
47
+ // Parse port
48
+ const port = options.port ? parseInt(options.port, 10) : 3000;
49
+ if (isNaN(port) || port < 1 || port > 65535) {
50
+ console.error('Invalid port number');
51
+ process.exit(1);
52
+ }
53
+ const host = options.host || 'localhost';
54
+ const open = options.open ?? false;
55
+ console.log('\n Facet Documentation Server\n');
56
+ // Create and start server
57
+ const server = new index_js_1.DevServer(config, cwd, { port, host, open, packageRoot });
58
+ // Handle shutdown
59
+ process.on('SIGINT', async () => {
60
+ console.log('\n\n Stopping server...');
61
+ await server.stop();
62
+ process.exit(0);
63
+ });
64
+ process.on('SIGTERM', async () => {
65
+ await server.stop();
66
+ process.exit(0);
67
+ });
68
+ try {
69
+ await server.start();
70
+ }
71
+ catch (error) {
72
+ console.error('Failed to start server:', error);
73
+ process.exit(1);
74
+ }
75
+ }
76
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":";;AAgDA,oCA0CC;AA1FD,2BAAgC;AAChC,+BAAqC;AACrC,oDAAkD;AAClD,kDAAgD;AAShD;;GAEG;AACH,SAAS,eAAe;IACtB,uEAAuE;IACvE,IAAI,GAAG,GAAG,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC;IAElF,qDAAqD;IACrD,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;QACxF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,gDAAgD;IAChD,GAAG,GAAG,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC;IACzB,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAClC,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBACxC,OAAO,GAAG,CAAC;gBACb,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;QACD,GAAG,GAAG,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,0CAA0C;IAC1C,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,UAAwB,EAAE;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,cAAc;IACd,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAU,EAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAErD,iDAAiD;IACjD,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IAEtC,aAAa;IACb,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,0BAA0B;IAC1B,MAAM,MAAM,GAAG,IAAI,oBAAS,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAE7E,kBAAkB;IAClB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
package/dist/cli/index.js CHANGED
@@ -5,6 +5,7 @@ const generate_js_1 = require("./commands/generate.js");
5
5
  const analyze_js_1 = require("./commands/analyze.js");
6
6
  const validate_js_1 = require("./commands/validate.js");
7
7
  const watch_js_1 = require("./commands/watch.js");
8
+ const serve_js_1 = require("./commands/serve.js");
8
9
  const program = new commander_1.Command();
9
10
  program
10
11
  .name('facet')
@@ -46,6 +47,15 @@ program
46
47
  .option('-c, --config <path>', 'Path to config file')
47
48
  .option('-v, --validate', 'Run validation before analysis')
48
49
  .action(watch_js_1.watchCommand);
50
+ // Serve command
51
+ program
52
+ .command('serve')
53
+ .description('Start documentation server with hot reload')
54
+ .option('-p, --port <number>', 'Port number (default: 3000)')
55
+ .option('--host <host>', 'Host to bind to (default: localhost)')
56
+ .option('-c, --config <path>', 'Path to config file')
57
+ .option('--open', 'Open browser automatically')
58
+ .action(serve_js_1.serveCommand);
49
59
  // Parse arguments
50
60
  program.parse();
51
61
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,wDAAyD;AACzD,sDAAuD;AACvD,wDAAyD;AACzD,kDAAmD;AAEnD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+FAA+F,CAAC;KAC5G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wEAAwE,CAAC;KACrF,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,CAAC;KAClF,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;KACnF,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,gDAAgD,CAAC;KACpE,MAAM,CAAC,YAAY,EAAE,kCAAkC,CAAC;KACxD,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;KACpD,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,6BAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,sCAAsC,CAAC;KACvE,MAAM,CAAC,0BAA0B,EAAE,+BAA+B,CAAC;KACnE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;KAC7C,MAAM,CAAC,2BAAc,CAAC,CAAC;AAE1B,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,qDAAqD,CAAC;KACzE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,6BAAe,CAAC,CAAC;AAE3B,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;KAC1D,MAAM,CAAC,uBAAY,CAAC,CAAC;AAExB,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,wDAAyD;AACzD,sDAAuD;AACvD,wDAAyD;AACzD,kDAAmD;AACnD,kDAAmD;AAEnD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+FAA+F,CAAC;KAC5G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wEAAwE,CAAC;KACrF,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,CAAC;KAClF,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;KACnF,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,gDAAgD,CAAC;KACpE,MAAM,CAAC,YAAY,EAAE,kCAAkC,CAAC;KACxD,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;KACpD,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,6BAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,sCAAsC,CAAC;KACvE,MAAM,CAAC,0BAA0B,EAAE,+BAA+B,CAAC;KACnE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;KAC7C,MAAM,CAAC,2BAAc,CAAC,CAAC;AAE1B,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,qDAAqD,CAAC;KACzE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,6BAAe,CAAC,CAAC;AAE3B,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;KAC1D,MAAM,CAAC,uBAAY,CAAC,CAAC;AAExB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;KAC5D,MAAM,CAAC,eAAe,EAAE,sCAAsC,CAAC;KAC/D,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,uBAAY,CAAC,CAAC;AAExB,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,60 @@
1
+ var i,W,D0,Zb,F,H0,R0,y0,C0,X0,b0,v0,P0,j={},U0=[],Qb=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,c=Array.isArray;function M(b,v){for(var g in v)b[g]=v[g];return b}function Y0(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function a(b,v,g){var X,Q,$,Y={};for($ in v)$=="key"?X=v[$]:$=="ref"?Q=v[$]:Y[$]=v[$];if(arguments.length>2&&(Y.children=arguments.length>3?i.call(arguments,2):g),typeof b=="function"&&b.defaultProps!=null)for($ in b.defaultProps)Y[$]===void 0&&(Y[$]=b.defaultProps[$]);return o(b,Y,X,Q,null)}function o(b,v,g,X,Q){var $={type:b,props:v,key:g,ref:X,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:Q==null?++D0:Q,__i:-1,__u:0};return Q==null&&W.vnode!=null&&W.vnode($),$}function p(b){return b.children}function I(b,v){this.props=b,this.context=v}function k(b,v){if(v==null)return b.__?k(b.__,b.__i+1):null;for(var g;v<b.__k.length;v++)if((g=b.__k[v])!=null&&g.__e!=null)return g.__e;return typeof b.type=="function"?k(b):null}function _0(b){var v,g;if((b=b.__)!=null&&b.__c!=null){for(b.__e=b.__c.base=null,v=0;v<b.__k.length;v++)if((g=b.__k[v])!=null&&g.__e!=null){b.__e=b.__c.base=g.__e;break}return _0(b)}}function g0(b){(!b.__d&&(b.__d=!0)&&F.push(b)&&!s.__r++||H0!=W.debounceRendering)&&((H0=W.debounceRendering)||R0)(s)}function s(){for(var b,v,g,X,Q,$,Y,J=1;F.length;)F.length>J&&F.sort(y0),b=F.shift(),J=F.length,b.__d&&(g=void 0,X=void 0,Q=(X=(v=b).__v).__e,$=[],Y=[],v.__P&&((g=M({},X)).__v=X.__v+1,W.vnode&&W.vnode(g),Z0(v.__P,g,X,v.__n,v.__P.namespaceURI,32&X.__u?[Q]:null,$,Q==null?k(X):Q,!!(32&X.__u),Y),g.__v=X.__v,g.__.__k[g.__i]=g,L0($,g,Y),X.__e=X.__=null,g.__e!=Q&&_0(g)));s.__r=0}function T0(b,v,g,X,Q,$,Y,J,G,V,N){var q,O,K,H,y,d,B,z=X&&X.__k||U0,U=v.length;for(G=qb(g,v,z,G,U),q=0;q<U;q++)(K=g.__k[q])!=null&&(O=K.__i==-1?j:z[K.__i]||j,K.__i=q,d=Z0(b,K,O,Q,$,Y,J,G,V,N),H=K.__e,K.ref&&O.ref!=K.ref&&(O.ref&&Q0(O.ref,null,K),N.push(K.ref,K.__c||H,K)),y==null&&H!=null&&(y=H),(B=!!(4&K.__u))||O.__k===K.__k?G=M0(K,G,b,B):typeof K.type=="function"&&d!==void 0?G=d:H&&(G=H.nextSibling),K.__u&=-7);return g.__e=y,G}function qb(b,v,g,X,Q){var $,Y,J,G,V,N=g.length,q=N,O=0;for(b.__k=Array(Q),$=0;$<Q;$++)(Y=v[$])!=null&&typeof Y!="boolean"&&typeof Y!="function"?(typeof Y=="string"||typeof Y=="number"||typeof Y=="bigint"||Y.constructor==String?Y=b.__k[$]=o(null,Y,null,null,null):c(Y)?Y=b.__k[$]=o(p,{children:Y},null,null,null):Y.constructor===void 0&&Y.__b>0?Y=b.__k[$]=o(Y.type,Y.props,Y.key,Y.ref?Y.ref:null,Y.__v):b.__k[$]=Y,G=$+O,Y.__=b,Y.__b=b.__b+1,J=null,(V=Y.__i=Jb(Y,g,G,q))!=-1&&(q--,(J=g[V])&&(J.__u|=2)),J==null||J.__v==null?(V==-1&&(Q>N?O--:Q<N&&O++),typeof Y.type!="function"&&(Y.__u|=4)):V!=G&&(V==G-1?O--:V==G+1?O++:(V>G?O--:O++,Y.__u|=4))):b.__k[$]=null;if(q)for($=0;$<N;$++)(J=g[$])!=null&&(2&J.__u)==0&&(J.__e==X&&(X=k(J)),w0(J,J));return X}function M0(b,v,g,X){var Q,$;if(typeof b.type=="function"){for(Q=b.__k,$=0;Q&&$<Q.length;$++)Q[$]&&(Q[$].__=b,v=M0(Q[$],v,g,X));return v}b.__e!=v&&(X&&(v&&b.type&&!v.parentNode&&(v=k(b)),g.insertBefore(b.__e,v||null)),v=b.__e);do v=v&&v.nextSibling;while(v!=null&&v.nodeType==8);return v}function l(b,v){return v=v||[],b==null||typeof b=="boolean"||(c(b)?b.some(function(g){l(g,v)}):v.push(b)),v}function Jb(b,v,g,X){var Q,$,Y,J=b.key,G=b.type,V=v[g],N=V!=null&&(2&V.__u)==0;if(V===null&&J==null||N&&J==V.key&&G==V.type)return g;if(X>(N?1:0)){for(Q=g-1,$=g+1;Q>=0||$<v.length;)if((V=v[Y=Q>=0?Q--:$++])!=null&&(2&V.__u)==0&&J==V.key&&G==V.type)return Y}return-1}function E0(b,v,g){v[0]=="-"?b.setProperty(v,g==null?"":g):b[v]=g==null?"":typeof g!="number"||Qb.test(v)?g:g+"px"}function f(b,v,g,X,Q){var $,Y;b:if(v=="style")if(typeof g=="string")b.style.cssText=g;else{if(typeof X=="string"&&(b.style.cssText=X=""),X)for(v in X)g&&v in g||E0(b.style,v,"");if(g)for(v in g)X&&g[v]==X[v]||E0(b.style,v,g[v])}else if(v[0]=="o"&&v[1]=="n")$=v!=(v=v.replace(C0,"$1")),Y=v.toLowerCase(),v=Y in b||v=="onFocusOut"||v=="onFocusIn"?Y.slice(2):v.slice(2),b.l||(b.l={}),b.l[v+$]=g,g?X?g.u=X.u:(g.u=X0,b.addEventListener(v,$?v0:b0,$)):b.removeEventListener(v,$?v0:b0,$);else{if(Q=="http://www.w3.org/2000/svg")v=v.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(v!="width"&&v!="height"&&v!="href"&&v!="list"&&v!="form"&&v!="tabIndex"&&v!="download"&&v!="rowSpan"&&v!="colSpan"&&v!="role"&&v!="popover"&&v in b)try{b[v]=g==null?"":g;break b}catch(J){}typeof g=="function"||(g==null||g===!1&&v[4]!="-"?b.removeAttribute(v):b.setAttribute(v,v=="popover"&&g==1?"":g))}}function d0(b){return function(v){if(this.l){var g=this.l[v.type+b];if(v.t==null)v.t=X0++;else if(v.t<g.u)return;return g(W.event?W.event(v):v)}}}function Z0(b,v,g,X,Q,$,Y,J,G,V){var N,q,O,K,H,y,d,B,z,U,_,A,E,B0,h,x,t,T=v.type;if(v.constructor!==void 0)return null;128&g.__u&&(G=!!(32&g.__u),$=[J=v.__e=g.__e]),(N=W.__b)&&N(v);b:if(typeof T=="function")try{if(B=v.props,z="prototype"in T&&T.prototype.render,U=(N=T.contextType)&&X[N.__c],_=N?U?U.props.value:N.__:X,g.__c?d=(q=v.__c=g.__c).__=q.__E:(z?v.__c=q=new T(B,_):(v.__c=q=new I(B,_),q.constructor=T,q.render=Gb),U&&U.sub(q),q.state||(q.state={}),q.__n=X,O=q.__d=!0,q.__h=[],q._sb=[]),z&&q.__s==null&&(q.__s=q.state),z&&T.getDerivedStateFromProps!=null&&(q.__s==q.state&&(q.__s=M({},q.__s)),M(q.__s,T.getDerivedStateFromProps(B,q.__s))),K=q.props,H=q.state,q.__v=v,O)z&&T.getDerivedStateFromProps==null&&q.componentWillMount!=null&&q.componentWillMount(),z&&q.componentDidMount!=null&&q.__h.push(q.componentDidMount);else{if(z&&T.getDerivedStateFromProps==null&&B!==K&&q.componentWillReceiveProps!=null&&q.componentWillReceiveProps(B,_),v.__v==g.__v||!q.__e&&q.shouldComponentUpdate!=null&&q.shouldComponentUpdate(B,q.__s,_)===!1){for(v.__v!=g.__v&&(q.props=B,q.state=q.__s,q.__d=!1),v.__e=g.__e,v.__k=g.__k,v.__k.some(function(S){S&&(S.__=v)}),A=0;A<q._sb.length;A++)q.__h.push(q._sb[A]);q._sb=[],q.__h.length&&Y.push(q);break b}q.componentWillUpdate!=null&&q.componentWillUpdate(B,q.__s,_),z&&q.componentDidUpdate!=null&&q.__h.push(function(){q.componentDidUpdate(K,H,y)})}if(q.context=_,q.props=B,q.__P=b,q.__e=!1,E=W.__r,B0=0,z){for(q.state=q.__s,q.__d=!1,E&&E(v),N=q.render(q.props,q.state,q.context),h=0;h<q._sb.length;h++)q.__h.push(q._sb[h]);q._sb=[]}else do q.__d=!1,E&&E(v),N=q.render(q.props,q.state,q.context),q.state=q.__s;while(q.__d&&++B0<25);q.state=q.__s,q.getChildContext!=null&&(X=M(M({},X),q.getChildContext())),z&&!O&&q.getSnapshotBeforeUpdate!=null&&(y=q.getSnapshotBeforeUpdate(K,H)),x=N,N!=null&&N.type===p&&N.key==null&&(x=F0(N.props.children)),J=T0(b,c(x)?x:[x],v,g,X,Q,$,Y,J,G,V),q.base=v.__e,v.__u&=-161,q.__h.length&&Y.push(q),d&&(q.__E=q.__=null)}catch(S){if(v.__v=null,G||$!=null)if(S.then){for(v.__u|=G?160:128;J&&J.nodeType==8&&J.nextSibling;)J=J.nextSibling;$[$.indexOf(J)]=null,v.__e=J}else{for(t=$.length;t--;)Y0($[t]);$0(v)}else v.__e=g.__e,v.__k=g.__k,S.then||$0(v);W.__e(S,v,g)}else $==null&&v.__v==g.__v?(v.__k=g.__k,v.__e=g.__e):J=v.__e=Vb(g.__e,v,g,X,Q,$,Y,G,V);return(N=W.diffed)&&N(v),128&v.__u?void 0:J}function $0(b){b&&b.__c&&(b.__c.__e=!0),b&&b.__k&&b.__k.forEach($0)}function L0(b,v,g){for(var X=0;X<g.length;X++)Q0(g[X],g[++X],g[++X]);W.__c&&W.__c(v,b),b.some(function(Q){try{b=Q.__h,Q.__h=[],b.some(function($){$.call(Q)})}catch($){W.__e($,Q.__v)}})}function F0(b){return typeof b!="object"||b==null||b.__b&&b.__b>0?b:c(b)?b.map(F0):M({},b)}function Vb(b,v,g,X,Q,$,Y,J,G){var V,N,q,O,K,H,y,d=g.props||j,B=v.props,z=v.type;if(z=="svg"?Q="http://www.w3.org/2000/svg":z=="math"?Q="http://www.w3.org/1998/Math/MathML":Q||(Q="http://www.w3.org/1999/xhtml"),$!=null){for(V=0;V<$.length;V++)if((K=$[V])&&"setAttribute"in K==!!z&&(z?K.localName==z:K.nodeType==3)){b=K,$[V]=null;break}}if(b==null){if(z==null)return document.createTextNode(B);b=document.createElementNS(Q,z,B.is&&B),J&&(W.__m&&W.__m(v,$),J=!1),$=null}if(z==null)d===B||J&&b.data==B||(b.data=B);else{if($=$&&i.call(b.childNodes),!J&&$!=null)for(d={},V=0;V<b.attributes.length;V++)d[(K=b.attributes[V]).name]=K.value;for(V in d)if(K=d[V],V=="children");else if(V=="dangerouslySetInnerHTML")q=K;else if(!(V in B)){if(V=="value"&&"defaultValue"in B||V=="checked"&&"defaultChecked"in B)continue;f(b,V,null,K,Q)}for(V in B)K=B[V],V=="children"?O=K:V=="dangerouslySetInnerHTML"?N=K:V=="value"?H=K:V=="checked"?y=K:J&&typeof K!="function"||d[V]===K||f(b,V,K,d[V],Q);if(N)J||q&&(N.__html==q.__html||N.__html==b.innerHTML)||(b.innerHTML=N.__html),v.__k=[];else if(q&&(b.innerHTML=""),T0(v.type=="template"?b.content:b,c(O)?O:[O],v,g,X,z=="foreignObject"?"http://www.w3.org/1999/xhtml":Q,$,Y,$?$[0]:g.__k&&k(g,0),J,G),$!=null)for(V=$.length;V--;)Y0($[V]);J||(V="value",z=="progress"&&H==null?b.removeAttribute("value"):H!=null&&(H!==b[V]||z=="progress"&&!H||z=="option"&&H!=d[V])&&f(b,V,H,d[V],Q),V="checked",y!=null&&y!=b[V]&&f(b,V,y,d[V],Q))}return b}function Q0(b,v,g){try{if(typeof b=="function"){var X=typeof b.__u=="function";X&&b.__u(),X&&v==null||(b.__u=b(v))}else b.current=v}catch(Q){W.__e(Q,g)}}function w0(b,v,g){var X,Q;if(W.unmount&&W.unmount(b),(X=b.ref)&&(X.current&&X.current!=b.__e||Q0(X,null,v)),(X=b.__c)!=null){if(X.componentWillUnmount)try{X.componentWillUnmount()}catch($){W.__e($,v)}X.base=X.__P=null}if(X=b.__k)for(Q=0;Q<X.length;Q++)X[Q]&&w0(X[Q],v,g||typeof b.type!="function");g||Y0(b.__e),b.__c=b.__=b.__e=void 0}function Gb(b,v,g){return this.constructor(b,g)}function S0(b,v,g){var X,Q,$,Y;v==document&&(v=document.documentElement),W.__&&W.__(b,v),Q=(X=typeof g=="function")?null:g&&g.__k||v.__k,$=[],Y=[],Z0(v,b=(!X&&g||v).__k=a(p,null,[b]),Q||j,j,v.namespaceURI,!X&&g?[g]:Q?null:v.firstChild?i.call(v.childNodes):null,$,!X&&g?g:Q?Q.__e:v.firstChild,X,Y),L0($,b,Y)}function I0(b,v,g){var X,Q,$,Y,J=M({},b.props);for($ in b.type&&b.type.defaultProps&&(Y=b.type.defaultProps),v)$=="key"?X=v[$]:$=="ref"?Q=v[$]:J[$]=v[$]===void 0&&Y!=null?Y[$]:v[$];return arguments.length>2&&(J.children=arguments.length>3?i.call(arguments,2):g),o(b.type,J,X||b.key,Q||b.ref,null)}function k0(b){function v(g){var X,Q;return this.getChildContext||(X=new Set,(Q={})[v.__c]=this,this.getChildContext=function(){return Q},this.componentWillUnmount=function(){X=null},this.shouldComponentUpdate=function($){this.props.value!=$.value&&X.forEach(function(Y){Y.__e=!0,g0(Y)})},this.sub=function($){X.add($);var Y=$.componentWillUnmount;$.componentWillUnmount=function(){X&&X.delete($),Y&&Y.call($)}}),g.children}return v.__c="__cC"+P0++,v.__=b,v.Provider=v.__l=(v.Consumer=function(g,X){return g.children(X)}).contextType=v,v}i=U0.slice,W={__e:function(b,v,g,X){for(var Q,$,Y;v=v.__;)if((Q=v.__c)&&!Q.__)try{if(($=Q.constructor)&&$.getDerivedStateFromError!=null&&(Q.setState($.getDerivedStateFromError(b)),Y=Q.__d),Q.componentDidCatch!=null&&(Q.componentDidCatch(b,X||{}),Y=Q.__d),Y)return Q.__E=Q}catch(J){b=J}throw b}},D0=0,Zb=function(b){return b!=null&&b.constructor===void 0},I.prototype.setState=function(b,v){var g;g=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=M({},this.state),typeof b=="function"&&(b=b(M({},g),this.props)),b&&M(g,b),b!=null&&this.__v&&(v&&this._sb.push(v),g0(this))},I.prototype.forceUpdate=function(b){this.__v&&(this.__e=!0,b&&this.__h.push(b),g0(this))},I.prototype.render=p,F=[],R0=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,y0=function(b,v){return b.__v.__b-v.__v.__b},s.__r=0,C0=/(PointerCapture)$|Capture$/i,X0=0,b0=d0(!1),v0=d0(!0),P0=0;var e,D,q0,p0,J0=0,f0=[],R=W,m0=R.__b,x0=R.__r,o0=R.diffed,j0=R.__c,i0=R.unmount,c0=R.__;function s0(b,v){R.__h&&R.__h(D,b,J0||v),J0=0;var g=D.__H||(D.__H={__:[],__h:[]});return b>=g.__.length&&g.__.push({}),g.__[b]}function C(b){return J0=1,Kb(a0,b)}function Kb(b,v,g){var X=s0(e++,2);if(X.t=b,!X.__c&&(X.__=[g?g(v):a0(void 0,v),function(J){var G=X.__N?X.__N[0]:X.__[0],V=X.t(G,J);G!==V&&(X.__N=[V,X.__[1]],X.__c.setState({}))}],X.__c=D,!D.__f)){var Q=function(J,G,V){if(!X.__c.__H)return!0;var N=X.__c.__H.__.filter(function(O){return!!O.__c});if(N.every(function(O){return!O.__N}))return!$||$.call(this,J,G,V);var q=X.__c.props!==J;return N.forEach(function(O){if(O.__N){var K=O.__[0];O.__=O.__N,O.__N=void 0,K!==O.__[0]&&(q=!0)}}),$&&$.call(this,J,G,V)||q};D.__f=!0;var{shouldComponentUpdate:$,componentWillUpdate:Y}=D;D.componentWillUpdate=function(J,G,V){if(this.__e){var N=$;$=void 0,Q(J,G,V),$=N}Y&&Y.call(this,J,G,V)},D.shouldComponentUpdate=Q}return X.__N||X.__}function m(b,v){var g=s0(e++,3);!R.__s&&Ab(g.__H,v)&&(g.__=b,g.u=v,D.__H.__h.push(g))}function Nb(){for(var b;b=f0.shift();)if(b.__P&&b.__H)try{b.__H.__h.forEach(r),b.__H.__h.forEach(V0),b.__H.__h=[]}catch(v){b.__H.__h=[],R.__e(v,b.__v)}}R.__b=function(b){D=null,m0&&m0(b)},R.__=function(b,v){b&&v.__k&&v.__k.__m&&(b.__m=v.__k.__m),c0&&c0(b,v)},R.__r=function(b){x0&&x0(b),e=0;var v=(D=b.__c).__H;v&&(q0===D?(v.__h=[],D.__h=[],v.__.forEach(function(g){g.__N&&(g.__=g.__N),g.u=g.__N=void 0})):(v.__h.forEach(r),v.__h.forEach(V0),v.__h=[],e=0)),q0=D},R.diffed=function(b){o0&&o0(b);var v=b.__c;v&&v.__H&&(v.__H.__h.length&&(f0.push(v)!==1&&p0===R.requestAnimationFrame||((p0=R.requestAnimationFrame)||Ob)(Nb)),v.__H.__.forEach(function(g){g.u&&(g.__H=g.u),g.u=void 0})),q0=D=null},R.__c=function(b,v){v.some(function(g){try{g.__h.forEach(r),g.__h=g.__h.filter(function(X){return!X.__||V0(X)})}catch(X){v.some(function(Q){Q.__h&&(Q.__h=[])}),v=[],R.__e(X,g.__v)}}),j0&&j0(b,v)},R.unmount=function(b){i0&&i0(b);var v,g=b.__c;g&&g.__H&&(g.__H.__.forEach(function(X){try{r(X)}catch(Q){v=Q}}),g.__H=void 0,v&&R.__e(v,g.__v))};var h0=typeof requestAnimationFrame=="function";function Ob(b){var v,g=function(){clearTimeout(X),h0&&cancelAnimationFrame(v),setTimeout(b)},X=setTimeout(g,35);h0&&(v=requestAnimationFrame(g))}function r(b){var v=D,g=b.__c;typeof g=="function"&&(b.__c=void 0,g()),D=v}function V0(b){var v=D;b.__c=b.__(),D=v}function Ab(b,v){return!b||b.length!==v.length||v.some(function(g,X){return g!==b[X]})}function a0(b,v){return typeof v=="function"?v(b):v}var zb={};function u(b,v){for(var g in v)b[g]=v[g];return b}function Wb(b,v,g){var X,Q=/(?:\?([^#]*))?(#.*)?$/,$=b.match(Q),Y={};if($&&$[1])for(var J=$[1].split("&"),G=0;G<J.length;G++){var V=J[G].split("=");Y[decodeURIComponent(V[0])]=decodeURIComponent(V.slice(1).join("="))}b=G0(b.replace(Q,"")),v=G0(v||"");for(var N=Math.max(b.length,v.length),q=0;q<N;q++)if(v[q]&&v[q].charAt(0)===":"){var O=v[q].replace(/(^:|[+*?]+$)/g,""),K=(v[q].match(/[+*?]+$/)||zb)[0]||"",H=~K.indexOf("+"),y=~K.indexOf("*"),d=b[q]||"";if(!d&&!y&&(K.indexOf("?")<0||H)){X=!1;break}if(Y[O]=decodeURIComponent(d),H||y){Y[O]=b.slice(q).map(decodeURIComponent).join("/");break}}else if(v[q]!==b[q]){X=!1;break}return(g.default===!0||X!==!1)&&Y}function Bb(b,v){return b.rank<v.rank?1:b.rank>v.rank?-1:b.index-v.index}function Hb(b,v){return b.index=v,b.rank=function(g){return g.props.default?0:G0(g.props.path).map(Eb).join("")}(b),b.props}function G0(b){return b.replace(/(^\/+|\/+$)/g,"").split("/")}function Eb(b){return b.charAt(0)==":"?1+"*+?".indexOf(b.charAt(b.length-1))||4:5}var db={},w=[],l0=[],P=null,e0={url:K0()},Db=k0(e0);function K0(){var b;return""+((b=P&&P.location?P.location:P&&P.getCurrentLocation?P.getCurrentLocation():typeof location<"u"?location:db).pathname||"")+(b.search||"")}function L(b,v){return v===void 0&&(v=!1),typeof b!="string"&&b.url&&(v=b.replace,b=b.url),function(g){for(var X=w.length;X--;)if(w[X].canRoute(g))return!0;return!1}(b)&&function(g,X){X===void 0&&(X="push"),P&&P[X]?P[X](g):typeof history<"u"&&history[X+"State"]&&history[X+"State"](null,null,g)}(b,v?"replace":"push"),u0(b)}function u0(b){for(var v=!1,g=0;g<w.length;g++)w[g].routeTo(b)&&(v=!0);return v}function Rb(b){if(b&&b.getAttribute){var v=b.getAttribute("href"),g=b.getAttribute("target");if(v&&v.match(/^\//g)&&(!g||g.match(/^_?self$/i)))return L(v)}}function yb(b){return b.stopImmediatePropagation&&b.stopImmediatePropagation(),b.stopPropagation&&b.stopPropagation(),b.preventDefault(),!1}function Cb(b){if(!(b.ctrlKey||b.metaKey||b.altKey||b.shiftKey||b.button)){var v=b.target;do if(v.localName==="a"&&v.getAttribute("href")){if(v.hasAttribute("data-native")||v.hasAttribute("native"))return;if(Rb(v))return yb(b)}while(v=v.parentNode)}}var r0=!1;function N0(b){b.history&&(P=b.history),this.state={url:b.url||K0()}}u(N0.prototype=new I,{shouldComponentUpdate:function(b){return b.static!==!0||b.url!==this.props.url||b.onChange!==this.props.onChange},canRoute:function(b){var v=l(this.props.children);return this.g(v,b)!==void 0},routeTo:function(b){this.setState({url:b});var v=this.canRoute(b);return this.p||this.forceUpdate(),v},componentWillMount:function(){this.p=!0},componentDidMount:function(){var b=this;r0||(r0=!0,P||addEventListener("popstate",function(){u0(K0())}),addEventListener("click",Cb)),w.push(this),P&&(this.u=P.listen(function(v){var g=v.location||v;b.routeTo(""+(g.pathname||"")+(g.search||""))})),this.p=!1},componentWillUnmount:function(){typeof this.u=="function"&&this.u(),w.splice(w.indexOf(this),1)},componentWillUpdate:function(){this.p=!0},componentDidUpdate:function(){this.p=!1},g:function(b,v){b=b.filter(Hb).sort(Bb);for(var g=0;g<b.length;g++){var X=b[g],Q=Wb(v,X.props.path,X.props);if(Q)return[X,Q]}},render:function(b,v){var g,X,Q=b.onChange,$=v.url,Y=this.c,J=this.g(l(b.children),$);if(J&&(X=I0(J[0],u(u({url:$,matches:g=J[1]},g),{key:void 0,ref:void 0}))),$!==(Y&&Y.url)){u(e0,Y=this.c={url:$,previous:Y&&Y.url,current:X,path:X?X.props.path:null,matches:g}),Y.router=this,Y.active=X?[X]:[];for(var G=l0.length;G--;)l0[G]({});typeof Q=="function"&&Q(Y)}return a(Db.Provider,{value:Y},X)}});var O0=function(b){return a(b.component,b)};var Pb=0;function Z(b,v,g,X,Q,$){v||(v={});var Y,J,G=v;if("ref"in G)for(J in G={},v)J=="ref"?Y=v[J]:G[J]=v[J];var V={type:b,props:G,key:g,ref:Y,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Pb,__i:-1,__u:0,__source:Q,__self:$};if(typeof b=="function"&&(Y=b.defaultProps))for(J in Y)G[J]===void 0&&(G[J]=Y[J]);return W.vnode&&W.vnode(V),V}function t0({report:b}){let[v,g]=C(new Set(b.features.map(($)=>$.feature))),X=($)=>{let Y=new Set(v);if(Y.has($))Y.delete($);else Y.add($);g(Y)},Q=b.features.map(($)=>{let Y=new Map;for(let J of $.facets){let G=J.facet.source.file;if(!Y.has(G))Y.set(G,{covered:0,total:0});let V=Y.get(G);if(V.total++,J.covered)V.covered++}return{feature:$.feature,path:$.path,percentage:$.percentage,files:Array.from(Y.entries()).map(([J,G])=>({file:J,fileName:J.split("/").pop()||J,covered:G.covered,total:G.total,percentage:G.total>0?Math.round(G.covered/G.total*100):0}))}});return Z("aside",{class:"w-72 flex-shrink-0 border-r border-slate-700 bg-slate-800 flex flex-col",children:[Z("div",{class:"p-4 border-b border-slate-700",children:Z("h1",{class:"text-lg font-semibold flex items-center gap-2",children:[Z("span",{class:"text-blue-400",children:"\uD83D\uDC8E"}),"Facet Docs"]})}),Z("nav",{class:"flex-1 overflow-y-auto p-2",children:[Z("a",{href:"/",onClick:($)=>{$.preventDefault(),L("/")},class:"flex items-center justify-between px-3 py-2 rounded-md hover:bg-slate-700 cursor-pointer mb-3",children:[Z("div",{class:"flex items-center gap-2",children:[Z("span",{class:"text-slate-400",children:"\uD83D\uDCCA"}),Z("span",{class:"font-medium",children:"Dashboard"})]}),Z(n0,{percentage:b.summary.percentage})]}),Z("div",{class:"text-xs text-slate-500 uppercase tracking-wider px-3 mb-2",children:"Features"}),Q.map(($)=>Z("div",{class:"mb-1",children:[Z("div",{onClick:()=>X($.feature),class:"flex items-center justify-between px-3 py-2 rounded-md hover:bg-slate-700 cursor-pointer",children:[Z("div",{class:"flex items-center gap-2",children:[Z("span",{class:`text-xs transition-transform ${v.has($.feature)?"rotate-90":""}`,children:"▶"}),Z("span",{class:"text-slate-400",children:"\uD83D\uDCC1"}),Z("span",{class:"font-medium text-sm",children:$.feature})]}),Z(n0,{percentage:$.percentage,small:!0})]}),v.has($.feature)&&Z("div",{class:"ml-4 border-l border-slate-700",children:$.files.map((Y)=>Z("a",{href:`/doc/${$.feature}/${Y.fileName}`,onClick:(J)=>{J.preventDefault(),L(`/doc/${$.feature}/${Y.fileName}`)},class:"flex items-center justify-between px-3 py-1.5 rounded hover:bg-slate-700/50 cursor-pointer group",children:[Z("div",{class:"flex items-center gap-2",children:[Z("span",{class:"text-slate-500 group-hover:text-slate-400",children:"\uD83D\uDCC4"}),Z("span",{class:"text-sm text-slate-300 group-hover:text-slate-100",children:Y.fileName})]}),Z("span",{class:"text-xs text-slate-500",children:[Y.covered,"/",Y.total]})]},Y.file))})]},$.feature))]}),Z("div",{class:"p-3 border-t border-slate-700 text-xs text-slate-500",children:[Z("div",{class:"flex justify-between",children:[Z("span",{children:"Total Coverage"}),Z("span",{children:[b.summary.percentage,"%"]})]}),Z("div",{class:"flex justify-between mt-1",children:[Z("span",{children:"Facets"}),Z("span",{children:[b.summary.coveredFacets,"/",b.summary.totalFacets]})]})]})]})}function n0({percentage:b,small:v}){let g=b>=80?"bg-green-500/20 text-green-400":b>=50?"bg-yellow-500/20 text-yellow-400":"bg-red-500/20 text-red-400";return Z("span",{class:`${g} ${v?"text-xs px-1.5 py-0.5":"text-xs px-2 py-1"} rounded font-medium`,children:[b,"%"]})}function bb({report:b}){let{summary:v,byType:g,features:X,uncovered:Q}=b,$=A0(v.percentage);return Z("div",{class:"h-full overflow-y-auto p-6",children:[Z("div",{class:"grid grid-cols-4 gap-4 mb-6",children:[Z(n,{label:"Coverage",value:`${v.percentage}%`,colorClass:$,showBar:!0,barValue:v.percentage}),Z(n,{label:"Total Facets",value:v.totalFacets}),Z(n,{label:"Covered",value:v.coveredFacets,colorClass:"text-green-400"}),Z(n,{label:"Uncovered",value:v.uncoveredFacets,colorClass:"text-red-400"})]}),g.length>0&&Z("div",{class:"bg-slate-800 rounded-xl p-5 mb-6 border border-slate-700",children:[Z("h2",{class:"text-lg font-semibold mb-4",children:"Coverage by Type"}),Z("div",{class:"grid grid-cols-3 gap-4",children:g.map((Y)=>Z(Ub,{type:Y},Y.type))})]}),Z("div",{class:"bg-slate-800 rounded-xl p-5 mb-6 border border-slate-700",children:[Z("h2",{class:"text-lg font-semibold mb-4",children:"Features"}),Z("div",{class:"grid grid-cols-2 gap-4",children:X.map((Y)=>Z(_b,{feature:Y},Y.feature))})]}),Q.length>0&&Z("div",{class:"bg-slate-800 rounded-xl p-5 border border-slate-700",children:[Z("h2",{class:"text-lg font-semibold mb-4",children:["Uncovered Facets",Q.length>10&&Z("span",{class:"text-sm font-normal text-slate-400 ml-2",children:["(showing 10 of ",Q.length,")"]})]}),Z("div",{class:"space-y-2",children:Q.slice(0,10).map((Y)=>Z("div",{onClick:()=>L(`/facet/${encodeURIComponent(Y.id)}`),class:"p-3 bg-slate-900 rounded-lg border-l-2 border-red-500 hover:bg-slate-700 cursor-pointer",children:[Z("div",{class:"flex items-center justify-between",children:[Z("code",{class:"text-sm font-medium",children:Y.id}),Z("span",{class:"text-xs px-2 py-0.5 bg-slate-700 rounded capitalize",children:Y.type})]}),Z("div",{class:"text-xs text-slate-400 mt-1",children:[Y.source.file,"#",Y.source.section]})]},Y.id))})]})]})}function n({label:b,value:v,colorClass:g="text-white",showBar:X,barValue:Q}){return Z("div",{class:"bg-slate-800 rounded-xl p-4 border border-slate-700",children:[Z("div",{class:`text-3xl font-bold ${g}`,children:v}),Z("div",{class:"text-sm text-slate-400 mt-1",children:b}),X&&Q!==void 0&&Z("div",{class:"mt-2 h-1.5 bg-slate-700 rounded-full overflow-hidden",children:Z("div",{class:`h-full ${z0(Q)} transition-all`,style:{width:`${Q}%`}})})]})}function Ub({type:b}){let v=A0(b.percentage),g=z0(b.percentage);return Z("div",{class:"bg-slate-900 rounded-lg p-4",children:[Z("div",{class:"flex items-center justify-between mb-2",children:[Z("span",{class:"font-medium capitalize",children:b.type}),Z("span",{class:`text-sm font-bold ${v}`,children:[b.percentage,"%"]})]}),Z("div",{class:"h-1.5 bg-slate-700 rounded-full overflow-hidden mb-2",children:Z("div",{class:`h-full ${g}`,style:{width:`${b.percentage}%`}})}),Z("div",{class:"text-xs text-slate-400",children:[b.covered," / ",b.total," covered"]})]})}function _b({feature:b}){let v=A0(b.percentage),g=z0(b.percentage);return Z("div",{onClick:()=>L(`/feature/${encodeURIComponent(b.feature)}`),class:"bg-slate-900 rounded-lg p-4 hover:bg-slate-700 cursor-pointer transition-colors border border-transparent hover:border-blue-500",children:[Z("div",{class:"font-medium mb-2",children:b.feature}),Z("div",{class:"h-1.5 bg-slate-700 rounded-full overflow-hidden mb-2",children:Z("div",{class:`h-full ${g}`,style:{width:`${b.percentage}%`}})}),Z("div",{class:"flex items-center justify-between",children:[Z("span",{class:"text-xs text-slate-400",children:[b.coveredFacets,"/",b.totalFacets," facets"]}),Z("span",{class:`text-sm font-bold ${v}`,children:[b.percentage,"%"]})]})]})}function A0(b){if(b>=80)return"text-green-400";if(b>=50)return"text-yellow-400";return"text-red-400"}function z0(b){if(b>=80)return"bg-green-500";if(b>=50)return"bg-yellow-500";return"bg-red-500"}function vb({markdown:b,report:v,featurePath:g,sourceFile:X,onFacetClick:Q,selectedFacetId:$}){let Y=Tb(v,g,X),J=Mb(b,Y,$);return Z("div",{class:"markdown-content prose prose-invert prose-slate max-w-none",dangerouslySetInnerHTML:{__html:J},onClick:(G)=>{let N=G.target.closest("[data-facet-id]");if(N){let q=N.dataset.facetId;if(q&&Y[q]){let{fullId:O,coverage:K}=Y[q];Q(O,K.coveredBy)}else if(q){let K=v.features.find((H)=>H.path===g)?.facets.find((H)=>H.facet.id===q);if(K)Q(q,K.coveredBy)}}}})}function Tb(b,v,g){let X={},Q=b.features.find(($)=>$.path===v);if(!Q)return X;for(let $ of Q.facets)if($.facet.source.file===g){let Y=$.facet.id,J=Y.split(":").pop()||"";X[Y]={fullId:Y,coverage:$},X[J]={fullId:Y,coverage:$};let G=J.split("/").pop()||"";if(G&&!X[G])X[G]={fullId:Y,coverage:$};if($.facet.source.section){let V=$.facet.source.section;if(!X[V])X[V]={fullId:Y,coverage:$}}}return X}function Mb(b,v,g){let X=b;return X=Lb(X),X=X.replace(/<a href="#([^"]+)"><\/a>/g,(Q,$)=>W0($,v,g)),X=X.replace(/&lt;!-- @facet:(\w+) --&gt;/g,(Q,$)=>W0($,v,g)),X=X.replace(/<!-- @facet:(\w+) -->/g,(Q,$)=>W0($,v,g)),X}function W0(b,v,g){let X=v[b];if(!X)return`<span class="facet-chip unknown" data-facet-id="${b}" title="Unknown facet: ${b}">? ${b}</span>`;let{fullId:Q,coverage:$}=X,Y=$.coveredBy.length,J=$.covered,G=g===Q,V=J?"covered":"uncovered",N=G?"selected":"",q=J?"✓":"✗",O=Y===1?"1 test":`${Y} tests`;return`<span class="facet-chip ${V} ${N}" data-facet-id="${b}" title="${Q}">${q} ${O}</span>`}function Lb(b){let v=b;v=v.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),v=v.replace(/&lt;!-- @facet:/g,"<!-- @facet:"),v=v.replace(/ --&gt;/g," -->"),v=v.replace(/^###### (.+)$/gm,"<h6>$1</h6>"),v=v.replace(/^##### (.+)$/gm,"<h5>$1</h5>"),v=v.replace(/^#### (.+)$/gm,"<h4>$1</h4>"),v=v.replace(/^### (.+)$/gm,"<h3>$1</h3>"),v=v.replace(/^## (.+)$/gm,"<h2>$1</h2>"),v=v.replace(/^# (.+)$/gm,"<h1>$1</h1>"),v=v.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2">$1</a>'),v=v.replace(/\[\]\(#([^)]+)\)/g,'<a href="#$1"></a>'),v=v.replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>"),v=v.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,"<em>$1</em>"),v=v.replace(/`([^`]+)`/g,"<code>$1</code>"),v=v.replace(/```(\w*)\n([\s\S]*?)```/g,(Y,J,G)=>{let V=G.trim();return`<pre><code class="language-${J||"text"}">${V}</code></pre>`}),v=v.replace(/^---$/gm,"<hr>"),v=v.replace(/^\*\*\*$/gm,"<hr>"),v=v.replace(/^- (.+)$/gm,"<li>$1</li>"),v=v.replace(/^(\s*)- (.+)$/gm,'<li class="ml-4">$2</li>'),v=v.replace(/^\d+\. (.+)$/gm,"<li>$1</li>"),v=v.replace(/(<li[^>]*>.*<\/li>\n?)+/g,(Y)=>{let G=Y.includes("1.")?"ol":"ul";return`<${G} class="list-disc ml-6 my-2">${Y}</${G}>`});let g=v.split(`
2
+ `),X=[],Q=!1,$=[];for(let Y of g){let J=Y.trim();if(J.startsWith("<h")||J.startsWith("<ul")||J.startsWith("<ol")||J.startsWith("<li")||J.startsWith("<pre")||J.startsWith("<hr")||J.startsWith("</ul")||J.startsWith("</ol")||J.startsWith("</pre")||J===""){if(Q&&$.length>0)X.push(`<p>${$.join(" ")}</p>`),$=[],Q=!1;if(J)X.push(Y)}else Q=!0,$.push(J)}if($.length>0)X.push(`<p>${$.join(" ")}</p>`);return X.join(`
3
+ `)}function gb({report:b,feature:v,file:g}){let[X,Q]=C(""),[$,Y]=C(!0),[J,G]=C(null),[V,N]=C([]),[q,O]=C(null),K=b.features.find((A)=>A.feature===v),H=K?.path||`features/${v}`,y=`facets/${g}`,d=K?.facets.filter((A)=>A.facet.source.file===y)||[],B=d.filter((A)=>A.covered).length,z=d.length,U=z>0?Math.round(B/z*100):0;m(()=>{Y(!0);let A=`features/${v}/${y}`;fetch(`/api/markdown?path=${encodeURIComponent(A)}`).then((E)=>E.json()).then((E)=>{if(E.content)Q(E.content);else Q(`# Error
4
+
5
+ Could not load ${g}`);Y(!1)}).catch((E)=>{console.error("Failed to fetch markdown:",E),Q(`# Error
6
+
7
+ Failed to load document: ${E.message}`),Y(!1)})},[v,g,y]),m(()=>{if(V.length>0){let A=V[0];fetch(`/api/test-source?file=${encodeURIComponent(A.file)}&line=${A.line||1}`).then((E)=>E.json()).then((E)=>{if(E.code)O({code:E.code,startLine:E.startLine||1})}).catch((E)=>console.error("Failed to fetch test source:",E))}else O(null)},[V]);let _=(A,E)=>{G(A),N(E)};if($)return Z("div",{class:"flex h-full items-center justify-center",children:Z("div",{class:"text-slate-400",children:"Loading document..."})});return Z("div",{class:"flex h-full",children:[Z("div",{class:"flex-1 overflow-y-auto p-6 border-r border-slate-700",children:[Z("div",{class:"mb-6 pb-4 border-b border-slate-700",children:[Z("div",{class:"flex items-center gap-2 text-sm text-slate-400 mb-2",children:[Z("button",{onClick:()=>L("/"),class:"hover:text-slate-200 transition-colors",children:"Dashboard"}),Z("span",{children:"/"}),Z("span",{children:v}),Z("span",{children:"/"}),Z("span",{class:"text-slate-200",children:g})]}),Z("div",{class:"flex items-center justify-between",children:[Z("h1",{class:"text-2xl font-bold",children:g.replace(".md","")}),Z("div",{class:"flex items-center gap-3",children:[Z("span",{class:"text-sm text-slate-400",children:[B,"/",z," facets covered"]}),Z(Fb,{percentage:U})]})]})]}),Z(vb,{markdown:X,report:b,featurePath:H,sourceFile:y,onFacetClick:_,selectedFacetId:J||void 0}),Z("style",{children:`
8
+ .facet-chip {
9
+ display: inline-flex;
10
+ align-items: center;
11
+ gap: 0.25rem;
12
+ padding: 0.125rem 0.5rem;
13
+ margin: 0 0.25rem;
14
+ border-radius: 9999px;
15
+ font-size: 0.75rem;
16
+ font-weight: 500;
17
+ cursor: pointer;
18
+ transition: all 0.15s;
19
+ vertical-align: middle;
20
+ }
21
+ .facet-chip.covered {
22
+ background: rgba(34, 197, 94, 0.2);
23
+ color: rgb(74, 222, 128);
24
+ border: 1px solid rgba(34, 197, 94, 0.3);
25
+ }
26
+ .facet-chip.covered:hover {
27
+ background: rgba(34, 197, 94, 0.3);
28
+ }
29
+ .facet-chip.uncovered {
30
+ background: rgba(239, 68, 68, 0.2);
31
+ color: rgb(248, 113, 113);
32
+ border: 1px solid rgba(239, 68, 68, 0.3);
33
+ }
34
+ .facet-chip.uncovered:hover {
35
+ background: rgba(239, 68, 68, 0.3);
36
+ }
37
+ .facet-chip.unknown {
38
+ background: rgba(148, 163, 184, 0.2);
39
+ color: rgb(148, 163, 184);
40
+ border: 1px solid rgba(148, 163, 184, 0.3);
41
+ }
42
+ .facet-chip.selected {
43
+ ring: 2px;
44
+ ring-offset: 2px;
45
+ box-shadow: 0 0 0 2px rgb(59, 130, 246);
46
+ }
47
+ .markdown-content h1 { font-size: 1.875rem; font-weight: 700; margin: 1.5rem 0 1rem; }
48
+ .markdown-content h2 { font-size: 1.5rem; font-weight: 600; margin: 1.25rem 0 0.75rem; border-bottom: 1px solid rgb(51, 65, 85); padding-bottom: 0.5rem; }
49
+ .markdown-content h3 { font-size: 1.25rem; font-weight: 600; margin: 1rem 0 0.5rem; }
50
+ .markdown-content h4 { font-size: 1.125rem; font-weight: 600; margin: 0.75rem 0 0.5rem; }
51
+ .markdown-content p { margin: 0.75rem 0; line-height: 1.625; }
52
+ .markdown-content ul, .markdown-content ol { margin: 0.5rem 0; padding-left: 1.5rem; }
53
+ .markdown-content li { margin: 0.25rem 0; }
54
+ .markdown-content code { background: rgba(30, 41, 59, 0.8); padding: 0.125rem 0.375rem; border-radius: 0.25rem; font-size: 0.875em; }
55
+ .markdown-content pre { background: rgb(15, 23, 42); padding: 1rem; border-radius: 0.5rem; overflow-x: auto; margin: 1rem 0; }
56
+ .markdown-content pre code { background: transparent; padding: 0; }
57
+ .markdown-content strong { font-weight: 600; }
58
+ .markdown-content a:not(.facet-chip) { color: rgb(96, 165, 250); text-decoration: underline; }
59
+ .markdown-content hr { border-color: rgb(51, 65, 85); margin: 1.5rem 0; }
60
+ `})]}),Z("div",{class:"w-96 flex-shrink-0 bg-slate-800/50 overflow-y-auto",children:J?Z("div",{class:"p-4",children:[Z("div",{class:"mb-4",children:[Z("h2",{class:"text-lg font-semibold mb-1",children:"Tests"}),Z("p",{class:"text-sm text-slate-400",children:[V.length," test",V.length!==1?"s":""," covering this facet"]})]}),V.length===0?Z("div",{class:"text-center py-8 text-slate-500",children:[Z("div",{class:"text-4xl mb-2",children:"\uD83E\uDDEA"}),Z("p",{children:"No tests cover this facet"}),Z("p",{class:"text-sm mt-1",children:"Add tests to improve coverage"})]}):Z("div",{class:"space-y-3",children:V.map((A,E)=>Z("div",{class:"bg-slate-900 rounded-lg overflow-hidden",children:[Z("div",{class:"p-3 border-b border-slate-700",children:[Z("div",{class:"font-medium text-sm",children:A.title}),Z("div",{class:"text-xs text-slate-400 mt-1",children:[A.file,":",A.line]})]}),q&&E===0&&Z("pre",{class:"p-3 text-xs overflow-x-auto bg-slate-950",children:Z("code",{children:q.code})})]},E))})]}):Z("div",{class:"p-4",children:[Z("h2",{class:"text-lg font-semibold mb-4",children:"Document Coverage"}),Z("div",{class:"space-y-2",children:d.map((A)=>Z("button",{onClick:()=>_(A.facet.id,A.coveredBy),class:`w-full text-left p-3 rounded-lg transition-colors ${A.covered?"bg-green-500/10 hover:bg-green-500/20 border border-green-500/20":"bg-red-500/10 hover:bg-red-500/20 border border-red-500/20"}`,children:[Z("div",{class:"flex items-center justify-between",children:[Z("span",{class:"text-sm font-medium",children:A.facet.title||A.facet.id.split(":").pop()}),Z("span",{class:`text-xs ${A.covered?"text-green-400":"text-red-400"}`,children:A.covered?`✓ ${A.coveredBy.length}`:"✗ 0"})]}),A.facet.isSubFacet&&Z("div",{class:"text-xs text-slate-500 mt-1",children:"Sub-facet"})]},A.facet.id))})]})})]})}function Fb({percentage:b}){let v=b>=80?"bg-green-500/20 text-green-400 border-green-500/30":b>=50?"bg-yellow-500/20 text-yellow-400 border-yellow-500/30":"bg-red-500/20 text-red-400 border-red-500/30";return Z("span",{class:`${v} text-sm px-2 py-1 rounded border font-medium`,children:[b,"%"]})}function $b({status:b}){if(!b)return null;let v={connected:{text:"Connected",bgClass:"bg-green-500/20 border-green-500/50",textClass:"text-green-400"},updating:{text:"Updating...",bgClass:"bg-yellow-500/20 border-yellow-500/50",textClass:"text-yellow-400"},error:{text:"Connection error",bgClass:"bg-red-500/20 border-red-500/50",textClass:"text-red-400"}},{text:g,bgClass:X,textClass:Q}=v[b];return Z("div",{class:`fixed bottom-4 right-4 px-4 py-2 rounded-lg border ${X} flex items-center gap-2`,children:[b==="updating"&&Z("div",{class:"w-4 h-4 border-2 border-yellow-500/30 border-t-yellow-500 rounded-full animate-spin"}),Z("span",{class:`text-sm ${Q}`,children:g})]})}function Xb(){let[b,v]=C(null),[g,X]=C(!0),[Q,$]=C(null);m(()=>{Y(),J()},[]);async function Y(){try{let V=await(await fetch("/api/coverage")).json();v(V),X(!1)}catch(G){console.error("Failed to fetch coverage:",G),X(!1)}}function J(){let G=window.location.protocol==="https:"?"wss:":"ws:",V=new WebSocket(`${G}//${window.location.host}/ws`);V.onopen=()=>{$("connected"),setTimeout(()=>$(null),2000)},V.onmessage=(N)=>{let q=JSON.parse(N.data);if(q.type==="file-change")$("updating");else if(q.type==="coverage-update")Y(),$("connected"),setTimeout(()=>$(null),2000);else if(q.type==="client-reload")console.log("Client bundle updated, reloading..."),window.location.reload()},V.onclose=()=>{setTimeout(J,1000)}}if(g)return Z("div",{class:"flex h-screen items-center justify-center bg-slate-900 text-white",children:Z("div",{class:"text-center",children:[Z("div",{class:"mb-4 h-8 w-8 animate-spin rounded-full border-2 border-slate-600 border-t-blue-500 mx-auto"}),Z("p",{class:"text-slate-400",children:"Loading coverage data..."})]})});if(!b)return Z("div",{class:"flex h-screen items-center justify-center bg-slate-900 text-white",children:Z("p",{class:"text-red-400",children:"Failed to load coverage data"})});return Z("div",{class:"flex h-screen bg-slate-900 text-slate-100",children:[Z(t0,{report:b}),Z("main",{class:"flex-1 overflow-hidden",children:Z(N0,{children:[Z(O0,{path:"/",component:()=>Z(bb,{report:b})}),Z(O0,{path:"/doc/:feature/:file",component:({feature:G,file:V})=>Z(gb,{report:b,feature:decodeURIComponent(G),file:decodeURIComponent(V)})})]})}),Z($b,{status:Q})]})}var Yb=document.getElementById("app");if(Yb)S0(Z(Xb,{}),Yb);
@@ -9,10 +9,11 @@ export declare class FacetParser {
9
9
  static slugify(title: string): string;
10
10
  /**
11
11
  * Parse sub-facet markers from content lines.
12
- * Supports three patterns:
13
- * 1. List item IDs: `1. **Item** {#sub-id} - description` or `- Item {#sub-id}`
14
- * 2. Comment markers: `<!-- @facet:sub-id -->`
15
- * 3. Empty link anchors: `[](#sub-id)` - renders invisibly in markdown
12
+ * Supports two patterns:
13
+ * 1. Comment markers: `<!-- @facet:sub-id -->`
14
+ * 2. Empty link anchors: `[](#sub-id)` - renders invisibly in markdown
15
+ *
16
+ * Skips content inside fenced code blocks and inline backticks.
16
17
  *
17
18
  * @param lines - Array of content lines
18
19
  * @param startLineNumber - The 1-indexed line number of the first line in the array
@@ -1 +1 @@
1
- {"version":3,"file":"FacetParser.d.ts","sourceRoot":"","sources":["../../src/core/FacetParser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnF;;GAEG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAUrC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,MAAM,GAAG,cAAc,EAAE;IA+DjF;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAS3C;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,cAAc;IAyDpE;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI9E;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAS7D;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAK3C;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI/C;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQ9C;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAKrE;;;;;;;;OAQG;IACH,MAAM,CAAC,2BAA2B,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM;IAqBT;;;;;;;OAOG;IACH,MAAM,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAI5E;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAM7C;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAS3D"}
1
+ {"version":3,"file":"FacetParser.d.ts","sourceRoot":"","sources":["../../src/core/FacetParser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnF;;GAEG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAUrC;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,MAAM,GAAG,cAAc,EAAE;IAuDjF;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAS3C;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,cAAc;IA+EpE;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI9E;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAS7D;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAK3C;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI/C;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQ9C;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAKrE;;;;;;;;OAQG;IACH,MAAM,CAAC,2BAA2B,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM;IAqBT;;;;;;;OAOG;IACH,MAAM,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAI5E;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAM7C;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAS3D"}
@@ -21,10 +21,11 @@ class FacetParser {
21
21
  }
22
22
  /**
23
23
  * Parse sub-facet markers from content lines.
24
- * Supports three patterns:
25
- * 1. List item IDs: `1. **Item** {#sub-id} - description` or `- Item {#sub-id}`
26
- * 2. Comment markers: `<!-- @facet:sub-id -->`
27
- * 3. Empty link anchors: `[](#sub-id)` - renders invisibly in markdown
24
+ * Supports two patterns:
25
+ * 1. Comment markers: `<!-- @facet:sub-id -->`
26
+ * 2. Empty link anchors: `[](#sub-id)` - renders invisibly in markdown
27
+ *
28
+ * Skips content inside fenced code blocks and inline backticks.
28
29
  *
29
30
  * @param lines - Array of content lines
30
31
  * @param startLineNumber - The 1-indexed line number of the first line in the array
@@ -32,32 +33,22 @@ class FacetParser {
32
33
  */
33
34
  static parseSubFacets(lines, startLineNumber) {
34
35
  const subFacets = [];
35
- // Pattern for list item with {#id}: matches "1. **text** {#id} - rest", "- text {#id}", "* text {#id}"
36
- // The {#id} can appear anywhere in the list item, followed by optional content
37
- // Captures: list marker, text before {#id}, the ID, and optional rest
38
- const listItemPattern = /^(\s*(?:[-*]|\d+\.)\s+)(.+?)\s*\{#([a-z0-9-]+)\}(.*)$/;
39
36
  // Pattern for comment markers: <!-- @facet:id --> or <!-- @facet: id -->
40
37
  const commentPattern = /<!--\s*@facet:\s*([a-z0-9-]+)\s*-->/g;
41
38
  // Pattern for empty link anchors: [](#id) or []( #id ) with optional whitespace
42
39
  const emptyLinkPattern = /\[\]\(\s*#([a-z0-9-]+)\s*\)/g;
40
+ // Track if we're inside a fenced code block
41
+ let inCodeBlock = false;
43
42
  for (let i = 0; i < lines.length; i++) {
44
43
  const line = lines[i];
45
44
  const lineNumber = startLineNumber + i;
46
- // Check for list item with {#id}
47
- const listMatch = line.match(listItemPattern);
48
- if (listMatch) {
49
- // Extract title: the text before {#id}
50
- let title = listMatch[2].trim();
51
- // Remove markdown bold: **text** -> text
52
- title = title.replace(/\*\*([^*]+)\*\*/g, '$1');
53
- // Clean up any trailing punctuation
54
- title = title.replace(/[:\s-]+$/, '').trim();
55
- subFacets.push({
56
- id: listMatch[3],
57
- title: title,
58
- line: lineNumber,
59
- type: 'list-item',
60
- });
45
+ // Check for fenced code block markers (``` or ~~~)
46
+ if (line.trim().startsWith('```') || line.trim().startsWith('~~~')) {
47
+ inCodeBlock = !inCodeBlock;
48
+ continue;
49
+ }
50
+ // Skip lines inside code blocks
51
+ if (inCodeBlock) {
61
52
  continue;
62
53
  }
63
54
  // Check for comment markers (can have multiple per line)
@@ -70,9 +61,11 @@ class FacetParser {
70
61
  });
71
62
  }
72
63
  commentPattern.lastIndex = 0;
73
- // Check for empty link anchors (can have multiple per line)
64
+ // Check for empty link anchors, but skip those inside backticks
65
+ // Remove backticked content before matching
66
+ const lineWithoutBackticks = line.replace(/`[^`]+`/g, '');
74
67
  let linkMatch;
75
- while ((linkMatch = emptyLinkPattern.exec(line)) !== null) {
68
+ while ((linkMatch = emptyLinkPattern.exec(lineWithoutBackticks)) !== null) {
76
69
  subFacets.push({
77
70
  id: linkMatch[1],
78
71
  line: lineNumber,
@@ -99,18 +92,31 @@ class FacetParser {
99
92
  parseContent(content, filePath = '') {
100
93
  const lines = content.split('\n');
101
94
  const sections = [];
95
+ // Pattern for standalone explicit ID anchor: [](#id) on its own line
96
+ const explicitIdPattern = /^\s*\[\]\(\s*#([a-z0-9-]+)\s*\)\s*$/;
102
97
  // First pass: find all headings
103
- // Supports explicit anchor syntax: ## Heading {#custom-id}
104
98
  const headings = [];
105
99
  for (let i = 0; i < lines.length; i++) {
106
100
  const line = lines[i];
107
- // Match heading with optional {#anchor-id} at the end
108
- const match = line.match(/^(#{1,6})\s+(.+?)(?:\s*\{#([a-z0-9-]+)\})?\s*$/);
101
+ // Match heading
102
+ const match = line.match(/^(#{1,6})\s+(.+?)\s*$/);
109
103
  if (match) {
104
+ // Check if the next non-empty line is an explicit ID anchor
105
+ let explicitId;
106
+ for (let j = i + 1; j < lines.length; j++) {
107
+ const nextLine = lines[j];
108
+ if (nextLine.trim() === '')
109
+ continue; // Skip empty lines
110
+ const idMatch = nextLine.match(explicitIdPattern);
111
+ if (idMatch) {
112
+ explicitId = idMatch[1];
113
+ }
114
+ break; // Only check the first non-empty line after heading
115
+ }
110
116
  headings.push({
111
117
  level: match[1].length,
112
118
  title: match[2].trim(),
113
- explicitId: match[3] || undefined,
119
+ explicitId,
114
120
  line: i + 1, // 1-indexed
115
121
  });
116
122
  }
@@ -126,10 +132,16 @@ class FacetParser {
126
132
  const sectionContent = contentLines.join('\n').trim();
127
133
  // Parse sub-facets from section content
128
134
  // Content starts at line after heading (startLine is the heading itself)
129
- const subFacets = FacetParser.parseSubFacets(contentLines, startLine + 1);
135
+ let subFacets = FacetParser.parseSubFacets(contentLines, startLine + 1);
136
+ // Use explicit ID if provided, otherwise generate from title
137
+ const slug = heading.explicitId || FacetParser.slugify(heading.title);
138
+ // If heading has explicit ID, filter it out from sub-facets (it was used for heading slug)
139
+ if (heading.explicitId) {
140
+ subFacets = subFacets.filter(sf => sf.id !== heading.explicitId);
141
+ }
130
142
  sections.push({
131
143
  title: heading.title,
132
- slug: heading.explicitId || FacetParser.slugify(heading.title),
144
+ slug,
133
145
  level: heading.level,
134
146
  startLine,
135
147
  endLine,
@@ -1 +1 @@
1
- {"version":3,"file":"FacetParser.js","sourceRoot":"","sources":["../../src/core/FacetParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FacetParser.js","sourceRoot":"","sources":["../../src/core/FacetParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { FacetConfig, CoverageReport } from '../types.js';
2
+ export interface DevServerOptions {
3
+ port: number;
4
+ host: string;
5
+ open: boolean;
6
+ packageRoot: string;
7
+ }
8
+ export interface WebSocketData {
9
+ id: string;
10
+ }
11
+ /**
12
+ * Development server for browsing facet documentation with live coverage
13
+ */
14
+ export declare class DevServer {
15
+ private server;
16
+ private hotReload;
17
+ private config;
18
+ private cwd;
19
+ private options;
20
+ private router;
21
+ private coverageReport;
22
+ constructor(config: FacetConfig, cwd: string, options: DevServerOptions);
23
+ /**
24
+ * Get the current coverage report
25
+ */
26
+ getCoverageReport(): CoverageReport | null;
27
+ /**
28
+ * Get config
29
+ */
30
+ getConfig(): FacetConfig;
31
+ /**
32
+ * Get current working directory
33
+ */
34
+ getCwd(): string;
35
+ /**
36
+ * Calculate coverage and update the cached report
37
+ */
38
+ refreshCoverage(): Promise<CoverageReport>;
39
+ /**
40
+ * Start the development server
41
+ */
42
+ start(): Promise<void>;
43
+ /**
44
+ * Stop the server
45
+ */
46
+ stop(): Promise<void>;
47
+ }
48
+ //# sourceMappingURL=DevServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevServer.d.ts","sourceRoot":"","sources":["../../src/server/DevServer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK/D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAA+B;gBAEzC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;IASvE;;OAEG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C;;OAEG;IACH,SAAS,IAAI,WAAW;IAIxB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC;IAMhD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuE5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAO5B"}