@analogjs/content 3.0.0-alpha.2 → 3.0.0-alpha.21

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 (93) hide show
  1. package/LICENSE +21 -0
  2. package/fesm2022/analogjs-content-md4x.mjs +290 -0
  3. package/fesm2022/analogjs-content-md4x.mjs.map +1 -0
  4. package/fesm2022/analogjs-content-mdc.mjs +170 -0
  5. package/fesm2022/analogjs-content-mdc.mjs.map +1 -0
  6. package/fesm2022/analogjs-content-og.mjs +34 -46
  7. package/fesm2022/analogjs-content-og.mjs.map +1 -1
  8. package/fesm2022/analogjs-content-prism-highlighter.mjs +81 -68
  9. package/fesm2022/analogjs-content-prism-highlighter.mjs.map +1 -1
  10. package/fesm2022/analogjs-content-resources.mjs +113 -124
  11. package/fesm2022/analogjs-content-resources.mjs.map +1 -1
  12. package/fesm2022/analogjs-content-shiki-highlighter.mjs +9 -14
  13. package/fesm2022/analogjs-content-shiki-highlighter.mjs.map +1 -1
  14. package/fesm2022/analogjs-content.mjs +658 -636
  15. package/fesm2022/analogjs-content.mjs.map +1 -1
  16. package/fesm2022/content-list-loader.mjs +284 -0
  17. package/fesm2022/content-list-loader.mjs.map +1 -0
  18. package/md4x/package.json +4 -0
  19. package/mdc/package.json +4 -0
  20. package/og/package.json +2 -2
  21. package/package.json +67 -38
  22. package/plugin/package.json +2 -22
  23. package/plugin/src/index.d.ts +4 -2
  24. package/plugin/src/index.js +6 -3
  25. package/plugin/src/index.js.map +1 -1
  26. package/plugin/src/migrations/update-markdown-version/compat.d.ts +6 -2
  27. package/plugin/src/migrations/update-markdown-version/compat.js +8 -5
  28. package/plugin/src/migrations/update-markdown-version/compat.js.map +1 -1
  29. package/plugin/src/migrations/update-markdown-version/update-markdown-version.d.ts +6 -2
  30. package/plugin/src/migrations/update-markdown-version/update-markdown-version.js +18 -20
  31. package/plugin/src/migrations/update-markdown-version/update-markdown-version.js.map +1 -1
  32. package/prism-highlighter/package.json +2 -2
  33. package/resources/package.json +2 -2
  34. package/shiki-highlighter/package.json +2 -2
  35. package/src/lib/devtools/content-devtools-client.ts +215 -0
  36. package/src/lib/devtools/content-devtools.styles.css +194 -0
  37. package/types/md4x/src/index.d.ts +5 -0
  38. package/types/md4x/src/lib/md4x-content-renderer.service.d.ts +33 -0
  39. package/types/md4x/src/lib/md4x-wasm-content-renderer.service.d.ts +16 -0
  40. package/types/md4x/src/lib/provide-md4x.d.ts +26 -0
  41. package/types/md4x/src/lib/streaming-markdown-renderer.d.ts +21 -0
  42. package/types/mdc/src/index.d.ts +2 -0
  43. package/types/mdc/src/lib/mdc-component-registry.d.ts +25 -0
  44. package/types/mdc/src/lib/mdc-renderer.directive.d.ts +33 -0
  45. package/types/og/src/index.d.ts +2 -0
  46. package/types/og/src/lib/og.d.ts +5 -0
  47. package/types/og/src/lib/options.d.ts +11 -0
  48. package/types/prism-highlighter/src/index.d.ts +8 -0
  49. package/types/prism-highlighter/src/lib/prism/angular.d.ts +1 -0
  50. package/types/prism-highlighter/src/lib/prism-highlighter.d.ts +8 -0
  51. package/types/resources/src/content-file-resource.d.ts +39 -0
  52. package/types/resources/src/content-files-resource.d.ts +3 -0
  53. package/types/resources/src/index.d.ts +2 -0
  54. package/types/shiki-highlighter/src/index.d.ts +7 -0
  55. package/types/src/index.d.ts +18 -0
  56. package/types/src/lib/anchor-navigation.directive.d.ts +9 -0
  57. package/types/src/lib/content-file-loader.d.ts +6 -0
  58. package/types/src/lib/content-file.d.ts +8 -0
  59. package/types/src/lib/content-files-list-token.d.ts +3 -0
  60. package/types/src/lib/content-files-token.d.ts +3 -0
  61. package/types/src/lib/content-list-loader.d.ts +7 -0
  62. package/types/src/lib/content-renderer.d.ts +33 -0
  63. package/types/src/lib/content.d.ts +14 -0
  64. package/types/src/lib/devtools/content-devtools-plugin.d.ts +23 -0
  65. package/types/src/lib/devtools/content-devtools-renderer.d.ts +23 -0
  66. package/types/src/lib/devtools/index.d.ts +23 -0
  67. package/types/src/lib/get-content-files.d.ts +14 -0
  68. package/types/src/lib/inject-content-files.d.ts +4 -0
  69. package/types/src/lib/markdown-content-renderer.service.d.ts +10 -0
  70. package/types/src/lib/markdown-route.component.d.ts +15 -0
  71. package/types/src/lib/markdown.component.d.ts +26 -0
  72. package/types/src/lib/marked-content-highlighter.d.ts +17 -0
  73. package/types/src/lib/marked-setup.service.d.ts +10 -0
  74. package/types/src/lib/parse-raw-content-file.d.ts +18 -0
  75. package/types/src/lib/provide-content.d.ts +7 -0
  76. package/types/src/lib/render-task.service.d.ts +8 -0
  77. package/types/src/lib/utils/zone-wait-for.d.ts +2 -0
  78. package/og/README.md +0 -3
  79. package/plugin/README.md +0 -11
  80. package/plugin/src/migrations/update-markdown-renderer-feature/compat.d.ts +0 -2
  81. package/plugin/src/migrations/update-markdown-renderer-feature/compat.js +0 -6
  82. package/plugin/src/migrations/update-markdown-renderer-feature/compat.js.map +0 -1
  83. package/plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.d.ts +0 -2
  84. package/plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.js +0 -48
  85. package/plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.js.map +0 -1
  86. package/prism-highlighter/README.md +0 -3
  87. package/resources/README.md +0 -3
  88. package/shiki-highlighter/README.md +0 -3
  89. package/types/analogjs-content-og.d.ts +0 -19
  90. package/types/analogjs-content-prism-highlighter.d.ts +0 -15
  91. package/types/analogjs-content-resources.d.ts +0 -20
  92. package/types/analogjs-content-shiki-highlighter.d.ts +0 -11
  93. package/types/analogjs-content.d.ts +0 -168
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/content",
3
- "version": "3.0.0-alpha.2",
3
+ "version": "3.0.0-alpha.21",
4
4
  "description": "Content Rendering for Analog",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -23,81 +23,110 @@
23
23
  "url": "https://github.com/sponsors/brandonroberts"
24
24
  },
25
25
  "peerDependencies": {
26
- "@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
27
- "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
28
- "@angular/platform-browser": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
29
- "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
26
+ "@angular/common": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
27
+ "@angular/core": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
28
+ "@angular/platform-browser": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
29
+ "@angular/router": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
30
30
  "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0 || ^22",
31
31
  "front-matter": "^4.0.2",
32
- "marked": "^15.0.7",
33
- "marked-gfm-heading-id": "^4.1.1",
34
- "marked-highlight": "^2.2.1",
35
- "marked-mangle": "^1.1.10",
32
+ "marked": "^17.0.5",
33
+ "marked-gfm-heading-id": "^4.1.3",
34
+ "marked-highlight": "^2.2.3",
35
+ "marked-mangle": "^1.1.12",
36
36
  "rxjs": "^6.5.0 || ^7.5.0",
37
- "prismjs": "^1.29.0",
37
+ "@standard-schema/spec": "^1.1.0",
38
+ "prismjs": "^1.30.0",
38
39
  "satori": "^0.10.14",
39
40
  "satori-html": "^0.3.2",
40
- "sharp": "^0.33.5"
41
+ "sharp": "^0.34.5",
42
+ "md4x": ">=0.0.20"
41
43
  },
42
44
  "peerDependenciesMeta": {
43
45
  "@nx/devkit": {
44
46
  "optional": true
45
47
  },
48
+ "md4x": {
49
+ "optional": true
50
+ },
46
51
  "satori": {
47
52
  "optional": true
48
53
  },
49
54
  "satori-html": {
50
55
  "optional": true
51
56
  },
57
+ "@standard-schema/spec": {
58
+ "optional": true
59
+ },
52
60
  "sharp": {
53
61
  "optional": true
62
+ },
63
+ "prismjs": {
64
+ "optional": true
54
65
  }
55
66
  },
56
- "dependencies": {
57
- "tslib": "^2.3.0"
58
- },
59
- "ng-update": {
60
- "packageGroup": [
61
- "@analogjs/platform",
62
- "@analogjs/content",
63
- "@analogjs/router",
64
- "@analogjs/storybook-angular",
65
- "@analogjs/vite-plugin-angular",
66
- "@analogjs/vite-plugin-nitro",
67
- "@analogjs/vitest-angular"
68
- ],
69
- "migrations": "./plugin/migrations.json"
70
- },
71
- "publishConfig": {
72
- "access": "public",
73
- "provenance": true
74
- },
75
- "module": "fesm2022/analogjs-content.mjs",
76
- "typings": "types/analogjs-content.d.ts",
77
67
  "exports": {
78
68
  "./package.json": {
79
69
  "default": "./package.json"
80
70
  },
81
71
  ".": {
82
- "types": "./types/analogjs-content.d.ts",
72
+ "types": "./types/src/index.d.ts",
73
+ "import": "./fesm2022/analogjs-content.mjs",
83
74
  "default": "./fesm2022/analogjs-content.mjs"
84
75
  },
76
+ "./md4x": {
77
+ "types": "./types/md4x/src/index.d.ts",
78
+ "import": "./fesm2022/analogjs-content-md4x.mjs",
79
+ "default": "./fesm2022/analogjs-content-md4x.mjs"
80
+ },
81
+ "./mdc": {
82
+ "types": "./types/mdc/src/index.d.ts",
83
+ "import": "./fesm2022/analogjs-content-mdc.mjs",
84
+ "default": "./fesm2022/analogjs-content-mdc.mjs"
85
+ },
85
86
  "./og": {
86
- "types": "./types/analogjs-content-og.d.ts",
87
+ "types": "./types/og/src/index.d.ts",
88
+ "import": "./fesm2022/analogjs-content-og.mjs",
87
89
  "default": "./fesm2022/analogjs-content-og.mjs"
88
90
  },
89
91
  "./prism-highlighter": {
90
- "types": "./types/analogjs-content-prism-highlighter.d.ts",
92
+ "types": "./types/prism-highlighter/src/index.d.ts",
93
+ "import": "./fesm2022/analogjs-content-prism-highlighter.mjs",
91
94
  "default": "./fesm2022/analogjs-content-prism-highlighter.mjs"
92
95
  },
93
96
  "./resources": {
94
- "types": "./types/analogjs-content-resources.d.ts",
97
+ "types": "./types/resources/src/index.d.ts",
98
+ "import": "./fesm2022/analogjs-content-resources.mjs",
95
99
  "default": "./fesm2022/analogjs-content-resources.mjs"
96
100
  },
97
101
  "./shiki-highlighter": {
98
- "types": "./types/analogjs-content-shiki-highlighter.d.ts",
102
+ "types": "./types/shiki-highlighter/src/index.d.ts",
103
+ "import": "./fesm2022/analogjs-content-shiki-highlighter.mjs",
99
104
  "default": "./fesm2022/analogjs-content-shiki-highlighter.mjs"
100
105
  }
101
106
  },
107
+ "dependencies": {
108
+ "tslib": "^2.3.0"
109
+ },
110
+ "devDependencies": {
111
+ "@analogjs/vite-plugin-angular": "3.0.0-alpha.21"
112
+ },
113
+ "ng-update": {
114
+ "packageGroup": [
115
+ "@analogjs/platform",
116
+ "@analogjs/content",
117
+ "@analogjs/router",
118
+ "@analogjs/storybook-angular",
119
+ "@analogjs/vite-plugin-angular",
120
+ "@analogjs/vite-plugin-nitro",
121
+ "@analogjs/vitest-angular"
122
+ ],
123
+ "migrations": "./plugin/migrations.json"
124
+ },
125
+ "publishConfig": {
126
+ "access": "public",
127
+ "provenance": true
128
+ },
129
+ "module": "fesm2022/analogjs-content.mjs",
130
+ "typings": "types/src/index.d.ts",
102
131
  "sideEffects": false
103
- }
132
+ }
@@ -1,23 +1,3 @@
1
1
  {
2
- "name": "content-plugin",
3
- "version": "0.0.1",
4
- "main": "./src/index.js",
5
- "type": "commonjs",
6
- "dependencies": {
7
- "ts-morph": "^27.0.0",
8
- "tslib": "^2.8.1"
9
- },
10
- "peerDependencies": {
11
- "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0 || ^22",
12
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0"
13
- },
14
- "peerDependenciesMeta": {
15
- "@nx/devkit": {
16
- "optional": true
17
- },
18
- "vite": {
19
- "optional": true
20
- }
21
- },
22
- "types": "./src/index.d.ts"
23
- }
2
+ "type": "commonjs"
3
+ }
@@ -1,2 +1,4 @@
1
- declare const _default: any;
2
- export default _default;
1
+ //#region src/index.d.ts
2
+ declare const _default: undefined;
3
+ export = _default;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = void 0;
1
+
2
+ //#region src/index.ts
3
+ const _default = void 0;
4
+
5
+ //#endregion
6
+ module.exports = _default;
4
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/content-plugin/src/index.ts"],"names":[],"mappings":";;AAAA,kBAAe,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../content-plugin/src/index.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nconst _default: undefined = void 0;\nexport default _default;\n"],"mappings":";;AACA,MAAM,WAAsB,KAAK"}
@@ -1,2 +1,6 @@
1
- declare const _default: (generatorOptions: any) => (tree: any, context: any) => Promise<any>;
2
- export default _default;
1
+ import { convertNxGenerator } from "@nx/devkit";
2
+
3
+ //#region src/migrations/update-markdown-version/compat.d.ts
4
+ declare const _default: ReturnType<typeof convertNxGenerator>;
5
+ export = _default;
6
+ //# sourceMappingURL=compat.d.ts.map
@@ -1,6 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const devkit_1 = require("@nx/devkit");
4
- const update_markdown_version_1 = require("./update-markdown-version");
5
- exports.default = (0, devkit_1.convertNxGenerator)(update_markdown_version_1.default);
1
+ const require_src_migrations_update_markdown_version_update_markdown_version = require('./update-markdown-version.js');
2
+ let _nx_devkit = require("@nx/devkit");
3
+
4
+ //#region src/migrations/update-markdown-version/compat.ts
5
+ const _default = (0, _nx_devkit.convertNxGenerator)(require_src_migrations_update_markdown_version_update_markdown_version);
6
+
7
+ //#endregion
8
+ module.exports = _default;
6
9
  //# sourceMappingURL=compat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compat.js","sourceRoot":"","sources":["../../../../../../../packages/content-plugin/src/migrations/update-markdown-version/compat.ts"],"names":[],"mappings":";;AAAA,uCAAgD;AAChD,uEAA8D;AAE9D,kBAAe,IAAA,2BAAkB,EAAC,iCAAqB,CAAC,CAAC"}
1
+ {"version":3,"file":"compat.js","names":["updateMarkdownVersion"],"sources":["../../../../../../content-plugin/src/migrations/update-markdown-version/compat.ts"],"sourcesContent":["import { convertNxGenerator } from '@nx/devkit';\nimport updateMarkdownVersion from './update-markdown-version';\n\nconst _default: ReturnType<typeof convertNxGenerator> = convertNxGenerator(\n updateMarkdownVersion,\n);\nexport default _default;\n"],"mappings":";;;;AAGA,MAAM,8CACJA,uEACD"}
@@ -1,2 +1,6 @@
1
- import { Tree } from '@nx/devkit';
2
- export default function update(host: Tree): Promise<() => void>;
1
+ import { Tree } from "@nx/devkit";
2
+
3
+ //#region src/migrations/update-markdown-version/update-markdown-version.d.ts
4
+ declare function update(host: Tree): Promise<(() => void) | undefined>;
5
+ export = update;
6
+ //# sourceMappingURL=update-markdown-version.d.ts.map
@@ -1,23 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = update;
4
- const devkit_1 = require("@nx/devkit");
1
+ let _nx_devkit = require("@nx/devkit");
2
+
3
+ //#region src/migrations/update-markdown-version/update-markdown-version.ts
5
4
  async function update(host) {
6
- // NOTE: we only add the dependency if the project is an Angular project
7
- // Nx projects can add the dependency from migrations.json
8
- let dependencyAdded = false;
9
- if (host.exists('/angular.json')) {
10
- (0, devkit_1.addDependenciesToPackageJson)(host, {
11
- marked: '^15.0.7',
12
- 'marked-mangle': '^1.1.10',
13
- 'marked-highlight': '^2.2.1',
14
- 'marked-gfm-heading-id': '^4.1.1',
15
- }, {});
16
- dependencyAdded = true;
17
- }
18
- await (0, devkit_1.formatFiles)(host);
19
- if (dependencyAdded) {
20
- return () => (0, devkit_1.installPackagesTask)(host);
21
- }
5
+ let dependencyAdded = false;
6
+ if (host.exists("/angular.json")) {
7
+ (0, _nx_devkit.addDependenciesToPackageJson)(host, {
8
+ marked: "^15.0.7",
9
+ "marked-mangle": "^1.1.10",
10
+ "marked-highlight": "^2.2.1",
11
+ "marked-gfm-heading-id": "^4.1.1"
12
+ }, {});
13
+ dependencyAdded = true;
14
+ }
15
+ await (0, _nx_devkit.formatFiles)(host);
16
+ if (dependencyAdded) return () => (0, _nx_devkit.installPackagesTask)(host);
22
17
  }
18
+
19
+ //#endregion
20
+ module.exports = update;
23
21
  //# sourceMappingURL=update-markdown-version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-markdown-version.js","sourceRoot":"","sources":["../../../../../../../packages/content-plugin/src/migrations/update-markdown-version/update-markdown-version.ts"],"names":[],"mappings":";;AAOA,yBAuBC;AA9BD,uCAKoB;AAEL,KAAK,UAAU,MAAM,CAAC,IAAU;IAC7C,wEAAwE;IACxE,2DAA2D;IAC3D,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,IAAA,qCAA4B,EAC1B,IAAI,EACJ;YACE,MAAM,EAAE,SAAS;YACjB,eAAe,EAAE,SAAS;YAC1B,kBAAkB,EAAE,QAAQ;YAC5B,uBAAuB,EAAE,QAAQ;SAClC,EACD,EAAE,CACH,CAAC;QACF,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAExB,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,GAAG,EAAE,CAAC,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"update-markdown-version.js","names":[],"sources":["../../../../../../content-plugin/src/migrations/update-markdown-version/update-markdown-version.ts"],"sourcesContent":["import {\n addDependenciesToPackageJson,\n type Tree,\n formatFiles,\n installPackagesTask,\n} from '@nx/devkit';\n\nexport default async function update(\n host: Tree,\n): Promise<(() => void) | undefined> {\n // NOTE: we only add the dependency if the project is an Angular project\n // Nx projects can add the dependency from migrations.json\n let dependencyAdded = false;\n if (host.exists('/angular.json')) {\n addDependenciesToPackageJson(\n host,\n {\n marked: '^15.0.7',\n 'marked-mangle': '^1.1.10',\n 'marked-highlight': '^2.2.1',\n 'marked-gfm-heading-id': '^4.1.1',\n },\n {},\n );\n dependencyAdded = true;\n }\n\n await formatFiles(host);\n\n if (dependencyAdded) {\n return () => installPackagesTask(host);\n }\n}\n"],"mappings":";;;AAOA,eAA8B,OAC5B,MACmC;CAGnC,IAAI,kBAAkB;AACtB,KAAI,KAAK,OAAO,gBAAgB,EAAE;AAChC,+CACE,MACA;GACE,QAAQ;GACR,iBAAiB;GACjB,oBAAoB;GACpB,yBAAyB;GAC1B,EACD,EAAE,CACH;AACD,oBAAkB;;AAGpB,mCAAkB,KAAK;AAEvB,KAAI,gBACF,kDAAiC,KAAK"}
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "module": "../fesm2022/analogjs-content-prism-highlighter.mjs",
3
- "typings": "../types/analogjs-content-prism-highlighter.d.ts"
4
- }
3
+ "typings": "../types/prism-highlighter/src/index.d.ts"
4
+ }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "module": "../fesm2022/analogjs-content-resources.mjs",
3
- "typings": "../types/analogjs-content-resources.d.ts"
4
- }
3
+ "typings": "../types/resources/src/index.d.ts"
4
+ }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "module": "../fesm2022/analogjs-content-shiki-highlighter.mjs",
3
- "typings": "../types/analogjs-content-shiki-highlighter.d.ts"
4
- }
3
+ "typings": "../types/shiki-highlighter/src/index.d.ts"
4
+ }
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Client-side script for the Analog Content DevTools panel.
3
+ * Injected by the Vite plugin in dev mode only.
4
+ *
5
+ * @experimental Content DevTools is experimental and may change in future releases.
6
+ */
7
+
8
+ interface DevToolsData {
9
+ renderer: string;
10
+ renderTimeMs: number;
11
+ frontmatter: Record<string, unknown>;
12
+ toc: Array<{ id: string; level: number; text: string }>;
13
+ contentLength: number;
14
+ headingCount: number;
15
+ }
16
+
17
+ const STORAGE_KEY = 'analog-content-devtools-open';
18
+
19
+ // Cache the latest devtools payload at module level so events fired
20
+ // during initial bootstrap (before the panel is created) are not lost.
21
+ let latestDevToolsData: DevToolsData | null = null;
22
+ let panelUpdateCallback: ((data: DevToolsData) => void) | null = null;
23
+
24
+ window.addEventListener('analog-content-devtools-data', ((
25
+ e: CustomEvent<DevToolsData>,
26
+ ) => {
27
+ latestDevToolsData = e.detail;
28
+ if (panelUpdateCallback) {
29
+ panelUpdateCallback(e.detail);
30
+ }
31
+ }) as EventListener);
32
+
33
+ function createPanel(): HTMLElement {
34
+ const root = document.createElement('div');
35
+ root.id = 'analog-content-devtools';
36
+ root.innerHTML = `
37
+ <button class="acd-toggle" title="Analog Content DevTools">
38
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
39
+ <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6zm-1 2l5 5h-5V4zM6 20V4h5v7h7v9H6z"/>
40
+ <path d="M8 13h8v1H8zm0 3h6v1H8z" opacity=".6"/>
41
+ </svg>
42
+ </button>
43
+ <div class="acd-panel" style="display:none">
44
+ <div class="acd-header">
45
+ <span>Analog Content DevTools <span class="acd-badge acd-badge-experimental">experimental</span></span>
46
+ </div>
47
+ <div class="acd-tabs">
48
+ <button class="acd-tab" data-tab="overview" data-active="true">Overview</button>
49
+ <button class="acd-tab" data-tab="frontmatter">Frontmatter</button>
50
+ <button class="acd-tab" data-tab="toc">TOC</button>
51
+ </div>
52
+ <div class="acd-body">
53
+ <div class="acd-empty">No content data available. Navigate to a content page.</div>
54
+ </div>
55
+ </div>
56
+ `;
57
+ return root;
58
+ }
59
+
60
+ function renderOverview(data: DevToolsData): string {
61
+ const speedClass =
62
+ data.renderTimeMs < 5
63
+ ? 'acd-fast'
64
+ : data.renderTimeMs > 50
65
+ ? 'acd-slow'
66
+ : '';
67
+ return `
68
+ <div class="acd-section">
69
+ <div class="acd-section-title">Renderer</div>
70
+ <div class="acd-kv">
71
+ <span class="acd-key">Active</span>
72
+ <span class="acd-value"><span class="acd-badge acd-badge-renderer">${data.renderer}</span></span>
73
+ </div>
74
+ <div class="acd-kv">
75
+ <span class="acd-key">Render time</span>
76
+ <span class="acd-value ${speedClass}">${data.renderTimeMs.toFixed(2)}ms</span>
77
+ </div>
78
+ </div>
79
+ <div class="acd-section">
80
+ <div class="acd-section-title">Content</div>
81
+ <div class="acd-kv">
82
+ <span class="acd-key">Length</span>
83
+ <span class="acd-value">${data.contentLength.toLocaleString()} chars</span>
84
+ </div>
85
+ <div class="acd-kv">
86
+ <span class="acd-key">Headings</span>
87
+ <span class="acd-value">${data.headingCount}</span>
88
+ </div>
89
+ <div class="acd-kv">
90
+ <span class="acd-key">Frontmatter keys</span>
91
+ <span class="acd-value">${Object.keys(data.frontmatter).length}</span>
92
+ </div>
93
+ </div>
94
+ `;
95
+ }
96
+
97
+ function renderFrontmatter(data: DevToolsData): string {
98
+ const keys = Object.keys(data.frontmatter);
99
+ if (keys.length === 0) {
100
+ return '<div class="acd-empty">No frontmatter found.</div>';
101
+ }
102
+ return `
103
+ <div class="acd-section">
104
+ <div class="acd-section-title">Frontmatter attributes</div>
105
+ <div class="acd-pre">${escapeHtml(JSON.stringify(data.frontmatter, null, 2))}</div>
106
+ </div>
107
+ `;
108
+ }
109
+
110
+ function renderToc(data: DevToolsData): HTMLElement {
111
+ if (data.toc.length === 0) {
112
+ const empty = document.createElement('div');
113
+ empty.className = 'acd-empty';
114
+ empty.textContent = 'No headings found.';
115
+ return empty;
116
+ }
117
+ const section = document.createElement('div');
118
+ section.className = 'acd-section';
119
+ const title = document.createElement('div');
120
+ title.className = 'acd-section-title';
121
+ title.textContent = `Table of Contents (${data.toc.length} headings)`;
122
+ section.appendChild(title);
123
+
124
+ for (const h of data.toc) {
125
+ const item = document.createElement('div');
126
+ item.className = 'acd-toc-item';
127
+ item.style.paddingLeft = `${(h.level - 1) * 12}px`;
128
+ const anchor = document.createElement('a');
129
+ anchor.setAttribute('href', `#${encodeURIComponent(h.id)}`);
130
+ anchor.textContent = `${'#'.repeat(h.level)} ${h.text}`;
131
+ item.appendChild(anchor);
132
+ section.appendChild(item);
133
+ }
134
+
135
+ return section;
136
+ }
137
+
138
+ function escapeHtml(str: string): string {
139
+ return str
140
+ .replace(/&/g, '&amp;')
141
+ .replace(/</g, '&lt;')
142
+ .replace(/>/g, '&gt;')
143
+ .replace(/"/g, '&quot;');
144
+ }
145
+
146
+ function initDevTools() {
147
+ if (document.getElementById('analog-content-devtools')) return;
148
+
149
+ const panel = createPanel();
150
+ document.body.appendChild(panel);
151
+
152
+ const toggle = panel.querySelector('.acd-toggle') as HTMLElement;
153
+ const panelEl = panel.querySelector('.acd-panel') as HTMLElement;
154
+ const body = panel.querySelector('.acd-body') as HTMLElement;
155
+ const tabs = panel.querySelectorAll('.acd-tab');
156
+
157
+ let isOpen = localStorage.getItem(STORAGE_KEY) === 'true';
158
+ let activeTab = 'overview';
159
+ let currentData: DevToolsData | null = latestDevToolsData;
160
+
161
+ function updateVisibility() {
162
+ panelEl.style.display = isOpen ? 'flex' : 'none';
163
+ localStorage.setItem(STORAGE_KEY, String(isOpen));
164
+ }
165
+
166
+ function updateBody() {
167
+ if (!currentData) {
168
+ body.innerHTML =
169
+ '<div class="acd-empty">No content data available. Navigate to a content page.</div>';
170
+ return;
171
+ }
172
+ switch (activeTab) {
173
+ case 'overview':
174
+ body.innerHTML = renderOverview(currentData);
175
+ break;
176
+ case 'frontmatter':
177
+ body.innerHTML = renderFrontmatter(currentData);
178
+ break;
179
+ case 'toc':
180
+ body.replaceChildren(renderToc(currentData));
181
+ break;
182
+ }
183
+ }
184
+
185
+ toggle.addEventListener('click', () => {
186
+ isOpen = !isOpen;
187
+ updateVisibility();
188
+ });
189
+
190
+ tabs.forEach((tab) => {
191
+ tab.addEventListener('click', () => {
192
+ activeTab = (tab as HTMLElement).dataset['tab'] || 'overview';
193
+ tabs.forEach((t) =>
194
+ (t as HTMLElement).setAttribute('data-active', String(t === tab)),
195
+ );
196
+ updateBody();
197
+ });
198
+ });
199
+
200
+ // Wire the module-level listener to update the panel
201
+ panelUpdateCallback = (data: DevToolsData) => {
202
+ currentData = data;
203
+ updateBody();
204
+ };
205
+
206
+ updateVisibility();
207
+ updateBody();
208
+ }
209
+
210
+ // Init when DOM is ready
211
+ if (document.readyState === 'loading') {
212
+ document.addEventListener('DOMContentLoaded', initDevTools);
213
+ } else {
214
+ initDevTools();
215
+ }