@promptctl/rich-js 0.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 (318) hide show
  1. package/README.md +418 -0
  2. package/dist/core/box.d.ts +91 -0
  3. package/dist/core/box.d.ts.map +1 -0
  4. package/dist/core/box.js +534 -0
  5. package/dist/core/box.js.map +1 -0
  6. package/dist/core/cells.d.ts +24 -0
  7. package/dist/core/cells.d.ts.map +1 -0
  8. package/dist/core/cells.js +114 -0
  9. package/dist/core/cells.js.map +1 -0
  10. package/dist/core/color.d.ts +158 -0
  11. package/dist/core/color.d.ts.map +1 -0
  12. package/dist/core/color.js +825 -0
  13. package/dist/core/color.js.map +1 -0
  14. package/dist/core/console.d.ts +100 -0
  15. package/dist/core/console.d.ts.map +1 -0
  16. package/dist/core/console.js +353 -0
  17. package/dist/core/console.js.map +1 -0
  18. package/dist/core/emoji.d.ts +25 -0
  19. package/dist/core/emoji.d.ts.map +1 -0
  20. package/dist/core/emoji.js +392 -0
  21. package/dist/core/emoji.js.map +1 -0
  22. package/dist/core/highlighter.d.ts +33 -0
  23. package/dist/core/highlighter.d.ts.map +1 -0
  24. package/dist/core/highlighter.js +103 -0
  25. package/dist/core/highlighter.js.map +1 -0
  26. package/dist/core/markup.d.ts +69 -0
  27. package/dist/core/markup.d.ts.map +1 -0
  28. package/dist/core/markup.js +401 -0
  29. package/dist/core/markup.js.map +1 -0
  30. package/dist/core/measure.d.ts +17 -0
  31. package/dist/core/measure.d.ts.map +1 -0
  32. package/dist/core/measure.js +50 -0
  33. package/dist/core/measure.js.map +1 -0
  34. package/dist/core/protocol.d.ts +32 -0
  35. package/dist/core/protocol.d.ts.map +1 -0
  36. package/dist/core/protocol.js +17 -0
  37. package/dist/core/protocol.js.map +1 -0
  38. package/dist/core/render.d.ts +51 -0
  39. package/dist/core/render.d.ts.map +1 -0
  40. package/dist/core/render.js +69 -0
  41. package/dist/core/render.js.map +1 -0
  42. package/dist/core/segment.d.ts +104 -0
  43. package/dist/core/segment.d.ts.map +1 -0
  44. package/dist/core/segment.js +364 -0
  45. package/dist/core/segment.js.map +1 -0
  46. package/dist/core/spinnerData.d.ts +11 -0
  47. package/dist/core/spinnerData.d.ts.map +1 -0
  48. package/dist/core/spinnerData.js +116 -0
  49. package/dist/core/spinnerData.js.map +1 -0
  50. package/dist/core/strip.d.ts +159 -0
  51. package/dist/core/strip.d.ts.map +1 -0
  52. package/dist/core/strip.js +237 -0
  53. package/dist/core/strip.js.map +1 -0
  54. package/dist/core/style.d.ts +115 -0
  55. package/dist/core/style.d.ts.map +1 -0
  56. package/dist/core/style.js +662 -0
  57. package/dist/core/style.js.map +1 -0
  58. package/dist/core/text.d.ts +91 -0
  59. package/dist/core/text.d.ts.map +1 -0
  60. package/dist/core/text.js +610 -0
  61. package/dist/core/text.js.map +1 -0
  62. package/dist/index.d.ts +99 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +72 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/renderables/align.d.ts +17 -0
  67. package/dist/renderables/align.d.ts.map +1 -0
  68. package/dist/renderables/align.js +47 -0
  69. package/dist/renderables/align.js.map +1 -0
  70. package/dist/renderables/columns.d.ts +28 -0
  71. package/dist/renderables/columns.d.ts.map +1 -0
  72. package/dist/renderables/columns.js +92 -0
  73. package/dist/renderables/columns.js.map +1 -0
  74. package/dist/renderables/constrain.d.ts +16 -0
  75. package/dist/renderables/constrain.d.ts.map +1 -0
  76. package/dist/renderables/constrain.js +38 -0
  77. package/dist/renderables/constrain.js.map +1 -0
  78. package/dist/renderables/flexStrip.d.ts +42 -0
  79. package/dist/renderables/flexStrip.d.ts.map +1 -0
  80. package/dist/renderables/flexStrip.js +201 -0
  81. package/dist/renderables/flexStrip.js.map +1 -0
  82. package/dist/renderables/group.d.ts +12 -0
  83. package/dist/renderables/group.d.ts.map +1 -0
  84. package/dist/renderables/group.js +16 -0
  85. package/dist/renderables/group.js.map +1 -0
  86. package/dist/renderables/json.d.ts +23 -0
  87. package/dist/renderables/json.d.ts.map +1 -0
  88. package/dist/renderables/json.js +49 -0
  89. package/dist/renderables/json.js.map +1 -0
  90. package/dist/renderables/layout.d.ts +37 -0
  91. package/dist/renderables/layout.d.ts.map +1 -0
  92. package/dist/renderables/layout.js +151 -0
  93. package/dist/renderables/layout.js.map +1 -0
  94. package/dist/renderables/live.d.ts +48 -0
  95. package/dist/renderables/live.d.ts.map +1 -0
  96. package/dist/renderables/live.js +131 -0
  97. package/dist/renderables/live.js.map +1 -0
  98. package/dist/renderables/markdown.d.ts +25 -0
  99. package/dist/renderables/markdown.d.ts.map +1 -0
  100. package/dist/renderables/markdown.js +190 -0
  101. package/dist/renderables/markdown.js.map +1 -0
  102. package/dist/renderables/padding.d.ts +26 -0
  103. package/dist/renderables/padding.d.ts.map +1 -0
  104. package/dist/renderables/padding.js +92 -0
  105. package/dist/renderables/padding.js.map +1 -0
  106. package/dist/renderables/panel.d.ts +42 -0
  107. package/dist/renderables/panel.d.ts.map +1 -0
  108. package/dist/renderables/panel.js +202 -0
  109. package/dist/renderables/panel.js.map +1 -0
  110. package/dist/renderables/pretty.d.ts +29 -0
  111. package/dist/renderables/pretty.d.ts.map +1 -0
  112. package/dist/renderables/pretty.js +141 -0
  113. package/dist/renderables/pretty.js.map +1 -0
  114. package/dist/renderables/progress.d.ts +91 -0
  115. package/dist/renderables/progress.d.ts.map +1 -0
  116. package/dist/renderables/progress.js +234 -0
  117. package/dist/renderables/progress.js.map +1 -0
  118. package/dist/renderables/progressBar.d.ts +32 -0
  119. package/dist/renderables/progressBar.d.ts.map +1 -0
  120. package/dist/renderables/progressBar.js +59 -0
  121. package/dist/renderables/progressBar.js.map +1 -0
  122. package/dist/renderables/prompt.d.ts +25 -0
  123. package/dist/renderables/prompt.d.ts.map +1 -0
  124. package/dist/renderables/prompt.js +109 -0
  125. package/dist/renderables/prompt.js.map +1 -0
  126. package/dist/renderables/rule.d.ts +25 -0
  127. package/dist/renderables/rule.d.ts.map +1 -0
  128. package/dist/renderables/rule.js +96 -0
  129. package/dist/renderables/rule.js.map +1 -0
  130. package/dist/renderables/spinner.d.ts +30 -0
  131. package/dist/renderables/spinner.d.ts.map +1 -0
  132. package/dist/renderables/spinner.js +70 -0
  133. package/dist/renderables/spinner.js.map +1 -0
  134. package/dist/renderables/status.d.ts +24 -0
  135. package/dist/renderables/status.d.ts.map +1 -0
  136. package/dist/renderables/status.js +67 -0
  137. package/dist/renderables/status.js.map +1 -0
  138. package/dist/renderables/syntax.d.ts +36 -0
  139. package/dist/renderables/syntax.d.ts.map +1 -0
  140. package/dist/renderables/syntax.js +115 -0
  141. package/dist/renderables/syntax.js.map +1 -0
  142. package/dist/renderables/table.d.ts +109 -0
  143. package/dist/renderables/table.d.ts.map +1 -0
  144. package/dist/renderables/table.js +434 -0
  145. package/dist/renderables/table.js.map +1 -0
  146. package/dist/renderables/traceback.d.ts +26 -0
  147. package/dist/renderables/traceback.d.ts.map +1 -0
  148. package/dist/renderables/traceback.js +108 -0
  149. package/dist/renderables/traceback.js.map +1 -0
  150. package/dist/renderables/tree.d.ts +30 -0
  151. package/dist/renderables/tree.d.ts.map +1 -0
  152. package/dist/renderables/tree.js +107 -0
  153. package/dist/renderables/tree.js.map +1 -0
  154. package/dist/template-bindings/index.d.ts +61 -0
  155. package/dist/template-bindings/index.d.ts.map +1 -0
  156. package/dist/template-bindings/index.js +70 -0
  157. package/dist/template-bindings/index.js.map +1 -0
  158. package/dist/template-bindings/style-funcs.d.ts +30 -0
  159. package/dist/template-bindings/style-funcs.d.ts.map +1 -0
  160. package/dist/template-bindings/style-funcs.js +172 -0
  161. package/dist/template-bindings/style-funcs.js.map +1 -0
  162. package/dist/themes/buildPalette.d.ts +31 -0
  163. package/dist/themes/buildPalette.d.ts.map +1 -0
  164. package/dist/themes/buildPalette.js +43 -0
  165. package/dist/themes/buildPalette.js.map +1 -0
  166. package/dist/themes/colorMath.d.ts +23 -0
  167. package/dist/themes/colorMath.d.ts.map +1 -0
  168. package/dist/themes/colorMath.js +99 -0
  169. package/dist/themes/colorMath.js.map +1 -0
  170. package/dist/themes/data/atom-one-dark.d.ts +4 -0
  171. package/dist/themes/data/atom-one-dark.d.ts.map +1 -0
  172. package/dist/themes/data/atom-one-dark.js +159 -0
  173. package/dist/themes/data/atom-one-dark.js.map +1 -0
  174. package/dist/themes/data/atom-one-light.d.ts +4 -0
  175. package/dist/themes/data/atom-one-light.d.ts.map +1 -0
  176. package/dist/themes/data/atom-one-light.js +159 -0
  177. package/dist/themes/data/atom-one-light.js.map +1 -0
  178. package/dist/themes/data/catppuccin-latte.d.ts +4 -0
  179. package/dist/themes/data/catppuccin-latte.d.ts.map +1 -0
  180. package/dist/themes/data/catppuccin-latte.js +159 -0
  181. package/dist/themes/data/catppuccin-latte.js.map +1 -0
  182. package/dist/themes/data/catppuccin-mocha.d.ts +4 -0
  183. package/dist/themes/data/catppuccin-mocha.d.ts.map +1 -0
  184. package/dist/themes/data/catppuccin-mocha.js +159 -0
  185. package/dist/themes/data/catppuccin-mocha.js.map +1 -0
  186. package/dist/themes/data/dracula.d.ts +4 -0
  187. package/dist/themes/data/dracula.d.ts.map +1 -0
  188. package/dist/themes/data/dracula.js +159 -0
  189. package/dist/themes/data/dracula.js.map +1 -0
  190. package/dist/themes/data/flexoki.d.ts +4 -0
  191. package/dist/themes/data/flexoki.d.ts.map +1 -0
  192. package/dist/themes/data/flexoki.js +159 -0
  193. package/dist/themes/data/flexoki.js.map +1 -0
  194. package/dist/themes/data/gruvbox.d.ts +4 -0
  195. package/dist/themes/data/gruvbox.d.ts.map +1 -0
  196. package/dist/themes/data/gruvbox.js +159 -0
  197. package/dist/themes/data/gruvbox.js.map +1 -0
  198. package/dist/themes/data/index.d.ts +29 -0
  199. package/dist/themes/data/index.d.ts.map +1 -0
  200. package/dist/themes/data/index.js +48 -0
  201. package/dist/themes/data/index.js.map +1 -0
  202. package/dist/themes/data/monokai.d.ts +4 -0
  203. package/dist/themes/data/monokai.d.ts.map +1 -0
  204. package/dist/themes/data/monokai.js +159 -0
  205. package/dist/themes/data/monokai.js.map +1 -0
  206. package/dist/themes/data/nord.d.ts +4 -0
  207. package/dist/themes/data/nord.d.ts.map +1 -0
  208. package/dist/themes/data/nord.js +159 -0
  209. package/dist/themes/data/nord.js.map +1 -0
  210. package/dist/themes/data/rose-pine-dawn.d.ts +4 -0
  211. package/dist/themes/data/rose-pine-dawn.d.ts.map +1 -0
  212. package/dist/themes/data/rose-pine-dawn.js +159 -0
  213. package/dist/themes/data/rose-pine-dawn.js.map +1 -0
  214. package/dist/themes/data/rose-pine-moon.d.ts +4 -0
  215. package/dist/themes/data/rose-pine-moon.d.ts.map +1 -0
  216. package/dist/themes/data/rose-pine-moon.js +159 -0
  217. package/dist/themes/data/rose-pine-moon.js.map +1 -0
  218. package/dist/themes/data/rose-pine.d.ts +4 -0
  219. package/dist/themes/data/rose-pine.d.ts.map +1 -0
  220. package/dist/themes/data/rose-pine.js +159 -0
  221. package/dist/themes/data/rose-pine.js.map +1 -0
  222. package/dist/themes/data/solarized-dark.d.ts +4 -0
  223. package/dist/themes/data/solarized-dark.d.ts.map +1 -0
  224. package/dist/themes/data/solarized-dark.js +159 -0
  225. package/dist/themes/data/solarized-dark.js.map +1 -0
  226. package/dist/themes/data/solarized-light.d.ts +4 -0
  227. package/dist/themes/data/solarized-light.d.ts.map +1 -0
  228. package/dist/themes/data/solarized-light.js +159 -0
  229. package/dist/themes/data/solarized-light.js.map +1 -0
  230. package/dist/themes/data/textual-ansi.d.ts +4 -0
  231. package/dist/themes/data/textual-ansi.d.ts.map +1 -0
  232. package/dist/themes/data/textual-ansi.js +159 -0
  233. package/dist/themes/data/textual-ansi.js.map +1 -0
  234. package/dist/themes/data/textual-dark.d.ts +4 -0
  235. package/dist/themes/data/textual-dark.d.ts.map +1 -0
  236. package/dist/themes/data/textual-dark.js +159 -0
  237. package/dist/themes/data/textual-dark.js.map +1 -0
  238. package/dist/themes/data/textual-light.d.ts +4 -0
  239. package/dist/themes/data/textual-light.d.ts.map +1 -0
  240. package/dist/themes/data/textual-light.js +159 -0
  241. package/dist/themes/data/textual-light.js.map +1 -0
  242. package/dist/themes/data/tokyo-night.d.ts +4 -0
  243. package/dist/themes/data/tokyo-night.d.ts.map +1 -0
  244. package/dist/themes/data/tokyo-night.js +159 -0
  245. package/dist/themes/data/tokyo-night.js.map +1 -0
  246. package/dist/themes/data/types.d.ts +15 -0
  247. package/dist/themes/data/types.d.ts.map +1 -0
  248. package/dist/themes/data/types.js +2 -0
  249. package/dist/themes/data/types.js.map +1 -0
  250. package/dist/themes/palette.d.ts +20 -0
  251. package/dist/themes/palette.d.ts.map +1 -0
  252. package/dist/themes/palette.js +27 -0
  253. package/dist/themes/palette.js.map +1 -0
  254. package/dist/themes/paletteResolver.d.ts +35 -0
  255. package/dist/themes/paletteResolver.d.ts.map +1 -0
  256. package/dist/themes/paletteResolver.js +88 -0
  257. package/dist/themes/paletteResolver.js.map +1 -0
  258. package/dist/themes/registry.d.ts +17 -0
  259. package/dist/themes/registry.d.ts.map +1 -0
  260. package/dist/themes/registry.js +33 -0
  261. package/dist/themes/registry.js.map +1 -0
  262. package/dist/themes/terminalThemes.d.ts +46 -0
  263. package/dist/themes/terminalThemes.d.ts.map +1 -0
  264. package/dist/themes/terminalThemes.js +268 -0
  265. package/dist/themes/terminalThemes.js.map +1 -0
  266. package/dist/widgets/button.d.ts +47 -0
  267. package/dist/widgets/button.d.ts.map +1 -0
  268. package/dist/widgets/button.js +183 -0
  269. package/dist/widgets/button.js.map +1 -0
  270. package/dist/widgets/checkbox.d.ts +43 -0
  271. package/dist/widgets/checkbox.d.ts.map +1 -0
  272. package/dist/widgets/checkbox.js +144 -0
  273. package/dist/widgets/checkbox.js.map +1 -0
  274. package/dist/widgets/dropdown.d.ts +67 -0
  275. package/dist/widgets/dropdown.d.ts.map +1 -0
  276. package/dist/widgets/dropdown.js +373 -0
  277. package/dist/widgets/dropdown.js.map +1 -0
  278. package/dist/widgets/event-router.d.ts +73 -0
  279. package/dist/widgets/event-router.d.ts.map +1 -0
  280. package/dist/widgets/event-router.js +479 -0
  281. package/dist/widgets/event-router.js.map +1 -0
  282. package/dist/widgets/focus-manager.d.ts +26 -0
  283. package/dist/widgets/focus-manager.d.ts.map +1 -0
  284. package/dist/widgets/focus-manager.js +179 -0
  285. package/dist/widgets/focus-manager.js.map +1 -0
  286. package/dist/widgets/index.d.ts +23 -0
  287. package/dist/widgets/index.d.ts.map +1 -0
  288. package/dist/widgets/index.js +13 -0
  289. package/dist/widgets/index.js.map +1 -0
  290. package/dist/widgets/screen.d.ts +90 -0
  291. package/dist/widgets/screen.d.ts.map +1 -0
  292. package/dist/widgets/screen.js +440 -0
  293. package/dist/widgets/screen.js.map +1 -0
  294. package/dist/widgets/slider.d.ts +55 -0
  295. package/dist/widgets/slider.d.ts.map +1 -0
  296. package/dist/widgets/slider.js +248 -0
  297. package/dist/widgets/slider.js.map +1 -0
  298. package/dist/widgets/static-item.d.ts +41 -0
  299. package/dist/widgets/static-item.d.ts.map +1 -0
  300. package/dist/widgets/static-item.js +62 -0
  301. package/dist/widgets/static-item.js.map +1 -0
  302. package/dist/widgets/text-input.d.ts +50 -0
  303. package/dist/widgets/text-input.d.ts.map +1 -0
  304. package/dist/widgets/text-input.js +242 -0
  305. package/dist/widgets/text-input.js.map +1 -0
  306. package/dist/widgets/toggle.d.ts +46 -0
  307. package/dist/widgets/toggle.d.ts.map +1 -0
  308. package/dist/widgets/toggle.js +169 -0
  309. package/dist/widgets/toggle.js.map +1 -0
  310. package/dist/widgets/types.d.ts +92 -0
  311. package/dist/widgets/types.d.ts.map +1 -0
  312. package/dist/widgets/types.js +13 -0
  313. package/dist/widgets/types.js.map +1 -0
  314. package/dist/widgets/widget-base.d.ts +41 -0
  315. package/dist/widgets/widget-base.d.ts.map +1 -0
  316. package/dist/widgets/widget-base.js +159 -0
  317. package/dist/widgets/widget-base.js.map +1 -0
  318. package/package.json +76 -0
@@ -0,0 +1,392 @@
1
+ /**
2
+ * Emoji shortcode support — dictionary, replacement, and renderable.
3
+ */
4
+ import { Segment } from "./segment.js";
5
+ // [LAW:one-source-of-truth] Single emoji dictionary for all shortcode lookups
6
+ export const EMOJI = {
7
+ // Faces
8
+ smile: "😄",
9
+ laugh: "😂",
10
+ grinning: "😀",
11
+ wink: "😉",
12
+ blush: "😊",
13
+ innocent: "😇",
14
+ heart_eyes: "😍",
15
+ kissing: "😘",
16
+ thinking: "🤔",
17
+ shushing: "🤫",
18
+ zipper_mouth: "🤐",
19
+ raised_eyebrow: "🤨",
20
+ neutral: "😐",
21
+ expressionless: "😑",
22
+ unamused: "😒",
23
+ rolling_eyes: "🙄",
24
+ grimacing: "😬",
25
+ lying: "🤥",
26
+ relieved: "😌",
27
+ pensive: "😔",
28
+ sleepy: "😪",
29
+ sleeping: "😴",
30
+ mask: "😷",
31
+ thermometer_face: "🤒",
32
+ bandage_face: "🤕",
33
+ nauseated: "🤢",
34
+ sneezing: "🤧",
35
+ cold_face: "🥶",
36
+ hot_face: "🥵",
37
+ dizzy_face: "😵",
38
+ exploding_head: "🤯",
39
+ cowboy: "🤠",
40
+ party_face: "🥳",
41
+ sunglasses: "😎",
42
+ nerd: "🤓",
43
+ monocle: "🧐",
44
+ confused: "😕",
45
+ worried: "😟",
46
+ frowning: "☹",
47
+ open_mouth: "😮",
48
+ hushed: "😯",
49
+ astonished: "😲",
50
+ flushed: "😳",
51
+ pleading: "🥺",
52
+ cry: "😢",
53
+ sob: "😭",
54
+ scream: "😱",
55
+ sweat: "😰",
56
+ angry: "😡",
57
+ rage: "🤬",
58
+ devil: "😈",
59
+ skull: "💀",
60
+ poop: "💩",
61
+ clown: "🤡",
62
+ ghost: "👻",
63
+ alien: "👽",
64
+ robot: "🤖",
65
+ // Hands
66
+ wave: "👋",
67
+ raised_hand: "✋",
68
+ ok_hand: "👌",
69
+ pinching: "🤏",
70
+ victory: "✌",
71
+ crossed_fingers: "🤞",
72
+ love_you: "🤟",
73
+ rock_on: "🤘",
74
+ thumbs_up: "👍",
75
+ thumbs_down: "👎",
76
+ fist: "✊",
77
+ punch: "👊",
78
+ left_fist: "🤛",
79
+ right_fist: "🤜",
80
+ clap: "👏",
81
+ raised_hands: "🙌",
82
+ open_hands: "👐",
83
+ palms_up: "🤲",
84
+ handshake: "🤝",
85
+ pray: "🙏",
86
+ writing_hand: "✍",
87
+ nail_polish: "💅",
88
+ muscle: "💪",
89
+ point_up: "☝",
90
+ point_up_2: "👆",
91
+ point_down: "👇",
92
+ point_left: "👈",
93
+ point_right: "👉",
94
+ middle_finger: "🖕",
95
+ // Hearts
96
+ heart: "❤",
97
+ orange_heart: "🧡",
98
+ yellow_heart: "💛",
99
+ green_heart: "💚",
100
+ blue_heart: "💙",
101
+ purple_heart: "💜",
102
+ black_heart: "🖤",
103
+ white_heart: "🤍",
104
+ brown_heart: "🤎",
105
+ broken_heart: "💔",
106
+ heart_exclamation: "❣",
107
+ two_hearts: "💕",
108
+ revolving_hearts: "💞",
109
+ heartbeat: "💓",
110
+ heartpulse: "💗",
111
+ sparkling_heart: "💖",
112
+ growing_heart: "💗",
113
+ cupid: "💘",
114
+ gift_heart: "💝",
115
+ // Objects & Symbols
116
+ fire: "🔥",
117
+ star: "⭐",
118
+ star2: "🌟",
119
+ sparkles: "✨",
120
+ zap: "⚡",
121
+ boom: "💥",
122
+ droplet: "💧",
123
+ rainbow: "🌈",
124
+ sun: "☀",
125
+ moon: "🌙",
126
+ cloud: "☁",
127
+ snowflake: "❄",
128
+ umbrella: "☂",
129
+ // Status
130
+ check: "✅",
131
+ check_mark: "✔",
132
+ cross_mark: "❌",
133
+ warning: "⚠",
134
+ info: "ℹ",
135
+ question: "❓",
136
+ exclamation: "❗",
137
+ no_entry: "⛔",
138
+ prohibited: "🚫",
139
+ stop_sign: "🛑",
140
+ // Arrows
141
+ arrow_up: "⬆",
142
+ arrow_down: "⬇",
143
+ arrow_left: "⬅",
144
+ arrow_right: "➡",
145
+ arrow_upper_left: "↖",
146
+ arrow_upper_right: "↗",
147
+ arrow_lower_left: "↙",
148
+ arrow_lower_right: "↘",
149
+ left_right_arrow: "↔",
150
+ up_down_arrow: "↕",
151
+ arrows_clockwise: "🔃",
152
+ arrows_counterclockwise: "🔄",
153
+ // Tech
154
+ computer: "💻",
155
+ keyboard: "⌨",
156
+ desktop: "🖥",
157
+ printer: "🖨",
158
+ mouse: "🖱",
159
+ cd: "💿",
160
+ dvd: "📀",
161
+ floppy: "💾",
162
+ battery: "🔋",
163
+ plug: "🔌",
164
+ bulb: "💡",
165
+ flashlight: "🔦",
166
+ gear: "⚙",
167
+ wrench: "🔧",
168
+ hammer: "🔨",
169
+ nut_and_bolt: "🔩",
170
+ link: "🔗",
171
+ chains: "⛓",
172
+ lock: "🔒",
173
+ unlock: "🔓",
174
+ key: "🔑",
175
+ shield: "🛡",
176
+ bug: "🐛",
177
+ magnifying_glass: "🔍",
178
+ // Communication
179
+ speech_balloon: "💬",
180
+ thought_balloon: "💭",
181
+ megaphone: "📣",
182
+ loudspeaker: "📢",
183
+ bell: "🔔",
184
+ no_bell: "🔕",
185
+ envelope: "✉",
186
+ email: "📧",
187
+ inbox: "📥",
188
+ outbox: "📤",
189
+ package: "📦",
190
+ clipboard: "📋",
191
+ memo: "📝",
192
+ page: "📄",
193
+ bookmark: "🔖",
194
+ label: "🏷",
195
+ // Time
196
+ hourglass: "⌛",
197
+ hourglass_flowing: "⏳",
198
+ watch: "⌚",
199
+ alarm_clock: "⏰",
200
+ stopwatch: "⏱",
201
+ timer: "⏲",
202
+ clock: "🕐",
203
+ // Numbers
204
+ zero: "0️⃣",
205
+ one: "1️⃣",
206
+ two: "2️⃣",
207
+ three: "3️⃣",
208
+ four: "4️⃣",
209
+ five: "5️⃣",
210
+ six: "6️⃣",
211
+ seven: "7️⃣",
212
+ eight: "8️⃣",
213
+ nine: "9️⃣",
214
+ ten: "🔟",
215
+ hash: "#️⃣",
216
+ // Food & Drink
217
+ coffee: "☕",
218
+ tea: "🍵",
219
+ beer: "🍺",
220
+ wine: "🍷",
221
+ cocktail: "🍸",
222
+ pizza: "🍕",
223
+ hamburger: "🍔",
224
+ fries: "🍟",
225
+ hotdog: "🌭",
226
+ taco: "🌮",
227
+ cake: "🎂",
228
+ cookie: "🍪",
229
+ chocolate: "🍫",
230
+ candy: "🍬",
231
+ apple: "🍎",
232
+ banana: "🍌",
233
+ // Nature & Animals
234
+ dog: "🐕",
235
+ cat: "🐈",
236
+ snake: "🐍",
237
+ turtle: "🐢",
238
+ whale: "🐳",
239
+ dolphin: "🐬",
240
+ fish: "🐟",
241
+ butterfly: "🦋",
242
+ bee: "🐝",
243
+ ladybug: "🐞",
244
+ spider: "🕷",
245
+ tree: "🌲",
246
+ flower: "🌸",
247
+ rose: "🌹",
248
+ sunflower: "🌻",
249
+ cactus: "🌵",
250
+ // Activities
251
+ trophy: "🏆",
252
+ medal: "🏅",
253
+ crown: "👑",
254
+ gem: "💎",
255
+ money_bag: "💰",
256
+ dollar: "💵",
257
+ rocket: "🚀",
258
+ airplane: "✈",
259
+ car: "🚗",
260
+ bicycle: "🚲",
261
+ house: "🏠",
262
+ building: "🏢",
263
+ globe: "🌍",
264
+ world_map: "🗺",
265
+ flag: "🏁",
266
+ party: "🎉",
267
+ confetti: "🎊",
268
+ balloon: "🎈",
269
+ gift: "🎁",
270
+ art: "🎨",
271
+ music: "🎵",
272
+ notes: "🎶",
273
+ microphone: "🎤",
274
+ headphones: "🎧",
275
+ movie: "🎬",
276
+ camera: "📷",
277
+ book: "📖",
278
+ books: "📚",
279
+ scroll: "📜",
280
+ newspaper: "📰",
281
+ // People
282
+ person: "🧑",
283
+ man: "👨",
284
+ woman: "👩",
285
+ child: "🧒",
286
+ baby: "👶",
287
+ eyes: "👀",
288
+ eye: "👁",
289
+ brain: "🧠",
290
+ tongue: "👅",
291
+ ear: "👂",
292
+ nose: "👃",
293
+ foot: "🦶",
294
+ hand: "🤚",
295
+ // Misc
296
+ red_circle: "🔴",
297
+ orange_circle: "🟠",
298
+ yellow_circle: "🟡",
299
+ green_circle: "🟢",
300
+ blue_circle: "🔵",
301
+ purple_circle: "🟣",
302
+ black_circle: "⚫",
303
+ white_circle: "⚪",
304
+ red_square: "🟥",
305
+ orange_square: "🟧",
306
+ yellow_square: "🟨",
307
+ green_square: "🟩",
308
+ blue_square: "🟦",
309
+ purple_square: "🟪",
310
+ black_square: "⬛",
311
+ white_square: "⬜",
312
+ checkered_flag: "🏁",
313
+ triangular_flag: "🚩",
314
+ crossed_flags: "🎌",
315
+ pirate_flag: "🏴‍☠️",
316
+ white_flag: "🏳",
317
+ 100: "💯",
318
+ infinity: "♾",
319
+ recycle: "♻",
320
+ peace: "☮",
321
+ yin_yang: "☯",
322
+ cross: "✝",
323
+ atom: "⚛",
324
+ radioactive: "☢",
325
+ biohazard: "☣",
326
+ };
327
+ const EMOJI_PATTERN = /:([a-z0-9_]+(?:-(?:emoji|text))?):/g;
328
+ /**
329
+ * Replaces :shortcode: patterns in text with emoji characters.
330
+ */
331
+ export function emojiReplace(text, defaultVariant) {
332
+ return text.replace(EMOJI_PATTERN, (_match, code) => {
333
+ let variant = defaultVariant;
334
+ let name = code;
335
+ // Check for inline variant suffix
336
+ if (name.endsWith("-emoji")) {
337
+ variant = "emoji";
338
+ name = name.slice(0, -6);
339
+ }
340
+ else if (name.endsWith("-text")) {
341
+ variant = "text";
342
+ name = name.slice(0, -5);
343
+ }
344
+ const emoji = EMOJI[name];
345
+ if (emoji === undefined)
346
+ return _match; // Not found, leave unchanged
347
+ // Apply variant selector
348
+ // [LAW:dataflow-not-control-flow] Always compute suffix, let the value decide
349
+ const suffix = variant === "emoji"
350
+ ? "\uFE0F"
351
+ : variant === "text"
352
+ ? "\uFE0E"
353
+ : "";
354
+ return emoji + suffix;
355
+ });
356
+ }
357
+ export class NoEmoji extends Error {
358
+ constructor(name) {
359
+ super(`No emoji with name: "${name}"`);
360
+ this.name = "NoEmoji";
361
+ }
362
+ }
363
+ export class Emoji {
364
+ name;
365
+ _char;
366
+ _style;
367
+ _variant;
368
+ constructor(name, style, variant) {
369
+ const emoji = EMOJI[name];
370
+ if (emoji === undefined)
371
+ throw new NoEmoji(name);
372
+ this.name = name;
373
+ this._char = emoji;
374
+ this._style = style;
375
+ this._variant = variant;
376
+ }
377
+ toString() {
378
+ const suffix = this._variant === "emoji"
379
+ ? "\uFE0F"
380
+ : this._variant === "text"
381
+ ? "\uFE0E"
382
+ : "";
383
+ return this._char + suffix;
384
+ }
385
+ *render(_options) {
386
+ yield new Segment(this.toString(), this._style);
387
+ }
388
+ static replace(text) {
389
+ return emojiReplace(text);
390
+ }
391
+ }
392
+ //# sourceMappingURL=emoji.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji.js","sourceRoot":"","sources":["../../src/core/emoji.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Highlighters — apply styled spans to RichText based on pattern matching.
3
+ */
4
+ import { RichText } from "./text.js";
5
+ export declare abstract class Highlighter {
6
+ abstract highlight(text: RichText): void;
7
+ call(input: string): RichText;
8
+ }
9
+ export declare class NullHighlighter extends Highlighter {
10
+ highlight(_text: RichText): void;
11
+ }
12
+ export declare class RegexHighlighter extends Highlighter {
13
+ static highlights: (string | RegExp)[];
14
+ /** Style applied to matches. When ending with "." it acts as a namespace
15
+ * prefix: named groups become `baseStyle + groupName` (e.g. "repr." + "url"
16
+ * → "repr.url"). Otherwise it's used as a literal style for all matches
17
+ * (e.g. "bold red" applies "bold red" to every named group). */
18
+ static baseStyle: string;
19
+ highlight(text: RichText): void;
20
+ }
21
+ export declare class ReprHighlighter extends RegexHighlighter {
22
+ static baseStyle: string;
23
+ static highlights: RegExp[];
24
+ }
25
+ export declare class JSONHighlighter extends RegexHighlighter {
26
+ static baseStyle: string;
27
+ static highlights: RegExp[];
28
+ }
29
+ export declare class ISO8601Highlighter extends RegexHighlighter {
30
+ static baseStyle: string;
31
+ static highlights: RegExp[];
32
+ }
33
+ //# sourceMappingURL=highlighter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlighter.d.ts","sourceRoot":"","sources":["../../src/core/highlighter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIrC,8BAAsB,WAAW;IAC/B,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAExC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;CAK9B;AAID,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;CAGjC;AAID,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAM;IAC5C;;;qEAGiE;IACjE,MAAM,CAAC,SAAS,SAAM;IAEtB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;CAuChC;AAKD,qBAAa,eAAgB,SAAQ,gBAAgB;IACnD,MAAM,CAAC,SAAS,SAAW;IAC3B,MAAM,CAAC,UAAU,WAaf;CACH;AAID,qBAAa,eAAgB,SAAQ,gBAAgB;IACnD,MAAM,CAAC,SAAS,SAAW;IAC3B,MAAM,CAAC,UAAU,WAOf;CACH;AAID,qBAAa,kBAAmB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,SAAS,SAAc;IAC9B,MAAM,CAAC,UAAU,WAIf;CACH"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Highlighters — apply styled spans to RichText based on pattern matching.
3
+ */
4
+ import { RichText } from "./text.js";
5
+ // --- Base ---
6
+ export class Highlighter {
7
+ call(input) {
8
+ const text = new RichText(input);
9
+ this.highlight(text);
10
+ return text;
11
+ }
12
+ }
13
+ // --- NullHighlighter ---
14
+ export class NullHighlighter extends Highlighter {
15
+ highlight(_text) {
16
+ // No-op
17
+ }
18
+ }
19
+ // --- RegexHighlighter ---
20
+ export class RegexHighlighter extends Highlighter {
21
+ static highlights = [];
22
+ /** Style applied to matches. When ending with "." it acts as a namespace
23
+ * prefix: named groups become `baseStyle + groupName` (e.g. "repr." + "url"
24
+ * → "repr.url"). Otherwise it's used as a literal style for all matches
25
+ * (e.g. "bold red" applies "bold red" to every named group). */
26
+ static baseStyle = "";
27
+ highlight(text) {
28
+ const ctor = this.constructor;
29
+ const baseStyle = ctor.baseStyle;
30
+ // Namespace mode: "repr." + groupName → "repr.url"
31
+ // Literal mode: "bold red" → applied directly to every match
32
+ const isNamespace = baseStyle.endsWith(".");
33
+ for (const pattern of ctor.highlights) {
34
+ const re = pattern instanceof RegExp
35
+ ? new RegExp(pattern.source, pattern.flags.includes("g") ? pattern.flags : pattern.flags + "g")
36
+ : new RegExp(pattern, "g");
37
+ let match;
38
+ while ((match = re.exec(text.plain)) !== null) {
39
+ if (match[0].length === 0) {
40
+ re.lastIndex++;
41
+ continue;
42
+ }
43
+ if (match.groups) {
44
+ let searchFrom = 0;
45
+ for (const [groupName, groupValue] of Object.entries(match.groups)) {
46
+ if (groupValue !== undefined) {
47
+ const posInMatch = match[0].indexOf(groupValue, searchFrom);
48
+ if (posInMatch >= 0) {
49
+ const start = match.index + posInMatch;
50
+ const style = isNamespace
51
+ ? `${baseStyle}${groupName}`
52
+ : baseStyle || groupName;
53
+ text.stylize(style, start, start + groupValue.length);
54
+ searchFrom = posInMatch + groupValue.length;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ // --- ReprHighlighter ---
64
+ // [LAW:one-type-per-behavior] All repr patterns use the same RegexHighlighter mechanism
65
+ export class ReprHighlighter extends RegexHighlighter {
66
+ static baseStyle = "repr.";
67
+ static highlights = [
68
+ // URLs
69
+ /(?<url>https?:\/\/[^\s<>"']+)/g,
70
+ // UUIDs
71
+ /(?<uuid>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/gi,
72
+ // Quoted strings
73
+ /(?<str>'[^']*'|"[^"]*")/g,
74
+ // Booleans
75
+ /(?<bool>\btrue\b|\bfalse\b)/g,
76
+ // None/null/undefined
77
+ /(?<none>\bnull\b|\bundefined\b|\bNone\b)/g,
78
+ // Numbers (integers and floats)
79
+ /(?<number>(?<!\w)-?(?:0x[0-9a-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)(?!\w))/gi,
80
+ ];
81
+ }
82
+ // --- JSONHighlighter ---
83
+ export class JSONHighlighter extends RegexHighlighter {
84
+ static baseStyle = "json.";
85
+ static highlights = [
86
+ /(?<key>"[^"]*")\s*:/g,
87
+ /:\s*(?<str>"[^"]*")/g,
88
+ /(?<bool>\btrue\b|\bfalse\b)/g,
89
+ /(?<null>\bnull\b)/g,
90
+ /(?<number>-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)/g,
91
+ /(?<brace>[{}[\]])/g,
92
+ ];
93
+ }
94
+ // --- ISO8601Highlighter ---
95
+ export class ISO8601Highlighter extends RegexHighlighter {
96
+ static baseStyle = "iso8601.";
97
+ static highlights = [
98
+ /(?<date>\d{4}-\d{2}-\d{2})/g,
99
+ /(?<time>\d{2}:\d{2}:\d{2}(?:\.\d+)?)/g,
100
+ /(?<timezone>[+-]\d{2}:\d{2}|Z)/g,
101
+ ];
102
+ }
103
+ //# sourceMappingURL=highlighter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlighter.js","sourceRoot":"","sources":["../../src/core/highlighter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Markup — BBCode-inspired markup parser for inline styling.
3
+ * Parses `[bold red]text[/bold red]` into RichText with styled spans.
4
+ *
5
+ * Plugin tags ([LAW:locality-or-seam]): a `MarkupRegistry` lets consumers
6
+ * register tag handlers without forking the parser. When the parser sees
7
+ * `[name attrs...]inner[/name]` and `name` is registered, it parses attrs,
8
+ * recursively renders the inner markup as a child Renderable, and calls the
9
+ * handler — splicing the handler's returned Renderable into the output. The
10
+ * built-in style dialect and the plugin dialect are routed by the registry,
11
+ * which is the single trust boundary between them.
12
+ */
13
+ import { Style } from "./style.js";
14
+ import { RichText } from "./text.js";
15
+ export declare class Tag {
16
+ readonly name: string;
17
+ readonly parameters: string | undefined;
18
+ constructor(name: string, parameters?: string);
19
+ toString(): string;
20
+ get markup(): string;
21
+ }
22
+ export declare class MarkupError extends Error {
23
+ constructor(message: string);
24
+ }
25
+ /**
26
+ * Escapes markup characters so they render as literal text.
27
+ */
28
+ export declare function escape(text: string): string;
29
+ export interface RenderOptions {
30
+ emoji?: boolean;
31
+ }
32
+ /**
33
+ * Parses markup text and returns a RichText with appropriate spans.
34
+ */
35
+ export declare function render(markup: string, baseStyle?: string | Style, options?: RenderOptions): RichText;
36
+ export interface MarkupTagContext {
37
+ /** Parsed `key=value` attributes from the opening tag. */
38
+ attrs: Record<string, string>;
39
+ /** Inner markup, already parsed (registry-aware) into a `RichText`. */
40
+ children: RichText;
41
+ /** Raw inner markup text (between the opening tag's `]` and the closing tag's `[`). */
42
+ raw: string;
43
+ }
44
+ export type MarkupTagHandler = (ctx: MarkupTagContext) => RichText;
45
+ export declare class MarkupRegistry {
46
+ private readonly _handlers;
47
+ register(name: string, handler: MarkupTagHandler): void;
48
+ unregister(name: string): void;
49
+ has(name: string): boolean;
50
+ get(name: string): MarkupTagHandler | undefined;
51
+ }
52
+ export declare const globalMarkupRegistry: MarkupRegistry;
53
+ export declare function registerMarkupTag(name: string, handler: MarkupTagHandler): void;
54
+ export declare function unregisterMarkupTag(name: string): void;
55
+ export interface RenderMarkupOptions {
56
+ registry?: MarkupRegistry;
57
+ baseStyle?: string | Style;
58
+ emoji?: boolean;
59
+ }
60
+ /**
61
+ * Plugin-aware markup render. Always returns a `RichText`. Built-in style
62
+ * tags become spans; registered plugin tags are resolved by their handler,
63
+ * whose returned `RichText` is appended (text + spans) into the output. The
64
+ * recursion is over markup *slices* — between top-level plugin tag pairs and
65
+ * inside each pair — and every recursion node returns a `RichText`, so the
66
+ * append path is uniform.
67
+ */
68
+ export declare function renderMarkup(markup: string, options?: RenderMarkupOptions): RichText;
69
+ //# sourceMappingURL=markup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markup.d.ts","sourceRoot":"","sources":["../../src/core/markup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAQ,MAAM,WAAW,CAAC;AAK3C,qBAAa,GAAG;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE5B,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAK7C,QAAQ,IAAI,MAAM;IAMlB,IAAI,MAAM,IAAI,MAAM,CAInB;CACF;AAID,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAID;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AA0DD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,MAAM,CACpB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,EAC1B,OAAO,CAAC,EAAE,aAAa,GACtB,QAAQ,CA6FV;AAwBD,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,EAAE,QAAQ,CAAC;IACnB,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC;CACb;AAOD,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,gBAAgB,KAAK,QAAQ,CAAC;AAEnE,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IAEjE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IASvD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;CAGhD;AAeD,eAAO,MAAM,oBAAoB,gBAAuB,CAAC;AAEzD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAE/E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtD;AAoED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,mBAAmB,GAC5B,QAAQ,CA+CV"}