@furystack/shades-common-components 12.1.0 → 12.3.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 (123) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/esm/components/avatar.d.ts.map +1 -1
  3. package/esm/components/avatar.js +3 -1
  4. package/esm/components/avatar.js.map +1 -1
  5. package/esm/components/avatar.spec.js +4 -4
  6. package/esm/components/avatar.spec.js.map +1 -1
  7. package/esm/components/icons/icon-definitions.d.ts +82 -0
  8. package/esm/components/icons/icon-definitions.d.ts.map +1 -1
  9. package/esm/components/icons/icon-definitions.js +717 -0
  10. package/esm/components/icons/icon-definitions.js.map +1 -1
  11. package/esm/components/icons/icon-definitions.spec.js +22 -2
  12. package/esm/components/icons/icon-definitions.spec.js.map +1 -1
  13. package/esm/components/icons/icon-types.d.ts +10 -0
  14. package/esm/components/icons/icon-types.d.ts.map +1 -1
  15. package/esm/components/icons/index.d.ts +1 -1
  16. package/esm/components/icons/index.d.ts.map +1 -1
  17. package/esm/components/index.d.ts +1 -0
  18. package/esm/components/index.d.ts.map +1 -1
  19. package/esm/components/index.js +1 -0
  20. package/esm/components/index.js.map +1 -1
  21. package/esm/components/markdown/index.d.ts +5 -0
  22. package/esm/components/markdown/index.d.ts.map +1 -0
  23. package/esm/components/markdown/index.js +5 -0
  24. package/esm/components/markdown/index.js.map +1 -0
  25. package/esm/components/markdown/markdown-display.d.ts +19 -0
  26. package/esm/components/markdown/markdown-display.d.ts.map +1 -0
  27. package/esm/components/markdown/markdown-display.js +149 -0
  28. package/esm/components/markdown/markdown-display.js.map +1 -0
  29. package/esm/components/markdown/markdown-display.spec.d.ts +2 -0
  30. package/esm/components/markdown/markdown-display.spec.d.ts.map +1 -0
  31. package/esm/components/markdown/markdown-display.spec.js +191 -0
  32. package/esm/components/markdown/markdown-display.spec.js.map +1 -0
  33. package/esm/components/markdown/markdown-editor.d.ts +25 -0
  34. package/esm/components/markdown/markdown-editor.d.ts.map +1 -0
  35. package/esm/components/markdown/markdown-editor.js +113 -0
  36. package/esm/components/markdown/markdown-editor.js.map +1 -0
  37. package/esm/components/markdown/markdown-editor.spec.d.ts +2 -0
  38. package/esm/components/markdown/markdown-editor.spec.d.ts.map +1 -0
  39. package/esm/components/markdown/markdown-editor.spec.js +111 -0
  40. package/esm/components/markdown/markdown-editor.spec.js.map +1 -0
  41. package/esm/components/markdown/markdown-input.d.ts +29 -0
  42. package/esm/components/markdown/markdown-input.d.ts.map +1 -0
  43. package/esm/components/markdown/markdown-input.js +100 -0
  44. package/esm/components/markdown/markdown-input.js.map +1 -0
  45. package/esm/components/markdown/markdown-input.spec.d.ts +2 -0
  46. package/esm/components/markdown/markdown-input.spec.d.ts.map +1 -0
  47. package/esm/components/markdown/markdown-input.spec.js +215 -0
  48. package/esm/components/markdown/markdown-input.spec.js.map +1 -0
  49. package/esm/components/markdown/markdown-parser.d.ts +82 -0
  50. package/esm/components/markdown/markdown-parser.d.ts.map +1 -0
  51. package/esm/components/markdown/markdown-parser.js +274 -0
  52. package/esm/components/markdown/markdown-parser.js.map +1 -0
  53. package/esm/components/markdown/markdown-parser.spec.d.ts +2 -0
  54. package/esm/components/markdown/markdown-parser.spec.d.ts.map +1 -0
  55. package/esm/components/markdown/markdown-parser.spec.js +229 -0
  56. package/esm/components/markdown/markdown-parser.spec.js.map +1 -0
  57. package/esm/components/page-container/index.d.ts +1 -1
  58. package/esm/components/page-container/index.js +1 -1
  59. package/esm/components/page-container/page-header.d.ts +5 -5
  60. package/esm/components/page-container/page-header.d.ts.map +1 -1
  61. package/esm/components/page-container/page-header.js +3 -3
  62. package/esm/components/styles.d.ts +1 -0
  63. package/esm/components/styles.d.ts.map +1 -1
  64. package/esm/components/styles.js.map +1 -1
  65. package/esm/components/suggest/index.d.ts +1 -1
  66. package/esm/components/suggest/index.d.ts.map +1 -1
  67. package/esm/components/typography.d.ts.map +1 -1
  68. package/esm/components/typography.js +26 -14
  69. package/esm/components/typography.js.map +1 -1
  70. package/esm/services/css-variable-theme.d.ts +3 -0
  71. package/esm/services/css-variable-theme.d.ts.map +1 -1
  72. package/esm/services/css-variable-theme.js +3 -0
  73. package/esm/services/css-variable-theme.js.map +1 -1
  74. package/esm/services/css-variable-theme.spec.js +3 -0
  75. package/esm/services/css-variable-theme.spec.js.map +1 -1
  76. package/esm/services/default-dark-palette.d.ts +8 -0
  77. package/esm/services/default-dark-palette.d.ts.map +1 -0
  78. package/esm/services/default-dark-palette.js +56 -0
  79. package/esm/services/default-dark-palette.js.map +1 -0
  80. package/esm/services/default-dark-theme.d.ts +3 -0
  81. package/esm/services/default-dark-theme.d.ts.map +1 -1
  82. package/esm/services/default-dark-theme.js +7 -4
  83. package/esm/services/default-dark-theme.js.map +1 -1
  84. package/esm/services/default-light-theme.d.ts +3 -0
  85. package/esm/services/default-light-theme.d.ts.map +1 -1
  86. package/esm/services/default-light-theme.js +3 -0
  87. package/esm/services/default-light-theme.js.map +1 -1
  88. package/esm/services/index.d.ts +1 -0
  89. package/esm/services/index.d.ts.map +1 -1
  90. package/esm/services/index.js +1 -0
  91. package/esm/services/index.js.map +1 -1
  92. package/esm/services/theme-provider-service.d.ts +10 -1
  93. package/esm/services/theme-provider-service.d.ts.map +1 -1
  94. package/esm/services/theme-provider-service.js.map +1 -1
  95. package/package.json +3 -3
  96. package/src/components/avatar.spec.tsx +4 -4
  97. package/src/components/avatar.tsx +3 -1
  98. package/src/components/icons/icon-definitions.spec.ts +28 -2
  99. package/src/components/icons/icon-definitions.ts +759 -0
  100. package/src/components/icons/icon-types.ts +12 -0
  101. package/src/components/icons/index.ts +1 -1
  102. package/src/components/index.ts +1 -0
  103. package/src/components/markdown/index.ts +4 -0
  104. package/src/components/markdown/markdown-display.spec.tsx +243 -0
  105. package/src/components/markdown/markdown-display.tsx +202 -0
  106. package/src/components/markdown/markdown-editor.spec.tsx +142 -0
  107. package/src/components/markdown/markdown-editor.tsx +167 -0
  108. package/src/components/markdown/markdown-input.spec.tsx +274 -0
  109. package/src/components/markdown/markdown-input.tsx +143 -0
  110. package/src/components/markdown/markdown-parser.spec.ts +258 -0
  111. package/src/components/markdown/markdown-parser.ts +333 -0
  112. package/src/components/page-container/index.tsx +1 -1
  113. package/src/components/page-container/page-header.tsx +5 -5
  114. package/src/components/styles.tsx +1 -0
  115. package/src/components/suggest/index.tsx +1 -1
  116. package/src/components/typography.tsx +28 -15
  117. package/src/services/css-variable-theme.spec.ts +3 -0
  118. package/src/services/css-variable-theme.ts +3 -0
  119. package/src/services/default-dark-palette.ts +57 -0
  120. package/src/services/default-dark-theme.ts +7 -4
  121. package/src/services/default-light-theme.ts +3 -0
  122. package/src/services/index.ts +1 -0
  123. package/src/services/theme-provider-service.ts +7 -1
@@ -0,0 +1,215 @@
1
+ import { Injector } from '@furystack/inject';
2
+ import { createComponent, initializeShadeRoot } from '@furystack/shades';
3
+ import { sleepAsync, usingAsync } from '@furystack/utils';
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { MarkdownInput } from './markdown-input.js';
6
+ describe('MarkdownInput', () => {
7
+ beforeEach(() => {
8
+ document.body.innerHTML = '<div id="root"></div>';
9
+ });
10
+ afterEach(() => {
11
+ document.body.innerHTML = '';
12
+ vi.restoreAllMocks();
13
+ });
14
+ it('should render with shadow DOM', async () => {
15
+ await usingAsync(new Injector(), async (injector) => {
16
+ const rootElement = document.getElementById('root');
17
+ initializeShadeRoot({
18
+ injector,
19
+ rootElement,
20
+ jsxElement: createComponent(MarkdownInput, { value: "" }),
21
+ });
22
+ await sleepAsync(50);
23
+ const el = document.querySelector('shade-markdown-input');
24
+ expect(el).not.toBeNull();
25
+ });
26
+ });
27
+ it('should render a textarea with the given value', async () => {
28
+ await usingAsync(new Injector(), async (injector) => {
29
+ const rootElement = document.getElementById('root');
30
+ initializeShadeRoot({
31
+ injector,
32
+ rootElement,
33
+ jsxElement: createComponent(MarkdownInput, { value: "# Hello" }),
34
+ });
35
+ await sleepAsync(50);
36
+ const textarea = document.querySelector('shade-markdown-input textarea');
37
+ expect(textarea).not.toBeNull();
38
+ expect(textarea.value).toBe('# Hello');
39
+ });
40
+ });
41
+ it('should render the label title', async () => {
42
+ await usingAsync(new Injector(), async (injector) => {
43
+ const rootElement = document.getElementById('root');
44
+ initializeShadeRoot({
45
+ injector,
46
+ rootElement,
47
+ jsxElement: createComponent(MarkdownInput, { value: "", labelTitle: "Markdown Content" }),
48
+ });
49
+ await sleepAsync(50);
50
+ const label = document.querySelector('shade-markdown-input label');
51
+ expect(label?.textContent).toContain('Markdown Content');
52
+ });
53
+ });
54
+ it('should set placeholder on textarea', async () => {
55
+ await usingAsync(new Injector(), async (injector) => {
56
+ const rootElement = document.getElementById('root');
57
+ initializeShadeRoot({
58
+ injector,
59
+ rootElement,
60
+ jsxElement: createComponent(MarkdownInput, { value: "", placeholder: "Type markdown..." }),
61
+ });
62
+ await sleepAsync(50);
63
+ const textarea = document.querySelector('shade-markdown-input textarea');
64
+ expect(textarea.placeholder).toBe('Type markdown...');
65
+ });
66
+ });
67
+ it('should set data-disabled when disabled', async () => {
68
+ await usingAsync(new Injector(), async (injector) => {
69
+ const rootElement = document.getElementById('root');
70
+ initializeShadeRoot({
71
+ injector,
72
+ rootElement,
73
+ jsxElement: createComponent(MarkdownInput, { value: "", disabled: true }),
74
+ });
75
+ await sleepAsync(50);
76
+ const wrapper = document.querySelector('shade-markdown-input');
77
+ expect(wrapper.hasAttribute('data-disabled')).toBe(true);
78
+ const textarea = wrapper.querySelector('textarea');
79
+ expect(textarea.disabled).toBe(true);
80
+ });
81
+ });
82
+ it('should set readOnly on textarea', async () => {
83
+ await usingAsync(new Injector(), async (injector) => {
84
+ const rootElement = document.getElementById('root');
85
+ initializeShadeRoot({
86
+ injector,
87
+ rootElement,
88
+ jsxElement: createComponent(MarkdownInput, { value: "", readOnly: true }),
89
+ });
90
+ await sleepAsync(50);
91
+ const textarea = document.querySelector('shade-markdown-input textarea');
92
+ expect(textarea.readOnly).toBe(true);
93
+ });
94
+ });
95
+ it('should call onValueChange on input event', async () => {
96
+ await usingAsync(new Injector(), async (injector) => {
97
+ const rootElement = document.getElementById('root');
98
+ const onValueChange = vi.fn();
99
+ initializeShadeRoot({
100
+ injector,
101
+ rootElement,
102
+ jsxElement: createComponent(MarkdownInput, { value: "", onValueChange: onValueChange }),
103
+ });
104
+ await sleepAsync(50);
105
+ const textarea = document.querySelector('shade-markdown-input textarea');
106
+ textarea.value = '# New content';
107
+ textarea.dispatchEvent(new Event('input', { bubbles: true }));
108
+ await sleepAsync(50);
109
+ expect(onValueChange).toHaveBeenCalledWith('# New content');
110
+ });
111
+ });
112
+ it('should use custom rows prop', async () => {
113
+ await usingAsync(new Injector(), async (injector) => {
114
+ const rootElement = document.getElementById('root');
115
+ initializeShadeRoot({
116
+ injector,
117
+ rootElement,
118
+ jsxElement: createComponent(MarkdownInput, { value: "", rows: 20 }),
119
+ });
120
+ await sleepAsync(50);
121
+ const textarea = document.querySelector('shade-markdown-input textarea');
122
+ expect(textarea.rows).toBe(20);
123
+ });
124
+ });
125
+ describe('image paste', () => {
126
+ const createPasteEvent = (items) => {
127
+ const pasteEvent = new Event('paste', { bubbles: true, cancelable: true });
128
+ Object.defineProperty(pasteEvent, 'clipboardData', {
129
+ value: {
130
+ items: Object.assign(items.map((item) => ({
131
+ type: item.type,
132
+ getAsFile: () => item.file,
133
+ })), { length: items.length }),
134
+ },
135
+ });
136
+ return pasteEvent;
137
+ };
138
+ it('should inline a pasted image as base64 Markdown', async () => {
139
+ const originalFileReader = globalThis.FileReader;
140
+ try {
141
+ const fakeBase64 = 'data:image/png;base64,dGVzdA==';
142
+ globalThis.FileReader = class {
143
+ result = fakeBase64;
144
+ onload = null;
145
+ onerror = null;
146
+ readAsDataURL() {
147
+ queueMicrotask(() => this.onload?.());
148
+ }
149
+ };
150
+ await usingAsync(new Injector(), async (injector) => {
151
+ const rootElement = document.getElementById('root');
152
+ const onValueChange = vi.fn();
153
+ initializeShadeRoot({
154
+ injector,
155
+ rootElement,
156
+ jsxElement: createComponent(MarkdownInput, { value: "Hello ", onValueChange: onValueChange }),
157
+ });
158
+ await sleepAsync(50);
159
+ const textarea = document.querySelector('shade-markdown-input textarea');
160
+ textarea.selectionStart = 6;
161
+ textarea.selectionEnd = 6;
162
+ const file = new File(['png-data'], 'test.png', { type: 'image/png' });
163
+ const pasteEvent = createPasteEvent([{ type: 'image/png', file }]);
164
+ textarea.dispatchEvent(pasteEvent);
165
+ await sleepAsync(100);
166
+ expect(onValueChange).toHaveBeenCalledOnce();
167
+ const result = onValueChange.mock.calls[0][0];
168
+ expect(result).toContain('![pasted image](data:');
169
+ expect(result.startsWith('Hello ')).toBe(true);
170
+ });
171
+ }
172
+ finally {
173
+ globalThis.FileReader = originalFileReader;
174
+ }
175
+ });
176
+ it('should ignore pasted images exceeding maxImageSizeBytes', async () => {
177
+ await usingAsync(new Injector(), async (injector) => {
178
+ const rootElement = document.getElementById('root');
179
+ const onValueChange = vi.fn();
180
+ initializeShadeRoot({
181
+ injector,
182
+ rootElement,
183
+ jsxElement: createComponent(MarkdownInput, { value: "", onValueChange: onValueChange, maxImageSizeBytes: 5 }),
184
+ });
185
+ await sleepAsync(50);
186
+ const textarea = document.querySelector('shade-markdown-input textarea');
187
+ const file = new File(['this-is-larger-than-5-bytes'], 'big.png', { type: 'image/png' });
188
+ const pasteEvent = createPasteEvent([{ type: 'image/png', file }]);
189
+ textarea.dispatchEvent(pasteEvent);
190
+ await sleepAsync(100);
191
+ expect(onValueChange).not.toHaveBeenCalled();
192
+ });
193
+ });
194
+ it('should not interfere with non-image paste', async () => {
195
+ await usingAsync(new Injector(), async (injector) => {
196
+ const rootElement = document.getElementById('root');
197
+ const onValueChange = vi.fn();
198
+ initializeShadeRoot({
199
+ injector,
200
+ rootElement,
201
+ jsxElement: createComponent(MarkdownInput, { value: "", onValueChange: onValueChange }),
202
+ });
203
+ await sleepAsync(50);
204
+ const textarea = document.querySelector('shade-markdown-input textarea');
205
+ const file = new File(['text content'], 'note.txt', { type: 'text/plain' });
206
+ const pasteEvent = createPasteEvent([{ type: 'text/plain', file }]);
207
+ const wasDefaultPrevented = !textarea.dispatchEvent(pasteEvent);
208
+ await sleepAsync(100);
209
+ expect(wasDefaultPrevented).toBe(false);
210
+ expect(onValueChange).not.toHaveBeenCalled();
211
+ });
212
+ });
213
+ });
214
+ });
215
+ //# sourceMappingURL=markdown-input.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-input.spec.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-input.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Zero-dependency Markdown parser that converts a Markdown string into an AST.
3
+ */
4
+ export type MarkdownNode = HeadingNode | ParagraphNode | CodeBlockNode | BlockquoteNode | ListNode | HorizontalRuleNode;
5
+ export type HeadingNode = {
6
+ type: 'heading';
7
+ level: 1 | 2 | 3 | 4 | 5 | 6;
8
+ children: InlineNode[];
9
+ };
10
+ export type ParagraphNode = {
11
+ type: 'paragraph';
12
+ children: InlineNode[];
13
+ };
14
+ export type CodeBlockNode = {
15
+ type: 'codeBlock';
16
+ language?: string;
17
+ content: string;
18
+ };
19
+ export type BlockquoteNode = {
20
+ type: 'blockquote';
21
+ children: MarkdownNode[];
22
+ };
23
+ export type ListNode = {
24
+ type: 'list';
25
+ ordered: boolean;
26
+ items: ListItemNode[];
27
+ };
28
+ export type HorizontalRuleNode = {
29
+ type: 'horizontalRule';
30
+ };
31
+ export type ListItemNode = {
32
+ children: InlineNode[];
33
+ checkbox?: 'checked' | 'unchecked';
34
+ sourceLineIndex: number;
35
+ };
36
+ export type InlineNode = TextNode | BoldNode | ItalicNode | InlineCodeNode | LinkNode | ImageNode;
37
+ export type TextNode = {
38
+ type: 'text';
39
+ content: string;
40
+ };
41
+ export type BoldNode = {
42
+ type: 'bold';
43
+ children: InlineNode[];
44
+ };
45
+ export type ItalicNode = {
46
+ type: 'italic';
47
+ children: InlineNode[];
48
+ };
49
+ export type InlineCodeNode = {
50
+ type: 'code';
51
+ content: string;
52
+ };
53
+ export type LinkNode = {
54
+ type: 'link';
55
+ href: string;
56
+ children: InlineNode[];
57
+ };
58
+ export type ImageNode = {
59
+ type: 'image';
60
+ src: string;
61
+ alt: string;
62
+ };
63
+ /**
64
+ * Parse inline Markdown formatting into an array of InlineNodes.
65
+ *
66
+ * Known limitations:
67
+ * - Backslash escapes (e.g. `\*`) are not supported; special characters are always interpreted.
68
+ * - Underscore `_` markers are not restricted to word boundaries, so identifiers like
69
+ * `some_variable_name` may produce false italic/bold matches.
70
+ */
71
+ export declare const parseInline: (text: string) => InlineNode[];
72
+ /**
73
+ * Parse a Markdown string into an array of block-level MarkdownNodes.
74
+ */
75
+ export declare const parseMarkdown: (source: string) => MarkdownNode[];
76
+ /**
77
+ * Toggle a checkbox at the given source line index in the raw Markdown string.
78
+ * Only matches checkboxes in unordered list items (`- [ ]` or `* [x]`).
79
+ * Returns the updated string.
80
+ */
81
+ export declare const toggleCheckbox: (source: string, sourceLineIndex: number) => string;
82
+ //# sourceMappingURL=markdown-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/markdown-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,GAAG,QAAQ,GAAG,kBAAkB,CAAA;AAEvH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,QAAQ,EAAE,UAAU,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,UAAU,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,YAAY,CAAA;IAClB,QAAQ,EAAE,YAAY,EAAE,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,gBAAgB,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IAClC,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEjG,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AACxD,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,CAAA;AAC/D,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,CAAA;AACnE,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAC9D,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,CAAA;AAC7E,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAYnE;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,UAAU,EAsGpD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,YAAY,EAqI1D,CAAA;AAKD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,iBAAiB,MAAM,KAAG,MAWxE,CAAA"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Zero-dependency Markdown parser that converts a Markdown string into an AST.
3
+ */
4
+ const HORIZONTAL_RULE_RE = /^(\*{3,}|-{3,}|_{3,})\s*$/;
5
+ const HEADING_RE = /^(#{1,6})\s+(.*)/;
6
+ const FENCED_CODE_OPEN_RE = /^```(\w*)\s*$/;
7
+ const FENCED_CODE_CLOSE_RE = /^```\s*$/;
8
+ const UNORDERED_LIST_RE = /^(\s*)[-*]\s+(.*)/;
9
+ const ORDERED_LIST_RE = /^(\s*)\d+\.\s+(.*)/;
10
+ const BLOCKQUOTE_RE = /^>\s?(.*)/;
11
+ const CHECKBOX_UNCHECKED_RE = /^\[[ ]\]\s+(.*)/;
12
+ const CHECKBOX_CHECKED_RE = /^\[[xX]\]\s+(.*)/;
13
+ /**
14
+ * Parse inline Markdown formatting into an array of InlineNodes.
15
+ *
16
+ * Known limitations:
17
+ * - Backslash escapes (e.g. `\*`) are not supported; special characters are always interpreted.
18
+ * - Underscore `_` markers are not restricted to word boundaries, so identifiers like
19
+ * `some_variable_name` may produce false italic/bold matches.
20
+ */
21
+ export const parseInline = (text) => {
22
+ const nodes = [];
23
+ let pos = 0;
24
+ while (pos < text.length) {
25
+ // Inline code
26
+ if (text[pos] === '`') {
27
+ const closeIdx = text.indexOf('`', pos + 1);
28
+ if (closeIdx !== -1) {
29
+ nodes.push({ type: 'code', content: text.slice(pos + 1, closeIdx) });
30
+ pos = closeIdx + 1;
31
+ continue;
32
+ }
33
+ }
34
+ // Image ![alt](src)
35
+ if (text[pos] === '!' && text[pos + 1] === '[') {
36
+ const altClose = text.indexOf(']', pos + 2);
37
+ if (altClose !== -1 && text[altClose + 1] === '(') {
38
+ const srcClose = text.indexOf(')', altClose + 2);
39
+ if (srcClose !== -1) {
40
+ const alt = text.slice(pos + 2, altClose);
41
+ const src = text.slice(altClose + 2, srcClose);
42
+ nodes.push({ type: 'image', src, alt });
43
+ pos = srcClose + 1;
44
+ continue;
45
+ }
46
+ }
47
+ }
48
+ // Link [text](href)
49
+ if (text[pos] === '[') {
50
+ const textClose = text.indexOf(']', pos + 1);
51
+ if (textClose !== -1 && text[textClose + 1] === '(') {
52
+ const hrefClose = text.indexOf(')', textClose + 2);
53
+ if (hrefClose !== -1) {
54
+ const linkText = text.slice(pos + 1, textClose);
55
+ const href = text.slice(textClose + 2, hrefClose);
56
+ nodes.push({ type: 'link', href, children: parseInline(linkText) });
57
+ pos = hrefClose + 1;
58
+ continue;
59
+ }
60
+ }
61
+ }
62
+ // Bold+Italic (***text***) or Bold (**text**) or Italic (*text*)
63
+ if (text[pos] === '*' || text[pos] === '_') {
64
+ const marker = text[pos];
65
+ // Count consecutive markers
66
+ let markerCount = 0;
67
+ while (pos + markerCount < text.length && text[pos + markerCount] === marker) {
68
+ markerCount++;
69
+ }
70
+ if (markerCount >= 3) {
71
+ const closeIdx = text.indexOf(marker.repeat(3), pos + 3);
72
+ if (closeIdx !== -1) {
73
+ const inner = text.slice(pos + 3, closeIdx);
74
+ nodes.push({ type: 'bold', children: [{ type: 'italic', children: parseInline(inner) }] });
75
+ pos = closeIdx + 3;
76
+ continue;
77
+ }
78
+ }
79
+ if (markerCount >= 2) {
80
+ const closeIdx = text.indexOf(marker.repeat(2), pos + 2);
81
+ if (closeIdx !== -1) {
82
+ const inner = text.slice(pos + 2, closeIdx);
83
+ nodes.push({ type: 'bold', children: parseInline(inner) });
84
+ pos = closeIdx + 2;
85
+ continue;
86
+ }
87
+ }
88
+ if (markerCount >= 1) {
89
+ const closeIdx = text.indexOf(marker, pos + 1);
90
+ if (closeIdx !== -1) {
91
+ const inner = text.slice(pos + 1, closeIdx);
92
+ nodes.push({ type: 'italic', children: parseInline(inner) });
93
+ pos = closeIdx + 1;
94
+ continue;
95
+ }
96
+ }
97
+ }
98
+ // Plain text — consume until the next special character
99
+ let end = pos + 1;
100
+ while (end < text.length && !['`', '!', '[', '*', '_'].includes(text[end])) {
101
+ end++;
102
+ }
103
+ const content = text.slice(pos, end);
104
+ const lastNode = nodes[nodes.length - 1];
105
+ if (lastNode?.type === 'text') {
106
+ lastNode.content += content;
107
+ }
108
+ else {
109
+ nodes.push({ type: 'text', content });
110
+ }
111
+ pos = end;
112
+ }
113
+ return nodes;
114
+ };
115
+ /**
116
+ * Parse a Markdown string into an array of block-level MarkdownNodes.
117
+ */
118
+ export const parseMarkdown = (source) => {
119
+ const lines = source.split('\n');
120
+ const nodes = [];
121
+ let i = 0;
122
+ while (i < lines.length) {
123
+ const line = lines[i];
124
+ // Blank lines — skip
125
+ if (line.trim() === '') {
126
+ i++;
127
+ continue;
128
+ }
129
+ // Fenced code block
130
+ const codeMatch = FENCED_CODE_OPEN_RE.exec(line);
131
+ if (codeMatch) {
132
+ const language = codeMatch[1] || undefined;
133
+ const codeLines = [];
134
+ i++;
135
+ while (i < lines.length && !FENCED_CODE_CLOSE_RE.test(lines[i])) {
136
+ codeLines.push(lines[i]);
137
+ i++;
138
+ }
139
+ nodes.push({ type: 'codeBlock', language, content: codeLines.join('\n') });
140
+ i++; // skip closing ```
141
+ continue;
142
+ }
143
+ // Horizontal rule
144
+ if (HORIZONTAL_RULE_RE.test(line)) {
145
+ nodes.push({ type: 'horizontalRule' });
146
+ i++;
147
+ continue;
148
+ }
149
+ // Heading
150
+ const headingMatch = HEADING_RE.exec(line);
151
+ if (headingMatch) {
152
+ const level = headingMatch[1].length;
153
+ nodes.push({ type: 'heading', level, children: parseInline(headingMatch[2]) });
154
+ i++;
155
+ continue;
156
+ }
157
+ // Blockquote
158
+ const bqMatch = BLOCKQUOTE_RE.exec(line);
159
+ if (bqMatch) {
160
+ const bqLines = [];
161
+ while (i < lines.length) {
162
+ const bqLineMatch = BLOCKQUOTE_RE.exec(lines[i]);
163
+ if (bqLineMatch) {
164
+ bqLines.push(bqLineMatch[1]);
165
+ i++;
166
+ }
167
+ else {
168
+ break;
169
+ }
170
+ }
171
+ nodes.push({ type: 'blockquote', children: parseMarkdown(bqLines.join('\n')) });
172
+ continue;
173
+ }
174
+ // Unordered list
175
+ const ulMatch = UNORDERED_LIST_RE.exec(line);
176
+ if (ulMatch) {
177
+ const items = [];
178
+ while (i < lines.length) {
179
+ const itemMatch = UNORDERED_LIST_RE.exec(lines[i]);
180
+ if (!itemMatch)
181
+ break;
182
+ const itemText = itemMatch[2];
183
+ const checkedMatch = CHECKBOX_CHECKED_RE.exec(itemText);
184
+ const uncheckedMatch = CHECKBOX_UNCHECKED_RE.exec(itemText);
185
+ if (checkedMatch) {
186
+ items.push({
187
+ children: parseInline(checkedMatch[1]),
188
+ checkbox: 'checked',
189
+ sourceLineIndex: i,
190
+ });
191
+ }
192
+ else if (uncheckedMatch) {
193
+ items.push({
194
+ children: parseInline(uncheckedMatch[1]),
195
+ checkbox: 'unchecked',
196
+ sourceLineIndex: i,
197
+ });
198
+ }
199
+ else {
200
+ items.push({
201
+ children: parseInline(itemText),
202
+ sourceLineIndex: i,
203
+ });
204
+ }
205
+ i++;
206
+ }
207
+ nodes.push({ type: 'list', ordered: false, items });
208
+ continue;
209
+ }
210
+ // Ordered list
211
+ const olMatch = ORDERED_LIST_RE.exec(line);
212
+ if (olMatch) {
213
+ const items = [];
214
+ while (i < lines.length) {
215
+ const itemMatch = ORDERED_LIST_RE.exec(lines[i]);
216
+ if (!itemMatch)
217
+ break;
218
+ items.push({
219
+ children: parseInline(itemMatch[2]),
220
+ sourceLineIndex: i,
221
+ });
222
+ i++;
223
+ }
224
+ nodes.push({ type: 'list', ordered: true, items });
225
+ continue;
226
+ }
227
+ // Paragraph — collect consecutive non-blank, non-block-start lines
228
+ const paraLines = [];
229
+ while (i < lines.length) {
230
+ const pLine = lines[i];
231
+ if (pLine.trim() === '')
232
+ break;
233
+ if (HEADING_RE.test(pLine))
234
+ break;
235
+ if (FENCED_CODE_OPEN_RE.test(pLine))
236
+ break;
237
+ if (HORIZONTAL_RULE_RE.test(pLine))
238
+ break;
239
+ if (BLOCKQUOTE_RE.test(pLine))
240
+ break;
241
+ if (UNORDERED_LIST_RE.test(pLine))
242
+ break;
243
+ if (ORDERED_LIST_RE.test(pLine))
244
+ break;
245
+ paraLines.push(pLine);
246
+ i++;
247
+ }
248
+ if (paraLines.length > 0) {
249
+ nodes.push({ type: 'paragraph', children: parseInline(paraLines.join(' ')) });
250
+ }
251
+ }
252
+ return nodes;
253
+ };
254
+ const TOGGLE_UNCHECKED_RE = /^(\s*[-*]\s+)\[ \]/;
255
+ const TOGGLE_CHECKED_RE = /^(\s*[-*]\s+)\[[xX]\]/;
256
+ /**
257
+ * Toggle a checkbox at the given source line index in the raw Markdown string.
258
+ * Only matches checkboxes in unordered list items (`- [ ]` or `* [x]`).
259
+ * Returns the updated string.
260
+ */
261
+ export const toggleCheckbox = (source, sourceLineIndex) => {
262
+ const lines = source.split('\n');
263
+ if (sourceLineIndex < 0 || sourceLineIndex >= lines.length)
264
+ return source;
265
+ const line = lines[sourceLineIndex];
266
+ if (TOGGLE_UNCHECKED_RE.test(line)) {
267
+ lines[sourceLineIndex] = line.replace(TOGGLE_UNCHECKED_RE, '$1[x]');
268
+ }
269
+ else if (TOGGLE_CHECKED_RE.test(line)) {
270
+ lines[sourceLineIndex] = line.replace(TOGGLE_CHECKED_RE, '$1[ ]');
271
+ }
272
+ return lines.join('\n');
273
+ };
274
+ //# sourceMappingURL=markdown-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=markdown-parser.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.spec.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/markdown-parser.spec.ts"],"names":[],"mappings":""}