@astryxdesign/core 0.6.2-canary.bfee8a4 → 0.6.2-canary.d4cc232
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.
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +12 -2
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +6 -1
- package/dist/Kbd/Kbd.d.ts +5 -3
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +36 -42
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +6 -2
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +63 -59
- package/dist/Markdown/ast.d.ts +124 -0
- package/dist/Markdown/ast.d.ts.map +1 -0
- package/dist/Markdown/ast.js +38 -0
- package/dist/Markdown/parser.d.ts +14 -8
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +352 -97
- package/dist/Outline/parseOutlineFromMarkdown.d.ts.map +1 -1
- package/dist/Outline/parseOutlineFromMarkdown.js +7 -7
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +46 -30
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +13 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +5 -5
- package/dist/SideNav/SideNav.d.ts +2 -1
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +9 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +14 -8
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +11 -0
- package/dist/TabList/Tab.d.ts +1 -1
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +20 -7
- package/dist/ToggleButton/ToggleButton.d.ts +2 -1
- package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButton.js +7 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +15 -6
- package/dist/astryx.css +8 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +8 -0
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +9 -0
- package/package.json +3 -3
- package/src/Button/__tests__/Button.a11y.chromium.spec.ts +17 -1
- package/src/Button/__tests__/Button.a11y.known-failures.ts +0 -29
- package/src/Button/__tests__/Button.a11y.renders.tsx +9 -2
- package/src/Button/__tests__/Button.a11y.states.ts +9 -0
- package/src/CheckboxInput/CheckboxInput.doc.mjs +11 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +34 -0
- package/src/CheckboxInput/CheckboxInput.tsx +21 -1
- package/src/ClickableCard/ClickableCard.test.tsx +102 -5
- package/src/Collapsible/Collapsible.doc.mjs +11 -0
- package/src/Collapsible/Collapsible.test.tsx +21 -0
- package/src/Collapsible/Collapsible.tsx +5 -0
- package/src/Kbd/Kbd.doc.mjs +3 -3
- package/src/Kbd/Kbd.test.tsx +57 -1
- package/src/Kbd/Kbd.tsx +57 -37
- package/src/Link/Link.doc.mjs +11 -0
- package/src/Link/Link.test.tsx +24 -0
- package/src/Link/Link.tsx +5 -0
- package/src/Markdown/Markdown.spec.md +159 -43
- package/src/Markdown/Markdown.test.tsx +11 -0
- package/src/Markdown/Markdown.tsx +106 -96
- package/src/Markdown/ast.test.ts +169 -0
- package/src/Markdown/ast.ts +231 -0
- package/src/Markdown/incremental.test.ts +12 -0
- package/src/Markdown/parser.ts +427 -118
- package/src/Outline/Outline.spec.md +1 -1
- package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +142 -0
- package/src/Outline/parseOutlineFromMarkdown.ts +8 -13
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +150 -1
- package/src/PowerSearch/PowerSearchEditPopover.tsx +51 -28
- package/src/RadioList/RadioList.doc.mjs +11 -0
- package/src/RadioList/RadioList.test.tsx +32 -0
- package/src/RadioList/RadioListItem.tsx +25 -1
- package/src/SegmentedControl/SegmentedControl.doc.mjs +2 -2
- package/src/SegmentedControl/SegmentedControl.test.tsx +31 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +6 -9
- package/src/SideNav/SideNav.doc.mjs +1 -1
- package/src/SideNav/SideNav.test.tsx +10 -0
- package/src/SideNav/SideNav.tsx +14 -2
- package/src/Slider/Slider.doc.mjs +11 -0
- package/src/Slider/Slider.test.tsx +128 -0
- package/src/Slider/Slider.tsx +25 -7
- package/src/Switch/Switch.doc.mjs +11 -0
- package/src/Switch/Switch.test.tsx +16 -0
- package/src/Switch/Switch.tsx +28 -0
- package/src/TabList/Tab.tsx +35 -7
- package/src/TabList/TabList.doc.mjs +11 -0
- package/src/TabList/TabList.test.tsx +66 -0
- package/src/TabList/__tests__/Tabs.a11y.known-failures.ts +1 -34
- package/src/ToggleButton/ToggleButton.test.tsx +133 -0
- package/src/ToggleButton/ToggleButton.tsx +9 -2
- package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +209 -0
- package/src/Tokenizer/Tokenizer.spec.md +142 -75
- package/src/Typeahead/BaseTypeahead.spec.md +4 -3
- package/src/Typeahead/BaseTypeahead.tsx +15 -6
- package/src/Typeahead/Typeahead.test.tsx +53 -0
- package/src/__tests__/PressedState.a11y.chromium.spec.ts +813 -0
- package/src/__tests__/pressState.ts +93 -0
- package/src/utils/interactionOverlay.stylex.ts +20 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file ast.ts
|
|
5
|
+
* @input Parsed Markdown structure and optional Astryx extension nodes
|
|
6
|
+
* @output Canonical immutable MDAST-aligned Markdown node types and text projection
|
|
7
|
+
* @position Internal canonical Markdown tree shared by parsing, rendering, and Outline
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export interface MarkdownAstPoint {
|
|
11
|
+
readonly line?: number;
|
|
12
|
+
readonly column?: number;
|
|
13
|
+
readonly offset?: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface MarkdownAstPosition {
|
|
17
|
+
readonly start: MarkdownAstPoint;
|
|
18
|
+
readonly end: MarkdownAstPoint;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface MarkdownAstNodeBase {
|
|
22
|
+
readonly position?: MarkdownAstPosition;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface MarkdownAstExtensionNode<
|
|
26
|
+
Plugin extends string = string,
|
|
27
|
+
Name extends string = string,
|
|
28
|
+
Data = Readonly<Record<string, unknown>>,
|
|
29
|
+
Display extends 'inline' | 'block' = 'inline' | 'block',
|
|
30
|
+
> extends MarkdownAstNodeBase {
|
|
31
|
+
readonly type: 'extension';
|
|
32
|
+
readonly plugin: Plugin;
|
|
33
|
+
readonly name: Name;
|
|
34
|
+
readonly data: Data;
|
|
35
|
+
readonly display: Display;
|
|
36
|
+
readonly source?: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface MarkdownAstText extends MarkdownAstNodeBase {
|
|
40
|
+
readonly type: 'text';
|
|
41
|
+
readonly value: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface MarkdownAstParent<
|
|
45
|
+
Type extends 'strong' | 'emphasis' | 'delete',
|
|
46
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
47
|
+
> extends MarkdownAstNodeBase {
|
|
48
|
+
readonly type: Type;
|
|
49
|
+
readonly children: ReadonlyArray<MarkdownAstPhrasingContent<Extension>>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface MarkdownAstInlineCode extends MarkdownAstNodeBase {
|
|
53
|
+
readonly type: 'inlineCode';
|
|
54
|
+
readonly value: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface MarkdownAstInlineMath extends MarkdownAstNodeBase {
|
|
58
|
+
readonly type: 'inlineMath';
|
|
59
|
+
readonly value: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface MarkdownAstLink<
|
|
63
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
64
|
+
> extends MarkdownAstNodeBase {
|
|
65
|
+
readonly type: 'link';
|
|
66
|
+
readonly url: string;
|
|
67
|
+
readonly children: ReadonlyArray<MarkdownAstPhrasingContent<Extension>>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface MarkdownAstImage extends MarkdownAstNodeBase {
|
|
71
|
+
readonly type: 'image';
|
|
72
|
+
readonly url: string;
|
|
73
|
+
readonly alt: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface MarkdownAstCitation extends MarkdownAstNodeBase {
|
|
77
|
+
readonly type: 'citation';
|
|
78
|
+
readonly sourceId: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface MarkdownAstBreak extends MarkdownAstNodeBase {
|
|
82
|
+
readonly type: 'break';
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export type MarkdownAstPhrasingContent<
|
|
86
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
87
|
+
> =
|
|
88
|
+
| MarkdownAstText
|
|
89
|
+
| MarkdownAstParent<'strong', Extension>
|
|
90
|
+
| MarkdownAstParent<'emphasis', Extension>
|
|
91
|
+
| MarkdownAstParent<'delete', Extension>
|
|
92
|
+
| MarkdownAstInlineCode
|
|
93
|
+
| MarkdownAstInlineMath
|
|
94
|
+
| MarkdownAstLink<Extension>
|
|
95
|
+
| MarkdownAstImage
|
|
96
|
+
| MarkdownAstCitation
|
|
97
|
+
| MarkdownAstBreak
|
|
98
|
+
| (Extension & {readonly display: 'inline'});
|
|
99
|
+
|
|
100
|
+
export interface MarkdownAstHeading<
|
|
101
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
102
|
+
> extends MarkdownAstNodeBase {
|
|
103
|
+
readonly type: 'heading';
|
|
104
|
+
readonly depth: 1 | 2 | 3 | 4 | 5 | 6;
|
|
105
|
+
readonly children: ReadonlyArray<MarkdownAstPhrasingContent<Extension>>;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface MarkdownAstParagraph<
|
|
109
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
110
|
+
> extends MarkdownAstNodeBase {
|
|
111
|
+
readonly type: 'paragraph';
|
|
112
|
+
readonly children: ReadonlyArray<MarkdownAstPhrasingContent<Extension>>;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export interface MarkdownAstCode extends MarkdownAstNodeBase {
|
|
116
|
+
readonly type: 'code';
|
|
117
|
+
readonly lang: string | null;
|
|
118
|
+
readonly value: string;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export interface MarkdownAstMath extends MarkdownAstNodeBase {
|
|
122
|
+
readonly type: 'math';
|
|
123
|
+
readonly value: string;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export interface MarkdownAstBlockquote<
|
|
127
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
128
|
+
> extends MarkdownAstNodeBase {
|
|
129
|
+
readonly type: 'blockquote';
|
|
130
|
+
readonly children: ReadonlyArray<MarkdownAstBlockContent<Extension>>;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export interface MarkdownAstListItem<
|
|
134
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
135
|
+
> extends MarkdownAstNodeBase {
|
|
136
|
+
readonly type: 'listItem';
|
|
137
|
+
readonly checked?: boolean;
|
|
138
|
+
readonly children: ReadonlyArray<MarkdownAstBlockContent<Extension>>;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export interface MarkdownAstList<
|
|
142
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
143
|
+
> extends MarkdownAstNodeBase {
|
|
144
|
+
readonly type: 'list';
|
|
145
|
+
readonly ordered: boolean;
|
|
146
|
+
readonly start?: number;
|
|
147
|
+
readonly spread?: boolean;
|
|
148
|
+
/** Astryx-preserved ordered-list marker delimiter. */
|
|
149
|
+
readonly delimiter?: '.' | ')';
|
|
150
|
+
readonly children: ReadonlyArray<MarkdownAstListItem<Extension>>;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export type MarkdownAstTableAlignment = 'left' | 'center' | 'right' | null;
|
|
154
|
+
|
|
155
|
+
export interface MarkdownAstTableCell<
|
|
156
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
157
|
+
> extends MarkdownAstNodeBase {
|
|
158
|
+
readonly type: 'tableCell';
|
|
159
|
+
readonly children: ReadonlyArray<MarkdownAstPhrasingContent<Extension>>;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export interface MarkdownAstTableRow<
|
|
163
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
164
|
+
> extends MarkdownAstNodeBase {
|
|
165
|
+
readonly type: 'tableRow';
|
|
166
|
+
readonly children: ReadonlyArray<MarkdownAstTableCell<Extension>>;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export interface MarkdownAstTable<
|
|
170
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
171
|
+
> extends MarkdownAstNodeBase {
|
|
172
|
+
readonly type: 'table';
|
|
173
|
+
readonly align: ReadonlyArray<MarkdownAstTableAlignment>;
|
|
174
|
+
readonly children: ReadonlyArray<MarkdownAstTableRow<Extension>>;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export interface MarkdownAstThematicBreak extends MarkdownAstNodeBase {
|
|
178
|
+
readonly type: 'thematicBreak';
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export type MarkdownAstBlockContent<
|
|
182
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
183
|
+
> =
|
|
184
|
+
| MarkdownAstHeading<Extension>
|
|
185
|
+
| MarkdownAstParagraph<Extension>
|
|
186
|
+
| MarkdownAstCode
|
|
187
|
+
| MarkdownAstMath
|
|
188
|
+
| MarkdownAstBlockquote<Extension>
|
|
189
|
+
| MarkdownAstList<Extension>
|
|
190
|
+
| MarkdownAstTable<Extension>
|
|
191
|
+
| MarkdownAstThematicBreak
|
|
192
|
+
| MarkdownAstImage
|
|
193
|
+
| (Extension & {readonly display: 'block'});
|
|
194
|
+
|
|
195
|
+
export interface MarkdownAstRoot<
|
|
196
|
+
Extension extends MarkdownAstExtensionNode = never,
|
|
197
|
+
> extends MarkdownAstNodeBase {
|
|
198
|
+
readonly type: 'root';
|
|
199
|
+
readonly children: ReadonlyArray<MarkdownAstBlockContent<Extension>>;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export function markdownAstText(
|
|
203
|
+
nodes: ReadonlyArray<MarkdownAstPhrasingContent>,
|
|
204
|
+
): string {
|
|
205
|
+
let text = '';
|
|
206
|
+
for (const node of nodes) {
|
|
207
|
+
switch (node.type) {
|
|
208
|
+
case 'text':
|
|
209
|
+
case 'inlineCode':
|
|
210
|
+
case 'inlineMath':
|
|
211
|
+
text += node.value;
|
|
212
|
+
break;
|
|
213
|
+
case 'strong':
|
|
214
|
+
case 'emphasis':
|
|
215
|
+
case 'delete':
|
|
216
|
+
case 'link':
|
|
217
|
+
text += markdownAstText(node.children);
|
|
218
|
+
break;
|
|
219
|
+
case 'image':
|
|
220
|
+
text += node.alt;
|
|
221
|
+
break;
|
|
222
|
+
case 'citation':
|
|
223
|
+
case 'break':
|
|
224
|
+
break;
|
|
225
|
+
default: {
|
|
226
|
+
node satisfies never;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return text;
|
|
231
|
+
}
|
|
@@ -47,6 +47,18 @@ describe('parseMarkdownIncremental', () => {
|
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
+
it('keeps projected settled-list identity when a following block settles too', () => {
|
|
51
|
+
const state = createIncrementalState();
|
|
52
|
+
parseMarkdownIncremental('1. a\n\nTail', state);
|
|
53
|
+
const result = parseMarkdownIncremental(
|
|
54
|
+
'1. a\n\n1. b\n\nAfter\n\nTail',
|
|
55
|
+
state,
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
expect(state.settledBlocks).toEqual(parseMarkdown(state.settledText));
|
|
59
|
+
expect(result[0]).toBe(state.settledBlocks[0]);
|
|
60
|
+
});
|
|
61
|
+
|
|
50
62
|
it('joins loose ) ordered list across streamed chunks', () => {
|
|
51
63
|
const text = '1) apple\n\n1) banana\n\n1) cherry\n';
|
|
52
64
|
const {final} = simulateStreaming(text, 5);
|