docusaurus-plugin-gitbook 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 (204) hide show
  1. package/README.md +210 -0
  2. package/lib/index.d.ts +51 -0
  3. package/lib/index.d.ts.map +1 -0
  4. package/lib/index.js +39 -0
  5. package/lib/index.js.map +1 -0
  6. package/lib/parser/index.d.ts +6 -0
  7. package/lib/parser/index.d.ts.map +1 -0
  8. package/lib/parser/index.js +6 -0
  9. package/lib/parser/index.js.map +1 -0
  10. package/lib/parser/parser.d.ts +43 -0
  11. package/lib/parser/parser.d.ts.map +1 -0
  12. package/lib/parser/parser.js +192 -0
  13. package/lib/parser/parser.js.map +1 -0
  14. package/lib/parser/tokenizer.d.ts +37 -0
  15. package/lib/parser/tokenizer.d.ts.map +1 -0
  16. package/lib/parser/tokenizer.js +172 -0
  17. package/lib/parser/tokenizer.js.map +1 -0
  18. package/lib/rehype/index.d.ts +7 -0
  19. package/lib/rehype/index.d.ts.map +1 -0
  20. package/lib/rehype/index.js +6 -0
  21. package/lib/rehype/index.js.map +1 -0
  22. package/lib/rehype/plugin.d.ts +18 -0
  23. package/lib/rehype/plugin.d.ts.map +1 -0
  24. package/lib/rehype/plugin.js +31 -0
  25. package/lib/rehype/plugin.js.map +1 -0
  26. package/lib/rehype/transformers/all.d.ts +8 -0
  27. package/lib/rehype/transformers/all.d.ts.map +1 -0
  28. package/lib/rehype/transformers/all.js +10 -0
  29. package/lib/rehype/transformers/all.js.map +1 -0
  30. package/lib/rehype/transformers/button.d.ts +17 -0
  31. package/lib/rehype/transformers/button.d.ts.map +1 -0
  32. package/lib/rehype/transformers/button.js +46 -0
  33. package/lib/rehype/transformers/button.js.map +1 -0
  34. package/lib/rehype/transformers/cards.d.ts +17 -0
  35. package/lib/rehype/transformers/cards.d.ts.map +1 -0
  36. package/lib/rehype/transformers/cards.js +111 -0
  37. package/lib/rehype/transformers/cards.js.map +1 -0
  38. package/lib/rehype/transformers/expression.d.ts +17 -0
  39. package/lib/rehype/transformers/expression.d.ts.map +1 -0
  40. package/lib/rehype/transformers/expression.js +50 -0
  41. package/lib/rehype/transformers/expression.js.map +1 -0
  42. package/lib/rehype/transformers/icon.d.ts +18 -0
  43. package/lib/rehype/transformers/icon.d.ts.map +1 -0
  44. package/lib/rehype/transformers/icon.js +48 -0
  45. package/lib/rehype/transformers/icon.js.map +1 -0
  46. package/lib/rehype/transformers/index.d.ts +26 -0
  47. package/lib/rehype/transformers/index.d.ts.map +1 -0
  48. package/lib/rehype/transformers/index.js +31 -0
  49. package/lib/rehype/transformers/index.js.map +1 -0
  50. package/lib/remark/index.d.ts +8 -0
  51. package/lib/remark/index.d.ts.map +1 -0
  52. package/lib/remark/index.js +7 -0
  53. package/lib/remark/index.js.map +1 -0
  54. package/lib/remark/plugin.d.ts +22 -0
  55. package/lib/remark/plugin.d.ts.map +1 -0
  56. package/lib/remark/plugin.js +231 -0
  57. package/lib/remark/plugin.js.map +1 -0
  58. package/lib/remark/transformers/all.d.ts +14 -0
  59. package/lib/remark/transformers/all.d.ts.map +1 -0
  60. package/lib/remark/transformers/all.js +16 -0
  61. package/lib/remark/transformers/all.js.map +1 -0
  62. package/lib/remark/transformers/code.d.ts +13 -0
  63. package/lib/remark/transformers/code.d.ts.map +1 -0
  64. package/lib/remark/transformers/code.js +35 -0
  65. package/lib/remark/transformers/code.js.map +1 -0
  66. package/lib/remark/transformers/columns.d.ts +17 -0
  67. package/lib/remark/transformers/columns.d.ts.map +1 -0
  68. package/lib/remark/transformers/columns.js +41 -0
  69. package/lib/remark/transformers/columns.js.map +1 -0
  70. package/lib/remark/transformers/embed.d.ts +12 -0
  71. package/lib/remark/transformers/embed.d.ts.map +1 -0
  72. package/lib/remark/transformers/embed.js +23 -0
  73. package/lib/remark/transformers/embed.js.map +1 -0
  74. package/lib/remark/transformers/file.d.ts +13 -0
  75. package/lib/remark/transformers/file.d.ts.map +1 -0
  76. package/lib/remark/transformers/file.js +26 -0
  77. package/lib/remark/transformers/file.js.map +1 -0
  78. package/lib/remark/transformers/hint.d.ts +19 -0
  79. package/lib/remark/transformers/hint.d.ts.map +1 -0
  80. package/lib/remark/transformers/hint.js +37 -0
  81. package/lib/remark/transformers/hint.js.map +1 -0
  82. package/lib/remark/transformers/include.d.ts +16 -0
  83. package/lib/remark/transformers/include.d.ts.map +1 -0
  84. package/lib/remark/transformers/include.js +28 -0
  85. package/lib/remark/transformers/include.js.map +1 -0
  86. package/lib/remark/transformers/index.d.ts +27 -0
  87. package/lib/remark/transformers/index.d.ts.map +1 -0
  88. package/lib/remark/transformers/index.js +32 -0
  89. package/lib/remark/transformers/index.js.map +1 -0
  90. package/lib/remark/transformers/openapi.d.ts +17 -0
  91. package/lib/remark/transformers/openapi.d.ts.map +1 -0
  92. package/lib/remark/transformers/openapi.js +30 -0
  93. package/lib/remark/transformers/openapi.js.map +1 -0
  94. package/lib/remark/transformers/stepper.d.ts +17 -0
  95. package/lib/remark/transformers/stepper.d.ts.map +1 -0
  96. package/lib/remark/transformers/stepper.js +44 -0
  97. package/lib/remark/transformers/stepper.js.map +1 -0
  98. package/lib/remark/transformers/tabs.d.ts +18 -0
  99. package/lib/remark/transformers/tabs.d.ts.map +1 -0
  100. package/lib/remark/transformers/tabs.js +45 -0
  101. package/lib/remark/transformers/tabs.js.map +1 -0
  102. package/lib/remark/transformers/updates.d.ts +17 -0
  103. package/lib/remark/transformers/updates.d.ts.map +1 -0
  104. package/lib/remark/transformers/updates.js +44 -0
  105. package/lib/remark/transformers/updates.js.map +1 -0
  106. package/lib/remark/utils.d.ts +39 -0
  107. package/lib/remark/utils.d.ts.map +1 -0
  108. package/lib/remark/utils.js +139 -0
  109. package/lib/remark/utils.js.map +1 -0
  110. package/lib/theme/FAIcon/index.d.ts +10 -0
  111. package/lib/theme/FAIcon/index.d.ts.map +1 -0
  112. package/lib/theme/FAIcon/index.js +5 -0
  113. package/lib/theme/FAIcon/index.js.map +1 -0
  114. package/lib/theme/GitBookButton/index.d.ts +9 -0
  115. package/lib/theme/GitBookButton/index.d.ts.map +1 -0
  116. package/lib/theme/GitBookButton/index.js +6 -0
  117. package/lib/theme/GitBookButton/index.js.map +1 -0
  118. package/lib/theme/GitBookButton/styles.module.css +66 -0
  119. package/lib/theme/GitBookCard/index.d.ts +9 -0
  120. package/lib/theme/GitBookCard/index.d.ts.map +1 -0
  121. package/lib/theme/GitBookCard/index.js +6 -0
  122. package/lib/theme/GitBookCard/index.js.map +1 -0
  123. package/lib/theme/GitBookCard/styles.module.css +51 -0
  124. package/lib/theme/GitBookCards/index.d.ts +9 -0
  125. package/lib/theme/GitBookCards/index.d.ts.map +1 -0
  126. package/lib/theme/GitBookCards/index.js +6 -0
  127. package/lib/theme/GitBookCards/index.js.map +1 -0
  128. package/lib/theme/GitBookCards/styles.module.css +16 -0
  129. package/lib/theme/GitBookCodeBlock/index.d.ts +9 -0
  130. package/lib/theme/GitBookCodeBlock/index.d.ts.map +1 -0
  131. package/lib/theme/GitBookCodeBlock/index.js +6 -0
  132. package/lib/theme/GitBookCodeBlock/index.js.map +1 -0
  133. package/lib/theme/GitBookCodeBlock/styles.module.css +59 -0
  134. package/lib/theme/GitBookColumn/index.d.ts +9 -0
  135. package/lib/theme/GitBookColumn/index.d.ts.map +1 -0
  136. package/lib/theme/GitBookColumn/index.js +6 -0
  137. package/lib/theme/GitBookColumn/index.js.map +1 -0
  138. package/lib/theme/GitBookColumn/styles.module.css +16 -0
  139. package/lib/theme/GitBookColumns/index.d.ts +9 -0
  140. package/lib/theme/GitBookColumns/index.d.ts.map +1 -0
  141. package/lib/theme/GitBookColumns/index.js +6 -0
  142. package/lib/theme/GitBookColumns/index.js.map +1 -0
  143. package/lib/theme/GitBookColumns/styles.module.css +17 -0
  144. package/lib/theme/GitBookEmbed/index.d.ts +9 -0
  145. package/lib/theme/GitBookEmbed/index.d.ts.map +1 -0
  146. package/lib/theme/GitBookEmbed/index.js +71 -0
  147. package/lib/theme/GitBookEmbed/index.js.map +1 -0
  148. package/lib/theme/GitBookEmbed/styles.module.css +37 -0
  149. package/lib/theme/GitBookExpression/index.d.ts +13 -0
  150. package/lib/theme/GitBookExpression/index.d.ts.map +1 -0
  151. package/lib/theme/GitBookExpression/index.js +12 -0
  152. package/lib/theme/GitBookExpression/index.js.map +1 -0
  153. package/lib/theme/GitBookExpression/styles.module.css +16 -0
  154. package/lib/theme/GitBookFile/index.d.ts +9 -0
  155. package/lib/theme/GitBookFile/index.d.ts.map +1 -0
  156. package/lib/theme/GitBookFile/index.js +42 -0
  157. package/lib/theme/GitBookFile/index.js.map +1 -0
  158. package/lib/theme/GitBookFile/styles.module.css +61 -0
  159. package/lib/theme/GitBookInclude/index.d.ts +19 -0
  160. package/lib/theme/GitBookInclude/index.d.ts.map +1 -0
  161. package/lib/theme/GitBookInclude/index.js +8 -0
  162. package/lib/theme/GitBookInclude/index.js.map +1 -0
  163. package/lib/theme/GitBookInclude/styles.module.css +77 -0
  164. package/lib/theme/GitBookOpenAPI/index.d.ts +14 -0
  165. package/lib/theme/GitBookOpenAPI/index.d.ts.map +1 -0
  166. package/lib/theme/GitBookOpenAPI/index.js +73 -0
  167. package/lib/theme/GitBookOpenAPI/index.js.map +1 -0
  168. package/lib/theme/GitBookOpenAPI/styles.module.css +214 -0
  169. package/lib/theme/GitBookStep/index.d.ts +13 -0
  170. package/lib/theme/GitBookStep/index.d.ts.map +1 -0
  171. package/lib/theme/GitBookStep/index.js +6 -0
  172. package/lib/theme/GitBookStep/index.js.map +1 -0
  173. package/lib/theme/GitBookStep/styles.module.css +62 -0
  174. package/lib/theme/GitBookStepper/index.d.ts +9 -0
  175. package/lib/theme/GitBookStepper/index.d.ts.map +1 -0
  176. package/lib/theme/GitBookStepper/index.js +6 -0
  177. package/lib/theme/GitBookStepper/index.js.map +1 -0
  178. package/lib/theme/GitBookStepper/styles.module.css +7 -0
  179. package/lib/theme/GitBookTab/index.d.ts +12 -0
  180. package/lib/theme/GitBookTab/index.d.ts.map +1 -0
  181. package/lib/theme/GitBookTab/index.js +9 -0
  182. package/lib/theme/GitBookTab/index.js.map +1 -0
  183. package/lib/theme/GitBookTab/styles.module.css +15 -0
  184. package/lib/theme/GitBookTabs/index.d.ts +9 -0
  185. package/lib/theme/GitBookTabs/index.d.ts.map +1 -0
  186. package/lib/theme/GitBookTabs/index.js +32 -0
  187. package/lib/theme/GitBookTabs/index.js.map +1 -0
  188. package/lib/theme/GitBookTabs/styles.module.css +57 -0
  189. package/lib/theme/GitBookUpdate/index.d.ts +9 -0
  190. package/lib/theme/GitBookUpdate/index.d.ts.map +1 -0
  191. package/lib/theme/GitBookUpdate/index.js +21 -0
  192. package/lib/theme/GitBookUpdate/index.js.map +1 -0
  193. package/lib/theme/GitBookUpdate/styles.module.css +68 -0
  194. package/lib/theme/GitBookUpdates/index.d.ts +9 -0
  195. package/lib/theme/GitBookUpdates/index.d.ts.map +1 -0
  196. package/lib/theme/GitBookUpdates/index.js +6 -0
  197. package/lib/theme/GitBookUpdates/index.js.map +1 -0
  198. package/lib/theme/GitBookUpdates/styles.module.css +15 -0
  199. package/lib/theme/gitbook.css +205 -0
  200. package/lib/theme-types.d.ts +129 -0
  201. package/lib/theme-types.d.ts.map +1 -0
  202. package/lib/theme-types.js +5 -0
  203. package/lib/theme-types.js.map +1 -0
  204. package/package.json +69 -0
@@ -0,0 +1,172 @@
1
+ /**
2
+ * GitBook tag tokenizer
3
+ * Tokenizes {% tag %} syntax into structured tokens
4
+ */
5
+ // Regex to match {% ... %} tags
6
+ const TAG_PATTERN = /\{%\s*([^%]+?)\s*%\}/g;
7
+ // Regex to parse tag content: tagname followed by optional attributes
8
+ const TAG_CONTENT_PATTERN = /^(end)?(\w+)(?:\s+(.*))?$/;
9
+ // Regex to parse attributes: key="value" or key='value' or key=value or just key
10
+ const ATTR_PATTERN = /(\w+)(?:=(?:"([^"]*)"|'([^']*)'|(\S+)))?/g;
11
+ // Regex to match standalone quoted strings (positional arguments)
12
+ const POSITIONAL_QUOTED_PATTERN = /^"([^"]*)"|^'([^']*)'/;
13
+ /**
14
+ * Parse attributes string into key-value pairs
15
+ */
16
+ export function parseAttributes(attrString) {
17
+ const attributes = {};
18
+ if (!attrString) {
19
+ return attributes;
20
+ }
21
+ // Check for positional quoted string first (e.g., include "path/to/file.md")
22
+ const positionalMatch = POSITIONAL_QUOTED_PATTERN.exec(attrString.trim());
23
+ if (positionalMatch) {
24
+ // Store positional value with special key
25
+ attributes._positional = positionalMatch[1] ?? positionalMatch[2];
26
+ // Continue parsing remaining attributes after the positional value
27
+ const remaining = attrString.trim().slice(positionalMatch[0].length).trim();
28
+ if (remaining) {
29
+ let match;
30
+ ATTR_PATTERN.lastIndex = 0;
31
+ while ((match = ATTR_PATTERN.exec(remaining)) !== null) {
32
+ const key = match[1];
33
+ const value = match[2] ?? match[3] ?? match[4] ?? 'true';
34
+ attributes[key] = value;
35
+ }
36
+ }
37
+ return attributes;
38
+ }
39
+ let match;
40
+ ATTR_PATTERN.lastIndex = 0;
41
+ while ((match = ATTR_PATTERN.exec(attrString)) !== null) {
42
+ const key = match[1];
43
+ // Value can be in double quotes, single quotes, unquoted, or boolean (no value)
44
+ const value = match[2] ?? match[3] ?? match[4] ?? 'true';
45
+ attributes[key] = value;
46
+ }
47
+ return attributes;
48
+ }
49
+ /**
50
+ * Tokenize a single tag match
51
+ */
52
+ function tokenizeTag(match) {
53
+ const raw = match[0];
54
+ const content = match[1].trim();
55
+ const start = match.index;
56
+ const end = start + raw.length;
57
+ const contentMatch = TAG_CONTENT_PATTERN.exec(content);
58
+ if (!contentMatch) {
59
+ return null;
60
+ }
61
+ const isEnd = contentMatch[1] === 'end';
62
+ const name = contentMatch[2];
63
+ const attrString = contentMatch[3] || '';
64
+ // Self-closing tags are tags that don't have content (like embed, include)
65
+ // We'll determine this based on known self-closing tags or context
66
+ const selfClosingTags = ['embed', 'include'];
67
+ const isSelfClosing = !isEnd && selfClosingTags.includes(name);
68
+ return {
69
+ type: isEnd ? 'close' : isSelfClosing ? 'self-closing' : 'open',
70
+ name,
71
+ attributes: isEnd ? {} : parseAttributes(attrString),
72
+ raw,
73
+ start,
74
+ end,
75
+ };
76
+ }
77
+ /**
78
+ * Find fenced code block regions in text.
79
+ * Returns an array of {start, end} character offsets for each code block.
80
+ */
81
+ function findCodeBlockRegions(text) {
82
+ const regions = [];
83
+ const lines = text.split('\n');
84
+ let pos = 0;
85
+ let inCodeBlock = false;
86
+ let codeBlockStart = 0;
87
+ let fenceChar = '';
88
+ let fenceLen = 0;
89
+ for (const line of lines) {
90
+ const trimmed = line.trimStart();
91
+ if (!inCodeBlock) {
92
+ const openMatch = trimmed.match(/^(`{3,}|~{3,})/);
93
+ if (openMatch) {
94
+ inCodeBlock = true;
95
+ codeBlockStart = pos;
96
+ fenceChar = openMatch[1][0];
97
+ fenceLen = openMatch[1].length;
98
+ }
99
+ }
100
+ else {
101
+ // Closing fence must use same char and be at least as long
102
+ const closeMatch = trimmed.match(/^(`{3,}|~{3,})\s*$/);
103
+ if (closeMatch && closeMatch[1][0] === fenceChar && closeMatch[1].length >= fenceLen) {
104
+ inCodeBlock = false;
105
+ regions.push({ start: codeBlockStart, end: pos + line.length });
106
+ }
107
+ }
108
+ pos += line.length + 1; // +1 for \n
109
+ }
110
+ return regions;
111
+ }
112
+ /**
113
+ * Check if a character offset falls inside any code block region.
114
+ */
115
+ function isInsideCodeBlock(index, regions) {
116
+ return regions.some((r) => index >= r.start && index <= r.end);
117
+ }
118
+ /**
119
+ * Tokenize text into segments (tokens and text)
120
+ */
121
+ export function tokenize(text) {
122
+ const segments = [];
123
+ let lastIndex = 0;
124
+ // Pre-compute fenced code block regions to skip tags inside them
125
+ const codeBlockRegions = findCodeBlockRegions(text);
126
+ TAG_PATTERN.lastIndex = 0;
127
+ let match;
128
+ while ((match = TAG_PATTERN.exec(text)) !== null) {
129
+ // Skip tags inside fenced code blocks — treat them as plain text
130
+ if (isInsideCodeBlock(match.index, codeBlockRegions)) {
131
+ continue;
132
+ }
133
+ // Add text before this tag
134
+ if (match.index > lastIndex) {
135
+ segments.push({
136
+ type: 'text',
137
+ content: text.slice(lastIndex, match.index),
138
+ start: lastIndex,
139
+ end: match.index,
140
+ });
141
+ }
142
+ // Tokenize the tag
143
+ const token = tokenizeTag(match);
144
+ if (token) {
145
+ segments.push(token);
146
+ }
147
+ lastIndex = match.index + match[0].length;
148
+ }
149
+ // Add remaining text
150
+ if (lastIndex < text.length) {
151
+ segments.push({
152
+ type: 'text',
153
+ content: text.slice(lastIndex),
154
+ start: lastIndex,
155
+ end: text.length,
156
+ });
157
+ }
158
+ return segments;
159
+ }
160
+ /**
161
+ * Check if a segment is a token (not text)
162
+ */
163
+ export function isToken(segment) {
164
+ return segment.type !== 'text';
165
+ }
166
+ /**
167
+ * Check if a segment is a text segment
168
+ */
169
+ export function isTextSegment(segment) {
170
+ return segment.type === 'text';
171
+ }
172
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/parser/tokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Rehype plugin exports
3
+ */
4
+ export { default as rehypeGitBook } from './plugin.js';
5
+ export type { RehypeGitBookOptions } from './plugin.js';
6
+ export { registerRehypeTransformer, getTransformerForElement, hasTransformerForElement, type RehypeTransformer, type ElementMatcher, } from './transformers/index.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rehype/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Rehype plugin exports
3
+ */
4
+ export { default as rehypeGitBook } from './plugin.js';
5
+ export { registerRehypeTransformer, getTransformerForElement, hasTransformerForElement, } from './transformers/index.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rehype/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,GAGzB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Rehype plugin for GitBook HTML-based syntax
3
+ */
4
+ import type { Root } from 'hast';
5
+ import type { Plugin } from 'unified';
6
+ import './transformers/all.js';
7
+ export interface RehypeGitBookOptions {
8
+ /**
9
+ * Enable/disable specific transformations
10
+ */
11
+ transforms?: Record<string, boolean>;
12
+ }
13
+ /**
14
+ * The rehype plugin
15
+ */
16
+ declare const rehypeGitBook: Plugin<[RehypeGitBookOptions?], Root>;
17
+ export default rehypeGitBook;
18
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/rehype/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAkB,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAQtC,OAAO,uBAAuB,CAAC;AAE/B,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,QAAA,MAAM,aAAa,EAAE,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAoBxD,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Rehype plugin for GitBook HTML-based syntax
3
+ */
4
+ import { visit } from 'unist-util-visit';
5
+ import { getTransformerForElement, hasTransformerForElement, } from './transformers/index.js';
6
+ // Import all transformers to register them
7
+ import './transformers/all.js';
8
+ /**
9
+ * The rehype plugin
10
+ */
11
+ const rehypeGitBook = (_options = {}) => {
12
+ return (tree) => {
13
+ visit(tree, 'element', (node, index, parent) => {
14
+ if (index === undefined || !parent)
15
+ return;
16
+ // Check if we have a transformer for this element
17
+ if (!hasTransformerForElement(node))
18
+ return;
19
+ const transformer = getTransformerForElement(node);
20
+ if (!transformer)
21
+ return;
22
+ const transformed = transformer(node);
23
+ if (transformed) {
24
+ // Replace the node
25
+ parent.children[index] = transformed;
26
+ }
27
+ });
28
+ };
29
+ };
30
+ export default rehypeGitBook;
31
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/rehype/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,2CAA2C;AAC3C,OAAO,uBAAuB,CAAC;AAS/B;;GAEG;AACH,MAAM,aAAa,GAA0C,CAC3D,QAAQ,GAAG,EAAE,EACb,EAAE;IACF,OAAO,CAAC,IAAU,EAAE,EAAE;QACpB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM;gBAAE,OAAO;YAE3C,kDAAkD;YAClD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;gBAAE,OAAO;YAE5C,MAAM,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,WAAW;gBAAE,OAAO;YAEzB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,WAAW,EAAE,CAAC;gBAChB,mBAAmB;gBAClB,MAAM,CAAC,QAA6B,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Import all rehype transformers to register them
3
+ */
4
+ import './button.js';
5
+ import './icon.js';
6
+ import './cards.js';
7
+ import './expression.js';
8
+ //# sourceMappingURL=all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/all.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,aAAa,CAAC;AACrB,OAAO,WAAW,CAAC;AACnB,OAAO,YAAY,CAAC;AACpB,OAAO,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Import all rehype transformers to register them
3
+ */
4
+ // This file imports all transformers to ensure they get registered
5
+ // when the rehype plugin is loaded
6
+ import './button.js';
7
+ import './icon.js';
8
+ import './cards.js';
9
+ import './expression.js';
10
+ //# sourceMappingURL=all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all.js","sourceRoot":"","sources":["../../../src/rehype/transformers/all.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mEAAmE;AACnE,mCAAmC;AAEnC,OAAO,aAAa,CAAC;AACrB,OAAO,WAAW,CAAC;AACnB,OAAO,YAAY,CAAC;AACpB,OAAO,iBAAiB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Button transformer
3
+ *
4
+ * Transforms <a class="button primary/secondary"> into GitBookButton component
5
+ */
6
+ import type { Element } from 'hast';
7
+ import { type RehypeTransformer } from './index.js';
8
+ /**
9
+ * Check if element is a button link
10
+ */
11
+ declare function isButtonLink(element: Element): boolean;
12
+ /**
13
+ * Transform button link to GitBookButton
14
+ */
15
+ declare const buttonTransformer: RehypeTransformer;
16
+ export { buttonTransformer, isButtonLink };
17
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/button.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,iBAAS,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQ/C;AAED;;GAEG;AACH,QAAA,MAAM,iBAAiB,EAAE,iBAwBxB,CAAC;AAKF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Button transformer
3
+ *
4
+ * Transforms <a class="button primary/secondary"> into GitBookButton component
5
+ */
6
+ import { registerRehypeTransformer } from './index.js';
7
+ /**
8
+ * Check if element is a button link
9
+ */
10
+ function isButtonLink(element) {
11
+ if (element.tagName !== 'a')
12
+ return false;
13
+ const className = element.properties?.className;
14
+ if (!className)
15
+ return false;
16
+ const classes = Array.isArray(className) ? className : [className];
17
+ return classes.some((c) => String(c).includes('button'));
18
+ }
19
+ /**
20
+ * Transform button link to GitBookButton
21
+ */
22
+ const buttonTransformer = (element) => {
23
+ const className = element.properties?.className;
24
+ const classes = Array.isArray(className) ? className.map(String) : [String(className)];
25
+ const isPrimary = classes.some((c) => c.includes('primary'));
26
+ const isSecondary = classes.some((c) => c.includes('secondary'));
27
+ const variant = isPrimary ? 'primary' : isSecondary ? 'secondary' : 'primary';
28
+ const href = String(element.properties?.href || '');
29
+ const icon = element.properties?.dataIcon ? String(element.properties.dataIcon) : undefined;
30
+ // Create MDX JSX element
31
+ const mdxElement = {
32
+ type: 'element',
33
+ tagName: 'GitBookButton',
34
+ properties: {
35
+ href,
36
+ variant,
37
+ ...(icon && { icon }),
38
+ },
39
+ children: element.children,
40
+ };
41
+ return mdxElement;
42
+ };
43
+ // Register transformer
44
+ registerRehypeTransformer(isButtonLink, buttonTransformer);
45
+ export { buttonTransformer, isButtonLink };
46
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/rehype/transformers/button.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,yBAAyB,EAA0B,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,SAAS,YAAY,CAAC,OAAgB;IACpC,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;IAChD,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAsB,CAAC,OAAgB,EAAkB,EAAE;IAChF,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5F,yBAAyB;IACzB,MAAM,UAAU,GAAY;QAC1B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE;YACV,IAAI;YACJ,OAAO;YACP,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;SACtB;QACD,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,uBAAuB;AACvB,yBAAyB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Cards transformer
3
+ *
4
+ * Transforms <table data-view="cards"> into GitBookCards component
5
+ */
6
+ import type { Element } from 'hast';
7
+ import { type RehypeTransformer } from './index.js';
8
+ /**
9
+ * Check if element is a cards table
10
+ */
11
+ declare function isCardsTable(element: Element): boolean;
12
+ /**
13
+ * Transform cards table to GitBookCards
14
+ */
15
+ declare const cardsTransformer: RehypeTransformer;
16
+ export { cardsTransformer, isCardsTable };
17
+ //# sourceMappingURL=cards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/cards.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAwB,MAAM,MAAM,CAAC;AAC1D,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,iBAAS,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAG/C;AAoFD;;GAEG;AACH,QAAA,MAAM,gBAAgB,EAAE,iBA2BvB,CAAC;AAKF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Cards transformer
3
+ *
4
+ * Transforms <table data-view="cards"> into GitBookCards component
5
+ */
6
+ import { registerRehypeTransformer } from './index.js';
7
+ /**
8
+ * Check if element is a cards table
9
+ */
10
+ function isCardsTable(element) {
11
+ if (element.tagName !== 'table')
12
+ return false;
13
+ return element.properties?.dataView === 'cards';
14
+ }
15
+ /**
16
+ * Extract text content from element
17
+ */
18
+ function getTextContent(node) {
19
+ if (node.type === 'text') {
20
+ return node.value;
21
+ }
22
+ if (node.type === 'element' && 'children' in node) {
23
+ return node.children.map(getTextContent).join('');
24
+ }
25
+ return '';
26
+ }
27
+ /**
28
+ * Find element by tag name
29
+ */
30
+ function findElement(element, tagName) {
31
+ if (element.tagName === tagName)
32
+ return element;
33
+ for (const child of element.children) {
34
+ if (child.type === 'element') {
35
+ const found = findElement(child, tagName);
36
+ if (found)
37
+ return found;
38
+ }
39
+ }
40
+ return null;
41
+ }
42
+ /**
43
+ * Find all elements by tag name
44
+ */
45
+ function findAllElements(element, tagName) {
46
+ const results = [];
47
+ if (element.tagName === tagName) {
48
+ results.push(element);
49
+ }
50
+ for (const child of element.children) {
51
+ if (child.type === 'element') {
52
+ results.push(...findAllElements(child, tagName));
53
+ }
54
+ }
55
+ return results;
56
+ }
57
+ /**
58
+ * Extract card data from table rows
59
+ */
60
+ function extractCards(table) {
61
+ const cards = [];
62
+ const tbody = findElement(table, 'tbody');
63
+ if (!tbody)
64
+ return cards;
65
+ const rows = findAllElements(tbody, 'tr');
66
+ for (const row of rows) {
67
+ const cells = findAllElements(row, 'td');
68
+ if (cells.length >= 2) {
69
+ const titleCell = cells[0];
70
+ const linkCell = cells[1];
71
+ const title = getTextContent(titleCell);
72
+ const link = findElement(linkCell, 'a');
73
+ const href = link?.properties?.href ? String(link.properties.href) : '';
74
+ if (title && href) {
75
+ cards.push({ title, href });
76
+ }
77
+ }
78
+ }
79
+ return cards;
80
+ }
81
+ /**
82
+ * Transform cards table to GitBookCards
83
+ */
84
+ const cardsTransformer = (element) => {
85
+ const cards = extractCards(element);
86
+ if (cards.length === 0) {
87
+ return null;
88
+ }
89
+ // Create card elements
90
+ const cardElements = cards.map((card) => ({
91
+ type: 'element',
92
+ tagName: 'GitBookCard',
93
+ properties: {
94
+ title: card.title,
95
+ href: card.href,
96
+ },
97
+ children: [],
98
+ }));
99
+ // Create MDX JSX element
100
+ const mdxElement = {
101
+ type: 'element',
102
+ tagName: 'GitBookCards',
103
+ properties: {},
104
+ children: cardElements,
105
+ };
106
+ return mdxElement;
107
+ };
108
+ // Register transformer
109
+ registerRehypeTransformer(isCardsTable, cardsTransformer);
110
+ export { cardsTransformer, isCardsTable };
111
+ //# sourceMappingURL=cards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards.js","sourceRoot":"","sources":["../../../src/rehype/transformers/cards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Expression transformer
3
+ *
4
+ * Transforms <code class="expression"> into GitBookExpression component
5
+ */
6
+ import type { Element } from 'hast';
7
+ import { type RehypeTransformer } from './index.js';
8
+ /**
9
+ * Check if element is an expression code element
10
+ */
11
+ declare function isExpressionElement(element: Element): boolean;
12
+ /**
13
+ * Transform expression element to GitBookExpression
14
+ */
15
+ declare const expressionTransformer: RehypeTransformer;
16
+ export { expressionTransformer, isExpressionElement };
17
+ //# sourceMappingURL=expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/expression.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,MAAM,CAAC;AAC1C,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,iBAAS,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQtD;AAeD;;GAEG;AACH,QAAA,MAAM,qBAAqB,EAAE,iBAc5B,CAAC;AAKF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Expression transformer
3
+ *
4
+ * Transforms <code class="expression"> into GitBookExpression component
5
+ */
6
+ import { registerRehypeTransformer } from './index.js';
7
+ /**
8
+ * Check if element is an expression code element
9
+ */
10
+ function isExpressionElement(element) {
11
+ if (element.tagName !== 'code')
12
+ return false;
13
+ const className = element.properties?.className;
14
+ if (!className)
15
+ return false;
16
+ const classes = Array.isArray(className) ? className : [className];
17
+ return classes.some((c) => String(c) === 'expression');
18
+ }
19
+ /**
20
+ * Get text content from element
21
+ */
22
+ function getTextContent(element) {
23
+ let text = '';
24
+ for (const child of element.children) {
25
+ if (child.type === 'text') {
26
+ text += child.value;
27
+ }
28
+ }
29
+ return text;
30
+ }
31
+ /**
32
+ * Transform expression element to GitBookExpression
33
+ */
34
+ const expressionTransformer = (element) => {
35
+ const expression = getTextContent(element);
36
+ // Create MDX JSX element
37
+ const mdxElement = {
38
+ type: 'element',
39
+ tagName: 'GitBookExpression',
40
+ properties: {
41
+ expression,
42
+ },
43
+ children: [],
44
+ };
45
+ return mdxElement;
46
+ };
47
+ // Register transformer
48
+ registerRehypeTransformer(isExpressionElement, expressionTransformer);
49
+ export { expressionTransformer, isExpressionElement };
50
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/rehype/transformers/expression.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,yBAAyB,EAA0B,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;IAChD,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAgB;IACtC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,IAAK,KAAc,CAAC,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,qBAAqB,GAAsB,CAAC,OAAgB,EAAkB,EAAE;IACpF,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE3C,yBAAyB;IACzB,MAAM,UAAU,GAAY;QAC1B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,mBAAmB;QAC5B,UAAU,EAAE;YACV,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,uBAAuB;AACvB,yBAAyB,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;AAEtE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Icon transformer
3
+ *
4
+ * Transforms <i class="fa-xxx"> into FAIcon component
5
+ * which renders Font Awesome icons via CSS classes.
6
+ */
7
+ import type { Element } from 'hast';
8
+ import { type RehypeTransformer } from './index.js';
9
+ /**
10
+ * Check if element is a font awesome icon
11
+ */
12
+ declare function isIconElement(element: Element): boolean;
13
+ /**
14
+ * Transform icon element to FAIcon
15
+ */
16
+ declare const iconTransformer: RehypeTransformer;
17
+ export { iconTransformer, isIconElement };
18
+ //# sourceMappingURL=icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/icon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQhD;AAUD;;GAEG;AACH,QAAA,MAAM,eAAe,EAAE,iBAiBtB,CAAC;AAKF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC"}