@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
@@ -1,616 +0,0 @@
1
- [
2
- {
3
- "kind": "gradient",
4
- "text": "Hola Mundo",
5
- "bb": "[color=#FF0000]H[/color][color=#C63900]o[/color][color=#8E7100]l[/color][color=#55AA00]a[/color][color=#1CE300] [/color][color=#00E31C]M[/color][color=#00AA55]u[/color][color=#00718E]n[/color][color=#0039C6]d[/color][color=#0000FF]o[/color]",
6
- "rn": {
7
- "kind": "gradient",
8
- "text": "",
9
- "children": [
10
- {
11
- "kind": "text",
12
- "text": "H",
13
- "children": [],
14
- "props": {},
15
- "style": {
16
- "color": "#FF0000"
17
- }
18
- },
19
- {
20
- "kind": "text",
21
- "text": "o",
22
- "children": [],
23
- "props": {},
24
- "style": {
25
- "color": "#C63900"
26
- }
27
- },
28
- {
29
- "kind": "text",
30
- "text": "l",
31
- "children": [],
32
- "props": {},
33
- "style": {
34
- "color": "#8E7100"
35
- }
36
- },
37
- {
38
- "kind": "text",
39
- "text": "a",
40
- "children": [],
41
- "props": {},
42
- "style": {
43
- "color": "#55AA00"
44
- }
45
- },
46
- {
47
- "kind": "text",
48
- "text": " ",
49
- "children": [],
50
- "props": {},
51
- "style": {
52
- "color": "#1CE300"
53
- }
54
- },
55
- {
56
- "kind": "text",
57
- "text": "M",
58
- "children": [],
59
- "props": {},
60
- "style": {
61
- "color": "#00E31C"
62
- }
63
- },
64
- {
65
- "kind": "text",
66
- "text": "u",
67
- "children": [],
68
- "props": {},
69
- "style": {
70
- "color": "#00AA55"
71
- }
72
- },
73
- {
74
- "kind": "text",
75
- "text": "n",
76
- "children": [],
77
- "props": {},
78
- "style": {
79
- "color": "#00718E"
80
- }
81
- },
82
- {
83
- "kind": "text",
84
- "text": "d",
85
- "children": [],
86
- "props": {},
87
- "style": {
88
- "color": "#0039C6"
89
- }
90
- },
91
- {
92
- "kind": "text",
93
- "text": "o",
94
- "children": [],
95
- "props": {},
96
- "style": {
97
- "color": "#0000FF"
98
- }
99
- }
100
- ],
101
- "props": {}
102
- }
103
- },
104
- {
105
- "kind": "gradient",
106
- "text": "uno dos tres",
107
- "bb": "[color=#112233]uno[/color][color=#1E2F40] [/color][color=#2B3C4D]dos[/color][color=#374859] [/color][color=#445566]tres[/color]",
108
- "rn": {
109
- "kind": "gradient",
110
- "text": "",
111
- "children": [
112
- {
113
- "kind": "text",
114
- "text": "uno",
115
- "children": [],
116
- "props": {},
117
- "style": {
118
- "color": "#112233"
119
- }
120
- },
121
- {
122
- "kind": "text",
123
- "text": " ",
124
- "children": [],
125
- "props": {},
126
- "style": {
127
- "color": "#1E2F40"
128
- }
129
- },
130
- {
131
- "kind": "text",
132
- "text": "dos",
133
- "children": [],
134
- "props": {},
135
- "style": {
136
- "color": "#2B3C4D"
137
- }
138
- },
139
- {
140
- "kind": "text",
141
- "text": " ",
142
- "children": [],
143
- "props": {},
144
- "style": {
145
- "color": "#374859"
146
- }
147
- },
148
- {
149
- "kind": "text",
150
- "text": "tres",
151
- "children": [],
152
- "props": {},
153
- "style": {
154
- "color": "#445566"
155
- }
156
- }
157
- ],
158
- "props": {}
159
- }
160
- },
161
- {
162
- "kind": "gradient",
163
- "text": "abcdef",
164
- "bb": "[color=#FF66AB]a[/color][color=#FF66AB]b[/color][color=#FF66AB]c[/color][color=#FF66AB]d[/color][color=#FF66AB]e[/color][color=#FF66AB]f[/color]",
165
- "rn": {
166
- "kind": "gradient",
167
- "text": "",
168
- "children": [
169
- {
170
- "kind": "text",
171
- "text": "a",
172
- "children": [],
173
- "props": {},
174
- "style": {
175
- "color": "#FF66AB"
176
- }
177
- },
178
- {
179
- "kind": "text",
180
- "text": "b",
181
- "children": [],
182
- "props": {},
183
- "style": {
184
- "color": "#FF66AB"
185
- }
186
- },
187
- {
188
- "kind": "text",
189
- "text": "c",
190
- "children": [],
191
- "props": {},
192
- "style": {
193
- "color": "#FF66AB"
194
- }
195
- },
196
- {
197
- "kind": "text",
198
- "text": "d",
199
- "children": [],
200
- "props": {},
201
- "style": {
202
- "color": "#FF66AB"
203
- }
204
- },
205
- {
206
- "kind": "text",
207
- "text": "e",
208
- "children": [],
209
- "props": {},
210
- "style": {
211
- "color": "#FF66AB"
212
- }
213
- },
214
- {
215
- "kind": "text",
216
- "text": "f",
217
- "children": [],
218
- "props": {},
219
- "style": {
220
- "color": "#FF66AB"
221
- }
222
- }
223
- ],
224
- "props": {}
225
- }
226
- },
227
- {
228
- "kind": "sinewave",
229
- "text": "ola marina",
230
- "bb": "[size=60]o[/size][size=74]l[/size][size=85]a[/size][size=90] [/size][size=87]m[/size][size=78]a[/size][size=64]r[/size][size=49]i[/size][size=37]n[/size][size=31]a[/size]",
231
- "rn": {
232
- "kind": "sinewave",
233
- "text": "",
234
- "children": [
235
- {
236
- "kind": "text",
237
- "text": "o",
238
- "children": [],
239
- "props": {},
240
- "style": {
241
- "fontSize": "60%"
242
- }
243
- },
244
- {
245
- "kind": "text",
246
- "text": "l",
247
- "children": [],
248
- "props": {},
249
- "style": {
250
- "fontSize": "74%"
251
- }
252
- },
253
- {
254
- "kind": "text",
255
- "text": "a",
256
- "children": [],
257
- "props": {},
258
- "style": {
259
- "fontSize": "85%"
260
- }
261
- },
262
- {
263
- "kind": "text",
264
- "text": " ",
265
- "children": [],
266
- "props": {},
267
- "style": {
268
- "fontSize": "90%"
269
- }
270
- },
271
- {
272
- "kind": "text",
273
- "text": "m",
274
- "children": [],
275
- "props": {},
276
- "style": {
277
- "fontSize": "87%"
278
- }
279
- },
280
- {
281
- "kind": "text",
282
- "text": "a",
283
- "children": [],
284
- "props": {},
285
- "style": {
286
- "fontSize": "78%"
287
- }
288
- },
289
- {
290
- "kind": "text",
291
- "text": "r",
292
- "children": [],
293
- "props": {},
294
- "style": {
295
- "fontSize": "64%"
296
- }
297
- },
298
- {
299
- "kind": "text",
300
- "text": "i",
301
- "children": [],
302
- "props": {},
303
- "style": {
304
- "fontSize": "49%"
305
- }
306
- },
307
- {
308
- "kind": "text",
309
- "text": "n",
310
- "children": [],
311
- "props": {},
312
- "style": {
313
- "fontSize": "37%"
314
- }
315
- },
316
- {
317
- "kind": "text",
318
- "text": "a",
319
- "children": [],
320
- "props": {},
321
- "style": {
322
- "fontSize": "31%"
323
- }
324
- }
325
- ],
326
- "props": {}
327
- }
328
- },
329
- {
330
- "kind": "sinewave",
331
- "text": "una frase con olas",
332
- "bb": "[size=80]una[/size] [size=109]frase[/size] [size=120]con[/size] [size=107]olas[/size]",
333
- "rn": {
334
- "kind": "sinewave",
335
- "text": "",
336
- "children": [
337
- {
338
- "kind": "text",
339
- "text": "una",
340
- "children": [],
341
- "props": {},
342
- "style": {
343
- "fontSize": "80%"
344
- }
345
- },
346
- {
347
- "kind": "text",
348
- "text": " ",
349
- "children": [],
350
- "props": {},
351
- "style": {}
352
- },
353
- {
354
- "kind": "text",
355
- "text": "frase",
356
- "children": [],
357
- "props": {},
358
- "style": {
359
- "fontSize": "109%"
360
- }
361
- },
362
- {
363
- "kind": "text",
364
- "text": " ",
365
- "children": [],
366
- "props": {},
367
- "style": {}
368
- },
369
- {
370
- "kind": "text",
371
- "text": "con",
372
- "children": [],
373
- "props": {},
374
- "style": {
375
- "fontSize": "120%"
376
- }
377
- },
378
- {
379
- "kind": "text",
380
- "text": " ",
381
- "children": [],
382
- "props": {},
383
- "style": {}
384
- },
385
- {
386
- "kind": "text",
387
- "text": "olas",
388
- "children": [],
389
- "props": {},
390
- "style": {
391
- "fontSize": "107%"
392
- }
393
- }
394
- ],
395
- "props": {}
396
- }
397
- },
398
- {
399
- "kind": "grow",
400
- "text": "creciendo",
401
- "bb": "[size=125]c[/size][size=200]r[/size][size=125]e[/size][size=50]c[/size][size=125]i[/size][size=200]e[/size][size=125]n[/size][size=50]d[/size][size=125]o[/size]",
402
- "rn": {
403
- "kind": "grow",
404
- "text": "",
405
- "children": [
406
- {
407
- "kind": "text",
408
- "text": "c",
409
- "children": [],
410
- "props": {},
411
- "style": {
412
- "fontSize": "125%"
413
- }
414
- },
415
- {
416
- "kind": "text",
417
- "text": "r",
418
- "children": [],
419
- "props": {},
420
- "style": {
421
- "fontSize": "200%"
422
- }
423
- },
424
- {
425
- "kind": "text",
426
- "text": "e",
427
- "children": [],
428
- "props": {},
429
- "style": {
430
- "fontSize": "125%"
431
- }
432
- },
433
- {
434
- "kind": "text",
435
- "text": "c",
436
- "children": [],
437
- "props": {},
438
- "style": {
439
- "fontSize": "50%"
440
- }
441
- },
442
- {
443
- "kind": "text",
444
- "text": "i",
445
- "children": [],
446
- "props": {},
447
- "style": {
448
- "fontSize": "125%"
449
- }
450
- },
451
- {
452
- "kind": "text",
453
- "text": "e",
454
- "children": [],
455
- "props": {},
456
- "style": {
457
- "fontSize": "200%"
458
- }
459
- },
460
- {
461
- "kind": "text",
462
- "text": "n",
463
- "children": [],
464
- "props": {},
465
- "style": {
466
- "fontSize": "125%"
467
- }
468
- },
469
- {
470
- "kind": "text",
471
- "text": "d",
472
- "children": [],
473
- "props": {},
474
- "style": {
475
- "fontSize": "50%"
476
- }
477
- },
478
- {
479
- "kind": "text",
480
- "text": "o",
481
- "children": [],
482
- "props": {},
483
- "style": {
484
- "fontSize": "125%"
485
- }
486
- }
487
- ],
488
- "props": {}
489
- }
490
- },
491
- {
492
- "kind": "grow",
493
- "text": "x",
494
- "bb": "[size=114]x[/size]",
495
- "rn": {
496
- "kind": "grow",
497
- "text": "",
498
- "children": [
499
- {
500
- "kind": "text",
501
- "text": "x",
502
- "children": [],
503
- "props": {},
504
- "style": {
505
- "fontSize": "114%"
506
- }
507
- }
508
- ],
509
- "props": {}
510
- }
511
- },
512
- {
513
- "kind": "rainbow",
514
- "text": "arcoiris!",
515
- "bb": "[color=#F45925]a[/color][color=#F4E225]r[/color][color=#7BF425]c[/color][color=#25F459]o[/color][color=#25F4E2]i[/color][color=#257BF4]r[/color][color=#5925F4]i[/color][color=#E225F4]s[/color][color=#F4257B]![/color]",
516
- "rn": {
517
- "kind": "rainbow",
518
- "text": "",
519
- "children": [
520
- {
521
- "kind": "text",
522
- "text": "a",
523
- "children": [],
524
- "props": {},
525
- "style": {
526
- "color": "#F45925"
527
- }
528
- },
529
- {
530
- "kind": "text",
531
- "text": "r",
532
- "children": [],
533
- "props": {},
534
- "style": {
535
- "color": "#F4E225"
536
- }
537
- },
538
- {
539
- "kind": "text",
540
- "text": "c",
541
- "children": [],
542
- "props": {},
543
- "style": {
544
- "color": "#7BF425"
545
- }
546
- },
547
- {
548
- "kind": "text",
549
- "text": "o",
550
- "children": [],
551
- "props": {},
552
- "style": {
553
- "color": "#25F459"
554
- }
555
- },
556
- {
557
- "kind": "text",
558
- "text": "i",
559
- "children": [],
560
- "props": {},
561
- "style": {
562
- "color": "#25F4E2"
563
- }
564
- },
565
- {
566
- "kind": "text",
567
- "text": "r",
568
- "children": [],
569
- "props": {},
570
- "style": {
571
- "color": "#257BF4"
572
- }
573
- },
574
- {
575
- "kind": "text",
576
- "text": "i",
577
- "children": [],
578
- "props": {},
579
- "style": {
580
- "color": "#5925F4"
581
- }
582
- },
583
- {
584
- "kind": "text",
585
- "text": "s",
586
- "children": [],
587
- "props": {},
588
- "style": {
589
- "color": "#E225F4"
590
- }
591
- },
592
- {
593
- "kind": "text",
594
- "text": "!",
595
- "children": [],
596
- "props": {},
597
- "style": {
598
- "color": "#F4257B"
599
- }
600
- }
601
- ],
602
- "props": {}
603
- }
604
- },
605
- {
606
- "kind": "gradient",
607
- "text": "",
608
- "bb": "FALLBACK",
609
- "rn": {
610
- "kind": "gradient",
611
- "text": "",
612
- "children": [],
613
- "props": {}
614
- }
615
- }
616
- ]
@@ -1,68 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { readFileSync } from 'node:fs'
3
- import { join } from 'node:path'
4
- import { TagRegistry, type TagHandlerContext } from '../Model/TagRegistry'
5
- import { RedNode } from '../Syntax/RedNode'
6
- import { greenNode, greenLeaf } from '../Syntax/GreenNode'
7
- import type { NodeKind, NodeMetadata } from '../Types/core'
8
-
9
- /**
10
- * The four effect tags (gradient, sinewave, grow, rainbow) serialize through
11
- * ONE segment function each, presented two ways (toBBCode / toRenderNode).
12
- * Before the consolidation, each handler carried its own copy of the math.
13
- *
14
- * The expected outputs in `EffectSegments.snapshot.json` were captured from
15
- * the PRE-consolidation handlers, so this suite pins the refactor to byte
16
- * equality with the originals — colors, sizes, word/whitespace handling,
17
- * globalOffset/documentLength, empty-text fallbacks, everything.
18
- *
19
- * The inputs here must stay in sync with the snapshot's cases by index.
20
- */
21
-
22
- const CASES: Array<{ kind: string; text: string; metadata: NodeMetadata }> = [
23
- { kind: 'gradient', text: 'Hola Mundo', metadata: { colors: ['#FF0000', '#00FF00', '#0000FF'], unit: 'character', easing: 'linear' } },
24
- { kind: 'gradient', text: 'uno dos tres', metadata: { colors: ['#112233', '#445566'], unit: 'word', easing: 'ease-in' } },
25
- { kind: 'gradient', text: 'abcdef', metadata: { colors: ['#FF66AB'], unit: 'character', easing: 'linear', globalOffset: 3, documentLength: 20 } },
26
- { kind: 'sinewave', text: 'ola marina', metadata: { min: 30, max: 90, freq: 0.5, step: 'char' } },
27
- { kind: 'sinewave', text: 'una frase con olas', metadata: { min: 40, max: 120, freq: 0.8, step: 'word' } },
28
- { kind: 'grow', text: 'creciendo', metadata: { min: 50, max: 200, cycles: 2 } },
29
- { kind: 'grow', text: 'x', metadata: { min: 50, max: 150, cycles: 1, globalOffset: 5, documentLength: 12 } },
30
- { kind: 'rainbow', text: 'arcoiris!', metadata: { saturation: 90, lightness: 55, spread: 320, offset: 15 } },
31
- { kind: 'gradient', text: '', metadata: { colors: ['#FF0000', '#00FF00'] } },
32
- ]
33
-
34
- interface SnapshotCase { kind: string; text: string; bb: string; rn: unknown }
35
- const SNAPSHOT: SnapshotCase[] = JSON.parse(
36
- readFileSync(join(__dirname, 'EffectSegments.snapshot.json'), 'utf8'),
37
- )
38
-
39
- function effectNode(kind: string, text: string, metadata: NodeMetadata): RedNode {
40
- const leaf = greenLeaf('text', text)
41
- const parent = new RedNode(greenNode(kind, '', [leaf]), { kind: kind as NodeKind, metadata })
42
- parent.initChildren([new RedNode(leaf, { kind: 'text' })])
43
- return parent
44
- }
45
-
46
- describe('effect handlers match the pre-consolidation outputs exactly', () => {
47
- const registry = new TagRegistry()
48
-
49
- CASES.forEach((c, i) => {
50
- it(`${c.kind} ${JSON.stringify(c.text)}`, () => {
51
- const expected = SNAPSHOT[i]
52
- expect(expected.kind).toBe(c.kind)
53
- expect(expected.text).toBe(c.text)
54
-
55
- const node = effectNode(c.kind, c.text, c.metadata)
56
- const def = registry.getByKind(c.kind as NodeKind)!
57
- const ctx: TagHandlerContext = {
58
- node,
59
- source: '',
60
- visitChildren: () => 'FALLBACK',
61
- renderChild: () => ({ kind: 'text', text: '', children: [], props: {} }),
62
- }
63
-
64
- expect(def.toBBCode!(ctx)).toBe(expected.bb)
65
- expect(JSON.parse(JSON.stringify(def.toRenderNode!(ctx)))).toEqual(expected.rn)
66
- })
67
- })
68
- })