@elastic/isomer-sdk 0.0.0 → 0.2.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 (492) hide show
  1. package/LICENSE.txt +93 -0
  2. package/NOTICE.txt +1861 -0
  3. package/README.md +69 -0
  4. package/THIRD_PARTY_LICENSES.md +957 -0
  5. package/dist/author/authored_fields.d.ts +153 -0
  6. package/dist/author/authored_fields.d.ts.map +1 -0
  7. package/dist/author/authored_fields.js +227 -0
  8. package/dist/author/authored_fields.js.map +1 -0
  9. package/dist/author/authoring_input.d.ts +7 -0
  10. package/dist/author/authoring_input.d.ts.map +1 -0
  11. package/dist/author/authoring_input.js +60 -0
  12. package/dist/author/authoring_input.js.map +1 -0
  13. package/dist/author/authoring_model.d.ts +27 -0
  14. package/dist/author/authoring_model.d.ts.map +1 -0
  15. package/dist/author/authoring_model.js +98 -0
  16. package/dist/author/authoring_model.js.map +1 -0
  17. package/dist/author/declarations.d.ts +13 -0
  18. package/dist/author/declarations.d.ts.map +1 -0
  19. package/dist/author/declarations.js +277 -0
  20. package/dist/author/declarations.js.map +1 -0
  21. package/dist/author/index.d.ts +7 -0
  22. package/dist/author/index.d.ts.map +1 -0
  23. package/dist/author/index.js +12 -0
  24. package/dist/author/index.js.map +1 -0
  25. package/dist/author/jsx.d.ts +21 -0
  26. package/dist/author/jsx.d.ts.map +1 -0
  27. package/dist/author/jsx.js +20 -0
  28. package/dist/author/jsx.js.map +1 -0
  29. package/dist/author/jsx_shim.d.ts +117 -0
  30. package/dist/author/jsx_shim.d.ts.map +1 -0
  31. package/dist/author/jsx_shim.js +270 -0
  32. package/dist/author/jsx_shim.js.map +1 -0
  33. package/dist/author/prompt.d.ts +58 -0
  34. package/dist/author/prompt.d.ts.map +1 -0
  35. package/dist/author/prompt.js +148 -0
  36. package/dist/author/prompt.js.map +1 -0
  37. package/dist/author/schema_to_typescript.d.ts +37 -0
  38. package/dist/author/schema_to_typescript.d.ts.map +1 -0
  39. package/dist/author/schema_to_typescript.js +286 -0
  40. package/dist/author/schema_to_typescript.js.map +1 -0
  41. package/dist/cjs/author/authored_fields.js +233 -0
  42. package/dist/cjs/author/authored_fields.js.map +1 -0
  43. package/dist/cjs/author/authoring_input.js +64 -0
  44. package/dist/cjs/author/authoring_input.js.map +1 -0
  45. package/dist/cjs/author/authoring_model.js +104 -0
  46. package/dist/cjs/author/authoring_model.js.map +1 -0
  47. package/dist/cjs/author/declarations.js +281 -0
  48. package/dist/cjs/author/declarations.js.map +1 -0
  49. package/dist/cjs/author/index.js +25 -0
  50. package/dist/cjs/author/index.js.map +1 -0
  51. package/dist/cjs/author/jsx.js +24 -0
  52. package/dist/cjs/author/jsx.js.map +1 -0
  53. package/dist/cjs/author/jsx_shim.js +276 -0
  54. package/dist/cjs/author/jsx_shim.js.map +1 -0
  55. package/dist/cjs/author/prompt.js +153 -0
  56. package/dist/cjs/author/prompt.js.map +1 -0
  57. package/dist/cjs/author/schema_to_typescript.js +295 -0
  58. package/dist/cjs/author/schema_to_typescript.js.map +1 -0
  59. package/dist/cjs/composition/action_event.js +9 -0
  60. package/dist/cjs/composition/action_event.js.map +1 -0
  61. package/dist/cjs/composition/body_node_base.js +112 -0
  62. package/dist/cjs/composition/body_node_base.js.map +1 -0
  63. package/dist/cjs/composition/composition.js +9 -0
  64. package/dist/cjs/composition/composition.js.map +1 -0
  65. package/dist/cjs/composition/error.js +73 -0
  66. package/dist/cjs/composition/error.js.map +1 -0
  67. package/dist/cjs/composition/index.js +32 -0
  68. package/dist/cjs/composition/index.js.map +1 -0
  69. package/dist/cjs/composition/map_nodes.js +85 -0
  70. package/dist/cjs/composition/map_nodes.js.map +1 -0
  71. package/dist/cjs/composition/named_color.js +20 -0
  72. package/dist/cjs/composition/named_color.js.map +1 -0
  73. package/dist/cjs/composition/node.js +9 -0
  74. package/dist/cjs/composition/node.js.map +1 -0
  75. package/dist/cjs/composition/one_line.js +23 -0
  76. package/dist/cjs/composition/one_line.js.map +1 -0
  77. package/dist/cjs/composition/structured_value.js +21 -0
  78. package/dist/cjs/composition/structured_value.js.map +1 -0
  79. package/dist/cjs/composition/validation_error.js +40 -0
  80. package/dist/cjs/composition/validation_error.js.map +1 -0
  81. package/dist/cjs/define/frame.js +31 -0
  82. package/dist/cjs/define/frame.js.map +1 -0
  83. package/dist/cjs/define/index.js +31 -0
  84. package/dist/cjs/define/index.js.map +1 -0
  85. package/dist/cjs/define/markdown_content.js +12 -0
  86. package/dist/cjs/define/markdown_content.js.map +1 -0
  87. package/dist/cjs/define/primitive_example.js +26 -0
  88. package/dist/cjs/define/primitive_example.js.map +1 -0
  89. package/dist/cjs/define/primitive_icon.js +17 -0
  90. package/dist/cjs/define/primitive_icon.js.map +1 -0
  91. package/dist/cjs/define/primitive_module.js +118 -0
  92. package/dist/cjs/define/primitive_module.js.map +1 -0
  93. package/dist/cjs/define/slack_assets.js +9 -0
  94. package/dist/cjs/define/slack_assets.js.map +1 -0
  95. package/dist/cjs/define/slack_blocks.js +9 -0
  96. package/dist/cjs/define/slack_blocks.js.map +1 -0
  97. package/dist/cjs/define/zod_format.js +122 -0
  98. package/dist/cjs/define/zod_format.js.map +1 -0
  99. package/dist/cjs/define/zod_helpers.js +26 -0
  100. package/dist/cjs/define/zod_helpers.js.map +1 -0
  101. package/dist/cjs/entries/html.js +12 -0
  102. package/dist/cjs/entries/html.js.map +1 -0
  103. package/dist/cjs/entries/index.js +80 -0
  104. package/dist/cjs/entries/index.js.map +1 -0
  105. package/dist/cjs/entries/markdown.js +14 -0
  106. package/dist/cjs/entries/markdown.js.map +1 -0
  107. package/dist/cjs/entries/react.js +20 -0
  108. package/dist/cjs/entries/react.js.map +1 -0
  109. package/dist/cjs/entries/slack.js +25 -0
  110. package/dist/cjs/entries/slack.js.map +1 -0
  111. package/dist/cjs/entries/text.js +12 -0
  112. package/dist/cjs/entries/text.js.map +1 -0
  113. package/dist/cjs/pack/capabilities.js +40 -0
  114. package/dist/cjs/pack/capabilities.js.map +1 -0
  115. package/dist/cjs/pack/compose.js +59 -0
  116. package/dist/cjs/pack/compose.js.map +1 -0
  117. package/dist/cjs/pack/enhancements.js +65 -0
  118. package/dist/cjs/pack/enhancements.js.map +1 -0
  119. package/dist/cjs/pack/index.js +18 -0
  120. package/dist/cjs/pack/index.js.map +1 -0
  121. package/dist/cjs/pack/primitive_pack.js +97 -0
  122. package/dist/cjs/pack/primitive_pack.js.map +1 -0
  123. package/dist/cjs/package.json +3 -0
  124. package/dist/cjs/render/anchors.js +167 -0
  125. package/dist/cjs/render/anchors.js.map +1 -0
  126. package/dist/cjs/render/context_view.js +54 -0
  127. package/dist/cjs/render/context_view.js.map +1 -0
  128. package/dist/cjs/render/format_display_value.js +143 -0
  129. package/dist/cjs/render/format_display_value.js.map +1 -0
  130. package/dist/cjs/render/format_number.js +46 -0
  131. package/dist/cjs/render/format_number.js.map +1 -0
  132. package/dist/cjs/render/html/enhancements.js +30 -0
  133. package/dist/cjs/render/html/enhancements.js.map +1 -0
  134. package/dist/cjs/render/html/envelope.js +218 -0
  135. package/dist/cjs/render/html/envelope.js.map +1 -0
  136. package/dist/cjs/render/html/index.js +12 -0
  137. package/dist/cjs/render/html/index.js.map +1 -0
  138. package/dist/cjs/render/index.js +25 -0
  139. package/dist/cjs/render/index.js.map +1 -0
  140. package/dist/cjs/render/layout_check.js +133 -0
  141. package/dist/cjs/render/layout_check.js.map +1 -0
  142. package/dist/cjs/render/markdown/builder.js +195 -0
  143. package/dist/cjs/render/markdown/builder.js.map +1 -0
  144. package/dist/cjs/render/markdown/envelope.js +33 -0
  145. package/dist/cjs/render/markdown/envelope.js.map +1 -0
  146. package/dist/cjs/render/markdown/format.js +208 -0
  147. package/dist/cjs/render/markdown/format.js.map +1 -0
  148. package/dist/cjs/render/markdown/index.js +15 -0
  149. package/dist/cjs/render/markdown/index.js.map +1 -0
  150. package/dist/cjs/render/measure_dom.js +61 -0
  151. package/dist/cjs/render/measure_dom.js.map +1 -0
  152. package/dist/cjs/render/payload.js +13 -0
  153. package/dist/cjs/render/payload.js.map +1 -0
  154. package/dist/cjs/render/primitive_dispatch.js +173 -0
  155. package/dist/cjs/render/primitive_dispatch.js.map +1 -0
  156. package/dist/cjs/render/react/content.js +44 -0
  157. package/dist/cjs/render/react/content.js.map +1 -0
  158. package/dist/cjs/render/react/enhancements.js +32 -0
  159. package/dist/cjs/render/react/enhancements.js.map +1 -0
  160. package/dist/cjs/render/react/index.js +15 -0
  161. package/dist/cjs/render/react/index.js.map +1 -0
  162. package/dist/cjs/render/slack/assets.js +45 -0
  163. package/dist/cjs/render/slack/assets.js.map +1 -0
  164. package/dist/cjs/render/slack/blocks.js +80 -0
  165. package/dist/cjs/render/slack/blocks.js.map +1 -0
  166. package/dist/cjs/render/slack/envelope.js +551 -0
  167. package/dist/cjs/render/slack/envelope.js.map +1 -0
  168. package/dist/cjs/render/slack/format.js +225 -0
  169. package/dist/cjs/render/slack/format.js.map +1 -0
  170. package/dist/cjs/render/slack/index.js +30 -0
  171. package/dist/cjs/render/slack/index.js.map +1 -0
  172. package/dist/cjs/render/slack/markdown_content.js +409 -0
  173. package/dist/cjs/render/slack/markdown_content.js.map +1 -0
  174. package/dist/cjs/render/text/envelope.js +21 -0
  175. package/dist/cjs/render/text/envelope.js.map +1 -0
  176. package/dist/cjs/render/text/index.js +12 -0
  177. package/dist/cjs/render/text/index.js.map +1 -0
  178. package/dist/cjs/testing/conformance.js +312 -0
  179. package/dist/cjs/testing/conformance.js.map +1 -0
  180. package/dist/cjs/testing/icon.js +248 -0
  181. package/dist/cjs/testing/icon.js.map +1 -0
  182. package/dist/cjs/testing/index.js +18 -0
  183. package/dist/cjs/testing/index.js.map +1 -0
  184. package/dist/cjs/testing/registration.js +142 -0
  185. package/dist/cjs/testing/registration.js.map +1 -0
  186. package/dist/cjs/validate/authoring_schema.js +312 -0
  187. package/dist/cjs/validate/authoring_schema.js.map +1 -0
  188. package/dist/cjs/validate/composition_schema.js +135 -0
  189. package/dist/cjs/validate/composition_schema.js.map +1 -0
  190. package/dist/cjs/validate/index.js +53 -0
  191. package/dist/cjs/validate/index.js.map +1 -0
  192. package/dist/cjs/validate/input_budget.js +156 -0
  193. package/dist/cjs/validate/input_budget.js.map +1 -0
  194. package/dist/cjs/validate/json_schema.js +72 -0
  195. package/dist/cjs/validate/json_schema.js.map +1 -0
  196. package/dist/cjs/validate/node_issues.js +65 -0
  197. package/dist/cjs/validate/node_issues.js.map +1 -0
  198. package/dist/cjs/validate/url.js +116 -0
  199. package/dist/cjs/validate/url.js.map +1 -0
  200. package/dist/cjs/validate/validation.js +165 -0
  201. package/dist/cjs/validate/validation.js.map +1 -0
  202. package/dist/cjs/validate/value_schemas.js +53 -0
  203. package/dist/cjs/validate/value_schemas.js.map +1 -0
  204. package/dist/composition/action_event.d.ts +13 -0
  205. package/dist/composition/action_event.d.ts.map +1 -0
  206. package/dist/composition/action_event.js +8 -0
  207. package/dist/composition/action_event.js.map +1 -0
  208. package/dist/composition/body_node_base.d.ts +72 -0
  209. package/dist/composition/body_node_base.d.ts.map +1 -0
  210. package/dist/composition/body_node_base.js +104 -0
  211. package/dist/composition/body_node_base.js.map +1 -0
  212. package/dist/composition/composition.d.ts +71 -0
  213. package/dist/composition/composition.d.ts.map +1 -0
  214. package/dist/composition/composition.js +8 -0
  215. package/dist/composition/composition.js.map +1 -0
  216. package/dist/composition/error.d.ts +61 -0
  217. package/dist/composition/error.d.ts.map +1 -0
  218. package/dist/composition/error.js +69 -0
  219. package/dist/composition/error.js.map +1 -0
  220. package/dist/composition/index.d.ts +11 -0
  221. package/dist/composition/index.d.ts.map +1 -0
  222. package/dist/composition/index.js +14 -0
  223. package/dist/composition/index.js.map +1 -0
  224. package/dist/composition/map_nodes.d.ts +16 -0
  225. package/dist/composition/map_nodes.d.ts.map +1 -0
  226. package/dist/composition/map_nodes.js +81 -0
  227. package/dist/composition/map_nodes.js.map +1 -0
  228. package/dist/composition/named_color.d.ts +9 -0
  229. package/dist/composition/named_color.d.ts.map +1 -0
  230. package/dist/composition/named_color.js +17 -0
  231. package/dist/composition/named_color.js.map +1 -0
  232. package/dist/composition/node.d.ts +11 -0
  233. package/dist/composition/node.d.ts.map +1 -0
  234. package/dist/composition/node.js +8 -0
  235. package/dist/composition/node.js.map +1 -0
  236. package/dist/composition/one_line.d.ts +7 -0
  237. package/dist/composition/one_line.d.ts.map +1 -0
  238. package/dist/composition/one_line.js +17 -0
  239. package/dist/composition/one_line.js.map +1 -0
  240. package/dist/composition/structured_value.d.ts +27 -0
  241. package/dist/composition/structured_value.d.ts.map +1 -0
  242. package/dist/composition/structured_value.js +18 -0
  243. package/dist/composition/structured_value.js.map +1 -0
  244. package/dist/composition/validation_error.d.ts +33 -0
  245. package/dist/composition/validation_error.d.ts.map +1 -0
  246. package/dist/composition/validation_error.js +35 -0
  247. package/dist/composition/validation_error.js.map +1 -0
  248. package/dist/define/frame.d.ts +155 -0
  249. package/dist/define/frame.d.ts.map +1 -0
  250. package/dist/define/frame.js +27 -0
  251. package/dist/define/frame.js.map +1 -0
  252. package/dist/define/index.d.ts +10 -0
  253. package/dist/define/index.d.ts.map +1 -0
  254. package/dist/define/index.js +13 -0
  255. package/dist/define/index.js.map +1 -0
  256. package/dist/define/markdown_content.d.ts +15 -0
  257. package/dist/define/markdown_content.d.ts.map +1 -0
  258. package/dist/define/markdown_content.js +9 -0
  259. package/dist/define/markdown_content.js.map +1 -0
  260. package/dist/define/primitive_example.d.ts +30 -0
  261. package/dist/define/primitive_example.d.ts.map +1 -0
  262. package/dist/define/primitive_example.js +21 -0
  263. package/dist/define/primitive_example.js.map +1 -0
  264. package/dist/define/primitive_icon.d.ts +11 -0
  265. package/dist/define/primitive_icon.d.ts.map +1 -0
  266. package/dist/define/primitive_icon.js +14 -0
  267. package/dist/define/primitive_icon.js.map +1 -0
  268. package/dist/define/primitive_module.d.ts +435 -0
  269. package/dist/define/primitive_module.d.ts.map +1 -0
  270. package/dist/define/primitive_module.js +112 -0
  271. package/dist/define/primitive_module.js.map +1 -0
  272. package/dist/define/slack_assets.d.ts +28 -0
  273. package/dist/define/slack_assets.d.ts.map +1 -0
  274. package/dist/define/slack_assets.js +8 -0
  275. package/dist/define/slack_assets.js.map +1 -0
  276. package/dist/define/slack_blocks.d.ts +234 -0
  277. package/dist/define/slack_blocks.d.ts.map +1 -0
  278. package/dist/define/slack_blocks.js +8 -0
  279. package/dist/define/slack_blocks.js.map +1 -0
  280. package/dist/define/zod_format.d.ts +33 -0
  281. package/dist/define/zod_format.d.ts.map +1 -0
  282. package/dist/define/zod_format.js +114 -0
  283. package/dist/define/zod_format.js.map +1 -0
  284. package/dist/define/zod_helpers.d.ts +10 -0
  285. package/dist/define/zod_helpers.d.ts.map +1 -0
  286. package/dist/define/zod_helpers.js +22 -0
  287. package/dist/define/zod_helpers.js.map +1 -0
  288. package/dist/entries/html.d.ts +3 -0
  289. package/dist/entries/html.d.ts.map +1 -0
  290. package/dist/entries/html.js +8 -0
  291. package/dist/entries/html.js.map +1 -0
  292. package/dist/entries/index.d.ts +6 -0
  293. package/dist/entries/index.d.ts.map +1 -0
  294. package/dist/entries/index.js +12 -0
  295. package/dist/entries/index.js.map +1 -0
  296. package/dist/entries/markdown.d.ts +3 -0
  297. package/dist/entries/markdown.d.ts.map +1 -0
  298. package/dist/entries/markdown.js +8 -0
  299. package/dist/entries/markdown.js.map +1 -0
  300. package/dist/entries/react.d.ts +5 -0
  301. package/dist/entries/react.d.ts.map +1 -0
  302. package/dist/entries/react.js +11 -0
  303. package/dist/entries/react.js.map +1 -0
  304. package/dist/entries/slack.d.ts +2 -0
  305. package/dist/entries/slack.d.ts.map +1 -0
  306. package/dist/entries/slack.js +8 -0
  307. package/dist/entries/slack.js.map +1 -0
  308. package/dist/entries/text.d.ts +2 -0
  309. package/dist/entries/text.d.ts.map +1 -0
  310. package/dist/entries/text.js +8 -0
  311. package/dist/entries/text.js.map +1 -0
  312. package/dist/pack/capabilities.d.ts +41 -0
  313. package/dist/pack/capabilities.d.ts.map +1 -0
  314. package/dist/pack/capabilities.js +36 -0
  315. package/dist/pack/capabilities.js.map +1 -0
  316. package/dist/pack/compose.d.ts +24 -0
  317. package/dist/pack/compose.d.ts.map +1 -0
  318. package/dist/pack/compose.js +55 -0
  319. package/dist/pack/compose.js.map +1 -0
  320. package/dist/pack/enhancements.d.ts +65 -0
  321. package/dist/pack/enhancements.d.ts.map +1 -0
  322. package/dist/pack/enhancements.js +59 -0
  323. package/dist/pack/enhancements.js.map +1 -0
  324. package/dist/pack/index.d.ts +5 -0
  325. package/dist/pack/index.d.ts.map +1 -0
  326. package/dist/pack/index.js +11 -0
  327. package/dist/pack/index.js.map +1 -0
  328. package/dist/pack/primitive_pack.d.ts +164 -0
  329. package/dist/pack/primitive_pack.d.ts.map +1 -0
  330. package/dist/pack/primitive_pack.js +92 -0
  331. package/dist/pack/primitive_pack.js.map +1 -0
  332. package/dist/render/anchors.d.ts +82 -0
  333. package/dist/render/anchors.d.ts.map +1 -0
  334. package/dist/render/anchors.js +153 -0
  335. package/dist/render/anchors.js.map +1 -0
  336. package/dist/render/context_view.d.ts +10 -0
  337. package/dist/render/context_view.d.ts.map +1 -0
  338. package/dist/render/context_view.js +49 -0
  339. package/dist/render/context_view.js.map +1 -0
  340. package/dist/render/format_display_value.d.ts +20 -0
  341. package/dist/render/format_display_value.d.ts.map +1 -0
  342. package/dist/render/format_display_value.js +137 -0
  343. package/dist/render/format_display_value.js.map +1 -0
  344. package/dist/render/format_number.d.ts +9 -0
  345. package/dist/render/format_number.d.ts.map +1 -0
  346. package/dist/render/format_number.js +42 -0
  347. package/dist/render/format_number.js.map +1 -0
  348. package/dist/render/html/enhancements.d.ts +10 -0
  349. package/dist/render/html/enhancements.d.ts.map +1 -0
  350. package/dist/render/html/enhancements.js +25 -0
  351. package/dist/render/html/enhancements.js.map +1 -0
  352. package/dist/render/html/envelope.d.ts +182 -0
  353. package/dist/render/html/envelope.d.ts.map +1 -0
  354. package/dist/render/html/envelope.js +214 -0
  355. package/dist/render/html/envelope.js.map +1 -0
  356. package/dist/render/html/index.d.ts +3 -0
  357. package/dist/render/html/index.d.ts.map +1 -0
  358. package/dist/render/html/index.js +8 -0
  359. package/dist/render/html/index.js.map +1 -0
  360. package/dist/render/index.d.ts +6 -0
  361. package/dist/render/index.d.ts.map +1 -0
  362. package/dist/render/index.js +11 -0
  363. package/dist/render/index.js.map +1 -0
  364. package/dist/render/layout_check.d.ts +43 -0
  365. package/dist/render/layout_check.d.ts.map +1 -0
  366. package/dist/render/layout_check.js +129 -0
  367. package/dist/render/layout_check.js.map +1 -0
  368. package/dist/render/markdown/builder.d.ts +46 -0
  369. package/dist/render/markdown/builder.d.ts.map +1 -0
  370. package/dist/render/markdown/builder.js +190 -0
  371. package/dist/render/markdown/builder.js.map +1 -0
  372. package/dist/render/markdown/envelope.d.ts +20 -0
  373. package/dist/render/markdown/envelope.d.ts.map +1 -0
  374. package/dist/render/markdown/envelope.js +29 -0
  375. package/dist/render/markdown/envelope.js.map +1 -0
  376. package/dist/render/markdown/format.d.ts +10 -0
  377. package/dist/render/markdown/format.d.ts.map +1 -0
  378. package/dist/render/markdown/format.js +202 -0
  379. package/dist/render/markdown/format.js.map +1 -0
  380. package/dist/render/markdown/index.d.ts +3 -0
  381. package/dist/render/markdown/index.d.ts.map +1 -0
  382. package/dist/render/markdown/index.js +9 -0
  383. package/dist/render/markdown/index.js.map +1 -0
  384. package/dist/render/measure_dom.d.ts +10 -0
  385. package/dist/render/measure_dom.d.ts.map +1 -0
  386. package/dist/render/measure_dom.js +57 -0
  387. package/dist/render/measure_dom.js.map +1 -0
  388. package/dist/render/payload.d.ts +16 -0
  389. package/dist/render/payload.d.ts.map +1 -0
  390. package/dist/render/payload.js +9 -0
  391. package/dist/render/payload.js.map +1 -0
  392. package/dist/render/primitive_dispatch.d.ts +72 -0
  393. package/dist/render/primitive_dispatch.d.ts.map +1 -0
  394. package/dist/render/primitive_dispatch.js +169 -0
  395. package/dist/render/primitive_dispatch.js.map +1 -0
  396. package/dist/render/react/content.d.ts +40 -0
  397. package/dist/render/react/content.d.ts.map +1 -0
  398. package/dist/render/react/content.js +39 -0
  399. package/dist/render/react/content.js.map +1 -0
  400. package/dist/render/react/enhancements.d.ts +15 -0
  401. package/dist/render/react/enhancements.d.ts.map +1 -0
  402. package/dist/render/react/enhancements.js +28 -0
  403. package/dist/render/react/enhancements.js.map +1 -0
  404. package/dist/render/react/index.d.ts +3 -0
  405. package/dist/render/react/index.d.ts.map +1 -0
  406. package/dist/render/react/index.js +9 -0
  407. package/dist/render/react/index.js.map +1 -0
  408. package/dist/render/slack/assets.d.ts +16 -0
  409. package/dist/render/slack/assets.d.ts.map +1 -0
  410. package/dist/render/slack/assets.js +40 -0
  411. package/dist/render/slack/assets.js.map +1 -0
  412. package/dist/render/slack/blocks.d.ts +72 -0
  413. package/dist/render/slack/blocks.d.ts.map +1 -0
  414. package/dist/render/slack/blocks.js +77 -0
  415. package/dist/render/slack/blocks.js.map +1 -0
  416. package/dist/render/slack/envelope.d.ts +52 -0
  417. package/dist/render/slack/envelope.d.ts.map +1 -0
  418. package/dist/render/slack/envelope.js +547 -0
  419. package/dist/render/slack/envelope.js.map +1 -0
  420. package/dist/render/slack/format.d.ts +70 -0
  421. package/dist/render/slack/format.d.ts.map +1 -0
  422. package/dist/render/slack/format.js +209 -0
  423. package/dist/render/slack/format.js.map +1 -0
  424. package/dist/render/slack/index.d.ts +6 -0
  425. package/dist/render/slack/index.d.ts.map +1 -0
  426. package/dist/render/slack/index.js +12 -0
  427. package/dist/render/slack/index.js.map +1 -0
  428. package/dist/render/slack/markdown_content.d.ts +17 -0
  429. package/dist/render/slack/markdown_content.d.ts.map +1 -0
  430. package/dist/render/slack/markdown_content.js +404 -0
  431. package/dist/render/slack/markdown_content.js.map +1 -0
  432. package/dist/render/text/envelope.d.ts +15 -0
  433. package/dist/render/text/envelope.d.ts.map +1 -0
  434. package/dist/render/text/envelope.js +17 -0
  435. package/dist/render/text/envelope.js.map +1 -0
  436. package/dist/render/text/index.d.ts +2 -0
  437. package/dist/render/text/index.d.ts.map +1 -0
  438. package/dist/render/text/index.js +8 -0
  439. package/dist/render/text/index.js.map +1 -0
  440. package/dist/testing/conformance.d.ts +145 -0
  441. package/dist/testing/conformance.d.ts.map +1 -0
  442. package/dist/testing/conformance.js +303 -0
  443. package/dist/testing/conformance.js.map +1 -0
  444. package/dist/testing/icon.d.ts +11 -0
  445. package/dist/testing/icon.d.ts.map +1 -0
  446. package/dist/testing/icon.js +244 -0
  447. package/dist/testing/icon.js.map +1 -0
  448. package/dist/testing/index.d.ts +4 -0
  449. package/dist/testing/index.d.ts.map +1 -0
  450. package/dist/testing/index.js +10 -0
  451. package/dist/testing/index.js.map +1 -0
  452. package/dist/testing/registration.d.ts +32 -0
  453. package/dist/testing/registration.d.ts.map +1 -0
  454. package/dist/testing/registration.js +105 -0
  455. package/dist/testing/registration.js.map +1 -0
  456. package/dist/validate/authoring_schema.d.ts +33 -0
  457. package/dist/validate/authoring_schema.d.ts.map +1 -0
  458. package/dist/validate/authoring_schema.js +306 -0
  459. package/dist/validate/authoring_schema.js.map +1 -0
  460. package/dist/validate/composition_schema.d.ts +80 -0
  461. package/dist/validate/composition_schema.d.ts.map +1 -0
  462. package/dist/validate/composition_schema.js +127 -0
  463. package/dist/validate/composition_schema.js.map +1 -0
  464. package/dist/validate/index.d.ts +9 -0
  465. package/dist/validate/index.d.ts.map +1 -0
  466. package/dist/validate/index.js +15 -0
  467. package/dist/validate/index.js.map +1 -0
  468. package/dist/validate/input_budget.d.ts +35 -0
  469. package/dist/validate/input_budget.d.ts.map +1 -0
  470. package/dist/validate/input_budget.js +151 -0
  471. package/dist/validate/input_budget.js.map +1 -0
  472. package/dist/validate/json_schema.d.ts +32 -0
  473. package/dist/validate/json_schema.d.ts.map +1 -0
  474. package/dist/validate/json_schema.js +68 -0
  475. package/dist/validate/json_schema.js.map +1 -0
  476. package/dist/validate/node_issues.d.ts +12 -0
  477. package/dist/validate/node_issues.d.ts.map +1 -0
  478. package/dist/validate/node_issues.js +61 -0
  479. package/dist/validate/node_issues.js.map +1 -0
  480. package/dist/validate/url.d.ts +50 -0
  481. package/dist/validate/url.d.ts.map +1 -0
  482. package/dist/validate/url.js +107 -0
  483. package/dist/validate/url.js.map +1 -0
  484. package/dist/validate/validation.d.ts +95 -0
  485. package/dist/validate/validation.d.ts.map +1 -0
  486. package/dist/validate/validation.js +157 -0
  487. package/dist/validate/validation.js.map +1 -0
  488. package/dist/validate/value_schemas.d.ts +53 -0
  489. package/dist/validate/value_schemas.d.ts.map +1 -0
  490. package/dist/validate/value_schemas.js +50 -0
  491. package/dist/validate/value_schemas.js.map +1 -0
  492. package/package.json +119 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format_display_value.js","sourceRoot":"","sources":["../../src/render/format_display_value.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport type {\n DisplayValue,\n StructuredValue,\n} from '../composition/structured_value';\n\nimport { formatCompactNumber } from './format_number';\n\n/** Options for {@link formatDisplayValue}. */\nexport interface FormatDisplayValueOptions {\n /** Reference instant for `relativeTime`; defaults to the render time. */\n now?: Date;\n}\n\n/** Narrows a {@link DisplayValue} to the object form. */\nexport const isStructuredValue = (\n value: DisplayValue\n): value is StructuredValue =>\n typeof value === 'object' && value !== null && 'raw' in value;\n\n/** The unformatted value behind a {@link DisplayValue}. */\nexport const rawDisplayValue = (value: DisplayValue): number | string =>\n isStructuredValue(value) ? value.raw : value;\n\n/**\n * Renders a {@link DisplayValue} for display. A bare string passes through; a\n * {@link StructuredValue} is formatted per its `format`.\n *\n * Numeric formats fall back to `String(raw)` for a string `raw` rather than\n * erroring. Locale is fixed to `en-US` and dates render in UTC so the same\n * composition formats identically on every host.\n */\nexport const formatDisplayValue = (\n value: DisplayValue,\n options: FormatDisplayValueOptions = {}\n): string => {\n if (!isStructuredValue(value)) {\n return value;\n }\n const { raw, format, precision, currency } = value;\n switch (format) {\n case 'compact':\n return typeof raw === 'number'\n ? formatCompactNumber(raw, '', precision)\n : String(raw);\n case 'percent':\n return typeof raw === 'number'\n ? intlNumber(raw, precision, { style: 'percent' })\n : String(raw);\n case 'currency':\n return typeof raw === 'number'\n ? intlNumber(raw, precision ?? 2, {\n style: 'currency',\n currency: currency ?? 'USD',\n })\n : String(raw);\n case 'bytes':\n return typeof raw === 'number'\n ? formatBytes(raw, precision)\n : String(raw);\n case 'duration':\n return typeof raw === 'number' ? formatDuration(raw) : String(raw);\n case 'date':\n return formatDate(raw);\n case 'relativeTime':\n return formatRelativeTime(raw, options.now ?? new Date());\n case 'number':\n default:\n return typeof raw === 'number'\n ? intlNumber(raw, precision, {})\n : String(raw);\n }\n};\n\nconst intlNumber = (\n value: number,\n precision: number | undefined,\n options: Intl.NumberFormatOptions\n): string =>\n new Intl.NumberFormat('en-US', {\n ...options,\n ...(precision === undefined\n ? { maximumFractionDigits: 2 }\n : {\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }),\n }).format(value);\n\nconst BYTE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'] as const;\n\nconst formatBytes = (bytes: number, precision?: number): string => {\n let scaled = Math.abs(bytes);\n let unit = 0;\n while (scaled >= 1024 && unit < BYTE_UNITS.length - 1) {\n scaled /= 1024;\n unit += 1;\n }\n const sign = bytes < 0 ? '-' : '';\n const digits = unit === 0 ? 0 : (precision ?? 1);\n return `${sign}${trimFixed(scaled, digits)} ${BYTE_UNITS[unit]}`;\n};\n\nconst formatDuration = (seconds: number): string => {\n const abs = Math.abs(seconds);\n const sign = seconds < 0 ? '-' : '';\n if (abs < 1) {\n return `${sign}${trimFixed(abs * 1000, 1)}ms`;\n }\n if (abs < 60) {\n return `${sign}${trimFixed(abs, 1)}s`;\n }\n const pairs: Array<[number, string, number, string]> = [\n [86400, 'd', 3600, 'h'],\n [3600, 'h', 60, 'm'],\n [60, 'm', 1, 's'],\n ];\n for (const [major, majorUnit, minor, minorUnit] of pairs) {\n if (abs >= major) {\n const majorCount = Math.floor(abs / major);\n const minorCount = Math.floor((abs % major) / minor);\n return minorCount > 0\n ? `${sign}${majorCount}${majorUnit} ${minorCount}${minorUnit}`\n : `${sign}${majorCount}${majorUnit}`;\n }\n }\n return `${sign}${trimFixed(abs, 1)}s`;\n};\n\nconst formatDate = (raw: number | string): string => {\n const date = new Date(raw);\n if (Number.isNaN(date.getTime())) {\n return String(raw);\n }\n return new Intl.DateTimeFormat('en-US', {\n dateStyle: 'medium',\n timeStyle: 'short',\n timeZone: 'UTC',\n }).format(date);\n};\n\nconst formatRelativeTime = (raw: number | string, now: Date): string => {\n const date = new Date(raw);\n if (Number.isNaN(date.getTime())) {\n return String(raw);\n }\n const deltaSeconds = Math.round((date.getTime() - now.getTime()) / 1000);\n const abs = Math.abs(deltaSeconds);\n if (abs < 45) {\n return 'just now';\n }\n const unit =\n abs < 60 * 45\n ? ([Math.max(1, Math.round(abs / 60)), 'm'] as const)\n : abs < 3600 * 22\n ? ([Math.max(1, Math.round(abs / 3600)), 'h'] as const)\n : ([Math.max(1, Math.round(abs / 86400)), 'd'] as const);\n const phrase = `${unit[0]}${unit[1]}`;\n return deltaSeconds < 0 ? `${phrase} ago` : `in ${phrase}`;\n};\n\nconst trimFixed = (value: number, digits: number): string => {\n const fixed = value.toFixed(digits);\n return fixed.includes('.') ? fixed.replace(/\\.?0+$/, '') : fixed;\n};\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `1_284` to `1.3k`, `18_200_000` to `18.2m`, through `b` and `t`, with an
3
+ * optional unit appended. `precision` is the decimals kept, `1` by default.
4
+ *
5
+ * `%` joins without a space because "99.2 %" reads wrong; every other unit gets
6
+ * one.
7
+ */
8
+ export declare const formatCompactNumber: (value: number, unit?: string, precision?: number) => string;
9
+ //# sourceMappingURL=format_number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format_number.d.ts","sourceRoot":"","sources":["../../src/render/format_number.ts"],"names":[],"mappings":"AAyBA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,MAAM,EACb,aAAS,EACT,kBAAa,KACZ,MAeF,CAAC"}
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ // Compact numeric formatting, shared by anything that has to fit a number into
8
+ // a small space — chart axis labels, a `compact` structured display value, a
9
+ // text-surface trend line.
10
+ const TIERS = [
11
+ { size: 1_000_000_000_000, suffix: 't' },
12
+ { size: 1_000_000_000, suffix: 'b' },
13
+ { size: 1_000_000, suffix: 'm' },
14
+ { size: 1_000, suffix: 'k' },
15
+ { size: 1, suffix: '' },
16
+ ];
17
+ // Rounded to `precision` decimals, trailing zeros dropped.
18
+ const trimDecimal = (value, precision) => Number.isInteger(value)
19
+ ? String(value)
20
+ : String(Number(value.toFixed(precision)));
21
+ /**
22
+ * `1_284` to `1.3k`, `18_200_000` to `18.2m`, through `b` and `t`, with an
23
+ * optional unit appended. `precision` is the decimals kept, `1` by default.
24
+ *
25
+ * `%` joins without a space because "99.2 %" reads wrong; every other unit gets
26
+ * one.
27
+ */
28
+ export const formatCompactNumber = (value, unit = '', precision = 1) => {
29
+ const abs = Math.abs(value);
30
+ let index = TIERS.findIndex(({ size }) => abs >= size);
31
+ if (index === -1)
32
+ index = TIERS.length - 1;
33
+ // A value that rounds up to the tier's next power, `999.96k`, reads as `1m`.
34
+ if (index > 0 &&
35
+ Math.abs(Number((value / TIERS[index].size).toFixed(precision))) >= 1_000) {
36
+ index -= 1;
37
+ }
38
+ const { size, suffix } = TIERS[index];
39
+ const scaled = `${trimDecimal(value / size, precision)}${suffix}`;
40
+ return unit === '' ? scaled : `${scaled}${unit === '%' ? '' : ' '}${unit}`;
41
+ };
42
+ //# sourceMappingURL=format_number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format_number.js","sourceRoot":"","sources":["../../src/render/format_number.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,6EAA6E;AAC7E,2BAA2B;AAE3B,MAAM,KAAK,GAAG;IACZ,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE;IACxC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE;IACpC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;IAChC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;CACf,CAAC;AAEX,2DAA2D;AAC3D,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,SAAiB,EAAU,EAAE,CAC/D,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACf,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAa,EACb,IAAI,GAAG,EAAE,EACT,SAAS,GAAG,CAAC,EACL,EAAE;IACV,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IACvD,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,6EAA6E;IAC7E,IACE,KAAK,GAAG,CAAC;QACT,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,EAC1E,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,GAAG,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC;IAElE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;AAC7E,CAAC,CAAC","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\n// Compact numeric formatting, shared by anything that has to fit a number into\n// a small space — chart axis labels, a `compact` structured display value, a\n// text-surface trend line.\n\nconst TIERS = [\n { size: 1_000_000_000_000, suffix: 't' },\n { size: 1_000_000_000, suffix: 'b' },\n { size: 1_000_000, suffix: 'm' },\n { size: 1_000, suffix: 'k' },\n { size: 1, suffix: '' },\n] as const;\n\n// Rounded to `precision` decimals, trailing zeros dropped.\nconst trimDecimal = (value: number, precision: number): string =>\n Number.isInteger(value)\n ? String(value)\n : String(Number(value.toFixed(precision)));\n\n/**\n * `1_284` to `1.3k`, `18_200_000` to `18.2m`, through `b` and `t`, with an\n * optional unit appended. `precision` is the decimals kept, `1` by default.\n *\n * `%` joins without a space because \"99.2 %\" reads wrong; every other unit gets\n * one.\n */\nexport const formatCompactNumber = (\n value: number,\n unit = '',\n precision = 1\n): string => {\n const abs = Math.abs(value);\n let index = TIERS.findIndex(({ size }) => abs >= size);\n if (index === -1) index = TIERS.length - 1;\n // A value that rounds up to the tier's next power, `999.96k`, reads as `1m`.\n if (\n index > 0 &&\n Math.abs(Number((value / TIERS[index]!.size).toFixed(precision))) >= 1_000\n ) {\n index -= 1;\n }\n const { size, suffix } = TIERS[index]!;\n const scaled = `${trimDecimal(value / size, precision)}${suffix}`;\n\n return unit === '' ? scaled : `${scaled}${unit === '%' ? '' : ' '}${unit}`;\n};\n"]}
@@ -0,0 +1,10 @@
1
+ import { type EnhancementDefinition } from '../../pack/enhancements.js';
2
+ export type { EnhancementDefinition };
3
+ /** The scripts of `applied`, in order, each in its own function scope. */
4
+ export declare const enhancementScript: (applied: readonly EnhancementDefinition[]) => string;
5
+ /**
6
+ * Binds `root` to the section that contains the emitted `<script>`. Inside a
7
+ * shadow root `document.currentScript` is `null`, so there it warns instead.
8
+ */
9
+ export declare const embedScript: (body: string) => string;
10
+ //# sourceMappingURL=enhancements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhancements.d.ts","sourceRoot":"","sources":["../../../src/render/html/enhancements.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,GAC5B,SAAS,SAAS,qBAAqB,EAAE,KACxC,MAGY,CAAC;AAEhB;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAS7B,CAAC"}
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { scopeScript, } from '../../pack/enhancements.js';
8
+ /** The scripts of `applied`, in order, each in its own function scope. */
9
+ export const enhancementScript = (applied) => applied
10
+ .flatMap(({ script }) => (script ? [scopeScript(script)] : []))
11
+ .join('\n');
12
+ /**
13
+ * Binds `root` to the section that contains the emitted `<script>`. Inside a
14
+ * shadow root `document.currentScript` is `null`, so there it warns instead.
15
+ */
16
+ export const embedScript = (body) => [
17
+ '(function (root) {',
18
+ 'if (!root) {',
19
+ `console.warn("isomer: enhancement script has no root; render with scripts: 'host' and call runEnhancementScript");`,
20
+ 'return;',
21
+ '}',
22
+ body,
23
+ '})(document.currentScript && document.currentScript.parentElement);',
24
+ ].join('\n');
25
+ //# sourceMappingURL=enhancements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhancements.js","sourceRoot":"","sources":["../../../src/render/html/enhancements.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAIjC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAAyC,EACjC,EAAE,CACV,OAAO;KACJ,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC9D,IAAI,CAAC,IAAI,CAAC,CAAC;AAEhB;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAClD;IACE,oBAAoB;IACpB,cAAc;IACd,oHAAoH;IACpH,SAAS;IACT,GAAG;IACH,IAAI;IACJ,qEAAqE;CACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport {\n type EnhancementDefinition,\n scopeScript,\n} from '../../pack/enhancements';\n\nexport type { EnhancementDefinition };\n\n/** The scripts of `applied`, in order, each in its own function scope. */\nexport const enhancementScript = (\n applied: readonly EnhancementDefinition[]\n): string =>\n applied\n .flatMap(({ script }) => (script ? [scopeScript(script)] : []))\n .join('\\n');\n\n/**\n * Binds `root` to the section that contains the emitted `<script>`. Inside a\n * shadow root `document.currentScript` is `null`, so there it warns instead.\n */\nexport const embedScript = (body: string): string =>\n [\n '(function (root) {',\n 'if (!root) {',\n `console.warn(\"isomer: enhancement script has no root; render with scripts: 'host' and call runEnhancementScript\");`,\n 'return;',\n '}',\n body,\n '})(document.currentScript && document.currentScript.parentElement);',\n ].join('\\n');\n"]}
@@ -0,0 +1,182 @@
1
+ import { type ChildNodeWalker } from '../../composition/body_node_base.js';
2
+ import type { Composition } from '../../composition/composition.js';
3
+ import type { RenderTheme } from '../../composition/named_color.js';
4
+ import type { ValidationError } from '../../composition/validation_error.js';
5
+ import type { AnyPrimitiveDefinition, PrimitiveNode, PrimitiveStyleCollectionContext, PrimitiveStyleCollector, StyledRenderContext, StyleHandle } from '../../define/primitive_module.js';
6
+ import { type CheckedValidationResult, type ValidationErrorMode } from '../../validate/validation.js';
7
+ import { type PayloadMeasurement } from '../payload.js';
8
+ import { type ReactContentDispatcher } from '../react/content.js';
9
+ import { type EnhancementDefinition } from './enhancements.js';
10
+ /** Knobs for the HTML surface. Every field defaults, so `{}` is valid. */
11
+ export interface HTMLRenderOptions {
12
+ /** Overrides {@link Composition.theme}; `auto` when neither is set. */
13
+ theme?: RenderTheme;
14
+ /** Drops whitespace between tags that spans a line break, leaving `<pre>`, `<script>`, `<style>`, and `<textarea>` content intact. Defaults to `true`. */
15
+ minify?: boolean;
16
+ /** Adds the `fluid` wrapper class and reaches the pack as {@link PrimitiveStyleCollectionContext.fluid}; the adapter decides what it changes. */
17
+ fluid?: boolean;
18
+ /** Adds the `framed` wrapper class the adapter styles as a frame. Defaults to `true`. */
19
+ framed?: boolean;
20
+ /**
21
+ * Renders the composition's title and subtitle. Defaults to `true`. Set
22
+ * `false` when the embedding host already shows the title itself — the title
23
+ * still backs the wrapper's `aria-label`.
24
+ */
25
+ heading?: boolean;
26
+ /** Whether the collected CSS is inlined as a `<style>` element. Defaults to `'inline'`. */
27
+ css?: 'inline' | 'separate';
28
+ /**
29
+ * Who runs the enhancement script. Defaults to `'embedded'`: `html` carries
30
+ * a `<script>` that finds its own `.isomer` section when the page parses it.
31
+ *
32
+ * `'embedded'` never runs inside a shadow root, or anywhere the host inserts
33
+ * `html` itself (`innerHTML`, a React tree). Use `'host'` there: `html`
34
+ * carries no `<script>`, and the host calls `runEnhancementScript(js,
35
+ * section)` after inserting it.
36
+ */
37
+ scripts?: 'embedded' | 'host';
38
+ /** Defaults to collecting into {@link HTMLRenderResult.validationErrors}; `'throw'` raises instead. Input the budget refused raises in either mode. */
39
+ onValidationError?: ValidationErrorMode;
40
+ /** Opt-in by {@link EnhancementDefinition.id}. One whose content gate does not match the body is dropped. */
41
+ enhancements?: readonly string[];
42
+ /** `true` renders node anchors whether or not an enhancement asks for them, e.g. for tests. `false` cannot turn off anchors an enhancement needs. */
43
+ anchors?: boolean;
44
+ /**
45
+ * Resolves `light-dark(…)` in the stylesheet to one scheme's value. A browser
46
+ * resolves it itself; an image is one static frame, so the `snapshot` surface sets
47
+ * it.
48
+ */
49
+ scheme?: 'light' | 'dark';
50
+ }
51
+ /**
52
+ * One rendered HTML payload.
53
+ *
54
+ * `body` is the primitive markup alone; `html` adds the wrapper element, on
55
+ * the default `css: 'inline'` a `<style>`, and on the default
56
+ * `scripts: 'embedded'` a `<script>`. `css` and `js` are populated either way.
57
+ * `validationErrors` are the messages that survived
58
+ * {@link HTMLRenderOptions.onValidationError}.
59
+ */
60
+ export interface HTMLRenderResult {
61
+ html: string;
62
+ css: string;
63
+ /**
64
+ * The enhancement script as a function body over `root`, or `''`. Under
65
+ * `scripts: 'embedded'` the `<script>` in `html` wraps the same body; under
66
+ * `'host'` the host runs it with `runEnhancementScript`. It is never a
67
+ * complete script on its own.
68
+ */
69
+ js: string;
70
+ body: string;
71
+ measurement: PayloadMeasurement;
72
+ validationErrors: ValidationError[];
73
+ }
74
+ /**
75
+ * A pack's HTML entry point: the React renderer plus the style pass that runs
76
+ * ahead of it.
77
+ */
78
+ export interface HTMLRenderDispatcher<TNode extends PrimitiveNode, TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector, TContext = StyledRenderContext> extends ReactContentDispatcher<TNode, TContext> {
79
+ /** The whole composition's inventory: a child walker built from one pack's definitions cannot descend into another pack's container. */
80
+ readonly definitions: readonly AnyPrimitiveDefinition[];
81
+ /** One node's style pass, driven by {@link HTMLStyleAdapter.collectViewStyles} rather than called by the sdk. */
82
+ collectStyles(node: TNode, collector: TCollector, context: PrimitiveStyleCollectionContext): void;
83
+ }
84
+ /**
85
+ * The composition's child walker and the enhancements every loaded pack
86
+ * declared. Threaded into the style adapter so content-gating can see a
87
+ * table nested inside a container from another package.
88
+ */
89
+ export interface HTMLEnhancementScope {
90
+ walk: ChildNodeWalker;
91
+ definitions: readonly EnhancementDefinition[];
92
+ }
93
+ /**
94
+ * How a pack turns its nodes into CSS. Optional overall — without an adapter
95
+ * the render still produces markup, just with no class names and an empty
96
+ * `TContext`.
97
+ */
98
+ export interface HTMLStyleAdapter<TNode extends PrimitiveNode = PrimitiveNode, TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector, TContext = StyledRenderContext> {
99
+ /**
100
+ * Names the collector shape {@link HTMLStyleAdapter.createCollector} returns, so a runtime can
101
+ * reject a pack whose `collectStyles` hooks were written against a different one.
102
+ */
103
+ styleCollector?: string;
104
+ /** One collector per render, shared by every other hook here and by both render passes. */
105
+ createCollector(options: HTMLRenderOptions): TCollector;
106
+ /**
107
+ * Settles options that depend on the composition, before anything reads them.
108
+ *
109
+ * Needed by an adapter whose look is chosen per render: deciding `framed`
110
+ * from the body has to happen before the wrapper class is written, not while
111
+ * CSS is collected.
112
+ */
113
+ resolveOptions?(composition: Composition<TNode>, options: HTMLRenderOptions): HTMLRenderOptions;
114
+ /**
115
+ * The `.isomer` / `.isomer.framed` / `.isomer.fluid` rules around a rendered composition.
116
+ * Named for the wrapper rather than the frame, which the sdk reserves for the
117
+ * document a snapshot is drawn inside.
118
+ */
119
+ collectWrapperStyles?(collector: TCollector, options: HTMLRenderOptions): void;
120
+ /** Walks the body into the collector, usually through {@link HTMLRenderDispatcher.collectStyles}. Runs before any markup exists. */
121
+ collectViewStyles?(composition: Composition<TNode>, dispatcher: HTMLRenderDispatcher<TNode, TCollector, TContext>, collector: TCollector, context: PrimitiveStyleCollectionContext, options: HTMLRenderOptions, scope: HTMLEnhancementScope): void;
122
+ /** Runs once the collection pass has rendered the body, for styles only a renderer can discover. That markup is discarded. */
123
+ collectAfterRender?(composition: Composition<TNode>, collector: TCollector, options: HTMLRenderOptions): void;
124
+ /**
125
+ * Builds the render context handed to every `react` renderer. Called once
126
+ * per pass, so an adapter that behaves differently while collecting returns
127
+ * a different context then. Must be complete, because `TContext` is the
128
+ * pack's own type. The sdk never writes to it: whether renderers anchor
129
+ * is the surface's decision, whatever the context's `anchors` says.
130
+ */
131
+ createRenderContext(collector: TCollector, options: HTMLRenderOptions): TContext;
132
+ /** The collected CSS as text, with no `<style>` wrapper; the sdk adds one when `css` is `'inline'`. */
133
+ renderStyles(collector: TCollector, options: HTMLRenderOptions): string;
134
+ /**
135
+ * Whether `handle` belongs to this adapter's stylesheet.
136
+ *
137
+ * Unused on a lone adapter. A runtime composing several packs' adapters
138
+ * routes each handle to its owner, so CSS is neither duplicated nor
139
+ * rendered against the wrong theme. An adapter that cannot answer this
140
+ * cannot be combined with another.
141
+ */
142
+ ownsHandle?(handle: StyleHandle): boolean;
143
+ /**
144
+ * Appended after {@link HTMLDispatcherRenderOptions.scriptText} into the
145
+ * render's one script. A function body with `root` in scope, under the same
146
+ * rules as {@link EnhancementDefinition.script}.
147
+ */
148
+ getScriptText?(composition: Composition<TNode>, options: HTMLRenderOptions, scope: HTMLEnhancementScope): string;
149
+ }
150
+ /** What {@link renderHTMLWithDispatcher} needs beyond the composition. */
151
+ export interface HTMLDispatcherRenderOptions<TNode extends PrimitiveNode, TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector, TContext = StyledRenderContext> {
152
+ dispatcher: HTMLRenderDispatcher<TNode, TCollector, TContext>;
153
+ /** Runs once before rendering, which draws the composition it returns; {@link HTMLRenderOptions.onValidationError} decides what becomes of its errors. Defaults to `createCompositionValidator(dispatcher.definitions)`. */
154
+ validate?: (composition: Composition<TNode>) => CheckedValidationResult<TNode>;
155
+ options?: HTMLRenderOptions;
156
+ /** Used only when the composition has neither `meta.ariaLabel` nor a `title`. Defaults to `'View'`. */
157
+ defaultAriaLabel?: string;
158
+ styleAdapter?: HTMLStyleAdapter<TNode, TCollector, TContext>;
159
+ /**
160
+ * Emitted unescaped ahead of {@link HTMLStyleAdapter.getScriptText}. A
161
+ * function body with `root` in scope, under the same rules as
162
+ * {@link EnhancementDefinition.script}.
163
+ */
164
+ scriptText?: string;
165
+ /**
166
+ * Progressive enhancements declared by the packs this render was composed
167
+ * from. The render resolves {@link HTMLRenderOptions.enhancements} against
168
+ * them once, hands every renderer the set as `context.enhancements`, and
169
+ * emits each resolved one's script.
170
+ */
171
+ enhancementDefinitions?: readonly EnhancementDefinition[];
172
+ }
173
+ /**
174
+ * Renders a composition to standalone HTML: the wrapper element, the pack's
175
+ * markup, and its CSS either inlined or returned separately.
176
+ *
177
+ * Runs the pack twice when a style adapter is present — once to collect
178
+ * styles, once with the render context those styles produced — so a
179
+ * `renderReact` implementation must be free of side effects.
180
+ */
181
+ export declare const renderHTMLWithDispatcher: <TNode extends PrimitiveNode, TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector, TContext = StyledRenderContext>(input: Composition<TNode>, { dispatcher, validate, options: rawOptions, defaultAriaLabel, styleAdapter, scriptText, enhancementDefinitions, }: HTMLDispatcherRenderOptions<TNode, TCollector, TContext>) => HTMLRenderResult;
182
+ //# sourceMappingURL=envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../../src/render/html/envelope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,214 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { createElement, Fragment } from 'react';
8
+ import { renderToStaticMarkup } from 'react-dom/server';
9
+ import { parse, } from 'acorn';
10
+ import { createChildNodeWalker, } from '../../composition/body_node_base.js';
11
+ import { EMBEDDED_SCRIPT_ATTRIBUTE, resolveEnhancements, scopeScript, } from '../../pack/enhancements.js';
12
+ import { compositionToRender, createCompositionValidator, enforceValidationMode, } from '../../validate/validation.js';
13
+ import { withAnchors } from '../anchors.js';
14
+ import { contextWith } from '../context_view.js';
15
+ import { byteLength } from '../payload.js';
16
+ import { renderCompositionContent, wrapCompositionContent, } from '../react/content.js';
17
+ import { embedScript, enhancementScript, } from './enhancements.js';
18
+ /**
19
+ * Renders a composition to standalone HTML: the wrapper element, the pack's
20
+ * markup, and its CSS either inlined or returned separately.
21
+ *
22
+ * Runs the pack twice when a style adapter is present — once to collect
23
+ * styles, once with the render context those styles produced — so a
24
+ * `renderReact` implementation must be free of side effects.
25
+ */
26
+ export const renderHTMLWithDispatcher = (input, { dispatcher, validate = createCompositionValidator(dispatcher.definitions), options: rawOptions = {}, defaultAriaLabel = 'View', styleAdapter, scriptText = '', enhancementDefinitions = [], }) => {
27
+ const validation = validate(input);
28
+ const composition = compositionToRender(validation);
29
+ // Resolved before the validation mode is read, so an adapter can derive
30
+ // `onValidationError`.
31
+ const options = styleAdapter?.resolveOptions?.(composition, rawOptions) ?? rawOptions;
32
+ enforceValidationMode(validation, options.onValidationError);
33
+ const framed = options.framed ?? true;
34
+ const heading = options.heading ?? true;
35
+ const theme = options.theme ?? composition.theme ?? 'auto';
36
+ const cssMode = options.css ?? 'inline';
37
+ const scriptsMode = options.scripts ?? 'embedded';
38
+ const styleState = styleAdapter?.createCollector(options);
39
+ const enhancementScope = {
40
+ walk: createChildNodeWalker(dispatcher.definitions),
41
+ definitions: enhancementDefinitions,
42
+ };
43
+ const applied = resolveEnhancements(composition.body, enhancementScope.walk, enhancementDefinitions, options.enhancements ?? []);
44
+ const enhancements = new Set(applied.map(({ id }) => id));
45
+ const anchors = options.anchors === true || applied.some(({ anchors }) => anchors);
46
+ const enhanced = (context) => contextWith(context, 'enhancements', enhancements);
47
+ if (styleState) {
48
+ styleAdapter?.collectWrapperStyles?.(styleState, options);
49
+ styleAdapter?.collectViewStyles?.(composition, dispatcher, styleState, { fluid: Boolean(options.fluid) }, options, enhancementScope);
50
+ const collectionContext = enhanced(styleAdapter?.createRenderContext(styleState, options));
51
+ withAnchors(anchors, () => renderToStaticMarkup(createElement(() => renderCompositionContent(composition, dispatcher, collectionContext, {
52
+ heading,
53
+ }))));
54
+ styleAdapter?.collectAfterRender?.(composition, styleState, options);
55
+ }
56
+ const renderContext = enhanced(styleState && styleAdapter
57
+ ? styleAdapter.createRenderContext(styleState, options)
58
+ : // No adapter means no class names and no css vars to resolve.
59
+ {});
60
+ const cssText = styleState && styleAdapter
61
+ ? styleAdapter.renderStyles(styleState, options)
62
+ : '';
63
+ const adapterScriptText = styleAdapter?.getScriptText?.(composition, options, enhancementScope) ?? '';
64
+ const js = [
65
+ ...[scriptText, adapterScriptText].filter(Boolean).map(scopeScript),
66
+ enhancementScript(applied),
67
+ ]
68
+ .filter(Boolean)
69
+ .join('\n');
70
+ const embeddedScript = js && scriptsMode === 'embedded' ? embedScript(js) : '';
71
+ const body = withAnchors(anchors, () => renderToStaticMarkup(createElement(() => renderCompositionContent(composition, dispatcher, renderContext, {
72
+ heading,
73
+ }))));
74
+ const inlineCss = cssMode === 'inline' ? embedCss(cssText) : '';
75
+ const inlineJs = embeddedScript ? embedJs(embeddedScript) : '';
76
+ const raw = renderToStaticMarkup(createElement((RenderedHtmlView), {
77
+ composition,
78
+ theme,
79
+ fluid: Boolean(options.fluid),
80
+ framed,
81
+ styleText: inlineCss || undefined,
82
+ scriptText: inlineJs || undefined,
83
+ defaultAriaLabel,
84
+ body,
85
+ }));
86
+ const html = options.minify === false ? raw : minifyHtml(raw);
87
+ // Inline payloads are measured as emitted, escapes included.
88
+ const inlineCssBytes = byteLength(inlineCss);
89
+ const inlineJsBytes = byteLength(inlineJs);
90
+ const separateCssBytes = cssMode === 'inline' ? 0 : byteLength(cssText);
91
+ const separateJsBytes = embeddedScript ? 0 : byteLength(js);
92
+ return {
93
+ html,
94
+ css: cssText,
95
+ js,
96
+ body,
97
+ measurement: {
98
+ html: byteLength(html) - inlineCssBytes - inlineJsBytes,
99
+ css: inlineCssBytes + separateCssBytes,
100
+ js: inlineJsBytes + separateJsBytes,
101
+ total: byteLength(html) + separateCssBytes + separateJsBytes,
102
+ },
103
+ validationErrors: validation.errors,
104
+ };
105
+ };
106
+ // Only `</style` ends a `<style>`. `\/` is a CSS escape for `/`, so a string
107
+ // holding it keeps its value.
108
+ const embedCss = (css) => css.replace(/<\/(?=style)/gi, '<\\/');
109
+ // Tagged templates observe raw spelling and reuse the same frozen object per site.
110
+ const embedJs = (js) => {
111
+ if (!/<\/script|<!--/i.test(js))
112
+ return js;
113
+ const comments = [];
114
+ const tree = parse(js, { ecmaVersion: 'latest', onComment: comments });
115
+ const sites = [];
116
+ const identifiers = new Set();
117
+ const pending = [tree];
118
+ while (pending.length) {
119
+ const node = pending.pop();
120
+ if (node.type === 'Identifier' && node.name)
121
+ identifiers.add(node.name);
122
+ if (node.type === 'TaggedTemplateExpression' &&
123
+ node.quasi.quasis.some(({ value: { raw } }) => /<\/script|<!--/i.test(raw)))
124
+ sites.push(node);
125
+ for (const value of Object.values(node)) {
126
+ for (const child of Array.isArray(value) ? value : [value]) {
127
+ if (child &&
128
+ typeof child === 'object' &&
129
+ 'type' in child &&
130
+ 'start' in child) {
131
+ pending.push(child);
132
+ }
133
+ }
134
+ }
135
+ }
136
+ sites.sort((a, b) => a.start - b.start);
137
+ let prefix = '__isomerTemplate';
138
+ while ([...identifiers].some((name) => name.startsWith(prefix)))
139
+ prefix += '_';
140
+ const literal = (value) => value === null ? 'void 0' : JSON.stringify(value).replace(/</g, '\\u003c');
141
+ const rewrite = (start, end) => {
142
+ let cursor = start;
143
+ let result = '';
144
+ const edits = [
145
+ ...sites.map((site, index) => ({
146
+ ...site,
147
+ index,
148
+ comment: undefined,
149
+ })),
150
+ ...comments
151
+ .filter(({ start }) => /^(?:<!--|-->)/.test(js.slice(start, start + 4)))
152
+ .map((comment) => ({ ...comment, index: -1, comment: comment.value })),
153
+ ].sort((a, b) => a.start - b.start);
154
+ for (const edit of edits) {
155
+ if (edit.start < cursor || edit.end > end)
156
+ continue;
157
+ result += js.slice(cursor, edit.start);
158
+ if (edit.comment !== undefined) {
159
+ result += `//${edit.comment}`;
160
+ }
161
+ else {
162
+ const site = sites[edit.index];
163
+ const { tag, quasi: { quasis, expressions }, } = site;
164
+ const cooked = quasis
165
+ .map(({ value }) => literal(value.cooked))
166
+ .join(',');
167
+ const raw = quasis.map(({ value }) => literal(value.raw)).join(',');
168
+ const cache = `${prefix}${edit.index}`;
169
+ const template = `${cache} ??= ${prefix}Freeze(${prefix}Define([${cooked}], 'raw', {value:${prefix}Freeze([${raw}])}))`;
170
+ const args = expressions.map((expression) => rewrite(expression.start, expression.end));
171
+ result += `(${rewrite(tag.start, tag.end)})(${template}${args.map((arg) => `,(${arg})`).join('')})`;
172
+ }
173
+ cursor = edit.end;
174
+ }
175
+ return result + js.slice(cursor, end);
176
+ };
177
+ const rewritten = rewrite(0, js.length);
178
+ const scoped = sites.length
179
+ ? `(function(){const ${prefix}Freeze=Object.freeze,${prefix}Define=Object.defineProperty;let ${sites.map((_site, index) => `${prefix}${index}`).join(',')};\n${rewritten}\n})();`
180
+ : rewritten;
181
+ return scoped
182
+ .replace(/<\/(?=script)/gi, '<\\/')
183
+ .replace(/<!--/g, (_match, at, source) => escapedBy(source, at) ? 'x3C!--' : '\\x3C!--');
184
+ };
185
+ const escapedBy = (source, at) => {
186
+ let slashes = 0;
187
+ while (source[at - slashes - 1] === '\\')
188
+ slashes += 1;
189
+ return slashes % 2 === 1;
190
+ };
191
+ const RenderedHtmlView = ({ composition, theme, fluid, framed, styleText, scriptText, defaultAriaLabel, body, }) => wrapCompositionContent(createElement(Fragment, null, styleText
192
+ ? createElement('style', {
193
+ key: 'style',
194
+ dangerouslySetInnerHTML: { __html: styleText },
195
+ })
196
+ : null, createElement('div', {
197
+ key: 'body',
198
+ dangerouslySetInnerHTML: { __html: body },
199
+ }), scriptText
200
+ ? createElement('script', {
201
+ key: 'script',
202
+ [EMBEDDED_SCRIPT_ATTRIBUTE]: '',
203
+ dangerouslySetInnerHTML: { __html: scriptText },
204
+ })
205
+ : null), composition, { framed, fluid, theme, defaultAriaLabel });
206
+ // Whitespace inside `pre`, `script`, `style`, and `textarea` is content, so
207
+ // those elements match whole and pass through. Elsewhere only whitespace
208
+ // spanning a line break is collapsed: a single space between inline elements
209
+ // (`<b>a</b> <i>b</i>`) is authored content.
210
+ const MINIFY_RE = /<(pre|script|style|textarea)[\s>][\s\S]*?(?:<\/\1\s*>|$)|(?<=>)\s+(?=<)/gi;
211
+ const minifyHtml = (value) => value
212
+ .replace(MINIFY_RE, (match, element) => element || !match.includes('\n') ? match : '')
213
+ .trim();
214
+ //# sourceMappingURL=envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../../src/render/html/envelope.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { createElement, Fragment, type ReactNode } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport {\n type Comment as JavaScriptComment,\n type Node as JavaScriptNode,\n parse,\n} from 'acorn';\n\nimport {\n type ChildNodeWalker,\n createChildNodeWalker,\n} from '../../composition/body_node_base';\nimport type { Composition } from '../../composition/composition';\nimport type { RenderTheme } from '../../composition/named_color';\nimport type { ValidationError } from '../../composition/validation_error';\nimport type {\n AnyPrimitiveDefinition,\n PrimitiveNode,\n PrimitiveStyleCollectionContext,\n PrimitiveStyleCollector,\n StyledRenderContext,\n StyleHandle,\n} from '../../define/primitive_module';\nimport {\n EMBEDDED_SCRIPT_ATTRIBUTE,\n resolveEnhancements,\n scopeScript,\n} from '../../pack/enhancements';\nimport {\n type CheckedValidationResult,\n compositionToRender,\n createCompositionValidator,\n enforceValidationMode,\n type ValidationErrorMode,\n} from '../../validate/validation';\nimport { withAnchors } from '../anchors';\nimport { contextWith } from '../context_view';\nimport { byteLength, type PayloadMeasurement } from '../payload';\nimport {\n type ReactContentDispatcher,\n renderCompositionContent,\n wrapCompositionContent,\n} from '../react/content';\n\nimport {\n embedScript,\n type EnhancementDefinition,\n enhancementScript,\n} from './enhancements';\n\n/** Knobs for the HTML surface. Every field defaults, so `{}` is valid. */\nexport interface HTMLRenderOptions {\n /** Overrides {@link Composition.theme}; `auto` when neither is set. */\n theme?: RenderTheme;\n /** Drops whitespace between tags that spans a line break, leaving `<pre>`, `<script>`, `<style>`, and `<textarea>` content intact. Defaults to `true`. */\n minify?: boolean;\n /** Adds the `fluid` wrapper class and reaches the pack as {@link PrimitiveStyleCollectionContext.fluid}; the adapter decides what it changes. */\n fluid?: boolean;\n /** Adds the `framed` wrapper class the adapter styles as a frame. Defaults to `true`. */\n framed?: boolean;\n /**\n * Renders the composition's title and subtitle. Defaults to `true`. Set\n * `false` when the embedding host already shows the title itself — the title\n * still backs the wrapper's `aria-label`.\n */\n heading?: boolean;\n /** Whether the collected CSS is inlined as a `<style>` element. Defaults to `'inline'`. */\n css?: 'inline' | 'separate';\n /**\n * Who runs the enhancement script. Defaults to `'embedded'`: `html` carries\n * a `<script>` that finds its own `.isomer` section when the page parses it.\n *\n * `'embedded'` never runs inside a shadow root, or anywhere the host inserts\n * `html` itself (`innerHTML`, a React tree). Use `'host'` there: `html`\n * carries no `<script>`, and the host calls `runEnhancementScript(js,\n * section)` after inserting it.\n */\n scripts?: 'embedded' | 'host';\n /** Defaults to collecting into {@link HTMLRenderResult.validationErrors}; `'throw'` raises instead. Input the budget refused raises in either mode. */\n onValidationError?: ValidationErrorMode;\n /** Opt-in by {@link EnhancementDefinition.id}. One whose content gate does not match the body is dropped. */\n enhancements?: readonly string[];\n /** `true` renders node anchors whether or not an enhancement asks for them, e.g. for tests. `false` cannot turn off anchors an enhancement needs. */\n anchors?: boolean;\n /**\n * Resolves `light-dark(…)` in the stylesheet to one scheme's value. A browser\n * resolves it itself; an image is one static frame, so the `snapshot` surface sets\n * it.\n */\n scheme?: 'light' | 'dark';\n}\n\n/**\n * One rendered HTML payload.\n *\n * `body` is the primitive markup alone; `html` adds the wrapper element, on\n * the default `css: 'inline'` a `<style>`, and on the default\n * `scripts: 'embedded'` a `<script>`. `css` and `js` are populated either way.\n * `validationErrors` are the messages that survived\n * {@link HTMLRenderOptions.onValidationError}.\n */\nexport interface HTMLRenderResult {\n html: string;\n css: string;\n /**\n * The enhancement script as a function body over `root`, or `''`. Under\n * `scripts: 'embedded'` the `<script>` in `html` wraps the same body; under\n * `'host'` the host runs it with `runEnhancementScript`. It is never a\n * complete script on its own.\n */\n js: string;\n body: string;\n measurement: PayloadMeasurement;\n validationErrors: ValidationError[];\n}\n\n/**\n * A pack's HTML entry point: the React renderer plus the style pass that runs\n * ahead of it.\n */\nexport interface HTMLRenderDispatcher<\n TNode extends PrimitiveNode,\n TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector,\n TContext = StyledRenderContext,\n> extends ReactContentDispatcher<TNode, TContext> {\n /** The whole composition's inventory: a child walker built from one pack's definitions cannot descend into another pack's container. */\n readonly definitions: readonly AnyPrimitiveDefinition[];\n /** One node's style pass, driven by {@link HTMLStyleAdapter.collectViewStyles} rather than called by the sdk. */\n collectStyles(\n node: TNode,\n collector: TCollector,\n context: PrimitiveStyleCollectionContext\n ): void;\n}\n\n/**\n * The composition's child walker and the enhancements every loaded pack\n * declared. Threaded into the style adapter so content-gating can see a\n * table nested inside a container from another package.\n */\nexport interface HTMLEnhancementScope {\n walk: ChildNodeWalker;\n definitions: readonly EnhancementDefinition[];\n}\n\n/**\n * How a pack turns its nodes into CSS. Optional overall — without an adapter\n * the render still produces markup, just with no class names and an empty\n * `TContext`.\n */\nexport interface HTMLStyleAdapter<\n TNode extends PrimitiveNode = PrimitiveNode,\n TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector,\n TContext = StyledRenderContext,\n> {\n /**\n * Names the collector shape {@link HTMLStyleAdapter.createCollector} returns, so a runtime can\n * reject a pack whose `collectStyles` hooks were written against a different one.\n */\n styleCollector?: string;\n /** One collector per render, shared by every other hook here and by both render passes. */\n createCollector(options: HTMLRenderOptions): TCollector;\n /**\n * Settles options that depend on the composition, before anything reads them.\n *\n * Needed by an adapter whose look is chosen per render: deciding `framed`\n * from the body has to happen before the wrapper class is written, not while\n * CSS is collected.\n */\n resolveOptions?(\n composition: Composition<TNode>,\n options: HTMLRenderOptions\n ): HTMLRenderOptions;\n /**\n * The `.isomer` / `.isomer.framed` / `.isomer.fluid` rules around a rendered composition.\n * Named for the wrapper rather than the frame, which the sdk reserves for the\n * document a snapshot is drawn inside.\n */\n collectWrapperStyles?(\n collector: TCollector,\n options: HTMLRenderOptions\n ): void;\n /** Walks the body into the collector, usually through {@link HTMLRenderDispatcher.collectStyles}. Runs before any markup exists. */\n collectViewStyles?(\n composition: Composition<TNode>,\n dispatcher: HTMLRenderDispatcher<TNode, TCollector, TContext>,\n collector: TCollector,\n context: PrimitiveStyleCollectionContext,\n options: HTMLRenderOptions,\n scope: HTMLEnhancementScope\n ): void;\n /** Runs once the collection pass has rendered the body, for styles only a renderer can discover. That markup is discarded. */\n collectAfterRender?(\n composition: Composition<TNode>,\n collector: TCollector,\n options: HTMLRenderOptions\n ): void;\n /**\n * Builds the render context handed to every `react` renderer. Called once\n * per pass, so an adapter that behaves differently while collecting returns\n * a different context then. Must be complete, because `TContext` is the\n * pack's own type. The sdk never writes to it: whether renderers anchor\n * is the surface's decision, whatever the context's `anchors` says.\n */\n createRenderContext(\n collector: TCollector,\n options: HTMLRenderOptions\n ): TContext;\n /** The collected CSS as text, with no `<style>` wrapper; the sdk adds one when `css` is `'inline'`. */\n renderStyles(collector: TCollector, options: HTMLRenderOptions): string;\n /**\n * Whether `handle` belongs to this adapter's stylesheet.\n *\n * Unused on a lone adapter. A runtime composing several packs' adapters\n * routes each handle to its owner, so CSS is neither duplicated nor\n * rendered against the wrong theme. An adapter that cannot answer this\n * cannot be combined with another.\n */\n ownsHandle?(handle: StyleHandle): boolean;\n /**\n * Appended after {@link HTMLDispatcherRenderOptions.scriptText} into the\n * render's one script. A function body with `root` in scope, under the same\n * rules as {@link EnhancementDefinition.script}.\n */\n getScriptText?(\n composition: Composition<TNode>,\n options: HTMLRenderOptions,\n scope: HTMLEnhancementScope\n ): string;\n}\n\n/** What {@link renderHTMLWithDispatcher} needs beyond the composition. */\nexport interface HTMLDispatcherRenderOptions<\n TNode extends PrimitiveNode,\n TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector,\n TContext = StyledRenderContext,\n> {\n dispatcher: HTMLRenderDispatcher<TNode, TCollector, TContext>;\n /** Runs once before rendering, which draws the composition it returns; {@link HTMLRenderOptions.onValidationError} decides what becomes of its errors. Defaults to `createCompositionValidator(dispatcher.definitions)`. */\n validate?: (\n composition: Composition<TNode>\n ) => CheckedValidationResult<TNode>;\n options?: HTMLRenderOptions;\n /** Used only when the composition has neither `meta.ariaLabel` nor a `title`. Defaults to `'View'`. */\n defaultAriaLabel?: string;\n styleAdapter?: HTMLStyleAdapter<TNode, TCollector, TContext>;\n /**\n * Emitted unescaped ahead of {@link HTMLStyleAdapter.getScriptText}. A\n * function body with `root` in scope, under the same rules as\n * {@link EnhancementDefinition.script}.\n */\n scriptText?: string;\n /**\n * Progressive enhancements declared by the packs this render was composed\n * from. The render resolves {@link HTMLRenderOptions.enhancements} against\n * them once, hands every renderer the set as `context.enhancements`, and\n * emits each resolved one's script.\n */\n enhancementDefinitions?: readonly EnhancementDefinition[];\n}\n\n/**\n * Renders a composition to standalone HTML: the wrapper element, the pack's\n * markup, and its CSS either inlined or returned separately.\n *\n * Runs the pack twice when a style adapter is present — once to collect\n * styles, once with the render context those styles produced — so a\n * `renderReact` implementation must be free of side effects.\n */\nexport const renderHTMLWithDispatcher = <\n TNode extends PrimitiveNode,\n TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector,\n TContext = StyledRenderContext,\n>(\n input: Composition<TNode>,\n {\n dispatcher,\n validate = createCompositionValidator<TNode>(dispatcher.definitions),\n options: rawOptions = {},\n defaultAriaLabel = 'View',\n styleAdapter,\n scriptText = '',\n enhancementDefinitions = [],\n }: HTMLDispatcherRenderOptions<TNode, TCollector, TContext>\n): HTMLRenderResult => {\n const validation = validate(input);\n const composition = compositionToRender(validation);\n // Resolved before the validation mode is read, so an adapter can derive\n // `onValidationError`.\n const options =\n styleAdapter?.resolveOptions?.(composition, rawOptions) ?? rawOptions;\n enforceValidationMode(validation, options.onValidationError);\n const framed = options.framed ?? true;\n const heading = options.heading ?? true;\n const theme = options.theme ?? composition.theme ?? 'auto';\n const cssMode = options.css ?? 'inline';\n const scriptsMode = options.scripts ?? 'embedded';\n const styleState = styleAdapter?.createCollector(options);\n const enhancementScope: HTMLEnhancementScope = {\n walk: createChildNodeWalker(dispatcher.definitions),\n definitions: enhancementDefinitions,\n };\n const applied = resolveEnhancements(\n composition.body,\n enhancementScope.walk,\n enhancementDefinitions,\n options.enhancements ?? []\n );\n const enhancements: ReadonlySet<string> = new Set(\n applied.map(({ id }) => id)\n );\n const anchors =\n options.anchors === true || applied.some(({ anchors }) => anchors);\n const enhanced = (context: TContext): TContext =>\n contextWith(context, 'enhancements', enhancements);\n\n if (styleState) {\n styleAdapter?.collectWrapperStyles?.(styleState, options);\n styleAdapter?.collectViewStyles?.(\n composition,\n dispatcher,\n styleState,\n { fluid: Boolean(options.fluid) },\n options,\n enhancementScope\n );\n const collectionContext = enhanced(\n styleAdapter?.createRenderContext(styleState, options) as TContext\n );\n withAnchors(anchors, () =>\n renderToStaticMarkup(\n createElement(() =>\n renderCompositionContent(composition, dispatcher, collectionContext, {\n heading,\n })\n )\n )\n );\n styleAdapter?.collectAfterRender?.(composition, styleState, options);\n }\n\n const renderContext = enhanced(\n styleState && styleAdapter\n ? styleAdapter.createRenderContext(styleState, options)\n : // No adapter means no class names and no css vars to resolve.\n ({} as TContext)\n );\n const cssText =\n styleState && styleAdapter\n ? styleAdapter.renderStyles(styleState, options)\n : '';\n const adapterScriptText =\n styleAdapter?.getScriptText?.(composition, options, enhancementScope) ?? '';\n const js = [\n ...[scriptText, adapterScriptText].filter(Boolean).map(scopeScript),\n enhancementScript(applied),\n ]\n .filter(Boolean)\n .join('\\n');\n const embeddedScript =\n js && scriptsMode === 'embedded' ? embedScript(js) : '';\n const body = withAnchors(anchors, () =>\n renderToStaticMarkup(\n createElement(() =>\n renderCompositionContent(composition, dispatcher, renderContext, {\n heading,\n })\n )\n )\n );\n const inlineCss = cssMode === 'inline' ? embedCss(cssText) : '';\n const inlineJs = embeddedScript ? embedJs(embeddedScript) : '';\n const raw = renderToStaticMarkup(\n createElement(RenderedHtmlView<TNode>, {\n composition,\n theme,\n fluid: Boolean(options.fluid),\n framed,\n styleText: inlineCss || undefined,\n scriptText: inlineJs || undefined,\n defaultAriaLabel,\n body,\n })\n );\n const html = options.minify === false ? raw : minifyHtml(raw);\n\n // Inline payloads are measured as emitted, escapes included.\n const inlineCssBytes = byteLength(inlineCss);\n const inlineJsBytes = byteLength(inlineJs);\n const separateCssBytes = cssMode === 'inline' ? 0 : byteLength(cssText);\n const separateJsBytes = embeddedScript ? 0 : byteLength(js);\n\n return {\n html,\n css: cssText,\n js,\n body,\n measurement: {\n html: byteLength(html) - inlineCssBytes - inlineJsBytes,\n css: inlineCssBytes + separateCssBytes,\n js: inlineJsBytes + separateJsBytes,\n total: byteLength(html) + separateCssBytes + separateJsBytes,\n },\n validationErrors: validation.errors,\n };\n};\n\ninterface RenderedHtmlViewProps<TNode extends PrimitiveNode> {\n composition: Composition<TNode>;\n theme: RenderTheme;\n fluid: boolean;\n framed: boolean;\n styleText?: string | undefined;\n scriptText?: string | undefined;\n defaultAriaLabel: string;\n body: string;\n}\n\n// Only `</style` ends a `<style>`. `\\/` is a CSS escape for `/`, so a string\n// holding it keeps its value.\nconst embedCss = (css: string): string => css.replace(/<\\/(?=style)/gi, '<\\\\/');\n\ninterface ScriptNode extends JavaScriptNode {\n tag: ScriptNode;\n quasi: ScriptNode;\n quasis: ScriptNode[];\n expressions: ScriptNode[];\n value: { raw: string; cooked: string | null };\n name?: string;\n}\n\n// Tagged templates observe raw spelling and reuse the same frozen object per site.\nconst embedJs = (js: string): string => {\n if (!/<\\/script|<!--/i.test(js)) return js;\n const comments: JavaScriptComment[] = [];\n const tree = parse(js, { ecmaVersion: 'latest', onComment: comments });\n const sites: ScriptNode[] = [];\n const identifiers = new Set<string>();\n const pending: JavaScriptNode[] = [tree];\n while (pending.length) {\n const node = pending.pop()! as ScriptNode;\n if (node.type === 'Identifier' && node.name) identifiers.add(node.name);\n if (\n node.type === 'TaggedTemplateExpression' &&\n node.quasi.quasis.some(({ value: { raw } }) =>\n /<\\/script|<!--/i.test(raw)\n )\n )\n sites.push(node);\n for (const value of Object.values(node)) {\n for (const child of Array.isArray(value) ? value : [value]) {\n if (\n child &&\n typeof child === 'object' &&\n 'type' in child &&\n 'start' in child\n ) {\n pending.push(child as JavaScriptNode);\n }\n }\n }\n }\n sites.sort((a, b) => a.start - b.start);\n let prefix = '__isomerTemplate';\n while ([...identifiers].some((name) => name.startsWith(prefix)))\n prefix += '_';\n const literal = (value: string | null): string =>\n value === null ? 'void 0' : JSON.stringify(value).replace(/</g, '\\\\u003c');\n const rewrite = (start: number, end: number): string => {\n let cursor = start;\n let result = '';\n const edits = [\n ...sites.map((site, index) => ({\n ...site,\n index,\n comment: undefined as string | undefined,\n })),\n ...comments\n .filter(({ start }) => /^(?:<!--|-->)/.test(js.slice(start, start + 4)))\n .map((comment) => ({ ...comment, index: -1, comment: comment.value })),\n ].sort((a, b) => a.start - b.start);\n for (const edit of edits) {\n if (edit.start < cursor || edit.end > end) continue;\n result += js.slice(cursor, edit.start);\n if (edit.comment !== undefined) {\n result += `//${edit.comment}`;\n } else {\n const site = sites[edit.index]!;\n const {\n tag,\n quasi: { quasis, expressions },\n } = site;\n const cooked = quasis\n .map(({ value }) => literal(value.cooked))\n .join(',');\n const raw = quasis.map(({ value }) => literal(value.raw)).join(',');\n const cache = `${prefix}${edit.index}`;\n const template = `${cache} ??= ${prefix}Freeze(${prefix}Define([${cooked}], 'raw', {value:${prefix}Freeze([${raw}])}))`;\n const args = expressions.map((expression) =>\n rewrite(expression.start, expression.end)\n );\n result += `(${rewrite(tag.start, tag.end)})(${template}${args.map((arg) => `,(${arg})`).join('')})`;\n }\n cursor = edit.end;\n }\n return result + js.slice(cursor, end);\n };\n const rewritten = rewrite(0, js.length);\n const scoped = sites.length\n ? `(function(){const ${prefix}Freeze=Object.freeze,${prefix}Define=Object.defineProperty;let ${sites.map((_site, index) => `${prefix}${index}`).join(',')};\\n${rewritten}\\n})();`\n : rewritten;\n return scoped\n .replace(/<\\/(?=script)/gi, '<\\\\/')\n .replace(/<!--/g, (_match, at: number, source: string) =>\n escapedBy(source, at) ? 'x3C!--' : '\\\\x3C!--'\n );\n};\n\nconst escapedBy = (source: string, at: number): boolean => {\n let slashes = 0;\n while (source[at - slashes - 1] === '\\\\') slashes += 1;\n return slashes % 2 === 1;\n};\n\nconst RenderedHtmlView = <TNode extends PrimitiveNode>({\n composition,\n theme,\n fluid,\n framed,\n styleText,\n scriptText,\n defaultAriaLabel,\n body,\n}: RenderedHtmlViewProps<TNode>): ReactNode =>\n wrapCompositionContent(\n createElement(\n Fragment,\n null,\n styleText\n ? createElement('style', {\n key: 'style',\n dangerouslySetInnerHTML: { __html: styleText },\n })\n : null,\n createElement('div', {\n key: 'body',\n dangerouslySetInnerHTML: { __html: body },\n }),\n scriptText\n ? createElement('script', {\n key: 'script',\n [EMBEDDED_SCRIPT_ATTRIBUTE]: '',\n dangerouslySetInnerHTML: { __html: scriptText },\n })\n : null\n ),\n composition,\n { framed, fluid, theme, defaultAriaLabel }\n );\n\n// Whitespace inside `pre`, `script`, `style`, and `textarea` is content, so\n// those elements match whole and pass through. Elsewhere only whitespace\n// spanning a line break is collapsed: a single space between inline elements\n// (`<b>a</b> <i>b</i>`) is authored content.\nconst MINIFY_RE =\n /<(pre|script|style|textarea)[\\s>][\\s\\S]*?(?:<\\/\\1\\s*>|$)|(?<=>)\\s+(?=<)/gi;\n\nconst minifyHtml = (value: string): string =>\n value\n .replace(MINIFY_RE, (match, element: string | undefined) =>\n element || !match.includes('\\n') ? match : ''\n )\n .trim();\n"]}
@@ -0,0 +1,3 @@
1
+ export { type EnhancementDefinition } from './enhancements.js';
2
+ export { type HTMLDispatcherRenderOptions, type HTMLEnhancementScope, type HTMLRenderDispatcher, type HTMLRenderOptions, type HTMLRenderResult, type HTMLStyleAdapter, renderHTMLWithDispatcher, } from './envelope.js';
3
+ //# sourceMappingURL=index.d.ts.map