@bestagentkits/render 0.2.0 → 0.3.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 (596) hide show
  1. package/CHANGELOG.md +100 -1
  2. package/README.md +157 -32
  3. package/dist/blocks/chart/chart-check-kind-rules.d.ts +10 -0
  4. package/dist/blocks/chart/chart-check-kind-rules.d.ts.map +1 -0
  5. package/dist/blocks/chart/chart-check-kind-rules.js +151 -0
  6. package/dist/blocks/chart/chart-check-kind-rules.js.map +1 -0
  7. package/dist/blocks/chart/chart-check.d.ts +15 -0
  8. package/dist/blocks/chart/chart-check.d.ts.map +1 -0
  9. package/dist/blocks/chart/chart-check.js +196 -0
  10. package/dist/blocks/chart/chart-check.js.map +1 -0
  11. package/dist/blocks/chart/chart-encoding-schema.d.ts +7 -0
  12. package/dist/blocks/chart/chart-encoding-schema.d.ts.map +1 -0
  13. package/dist/blocks/chart/chart-encoding-schema.js +39 -0
  14. package/dist/blocks/chart/chart-encoding-schema.js.map +1 -0
  15. package/dist/blocks/chart/chart-encodings.d.ts +29 -0
  16. package/dist/blocks/chart/chart-encodings.d.ts.map +1 -0
  17. package/dist/blocks/chart/chart-encodings.js +59 -0
  18. package/dist/blocks/chart/chart-encodings.js.map +1 -0
  19. package/dist/blocks/chart/chart-kinds.d.ts +18 -0
  20. package/dist/blocks/chart/chart-kinds.d.ts.map +1 -0
  21. package/dist/blocks/chart/chart-kinds.js +60 -0
  22. package/dist/blocks/chart/chart-kinds.js.map +1 -0
  23. package/dist/blocks/chart/chart-model-rows.d.ts +23 -0
  24. package/dist/blocks/chart/chart-model-rows.d.ts.map +1 -0
  25. package/dist/blocks/chart/chart-model-rows.js +153 -0
  26. package/dist/blocks/chart/chart-model-rows.js.map +1 -0
  27. package/dist/blocks/chart/chart-model.d.ts +17 -0
  28. package/dist/blocks/chart/chart-model.d.ts.map +1 -0
  29. package/dist/blocks/chart/chart-model.js +131 -0
  30. package/dist/blocks/chart/chart-model.js.map +1 -0
  31. package/dist/blocks/chart/chart-styles.d.ts +3 -0
  32. package/dist/blocks/chart/chart-styles.d.ts.map +1 -0
  33. package/dist/blocks/chart/chart-styles.js +76 -0
  34. package/dist/blocks/chart/chart-styles.js.map +1 -0
  35. package/dist/blocks/chart/chart.d.ts +12 -0
  36. package/dist/blocks/chart/chart.d.ts.map +1 -0
  37. package/dist/blocks/chart/chart.js +73 -0
  38. package/dist/blocks/chart/chart.js.map +1 -0
  39. package/dist/blocks/chart/index.d.ts +4 -0
  40. package/dist/blocks/chart/index.d.ts.map +1 -0
  41. package/dist/blocks/chart/index.js +8 -0
  42. package/dist/blocks/chart/index.js.map +1 -0
  43. package/dist/blocks/composition/accordion.d.ts +4 -0
  44. package/dist/blocks/composition/accordion.d.ts.map +1 -0
  45. package/dist/blocks/composition/accordion.js +45 -0
  46. package/dist/blocks/composition/accordion.js.map +1 -0
  47. package/dist/blocks/composition/bento.d.ts +4 -0
  48. package/dist/blocks/composition/bento.d.ts.map +1 -0
  49. package/dist/blocks/composition/bento.js +91 -0
  50. package/dist/blocks/composition/bento.js.map +1 -0
  51. package/dist/blocks/composition/carousel.d.ts +4 -0
  52. package/dist/blocks/composition/carousel.d.ts.map +1 -0
  53. package/dist/blocks/composition/carousel.js +51 -0
  54. package/dist/blocks/composition/carousel.js.map +1 -0
  55. package/dist/blocks/composition/composition-runtime.d.ts +14 -0
  56. package/dist/blocks/composition/composition-runtime.d.ts.map +1 -0
  57. package/dist/blocks/composition/composition-runtime.js +136 -0
  58. package/dist/blocks/composition/composition-runtime.js.map +1 -0
  59. package/dist/blocks/composition/composition-styles.d.ts +10 -0
  60. package/dist/blocks/composition/composition-styles.d.ts.map +1 -0
  61. package/dist/blocks/composition/composition-styles.js +80 -0
  62. package/dist/blocks/composition/composition-styles.js.map +1 -0
  63. package/dist/blocks/composition/index.d.ts +4 -0
  64. package/dist/blocks/composition/index.d.ts.map +1 -0
  65. package/dist/blocks/composition/index.js +11 -0
  66. package/dist/blocks/composition/index.js.map +1 -0
  67. package/dist/blocks/composition/nestable-blocks.d.ts +37 -0
  68. package/dist/blocks/composition/nestable-blocks.d.ts.map +1 -0
  69. package/dist/blocks/composition/nestable-blocks.js +92 -0
  70. package/dist/blocks/composition/nestable-blocks.js.map +1 -0
  71. package/dist/blocks/composition/tabs.d.ts +4 -0
  72. package/dist/blocks/composition/tabs.d.ts.map +1 -0
  73. package/dist/blocks/composition/tabs.js +48 -0
  74. package/dist/blocks/composition/tabs.js.map +1 -0
  75. package/dist/blocks/controls/checkbox.d.ts +12 -0
  76. package/dist/blocks/controls/checkbox.d.ts.map +1 -0
  77. package/dist/blocks/controls/checkbox.js +43 -0
  78. package/dist/blocks/controls/checkbox.js.map +1 -0
  79. package/dist/blocks/controls/choice-options.d.ts +24 -0
  80. package/dist/blocks/controls/choice-options.d.ts.map +1 -0
  81. package/dist/blocks/controls/choice-options.js +117 -0
  82. package/dist/blocks/controls/choice-options.js.map +1 -0
  83. package/dist/blocks/controls/control-shared.d.ts +66 -0
  84. package/dist/blocks/controls/control-shared.d.ts.map +1 -0
  85. package/dist/blocks/controls/control-shared.js +241 -0
  86. package/dist/blocks/controls/control-shared.js.map +1 -0
  87. package/dist/blocks/controls/controls-runtime.d.ts +17 -0
  88. package/dist/blocks/controls/controls-runtime.d.ts.map +1 -0
  89. package/dist/blocks/controls/controls-runtime.js +180 -0
  90. package/dist/blocks/controls/controls-runtime.js.map +1 -0
  91. package/dist/blocks/controls/controls-styles.d.ts +14 -0
  92. package/dist/blocks/controls/controls-styles.d.ts.map +1 -0
  93. package/dist/blocks/controls/controls-styles.js +54 -0
  94. package/dist/blocks/controls/controls-styles.js.map +1 -0
  95. package/dist/blocks/controls/date-input.d.ts +6 -0
  96. package/dist/blocks/controls/date-input.d.ts.map +1 -0
  97. package/dist/blocks/controls/date-input.js +58 -0
  98. package/dist/blocks/controls/date-input.js.map +1 -0
  99. package/dist/blocks/controls/field-input.d.ts +10 -0
  100. package/dist/blocks/controls/field-input.d.ts.map +1 -0
  101. package/dist/blocks/controls/field-input.js +20 -0
  102. package/dist/blocks/controls/field-input.js.map +1 -0
  103. package/dist/blocks/controls/filter-bar.d.ts +11 -0
  104. package/dist/blocks/controls/filter-bar.d.ts.map +1 -0
  105. package/dist/blocks/controls/filter-bar.js +115 -0
  106. package/dist/blocks/controls/filter-bar.js.map +1 -0
  107. package/dist/blocks/controls/index.d.ts +4 -0
  108. package/dist/blocks/controls/index.d.ts.map +1 -0
  109. package/dist/blocks/controls/index.js +41 -0
  110. package/dist/blocks/controls/index.js.map +1 -0
  111. package/dist/blocks/controls/number-input.d.ts +4 -0
  112. package/dist/blocks/controls/number-input.d.ts.map +1 -0
  113. package/dist/blocks/controls/number-input.js +62 -0
  114. package/dist/blocks/controls/number-input.js.map +1 -0
  115. package/dist/blocks/controls/radio-group.d.ts +4 -0
  116. package/dist/blocks/controls/radio-group.d.ts.map +1 -0
  117. package/dist/blocks/controls/radio-group.js +56 -0
  118. package/dist/blocks/controls/radio-group.js.map +1 -0
  119. package/dist/blocks/controls/select.d.ts +4 -0
  120. package/dist/blocks/controls/select.d.ts.map +1 -0
  121. package/dist/blocks/controls/select.js +49 -0
  122. package/dist/blocks/controls/select.js.map +1 -0
  123. package/dist/blocks/controls/switch.d.ts +4 -0
  124. package/dist/blocks/controls/switch.d.ts.map +1 -0
  125. package/dist/blocks/controls/switch.js +22 -0
  126. package/dist/blocks/controls/switch.js.map +1 -0
  127. package/dist/blocks/controls/text-input.d.ts +4 -0
  128. package/dist/blocks/controls/text-input.d.ts.map +1 -0
  129. package/dist/blocks/controls/text-input.js +42 -0
  130. package/dist/blocks/controls/text-input.js.map +1 -0
  131. package/dist/blocks/data-table/data-table-cells.d.ts +26 -0
  132. package/dist/blocks/data-table/data-table-cells.d.ts.map +1 -0
  133. package/dist/blocks/data-table/data-table-cells.js +154 -0
  134. package/dist/blocks/data-table/data-table-cells.js.map +1 -0
  135. package/dist/blocks/data-table/data-table-check.d.ts +10 -0
  136. package/dist/blocks/data-table/data-table-check.d.ts.map +1 -0
  137. package/dist/blocks/data-table/data-table-check.js +99 -0
  138. package/dist/blocks/data-table/data-table-check.js.map +1 -0
  139. package/dist/blocks/data-table/data-table-columns.d.ts +41 -0
  140. package/dist/blocks/data-table/data-table-columns.d.ts.map +1 -0
  141. package/dist/blocks/data-table/data-table-columns.js +155 -0
  142. package/dist/blocks/data-table/data-table-columns.js.map +1 -0
  143. package/dist/blocks/data-table/data-table-runtime.d.ts +15 -0
  144. package/dist/blocks/data-table/data-table-runtime.d.ts.map +1 -0
  145. package/dist/blocks/data-table/data-table-runtime.js +106 -0
  146. package/dist/blocks/data-table/data-table-runtime.js.map +1 -0
  147. package/dist/blocks/data-table/data-table-styles.d.ts +11 -0
  148. package/dist/blocks/data-table/data-table-styles.d.ts.map +1 -0
  149. package/dist/blocks/data-table/data-table-styles.js +74 -0
  150. package/dist/blocks/data-table/data-table-styles.js.map +1 -0
  151. package/dist/blocks/data-table/data-table.d.ts +17 -0
  152. package/dist/blocks/data-table/data-table.d.ts.map +1 -0
  153. package/dist/blocks/data-table/data-table.js +159 -0
  154. package/dist/blocks/data-table/data-table.js.map +1 -0
  155. package/dist/blocks/data-table/index.d.ts +4 -0
  156. package/dist/blocks/data-table/index.d.ts.map +1 -0
  157. package/dist/blocks/data-table/index.js +18 -0
  158. package/dist/blocks/data-table/index.js.map +1 -0
  159. package/dist/blocks/engineering/api-endpoint.d.ts +12 -0
  160. package/dist/blocks/engineering/api-endpoint.d.ts.map +1 -0
  161. package/dist/blocks/engineering/api-endpoint.js +174 -0
  162. package/dist/blocks/engineering/api-endpoint.js.map +1 -0
  163. package/dist/blocks/engineering/engineering-helpers.d.ts +49 -0
  164. package/dist/blocks/engineering/engineering-helpers.d.ts.map +1 -0
  165. package/dist/blocks/engineering/engineering-helpers.js +156 -0
  166. package/dist/blocks/engineering/engineering-helpers.js.map +1 -0
  167. package/dist/blocks/engineering/engineering-styles.d.ts +12 -0
  168. package/dist/blocks/engineering/engineering-styles.d.ts.map +1 -0
  169. package/dist/blocks/engineering/engineering-styles.js +174 -0
  170. package/dist/blocks/engineering/engineering-styles.js.map +1 -0
  171. package/dist/blocks/engineering/index.d.ts +4 -0
  172. package/dist/blocks/engineering/index.d.ts.map +1 -0
  173. package/dist/blocks/engineering/index.js +30 -0
  174. package/dist/blocks/engineering/index.js.map +1 -0
  175. package/dist/blocks/engineering/kanban.d.ts +11 -0
  176. package/dist/blocks/engineering/kanban.d.ts.map +1 -0
  177. package/dist/blocks/engineering/kanban.js +162 -0
  178. package/dist/blocks/engineering/kanban.js.map +1 -0
  179. package/dist/blocks/engineering/log-viewer.d.ts +14 -0
  180. package/dist/blocks/engineering/log-viewer.d.ts.map +1 -0
  181. package/dist/blocks/engineering/log-viewer.js +158 -0
  182. package/dist/blocks/engineering/log-viewer.js.map +1 -0
  183. package/dist/blocks/engineering/roadmap.d.ts +13 -0
  184. package/dist/blocks/engineering/roadmap.d.ts.map +1 -0
  185. package/dist/blocks/engineering/roadmap.js +197 -0
  186. package/dist/blocks/engineering/roadmap.js.map +1 -0
  187. package/dist/blocks/engineering/schema-viewer.d.ts +25 -0
  188. package/dist/blocks/engineering/schema-viewer.d.ts.map +1 -0
  189. package/dist/blocks/engineering/schema-viewer.js +124 -0
  190. package/dist/blocks/engineering/schema-viewer.js.map +1 -0
  191. package/dist/blocks/engineering/test-results.d.ts +12 -0
  192. package/dist/blocks/engineering/test-results.d.ts.map +1 -0
  193. package/dist/blocks/engineering/test-results.js +180 -0
  194. package/dist/blocks/engineering/test-results.js.map +1 -0
  195. package/dist/blocks/evidence/annotated-image.d.ts +15 -0
  196. package/dist/blocks/evidence/annotated-image.d.ts.map +1 -0
  197. package/dist/blocks/evidence/annotated-image.js +99 -0
  198. package/dist/blocks/evidence/annotated-image.js.map +1 -0
  199. package/dist/blocks/evidence/benchmark-comparison.d.ts +11 -0
  200. package/dist/blocks/evidence/benchmark-comparison.d.ts.map +1 -0
  201. package/dist/blocks/evidence/benchmark-comparison.js +262 -0
  202. package/dist/blocks/evidence/benchmark-comparison.js.map +1 -0
  203. package/dist/blocks/evidence/benchmark-verdict.d.ts +26 -0
  204. package/dist/blocks/evidence/benchmark-verdict.d.ts.map +1 -0
  205. package/dist/blocks/evidence/benchmark-verdict.js +31 -0
  206. package/dist/blocks/evidence/benchmark-verdict.js.map +1 -0
  207. package/dist/blocks/evidence/evidence-helpers.d.ts +39 -0
  208. package/dist/blocks/evidence/evidence-helpers.d.ts.map +1 -0
  209. package/dist/blocks/evidence/evidence-helpers.js +87 -0
  210. package/dist/blocks/evidence/evidence-helpers.js.map +1 -0
  211. package/dist/blocks/evidence/evidence-styles.d.ts +12 -0
  212. package/dist/blocks/evidence/evidence-styles.d.ts.map +1 -0
  213. package/dist/blocks/evidence/evidence-styles.js +88 -0
  214. package/dist/blocks/evidence/evidence-styles.js.map +1 -0
  215. package/dist/blocks/evidence/index.d.ts +4 -0
  216. package/dist/blocks/evidence/index.d.ts.map +1 -0
  217. package/dist/blocks/evidence/index.js +15 -0
  218. package/dist/blocks/evidence/index.js.map +1 -0
  219. package/dist/blocks/evidence/metric-breakdown.d.ts +22 -0
  220. package/dist/blocks/evidence/metric-breakdown.d.ts.map +1 -0
  221. package/dist/blocks/evidence/metric-breakdown.js +203 -0
  222. package/dist/blocks/evidence/metric-breakdown.js.map +1 -0
  223. package/dist/blocks/evidence/references.d.ts +13 -0
  224. package/dist/blocks/evidence/references.d.ts.map +1 -0
  225. package/dist/blocks/evidence/references.js +103 -0
  226. package/dist/blocks/evidence/references.js.map +1 -0
  227. package/dist/blocks/index.d.ts +8 -0
  228. package/dist/blocks/index.d.ts.map +1 -0
  229. package/dist/blocks/index.js +24 -0
  230. package/dist/blocks/index.js.map +1 -0
  231. package/dist/blocks/layout/grid-item.d.ts +4 -0
  232. package/dist/blocks/layout/grid-item.d.ts.map +1 -0
  233. package/dist/blocks/layout/grid-item.js +65 -0
  234. package/dist/blocks/layout/grid-item.js.map +1 -0
  235. package/dist/blocks/layout/grid.d.ts +9 -0
  236. package/dist/blocks/layout/grid.d.ts.map +1 -0
  237. package/dist/blocks/layout/grid.js +99 -0
  238. package/dist/blocks/layout/grid.js.map +1 -0
  239. package/dist/blocks/layout/index.d.ts +4 -0
  240. package/dist/blocks/layout/index.d.ts.map +1 -0
  241. package/dist/blocks/layout/index.js +23 -0
  242. package/dist/blocks/layout/index.js.map +1 -0
  243. package/dist/blocks/layout/layout-styles.d.ts +40 -0
  244. package/dist/blocks/layout/layout-styles.d.ts.map +1 -0
  245. package/dist/blocks/layout/layout-styles.js +110 -0
  246. package/dist/blocks/layout/layout-styles.js.map +1 -0
  247. package/dist/blocks/layout/main-aside.d.ts +4 -0
  248. package/dist/blocks/layout/main-aside.d.ts.map +1 -0
  249. package/dist/blocks/layout/main-aside.js +21 -0
  250. package/dist/blocks/layout/main-aside.js.map +1 -0
  251. package/dist/blocks/layout/rail-layout.d.ts +4 -0
  252. package/dist/blocks/layout/rail-layout.d.ts.map +1 -0
  253. package/dist/blocks/layout/rail-layout.js +33 -0
  254. package/dist/blocks/layout/rail-layout.js.map +1 -0
  255. package/dist/blocks/layout/semantic-layout-parts.d.ts +14 -0
  256. package/dist/blocks/layout/semantic-layout-parts.d.ts.map +1 -0
  257. package/dist/blocks/layout/semantic-layout-parts.js +9 -0
  258. package/dist/blocks/layout/semantic-layout-parts.js.map +1 -0
  259. package/dist/blocks/layout/sidebar-layout.d.ts +4 -0
  260. package/dist/blocks/layout/sidebar-layout.d.ts.map +1 -0
  261. package/dist/blocks/layout/sidebar-layout.js +30 -0
  262. package/dist/blocks/layout/sidebar-layout.js.map +1 -0
  263. package/dist/blocks/layout/split.d.ts +4 -0
  264. package/dist/blocks/layout/split.d.ts.map +1 -0
  265. package/dist/blocks/layout/split.js +23 -0
  266. package/dist/blocks/layout/split.js.map +1 -0
  267. package/dist/blocks/layout/stack.d.ts +4 -0
  268. package/dist/blocks/layout/stack.d.ts.map +1 -0
  269. package/dist/blocks/layout/stack.js +36 -0
  270. package/dist/blocks/layout/stack.js.map +1 -0
  271. package/dist/blocks/product/calendar-dates.d.ts +59 -0
  272. package/dist/blocks/product/calendar-dates.d.ts.map +1 -0
  273. package/dist/blocks/product/calendar-dates.js +100 -0
  274. package/dist/blocks/product/calendar-dates.js.map +1 -0
  275. package/dist/blocks/product/calendar.d.ts +12 -0
  276. package/dist/blocks/product/calendar.d.ts.map +1 -0
  277. package/dist/blocks/product/calendar.js +125 -0
  278. package/dist/blocks/product/calendar.js.map +1 -0
  279. package/dist/blocks/product/feature-matrix.d.ts +4 -0
  280. package/dist/blocks/product/feature-matrix.d.ts.map +1 -0
  281. package/dist/blocks/product/feature-matrix.js +72 -0
  282. package/dist/blocks/product/feature-matrix.js.map +1 -0
  283. package/dist/blocks/product/gallery.d.ts +14 -0
  284. package/dist/blocks/product/gallery.d.ts.map +1 -0
  285. package/dist/blocks/product/gallery.js +86 -0
  286. package/dist/blocks/product/gallery.js.map +1 -0
  287. package/dist/blocks/product/index.d.ts +4 -0
  288. package/dist/blocks/product/index.d.ts.map +1 -0
  289. package/dist/blocks/product/index.js +40 -0
  290. package/dist/blocks/product/index.js.map +1 -0
  291. package/dist/blocks/product/logo-cloud.d.ts +4 -0
  292. package/dist/blocks/product/logo-cloud.d.ts.map +1 -0
  293. package/dist/blocks/product/logo-cloud.js +42 -0
  294. package/dist/blocks/product/logo-cloud.js.map +1 -0
  295. package/dist/blocks/product/people.d.ts +4 -0
  296. package/dist/blocks/product/people.d.ts.map +1 -0
  297. package/dist/blocks/product/people.js +53 -0
  298. package/dist/blocks/product/people.js.map +1 -0
  299. package/dist/blocks/product/pricing.d.ts +4 -0
  300. package/dist/blocks/product/pricing.d.ts.map +1 -0
  301. package/dist/blocks/product/pricing.js +86 -0
  302. package/dist/blocks/product/pricing.js.map +1 -0
  303. package/dist/blocks/product/product-helpers.d.ts +22 -0
  304. package/dist/blocks/product/product-helpers.d.ts.map +1 -0
  305. package/dist/blocks/product/product-helpers.js +48 -0
  306. package/dist/blocks/product/product-helpers.js.map +1 -0
  307. package/dist/blocks/product/product-runtime.d.ts +15 -0
  308. package/dist/blocks/product/product-runtime.d.ts.map +1 -0
  309. package/dist/blocks/product/product-runtime.js +97 -0
  310. package/dist/blocks/product/product-runtime.js.map +1 -0
  311. package/dist/blocks/product/product-styles.d.ts +14 -0
  312. package/dist/blocks/product/product-styles.d.ts.map +1 -0
  313. package/dist/blocks/product/product-styles.js +120 -0
  314. package/dist/blocks/product/product-styles.js.map +1 -0
  315. package/dist/blocks/product/testimonial.d.ts +8 -0
  316. package/dist/blocks/product/testimonial.d.ts.map +1 -0
  317. package/dist/blocks/product/testimonial.js +67 -0
  318. package/dist/blocks/product/testimonial.js.map +1 -0
  319. package/dist/cli.d.ts.map +1 -1
  320. package/dist/cli.js +143 -30
  321. package/dist/cli.js.map +1 -1
  322. package/dist/data/data-json-schema.d.ts +9 -0
  323. package/dist/data/data-json-schema.d.ts.map +1 -0
  324. package/dist/data/data-json-schema.js +48 -0
  325. package/dist/data/data-json-schema.js.map +1 -0
  326. package/dist/data/dataset-types.d.ts +47 -0
  327. package/dist/data/dataset-types.d.ts.map +1 -0
  328. package/dist/data/dataset-types.js +49 -0
  329. package/dist/data/dataset-types.js.map +1 -0
  330. package/dist/data/format-value.d.ts +39 -0
  331. package/dist/data/format-value.d.ts.map +1 -0
  332. package/dist/data/format-value.js +214 -0
  333. package/dist/data/format-value.js.map +1 -0
  334. package/dist/data/resolve-block-data.d.ts +24 -0
  335. package/dist/data/resolve-block-data.d.ts.map +1 -0
  336. package/dist/data/resolve-block-data.js +190 -0
  337. package/dist/data/resolve-block-data.js.map +1 -0
  338. package/dist/data/transform-pipeline.d.ts +65 -0
  339. package/dist/data/transform-pipeline.d.ts.map +1 -0
  340. package/dist/data/transform-pipeline.js +234 -0
  341. package/dist/data/transform-pipeline.js.map +1 -0
  342. package/dist/data/validate-datasets.d.ts +22 -0
  343. package/dist/data/validate-datasets.d.ts.map +1 -0
  344. package/dist/data/validate-datasets.js +137 -0
  345. package/dist/data/validate-datasets.js.map +1 -0
  346. package/dist/diagram/adapter-markup-fit.d.ts +44 -0
  347. package/dist/diagram/adapter-markup-fit.d.ts.map +1 -0
  348. package/dist/diagram/adapter-markup-fit.js +292 -0
  349. package/dist/diagram/adapter-markup-fit.js.map +1 -0
  350. package/dist/diagram/adapter-stylesheet-filter.d.ts +56 -0
  351. package/dist/diagram/adapter-stylesheet-filter.d.ts.map +1 -0
  352. package/dist/diagram/adapter-stylesheet-filter.js +245 -0
  353. package/dist/diagram/adapter-stylesheet-filter.js.map +1 -0
  354. package/dist/diagram/adapter.d.ts +17 -0
  355. package/dist/diagram/adapter.d.ts.map +1 -1
  356. package/dist/diagram/adapter.js +43 -2
  357. package/dist/diagram/adapter.js.map +1 -1
  358. package/dist/index.d.ts +14 -1
  359. package/dist/index.d.ts.map +1 -1
  360. package/dist/index.js +6 -0
  361. package/dist/index.js.map +1 -1
  362. package/dist/ir.d.ts +18 -0
  363. package/dist/ir.d.ts.map +1 -1
  364. package/dist/ir.js.map +1 -1
  365. package/dist/mcp/mcp-http-transport.d.ts +68 -0
  366. package/dist/mcp/mcp-http-transport.d.ts.map +1 -0
  367. package/dist/mcp/mcp-http-transport.js +140 -0
  368. package/dist/mcp/mcp-http-transport.js.map +1 -0
  369. package/dist/mcp/mcp-json-rpc-dispatch.d.ts +38 -0
  370. package/dist/mcp/mcp-json-rpc-dispatch.d.ts.map +1 -0
  371. package/dist/mcp/mcp-json-rpc-dispatch.js +98 -0
  372. package/dist/mcp/mcp-json-rpc-dispatch.js.map +1 -0
  373. package/dist/mcp/mcp-local-tools.d.ts +20 -0
  374. package/dist/mcp/mcp-local-tools.d.ts.map +1 -0
  375. package/dist/mcp/mcp-local-tools.js +58 -0
  376. package/dist/mcp/mcp-local-tools.js.map +1 -0
  377. package/dist/mcp/mcp-protocol.d.ts +79 -0
  378. package/dist/mcp/mcp-protocol.d.ts.map +1 -0
  379. package/dist/mcp/mcp-protocol.js +83 -0
  380. package/dist/mcp/mcp-protocol.js.map +1 -0
  381. package/dist/mcp/mcp-stdio-transport.d.ts +28 -0
  382. package/dist/mcp/mcp-stdio-transport.d.ts.map +1 -0
  383. package/dist/mcp/mcp-stdio-transport.js +73 -0
  384. package/dist/mcp/mcp-stdio-transport.js.map +1 -0
  385. package/dist/mcp/mcp-tool-definitions.d.ts +66 -0
  386. package/dist/mcp/mcp-tool-definitions.d.ts.map +1 -0
  387. package/dist/mcp/mcp-tool-definitions.js +246 -0
  388. package/dist/mcp/mcp-tool-definitions.js.map +1 -0
  389. package/dist/mcp-server.d.ts +6 -33
  390. package/dist/mcp-server.d.ts.map +1 -1
  391. package/dist/mcp-server.js +5 -270
  392. package/dist/mcp-server.js.map +1 -1
  393. package/dist/recipes/index.d.ts +27 -0
  394. package/dist/recipes/index.d.ts.map +1 -0
  395. package/dist/recipes/index.js +30 -0
  396. package/dist/recipes/index.js.map +1 -0
  397. package/dist/recipes/recipes.generated.d.ts +8 -0
  398. package/dist/recipes/recipes.generated.d.ts.map +1 -0
  399. package/dist/recipes/recipes.generated.js +704 -0
  400. package/dist/recipes/recipes.generated.js.map +1 -0
  401. package/dist/registry/actions.d.ts +2 -0
  402. package/dist/registry/actions.d.ts.map +1 -1
  403. package/dist/registry/actions.js +3 -1
  404. package/dist/registry/actions.js.map +1 -1
  405. package/dist/registry/block-module.d.ts +65 -0
  406. package/dist/registry/block-module.d.ts.map +1 -0
  407. package/dist/registry/block-module.js +19 -0
  408. package/dist/registry/block-module.js.map +1 -0
  409. package/dist/registry/catalog-search.d.ts +32 -0
  410. package/dist/registry/catalog-search.d.ts.map +1 -0
  411. package/dist/registry/catalog-search.js +122 -0
  412. package/dist/registry/catalog-search.js.map +1 -0
  413. package/dist/registry/define-helpers.d.ts +89 -0
  414. package/dist/registry/define-helpers.d.ts.map +1 -0
  415. package/dist/registry/define-helpers.js +87 -0
  416. package/dist/registry/define-helpers.js.map +1 -0
  417. package/dist/registry/describe-many.d.ts +58 -0
  418. package/dist/registry/describe-many.d.ts.map +1 -0
  419. package/dist/registry/describe-many.js +156 -0
  420. package/dist/registry/describe-many.js.map +1 -0
  421. package/dist/registry/prop-schema.d.ts +32 -1
  422. package/dist/registry/prop-schema.d.ts.map +1 -1
  423. package/dist/registry/prop-schema.js +108 -2
  424. package/dist/registry/prop-schema.js.map +1 -1
  425. package/dist/registry/registry-builder.d.ts +17 -0
  426. package/dist/registry/registry-builder.d.ts.map +1 -0
  427. package/dist/registry/registry-builder.js +158 -0
  428. package/dist/registry/registry-builder.js.map +1 -0
  429. package/dist/registry/registry.d.ts +32 -5
  430. package/dist/registry/registry.d.ts.map +1 -1
  431. package/dist/registry/registry.js +67 -14
  432. package/dist/registry/registry.js.map +1 -1
  433. package/dist/registry/roster.d.ts +34 -5
  434. package/dist/registry/roster.d.ts.map +1 -1
  435. package/dist/registry/roster.js +184 -224
  436. package/dist/registry/roster.js.map +1 -1
  437. package/dist/render/block-helpers.d.ts +11 -18
  438. package/dist/render/block-helpers.d.ts.map +1 -1
  439. package/dist/render/block-helpers.js +14 -44
  440. package/dist/render/block-helpers.js.map +1 -1
  441. package/dist/render/blocks.d.ts +9 -33
  442. package/dist/render/blocks.d.ts.map +1 -1
  443. package/dist/render/blocks.js +56 -180
  444. package/dist/render/blocks.js.map +1 -1
  445. package/dist/render/chart-figure-encoded.d.ts +11 -0
  446. package/dist/render/chart-figure-encoded.d.ts.map +1 -0
  447. package/dist/render/chart-figure-encoded.js +81 -0
  448. package/dist/render/chart-figure-encoded.js.map +1 -0
  449. package/dist/render/chart-kinds-cartesian.d.ts +14 -0
  450. package/dist/render/chart-kinds-cartesian.d.ts.map +1 -0
  451. package/dist/render/chart-kinds-cartesian.js +122 -0
  452. package/dist/render/chart-kinds-cartesian.js.map +1 -0
  453. package/dist/render/chart-kinds-composite.d.ts +16 -0
  454. package/dist/render/chart-kinds-composite.d.ts.map +1 -0
  455. package/dist/render/chart-kinds-composite.js +144 -0
  456. package/dist/render/chart-kinds-composite.js.map +1 -0
  457. package/dist/render/chart-kinds-gauge-treemap.d.ts +8 -0
  458. package/dist/render/chart-kinds-gauge-treemap.d.ts.map +1 -0
  459. package/dist/render/chart-kinds-gauge-treemap.js +101 -0
  460. package/dist/render/chart-kinds-gauge-treemap.js.map +1 -0
  461. package/dist/render/chart-kinds-histogram-waterfall.d.ts +17 -0
  462. package/dist/render/chart-kinds-histogram-waterfall.d.ts.map +1 -0
  463. package/dist/render/chart-kinds-histogram-waterfall.js +172 -0
  464. package/dist/render/chart-kinds-histogram-waterfall.js.map +1 -0
  465. package/dist/render/chart-overlays.d.ts +18 -0
  466. package/dist/render/chart-overlays.d.ts.map +1 -0
  467. package/dist/render/chart-overlays.js +58 -0
  468. package/dist/render/chart-overlays.js.map +1 -0
  469. package/dist/render/chart-scales.d.ts +83 -0
  470. package/dist/render/chart-scales.d.ts.map +1 -0
  471. package/dist/render/chart-scales.js +166 -0
  472. package/dist/render/chart-scales.js.map +1 -0
  473. package/dist/render/chart-svg-parts.d.ts +50 -0
  474. package/dist/render/chart-svg-parts.d.ts.map +1 -0
  475. package/dist/render/chart-svg-parts.js +125 -0
  476. package/dist/render/chart-svg-parts.js.map +1 -0
  477. package/dist/render/chart-text.d.ts +18 -0
  478. package/dist/render/chart-text.d.ts.map +1 -0
  479. package/dist/render/chart-text.js +69 -0
  480. package/dist/render/chart-text.js.map +1 -0
  481. package/dist/render/chart-treemap-layout.d.ts +17 -0
  482. package/dist/render/chart-treemap-layout.d.ts.map +1 -0
  483. package/dist/render/chart-treemap-layout.js +74 -0
  484. package/dist/render/chart-treemap-layout.js.map +1 -0
  485. package/dist/render/chart-types.d.ts +107 -0
  486. package/dist/render/chart-types.d.ts.map +1 -0
  487. package/dist/render/chart-types.js +11 -0
  488. package/dist/render/chart-types.js.map +1 -0
  489. package/dist/render/charts.d.ts +28 -11
  490. package/dist/render/charts.d.ts.map +1 -1
  491. package/dist/render/charts.js +38 -117
  492. package/dist/render/charts.js.map +1 -1
  493. package/dist/render/derived-variables.d.ts +20 -0
  494. package/dist/render/derived-variables.d.ts.map +1 -1
  495. package/dist/render/derived-variables.js +23 -0
  496. package/dist/render/derived-variables.js.map +1 -1
  497. package/dist/render/document.d.ts +11 -0
  498. package/dist/render/document.d.ts.map +1 -1
  499. package/dist/render/document.js +20 -3
  500. package/dist/render/document.js.map +1 -1
  501. package/dist/render/escape.d.ts +10 -0
  502. package/dist/render/escape.d.ts.map +1 -1
  503. package/dist/render/escape.js +28 -0
  504. package/dist/render/escape.js.map +1 -1
  505. package/dist/render/feature-styles.d.ts.map +1 -1
  506. package/dist/render/feature-styles.js +42 -80
  507. package/dist/render/feature-styles.js.map +1 -1
  508. package/dist/render/outline.d.ts +1 -1
  509. package/dist/render/outline.d.ts.map +1 -1
  510. package/dist/render/outline.js +4 -1
  511. package/dist/render/outline.js.map +1 -1
  512. package/dist/render/recipe-styles.d.ts +26 -0
  513. package/dist/render/recipe-styles.d.ts.map +1 -0
  514. package/dist/render/recipe-styles.js +218 -0
  515. package/dist/render/recipe-styles.js.map +1 -0
  516. package/dist/render/render-context.d.ts +40 -0
  517. package/dist/render/render-context.d.ts.map +1 -0
  518. package/dist/render/render-context.js +16 -0
  519. package/dist/render/render-context.js.map +1 -0
  520. package/dist/render/render.d.ts +7 -0
  521. package/dist/render/render.d.ts.map +1 -1
  522. package/dist/render/render.js +68 -44
  523. package/dist/render/render.js.map +1 -1
  524. package/dist/render/runtime.d.ts +4 -1
  525. package/dist/render/runtime.d.ts.map +1 -1
  526. package/dist/render/runtime.js +91 -118
  527. package/dist/render/runtime.js.map +1 -1
  528. package/dist/render/showcase-blocks.d.ts +5 -0
  529. package/dist/render/showcase-blocks.d.ts.map +1 -1
  530. package/dist/render/showcase-blocks.js +8 -28
  531. package/dist/render/showcase-blocks.js.map +1 -1
  532. package/dist/render/showcase-styles.d.ts.map +1 -1
  533. package/dist/render/showcase-styles.js +15 -31
  534. package/dist/render/showcase-styles.js.map +1 -1
  535. package/dist/render/style-units.d.ts +17 -0
  536. package/dist/render/style-units.d.ts.map +1 -0
  537. package/dist/render/style-units.js +24 -0
  538. package/dist/render/style-units.js.map +1 -0
  539. package/dist/render/styles.d.ts.map +1 -1
  540. package/dist/render/styles.js +8 -5
  541. package/dist/render/styles.js.map +1 -1
  542. package/dist/render/tone.d.ts +14 -0
  543. package/dist/render/tone.d.ts.map +1 -0
  544. package/dist/render/tone.js +40 -0
  545. package/dist/render/tone.js.map +1 -0
  546. package/dist/render/verify.d.ts +3 -0
  547. package/dist/render/verify.d.ts.map +1 -1
  548. package/dist/render/verify.js +15 -2
  549. package/dist/render/verify.js.map +1 -1
  550. package/dist/spec/asset-references.d.ts +35 -0
  551. package/dist/spec/asset-references.d.ts.map +1 -0
  552. package/dist/spec/asset-references.js +93 -0
  553. package/dist/spec/asset-references.js.map +1 -0
  554. package/dist/spec/bounds.d.ts +6 -0
  555. package/dist/spec/bounds.d.ts.map +1 -1
  556. package/dist/spec/bounds.js +7 -0
  557. package/dist/spec/bounds.js.map +1 -1
  558. package/dist/spec/conditions.d.ts +43 -0
  559. package/dist/spec/conditions.d.ts.map +1 -0
  560. package/dist/spec/conditions.js +179 -0
  561. package/dist/spec/conditions.js.map +1 -0
  562. package/dist/spec/network-policy.d.ts +33 -0
  563. package/dist/spec/network-policy.d.ts.map +1 -0
  564. package/dist/spec/network-policy.js +57 -0
  565. package/dist/spec/network-policy.js.map +1 -0
  566. package/dist/spec/normalize.d.ts +7 -2
  567. package/dist/spec/normalize.d.ts.map +1 -1
  568. package/dist/spec/normalize.js +203 -57
  569. package/dist/spec/normalize.js.map +1 -1
  570. package/dist/theme/dialect-presets.d.ts +12 -0
  571. package/dist/theme/dialect-presets.d.ts.map +1 -0
  572. package/dist/theme/dialect-presets.js +214 -0
  573. package/dist/theme/dialect-presets.js.map +1 -0
  574. package/dist/theme/load-theme.d.ts +9 -1
  575. package/dist/theme/load-theme.d.ts.map +1 -1
  576. package/dist/theme/load-theme.js +25 -2
  577. package/dist/theme/load-theme.js.map +1 -1
  578. package/dist/theme/preset-builder.d.ts +36 -0
  579. package/dist/theme/preset-builder.d.ts.map +1 -0
  580. package/dist/theme/preset-builder.js +51 -0
  581. package/dist/theme/preset-builder.js.map +1 -0
  582. package/dist/theme/presets.d.ts +4 -7
  583. package/dist/theme/presets.d.ts.map +1 -1
  584. package/dist/theme/presets.js +7 -40
  585. package/dist/theme/presets.js.map +1 -1
  586. package/dist/theme/recipes.d.ts +38 -0
  587. package/dist/theme/recipes.d.ts.map +1 -0
  588. package/dist/theme/recipes.js +96 -0
  589. package/dist/theme/recipes.js.map +1 -0
  590. package/dist/theme/theme-catalog.d.ts.map +1 -1
  591. package/dist/theme/theme-catalog.js +16 -0
  592. package/dist/theme/theme-catalog.js.map +1 -1
  593. package/dist/version.d.ts +1 -1
  594. package/dist/version.js +1 -1
  595. package/llms.txt +9 -5
  596. package/package.json +6 -2
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Asset references, found through the prop schema.
3
+ *
4
+ * A URL prop flagged with `asset` is something the page loads. Walking the
5
+ * schema alongside the validated props finds every such reference, at any
6
+ * depth, with the path the author wrote. The compiler uses the same walk to
7
+ * build the page's network policy and to reject blocked references at
8
+ * validation, so the two can never disagree about which values are assets.
9
+ * Child blocks in slots are their own IR nodes and are walked as such.
10
+ */
11
+ import { pathIndex, pathKey } from '../diagnostics.js';
12
+ import { isPlainObject } from '../json.js';
13
+ import { capabilityAllowed, isRemote, networkAllows, } from './network-policy.js';
14
+ function walk(schema, value, path, field, found) {
15
+ if (value === undefined)
16
+ return;
17
+ switch (schema.kind) {
18
+ case 'url':
19
+ if (schema.asset !== undefined && typeof value === 'string') {
20
+ found.set(path, {
21
+ path,
22
+ field,
23
+ reference: value,
24
+ capability: schema.asset,
25
+ rejectBlocked: schema.rejectBlocked === true,
26
+ });
27
+ }
28
+ return;
29
+ case 'list':
30
+ if (Array.isArray(value)) {
31
+ value.forEach((item, index) => {
32
+ walk(schema.of, item, pathIndex(path, index), field, found);
33
+ });
34
+ }
35
+ return;
36
+ case 'object':
37
+ if (isPlainObject(value)) {
38
+ for (const [key, fieldSchema] of Object.entries(schema.fields)) {
39
+ walk(fieldSchema, value[key], pathKey(path, key), key, found);
40
+ }
41
+ }
42
+ return;
43
+ case 'record':
44
+ if (isPlainObject(value)) {
45
+ for (const [key, item] of Object.entries(value)) {
46
+ walk(schema.of, item, pathKey(path, key), key, found);
47
+ }
48
+ }
49
+ return;
50
+ case 'oneOf':
51
+ // Every option is walked; an option the value does not fit finds nothing,
52
+ // and the path-keyed map keeps one entry when two options agree.
53
+ for (const option of schema.options)
54
+ walk(option, value, path, field, found);
55
+ return;
56
+ default:
57
+ return;
58
+ }
59
+ }
60
+ /** Every asset reference in a block's validated props, in schema order. */
61
+ export function assetReferences(props, values, path) {
62
+ const found = new Map();
63
+ for (const [key, schema] of Object.entries(props)) {
64
+ walk(schema, values[key], pathKey(path, key), key, found);
65
+ }
66
+ return [...found.values()];
67
+ }
68
+ /**
69
+ * Origins the page's policy must name so its allowed remote assets load.
70
+ * Provider allowlists are applied by the renderers, which never emit a
71
+ * reference the policy does not allow.
72
+ */
73
+ export function assetOrigins(policy, references) {
74
+ if (policy === 'deny')
75
+ return [];
76
+ const origins = [];
77
+ for (const { reference, capability } of references) {
78
+ if (!capabilityAllowed(policy, capability) || !/^https?:/iu.test(reference))
79
+ continue;
80
+ try {
81
+ origins.push(new URL(reference).origin);
82
+ }
83
+ catch {
84
+ // A reference that is not a URL is handled by the block renderer, not here.
85
+ }
86
+ }
87
+ return origins;
88
+ }
89
+ /** True when the reference may load: a local path always may, a remote one through its gate. */
90
+ export function assetAllowed(policy, asset) {
91
+ return !isRemote(asset.reference) || networkAllows(policy, asset.capability, asset.reference, '');
92
+ }
93
+ //# sourceMappingURL=asset-references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-references.js","sourceRoot":"","sources":["../../src/spec/asset-references.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,12 @@ export declare const LIMITS: {
24
24
  readonly maxStringLength: 2000;
25
25
  /** Length of multiline text. */
26
26
  readonly maxTextLength: 50000;
27
+ /** Named datasets; enforced with the dataset's path by `validateDatasets`. */
28
+ readonly maxDatasets: 20;
29
+ /** Rows in one dataset or inline `data` list. */
30
+ readonly maxDatasetRows: 200;
31
+ /** Distinct fields across one dataset's rows. */
32
+ readonly maxDatasetFields: 32;
27
33
  };
28
34
  export interface BoundsReport {
29
35
  blocks: number;
@@ -1 +1 @@
1
- {"version":3,"file":"bounds.d.ts","sourceRoot":"","sources":["../../src/spec/bounds.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,mBAAmB,CAAC;AAG3E,eAAO,MAAM,MAAM;IACjB,wDAAwD;;IAExD,gEAAgE;;IAEhE,iFAAiF;;IAEjF,6CAA6C;;IAE7C,gCAAgC;;IAEhC,iDAAiD;;IAEjD,sCAAsC;;IAEtC,gCAAgC;;CAExB,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AA4ED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY,CAyC5E"}
1
+ {"version":3,"file":"bounds.d.ts","sourceRoot":"","sources":["../../src/spec/bounds.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,mBAAmB,CAAC;AAG3E,eAAO,MAAM,MAAM;IACjB,wDAAwD;;IAExD,gEAAgE;;IAEhE,iFAAiF;;IAEjF,6CAA6C;;IAE7C,gCAAgC;;IAEhC,iDAAiD;;IAEjD,sCAAsC;;IAEtC,gCAAgC;;IAEhC,8EAA8E;;IAE9E,iDAAiD;;IAEjD,iDAAiD;;CAEzC,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AA4ED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY,CAyC5E"}
@@ -6,6 +6,7 @@
6
6
  * platform limit, because the same code runs in a CLI, in a library caller, and
7
7
  * inside a worker with a bounded memory budget and a request-size ceiling.
8
8
  */
9
+ import { DATA_LIMITS } from '../data/dataset-types.js';
9
10
  import { pathIndex, pathKey } from '../diagnostics.js';
10
11
  import { isPlainObject } from '../json.js';
11
12
  export const LIMITS = {
@@ -25,6 +26,12 @@ export const LIMITS = {
25
26
  maxStringLength: 2_000,
26
27
  /** Length of multiline text. */
27
28
  maxTextLength: 50_000,
29
+ /** Named datasets; enforced with the dataset's path by `validateDatasets`. */
30
+ maxDatasets: DATA_LIMITS.maxDatasets,
31
+ /** Rows in one dataset or inline `data` list. */
32
+ maxDatasetRows: DATA_LIMITS.maxRows,
33
+ /** Distinct fields across one dataset's rows. */
34
+ maxDatasetFields: DATA_LIMITS.maxFields,
28
35
  };
29
36
  function walk(value, path, depth, state) {
30
37
  if (depth > state.depth)
@@ -1 +1 @@
1
- {"version":3,"file":"bounds.js","sourceRoot":"","sources":["../../src/spec/bounds.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bounds.js","sourceRoot":"","sources":["../../src/spec/bounds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `visibleWhen`: show a block only while a page state value matches.
3
+ *
4
+ * A condition is data, never an expression: one state path, one operator from
5
+ * a closed list, and scalar operands. The compiler evaluates it against the
6
+ * initial `state` so the emitted markup already shows the initial view (with
7
+ * scripts off, in print and in a screenshot), and the runtime re-evaluates the
8
+ * same condition after every state change. `evaluateCondition` here and
9
+ * `evalCondition` in the runtime's state part must agree exactly.
10
+ */
11
+ import { type DataScalar } from '../data/dataset-types.js';
12
+ import { type DiagnosticBag } from '../diagnostics.js';
13
+ import { type JsonValue } from '../json.js';
14
+ export type Condition = {
15
+ path: string;
16
+ op: 'equals' | 'notEquals';
17
+ value: DataScalar;
18
+ } | {
19
+ path: string;
20
+ op: 'in' | 'notIn';
21
+ value: DataScalar[];
22
+ } | {
23
+ path: string;
24
+ op: 'truthy' | 'falsy';
25
+ };
26
+ export declare const CONDITION_OPERATORS: readonly ["equals", "notEquals", "in", "notIn", "truthy", "falsy"];
27
+ /** Values an `in` or `notIn` list may hold. */
28
+ export declare const MAX_CONDITION_VALUES = 20;
29
+ /** JSON Schema for `visibleWhen`: the path plus exactly one operator. */
30
+ export declare const CONDITION_JSON_SCHEMA: Record<string, unknown>;
31
+ /**
32
+ * Validate an author condition, `{ path: state.metric, equals: cost }`. Exactly
33
+ * one operator key. A path whose first key is not declared in `state` is a
34
+ * warning: the condition reads as unset until an action sets it.
35
+ */
36
+ export declare function validateCondition(value: unknown, path: string, bag: DiagnosticBag, state: Record<string, JsonValue>): Condition | undefined;
37
+ /**
38
+ * Evaluate a condition against a state snapshot. Strict equality, list
39
+ * membership by strict equality, and JavaScript truthiness: the same rules
40
+ * the runtime applies after every state change.
41
+ */
42
+ export declare function evaluateCondition(condition: Condition, state: Record<string, JsonValue>): boolean;
43
+ //# sourceMappingURL=conditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../src/spec/conditions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAgB,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG3D,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,CAAC;AAE7C,eAAO,MAAM,mBAAmB,oEAOtB,CAAC;AAGX,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAIvC,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CA0BzD,CAAC;AAmCF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAC/B,SAAS,GAAG,SAAS,CA8DvB;AAYD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAgBjG"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * `visibleWhen`: show a block only while a page state value matches.
3
+ *
4
+ * A condition is data, never an expression: one state path, one operator from
5
+ * a closed list, and scalar operands. The compiler evaluates it against the
6
+ * initial `state` so the emitted markup already shows the initial view (with
7
+ * scripts off, in print and in a screenshot), and the runtime re-evaluates the
8
+ * same condition after every state change. `evaluateCondition` here and
9
+ * `evalCondition` in the runtime's state part must agree exactly.
10
+ */
11
+ import { isDataScalar } from '../data/dataset-types.js';
12
+ import { pathIndex, pathKey } from '../diagnostics.js';
13
+ import { isPlainObject } from '../json.js';
14
+ import { isSafeStatePath, STATE_PATH_PATTERN } from '../registry/actions.js';
15
+ export const CONDITION_OPERATORS = [
16
+ 'equals',
17
+ 'notEquals',
18
+ 'in',
19
+ 'notIn',
20
+ 'truthy',
21
+ 'falsy',
22
+ ];
23
+ /** Values an `in` or `notIn` list may hold. */
24
+ export const MAX_CONDITION_VALUES = 20;
25
+ const CONDITION_KEYS = ['path', ...CONDITION_OPERATORS];
26
+ /** JSON Schema for `visibleWhen`: the path plus exactly one operator. */
27
+ export const CONDITION_JSON_SCHEMA = {
28
+ type: 'object',
29
+ description: 'Show the block only while a state value matches. Exactly one operator.',
30
+ additionalProperties: false,
31
+ required: ['path'],
32
+ minProperties: 2,
33
+ maxProperties: 2,
34
+ properties: {
35
+ path: { type: 'string', pattern: STATE_PATH_PATTERN.source },
36
+ equals: { $ref: '#/$defs/dataScalar' },
37
+ notEquals: { $ref: '#/$defs/dataScalar' },
38
+ in: {
39
+ type: 'array',
40
+ minItems: 1,
41
+ maxItems: MAX_CONDITION_VALUES,
42
+ items: { $ref: '#/$defs/dataScalar' },
43
+ },
44
+ notIn: {
45
+ type: 'array',
46
+ minItems: 1,
47
+ maxItems: MAX_CONDITION_VALUES,
48
+ items: { $ref: '#/$defs/dataScalar' },
49
+ },
50
+ truthy: { const: true },
51
+ falsy: { const: true },
52
+ },
53
+ };
54
+ function isOperator(key) {
55
+ return CONDITION_OPERATORS.includes(key);
56
+ }
57
+ function operand(op, value, path, bag) {
58
+ const fail = (message, at = path) => {
59
+ bag.add({ code: 'SPEC_VALIDATION_ERROR', path: at, message });
60
+ return { ok: false };
61
+ };
62
+ if (op === 'truthy' || op === 'falsy') {
63
+ return value === true ? { ok: true } : fail(`"${op}" takes the value true`);
64
+ }
65
+ if (op === 'equals' || op === 'notEquals') {
66
+ return isDataScalar(value)
67
+ ? { ok: true, value }
68
+ : fail(`"${op}" takes a string, number, boolean, or null`);
69
+ }
70
+ if (!Array.isArray(value) || value.length === 0 || value.length > MAX_CONDITION_VALUES) {
71
+ return fail(`"${op}" takes a list of 1-${MAX_CONDITION_VALUES} values`);
72
+ }
73
+ for (let index = 0; index < value.length; index += 1) {
74
+ if (!isDataScalar(value[index])) {
75
+ return fail('expected a string, number, boolean, or null', pathIndex(path, index));
76
+ }
77
+ }
78
+ return { ok: true, value: value };
79
+ }
80
+ /**
81
+ * Validate an author condition, `{ path: state.metric, equals: cost }`. Exactly
82
+ * one operator key. A path whose first key is not declared in `state` is a
83
+ * warning: the condition reads as unset until an action sets it.
84
+ */
85
+ export function validateCondition(value, path, bag, state) {
86
+ if (!isPlainObject(value)) {
87
+ bag.add({
88
+ code: 'SPEC_VALIDATION_ERROR',
89
+ path,
90
+ message: 'expected a condition such as { path: state.view, equals: table }',
91
+ });
92
+ return undefined;
93
+ }
94
+ let valid = true;
95
+ for (const key of Object.keys(value)) {
96
+ if (CONDITION_KEYS.includes(key))
97
+ continue;
98
+ valid = false;
99
+ bag.add({
100
+ code: 'SPEC_VALIDATION_ERROR',
101
+ path: pathKey(path, key),
102
+ message: `unknown condition field "${key}"`,
103
+ details: { allowed: [...CONDITION_KEYS] },
104
+ });
105
+ }
106
+ const statePath = value.path;
107
+ const pathAt = pathKey(path, 'path');
108
+ if (typeof statePath !== 'string' || !isSafeStatePath(statePath)) {
109
+ valid = false;
110
+ bag.add({
111
+ code: 'SPEC_VALIDATION_ERROR',
112
+ path: pathAt,
113
+ message: `"${String(statePath)}" is not a state path of the form state.<key>[.<key>...]`,
114
+ });
115
+ }
116
+ const operators = Object.keys(value).filter(isOperator);
117
+ const op = operators[0];
118
+ if (operators.length !== 1 || op === undefined) {
119
+ bag.add({
120
+ code: 'SPEC_VALIDATION_ERROR',
121
+ path,
122
+ message: `a condition needs exactly one operator, found ${operators.length}`,
123
+ details: { allowed: [...CONDITION_OPERATORS] },
124
+ });
125
+ return undefined;
126
+ }
127
+ const checked = operand(op, value[op], pathKey(path, op), bag);
128
+ if (!valid || !checked.ok || typeof statePath !== 'string')
129
+ return undefined;
130
+ const firstKey = statePath.split('.')[1] ?? '';
131
+ if (!Object.hasOwn(state, firstKey)) {
132
+ bag.add({
133
+ code: 'SPEC_VALIDATION_ERROR',
134
+ severity: 'warning',
135
+ path: pathAt,
136
+ message: `"state.${firstKey}" is not declared in state, so the condition starts unset`,
137
+ details: { known: Object.keys(state) },
138
+ });
139
+ }
140
+ if (op === 'truthy' || op === 'falsy')
141
+ return { path: statePath, op };
142
+ if (op === 'in' || op === 'notIn') {
143
+ return { path: statePath, op, value: checked.value };
144
+ }
145
+ return { path: statePath, op, value: checked.value };
146
+ }
147
+ /** Read a `state.` path; a missing key reads as undefined, like the runtime's `readPath`. */
148
+ function readStatePath(path, state) {
149
+ let cursor = state;
150
+ for (const part of path.split('.').slice(1)) {
151
+ if (!isPlainObject(cursor))
152
+ return undefined;
153
+ cursor = Object.hasOwn(cursor, part) ? cursor[part] : undefined;
154
+ }
155
+ return cursor;
156
+ }
157
+ /**
158
+ * Evaluate a condition against a state snapshot. Strict equality, list
159
+ * membership by strict equality, and JavaScript truthiness: the same rules
160
+ * the runtime applies after every state change.
161
+ */
162
+ export function evaluateCondition(condition, state) {
163
+ const value = readStatePath(condition.path, state);
164
+ switch (condition.op) {
165
+ case 'equals':
166
+ return value === condition.value;
167
+ case 'notEquals':
168
+ return value !== condition.value;
169
+ case 'in':
170
+ return condition.value.some((candidate) => candidate === value);
171
+ case 'notIn':
172
+ return !condition.value.some((candidate) => candidate === value);
173
+ case 'truthy':
174
+ return Boolean(value);
175
+ case 'falsy':
176
+ return !value;
177
+ }
178
+ }
179
+ //# sourceMappingURL=conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/spec/conditions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The network gate for remote references.
3
+ *
4
+ * Validation and rendering both decide whether a remote reference may load, so
5
+ * the decision lives here, below both, and the two can never disagree about
6
+ * what a page's `policy.network` allows.
7
+ */
8
+ import type { NetworkPolicy } from '../ir.js';
9
+ /** The capabilities a remote reference can be gated by. */
10
+ export type MediaCapability = 'images' | 'media';
11
+ export declare function isRemote(reference: string): boolean;
12
+ export declare function capabilityAllowed(policy: NetworkPolicy, capability: string): boolean;
13
+ /**
14
+ * Decide whether a remote reference may be loaded.
15
+ *
16
+ * Two gates apply. The capability must be opted into, and when the page declares
17
+ * a provider allowlist the reference's host must belong to one of those
18
+ * providers. A block that names a provider itself requires that provider to be
19
+ * allowlisted, so a spec cannot promote an arbitrary host to trusted by
20
+ * labelling it "youtube".
21
+ */
22
+ export declare function networkAllows(policy: NetworkPolicy, capability: MediaCapability, reference: string, provider: string): boolean;
23
+ /**
24
+ * Why a remote reference was held back. The page may deny the network outright,
25
+ * leave the capability out, or allow it only for other hosts.
26
+ */
27
+ export declare function blockedReason(policy: NetworkPolicy, capability: MediaCapability): string;
28
+ /**
29
+ * True when a still image reference (a poster, for example) may be emitted: a
30
+ * local path always may, a remote one only through the `images` gate.
31
+ */
32
+ export declare function imageReferenceAllowed(policy: NetworkPolicy, reference: string): boolean;
33
+ //# sourceMappingURL=network-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-policy.d.ts","sourceRoot":"","sources":["../../src/spec/network-policy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAST;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,GAAG,MAAM,CAIxF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEvF"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The network gate for remote references.
3
+ *
4
+ * Validation and rendering both decide whether a remote reference may load, so
5
+ * the decision lives here, below both, and the two can never disagree about
6
+ * what a page's `policy.network` allows.
7
+ */
8
+ import { hostMatchesAnyProvider, hostMatchesProvider } from './providers.js';
9
+ export function isRemote(reference) {
10
+ return /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(reference);
11
+ }
12
+ export function capabilityAllowed(policy, capability) {
13
+ if (policy === 'deny')
14
+ return false;
15
+ return policy.allow.includes(capability);
16
+ }
17
+ /**
18
+ * Decide whether a remote reference may be loaded.
19
+ *
20
+ * Two gates apply. The capability must be opted into, and when the page declares
21
+ * a provider allowlist the reference's host must belong to one of those
22
+ * providers. A block that names a provider itself requires that provider to be
23
+ * allowlisted, so a spec cannot promote an arbitrary host to trusted by
24
+ * labelling it "youtube".
25
+ */
26
+ export function networkAllows(policy, capability, reference, provider) {
27
+ if (!capabilityAllowed(policy, capability))
28
+ return false;
29
+ if (policy === 'deny')
30
+ return false;
31
+ const declared = policy.providers ?? [];
32
+ if (provider !== '') {
33
+ return declared.includes(provider) && hostMatchesProvider(provider, reference);
34
+ }
35
+ if (declared.length === 0)
36
+ return true;
37
+ return hostMatchesAnyProvider(declared, reference);
38
+ }
39
+ /**
40
+ * Why a remote reference was held back. The page may deny the network outright,
41
+ * leave the capability out, or allow it only for other hosts.
42
+ */
43
+ export function blockedReason(policy, capability) {
44
+ if (policy === 'deny')
45
+ return 'the page denies network access';
46
+ if (!capabilityAllowed(policy, capability))
47
+ return `the page does not allow remote ${capability}`;
48
+ return 'its host is not on the page’s provider allowlist';
49
+ }
50
+ /**
51
+ * True when a still image reference (a poster, for example) may be emitted: a
52
+ * local path always may, a remote one only through the `images` gate.
53
+ */
54
+ export function imageReferenceAllowed(policy, reference) {
55
+ return !isRemote(reference) || networkAllows(policy, 'images', reference, '');
56
+ }
57
+ //# sourceMappingURL=network-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-policy.js","sourceRoot":"","sources":["../../src/spec/network-policy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAK7E,MAAM,UAAU,QAAQ,CAAC,SAAiB;IACxC,OAAO,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAqB,EAAE,UAAkB;IACzE,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAqB,EACrB,UAA2B,EAC3B,SAAiB,EACjB,QAAgB;IAEhB,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IACxC,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,UAA2B;IAC9E,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,gCAAgC,CAAC;IAC/D,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC;QAAE,OAAO,kCAAkC,UAAU,EAAE,CAAC;IAClG,OAAO,kDAAkD,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAqB,EAAE,SAAiB;IAC5E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AAChF,CAAC"}
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import { type Diagnostic } from '../diagnostics.js';
11
11
  import type { IrDocument } from '../ir.js';
12
+ import type { BlockRegistry } from '../registry/block-module.js';
12
13
  import { type BoundsReport } from './bounds.js';
13
14
  import { type ParseOptions } from './parse.js';
14
15
  export interface NormalizeResult {
@@ -17,13 +18,17 @@ export interface NormalizeResult {
17
18
  bounds: BoundsReport;
18
19
  }
19
20
  export declare const NETWORK_CAPABILITIES: readonly ["media", "fonts", "images"];
21
+ export interface NormalizeOptions extends ParseOptions {
22
+ /** Internal: the block registry to normalize against. Defaults to the built-in one. */
23
+ registry?: BlockRegistry;
24
+ }
20
25
  /** Build the IR without throwing: diagnostics are returned, not raised. */
21
- export declare function normalizeSpec(input: unknown, options?: ParseOptions): NormalizeResult;
26
+ export declare function normalizeSpec(input: unknown, options?: NormalizeOptions): NormalizeResult;
22
27
  /**
23
28
  * Normalize or throw.
24
29
  *
25
30
  * The thrown error carries the first error's code and path, and lists every
26
31
  * diagnostic in `details.diagnostics` so a caller can render a full report.
27
32
  */
28
- export declare function normalize(input: unknown, options?: ParseOptions): IrDocument;
33
+ export declare function normalize(input: unknown, options?: NormalizeOptions): IrDocument;
29
34
  //# sourceMappingURL=normalize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/spec/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAqC,MAAM,mBAAmB,CAAC;AAGvF,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,UAAU,CAAC;AAO5D,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,KAAK,YAAY,EAAa,MAAM,YAAY,CAAC;AAG1D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,UAAU,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;CACtB;AAKD,eAAO,MAAM,oBAAoB,uCAAwC,CAAC;AAkmB1E,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,eAAe,CA+EzF;AAqBD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,UAAU,CAchF"}
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/spec/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAAE,KAAK,UAAU,EAAqC,MAAM,mBAAmB,CAAC;AAGvF,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,UAAU,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,6BAA6B,CAAC;AAS/E,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,aAAa,CAAC;AAKrE,OAAO,EAAE,KAAK,YAAY,EAAa,MAAM,YAAY,CAAC;AAG1D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,UAAU,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;CACtB;AAMD,eAAO,MAAM,oBAAoB,uCAAwC,CAAC;AAW1E,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,uFAAuF;IACvF,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAmvBD,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB,GAAG,eAAe,CAyG7F;AAsBD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB,GAAG,UAAU,CAcpF"}