@markee/diagrams 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 (108) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/LICENSE +13 -0
  3. package/_assets/_head/assets/__basePickBy-seJymvZv.js +1 -0
  4. package/_assets/_head/assets/__baseUniq-BbfvCSQ0.js +1 -0
  5. package/_assets/_head/assets/_api-BbxJBqLU.js +54 -0
  6. package/_assets/_head/assets/_arc-hKElnQvK.js +1 -0
  7. package/_assets/_head/assets/_architecture-PBZL5I3N-BPxfLoEK.js +1 -0
  8. package/_assets/_head/assets/_architectureDiagram-2XIMDMQ5-B6NKHtRx.js +36 -0
  9. package/_assets/_head/assets/_array-1ZLHT4IW.js +1 -0
  10. package/_assets/_head/assets/_blockDiagram-WCTKOSBZ-Dqnb6UUE.js +132 -0
  11. package/_assets/_head/assets/_c4Diagram-IC4MRINW-BZcM5On4.js +10 -0
  12. package/_assets/_head/assets/_channel-CfD3KTsT.js +1 -0
  13. package/_assets/_head/assets/_chunk-4BX2VUAB-zqTDmcBB.js +1 -0
  14. package/_assets/_head/assets/_chunk-55IACEB6-x7bSLf7B.js +1 -0
  15. package/_assets/_head/assets/_chunk-7E7YKBS2-BfdwzEwB.js +1 -0
  16. package/_assets/_head/assets/_chunk-7R4GIKGN-CixjX2hF.js +80 -0
  17. package/_assets/_head/assets/_chunk-C72U2L5F-Ju1rEIdN.js +1 -0
  18. package/_assets/_head/assets/_chunk-EGIJ26TM-CCUYcH6V.js +1 -0
  19. package/_assets/_head/assets/_chunk-FMBD7UC4-D6coRtDw.js +15 -0
  20. package/_assets/_head/assets/_chunk-GEFDOKGD-hedaaI_B.js +2 -0
  21. package/_assets/_head/assets/_chunk-GLR3WWYH-CADHj0Af.js +2 -0
  22. package/_assets/_head/assets/_chunk-HHEYEP7N-yDnzeL6u.js +1 -0
  23. package/_assets/_head/assets/_chunk-JSJVCQXG-CJ2rQuP0.js +1 -0
  24. package/_assets/_head/assets/_chunk-KX2RTZJC-C6_Rew8h.js +1 -0
  25. package/_assets/_head/assets/_chunk-KYZI473N-HFloJmj0.js +53 -0
  26. package/_assets/_head/assets/_chunk-L3YUKLVL-BZnSrFqZ.js +1 -0
  27. package/_assets/_head/assets/_chunk-MX3YWQON-DTYOrezi.js +1 -0
  28. package/_assets/_head/assets/_chunk-NQ4KR5QH-BUplpEk2.js +220 -0
  29. package/_assets/_head/assets/_chunk-O4XLMI2P-Dmj7UqP5.js +7 -0
  30. package/_assets/_head/assets/_chunk-OZEHJAEY-BSk-0ei6.js +1 -0
  31. package/_assets/_head/assets/_chunk-PQ6SQG4A-d07SUR0W.js +1 -0
  32. package/_assets/_head/assets/_chunk-PU5JKC2W-B7Fh0LIt.js +70 -0
  33. package/_assets/_head/assets/_chunk-QZHKN3VN-OrU_cr5J.js +1 -0
  34. package/_assets/_head/assets/_chunk-R5LLSJPH-CoKBj2D6.js +1 -0
  35. package/_assets/_head/assets/_chunk-WL4C6EOR-bOFxg0ID.js +189 -0
  36. package/_assets/_head/assets/_chunk-XIRO2GV7-COC85g2g.js +1 -0
  37. package/_assets/_head/assets/_chunk-XPW4576I-CW6DI-1k.js +32 -0
  38. package/_assets/_head/assets/_chunk-XZSTWKYB-DNV9pfMo.js +102 -0
  39. package/_assets/_head/assets/_chunk-YBOYWFTD-nZYHIeRV.js +1 -0
  40. package/_assets/_head/assets/_classDiagram-VBA2DB6C-C9oLPafD.js +1 -0
  41. package/_assets/_head/assets/_classDiagram-v2-RAHNMMFH-Dgh8T6Nh.js +1 -0
  42. package/_assets/_head/assets/_clone-C4VI7IwW.js +1 -0
  43. package/_assets/_head/assets/_cose-bilkent-S5V4N54A-DzNIP-ES.js +1 -0
  44. package/_assets/_head/assets/_cytoscape.esm-p1aMD8pk.js +321 -0
  45. package/_assets/_head/assets/_d3-graphviz-D-OeP-Hi.js +13 -0
  46. package/_assets/_head/assets/_dagre-D4f1FF8i.js +1 -0
  47. package/_assets/_head/assets/_dagre-KLK3FWXG-BkNMp9M0.js +4 -0
  48. package/_assets/_head/assets/_defaultLocale-CTKA0Sod.js +1 -0
  49. package/_assets/_head/assets/_diagram-E7M64L7V-D6PZVOLB.js +24 -0
  50. package/_assets/_head/assets/_diagram-IFDJBPK2-QApacJ5c.js +43 -0
  51. package/_assets/_head/assets/_diagram-P4PSJMXO-CNMUKotv.js +24 -0
  52. package/_assets/_head/assets/_dist-Dk49gvBM.js +1 -0
  53. package/_assets/_head/assets/_erDiagram-INFDFZHY-Bpnx05jC.js +70 -0
  54. package/_assets/_head/assets/_flowDiagram-PKNHOUZH-BdAdScRO.js +162 -0
  55. package/_assets/_head/assets/_ganttDiagram-A5KZAMGK-DzEPJRcF.js +292 -0
  56. package/_assets/_head/assets/_gitGraph-HDMCJU4V-bzhcDRU8.js +1 -0
  57. package/_assets/_head/assets/_gitGraphDiagram-K3NZZRJ6-BMvgx1jL.js +65 -0
  58. package/_assets/_head/assets/_graphlib-CWZwVoL0.js +1 -0
  59. package/_assets/_head/assets/_info-3K5VOQVL-DO8S_2BK.js +1 -0
  60. package/_assets/_head/assets/_infoDiagram-LFFYTUFH-V27XJ0e-.js +2 -0
  61. package/_assets/_head/assets/_init-B0zvuhbV.js +1 -0
  62. package/_assets/_head/assets/_isArrayLikeObject-B62EgjVm.js +1 -0
  63. package/_assets/_head/assets/_isEmpty-DwnoWLeP.js +1 -0
  64. package/_assets/_head/assets/_ishikawaDiagram-PHBUUO56-ye8wu7pU.js +70 -0
  65. package/_assets/_head/assets/_journeyDiagram-4ABVD52K-D5OtlO2S.js +139 -0
  66. package/_assets/_head/assets/_kanban-definition-K7BYSVSG-DtUEcx7s.js +89 -0
  67. package/_assets/_head/assets/_katex-DF9NgSAO.js +261 -0
  68. package/_assets/_head/assets/_line-Bn73e1DS.js +1 -0
  69. package/_assets/_head/assets/_linear-DLy__jWx.js +1 -0
  70. package/_assets/_head/assets/_math-CyywJguE.js +1 -0
  71. package/_assets/_head/assets/_mermaid-parser.core-_H6Clr87.js +4 -0
  72. package/_assets/_head/assets/_mermaid.core-CN_dW3wB.js +11 -0
  73. package/_assets/_head/assets/_mindmap-definition-YRQLILUH-Bj6WNjT2.js +68 -0
  74. package/_assets/_head/assets/_ordinal-CxoIAYU5.js +1 -0
  75. package/_assets/_head/assets/_packet-RMMSAZCW-BQu67kO8.js +1 -0
  76. package/_assets/_head/assets/_path-DqxJfpv2.js +1 -0
  77. package/_assets/_head/assets/_path-e1ZUMOO_.js +1 -0
  78. package/_assets/_head/assets/_pie-UPGHQEXC-Bq1eDF5N.js +1 -0
  79. package/_assets/_head/assets/_pieDiagram-SKSYHLDU-B7n7B95W.js +30 -0
  80. package/_assets/_head/assets/_quadrantDiagram-337W2JSQ-C_OD8wEG.js +7 -0
  81. package/_assets/_head/assets/_radar-KQ55EAFF-BVJblTdI.js +1 -0
  82. package/_assets/_head/assets/_requirementDiagram-Z7DCOOCP-C8HzXf-7.js +73 -0
  83. package/_assets/_head/assets/_rough.esm-B-x7cSr_.js +1 -0
  84. package/_assets/_head/assets/_sankeyDiagram-WA2Y5GQK-Ctpgy26F.js +10 -0
  85. package/_assets/_head/assets/_sequenceDiagram-2WXFIKYE-BrWWYecj.js +145 -0
  86. package/_assets/_head/assets/_src-COkbRRdF.js +1 -0
  87. package/_assets/_head/assets/_src-DGaYM9rN.js +1 -0
  88. package/_assets/_head/assets/_src-EY2faTVt.js +1 -0
  89. package/_assets/_head/assets/_stateDiagram-RAJIS63D-DHDYVq4g.js +1 -0
  90. package/_assets/_head/assets/_stateDiagram-v2-FVOUBMTO-C3RKEofw.js +1 -0
  91. package/_assets/_head/assets/_timeline-definition-YZTLITO2-Baqh8Zr3.js +61 -0
  92. package/_assets/_head/assets/_treemap-KZPCXAKY-DnDBABML.js +1 -0
  93. package/_assets/_head/assets/_value-BHMRaafc.js +1 -0
  94. package/_assets/_head/assets/_vennDiagram-LZ73GAT5-DT2MLRvW.js +34 -0
  95. package/_assets/_head/assets/_xychartDiagram-JWTSCODW-B4O2dc9N.js +7 -0
  96. package/_assets/_head/assets/main-CSvXzq1b.css +1 -0
  97. package/_assets/_head/assets/main-GvJmWKsI.js +9 -0
  98. package/extension.yaml +0 -0
  99. package/package.json +23 -0
  100. package/src/element.ts +129 -0
  101. package/src/global.d.ts +9 -0
  102. package/src/helpers.ts +75 -0
  103. package/src/index.css +73 -0
  104. package/src/main.ts +7 -0
  105. package/src/remark.ts +75 -0
  106. package/src/runtime.ts +40 -0
  107. package/tsconfig.json +15 -0
  108. package/vite.config.ts +6 -0
package/src/helpers.ts ADDED
@@ -0,0 +1,75 @@
1
+ export function encodeText(value: string) {
2
+ const bytes = new TextEncoder().encode(value)
3
+ let binary = ''
4
+ bytes.forEach((byte) => {
5
+ binary += String.fromCharCode(byte)
6
+ })
7
+ return btoa(binary)
8
+ }
9
+
10
+ export function decodeText(encoded: string) {
11
+ const binary = atob(encoded)
12
+ const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0))
13
+ return new TextDecoder().decode(bytes)
14
+ }
15
+
16
+ export function escapeHtml(value: string) {
17
+ return value
18
+ .replaceAll('&', '&')
19
+ .replaceAll('<', '&lt;')
20
+ .replaceAll('>', '&gt;')
21
+ .replaceAll('"', '&quot;')
22
+ }
23
+
24
+ export function toErrorMessage(err: unknown) {
25
+ if (err instanceof Error) return err.message
26
+ if (typeof err === 'string') return err
27
+ return 'Unknown error'
28
+ }
29
+
30
+ export function getStringFromMeta(meta: Record<string, any>, key: string) {
31
+ const rawValue = meta[key]
32
+ if (rawValue === undefined) return ''
33
+ if (typeof rawValue === 'string') return rawValue.trim()
34
+ if (typeof rawValue === 'number' || typeof rawValue === 'boolean') {
35
+ return String(rawValue)
36
+ }
37
+ return ''
38
+ }
39
+
40
+ export function getClassList(meta: Record<string, any>) {
41
+ const classAttr = getStringFromMeta(meta, 'class')
42
+ if (!classAttr) return []
43
+ return classAttr.split(/\s+/).filter(Boolean)
44
+ }
45
+
46
+ export function getBooleanFromMeta(
47
+ meta: Record<string, any>,
48
+ key: string,
49
+ defaultValue = false,
50
+ ) {
51
+ const rawValue = getStringFromMeta(meta, key)
52
+ if (!rawValue) return defaultValue
53
+
54
+ switch (rawValue.toLowerCase()) {
55
+ case key.toLowerCase():
56
+ case '1':
57
+ case 'true':
58
+ case 'yes':
59
+ case 'on':
60
+ return true
61
+ case '0':
62
+ case 'false':
63
+ case 'no':
64
+ case 'off':
65
+ return false
66
+ default:
67
+ return defaultValue
68
+ }
69
+ }
70
+
71
+ export function hasClass(meta: Record<string, any>, className: string) {
72
+ const classAttr = meta.class
73
+ if (typeof classAttr !== 'string') return false
74
+ return classAttr.split(/\s+/).includes(className)
75
+ }
package/src/index.css ADDED
@@ -0,0 +1,73 @@
1
+ @layer markee-extension {
2
+ markee-diagram {
3
+ display: block;
4
+ margin: 1.2rem 0;
5
+ }
6
+
7
+ a.glightbox > markee-diagram {
8
+ position: relative;
9
+ }
10
+
11
+ a.glightbox > markee-diagram::after {
12
+ content: '';
13
+ position: absolute;
14
+ inset: 0;
15
+ z-index: 1;
16
+ background: transparent;
17
+ cursor: pointer;
18
+ }
19
+
20
+ .ginlined-content.diagram {
21
+ min-width: 100vw;
22
+ padding: 1rem 6rem;
23
+ text-align: center;
24
+ }
25
+
26
+ markee-diagram .markee-diagram-status,
27
+ markee-diagram .markee-diagram-error {
28
+ border: 1px solid var(--mk-color-border, #d9d9d9);
29
+ border-radius: 0.5rem;
30
+ background: var(--mk-color-background, #fafafa);
31
+ color: var(--mk-color-text, #333);
32
+ padding: 0.75rem 0.9rem;
33
+ }
34
+
35
+ markee-diagram .markee-diagram-status {
36
+ font-style: italic;
37
+ }
38
+
39
+ markee-diagram .markee-diagram-error {
40
+ border-left: 4px solid var(--mk-admonition-color-danger);
41
+ }
42
+
43
+ markee-diagram .markee-diagram-error pre {
44
+ margin: 0.6rem 0 0;
45
+ overflow: auto;
46
+ font-size: 0.875rem;
47
+ white-space: pre-wrap;
48
+ }
49
+
50
+ markee-diagram .markee-diagram-mermaid,
51
+ markee-diagram .markee-diagram-dbml {
52
+ overflow-x: auto;
53
+ }
54
+
55
+ markee-diagram .markee-diagram-mermaid > svg,
56
+ markee-diagram .markee-diagram-dbml > svg {
57
+ display: block;
58
+ max-width: 100%;
59
+ height: auto;
60
+ margin: 0 auto;
61
+ }
62
+
63
+ markee-diagram .markee-diagram-dbml,
64
+ markee-diagram .markee-diagram-dbml * {
65
+ pointer-events: none !important;
66
+ }
67
+
68
+ [data-color-scheme='dark'] {
69
+ markee-diagram {
70
+ filter: invert(88%) hue-rotate(180deg);
71
+ }
72
+ }
73
+ }
package/src/main.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { registerDiagramElement } from './element'
2
+ import { registerDiagramsRemark } from './remark'
3
+
4
+ import './index.css'
5
+
6
+ registerDiagramElement()
7
+ registerDiagramsRemark()
package/src/remark.ts ADDED
@@ -0,0 +1,75 @@
1
+ import parseAttrs from 'attributes-parser'
2
+ import { extend } from '@markee/runtime'
3
+ import {
4
+ encodeText,
5
+ escapeHtml,
6
+ getBooleanFromMeta,
7
+ getClassList,
8
+ getStringFromMeta,
9
+ hasClass,
10
+ } from './helpers'
11
+
12
+ export function registerDiagramsRemark() {
13
+ extend.markdownPipeline.remark('markee-diagrams', function (this: any) {
14
+ return (tree: any) => {
15
+ const resolved = this.data().pluginConfig('lightbox') as
16
+ | boolean
17
+ | { enabled: boolean }
18
+ | undefined
19
+ const lightboxEnabled =
20
+ typeof resolved === 'boolean' ? resolved : (resolved?.enabled ?? true)
21
+
22
+ let fallbackId = 0
23
+
24
+ extend.markdownPipeline.visit(
25
+ tree,
26
+ 'code',
27
+ (node: any, index: number | undefined, parent: any) => {
28
+ const lang = node.lang?.trim()?.toLowerCase()
29
+ if (!parent || index === undefined) return
30
+ if (lang !== 'mermaid' && lang !== 'dbml') return
31
+ if ((node.meta ?? '').trim().startsWith('kroki')) return
32
+
33
+ const source = encodeText(node.value ?? '')
34
+ const parsedMeta = parseAttrs(node.meta ?? '')
35
+ const fromNodeId = (node.data as any)?.hProperties?.id
36
+ const fromMetaId = getStringFromMeta(parsedMeta, 'id')
37
+ const hasLightboxDisableClass =
38
+ hasClass(parsedMeta, 'skip-lightbox') ||
39
+ hasClass(parsedMeta, 'off-glb')
40
+ const hasLightboxEnableClass =
41
+ hasClass(parsedMeta, 'force-lightbox') ||
42
+ hasClass(parsedMeta, 'on-glb')
43
+ let nodeLightboxEnabled = getBooleanFromMeta(
44
+ parsedMeta,
45
+ 'lightbox',
46
+ lightboxEnabled,
47
+ )
48
+ if (hasLightboxDisableClass) {
49
+ nodeLightboxEnabled = false
50
+ } else if (hasLightboxEnableClass) {
51
+ nodeLightboxEnabled = true
52
+ }
53
+
54
+ const uniqueId =
55
+ (fromNodeId ? String(fromNodeId) : fromMetaId) ||
56
+ `markee-diagram-${fallbackId++}`
57
+ const extraClasses = getClassList(parsedMeta).filter(
58
+ (name) => name !== lang,
59
+ )
60
+ const className = [lang, 'diagram', ...extraClasses].join(' ')
61
+
62
+ const element = `<markee-diagram id="${escapeHtml(uniqueId)}" class="${escapeHtml(className)}" data-kind="${lang}" data-source="${source}"></markee-diagram>`
63
+ const inlineElement = `<markee-diagram class="${escapeHtml(className)}" data-kind="${lang}" data-source="${source}"></markee-diagram>`
64
+ const inlineContent = inlineElement.replaceAll("'", '&#39;')
65
+ const withLightbox = `<a class='glightbox' href='#' data-content='${inlineContent}' data-width='100vw' data-height='auto' data-draggable='false'>${element}</a>`
66
+
67
+ parent.children.splice(index, 1, {
68
+ type: 'html',
69
+ value: nodeLightboxEnabled ? withLightbox : element,
70
+ })
71
+ },
72
+ )
73
+ }
74
+ })
75
+ }
package/src/runtime.ts ADDED
@@ -0,0 +1,40 @@
1
+ type MermaidModule = typeof import('mermaid')
2
+
3
+ export type DiagramRuntime = {
4
+ dbmlRun: (source: string, format: any) => string
5
+ select: (element: HTMLElement) => any
6
+ }
7
+
8
+ let mermaidPromise: Promise<MermaidModule['default']> | null = null
9
+ let diagramRuntimePromise: Promise<DiagramRuntime> | null = null
10
+
11
+ export function loadMermaid() {
12
+ if (!mermaidPromise) {
13
+ mermaidPromise = import('mermaid').then((runtime) => {
14
+ runtime.default.initialize({ startOnLoad: false })
15
+ return runtime.default
16
+ })
17
+ }
18
+ return mermaidPromise
19
+ }
20
+
21
+ export function loadDiagramRuntime() {
22
+ if (!diagramRuntimePromise) {
23
+ diagramRuntimePromise = Promise.all([
24
+ import('@softwaretechnik/dbml-renderer'),
25
+ import('d3-selection'),
26
+ import('d3-graphviz'),
27
+ ]).then(([dbmlRenderer, d3Selection]) => {
28
+ const d3Module = d3Selection as any
29
+ const d3 = d3Module.select ? d3Module : d3Module.default
30
+ if (!d3 || typeof d3.select !== 'function') {
31
+ throw new Error('Could not load d3-selection runtime.')
32
+ }
33
+ return {
34
+ dbmlRun: dbmlRenderer.run as DiagramRuntime['dbmlRun'],
35
+ select: d3.select,
36
+ }
37
+ })
38
+ }
39
+ return diagramRuntimePromise
40
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "compilerOptions": {
3
+ "strict": true,
4
+ "skipLibCheck": true,
5
+ "module": "ESNext",
6
+ "target": "ESNext",
7
+ "moduleResolution": "bundler",
8
+ "esModuleInterop": true,
9
+ "allowSyntheticDefaultImports": true,
10
+ "lib": ["ES2022", "dom"],
11
+ "outDir": "dist",
12
+ "baseUrl": "."
13
+ },
14
+ "include": ["src"]
15
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { defineConfig } from 'vite'
2
+ import { markee } from '@markee/vite'
3
+
4
+ export default defineConfig({
5
+ plugins: [markee()],
6
+ })