@valkyrianlabs/payload-markdown 1.3.1

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 (204) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +222 -0
  3. package/dist/blocks/MarkdownBlock/Component.d.ts +2 -0
  4. package/dist/blocks/MarkdownBlock/Component.js +13 -0
  5. package/dist/blocks/MarkdownBlock/Component.js.map +1 -0
  6. package/dist/blocks/MarkdownBlock/config.d.ts +2 -0
  7. package/dist/blocks/MarkdownBlock/config.js +20 -0
  8. package/dist/blocks/MarkdownBlock/config.js.map +1 -0
  9. package/dist/blocks/MarkdownBlock/types.d.js +3 -0
  10. package/dist/blocks/MarkdownBlock/types.d.js.map +1 -0
  11. package/dist/components/MarkdownRenderer/Component.client.d.ts +5 -0
  12. package/dist/components/MarkdownRenderer/Component.client.js +163 -0
  13. package/dist/components/MarkdownRenderer/Component.client.js.map +1 -0
  14. package/dist/components/MarkdownRenderer/Component.d.ts +3 -0
  15. package/dist/components/MarkdownRenderer/Component.js +87 -0
  16. package/dist/components/MarkdownRenderer/Component.js.map +1 -0
  17. package/dist/components/MarkdownRenderer/index.css +69 -0
  18. package/dist/components/MarkdownRenderer/index.module.css +45 -0
  19. package/dist/components/MarkdownRenderer/index.module.scss +43 -0
  20. package/dist/components/MarkdownRenderer/index.scss +83 -0
  21. package/dist/components/MarkdownRenderer/types.d.js +5 -0
  22. package/dist/components/MarkdownRenderer/types.d.js.map +1 -0
  23. package/dist/core/codeConfig.d.ts +6 -0
  24. package/dist/core/codeConfig.js +45 -0
  25. package/dist/core/codeConfig.js.map +1 -0
  26. package/dist/core/codeToHtml.d.ts +5 -0
  27. package/dist/core/codeToHtml.js +180 -0
  28. package/dist/core/codeToHtml.js.map +1 -0
  29. package/dist/core/plugins/rehypeApplyLayoutClasses.d.ts +4 -0
  30. package/dist/core/plugins/rehypeApplyLayoutClasses.js +72 -0
  31. package/dist/core/plugins/rehypeApplyLayoutClasses.js.map +1 -0
  32. package/dist/core/plugins/rehypeStripAuthoredInlineStyles.d.ts +3 -0
  33. package/dist/core/plugins/rehypeStripAuthoredInlineStyles.js +17 -0
  34. package/dist/core/plugins/rehypeStripAuthoredInlineStyles.js.map +1 -0
  35. package/dist/core/plugins/remarkCompileLayouts.d.ts +3 -0
  36. package/dist/core/plugins/remarkCompileLayouts.js +169 -0
  37. package/dist/core/plugins/remarkCompileLayouts.js.map +1 -0
  38. package/dist/core/plugins/remarkHeadingAnchorsAndToc.d.ts +3 -0
  39. package/dist/core/plugins/remarkHeadingAnchorsAndToc.js +68 -0
  40. package/dist/core/plugins/remarkHeadingAnchorsAndToc.js.map +1 -0
  41. package/dist/core/plugins/remarkLayoutDirectives.d.ts +3 -0
  42. package/dist/core/plugins/remarkLayoutDirectives.js +26 -0
  43. package/dist/core/plugins/remarkLayoutDirectives.js.map +1 -0
  44. package/dist/core/plugins/remarkLayoutSentinels.d.ts +3 -0
  45. package/dist/core/plugins/remarkLayoutSentinels.js +184 -0
  46. package/dist/core/plugins/remarkLayoutSentinels.js.map +1 -0
  47. package/dist/core/plugins/remarkLiftLayoutDirectives.d.ts +3 -0
  48. package/dist/core/plugins/remarkLiftLayoutDirectives.js +93 -0
  49. package/dist/core/plugins/remarkLiftLayoutDirectives.js.map +1 -0
  50. package/dist/core/plugins/remarkNormalizeLayoutSyntax.d.ts +3 -0
  51. package/dist/core/plugins/remarkValidateDirectiveThemes.d.ts +4 -0
  52. package/dist/core/plugins/remarkValidateDirectiveThemes.js +28 -0
  53. package/dist/core/plugins/remarkValidateDirectiveThemes.js.map +1 -0
  54. package/dist/core/renderMarkdown.d.ts +2 -0
  55. package/dist/core/renderMarkdown.js +270 -0
  56. package/dist/core/renderMarkdown.js.map +1 -0
  57. package/dist/core/types.d.js +7 -0
  58. package/dist/core/types.d.js.map +1 -0
  59. package/dist/core/types.d.ts +238 -0
  60. package/dist/core/types.js +5 -0
  61. package/dist/core/types.js.map +1 -0
  62. package/dist/directives/attributes.d.ts +14 -0
  63. package/dist/directives/attributes.js +121 -0
  64. package/dist/directives/attributes.js.map +1 -0
  65. package/dist/directives/definitions/callout.d.ts +6 -0
  66. package/dist/directives/definitions/callout.js +107 -0
  67. package/dist/directives/definitions/callout.js.map +1 -0
  68. package/dist/directives/definitions/card.d.ts +4 -0
  69. package/dist/directives/definitions/card.js +120 -0
  70. package/dist/directives/definitions/card.js.map +1 -0
  71. package/dist/directives/definitions/cards.d.ts +7 -0
  72. package/dist/directives/definitions/cards.js +72 -0
  73. package/dist/directives/definitions/cards.js.map +1 -0
  74. package/dist/directives/definitions/cell.d.ts +4 -0
  75. package/dist/directives/definitions/cell.js +44 -0
  76. package/dist/directives/definitions/cell.js.map +1 -0
  77. package/dist/directives/definitions/columns.d.ts +4 -0
  78. package/dist/directives/definitions/columns.js +89 -0
  79. package/dist/directives/definitions/columns.js.map +1 -0
  80. package/dist/directives/definitions/details.d.ts +2 -0
  81. package/dist/directives/definitions/details.js +76 -0
  82. package/dist/directives/definitions/details.js.map +1 -0
  83. package/dist/directives/definitions/section.d.ts +2 -0
  84. package/dist/directives/definitions/section.js +32 -0
  85. package/dist/directives/definitions/section.js.map +1 -0
  86. package/dist/directives/definitions/steps.d.ts +2 -0
  87. package/dist/directives/definitions/steps.js +242 -0
  88. package/dist/directives/definitions/steps.js.map +1 -0
  89. package/dist/directives/definitions/tab.d.ts +8 -0
  90. package/dist/directives/definitions/tab.js +59 -0
  91. package/dist/directives/definitions/tab.js.map +1 -0
  92. package/dist/directives/definitions/tabs.d.ts +2 -0
  93. package/dist/directives/definitions/tabs.js +197 -0
  94. package/dist/directives/definitions/tabs.js.map +1 -0
  95. package/dist/directives/definitions/toc.d.ts +7 -0
  96. package/dist/directives/definitions/toc.js +59 -0
  97. package/dist/directives/definitions/toc.js.map +1 -0
  98. package/dist/directives/diagnostics.d.ts +8 -0
  99. package/dist/directives/diagnostics.js +167 -0
  100. package/dist/directives/diagnostics.js.map +1 -0
  101. package/dist/directives/headingAnchors.d.ts +9 -0
  102. package/dist/directives/headingAnchors.js +54 -0
  103. package/dist/directives/headingAnchors.js.map +1 -0
  104. package/dist/directives/index.d.ts +5 -0
  105. package/dist/directives/index.js +6 -0
  106. package/dist/directives/index.js.map +1 -0
  107. package/dist/directives/registry.d.ts +20 -0
  108. package/dist/directives/registry.js +152 -0
  109. package/dist/directives/registry.js.map +1 -0
  110. package/dist/directives/renderData.d.ts +3 -0
  111. package/dist/directives/renderData.js +11 -0
  112. package/dist/directives/renderData.js.map +1 -0
  113. package/dist/directives/themes.d.ts +25 -0
  114. package/dist/directives/themes.js +274 -0
  115. package/dist/directives/themes.js.map +1 -0
  116. package/dist/directives/types.d.ts +72 -0
  117. package/dist/directives/types.js +3 -0
  118. package/dist/directives/types.js.map +1 -0
  119. package/dist/editor/MarkdownCodeMirror/Component.client.d.ts +8 -0
  120. package/dist/editor/MarkdownCodeMirror/Component.client.js +78 -0
  121. package/dist/editor/MarkdownCodeMirror/Component.client.js.map +1 -0
  122. package/dist/editor/MarkdownCodeMirror/Component.d.ts +9 -0
  123. package/dist/editor/MarkdownCodeMirror/Component.js +10 -0
  124. package/dist/editor/MarkdownCodeMirror/Component.js.map +1 -0
  125. package/dist/editor/MarkdownCodeMirror.d.ts +8 -0
  126. package/dist/editor/MarkdownCodeMirror.js +74 -0
  127. package/dist/editor/MarkdownCodeMirror.js.map +1 -0
  128. package/dist/editor/MarkdownEditor.d.ts +10 -0
  129. package/dist/editor/MarkdownEditor.js +22 -0
  130. package/dist/editor/MarkdownEditor.js.map +1 -0
  131. package/dist/editor/directives/completions.d.ts +5 -0
  132. package/dist/editor/directives/completions.js +93 -0
  133. package/dist/editor/directives/completions.js.map +1 -0
  134. package/dist/editor/directives/diagnostics.d.ts +1 -0
  135. package/dist/editor/directives/diagnostics.js +12 -0
  136. package/dist/editor/directives/diagnostics.js.map +1 -0
  137. package/dist/editor/themes/payload.d.ts +27 -0
  138. package/dist/editor/themes/payload.js +269 -0
  139. package/dist/editor/themes/payload.js.map +1 -0
  140. package/dist/editor/themes/support/highlighters.d.ts +20 -0
  141. package/dist/editor/themes/support/highlighters.js +1141 -0
  142. package/dist/editor/themes/support/highlighters.js.map +1 -0
  143. package/dist/editor/themes/support/lang.d.ts +40 -0
  144. package/dist/editor/themes/support/lang.js +201 -0
  145. package/dist/editor/themes/support/lang.js.map +1 -0
  146. package/dist/exports/advanced.d.ts +3 -0
  147. package/dist/exports/advanced.js +5 -0
  148. package/dist/exports/advanced.js.map +1 -0
  149. package/dist/exports/client.d.ts +1 -0
  150. package/dist/exports/client.js +2 -0
  151. package/dist/exports/client.js.map +1 -0
  152. package/dist/exports/server.d.ts +3 -0
  153. package/dist/exports/server.js +5 -0
  154. package/dist/exports/server.js.map +1 -0
  155. package/dist/field/BlocksParams/config.d.ts +7 -0
  156. package/dist/field/BlocksParams/config.js +149 -0
  157. package/dist/field/BlocksParams/config.js.map +1 -0
  158. package/dist/field/CodeBlock/config.d.ts +7 -0
  159. package/dist/field/CodeBlock/config.js +321 -0
  160. package/dist/field/CodeBlock/config.js.map +1 -0
  161. package/dist/field/CodeBlockConfig/config.d.ts +7 -0
  162. package/dist/field/CodeBlockConfig/config.js +306 -0
  163. package/dist/field/CodeBlockConfig/config.js.map +1 -0
  164. package/dist/field/CodeBlockParams/config.d.ts +7 -0
  165. package/dist/field/CodeBlockParams/config.js +321 -0
  166. package/dist/field/CodeBlockParams/config.js.map +1 -0
  167. package/dist/field/Config/config.d.ts +7 -0
  168. package/dist/field/Config/config.js +149 -0
  169. package/dist/field/Config/config.js.map +1 -0
  170. package/dist/field/MarkdownField/Component.d.ts +2 -0
  171. package/dist/field/MarkdownField/Component.js +42 -0
  172. package/dist/field/MarkdownField/Component.js.map +1 -0
  173. package/dist/field/MarkdownField/config.d.ts +3 -0
  174. package/dist/field/MarkdownField/config.js +20 -0
  175. package/dist/field/MarkdownField/config.js.map +1 -0
  176. package/dist/field/Tailwind/config.d.ts +9 -0
  177. package/dist/field/Tailwind/config.js +13 -0
  178. package/dist/field/Tailwind/config.js.map +1 -0
  179. package/dist/field/TailwindField/config.d.ts +9 -0
  180. package/dist/field/TailwindField/config.js +13 -0
  181. package/dist/field/TailwindField/config.js.map +1 -0
  182. package/dist/index.d.ts +10 -0
  183. package/dist/index.js +91 -0
  184. package/dist/index.js.map +1 -0
  185. package/dist/runtime/index.d.ts +36 -0
  186. package/dist/runtime/index.js +124 -0
  187. package/dist/runtime/index.js.map +1 -0
  188. package/dist/styles/directiveSurface.d.ts +11 -0
  189. package/dist/styles/directiveSurface.js +38 -0
  190. package/dist/styles/directiveSurface.js.map +1 -0
  191. package/dist/types/core.d.ts +285 -0
  192. package/dist/types/core.js +5 -0
  193. package/dist/types/core.js.map +1 -0
  194. package/dist/types/layoutToken.d.ts +1 -0
  195. package/dist/types/layoutToken.js +3 -0
  196. package/dist/types/layoutToken.js.map +1 -0
  197. package/dist/types/mdast.d.js +5 -0
  198. package/dist/types/mdast.d.js.map +1 -0
  199. package/dist/types.d.js +3 -0
  200. package/dist/types.d.js.map +1 -0
  201. package/dist/types.d.ts +80 -0
  202. package/dist/types.js +3 -0
  203. package/dist/types.js.map +1 -0
  204. package/package.json +181 -0
@@ -0,0 +1,20 @@
1
+ import type { GridDirectiveName, LayoutDirectiveDefinition, LayoutName, LayoutToken, MarkdownDirectiveName } from './types.js';
2
+ type ParseMarkdownLineResult = {
3
+ diagnostics: string[];
4
+ token: LayoutToken | null;
5
+ };
6
+ declare function getDirectiveDefinition(name: string): LayoutDirectiveDefinition | undefined;
7
+ declare function isSupportedDirectiveName(name: string): name is MarkdownDirectiveName;
8
+ declare function getPublicDefinitions(): LayoutDirectiveDefinition[];
9
+ declare function parseMarkdownLineDetailed(text: string): ParseMarkdownLineResult;
10
+ declare function parseMarkdownLine(text: string): LayoutToken | null;
11
+ export declare const layoutDirectiveRegistry: {
12
+ all: readonly [LayoutDirectiveDefinition, ...LayoutDirectiveDefinition[], LayoutDirectiveDefinition, LayoutDirectiveDefinition, LayoutDirectiveDefinition, LayoutDirectiveDefinition, LayoutDirectiveDefinition, LayoutDirectiveDefinition, LayoutDirectiveDefinition, LayoutDirectiveDefinition, LayoutDirectiveDefinition];
13
+ get: typeof getDirectiveDefinition;
14
+ getPublicDefinitions: typeof getPublicDefinitions;
15
+ isGridName(name: string | undefined): name is GridDirectiveName;
16
+ isSupportedDirectiveName: typeof isSupportedDirectiveName;
17
+ parseMarkdownLine: typeof parseMarkdownLine;
18
+ parseMarkdownLineDetailed: typeof parseMarkdownLineDetailed;
19
+ };
20
+ export type { GridDirectiveName, LayoutName, LayoutToken, MarkdownDirectiveName };
@@ -0,0 +1,152 @@
1
+ import { parseDirectiveLine } from './attributes.js';
2
+ import { calloutDirective } from './definitions/callout.js';
3
+ import { cardDirective } from './definitions/card.js';
4
+ import { cardsDirective } from './definitions/cards.js';
5
+ import { cellDirective } from './definitions/cell.js';
6
+ import { columnDirectives } from './definitions/columns.js';
7
+ import { detailsDirective } from './definitions/details.js';
8
+ import { sectionDirective } from './definitions/section.js';
9
+ import { stepsDirective } from './definitions/steps.js';
10
+ import { tabDirective } from './definitions/tab.js';
11
+ import { tabsDirective } from './definitions/tabs.js';
12
+ import { tocDirective } from './definitions/toc.js';
13
+ const directiveDefinitions = [
14
+ sectionDirective,
15
+ ...columnDirectives,
16
+ cellDirective,
17
+ calloutDirective,
18
+ detailsDirective,
19
+ tocDirective,
20
+ stepsDirective,
21
+ cardsDirective,
22
+ cardDirective,
23
+ tabsDirective,
24
+ tabDirective
25
+ ];
26
+ const closeMarkers = new Map([
27
+ [
28
+ ':::',
29
+ {
30
+ type: 'vlLayoutToken',
31
+ action: 'close'
32
+ }
33
+ ],
34
+ [
35
+ ':::end',
36
+ {
37
+ type: 'vlLayoutToken',
38
+ action: 'closeSection'
39
+ }
40
+ ],
41
+ [
42
+ ':::endcol',
43
+ {
44
+ type: 'vlLayoutToken',
45
+ action: 'closeGrid'
46
+ }
47
+ ],
48
+ [
49
+ ':::endsection',
50
+ {
51
+ type: 'vlLayoutToken',
52
+ action: 'closeSection'
53
+ }
54
+ ]
55
+ ]);
56
+ function cloneToken(token) {
57
+ return {
58
+ ...token
59
+ };
60
+ }
61
+ function isLayoutName(name) {
62
+ return Boolean(directiveDefinitions.find((definition)=>definition.name === name)?.openMarker);
63
+ }
64
+ function getDirectiveDefinition(name) {
65
+ return directiveDefinitions.find((definition)=>definition.name === name);
66
+ }
67
+ function isSupportedDirectiveName(name) {
68
+ return directiveDefinitions.some((definition)=>definition.name === name);
69
+ }
70
+ function getPublicDefinitions() {
71
+ return directiveDefinitions.filter((definition)=>definition.public);
72
+ }
73
+ function findUnknownAttributes(definition, attributes) {
74
+ if (!definition.allowedAttributes) return [];
75
+ return Object.keys(attributes).filter((attribute)=>!definition.allowedAttributes?.includes(attribute));
76
+ }
77
+ function parseMarkdownLineDetailed(text) {
78
+ const trimmed = text.trim();
79
+ const closeToken = closeMarkers.get(trimmed);
80
+ if (closeToken) return {
81
+ diagnostics: [],
82
+ token: cloneToken(closeToken)
83
+ };
84
+ const parsed = parseDirectiveLine(trimmed);
85
+ if (!parsed) return {
86
+ diagnostics: trimmed.startsWith(':::') ? [
87
+ 'Malformed directive marker.'
88
+ ] : [],
89
+ token: null
90
+ };
91
+ if (!isSupportedDirectiveName(parsed.name)) return {
92
+ diagnostics: [
93
+ `Unknown directive "${parsed.name}".`
94
+ ],
95
+ token: null
96
+ };
97
+ if (!isLayoutName(parsed.name)) return {
98
+ diagnostics: [],
99
+ token: null
100
+ };
101
+ const definition = getDirectiveDefinition(parsed.name);
102
+ if (!definition?.openMarker) return {
103
+ diagnostics: [],
104
+ token: null
105
+ };
106
+ if (!definition.supportsAttributes && parsed.rawAttributes) return {
107
+ diagnostics: [
108
+ `Directive "${parsed.name}" does not support attributes.`
109
+ ],
110
+ token: null
111
+ };
112
+ const exactMatch = definition.openMarker === trimmed;
113
+ const attributedMatch = definition.supportsAttributes && trimmed.startsWith(`${definition.openMarker} `);
114
+ if (!exactMatch && !attributedMatch) return {
115
+ diagnostics: [],
116
+ token: null
117
+ };
118
+ const diagnostics = [
119
+ ...parsed.warnings,
120
+ ...findUnknownAttributes(definition, parsed.attributes).map((attribute)=>`Unknown attribute "${attribute}" on "${parsed.name}".`),
121
+ ...definition.validateAttributes?.({
122
+ name: parsed.name,
123
+ attributes: parsed.attributes
124
+ }) ?? []
125
+ ];
126
+ const token = {
127
+ name: parsed.name,
128
+ type: 'vlLayoutToken',
129
+ action: 'open',
130
+ attributes: parsed.attributes
131
+ };
132
+ return {
133
+ diagnostics,
134
+ token
135
+ };
136
+ }
137
+ function parseMarkdownLine(text) {
138
+ return parseMarkdownLineDetailed(text).token;
139
+ }
140
+ export const layoutDirectiveRegistry = {
141
+ all: directiveDefinitions,
142
+ get: getDirectiveDefinition,
143
+ getPublicDefinitions,
144
+ isGridName (name) {
145
+ return name === '2col' || name === '3col';
146
+ },
147
+ isSupportedDirectiveName,
148
+ parseMarkdownLine,
149
+ parseMarkdownLineDetailed
150
+ };
151
+
152
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/directives/registry.ts"],"sourcesContent":["import type {\n GridDirectiveName,\n LayoutDirectiveDefinition,\n LayoutName,\n LayoutToken,\n MarkdownDirectiveName,\n} from './types.js'\n\nimport { parseDirectiveLine } from './attributes.js'\nimport { calloutDirective } from './definitions/callout.js'\nimport { cardDirective } from './definitions/card.js'\nimport { cardsDirective } from './definitions/cards.js'\nimport { cellDirective } from './definitions/cell.js'\nimport { columnDirectives } from './definitions/columns.js'\nimport { detailsDirective } from './definitions/details.js'\nimport { sectionDirective } from './definitions/section.js'\nimport { stepsDirective } from './definitions/steps.js'\nimport { tabDirective } from './definitions/tab.js'\nimport { tabsDirective } from './definitions/tabs.js'\nimport { tocDirective } from './definitions/toc.js'\n\nconst directiveDefinitions = [\n sectionDirective,\n ...columnDirectives,\n cellDirective,\n calloutDirective,\n detailsDirective,\n tocDirective,\n stepsDirective,\n cardsDirective,\n cardDirective,\n tabsDirective,\n tabDirective,\n] as const satisfies readonly LayoutDirectiveDefinition[]\n\nconst closeMarkers = new Map<string, LayoutToken>([\n [':::', { type: 'vlLayoutToken', action: 'close' }],\n [':::end', { type: 'vlLayoutToken', action: 'closeSection' }],\n [':::endcol', { type: 'vlLayoutToken', action: 'closeGrid' }],\n [':::endsection', { type: 'vlLayoutToken', action: 'closeSection' }],\n])\n\nfunction cloneToken(token: LayoutToken): LayoutToken {\n return { ...token }\n}\n\ntype ParseMarkdownLineResult = {\n diagnostics: string[]\n token: LayoutToken | null\n}\n\nfunction isLayoutName(name: MarkdownDirectiveName): name is LayoutName {\n return Boolean(directiveDefinitions.find((definition) => definition.name === name)?.openMarker)\n}\n\nfunction getDirectiveDefinition(name: string): LayoutDirectiveDefinition | undefined {\n return directiveDefinitions.find((definition) => definition.name === name)\n}\n\nfunction isSupportedDirectiveName(name: string): name is MarkdownDirectiveName {\n return directiveDefinitions.some((definition) => definition.name === name)\n}\n\nfunction getPublicDefinitions(): LayoutDirectiveDefinition[] {\n return directiveDefinitions.filter((definition) => definition.public)\n}\n\nfunction findUnknownAttributes(\n definition: LayoutDirectiveDefinition,\n attributes: Record<string, boolean | string>,\n): string[] {\n if (!definition.allowedAttributes) return []\n\n return Object.keys(attributes).filter((attribute) => !definition.allowedAttributes?.includes(attribute))\n}\n\nfunction parseMarkdownLineDetailed(text: string): ParseMarkdownLineResult {\n const trimmed = text.trim()\n const closeToken = closeMarkers.get(trimmed)\n\n if (closeToken)\n return {\n diagnostics: [],\n token: cloneToken(closeToken),\n }\n\n const parsed = parseDirectiveLine(trimmed)\n if (!parsed)\n return {\n diagnostics: trimmed.startsWith(':::')\n ? ['Malformed directive marker.']\n : [],\n token: null,\n }\n\n if (!isSupportedDirectiveName(parsed.name))\n return {\n diagnostics: [`Unknown directive \"${parsed.name}\".`],\n token: null,\n }\n\n if (!isLayoutName(parsed.name))\n return {\n diagnostics: [],\n token: null,\n }\n\n const definition = getDirectiveDefinition(parsed.name)\n if (!definition?.openMarker)\n return {\n diagnostics: [],\n token: null,\n }\n\n if (!definition.supportsAttributes && parsed.rawAttributes)\n return {\n diagnostics: [`Directive \"${parsed.name}\" does not support attributes.`],\n token: null,\n }\n\n const exactMatch = definition.openMarker === trimmed\n const attributedMatch =\n definition.supportsAttributes &&\n trimmed.startsWith(`${definition.openMarker} `)\n\n if (!exactMatch && !attributedMatch)\n return {\n diagnostics: [],\n token: null,\n }\n\n const diagnostics = [\n ...parsed.warnings,\n ...findUnknownAttributes(definition, parsed.attributes).map(\n (attribute) => `Unknown attribute \"${attribute}\" on \"${parsed.name}\".`,\n ),\n ...(definition.validateAttributes?.({\n name: parsed.name,\n attributes: parsed.attributes,\n }) ?? []),\n ]\n\n const token: LayoutToken = {\n name: parsed.name,\n type: 'vlLayoutToken',\n action: 'open',\n attributes: parsed.attributes,\n }\n\n return {\n diagnostics,\n token,\n }\n}\n\nfunction parseMarkdownLine(text: string): LayoutToken | null {\n return parseMarkdownLineDetailed(text).token\n}\n\nexport const layoutDirectiveRegistry = {\n all: directiveDefinitions,\n\n get: getDirectiveDefinition,\n\n getPublicDefinitions,\n\n isGridName(name: string | undefined): name is GridDirectiveName {\n return name === '2col' || name === '3col'\n },\n\n isSupportedDirectiveName,\n\n parseMarkdownLine,\n\n parseMarkdownLineDetailed,\n}\n\nexport type { GridDirectiveName, LayoutName, LayoutToken, MarkdownDirectiveName }\n"],"names":["parseDirectiveLine","calloutDirective","cardDirective","cardsDirective","cellDirective","columnDirectives","detailsDirective","sectionDirective","stepsDirective","tabDirective","tabsDirective","tocDirective","directiveDefinitions","closeMarkers","Map","type","action","cloneToken","token","isLayoutName","name","Boolean","find","definition","openMarker","getDirectiveDefinition","isSupportedDirectiveName","some","getPublicDefinitions","filter","public","findUnknownAttributes","attributes","allowedAttributes","Object","keys","attribute","includes","parseMarkdownLineDetailed","text","trimmed","trim","closeToken","get","diagnostics","parsed","startsWith","supportsAttributes","rawAttributes","exactMatch","attributedMatch","warnings","map","validateAttributes","parseMarkdownLine","layoutDirectiveRegistry","all","isGridName"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ContainerDirective } from 'mdast-util-directive';
2
+ import type { LayoutDirectiveDefinition } from './types.js';
3
+ export declare function setDirectiveRenderData(node: ContainerDirective, definition: LayoutDirectiveDefinition, extraProperties?: Record<string, unknown>): void;
@@ -0,0 +1,11 @@
1
+ export function setDirectiveRenderData(node, definition, extraProperties) {
2
+ const data = node.data ??= {};
3
+ data.hName = definition.tagName;
4
+ data.hProperties = {
5
+ ...data.hProperties ?? {},
6
+ dataVlLayout: definition.name,
7
+ ...extraProperties ?? {}
8
+ };
9
+ }
10
+
11
+ //# sourceMappingURL=renderData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/directives/renderData.ts"],"sourcesContent":["import type { ContainerDirective } from 'mdast-util-directive'\n\nimport type { LayoutDirectiveDefinition } from './types.js'\n\nexport function setDirectiveRenderData(\n node: ContainerDirective,\n definition: LayoutDirectiveDefinition,\n extraProperties?: Record<string, unknown>,\n) {\n const data = (node.data ??= {})\n\n data.hName = definition.tagName\n data.hProperties = {\n ...(data.hProperties ?? {}),\n dataVlLayout: definition.name,\n ...(extraProperties ?? {}),\n }\n}\n"],"names":["setDirectiveRenderData","node","definition","extraProperties","data","hName","tagName","hProperties","dataVlLayout","name"],"mappings":"AAIA,OAAO,SAASA,uBACdC,IAAwB,EACxBC,UAAqC,EACrCC,eAAyC;IAEzC,MAAMC,OAAQH,KAAKG,IAAI,KAAK,CAAC;IAE7BA,KAAKC,KAAK,GAAGH,WAAWI,OAAO;IAC/BF,KAAKG,WAAW,GAAG;QACjB,GAAIH,KAAKG,WAAW,IAAI,CAAC,CAAC;QAC1BC,cAAcN,WAAWO,IAAI;QAC7B,GAAIN,mBAAmB,CAAC,CAAC;IAC3B;AACF"}
@@ -0,0 +1,25 @@
1
+ import type { MarkdownDirectiveTheme, MarkdownDirectiveThemes } from '../types/core.js';
2
+ export type DirectiveThemeGroupName = keyof MarkdownDirectiveThemes;
3
+ export type ResolvedDirectiveTheme = {
4
+ classes: string;
5
+ hookClassName: string;
6
+ modifierClassName: string;
7
+ name: string;
8
+ };
9
+ export declare const DEFAULT_CARD_THEMES: MarkdownDirectiveTheme[];
10
+ export declare const DEFAULT_CARDS_THEMES: MarkdownDirectiveTheme[];
11
+ export declare const DEFAULT_STEPS_THEMES: MarkdownDirectiveTheme[];
12
+ export declare const DEFAULT_TABS_THEMES: MarkdownDirectiveTheme[];
13
+ export declare const DEFAULT_TAB_THEMES: MarkdownDirectiveTheme[];
14
+ export declare const DEFAULT_CALLOUT_THEMES: MarkdownDirectiveTheme[];
15
+ export declare const DEFAULT_DETAILS_THEMES: MarkdownDirectiveTheme[];
16
+ export declare const DEFAULT_TOC_THEMES: MarkdownDirectiveTheme[];
17
+ export declare const DEFAULT_SECTION_THEMES: MarkdownDirectiveTheme[];
18
+ export declare const DEFAULT_COLUMNS_THEMES: MarkdownDirectiveTheme[];
19
+ export declare const DEFAULT_CELL_THEMES: MarkdownDirectiveTheme[];
20
+ export declare const DEFAULT_DIRECTIVE_THEMES: Record<DirectiveThemeGroupName, MarkdownDirectiveTheme[]>;
21
+ export declare function slugThemeName(name: string): string;
22
+ export declare function getDirectiveThemeNames(groupName: DirectiveThemeGroupName, themes?: MarkdownDirectiveThemes): string[];
23
+ export declare function hasDirectiveTheme(groupName: DirectiveThemeGroupName, name: string, themes?: MarkdownDirectiveThemes): boolean;
24
+ export declare function resolveDirectiveTheme(groupName: DirectiveThemeGroupName, requestedName?: string, themes?: MarkdownDirectiveThemes): ResolvedDirectiveTheme;
25
+ export declare function mergeMarkdownDirectiveThemes(...themes: Array<MarkdownDirectiveThemes | undefined>): MarkdownDirectiveThemes | undefined;
@@ -0,0 +1,274 @@
1
+ import { DIRECTIVE_SURFACE_BORDER_CLASS, DIRECTIVE_SURFACE_DIVIDER_CLASS, DIRECTIVE_SURFACE_GLASS_PANEL_CLASS, DIRECTIVE_SURFACE_MUTED_PANEL_CLASS, DIRECTIVE_SURFACE_PANEL_CLASS, DIRECTIVE_SURFACE_SOFT_PANEL_CLASS, DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS } from '../styles/directiveSurface.js';
2
+ export const DEFAULT_CARD_THEMES = [
3
+ {
4
+ name: 'default',
5
+ classes: `group rounded-2xl ${DIRECTIVE_SURFACE_PANEL_CLASS} p-5 transition-colors`
6
+ },
7
+ {
8
+ name: 'muted',
9
+ classes: `group rounded-2xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-5`
10
+ },
11
+ {
12
+ name: 'glass',
13
+ classes: `group rounded-2xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} p-5`
14
+ },
15
+ {
16
+ name: 'cyan',
17
+ classes: `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-cyan-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`
18
+ },
19
+ {
20
+ name: 'violet',
21
+ classes: `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-violet-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`
22
+ },
23
+ {
24
+ name: 'emerald',
25
+ classes: `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-emerald-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`
26
+ },
27
+ {
28
+ name: 'amber',
29
+ classes: `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-amber-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`
30
+ },
31
+ {
32
+ name: 'danger',
33
+ classes: `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-red-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`
34
+ }
35
+ ];
36
+ export const DEFAULT_CARDS_THEMES = [
37
+ {
38
+ name: 'default',
39
+ classes: 'my-8 grid gap-4'
40
+ },
41
+ {
42
+ name: 'compact',
43
+ classes: 'my-6 grid gap-3'
44
+ },
45
+ {
46
+ name: 'spacious',
47
+ classes: 'my-10 grid gap-6'
48
+ },
49
+ {
50
+ name: 'feature-grid',
51
+ classes: 'my-10 grid gap-5'
52
+ }
53
+ ];
54
+ export const DEFAULT_STEPS_THEMES = [
55
+ {
56
+ name: 'default',
57
+ classes: 'my-8'
58
+ },
59
+ {
60
+ name: 'muted',
61
+ classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_SOFT_PANEL_CLASS} p-5`
62
+ },
63
+ {
64
+ name: 'glass',
65
+ classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} p-5`
66
+ },
67
+ {
68
+ name: 'cyan',
69
+ classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-cyan-950/10 p-5`
70
+ }
71
+ ];
72
+ export const DEFAULT_TABS_THEMES = [
73
+ {
74
+ name: 'default',
75
+ classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_PANEL_CLASS} p-2`
76
+ },
77
+ {
78
+ name: 'muted',
79
+ classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-2`
80
+ },
81
+ {
82
+ name: 'glass',
83
+ classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} p-2`
84
+ },
85
+ {
86
+ name: 'underline',
87
+ classes: `my-8 border-b ${DIRECTIVE_SURFACE_DIVIDER_CLASS} pb-4`
88
+ },
89
+ {
90
+ name: 'pills',
91
+ classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-2`
92
+ }
93
+ ];
94
+ export const DEFAULT_TAB_THEMES = [
95
+ {
96
+ name: 'default',
97
+ classes: `mt-4 rounded-xl ${DIRECTIVE_SURFACE_PANEL_CLASS} p-4`
98
+ },
99
+ {
100
+ name: 'muted',
101
+ classes: `mt-4 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-4`
102
+ },
103
+ {
104
+ name: 'glass',
105
+ classes: `mt-4 rounded-xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} p-4`
106
+ }
107
+ ];
108
+ export const DEFAULT_CALLOUT_THEMES = [
109
+ {
110
+ name: 'soft',
111
+ classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_SOFT_PANEL_CLASS} px-4 py-3`
112
+ },
113
+ {
114
+ name: 'solid',
115
+ classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_PANEL_CLASS} px-4 py-3`
116
+ },
117
+ {
118
+ name: 'glass',
119
+ classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} px-4 py-3`
120
+ }
121
+ ];
122
+ export const DEFAULT_DETAILS_THEMES = [
123
+ {
124
+ name: 'default',
125
+ classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_PANEL_CLASS} px-4 py-3`
126
+ },
127
+ {
128
+ name: 'muted',
129
+ classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} px-4 py-3`
130
+ },
131
+ {
132
+ name: 'glass',
133
+ classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} px-4 py-3`
134
+ }
135
+ ];
136
+ export const DEFAULT_TOC_THEMES = [
137
+ {
138
+ name: 'default',
139
+ classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_PANEL_CLASS} px-4 py-3`
140
+ },
141
+ {
142
+ name: 'compact',
143
+ classes: `my-4 rounded-lg ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} px-3 py-2 text-sm`
144
+ },
145
+ {
146
+ name: 'sidebar',
147
+ classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} px-4 py-3`
148
+ }
149
+ ];
150
+ export const DEFAULT_SECTION_THEMES = [
151
+ {
152
+ name: 'default',
153
+ classes: `w-full mx-0 my-12 rounded-xl ${DIRECTIVE_SURFACE_SOFT_PANEL_CLASS} p-6 backdrop-blur-2xl [&>h1]:my-2 [&>h1]:text-4xl [&>h1]:font-semibold [&>h2]:my-2 [&>h2]:text-4xl [&>h2]:font-semibold`
154
+ },
155
+ {
156
+ name: 'muted',
157
+ classes: `w-full mx-0 my-12 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-6`
158
+ },
159
+ {
160
+ name: 'panel',
161
+ classes: `w-full mx-0 my-12 rounded-2xl ${DIRECTIVE_SURFACE_PANEL_CLASS} p-6`
162
+ }
163
+ ];
164
+ export const DEFAULT_COLUMNS_THEMES = [
165
+ {
166
+ name: 'default',
167
+ classes: 'grid grid-cols-1 gap-6 w-full'
168
+ },
169
+ {
170
+ name: 'panel',
171
+ classes: `grid grid-cols-1 gap-6 w-full rounded-2xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-4`
172
+ }
173
+ ];
174
+ export const DEFAULT_CELL_THEMES = [
175
+ {
176
+ name: 'default',
177
+ classes: 'flex flex-col w-full gap-2 [&>h2]:text-2xl [&>h2]:my-4 [&>h3]:text-xl [&>h3]:my-3 [&>h4]:text-lg [&>h4]:my-2'
178
+ },
179
+ {
180
+ name: 'panel',
181
+ classes: `flex flex-col w-full gap-2 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-4 [&>h2]:text-2xl [&>h2]:my-4 [&>h3]:text-xl [&>h3]:my-3 [&>h4]:text-lg [&>h4]:my-2`
182
+ }
183
+ ];
184
+ export const DEFAULT_DIRECTIVE_THEMES = {
185
+ callout: DEFAULT_CALLOUT_THEMES,
186
+ card: DEFAULT_CARD_THEMES,
187
+ cards: DEFAULT_CARDS_THEMES,
188
+ cell: DEFAULT_CELL_THEMES,
189
+ columns: DEFAULT_COLUMNS_THEMES,
190
+ details: DEFAULT_DETAILS_THEMES,
191
+ section: DEFAULT_SECTION_THEMES,
192
+ steps: DEFAULT_STEPS_THEMES,
193
+ tab: DEFAULT_TAB_THEMES,
194
+ tabs: DEFAULT_TABS_THEMES,
195
+ toc: DEFAULT_TOC_THEMES
196
+ };
197
+ function normalizeThemeGroup(group) {
198
+ if (!group) return {
199
+ extendDefaults: true,
200
+ items: []
201
+ };
202
+ if (Array.isArray(group)) return {
203
+ extendDefaults: true,
204
+ items: group
205
+ };
206
+ return {
207
+ extendDefaults: group.extendDefaults ?? true,
208
+ items: group.items ?? []
209
+ };
210
+ }
211
+ function getThemeItems(groupName, themes) {
212
+ const group = normalizeThemeGroup(themes?.[groupName]);
213
+ const items = group.extendDefaults ? [
214
+ ...DEFAULT_DIRECTIVE_THEMES[groupName]
215
+ ] : [];
216
+ const byName = new Map(items.map((theme)=>[
217
+ theme.name,
218
+ theme
219
+ ]));
220
+ for (const theme of group.items)byName.set(theme.name, theme);
221
+ return [
222
+ ...byName.values()
223
+ ];
224
+ }
225
+ export function slugThemeName(name) {
226
+ return name.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'default';
227
+ }
228
+ export function getDirectiveThemeNames(groupName, themes) {
229
+ return getThemeItems(groupName, themes).map((theme)=>theme.name);
230
+ }
231
+ export function hasDirectiveTheme(groupName, name, themes) {
232
+ return getThemeItems(groupName, themes).some((theme)=>theme.name === name);
233
+ }
234
+ export function resolveDirectiveTheme(groupName, requestedName, themes) {
235
+ const items = getThemeItems(groupName, themes);
236
+ const requested = requestedName?.trim() || 'default';
237
+ const found = items.find((theme)=>theme.name === requested);
238
+ const fallback = items.find((theme)=>theme.name === 'default') ?? DEFAULT_DIRECTIVE_THEMES[groupName][0];
239
+ const resolved = found ?? fallback;
240
+ const slug = slugThemeName(resolved.name);
241
+ const hookClassName = `vl-md-${groupName}`;
242
+ return {
243
+ name: resolved.name,
244
+ classes: resolved.classes,
245
+ hookClassName,
246
+ modifierClassName: `${hookClassName}--theme-${slug}`
247
+ };
248
+ }
249
+ export function mergeMarkdownDirectiveThemes(...themes) {
250
+ const merged = {};
251
+ for (const themeConfig of themes){
252
+ if (!themeConfig) continue;
253
+ for (const groupName of Object.keys(DEFAULT_DIRECTIVE_THEMES)){
254
+ const next = themeConfig[groupName];
255
+ if (!next) continue;
256
+ const current = normalizeThemeGroup(merged[groupName]);
257
+ const incoming = normalizeThemeGroup(next);
258
+ const byName = new Map(current.items.map((theme)=>[
259
+ theme.name,
260
+ theme
261
+ ]));
262
+ for (const item of incoming.items)byName.set(item.name, item);
263
+ merged[groupName] = {
264
+ extendDefaults: incoming.extendDefaults,
265
+ items: [
266
+ ...byName.values()
267
+ ]
268
+ };
269
+ }
270
+ }
271
+ return Object.keys(merged).length > 0 ? merged : undefined;
272
+ }
273
+
274
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/directives/themes.ts"],"sourcesContent":["import type {\n MarkdownDirectiveTheme,\n MarkdownDirectiveThemeGroup,\n MarkdownDirectiveThemes,\n} from '../types/core.js'\n\nimport {\n DIRECTIVE_SURFACE_BORDER_CLASS,\n DIRECTIVE_SURFACE_DIVIDER_CLASS,\n DIRECTIVE_SURFACE_GLASS_PANEL_CLASS,\n DIRECTIVE_SURFACE_MUTED_PANEL_CLASS,\n DIRECTIVE_SURFACE_PANEL_CLASS,\n DIRECTIVE_SURFACE_SOFT_PANEL_CLASS,\n DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS,\n} from '../styles/directiveSurface.js'\n\nexport type DirectiveThemeGroupName = keyof MarkdownDirectiveThemes\n\nexport type ResolvedDirectiveTheme = {\n classes: string\n hookClassName: string\n modifierClassName: string\n name: string\n}\n\nexport const DEFAULT_CARD_THEMES: MarkdownDirectiveTheme[] = [\n {\n name: 'default',\n classes:\n `group rounded-2xl ${DIRECTIVE_SURFACE_PANEL_CLASS} p-5 transition-colors`,\n },\n {\n name: 'muted',\n classes: `group rounded-2xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-5`,\n },\n {\n name: 'glass',\n classes: `group rounded-2xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} p-5`,\n },\n {\n name: 'cyan',\n classes:\n `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-cyan-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`,\n },\n {\n name: 'violet',\n classes:\n `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-violet-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`,\n },\n {\n name: 'emerald',\n classes:\n `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-emerald-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`,\n },\n {\n name: 'amber',\n classes:\n `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-amber-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`,\n },\n {\n name: 'danger',\n classes:\n `group rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-red-950/15 p-5 ${DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS}`,\n },\n]\n\nexport const DEFAULT_CARDS_THEMES: MarkdownDirectiveTheme[] = [\n { name: 'default', classes: 'my-8 grid gap-4' },\n { name: 'compact', classes: 'my-6 grid gap-3' },\n { name: 'spacious', classes: 'my-10 grid gap-6' },\n { name: 'feature-grid', classes: 'my-10 grid gap-5' },\n]\n\nexport const DEFAULT_STEPS_THEMES: MarkdownDirectiveTheme[] = [\n { name: 'default', classes: 'my-8' },\n {\n name: 'muted',\n classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_SOFT_PANEL_CLASS} p-5`,\n },\n {\n name: 'glass',\n classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} p-5`,\n },\n {\n name: 'cyan',\n classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_BORDER_CLASS} bg-cyan-950/10 p-5`,\n },\n]\n\nexport const DEFAULT_TABS_THEMES: MarkdownDirectiveTheme[] = [\n { name: 'default', classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_PANEL_CLASS} p-2` },\n { name: 'muted', classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-2` },\n {\n name: 'glass',\n classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} p-2`,\n },\n { name: 'underline', classes: `my-8 border-b ${DIRECTIVE_SURFACE_DIVIDER_CLASS} pb-4` },\n { name: 'pills', classes: `my-8 rounded-2xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-2` },\n]\n\nexport const DEFAULT_TAB_THEMES: MarkdownDirectiveTheme[] = [\n { name: 'default', classes: `mt-4 rounded-xl ${DIRECTIVE_SURFACE_PANEL_CLASS} p-4` },\n { name: 'muted', classes: `mt-4 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-4` },\n {\n name: 'glass',\n classes: `mt-4 rounded-xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} p-4`,\n },\n]\n\nexport const DEFAULT_CALLOUT_THEMES: MarkdownDirectiveTheme[] = [\n { name: 'soft', classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_SOFT_PANEL_CLASS} px-4 py-3` },\n { name: 'solid', classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_PANEL_CLASS} px-4 py-3` },\n {\n name: 'glass',\n classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} px-4 py-3`,\n },\n]\n\nexport const DEFAULT_DETAILS_THEMES: MarkdownDirectiveTheme[] = [\n { name: 'default', classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_PANEL_CLASS} px-4 py-3` },\n { name: 'muted', classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} px-4 py-3` },\n {\n name: 'glass',\n classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_GLASS_PANEL_CLASS} px-4 py-3`,\n },\n]\n\nexport const DEFAULT_TOC_THEMES: MarkdownDirectiveTheme[] = [\n { name: 'default', classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_PANEL_CLASS} px-4 py-3` },\n { name: 'compact', classes: `my-4 rounded-lg ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} px-3 py-2 text-sm` },\n { name: 'sidebar', classes: `my-6 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} px-4 py-3` },\n]\n\nexport const DEFAULT_SECTION_THEMES: MarkdownDirectiveTheme[] = [\n {\n name: 'default',\n classes:\n `w-full mx-0 my-12 rounded-xl ${DIRECTIVE_SURFACE_SOFT_PANEL_CLASS} p-6 backdrop-blur-2xl [&>h1]:my-2 [&>h1]:text-4xl [&>h1]:font-semibold [&>h2]:my-2 [&>h2]:text-4xl [&>h2]:font-semibold`,\n },\n { name: 'muted', classes: `w-full mx-0 my-12 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-6` },\n { name: 'panel', classes: `w-full mx-0 my-12 rounded-2xl ${DIRECTIVE_SURFACE_PANEL_CLASS} p-6` },\n]\n\nexport const DEFAULT_COLUMNS_THEMES: MarkdownDirectiveTheme[] = [\n { name: 'default', classes: 'grid grid-cols-1 gap-6 w-full' },\n { name: 'panel', classes: `grid grid-cols-1 gap-6 w-full rounded-2xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-4` },\n]\n\nexport const DEFAULT_CELL_THEMES: MarkdownDirectiveTheme[] = [\n {\n name: 'default',\n classes:\n 'flex flex-col w-full gap-2 [&>h2]:text-2xl [&>h2]:my-4 [&>h3]:text-xl [&>h3]:my-3 [&>h4]:text-lg [&>h4]:my-2',\n },\n {\n name: 'panel',\n classes:\n `flex flex-col w-full gap-2 rounded-xl ${DIRECTIVE_SURFACE_MUTED_PANEL_CLASS} p-4 [&>h2]:text-2xl [&>h2]:my-4 [&>h3]:text-xl [&>h3]:my-3 [&>h4]:text-lg [&>h4]:my-2`,\n },\n]\n\nexport const DEFAULT_DIRECTIVE_THEMES: Record<DirectiveThemeGroupName, MarkdownDirectiveTheme[]> = {\n callout: DEFAULT_CALLOUT_THEMES,\n card: DEFAULT_CARD_THEMES,\n cards: DEFAULT_CARDS_THEMES,\n cell: DEFAULT_CELL_THEMES,\n columns: DEFAULT_COLUMNS_THEMES,\n details: DEFAULT_DETAILS_THEMES,\n section: DEFAULT_SECTION_THEMES,\n steps: DEFAULT_STEPS_THEMES,\n tab: DEFAULT_TAB_THEMES,\n tabs: DEFAULT_TABS_THEMES,\n toc: DEFAULT_TOC_THEMES,\n}\n\nfunction normalizeThemeGroup(\n group?: MarkdownDirectiveThemeGroup,\n): { extendDefaults: boolean; items: MarkdownDirectiveTheme[] } {\n if (!group) return { extendDefaults: true, items: [] }\n if (Array.isArray(group)) return { extendDefaults: true, items: group }\n\n return {\n extendDefaults: group.extendDefaults ?? true,\n items: group.items ?? [],\n }\n}\n\nfunction getThemeItems(\n groupName: DirectiveThemeGroupName,\n themes?: MarkdownDirectiveThemes,\n): MarkdownDirectiveTheme[] {\n const group = normalizeThemeGroup(themes?.[groupName])\n const items = group.extendDefaults ? [...DEFAULT_DIRECTIVE_THEMES[groupName]] : []\n const byName = new Map(items.map((theme) => [theme.name, theme]))\n\n for (const theme of group.items) byName.set(theme.name, theme)\n\n return [...byName.values()]\n}\n\nexport function slugThemeName(name: string): string {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '') || 'default'\n}\n\nexport function getDirectiveThemeNames(\n groupName: DirectiveThemeGroupName,\n themes?: MarkdownDirectiveThemes,\n): string[] {\n return getThemeItems(groupName, themes).map((theme) => theme.name)\n}\n\nexport function hasDirectiveTheme(\n groupName: DirectiveThemeGroupName,\n name: string,\n themes?: MarkdownDirectiveThemes,\n): boolean {\n return getThemeItems(groupName, themes).some((theme) => theme.name === name)\n}\n\nexport function resolveDirectiveTheme(\n groupName: DirectiveThemeGroupName,\n requestedName?: string,\n themes?: MarkdownDirectiveThemes,\n): ResolvedDirectiveTheme {\n const items = getThemeItems(groupName, themes)\n const requested = requestedName?.trim() || 'default'\n const found = items.find((theme) => theme.name === requested)\n const fallback = items.find((theme) => theme.name === 'default') ?? DEFAULT_DIRECTIVE_THEMES[groupName][0]\n const resolved = found ?? fallback\n const slug = slugThemeName(resolved.name)\n const hookClassName = `vl-md-${groupName}`\n\n return {\n name: resolved.name,\n classes: resolved.classes,\n hookClassName,\n modifierClassName: `${hookClassName}--theme-${slug}`,\n }\n}\n\nexport function mergeMarkdownDirectiveThemes(\n ...themes: Array<MarkdownDirectiveThemes | undefined>\n): MarkdownDirectiveThemes | undefined {\n const merged: MarkdownDirectiveThemes = {}\n\n for (const themeConfig of themes) {\n if (!themeConfig) continue\n\n for (const groupName of Object.keys(DEFAULT_DIRECTIVE_THEMES) as DirectiveThemeGroupName[]) {\n const next = themeConfig[groupName]\n if (!next) continue\n\n const current = normalizeThemeGroup(merged[groupName])\n const incoming = normalizeThemeGroup(next)\n const byName = new Map(current.items.map((theme) => [theme.name, theme]))\n\n for (const item of incoming.items) byName.set(item.name, item)\n\n merged[groupName] = {\n extendDefaults: incoming.extendDefaults,\n items: [...byName.values()],\n }\n }\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined\n}\n"],"names":["DIRECTIVE_SURFACE_BORDER_CLASS","DIRECTIVE_SURFACE_DIVIDER_CLASS","DIRECTIVE_SURFACE_GLASS_PANEL_CLASS","DIRECTIVE_SURFACE_MUTED_PANEL_CLASS","DIRECTIVE_SURFACE_PANEL_CLASS","DIRECTIVE_SURFACE_SOFT_PANEL_CLASS","DIRECTIVE_SURFACE_SOFT_SHADOW_CLASS","DEFAULT_CARD_THEMES","name","classes","DEFAULT_CARDS_THEMES","DEFAULT_STEPS_THEMES","DEFAULT_TABS_THEMES","DEFAULT_TAB_THEMES","DEFAULT_CALLOUT_THEMES","DEFAULT_DETAILS_THEMES","DEFAULT_TOC_THEMES","DEFAULT_SECTION_THEMES","DEFAULT_COLUMNS_THEMES","DEFAULT_CELL_THEMES","DEFAULT_DIRECTIVE_THEMES","callout","card","cards","cell","columns","details","section","steps","tab","tabs","toc","normalizeThemeGroup","group","extendDefaults","items","Array","isArray","getThemeItems","groupName","themes","byName","Map","map","theme","set","values","slugThemeName","replace","toLowerCase","getDirectiveThemeNames","hasDirectiveTheme","some","resolveDirectiveTheme","requestedName","requested","trim","found","find","fallback","resolved","slug","hookClassName","modifierClassName","mergeMarkdownDirectiveThemes","merged","themeConfig","Object","keys","next","current","incoming","item","length","undefined"],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { Element, ElementContent } from 'hast';
2
+ import type { ContainerDirective } from 'mdast-util-directive';
3
+ import type { Data } from 'unist';
4
+ import type { MarkdownRenderConfig } from '../types/core.js';
5
+ import type { DirectiveThemeGroupName, ResolvedDirectiveTheme } from './themes.js';
6
+ export type LayoutDirectiveName = '2col' | '3col' | 'cell' | 'section';
7
+ export type StaticDirectiveName = 'callout' | 'card' | 'cards' | 'details' | 'steps' | 'tab' | 'tabs' | 'toc';
8
+ export type MarkdownDirectiveName = LayoutDirectiveName | StaticDirectiveName;
9
+ export type GridDirectiveName = '2col' | '3col';
10
+ export type LayoutName = MarkdownDirectiveName;
11
+ export type LayoutToken = {
12
+ action: 'close';
13
+ data?: Data;
14
+ type: 'vlLayoutToken';
15
+ } | {
16
+ action: 'closeGrid';
17
+ data?: Data;
18
+ type: 'vlLayoutToken';
19
+ } | {
20
+ action: 'closeSection';
21
+ data?: Data;
22
+ type: 'vlLayoutToken';
23
+ } | {
24
+ action: 'open';
25
+ attributes?: Record<string, boolean | string>;
26
+ data?: Data;
27
+ name: LayoutName;
28
+ type: 'vlLayoutToken';
29
+ };
30
+ export type DirectiveChild = ContainerDirective['children'][number];
31
+ export type LayoutDirectiveKind = 'callout' | 'card' | 'cards' | 'cell' | 'details' | 'grid' | 'section' | 'steps' | 'tab' | 'tabs' | 'toc';
32
+ export type LayoutDirectiveRenderTagName = 'article' | 'details' | 'div' | 'nav' | 'section';
33
+ export type LayoutDirectiveTransformContext = {
34
+ isSupportedDirectiveName: (name: string) => name is MarkdownDirectiveName;
35
+ };
36
+ export type LayoutDirectiveClassHelpers = {
37
+ groupChildrenIntoCells: (children: ElementContent[], columnClassName?: string, cellTheme?: ResolvedDirectiveTheme) => ElementContent[];
38
+ mergeClassNames: (...values: Array<string | undefined>) => string[];
39
+ };
40
+ export type LayoutDirectiveEditorMetadata = {
41
+ detail?: string;
42
+ label: string;
43
+ snippet: string;
44
+ snippets?: Array<{
45
+ detail?: string;
46
+ label: string;
47
+ snippet: string;
48
+ }>;
49
+ };
50
+ export type DirectiveValidationContext = {
51
+ attributes: Record<string, boolean | string>;
52
+ name: MarkdownDirectiveName;
53
+ };
54
+ export type LayoutDirectiveDefinition = {
55
+ allowedAttributes?: readonly string[];
56
+ applyHast?: (node: Element, config: MarkdownRenderConfig, helpers: LayoutDirectiveClassHelpers) => void;
57
+ attributeValues?: Partial<Record<string, readonly string[]>>;
58
+ defaultAttributes?: Record<string, string>;
59
+ description?: string;
60
+ editor: LayoutDirectiveEditorMetadata;
61
+ getMdastRenderProperties?: (node: ContainerDirective) => Record<string, unknown>;
62
+ kind: LayoutDirectiveKind;
63
+ name: MarkdownDirectiveName;
64
+ openMarker?: `:::${string}`;
65
+ public?: boolean;
66
+ supportsAttributes?: boolean;
67
+ tagName: LayoutDirectiveRenderTagName;
68
+ themeAttributes?: Partial<Record<string, DirectiveThemeGroupName>>;
69
+ transformMdast?: (node: ContainerDirective, context: LayoutDirectiveTransformContext) => void;
70
+ validateAttributes?: (context: DirectiveValidationContext) => string[];
71
+ validateMdast?: (node: ContainerDirective) => string[];
72
+ };
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/directives/types.ts"],"sourcesContent":["import type { Element, ElementContent } from 'hast'\nimport type { ContainerDirective } from 'mdast-util-directive'\nimport type { Data } from 'unist'\n\nimport type { MarkdownRenderConfig } from '../types/core.js'\nimport type { DirectiveThemeGroupName, ResolvedDirectiveTheme } from './themes.js'\n\nexport type LayoutDirectiveName = '2col' | '3col' | 'cell' | 'section'\nexport type StaticDirectiveName =\n | 'callout'\n | 'card'\n | 'cards'\n | 'details'\n | 'steps'\n | 'tab'\n | 'tabs'\n | 'toc'\nexport type MarkdownDirectiveName = LayoutDirectiveName | StaticDirectiveName\nexport type GridDirectiveName = '2col' | '3col'\nexport type LayoutName = MarkdownDirectiveName\n\nexport type LayoutToken =\n | {\n action: 'close'\n data?: Data\n type: 'vlLayoutToken'\n }\n | {\n action: 'closeGrid'\n data?: Data\n type: 'vlLayoutToken'\n }\n | {\n action: 'closeSection'\n data?: Data\n type: 'vlLayoutToken'\n }\n | {\n action: 'open'\n attributes?: Record<string, boolean | string>\n data?: Data\n name: LayoutName\n type: 'vlLayoutToken'\n }\n\nexport type DirectiveChild = ContainerDirective['children'][number]\n\nexport type LayoutDirectiveKind =\n | 'callout'\n | 'card'\n | 'cards'\n | 'cell'\n | 'details'\n | 'grid'\n | 'section'\n | 'steps'\n | 'tab'\n | 'tabs'\n | 'toc'\n\nexport type LayoutDirectiveRenderTagName =\n | 'article'\n | 'details'\n | 'div'\n | 'nav'\n | 'section'\n\nexport type LayoutDirectiveTransformContext = {\n isSupportedDirectiveName: (name: string) => name is MarkdownDirectiveName\n}\n\nexport type LayoutDirectiveClassHelpers = {\n groupChildrenIntoCells: (\n children: ElementContent[],\n columnClassName?: string,\n cellTheme?: ResolvedDirectiveTheme,\n ) => ElementContent[]\n mergeClassNames: (...values: Array<string | undefined>) => string[]\n}\n\nexport type LayoutDirectiveEditorMetadata = {\n detail?: string\n label: string\n snippet: string\n snippets?: Array<{\n detail?: string\n label: string\n snippet: string\n }>\n}\n\nexport type DirectiveValidationContext = {\n attributes: Record<string, boolean | string>\n name: MarkdownDirectiveName\n}\n\nexport type LayoutDirectiveDefinition = {\n allowedAttributes?: readonly string[]\n applyHast?: (\n node: Element,\n config: MarkdownRenderConfig,\n helpers: LayoutDirectiveClassHelpers,\n ) => void\n attributeValues?: Partial<Record<string, readonly string[]>>\n defaultAttributes?: Record<string, string>\n description?: string\n editor: LayoutDirectiveEditorMetadata\n getMdastRenderProperties?: (node: ContainerDirective) => Record<string, unknown>\n kind: LayoutDirectiveKind\n name: MarkdownDirectiveName\n openMarker?: `:::${string}`\n public?: boolean\n supportsAttributes?: boolean\n tagName: LayoutDirectiveRenderTagName\n themeAttributes?: Partial<Record<string, DirectiveThemeGroupName>>\n transformMdast?: (\n node: ContainerDirective,\n context: LayoutDirectiveTransformContext,\n ) => void\n validateAttributes?: (context: DirectiveValidationContext) => string[]\n validateMdast?: (node: ContainerDirective) => string[]\n}\n"],"names":[],"mappings":"AAgGA,WAyBC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ type MarkdownCodeMirrorClientProps = {
3
+ onChangeAction: (value: string) => void;
4
+ placeholder?: string;
5
+ value?: string;
6
+ };
7
+ export declare const MarkdownCodeMirrorClient: React.FC<MarkdownCodeMirrorClientProps>;
8
+ export {};