@miliastry/quasar 1.0.6 → 1.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 (273) hide show
  1. package/dist/Visuals/lyne.css +117 -6
  2. package/dist/Visuals/osu.css +36 -5
  3. package/dist/index.js +9664 -3282
  4. package/dist/index.mjs +9535 -3283
  5. package/dist/types/Analysis/Contracts/AnalysisReport.d.ts +22 -0
  6. package/dist/types/Analysis/Contracts/Contribution.d.ts +68 -0
  7. package/dist/types/Analysis/Contracts/Pass.d.ts +59 -0
  8. package/dist/types/Analysis/Contracts/PipelineContext.d.ts +34 -0
  9. package/dist/types/Analysis/Passes/Analysis/ColorUsageAnalyzer.d.ts +56 -0
  10. package/dist/types/Analysis/Passes/Analysis/GradientAnalyzer.d.ts +111 -0
  11. package/dist/types/Analysis/Passes/Analysis/MergeableColorAnalyzer.d.ts +26 -0
  12. package/dist/types/Analysis/Passes/Analysis/RainbowAnalyzer.d.ts +47 -0
  13. package/dist/types/Analysis/Passes/Analysis/SymbolAnalyzer.d.ts +89 -0
  14. package/dist/types/Analysis/Passes/Analysis/WaveAnalyzer.d.ts +44 -0
  15. package/dist/types/Analysis/Passes/Analysis/__tests__/GradientAnalyzer.test.d.ts +4 -0
  16. package/dist/types/Analysis/Passes/Analysis/__tests__/MergeableColorAnalyzer.test.d.ts +4 -0
  17. package/dist/types/Analysis/Passes/Analysis/__tests__/RainbowAnalyzer.test.d.ts +4 -0
  18. package/dist/types/Analysis/Passes/Analysis/__tests__/WaveAnalyzer.test.d.ts +4 -0
  19. package/dist/types/Analysis/Passes/Decision/DefaultDecision.d.ts +30 -0
  20. package/dist/types/Analysis/Passes/Decision/PaletteRemapDecision.d.ts +169 -0
  21. package/dist/types/Analysis/Passes/Decision/__tests__/DefaultDecision.test.d.ts +4 -0
  22. package/dist/types/Analysis/Passes/Transform/CollapseGradientTransform.d.ts +37 -0
  23. package/dist/types/Analysis/Passes/Transform/MergeColorsTransform.d.ts +28 -0
  24. package/dist/types/Analysis/Passes/Transform/RainbowCollapseTransform.d.ts +19 -0
  25. package/dist/types/Analysis/Passes/Transform/WaveCollapseTransform.d.ts +20 -0
  26. package/dist/types/Analysis/Passes/Utility/CharacterCountAnalyzer.d.ts +19 -0
  27. package/dist/types/Analysis/Pipeline/Pipeline.d.ts +69 -0
  28. package/dist/types/Analysis/Pipeline/PipelineBuilder.d.ts +31 -0
  29. package/dist/types/Analysis/Pipeline/PipelineStage.d.ts +17 -0
  30. package/dist/types/Analysis/Utils/color-utils.d.ts +60 -0
  31. package/dist/types/Analysis/__tests__/Integration.test.d.ts +8 -0
  32. package/dist/types/Analysis/__tests__/PaletteRemap.test.d.ts +14 -0
  33. package/dist/types/Analysis/__tests__/Pipeline.test.d.ts +10 -0
  34. package/dist/types/Analysis/__tests__/RoundTrip.test.d.ts +30 -0
  35. package/dist/types/Analysis/__tests__/SymbolAnalyzer.test.d.ts +11 -0
  36. package/dist/types/Analysis/index.d.ts +40 -0
  37. package/dist/types/BBCode/BBCodeDocumentModel.d.ts +92 -0
  38. package/dist/types/BBCode/BBCodeToGreenNode.d.ts +111 -0
  39. package/dist/types/BBCode/Parser.d.ts +78 -0
  40. package/dist/types/BBCode/index.d.ts +4 -0
  41. package/dist/types/Collab/positions.d.ts +55 -0
  42. package/dist/types/Commands/Command.d.ts +37 -0
  43. package/dist/types/Commands/CommandRegistry.d.ts +48 -0
  44. package/dist/types/Commands/DeleteNode.d.ts +7 -0
  45. package/dist/types/Commands/InsertText.d.ts +8 -0
  46. package/dist/types/Commands/SplitMerge.d.ts +9 -0
  47. package/dist/types/Commands/WrapInTag.d.ts +8 -0
  48. package/dist/types/Commands/index.d.ts +6 -0
  49. package/dist/types/Diff/TreeDiffer.d.ts +52 -0
  50. package/dist/types/Diff/__tests__/TreeDiffer.test.d.ts +1 -0
  51. package/dist/types/Diff/index.d.ts +2 -0
  52. package/dist/types/Edits/EditPlan.d.ts +144 -0
  53. package/dist/types/Edits/Optimizer.d.ts +78 -0
  54. package/dist/types/Edits/Rules/Rule.d.ts +91 -0
  55. package/dist/types/Edits/Rules/dropEmptyTags.d.ts +40 -0
  56. package/dist/types/Edits/Rules/dropRedundantNesting.d.ts +59 -0
  57. package/dist/types/Edits/Rules/index.d.ts +9 -0
  58. package/dist/types/Edits/Rules/mergeAdjacent.d.ts +93 -0
  59. package/dist/types/Edits/Rules/reorderWrappers.d.ts +42 -0
  60. package/dist/types/Edits/Rules/shortenHex.d.ts +30 -0
  61. package/dist/types/Edits/Rules/tagValue.d.ts +56 -0
  62. package/dist/types/Edits/Rules/unwrapInvisibleColor.d.ts +47 -0
  63. package/dist/types/Edits/applyEdits.d.ts +36 -0
  64. package/dist/types/Edits/index.d.ts +6 -0
  65. package/dist/types/Events/EventBus.d.ts +103 -0
  66. package/dist/types/Events/index.d.ts +2 -0
  67. package/dist/types/Formatter/Formatter.d.ts +32 -0
  68. package/dist/types/Formatter/index.d.ts +2 -0
  69. package/dist/types/HTML/HTMLDocumentModel.d.ts +13 -0
  70. package/dist/types/HTML/HTMLToGreenNode.d.ts +4 -0
  71. package/dist/types/Incremental/BracketIndex.d.ts +101 -0
  72. package/dist/types/Incremental/ChangeTracker.d.ts +69 -0
  73. package/dist/types/Incremental/IncrementalParser.d.ts +246 -0
  74. package/dist/types/Incremental/__tests__/BracketIndex.test.d.ts +1 -0
  75. package/dist/types/Incremental/__tests__/IncrementalParser.test.d.ts +1 -0
  76. package/dist/types/Incremental/index.d.ts +4 -0
  77. package/dist/types/Lexer/BBCodeLexer.d.ts +74 -0
  78. package/dist/types/Lexer/Lexer.d.ts +54 -0
  79. package/dist/types/Lexer/index.d.ts +4 -0
  80. package/dist/types/Linter/Linter.d.ts +58 -0
  81. package/dist/types/Linter/index.d.ts +2 -0
  82. package/dist/types/Markdown/MarkdownAST.d.ts +122 -0
  83. package/dist/types/Markdown/MarkdownDocumentModel.d.ts +15 -0
  84. package/dist/types/Markdown/MarkdownLexer.d.ts +155 -0
  85. package/dist/types/Markdown/MarkdownParser.d.ts +42 -0
  86. package/dist/types/Markdown/MarkdownToGreenNode.d.ts +6 -0
  87. package/dist/types/MilHibri/MilHibriDocumentModel.d.ts +21 -0
  88. package/dist/types/Model/DocumentModel.d.ts +318 -0
  89. package/dist/types/Model/NodeFactory.d.ts +29 -0
  90. package/dist/types/Model/TagRegistry.d.ts +165 -0
  91. package/dist/types/Model/index.d.ts +5 -0
  92. package/dist/types/Plugins/PluginAPI.d.ts +44 -0
  93. package/dist/types/Plugins/PluginRegistry.d.ts +81 -0
  94. package/dist/types/Plugins/index.d.ts +3 -0
  95. package/dist/types/Queries/QueryEngine.d.ts +32 -0
  96. package/dist/types/Queries/index.d.ts +1 -0
  97. package/dist/types/Reconciler/SurgicalReconciler.d.ts +23 -0
  98. package/dist/types/RenderPipeline/RenderPipeline.d.ts +46 -0
  99. package/dist/types/RenderPipeline/RenderTree.d.ts +55 -0
  100. package/dist/types/RenderPipeline/index.d.ts +4 -0
  101. package/dist/types/Repair/NestingRepair.d.ts +48 -0
  102. package/dist/types/Repair/index.d.ts +1 -0
  103. package/dist/types/Semantic/SemanticAnalyzer.d.ts +321 -0
  104. package/dist/types/Semantic/index.d.ts +2 -0
  105. package/dist/types/Symbols/SymbolTable.d.ts +47 -0
  106. package/dist/types/Symbols/index.d.ts +1 -0
  107. package/dist/types/Syntax/GreenNode.d.ts +154 -0
  108. package/dist/types/Syntax/GreenNodePool.d.ts +134 -0
  109. package/dist/types/Syntax/NodeMatcher.d.ts +75 -0
  110. package/dist/types/Syntax/RedNode.d.ts +280 -0
  111. package/dist/types/Syntax/RedNodeStore.d.ts +116 -0
  112. package/dist/types/Syntax/TreeBuilder.d.ts +54 -0
  113. package/dist/types/Syntax/__tests__/GreenNode.test.d.ts +1 -0
  114. package/dist/types/Syntax/__tests__/RedNode.test.d.ts +1 -0
  115. package/dist/types/Syntax/__tests__/RedNodeStore.test.d.ts +1 -0
  116. package/dist/types/Syntax/greenEdit.d.ts +64 -0
  117. package/dist/types/Syntax/hash.d.ts +17 -0
  118. package/dist/types/Syntax/index.d.ts +8 -0
  119. package/dist/types/Syntax/nodeAttr.d.ts +63 -0
  120. package/dist/types/Syntax/partition.d.ts +67 -0
  121. package/dist/types/Syntax/preserveNodeIds.d.ts +47 -0
  122. package/dist/types/Tokens/TokenResolver.d.ts +25 -0
  123. package/dist/types/Tokens/index.d.ts +1 -0
  124. package/dist/types/Transactions/Transaction.d.ts +36 -0
  125. package/dist/types/Transactions/UndoManager.d.ts +63 -0
  126. package/dist/types/Transactions/index.d.ts +3 -0
  127. package/dist/types/Transformers/ASTOptimizer.d.ts +34 -0
  128. package/dist/types/Transformers/GradientTransformer.d.ts +18 -0
  129. package/dist/types/Transformers/GrowTransformer.d.ts +16 -0
  130. package/dist/types/Transformers/RainbowTransformer.d.ts +17 -0
  131. package/dist/types/Transformers/SineWaveTransformer.d.ts +17 -0
  132. package/dist/types/Transformers/Transformer.d.ts +17 -0
  133. package/dist/types/Types/core.d.ts +104 -0
  134. package/dist/types/Types/diagnostics.d.ts +85 -0
  135. package/dist/types/Types/index.d.ts +11 -0
  136. package/dist/types/Types/operations.d.ts +109 -0
  137. package/dist/types/Types/queries.d.ts +67 -0
  138. package/dist/types/Types/symbols.d.ts +42 -0
  139. package/dist/types/Types/tokens.d.ts +75 -0
  140. package/dist/types/Utils/BBCodeGenerator.d.ts +21 -0
  141. package/dist/types/Utils/ColorMath.d.ts +92 -0
  142. package/dist/types/Utils/EffectMath.d.ts +643 -0
  143. package/dist/types/Utils/TagVocabulary.d.ts +104 -0
  144. package/dist/types/Utils/TagVocabulary.test.d.ts +1 -0
  145. package/dist/types/Utils/color.d.ts +29 -0
  146. package/dist/types/Utils/dom-to-svg.d.ts +28 -0
  147. package/dist/types/Utils/dom-to-svg.test.d.ts +1 -0
  148. package/dist/types/Utils/treeTransformers.d.ts +160 -0
  149. package/dist/types/Visitors/BBBlocksExporter.d.ts +27 -0
  150. package/dist/types/Visitors/BBCodeExporter.d.ts +90 -0
  151. package/dist/types/Visitors/BlockPatcher.d.ts +91 -0
  152. package/dist/types/Visitors/DOMMorpher.d.ts +13 -0
  153. package/dist/types/Visitors/HTMLRenderer.d.ts +380 -0
  154. package/dist/types/Visitors/JSONExporter.d.ts +42 -0
  155. package/dist/types/Visitors/MarkdownExporter.d.ts +28 -0
  156. package/dist/types/Visitors/SVGRenderer.d.ts +16 -0
  157. package/dist/types/Visitors/TiptapExporter.d.ts +40 -0
  158. package/dist/types/Visitors/Visitor.d.ts +35 -0
  159. package/dist/types/Visitors/index.d.ts +9 -0
  160. package/dist/types/Visuals/BoxDrawer.d.ts +49 -0
  161. package/dist/types/Visuals/index.d.ts +38 -0
  162. package/dist/types/index.d.ts +154 -0
  163. package/package.json +14 -10
  164. package/src/Analysis/Passes/Analysis/ColorUsageAnalyzer.ts +103 -0
  165. package/src/Analysis/Passes/Analysis/GradientAnalyzer.ts +294 -20
  166. package/src/Analysis/Passes/Analysis/SymbolAnalyzer.ts +257 -0
  167. package/src/Analysis/Passes/Decision/PaletteRemapDecision.ts +425 -0
  168. package/src/Analysis/Pipeline/Pipeline.ts +15 -2
  169. package/src/Analysis/index.ts +8 -2
  170. package/src/BBCode/BBCodeDocumentModel.ts +3 -0
  171. package/src/BBCode/BBCodeToGreenNode.ts +18 -12
  172. package/src/BBCode/Parser.ts +38 -1
  173. package/src/Edits/EditPlan.ts +290 -0
  174. package/src/Edits/Optimizer.ts +185 -0
  175. package/src/Edits/Rules/Rule.ts +145 -0
  176. package/src/Edits/Rules/dropEmptyTags.ts +110 -0
  177. package/src/Edits/Rules/dropRedundantNesting.ts +120 -0
  178. package/src/Edits/Rules/index.ts +28 -0
  179. package/src/Edits/Rules/mergeAdjacent.ts +224 -0
  180. package/src/Edits/Rules/reorderWrappers.ts +154 -0
  181. package/src/Edits/Rules/shortenHex.ts +79 -0
  182. package/src/Edits/Rules/tagValue.ts +105 -0
  183. package/src/Edits/Rules/unwrapInvisibleColor.ts +93 -0
  184. package/src/Edits/applyEdits.ts +54 -0
  185. package/src/Edits/index.ts +22 -0
  186. package/src/Events/EventBus.ts +18 -0
  187. package/src/HTML/HTMLToGreenNode.ts +185 -37
  188. package/src/Incremental/BracketIndex.ts +249 -0
  189. package/src/Incremental/IncrementalParser.ts +464 -41
  190. package/src/Lexer/BBCodeLexer.ts +25 -3
  191. package/src/Lexer/index.ts +1 -1
  192. package/src/Markdown/MarkdownAST.ts +65 -2
  193. package/src/Markdown/MarkdownLexer.ts +69 -14
  194. package/src/Markdown/MarkdownParser.ts +749 -62
  195. package/src/Markdown/MarkdownToGreenNode.ts +148 -27
  196. package/src/MilHibri/MilHibriDocumentModel.ts +56 -0
  197. package/src/Model/DocumentModel.ts +138 -5
  198. package/src/Model/TagRegistry.ts +129 -134
  199. package/src/Reconciler/SurgicalReconciler.ts +460 -0
  200. package/src/Repair/NestingRepair.ts +116 -0
  201. package/src/Repair/index.ts +1 -0
  202. package/src/Semantic/SemanticAnalyzer.ts +1802 -65
  203. package/src/Syntax/GreenNodePool.ts +12 -12
  204. package/src/Syntax/RedNode.ts +17 -3
  205. package/src/Syntax/RedNodeStore.ts +9 -1
  206. package/src/Syntax/nodeAttr.ts +172 -0
  207. package/src/Tokens/TokenResolver.ts +55 -0
  208. package/src/Tokens/index.ts +1 -0
  209. package/src/Types/core.ts +15 -0
  210. package/src/Utils/ColorMath.ts +276 -55
  211. package/src/Utils/EffectMath.ts +2462 -0
  212. package/src/Utils/TagVocabulary.ts +141 -0
  213. package/src/Utils/dom-to-svg.ts +28 -12
  214. package/src/Visitors/BBBlocksExporter.ts +15 -1
  215. package/src/Visitors/BBCodeExporter.ts +319 -32
  216. package/src/Visitors/BlockPatcher.ts +87 -11
  217. package/src/Visitors/DOMMorpher.ts +15 -5
  218. package/src/Visitors/HTMLRenderer.ts +374 -151
  219. package/src/Visitors/MarkdownExporter.ts +98 -41
  220. package/src/Visitors/TiptapExporter.ts +1 -0
  221. package/src/Visuals/index.ts +7 -4
  222. package/src/Visuals/lyne.css +117 -6
  223. package/src/Visuals/osu.css +36 -5
  224. package/src/index.ts +172 -5
  225. package/dist/index.d.mts +0 -4612
  226. package/dist/index.d.ts +0 -4612
  227. package/src/Analysis/Passes/Analysis/__tests__/GradientAnalyzer.test.ts +0 -135
  228. package/src/Analysis/Passes/Analysis/__tests__/MergeableColorAnalyzer.test.ts +0 -84
  229. package/src/Analysis/Passes/Analysis/__tests__/RainbowAnalyzer.test.ts +0 -99
  230. package/src/Analysis/Passes/Analysis/__tests__/WaveAnalyzer.test.ts +0 -119
  231. package/src/Analysis/Passes/Decision/__tests__/DefaultDecision.test.ts +0 -179
  232. package/src/Analysis/__tests__/Integration.test.ts +0 -162
  233. package/src/Analysis/__tests__/Pipeline.test.ts +0 -133
  234. package/src/Diff/__tests__/TreeDiffer.test.ts +0 -65
  235. package/src/Incremental/__tests__/IncrementalParser.test.ts +0 -164
  236. package/src/Syntax/__tests__/GreenNode.test.ts +0 -33
  237. package/src/Syntax/__tests__/RedNode.test.ts +0 -81
  238. package/src/Syntax/__tests__/RedNodeStore.test.ts +0 -104
  239. package/src/Tests/ASTOptimizerIdempotence.test.ts +0 -77
  240. package/src/Tests/BlockPatcher.test.ts +0 -437
  241. package/src/Tests/BlockPatcherWindowed.test.ts +0 -364
  242. package/src/Tests/BoxDrawer.test.ts +0 -217
  243. package/src/Tests/BoxRichTitle.test.ts +0 -105
  244. package/src/Tests/Chars500kBenchmark.test.ts +0 -151
  245. package/src/Tests/Chars500kEdits.test.ts +0 -321
  246. package/src/Tests/CollabPositions.test.ts +0 -146
  247. package/src/Tests/CompilerPathProfiling.test.ts +0 -186
  248. package/src/Tests/DOMMorpher.test.ts +0 -142
  249. package/src/Tests/DomPatchPerf.test.ts +0 -60
  250. package/src/Tests/EffectSegments.snapshot.json +0 -616
  251. package/src/Tests/EffectSegments.test.ts +0 -68
  252. package/src/Tests/FindNodeAtOffset.test.ts +0 -65
  253. package/src/Tests/Fuzzer.test.ts +0 -166
  254. package/src/Tests/GreenNodePool.test.ts +0 -153
  255. package/src/Tests/Lexer.test.ts +0 -238
  256. package/src/Tests/LyneMode.test.ts +0 -291
  257. package/src/Tests/ModelCoherence.test.ts +0 -180
  258. package/src/Tests/Partition.test.ts +0 -238
  259. package/src/Tests/PluginTags.test.ts +0 -150
  260. package/src/Tests/ProblematicSection.test.ts +0 -46
  261. package/src/Tests/ProblematicSectionHTML.test.ts +0 -58
  262. package/src/Tests/RedReuse.test.ts +0 -134
  263. package/src/Tests/ReproDelete20k.test.ts +0 -62
  264. package/src/Tests/SemanticValidators.test.ts +0 -136
  265. package/src/Tests/StableNodeIds.test.ts +0 -210
  266. package/src/Tests/StudioColorBloat.test.ts +0 -25
  267. package/src/Tests/StudioDebugText.test.ts +0 -27
  268. package/src/Tests/StudioTrailingChar.test.ts +0 -25
  269. package/src/Tests/StudioValidText.test.ts +0 -25
  270. package/src/Tests/UrlImgBug.test.ts +0 -23
  271. package/src/Tests/VisualBuilderFidelity.test.ts +0 -105
  272. package/src/Tests/referenceDocument.ts +0 -119
  273. package/src/Utils/dom-to-svg.test.ts +0 -86
@@ -0,0 +1,154 @@
1
+ /**
2
+ * MiliastryPlatform / DocumentEngine — Public API
3
+ *
4
+ * Language Platform agnóstica. El BBCode es solo una representación.
5
+ * Todo pasa por el Document Model.
6
+ *
7
+ * @see MILIASTRY_DOCUMENT_ENGINE_ARCHITECTURE.md
8
+ */
9
+ export { DocumentModel } from './Model/DocumentModel';
10
+ export type { DocumentNode, NodeKind, NodeAttributes, NodeMetadata, DocumentChangeEvent, SourceRange } from './Types/core';
11
+ export { Lexer, type LexerOptions } from './Lexer/Lexer';
12
+ export { BBCODE_RAW_TAGS } from './Lexer/BBCodeLexer';
13
+ export type { Token, TokenKind, Trivia, TriviaKind } from './Types/tokens';
14
+ export { GreenNode, greenNode, greenLeaf } from './Syntax/GreenNode';
15
+ export { RedNode } from './Syntax/RedNode';
16
+ export { RedNodeStore } from './Syntax/RedNodeStore';
17
+ export { TreeBuilder, type BuildResult } from './Syntax/TreeBuilder';
18
+ export { NodeMatcher, type MatchResult } from './Syntax/NodeMatcher';
19
+ export { SemanticAnalyzer, type AnalyzeResult, type SemanticAnalyzerOptions, type CrossedTags, type UnknownTag } from './Semantic/SemanticAnalyzer';
20
+ /**
21
+ * Whether an analysis walked the document or only the edit — see
22
+ * {@link AnalyzeResult.scope}.
23
+ *
24
+ * `'full'` every node was validated afresh; `'window'` only the nodes an edit
25
+ * could have changed were, and every other node kept the verdict it already
26
+ * had. The DIAGNOSTICS ARE THE SAME EITHER WAY: this says how they were
27
+ * arrived at, not what they are.
28
+ *
29
+ * Worth reading if you are timing the engine, deciding whether a slow frame
30
+ * was the analysis, or writing a test that must not silently lose the
31
+ * incremental path. NOT worth branching your rendering on — a consumer that
32
+ * treats `'window'` results as partial and merges them into what it already
33
+ * had will double-report, because `AnalyzeResult.diagnostics` is always the
34
+ * whole document's.
35
+ *
36
+ * `AnalyzeResult.window` carries the span that was re-validated on a
37
+ * `'window'` pass, and is `null` on a full one.
38
+ */
39
+ export type { AnalyzeScope } from './Semantic/SemanticAnalyzer';
40
+ /**
41
+ * `AnalyzeResult` plus the id→node index — see
42
+ * {@link SemanticAnalyzer.analyze}. `allNodes` is a getter that builds the
43
+ * index on first read, so a caller that never asks never pays for the walk.
44
+ */
45
+ export type { IndexedAnalyzeResult } from './Semantic/SemanticAnalyzer';
46
+ export type { Diagnostic, DiagnosticSeverity, DiagnosticTag, DiagnosticFix, FixOperation } from './Types/diagnostics';
47
+ export { TagRegistry, type TagDefinition, type TagHandler } from './Model/TagRegistry';
48
+ export { extractTextContent } from './Model/TagRegistry';
49
+ export { NodeFactory } from './Model/NodeFactory';
50
+ export { IncrementalParser, type EditOperation } from './Incremental/IncrementalParser';
51
+ export { ChangeTracker, type TextChange } from './Incremental/ChangeTracker';
52
+ /**
53
+ * A half-open span of the source, `[start, end)`, in the coordinates of the
54
+ * text whose result carries it.
55
+ *
56
+ * The same shape everywhere it appears — {@link ReparseResult.window},
57
+ * `AnalyzeResult.window`, `DocumentModel.lastReparseWindow` — because it
58
+ * always means the same thing: the part of the CURRENT text that the engine
59
+ * actually looked at.
60
+ */
61
+ export type { SourceSpan } from './Incremental/IncrementalParser';
62
+ /**
63
+ * What a reparse did, including {@link ReparseResult.window} — the span of the
64
+ * new text that went through the parser, or `null` after a full rebuild,
65
+ * where the answer is "all of it".
66
+ *
67
+ * Everything outside that span came across from the previous tree by
68
+ * reference, so a consumer holding per-node state (a rendered block, a
69
+ * measured height, a decoration) can keep it for every node the span does not
70
+ * touch. `DocumentModel.lastReparseWindow` is the same value for the model's
71
+ * last edit, which is usually the easier place to read it.
72
+ */
73
+ export type { ReparseResult } from './Incremental/IncrementalParser';
74
+ /**
75
+ * Why a reparse rebuilt the whole document instead of splicing a window.
76
+ *
77
+ * Useful when a document is unexpectedly slow to edit: a reason that repeats
78
+ * on every keystroke is a document shape the window guards will not accept —
79
+ * an unclosed `[` before the caret (`open-bracket-before`), a stray closing
80
+ * tag inside the window (`region-not-isolated`), an edit that changes what the
81
+ * parser leaves pending for the text after it (`pending-auto-close`).
82
+ */
83
+ export type { FallbackReason } from './Incremental/IncrementalParser';
84
+ export { TreeDiffer, type DiffOperation, type DiffKind } from './Diff/TreeDiffer';
85
+ export { Visitor, type VisitorContext } from './Visitors/Visitor';
86
+ export { BBCodeExporter, MILIASTRY_ONLY_TAGS, LYNE_ONLY_TAGS, type ExportTarget, type BBCodeExporterOptions, type BBCodeExportOptions } from './Visitors/BBCodeExporter';
87
+ export { BBBlocksExporter, type UIBBBlock } from './Visitors/BBBlocksExporter';
88
+ export { HTMLRenderer, type HTMLRendererOptions } from './Visitors/HTMLRenderer';
89
+ export { morphHTML } from './Visitors/DOMMorpher';
90
+ export { patchBlocksInto, clearPatchCache, type PatchBlocksOptions, type PatchBlocksStats } from './Visitors/BlockPatcher';
91
+ export { SVGRenderer } from './Visitors/SVGRenderer';
92
+ export { MarkdownExporter } from './Visitors/MarkdownExporter';
93
+ export { JSONExporter } from './Visitors/JSONExporter';
94
+ export { TiptapExporter } from './Visitors/TiptapExporter';
95
+ export { Transaction } from './Transactions/Transaction';
96
+ export type { Operation } from './Types/operations';
97
+ export { UndoManager, type UndoEntry } from './Transactions/UndoManager';
98
+ export { CommandRegistry } from './Commands/CommandRegistry';
99
+ export type { Command, CommandContext, CommandResult } from './Commands/Command';
100
+ export { InsertText } from './Commands/InsertText';
101
+ export { DeleteNode } from './Commands/DeleteNode';
102
+ export { WrapInTag } from './Commands/WrapInTag';
103
+ export { SplitNode, MergeNode } from './Commands/SplitMerge';
104
+ export { QueryEngine } from './Queries/QueryEngine';
105
+ export type { Query, QueryMatch, QueryResult } from './Types/queries';
106
+ export { Formatter, type FormatOptions } from './Formatter/Formatter';
107
+ export { Linter, type LintRule, type LintResult } from './Linter/Linter';
108
+ export { SymbolTable } from './Symbols/SymbolTable';
109
+ export type { SymbolInfo, SymbolKind, Reference, SymbolSearchResult } from './Types/symbols';
110
+ export { RenderPipeline } from './RenderPipeline/RenderPipeline';
111
+ export { RenderTree, type RenderNode, type RenderVariant } from './RenderPipeline/RenderTree';
112
+ export { PluginAPI } from './Plugins/PluginAPI';
113
+ export { PluginRegistry, type PluginManifest, type PluginContribution } from './Plugins/PluginRegistry';
114
+ export { repairNesting, type NestingRepair, type OrphanCloser, type UnclosedOpener } from './Repair/NestingRepair';
115
+ export { reconcileVisualDOMToBBCode, computeTextDelta, type SurgicalEdit as QuasarSurgicalEdit, type ReconcileResult } from './Reconciler/SurgicalReconciler';
116
+ export * from './Edits';
117
+ export { BBCodeDocumentModel } from './BBCode/BBCodeDocumentModel';
118
+ export type { BBCodeDocumentModelOptions } from './BBCode/BBCodeDocumentModel';
119
+ export { bbBlocksToRedTree, bbBlocksToGreenTree, bbBlockToGreenNode, greenToRedNode, tagToNodeKind, nodeKindToTag, isBlockKind, BBCODE_TAG_NAMES, getBBCodeTagNames, type BBCodeDialect, } from './BBCode/BBCodeToGreenNode';
120
+ export type { BBBlock } from './BBCode/BBCodeToGreenNode';
121
+ export { DocumentEventBus, type DocumentEvent, type DocumentEventHandler } from './Events/EventBus';
122
+ export { transformOffset, transformRange, type TransformBias } from './Collab/positions';
123
+ export { visualThemes } from './Visuals/index';
124
+ export type { VisualThemeId } from './Visuals/index';
125
+ export { bindBoxDrawer, toggleBoxWithDrawer } from './Visuals/BoxDrawer';
126
+ export type { BoxDrawerOptions } from './Visuals/BoxDrawer';
127
+ export { applyGradient, applyGrow, applyRainbow, applyCentralGradient, applyMultiGradient, applyEffect, countTextLength } from './Utils/treeTransformers';
128
+ export type { GradientEffect, GrowEffect, RainbowEffect, CentralGradientEffect, MultiGradientEffect, TreeEffect } from './Utils/treeTransformers';
129
+ export { domToSVG, domToSVGResult } from './Utils/dom-to-svg';
130
+ export type { DomToSVGOptions, DomToSVGResult, SVGLayerInfo } from './Utils/dom-to-svg';
131
+ export type { Transformer } from './Transformers/Transformer';
132
+ export { ASTOptimizer } from './Transformers/ASTOptimizer';
133
+ export { SineWaveTransformer, type SineWaveOptions } from './Transformers/SineWaveTransformer';
134
+ export { RainbowTransformer, type RainbowOptions } from './Transformers/RainbowTransformer';
135
+ export { GradientTransformer, type GradientOptions } from './Transformers/GradientTransformer';
136
+ export { GrowTransformer, type GrowOptions } from './Transformers/GrowTransformer';
137
+ export { MilHibriDocumentModel, type MilHibriDocumentModelOptions } from './MilHibri/MilHibriDocumentModel';
138
+ export { MarkdownDocumentModel } from './Markdown/MarkdownDocumentModel';
139
+ export { markdownAstToGreenTree, markdownAstToRedTree } from './Markdown/MarkdownToGreenNode';
140
+ export { HTMLDocumentModel } from './HTML/HTMLDocumentModel';
141
+ export { htmlStringToGreenTree } from './HTML/HTMLToGreenNode';
142
+ export { ease, solveCubicBezierY, hslToHex, hexToRgb, hexToHsl, hexToOklab, mixHex, mixHexOklab, mixMultiple, mixMultipleStops, perceptualDistance, } from './Utils/ColorMath';
143
+ export type { Easing, ColorStop } from './Utils/ColorMath';
144
+ export { isHexColor } from './Utils/ColorMath';
145
+ export { hashSeed, randAt, valueNoise, fbm, validateExpression, compileExpression, EXPRESSION_VARS, waveform, WAVE_KINDS, DEFAULT_WAVE_OPTIONS, clamp01, blendHex, BLEND_MODES, rgbToHex, adjustHsl, posterizeHex, clampRange, buildSampleTable, buildRangeScope, documentScope, axisValue, expressionVars, AXES, effectiveAxis, mergeStyledSegments, normalizeHex, parseColorStops, stringifyColorStops, parseEffectParams, stringifyEffectParams, EFFECT_PARAM_KEYS, EFFECT_UNITS, evaluateEffect, GRADIENT_DEFAULTS, RAINBOW_DEFAULTS, GROW_DEFAULTS, NEUTRAL_SIZE, PAINT_DEFAULTS, SPATIAL_DEFAULTS, SPATIAL_AXES, DEFAULT_CELL_ASPECT, DEFAULT_SPATIAL, spatialPoint, MASK_SHAPES, DEFAULT_MASK, maskValue, maskDistance, spatialFromParams, maskFromParams, gridFromParams, PAINT_MAX_COLORS, parsePaintGrid, samplePaintGrid, stringifyPaintCells, stringifyPaintPalette, } from './Utils/EffectMath';
146
+ export type { WaveKind, WaveOptions, BlendMode, ExpressionVars, CompiledExpression, CharSample, SampleTable, RangeScope, SampleContext, Axis, EffectParams, EffectUnit, EffectKind, EffectSpan, StyledSegment, SpatialOptions, SpatialPoint, MaskShape, MaskOptions, PaintGrid, } from './Utils/EffectMath';
147
+ export { attributeVocabularyFor, allAttributeVocabularies, EFFECT_TYPES, ANIM_TYPES, CONTAINER_TYPES, SEPARATOR_VARIANTS, TABLE_FLAGS, IMG_MODIFIERS, } from './Utils/TagVocabulary';
148
+ export type { AttributeVocabulary, VocabularySyntax } from './Utils/TagVocabulary';
149
+ export { Pipeline, PipelineBuilder, PipelineStage, ContributionKind, PipelineMode, CharacterCountAnalyzer, MergeableColorAnalyzer, GradientAnalyzer, findCollapsibleGradients, formatGradientTag, RainbowAnalyzer, WaveAnalyzer, SymbolAnalyzer, ColorUsageAnalyzer, DefaultDecision, PaletteRemapDecision, CollapseGradientTransform, RainbowCollapseTransform, WaveCollapseTransform, MergeColorsTransform, } from './Analysis/index';
150
+ export type { CollapsibleGradient, Pass, AnalyzerPass, DecisionPass, TransformPass, TransformationPlan, TransformAction, Contribution, SemanticContribution, DiagnosticContribution, OptimizationContribution, MetricsContribution, AnalysisReport, PipelineContext, PipelineResult, GradientModel, GradientDiagnostics, GradientStop, RainbowModel, RainbowDiagnostics, WaveModel, WaveDiagnostics, SymbolGlyph, SymbolRunModel, ColorUsageModel, Palette, PaletteRemapOptions, RemapAction, } from './Analysis/index';
151
+ export { nodeAttrValue, parseImgAttr, sanitizeColor, sanitizeFontSize, sanitizeFontFamily, } from './Syntax/nodeAttr';
152
+ export type { ImgAttr } from './Syntax/nodeAttr';
153
+ export { toTokenResolver, resolveTokenValue, } from './Tokens/index';
154
+ export type { DocumentTokens, TokenResolverFn, TokenSource, } from './Tokens/index';
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@miliastry/quasar",
3
- "version": "1.0.6",
3
+ "version": "1.1.0",
4
4
  "description": "Quasar Document Engine - Advanced BBCode/Markdown/HTML AST Engine",
5
- "main": "src/index.ts",
6
- "types": "src/index.ts",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/types/index.d.ts",
7
8
  "license": "MSL-1.0",
8
9
  "sideEffects": [
9
10
  "./src/Visuals/*.css",
@@ -12,11 +13,11 @@
12
13
  "exports": {
13
14
  ".": {
14
15
  "import": {
15
- "types": "./dist/index.d.mts",
16
+ "types": "./dist/types/index.d.ts",
16
17
  "default": "./dist/index.mjs"
17
18
  },
18
19
  "require": {
19
- "types": "./dist/index.d.ts",
20
+ "types": "./dist/types/index.d.ts",
20
21
  "default": "./dist/index.js"
21
22
  }
22
23
  },
@@ -27,7 +28,7 @@
27
28
  "./package.json": "./package.json"
28
29
  },
29
30
  "scripts": {
30
- "build": "tsup && node scripts/copy-css.mjs",
31
+ "build": "tsup && tsc -p tsconfig.build.json && node scripts/copy-css.mjs",
31
32
  "prepublishOnly": "npm run verify && npm run build",
32
33
  "test": "vitest run",
33
34
  "typecheck": "tsc --noEmit -p tsconfig.json",
@@ -38,12 +39,15 @@
38
39
  },
39
40
  "files": [
40
41
  "dist",
41
- "src"
42
+ "src",
43
+ "!src/Tests",
44
+ "!src/**/__tests__",
45
+ "!src/**/*.test.ts"
42
46
  ],
43
- "dependencies": {},
44
47
  "devDependencies": {
45
- "@miliastry/quasar-studio": "*",
48
+ "@types/node": "^22",
46
49
  "tsup": "^8.5.1",
47
- "typescript": "5.7.3"
50
+ "typescript": "^7.0.2",
51
+ "vitest": "^4.1.8"
48
52
  }
49
53
  }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Quasar Analysis Framework — Color Usage Analyzer
3
+ *
4
+ * Reports every `[color=#RRGGBB]` in the document, one contribution per tag.
5
+ *
6
+ * ## Why this exists alongside GradientAnalyzer
7
+ *
8
+ * `GradientAnalyzer` recognises that a run of colour tags forms a gradient and
9
+ * describes its *shape* — the stops, the easing, the span. What it does not
10
+ * describe is where each individual tag sits, because a gradient is modelled
11
+ * as one continuous ramp rather than as the tags that spell it out.
12
+ *
13
+ * A consumer that wants to recolour a document needs both: the shape, to know
14
+ * what the gradient is doing, and the tag positions, to know what to edit.
15
+ * This pass supplies the second half. A DecisionPass sees both contributions
16
+ * in the same report and can join them — which is exactly how the framework is
17
+ * meant to compose, since analyzer passes cannot observe each other.
18
+ *
19
+ * ## What gets reported
20
+ *
21
+ * Every colour tag, gradient member or not. Deciding which ones are
22
+ * interesting is a decision, and decisions belong in the decision stage.
23
+ *
24
+ * Only full six-digit hex is recognised, because that is what `extractHex`
25
+ * accepts. `[color=red]` and `[color=#F00]` are parsed as colours by the
26
+ * engine but are invisible here — a deliberate limit, since rewriting them
27
+ * would mean choosing a canonical spelling the author did not use.
28
+ *
29
+ * @see SemanticContribution
30
+ * @see GradientAnalyzer
31
+ */
32
+
33
+ import type { AnalyzerPass } from '../../Contracts/Pass'
34
+ import type { PipelineContext } from '../../Contracts/PipelineContext'
35
+ import type { Contribution } from '../../Contracts/Contribution'
36
+ import { ContributionKind } from '../../Contracts/Contribution'
37
+ import type { GreenNode } from '../../../Syntax/GreenNode'
38
+ import { childOffsets } from '../../../Syntax/GreenNode'
39
+ import { extractHex } from '../../Utils/color-utils'
40
+
41
+ // ── Types ─────────────────────────────────────────────────────────
42
+
43
+ export interface ColorUsageModel {
44
+ /** Normalised to uppercase `#RRGGBB` by `extractHex`. */
45
+ readonly hex: string
46
+ /**
47
+ * Source offsets of the opening delimiter alone — `[color=#D194B3]`.
48
+ *
49
+ * Recolouring replaces this span rather than the attribute inside it. The
50
+ * attribute's own position would have to be derived from the delimiter's
51
+ * width and the hex's length, which breaks the moment the author writes
52
+ * `[color = #D194B3]`; the delimiter's bounds are read straight off the
53
+ * node. The cost is that a rewritten tag comes back in canonical spelling,
54
+ * which is acceptable for a tag being edited anyway.
55
+ */
56
+ readonly openStart: number
57
+ readonly openEnd: number
58
+ }
59
+
60
+ // ── Analyzer ──────────────────────────────────────────────────────
61
+
62
+ export class ColorUsageAnalyzer implements AnalyzerPass {
63
+ readonly id = 'color-usage'
64
+
65
+ run(tree: GreenNode, _context: PipelineContext): Contribution[] {
66
+ const contributions: Contribution[] = []
67
+ this.walk(tree, contributions, 0)
68
+ return contributions
69
+ }
70
+
71
+ // ── Private ─────────────────────────────────────────────────────
72
+
73
+ private walk(node: GreenNode, sink: Contribution[], start: number): void {
74
+ const hex = extractHex(node)
75
+
76
+ if (hex !== null) {
77
+ const model: ColorUsageModel = {
78
+ hex,
79
+ openStart: start,
80
+ openEnd: start + node.leadingWidth,
81
+ }
82
+
83
+ sink.push({
84
+ kind: ContributionKind.Semantic,
85
+ label: 'Color',
86
+ // A parsed colour tag is a fact, not an inference: unlike a gradient
87
+ // or a decorative glyph, there is nothing here to be unsure about.
88
+ confidence: 1,
89
+ range: { start, end: start + node.width },
90
+ metadata: { model },
91
+ description: `Colour ${hex}`,
92
+ })
93
+ }
94
+
95
+ const children = node.children as readonly GreenNode[]
96
+ if (children.length === 0) return
97
+
98
+ const offsets = childOffsets(node, start)
99
+ for (let i = 0; i < children.length; i++) {
100
+ this.walk(children[i], sink, offsets[i])
101
+ }
102
+ }
103
+ }