@miliastry/quasar 1.0.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 (172) hide show
  1. package/LICENSE +119 -0
  2. package/README.md +45 -0
  3. package/dist/Visuals/lyne.css +1027 -0
  4. package/dist/Visuals/osu.css +257 -0
  5. package/dist/index.d.mts +4563 -0
  6. package/dist/index.d.ts +4563 -0
  7. package/dist/index.js +11291 -0
  8. package/dist/index.mjs +11197 -0
  9. package/package.json +51 -0
  10. package/src/Analysis/Contracts/AnalysisReport.ts +26 -0
  11. package/src/Analysis/Contracts/Contribution.ts +76 -0
  12. package/src/Analysis/Contracts/Pass.ts +76 -0
  13. package/src/Analysis/Contracts/PipelineContext.ts +48 -0
  14. package/src/Analysis/Passes/Analysis/GradientAnalyzer.ts +292 -0
  15. package/src/Analysis/Passes/Analysis/MergeableColorAnalyzer.ts +112 -0
  16. package/src/Analysis/Passes/Analysis/RainbowAnalyzer.ts +233 -0
  17. package/src/Analysis/Passes/Analysis/WaveAnalyzer.ts +211 -0
  18. package/src/Analysis/Passes/Analysis/__tests__/GradientAnalyzer.test.ts +135 -0
  19. package/src/Analysis/Passes/Analysis/__tests__/MergeableColorAnalyzer.test.ts +84 -0
  20. package/src/Analysis/Passes/Analysis/__tests__/RainbowAnalyzer.test.ts +99 -0
  21. package/src/Analysis/Passes/Analysis/__tests__/WaveAnalyzer.test.ts +119 -0
  22. package/src/Analysis/Passes/Decision/DefaultDecision.ts +139 -0
  23. package/src/Analysis/Passes/Decision/__tests__/DefaultDecision.test.ts +179 -0
  24. package/src/Analysis/Passes/Transform/CollapseGradientTransform.ts +176 -0
  25. package/src/Analysis/Passes/Transform/MergeColorsTransform.ts +126 -0
  26. package/src/Analysis/Passes/Transform/RainbowCollapseTransform.ts +83 -0
  27. package/src/Analysis/Passes/Transform/WaveCollapseTransform.ts +88 -0
  28. package/src/Analysis/Passes/Utility/CharacterCountAnalyzer.ts +45 -0
  29. package/src/Analysis/Pipeline/Pipeline.ts +133 -0
  30. package/src/Analysis/Pipeline/PipelineBuilder.ts +55 -0
  31. package/src/Analysis/Pipeline/PipelineStage.ts +19 -0
  32. package/src/Analysis/Utils/color-utils.ts +132 -0
  33. package/src/Analysis/__tests__/Integration.test.ts +162 -0
  34. package/src/Analysis/__tests__/Pipeline.test.ts +133 -0
  35. package/src/Analysis/index.ts +52 -0
  36. package/src/BBCode/BBCodeDocumentModel.ts +175 -0
  37. package/src/BBCode/BBCodeToGreenNode.ts +755 -0
  38. package/src/BBCode/Parser.ts +384 -0
  39. package/src/BBCode/index.ts +12 -0
  40. package/src/Collab/positions.ts +91 -0
  41. package/src/Commands/Command.ts +44 -0
  42. package/src/Commands/CommandRegistry.ts +78 -0
  43. package/src/Commands/DeleteNode.ts +20 -0
  44. package/src/Commands/InsertText.ts +21 -0
  45. package/src/Commands/SplitMerge.ts +28 -0
  46. package/src/Commands/WrapInTag.ts +21 -0
  47. package/src/Commands/index.ts +6 -0
  48. package/src/Diff/TreeDiffer.ts +264 -0
  49. package/src/Diff/__tests__/TreeDiffer.test.ts +65 -0
  50. package/src/Diff/index.ts +2 -0
  51. package/src/Events/EventBus.ts +160 -0
  52. package/src/Events/index.ts +2 -0
  53. package/src/Formatter/Formatter.ts +54 -0
  54. package/src/Formatter/index.ts +2 -0
  55. package/src/HTML/HTMLDocumentModel.ts +35 -0
  56. package/src/HTML/HTMLToGreenNode.ts +290 -0
  57. package/src/Incremental/ChangeTracker.ts +105 -0
  58. package/src/Incremental/IncrementalParser.ts +591 -0
  59. package/src/Incremental/__tests__/IncrementalParser.test.ts +164 -0
  60. package/src/Incremental/index.ts +4 -0
  61. package/src/Lexer/BBCodeLexer.ts +382 -0
  62. package/src/Lexer/Lexer.ts +181 -0
  63. package/src/Lexer/index.ts +10 -0
  64. package/src/Linter/Linter.ts +193 -0
  65. package/src/Linter/index.ts +2 -0
  66. package/src/Markdown/MarkdownAST.ts +112 -0
  67. package/src/Markdown/MarkdownDocumentModel.ts +55 -0
  68. package/src/Markdown/MarkdownLexer.ts +203 -0
  69. package/src/Markdown/MarkdownParser.ts +455 -0
  70. package/src/Markdown/MarkdownToGreenNode.ts +153 -0
  71. package/src/Model/DocumentModel.ts +694 -0
  72. package/src/Model/NodeFactory.ts +117 -0
  73. package/src/Model/TagRegistry.ts +495 -0
  74. package/src/Model/index.ts +5 -0
  75. package/src/Plugins/PluginAPI.ts +119 -0
  76. package/src/Plugins/PluginRegistry.ts +132 -0
  77. package/src/Plugins/index.ts +3 -0
  78. package/src/Queries/QueryEngine.ts +152 -0
  79. package/src/Queries/index.ts +1 -0
  80. package/src/RenderPipeline/RenderPipeline.ts +125 -0
  81. package/src/RenderPipeline/RenderTree.ts +134 -0
  82. package/src/RenderPipeline/index.ts +4 -0
  83. package/src/Semantic/SemanticAnalyzer.ts +506 -0
  84. package/src/Semantic/index.ts +2 -0
  85. package/src/Symbols/SymbolTable.ts +124 -0
  86. package/src/Symbols/index.ts +1 -0
  87. package/src/Syntax/GreenNode.ts +324 -0
  88. package/src/Syntax/GreenNodePool.ts +269 -0
  89. package/src/Syntax/NodeMatcher.ts +370 -0
  90. package/src/Syntax/RedNode.ts +569 -0
  91. package/src/Syntax/RedNodeStore.ts +184 -0
  92. package/src/Syntax/TreeBuilder.ts +214 -0
  93. package/src/Syntax/__tests__/GreenNode.test.ts +33 -0
  94. package/src/Syntax/__tests__/RedNode.test.ts +81 -0
  95. package/src/Syntax/__tests__/RedNodeStore.test.ts +104 -0
  96. package/src/Syntax/greenEdit.ts +110 -0
  97. package/src/Syntax/hash.ts +30 -0
  98. package/src/Syntax/index.ts +12 -0
  99. package/src/Syntax/partition.ts +161 -0
  100. package/src/Syntax/preserveNodeIds.ts +201 -0
  101. package/src/Tests/ASTOptimizerIdempotence.test.ts +77 -0
  102. package/src/Tests/BlockPatcher.test.ts +437 -0
  103. package/src/Tests/BlockPatcherWindowed.test.ts +364 -0
  104. package/src/Tests/BoxDrawer.test.ts +217 -0
  105. package/src/Tests/BoxRichTitle.test.ts +105 -0
  106. package/src/Tests/Chars500kBenchmark.test.ts +151 -0
  107. package/src/Tests/Chars500kEdits.test.ts +321 -0
  108. package/src/Tests/CollabPositions.test.ts +146 -0
  109. package/src/Tests/CompilerPathProfiling.test.ts +186 -0
  110. package/src/Tests/DOMMorpher.test.ts +142 -0
  111. package/src/Tests/DomPatchPerf.test.ts +60 -0
  112. package/src/Tests/EffectSegments.snapshot.json +616 -0
  113. package/src/Tests/EffectSegments.test.ts +68 -0
  114. package/src/Tests/FindNodeAtOffset.test.ts +65 -0
  115. package/src/Tests/Fuzzer.test.ts +166 -0
  116. package/src/Tests/GreenNodePool.test.ts +153 -0
  117. package/src/Tests/Lexer.test.ts +238 -0
  118. package/src/Tests/LyneMode.test.ts +187 -0
  119. package/src/Tests/ModelCoherence.test.ts +180 -0
  120. package/src/Tests/Partition.test.ts +238 -0
  121. package/src/Tests/PluginTags.test.ts +150 -0
  122. package/src/Tests/ProblematicSection.test.ts +46 -0
  123. package/src/Tests/ProblematicSectionHTML.test.ts +58 -0
  124. package/src/Tests/RedReuse.test.ts +134 -0
  125. package/src/Tests/ReproDelete20k.test.ts +62 -0
  126. package/src/Tests/SemanticValidators.test.ts +136 -0
  127. package/src/Tests/StableNodeIds.test.ts +210 -0
  128. package/src/Tests/StudioColorBloat.test.ts +25 -0
  129. package/src/Tests/StudioDebugText.test.ts +27 -0
  130. package/src/Tests/StudioTrailingChar.test.ts +25 -0
  131. package/src/Tests/StudioValidText.test.ts +25 -0
  132. package/src/Tests/UrlImgBug.test.ts +23 -0
  133. package/src/Tests/VisualBuilderFidelity.test.ts +105 -0
  134. package/src/Tests/referenceDocument.ts +119 -0
  135. package/src/Transactions/Transaction.ts +176 -0
  136. package/src/Transactions/UndoManager.ts +111 -0
  137. package/src/Transactions/index.ts +3 -0
  138. package/src/Transformers/ASTOptimizer.ts +315 -0
  139. package/src/Transformers/GradientTransformer.ts +143 -0
  140. package/src/Transformers/GrowTransformer.ts +115 -0
  141. package/src/Transformers/RainbowTransformer.ts +121 -0
  142. package/src/Transformers/SineWaveTransformer.ts +130 -0
  143. package/src/Transformers/Transformer.ts +22 -0
  144. package/src/Types/core.ts +270 -0
  145. package/src/Types/diagnostics.ts +156 -0
  146. package/src/Types/index.ts +23 -0
  147. package/src/Types/operations.ts +180 -0
  148. package/src/Types/queries.ts +121 -0
  149. package/src/Types/symbols.ts +69 -0
  150. package/src/Types/tokens.ts +186 -0
  151. package/src/Utils/BBCodeGenerator.ts +126 -0
  152. package/src/Utils/ColorMath.ts +276 -0
  153. package/src/Utils/color.ts +112 -0
  154. package/src/Utils/dom-to-svg.test.ts +86 -0
  155. package/src/Utils/dom-to-svg.ts +615 -0
  156. package/src/Utils/treeTransformers.ts +717 -0
  157. package/src/Visitors/BBBlocksExporter.ts +69 -0
  158. package/src/Visitors/BBCodeExporter.ts +318 -0
  159. package/src/Visitors/BlockPatcher.ts +963 -0
  160. package/src/Visitors/DOMMorpher.ts +134 -0
  161. package/src/Visitors/HTMLRenderer.ts +1077 -0
  162. package/src/Visitors/JSONExporter.ts +66 -0
  163. package/src/Visitors/MarkdownExporter.ts +99 -0
  164. package/src/Visitors/SVGRenderer.ts +35 -0
  165. package/src/Visitors/TiptapExporter.ts +145 -0
  166. package/src/Visitors/Visitor.ts +48 -0
  167. package/src/Visitors/index.ts +9 -0
  168. package/src/Visuals/BoxDrawer.ts +175 -0
  169. package/src/Visuals/index.ts +42 -0
  170. package/src/Visuals/lyne.css +1027 -0
  171. package/src/Visuals/osu.css +257 -0
  172. package/src/index.ts +197 -0
@@ -0,0 +1,153 @@
1
+ import { GreenNode, greenNode, greenLeaf } from '../Syntax/GreenNode';
2
+ import { RedNode } from '../Syntax/RedNode';
3
+ import type { NodeKind } from '../Types/core';
4
+ import type { MarkdownNode, MarkdownText } from './MarkdownAST';
5
+
6
+ export function markdownAstToGreenTree(root: MarkdownNode): GreenNode {
7
+ let currentOffset = 0;
8
+
9
+ function convert(node: MarkdownNode): GreenNode {
10
+ const start = currentOffset;
11
+ const children: GreenNode[] = [];
12
+ let kind: NodeKind = 'document';
13
+ let text = '';
14
+
15
+ switch (node.type) {
16
+ case 'document':
17
+ kind = 'document';
18
+ for (const child of node.children) children.push(convert(child));
19
+ break;
20
+ case 'paragraph':
21
+ kind = 'text'; // DocumentEngine paragraphs are usually groups or blocks, treating as paragraph block if we want.
22
+ // Actually DocumentEngine uses 'text' or 'group'
23
+ kind = 'document'; // Let's use group or document as container
24
+ for (const child of node.children) children.push(convert(child));
25
+ break;
26
+ case 'heading':
27
+ kind = 'heading';
28
+ // Faking the '#' text length for the heading level offset
29
+ currentOffset += node.level;
30
+ text = `=${node.level}`; // Use text as metadata like BBCode
31
+ for (const child of node.children) children.push(convert(child));
32
+ break;
33
+ case 'strong':
34
+ kind = 'bold';
35
+ for (const child of node.children) children.push(convert(child));
36
+ break;
37
+ case 'emphasis':
38
+ kind = 'italic';
39
+ for (const child of node.children) children.push(convert(child));
40
+ break;
41
+ case 'text':
42
+ kind = 'text';
43
+ text = node.value;
44
+ currentOffset += text.length;
45
+ break;
46
+ case 'link':
47
+ kind = 'url';
48
+ text = `=${node.url}`;
49
+ for (const child of node.children) children.push(convert(child));
50
+ break;
51
+ case 'image':
52
+ kind = 'image';
53
+ text = node.url;
54
+ currentOffset += text.length;
55
+ break;
56
+ case 'code_block':
57
+ kind = 'code';
58
+ children.push(greenLeaf('text', node.value));
59
+ currentOffset += node.value.length;
60
+ break;
61
+ case 'list':
62
+ kind = 'list';
63
+ for (const child of node.children) children.push(convert(child));
64
+ break;
65
+ case 'list_item':
66
+ kind = 'list_item';
67
+ for (const child of node.children) children.push(convert(child));
68
+ break;
69
+ case 'spoiler':
70
+ kind = 'spoiler';
71
+ for (const child of node.children) children.push(convert(child));
72
+ break;
73
+ case 'notice':
74
+ kind = 'notice';
75
+ for (const child of node.children) children.push(convert(child));
76
+ break;
77
+ case 'blockquote':
78
+ kind = 'quote';
79
+ for (const child of node.children) children.push(convert(child));
80
+ break;
81
+ case 'spacing':
82
+ kind = 'spacing';
83
+ text = '\n';
84
+ currentOffset += 1;
85
+ break;
86
+ case 'empty_line':
87
+ kind = 'empty_line';
88
+ text = '\n\n';
89
+ currentOffset += 2;
90
+ break;
91
+ // `image` and `code_inline` used to land in `default`, which discarded
92
+ // them as empty text nodes — Markdown images never survived conversion.
93
+ case 'image':
94
+ kind = 'image';
95
+ text = `=${node.url}`;
96
+ if (node.alt) {
97
+ children.push(greenLeaf('text', node.alt));
98
+ currentOffset += node.alt.length;
99
+ }
100
+ break;
101
+ case 'code_inline':
102
+ kind = 'inline_code';
103
+ children.push(greenLeaf('text', node.value));
104
+ currentOffset += node.value.length;
105
+ break;
106
+ default: {
107
+ // Exhaustiveness guard: adding a MarkdownNode variant without a case
108
+ // here is now a compile error rather than a silently dropped node.
109
+ const unhandled: never = node;
110
+ void unhandled;
111
+ kind = 'text';
112
+ break;
113
+ }
114
+ }
115
+
116
+ const end = currentOffset;
117
+ // Map text container to group for proper DocumentEngine representation if not text
118
+ const actualKind = kind === 'document' && node.type === 'paragraph' ? 'group' : kind;
119
+ return greenNode(actualKind as string, text, children);
120
+ }
121
+
122
+ return convert(root);
123
+ }
124
+
125
+ export function greenToRedNode(green: GreenNode, parent?: RedNode | null): RedNode {
126
+ // Simple metadata extraction based on heading text
127
+ let metadata: Record<string, unknown> = {};
128
+ if (green.kind === 'heading' && green.text.startsWith('=')) {
129
+ metadata = { level: parseInt(green.text.slice(1)) || 1 };
130
+ }
131
+
132
+ const red = new RedNode(green, {
133
+ parent: parent ?? null,
134
+ kind: (green.kind as NodeKind) || 'text',
135
+ metadata
136
+ });
137
+
138
+ const greenChildren = green.children as GreenNode[];
139
+ if (greenChildren.length > 0) {
140
+ const kids: RedNode[] = new Array(greenChildren.length);
141
+ for (let i = 0; i < greenChildren.length; i++) {
142
+ kids[i] = greenToRedNode(greenChildren[i], red);
143
+ }
144
+ red.initChildren(kids);
145
+ }
146
+
147
+ return red;
148
+ }
149
+
150
+ export function markdownAstToRedTree(root: MarkdownNode): RedNode {
151
+ const green = markdownAstToGreenTree(root);
152
+ return greenToRedNode(green);
153
+ }