@docfuse/plugins 0.1.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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +52 -0
  3. package/README.zh-CN.md +52 -0
  4. package/dist/client/kroki.js +221 -0
  5. package/dist/client/mermaid.js +366 -0
  6. package/dist/client/plantuml.js +221 -0
  7. package/dist/diagram.css +195 -0
  8. package/dist/external-links.d.ts +10 -0
  9. package/dist/external-links.js +49 -0
  10. package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  11. package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  12. package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  13. package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  14. package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  15. package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
  16. package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  17. package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
  18. package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
  19. package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  20. package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
  21. package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  22. package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  23. package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  24. package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
  25. package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  26. package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  27. package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  28. package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  29. package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  30. package/dist/index.d.ts +9 -0
  31. package/dist/index.js +757 -0
  32. package/dist/kroki.d.ts +12 -0
  33. package/dist/kroki.js +293 -0
  34. package/dist/link-card.d.ts +9 -0
  35. package/dist/link-card.js +87 -0
  36. package/dist/math.css +3 -0
  37. package/dist/math.d.ts +19 -0
  38. package/dist/math.js +140 -0
  39. package/dist/mermaid.d.ts +10 -0
  40. package/dist/mermaid.js +290 -0
  41. package/dist/pagefind.d.ts +66 -0
  42. package/dist/pagefind.js +84 -0
  43. package/dist/plantuml.d.ts +10 -0
  44. package/dist/plantuml.js +297 -0
  45. package/dist/reading-time.d.ts +20 -0
  46. package/dist/reading-time.js +90 -0
  47. package/package.json +122 -0
@@ -0,0 +1,195 @@
1
+ .df-diagram-window {
2
+ width: 100%;
3
+ margin: 1.5rem 0;
4
+ overflow: hidden;
5
+ border: 0;
6
+ border-radius: var(--df-radius-md, 0.625rem);
7
+ color: var(--df-diagram-foreground);
8
+ background: var(--df-diagram-surface);
9
+ box-shadow: var(--df-block-shell-shadow, 0 0.5rem 1.5rem rgb(0 0 0 / 8%));
10
+ }
11
+
12
+ .df-diagram-window > .df-diagram-toolbar {
13
+ display: flex;
14
+ min-height: 3rem;
15
+ margin: 0;
16
+ align-items: center;
17
+ justify-content: space-between;
18
+ gap: 0.75rem;
19
+ padding: 0.625rem 0.875rem;
20
+ background: color-mix(in srgb, var(--df-diagram-surface) 82%, var(--df-diagram-foreground) 6%);
21
+ }
22
+
23
+ .df-diagram-title {
24
+ min-width: 0;
25
+ overflow: hidden;
26
+ color: var(--df-diagram-muted);
27
+ font: 600 0.875rem/1.25 var(--df-font-mono, ui-monospace, monospace);
28
+ text-overflow: ellipsis;
29
+ white-space: nowrap;
30
+ }
31
+
32
+ .df-diagram-actions {
33
+ display: flex;
34
+ flex: 0 0 auto;
35
+ gap: 0.25rem;
36
+ }
37
+
38
+ .df-diagram-actions button,
39
+ .df-diagram-zoom-controls button,
40
+ .df-diagram-dialog-close {
41
+ display: inline-grid;
42
+ width: 2.25rem;
43
+ height: 2.25rem;
44
+ padding: 0;
45
+ border: 0;
46
+ border-radius: var(--df-radius-sm, 0.375rem);
47
+ color: var(--df-diagram-muted);
48
+ background: transparent;
49
+ cursor: pointer;
50
+ place-items: center;
51
+ }
52
+
53
+ .df-diagram-actions button:hover {
54
+ color: var(--df-diagram-foreground);
55
+ background: color-mix(in srgb, var(--df-diagram-foreground) 7%, transparent);
56
+ }
57
+
58
+ .df-diagram-zoom-controls button:hover:not(:disabled) {
59
+ color: var(--df-diagram-foreground);
60
+ background: color-mix(in srgb, var(--df-diagram-foreground) 7%, transparent);
61
+ }
62
+
63
+ .df-diagram-zoom-controls button:disabled {
64
+ opacity: 0.38;
65
+ cursor: default;
66
+ }
67
+
68
+ .df-diagram-actions button[data-copied='true'] {
69
+ color: var(--df-green, #248a3d);
70
+ }
71
+
72
+ .df-diagram-actions svg,
73
+ .df-diagram-zoom-controls svg {
74
+ width: 1.125rem;
75
+ height: 1.125rem;
76
+ fill: none;
77
+ stroke: currentColor;
78
+ stroke-linecap: round;
79
+ stroke-linejoin: round;
80
+ stroke-width: 1.75;
81
+ }
82
+
83
+ .df-diagram-actions button:focus-visible,
84
+ .df-diagram-zoom-controls button:focus-visible,
85
+ .df-diagram-dialog-close:focus-visible {
86
+ outline: 0;
87
+ box-shadow: 0 0 0 0.1875rem color-mix(in srgb, var(--df-diagram-accent) 32%, transparent);
88
+ }
89
+
90
+ .df-diagram-stage,
91
+ .df-diagram-preview {
92
+ display: grid;
93
+ min-width: 0;
94
+ place-items: center;
95
+ }
96
+
97
+ .df-diagram-stage {
98
+ position: relative;
99
+ padding: 1rem;
100
+ overflow: hidden;
101
+ background: var(--df-diagram-surface);
102
+ }
103
+
104
+ .df-diagram-preview {
105
+ width: 100%;
106
+ overflow: auto;
107
+ }
108
+
109
+ .df-diagram-preview[hidden],
110
+ .df-diagram-source[hidden] {
111
+ display: none !important;
112
+ }
113
+
114
+ .df-diagram-preview svg,
115
+ .df-diagram-img {
116
+ display: block;
117
+ width: var(--df-diagram-zoom-width, min(100%, 56.25rem));
118
+ height: auto;
119
+ max-width: var(--df-diagram-zoom-max-width, 56.25rem);
120
+ max-height: none;
121
+ object-fit: contain;
122
+ transition: width 160ms ease;
123
+ }
124
+
125
+ .df-diagram-placeholder {
126
+ padding: 2rem 1rem;
127
+ color: var(--df-diagram-muted);
128
+ text-align: center;
129
+ }
130
+
131
+ .df-diagram-source {
132
+ width: 100%;
133
+ max-height: min(62dvh, 35rem);
134
+ margin: 0;
135
+ overflow: auto;
136
+ color: var(--df-diagram-foreground);
137
+ font: 0.875rem/1.55 var(--df-font-mono, ui-monospace, monospace);
138
+ white-space: pre-wrap;
139
+ overflow-wrap: anywhere;
140
+ }
141
+
142
+ .df-diagram-source > code {
143
+ display: block;
144
+ padding: 0;
145
+ border-radius: 0;
146
+ color: inherit;
147
+ background: transparent;
148
+ font: inherit;
149
+ }
150
+
151
+ .df-diagram-zoom-controls {
152
+ display: flex;
153
+ justify-self: start;
154
+ gap: 0.125rem;
155
+ margin-block-start: 0.75rem;
156
+ padding: 0.1875rem;
157
+ border-radius: var(--df-radius-sm, 0.375rem);
158
+ background: color-mix(in srgb, var(--df-diagram-surface) 92%, transparent);
159
+ box-shadow: 0 0.25rem 0.875rem rgb(0 0 0 / 10%);
160
+ }
161
+
162
+ .df-diagram-zoom-controls[hidden] {
163
+ display: none !important;
164
+ }
165
+
166
+ .df-diagram-dialog {
167
+ width: min(68rem, calc(100vw - 2rem));
168
+ max-height: calc(100dvh - 2rem);
169
+ padding: 2.5rem 1rem 1rem;
170
+ overflow: auto;
171
+ border: 0;
172
+ border-radius: var(--df-radius-md, 0.625rem);
173
+ color: var(--df-diagram-foreground);
174
+ background: color-mix(in srgb, var(--df-diagram-surface) 94%, transparent);
175
+ box-shadow: 0 1.5rem 4rem rgb(0 0 0 / 24%);
176
+ backdrop-filter: blur(1.25rem) saturate(130%);
177
+ }
178
+
179
+ .df-diagram-dialog::backdrop {
180
+ background: rgb(0 0 0 / 52%);
181
+ }
182
+
183
+ .df-diagram-dialog-close {
184
+ position: absolute;
185
+ inset-block-start: 0.5rem;
186
+ inset-inline-end: 0.5rem;
187
+ font-size: 1.5rem;
188
+ }
189
+
190
+ @media (prefers-reduced-motion: reduce) {
191
+ .df-diagram-window *,
192
+ .df-diagram-dialog * {
193
+ scroll-behavior: auto !important;
194
+ }
195
+ }
@@ -0,0 +1,10 @@
1
+ import { MarkdownPlugin } from '@docfuse/markdown';
2
+
3
+ interface ExternalLinksOptions {
4
+ newTab?: boolean;
5
+ rel?: readonly string[];
6
+ internalHosts?: readonly string[];
7
+ }
8
+ declare function externalLinks(options?: ExternalLinksOptions): MarkdownPlugin;
9
+
10
+ export { type ExternalLinksOptions, externalLinks };
@@ -0,0 +1,49 @@
1
+ // src/external-links/index.ts
2
+ import { defineMarkdownPlugin } from "@docfuse/markdown";
3
+ import { visit } from "unist-util-visit";
4
+
5
+ // src/shared/urls.ts
6
+ function hostnameOf(href) {
7
+ try {
8
+ return new URL(href).hostname.toLowerCase();
9
+ } catch {
10
+ return void 0;
11
+ }
12
+ }
13
+ function isInternalHost(host, internalHosts) {
14
+ return internalHosts.some((internal) => host === internal || host.endsWith(`.${internal}`));
15
+ }
16
+
17
+ // src/external-links/index.ts
18
+ var PLUGIN_VERSION = "1";
19
+ function externalLinks(options = {}) {
20
+ const newTab = options.newTab !== false;
21
+ const rel = [...options.rel ?? ["noopener", "noreferrer"]];
22
+ const internalHosts = (options.internalHosts ?? []).map((host) => host.toLowerCase());
23
+ return defineMarkdownPlugin({
24
+ name: "external-links",
25
+ version: PLUGIN_VERSION,
26
+ cacheKey: { newTab, rel, internalHosts },
27
+ browserCompiler: {
28
+ module: "@docfuse/plugins/external-links",
29
+ exportName: "externalLinks",
30
+ options: { newTab, rel, internalHosts }
31
+ },
32
+ rehypePlugins: [
33
+ () => (tree) => {
34
+ visit(tree, "element", (node) => {
35
+ if (node.tagName !== "a") return;
36
+ const href = node.properties.href;
37
+ if (typeof href !== "string" || !/^https?:\/\//i.test(href)) return;
38
+ const host = hostnameOf(href);
39
+ if (!host || isInternalHost(host, internalHosts)) return;
40
+ if (newTab) node.properties.target = "_blank";
41
+ if (rel.length > 0) node.properties.rel = [...rel];
42
+ });
43
+ }
44
+ ]
45
+ });
46
+ }
47
+ export {
48
+ externalLinks
49
+ };
Binary file
@@ -0,0 +1,9 @@
1
+ export { KrokiOptions, kroki } from './kroki.js';
2
+ export { ExternalLinksOptions, externalLinks } from './external-links.js';
3
+ export { LinkCardOptions, linkCard } from './link-card.js';
4
+ export { MathOptions, math } from './math.js';
5
+ export { MermaidOptions, mermaid } from './mermaid.js';
6
+ export { PagefindOptions, pagefind } from './pagefind.js';
7
+ export { PlantUmlOptions, plantUml } from './plantuml.js';
8
+ export { ReadingTimeCounts, ReadingTimeOptions, readingTime } from './reading-time.js';
9
+ export { MarkdownPlugin } from '@docfuse/markdown';