@bestagentkits/render 0.1.1-next.1 → 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 (635) hide show
  1. package/CHANGELOG.md +209 -1
  2. package/README.md +324 -44
  3. package/assets/fonts/bricolage-grotesque/OFL.txt +93 -0
  4. package/assets/fonts/fraunces/OFL.txt +93 -0
  5. package/assets/fonts/geist/OFL.txt +93 -0
  6. package/assets/fonts/inter-tight/OFL.txt +93 -0
  7. package/assets/fonts/jetbrains-mono/OFL.txt +93 -0
  8. package/assets/fonts/plus-jakarta-sans/OFL.txt +93 -0
  9. package/dist/blocks/chart/chart-check-kind-rules.d.ts +10 -0
  10. package/dist/blocks/chart/chart-check-kind-rules.d.ts.map +1 -0
  11. package/dist/blocks/chart/chart-check-kind-rules.js +151 -0
  12. package/dist/blocks/chart/chart-check-kind-rules.js.map +1 -0
  13. package/dist/blocks/chart/chart-check.d.ts +15 -0
  14. package/dist/blocks/chart/chart-check.d.ts.map +1 -0
  15. package/dist/blocks/chart/chart-check.js +196 -0
  16. package/dist/blocks/chart/chart-check.js.map +1 -0
  17. package/dist/blocks/chart/chart-encoding-schema.d.ts +7 -0
  18. package/dist/blocks/chart/chart-encoding-schema.d.ts.map +1 -0
  19. package/dist/blocks/chart/chart-encoding-schema.js +39 -0
  20. package/dist/blocks/chart/chart-encoding-schema.js.map +1 -0
  21. package/dist/blocks/chart/chart-encodings.d.ts +29 -0
  22. package/dist/blocks/chart/chart-encodings.d.ts.map +1 -0
  23. package/dist/blocks/chart/chart-encodings.js +59 -0
  24. package/dist/blocks/chart/chart-encodings.js.map +1 -0
  25. package/dist/blocks/chart/chart-kinds.d.ts +18 -0
  26. package/dist/blocks/chart/chart-kinds.d.ts.map +1 -0
  27. package/dist/blocks/chart/chart-kinds.js +60 -0
  28. package/dist/blocks/chart/chart-kinds.js.map +1 -0
  29. package/dist/blocks/chart/chart-model-rows.d.ts +23 -0
  30. package/dist/blocks/chart/chart-model-rows.d.ts.map +1 -0
  31. package/dist/blocks/chart/chart-model-rows.js +153 -0
  32. package/dist/blocks/chart/chart-model-rows.js.map +1 -0
  33. package/dist/blocks/chart/chart-model.d.ts +17 -0
  34. package/dist/blocks/chart/chart-model.d.ts.map +1 -0
  35. package/dist/blocks/chart/chart-model.js +131 -0
  36. package/dist/blocks/chart/chart-model.js.map +1 -0
  37. package/dist/blocks/chart/chart-styles.d.ts +3 -0
  38. package/dist/blocks/chart/chart-styles.d.ts.map +1 -0
  39. package/dist/blocks/chart/chart-styles.js +76 -0
  40. package/dist/blocks/chart/chart-styles.js.map +1 -0
  41. package/dist/blocks/chart/chart.d.ts +12 -0
  42. package/dist/blocks/chart/chart.d.ts.map +1 -0
  43. package/dist/blocks/chart/chart.js +73 -0
  44. package/dist/blocks/chart/chart.js.map +1 -0
  45. package/dist/blocks/chart/index.d.ts +4 -0
  46. package/dist/blocks/chart/index.d.ts.map +1 -0
  47. package/dist/blocks/chart/index.js +8 -0
  48. package/dist/blocks/chart/index.js.map +1 -0
  49. package/dist/blocks/composition/accordion.d.ts +4 -0
  50. package/dist/blocks/composition/accordion.d.ts.map +1 -0
  51. package/dist/blocks/composition/accordion.js +45 -0
  52. package/dist/blocks/composition/accordion.js.map +1 -0
  53. package/dist/blocks/composition/bento.d.ts +4 -0
  54. package/dist/blocks/composition/bento.d.ts.map +1 -0
  55. package/dist/blocks/composition/bento.js +91 -0
  56. package/dist/blocks/composition/bento.js.map +1 -0
  57. package/dist/blocks/composition/carousel.d.ts +4 -0
  58. package/dist/blocks/composition/carousel.d.ts.map +1 -0
  59. package/dist/blocks/composition/carousel.js +51 -0
  60. package/dist/blocks/composition/carousel.js.map +1 -0
  61. package/dist/blocks/composition/composition-runtime.d.ts +14 -0
  62. package/dist/blocks/composition/composition-runtime.d.ts.map +1 -0
  63. package/dist/blocks/composition/composition-runtime.js +136 -0
  64. package/dist/blocks/composition/composition-runtime.js.map +1 -0
  65. package/dist/blocks/composition/composition-styles.d.ts +10 -0
  66. package/dist/blocks/composition/composition-styles.d.ts.map +1 -0
  67. package/dist/blocks/composition/composition-styles.js +80 -0
  68. package/dist/blocks/composition/composition-styles.js.map +1 -0
  69. package/dist/blocks/composition/index.d.ts +4 -0
  70. package/dist/blocks/composition/index.d.ts.map +1 -0
  71. package/dist/blocks/composition/index.js +11 -0
  72. package/dist/blocks/composition/index.js.map +1 -0
  73. package/dist/blocks/composition/nestable-blocks.d.ts +37 -0
  74. package/dist/blocks/composition/nestable-blocks.d.ts.map +1 -0
  75. package/dist/blocks/composition/nestable-blocks.js +92 -0
  76. package/dist/blocks/composition/nestable-blocks.js.map +1 -0
  77. package/dist/blocks/composition/tabs.d.ts +4 -0
  78. package/dist/blocks/composition/tabs.d.ts.map +1 -0
  79. package/dist/blocks/composition/tabs.js +48 -0
  80. package/dist/blocks/composition/tabs.js.map +1 -0
  81. package/dist/blocks/controls/checkbox.d.ts +12 -0
  82. package/dist/blocks/controls/checkbox.d.ts.map +1 -0
  83. package/dist/blocks/controls/checkbox.js +43 -0
  84. package/dist/blocks/controls/checkbox.js.map +1 -0
  85. package/dist/blocks/controls/choice-options.d.ts +24 -0
  86. package/dist/blocks/controls/choice-options.d.ts.map +1 -0
  87. package/dist/blocks/controls/choice-options.js +117 -0
  88. package/dist/blocks/controls/choice-options.js.map +1 -0
  89. package/dist/blocks/controls/control-shared.d.ts +66 -0
  90. package/dist/blocks/controls/control-shared.d.ts.map +1 -0
  91. package/dist/blocks/controls/control-shared.js +241 -0
  92. package/dist/blocks/controls/control-shared.js.map +1 -0
  93. package/dist/blocks/controls/controls-runtime.d.ts +17 -0
  94. package/dist/blocks/controls/controls-runtime.d.ts.map +1 -0
  95. package/dist/blocks/controls/controls-runtime.js +180 -0
  96. package/dist/blocks/controls/controls-runtime.js.map +1 -0
  97. package/dist/blocks/controls/controls-styles.d.ts +14 -0
  98. package/dist/blocks/controls/controls-styles.d.ts.map +1 -0
  99. package/dist/blocks/controls/controls-styles.js +54 -0
  100. package/dist/blocks/controls/controls-styles.js.map +1 -0
  101. package/dist/blocks/controls/date-input.d.ts +6 -0
  102. package/dist/blocks/controls/date-input.d.ts.map +1 -0
  103. package/dist/blocks/controls/date-input.js +58 -0
  104. package/dist/blocks/controls/date-input.js.map +1 -0
  105. package/dist/blocks/controls/field-input.d.ts +10 -0
  106. package/dist/blocks/controls/field-input.d.ts.map +1 -0
  107. package/dist/blocks/controls/field-input.js +20 -0
  108. package/dist/blocks/controls/field-input.js.map +1 -0
  109. package/dist/blocks/controls/filter-bar.d.ts +11 -0
  110. package/dist/blocks/controls/filter-bar.d.ts.map +1 -0
  111. package/dist/blocks/controls/filter-bar.js +115 -0
  112. package/dist/blocks/controls/filter-bar.js.map +1 -0
  113. package/dist/blocks/controls/index.d.ts +4 -0
  114. package/dist/blocks/controls/index.d.ts.map +1 -0
  115. package/dist/blocks/controls/index.js +41 -0
  116. package/dist/blocks/controls/index.js.map +1 -0
  117. package/dist/blocks/controls/number-input.d.ts +4 -0
  118. package/dist/blocks/controls/number-input.d.ts.map +1 -0
  119. package/dist/blocks/controls/number-input.js +62 -0
  120. package/dist/blocks/controls/number-input.js.map +1 -0
  121. package/dist/blocks/controls/radio-group.d.ts +4 -0
  122. package/dist/blocks/controls/radio-group.d.ts.map +1 -0
  123. package/dist/blocks/controls/radio-group.js +56 -0
  124. package/dist/blocks/controls/radio-group.js.map +1 -0
  125. package/dist/blocks/controls/select.d.ts +4 -0
  126. package/dist/blocks/controls/select.d.ts.map +1 -0
  127. package/dist/blocks/controls/select.js +49 -0
  128. package/dist/blocks/controls/select.js.map +1 -0
  129. package/dist/blocks/controls/switch.d.ts +4 -0
  130. package/dist/blocks/controls/switch.d.ts.map +1 -0
  131. package/dist/blocks/controls/switch.js +22 -0
  132. package/dist/blocks/controls/switch.js.map +1 -0
  133. package/dist/blocks/controls/text-input.d.ts +4 -0
  134. package/dist/blocks/controls/text-input.d.ts.map +1 -0
  135. package/dist/blocks/controls/text-input.js +42 -0
  136. package/dist/blocks/controls/text-input.js.map +1 -0
  137. package/dist/blocks/data-table/data-table-cells.d.ts +26 -0
  138. package/dist/blocks/data-table/data-table-cells.d.ts.map +1 -0
  139. package/dist/blocks/data-table/data-table-cells.js +154 -0
  140. package/dist/blocks/data-table/data-table-cells.js.map +1 -0
  141. package/dist/blocks/data-table/data-table-check.d.ts +10 -0
  142. package/dist/blocks/data-table/data-table-check.d.ts.map +1 -0
  143. package/dist/blocks/data-table/data-table-check.js +99 -0
  144. package/dist/blocks/data-table/data-table-check.js.map +1 -0
  145. package/dist/blocks/data-table/data-table-columns.d.ts +41 -0
  146. package/dist/blocks/data-table/data-table-columns.d.ts.map +1 -0
  147. package/dist/blocks/data-table/data-table-columns.js +155 -0
  148. package/dist/blocks/data-table/data-table-columns.js.map +1 -0
  149. package/dist/blocks/data-table/data-table-runtime.d.ts +15 -0
  150. package/dist/blocks/data-table/data-table-runtime.d.ts.map +1 -0
  151. package/dist/blocks/data-table/data-table-runtime.js +106 -0
  152. package/dist/blocks/data-table/data-table-runtime.js.map +1 -0
  153. package/dist/blocks/data-table/data-table-styles.d.ts +11 -0
  154. package/dist/blocks/data-table/data-table-styles.d.ts.map +1 -0
  155. package/dist/blocks/data-table/data-table-styles.js +74 -0
  156. package/dist/blocks/data-table/data-table-styles.js.map +1 -0
  157. package/dist/blocks/data-table/data-table.d.ts +17 -0
  158. package/dist/blocks/data-table/data-table.d.ts.map +1 -0
  159. package/dist/blocks/data-table/data-table.js +159 -0
  160. package/dist/blocks/data-table/data-table.js.map +1 -0
  161. package/dist/blocks/data-table/index.d.ts +4 -0
  162. package/dist/blocks/data-table/index.d.ts.map +1 -0
  163. package/dist/blocks/data-table/index.js +18 -0
  164. package/dist/blocks/data-table/index.js.map +1 -0
  165. package/dist/blocks/engineering/api-endpoint.d.ts +12 -0
  166. package/dist/blocks/engineering/api-endpoint.d.ts.map +1 -0
  167. package/dist/blocks/engineering/api-endpoint.js +174 -0
  168. package/dist/blocks/engineering/api-endpoint.js.map +1 -0
  169. package/dist/blocks/engineering/engineering-helpers.d.ts +49 -0
  170. package/dist/blocks/engineering/engineering-helpers.d.ts.map +1 -0
  171. package/dist/blocks/engineering/engineering-helpers.js +156 -0
  172. package/dist/blocks/engineering/engineering-helpers.js.map +1 -0
  173. package/dist/blocks/engineering/engineering-styles.d.ts +12 -0
  174. package/dist/blocks/engineering/engineering-styles.d.ts.map +1 -0
  175. package/dist/blocks/engineering/engineering-styles.js +174 -0
  176. package/dist/blocks/engineering/engineering-styles.js.map +1 -0
  177. package/dist/blocks/engineering/index.d.ts +4 -0
  178. package/dist/blocks/engineering/index.d.ts.map +1 -0
  179. package/dist/blocks/engineering/index.js +30 -0
  180. package/dist/blocks/engineering/index.js.map +1 -0
  181. package/dist/blocks/engineering/kanban.d.ts +11 -0
  182. package/dist/blocks/engineering/kanban.d.ts.map +1 -0
  183. package/dist/blocks/engineering/kanban.js +162 -0
  184. package/dist/blocks/engineering/kanban.js.map +1 -0
  185. package/dist/blocks/engineering/log-viewer.d.ts +14 -0
  186. package/dist/blocks/engineering/log-viewer.d.ts.map +1 -0
  187. package/dist/blocks/engineering/log-viewer.js +158 -0
  188. package/dist/blocks/engineering/log-viewer.js.map +1 -0
  189. package/dist/blocks/engineering/roadmap.d.ts +13 -0
  190. package/dist/blocks/engineering/roadmap.d.ts.map +1 -0
  191. package/dist/blocks/engineering/roadmap.js +197 -0
  192. package/dist/blocks/engineering/roadmap.js.map +1 -0
  193. package/dist/blocks/engineering/schema-viewer.d.ts +25 -0
  194. package/dist/blocks/engineering/schema-viewer.d.ts.map +1 -0
  195. package/dist/blocks/engineering/schema-viewer.js +124 -0
  196. package/dist/blocks/engineering/schema-viewer.js.map +1 -0
  197. package/dist/blocks/engineering/test-results.d.ts +12 -0
  198. package/dist/blocks/engineering/test-results.d.ts.map +1 -0
  199. package/dist/blocks/engineering/test-results.js +180 -0
  200. package/dist/blocks/engineering/test-results.js.map +1 -0
  201. package/dist/blocks/evidence/annotated-image.d.ts +15 -0
  202. package/dist/blocks/evidence/annotated-image.d.ts.map +1 -0
  203. package/dist/blocks/evidence/annotated-image.js +99 -0
  204. package/dist/blocks/evidence/annotated-image.js.map +1 -0
  205. package/dist/blocks/evidence/benchmark-comparison.d.ts +11 -0
  206. package/dist/blocks/evidence/benchmark-comparison.d.ts.map +1 -0
  207. package/dist/blocks/evidence/benchmark-comparison.js +262 -0
  208. package/dist/blocks/evidence/benchmark-comparison.js.map +1 -0
  209. package/dist/blocks/evidence/benchmark-verdict.d.ts +26 -0
  210. package/dist/blocks/evidence/benchmark-verdict.d.ts.map +1 -0
  211. package/dist/blocks/evidence/benchmark-verdict.js +31 -0
  212. package/dist/blocks/evidence/benchmark-verdict.js.map +1 -0
  213. package/dist/blocks/evidence/evidence-helpers.d.ts +39 -0
  214. package/dist/blocks/evidence/evidence-helpers.d.ts.map +1 -0
  215. package/dist/blocks/evidence/evidence-helpers.js +87 -0
  216. package/dist/blocks/evidence/evidence-helpers.js.map +1 -0
  217. package/dist/blocks/evidence/evidence-styles.d.ts +12 -0
  218. package/dist/blocks/evidence/evidence-styles.d.ts.map +1 -0
  219. package/dist/blocks/evidence/evidence-styles.js +88 -0
  220. package/dist/blocks/evidence/evidence-styles.js.map +1 -0
  221. package/dist/blocks/evidence/index.d.ts +4 -0
  222. package/dist/blocks/evidence/index.d.ts.map +1 -0
  223. package/dist/blocks/evidence/index.js +15 -0
  224. package/dist/blocks/evidence/index.js.map +1 -0
  225. package/dist/blocks/evidence/metric-breakdown.d.ts +22 -0
  226. package/dist/blocks/evidence/metric-breakdown.d.ts.map +1 -0
  227. package/dist/blocks/evidence/metric-breakdown.js +203 -0
  228. package/dist/blocks/evidence/metric-breakdown.js.map +1 -0
  229. package/dist/blocks/evidence/references.d.ts +13 -0
  230. package/dist/blocks/evidence/references.d.ts.map +1 -0
  231. package/dist/blocks/evidence/references.js +103 -0
  232. package/dist/blocks/evidence/references.js.map +1 -0
  233. package/dist/blocks/index.d.ts +8 -0
  234. package/dist/blocks/index.d.ts.map +1 -0
  235. package/dist/blocks/index.js +24 -0
  236. package/dist/blocks/index.js.map +1 -0
  237. package/dist/blocks/layout/grid-item.d.ts +4 -0
  238. package/dist/blocks/layout/grid-item.d.ts.map +1 -0
  239. package/dist/blocks/layout/grid-item.js +65 -0
  240. package/dist/blocks/layout/grid-item.js.map +1 -0
  241. package/dist/blocks/layout/grid.d.ts +9 -0
  242. package/dist/blocks/layout/grid.d.ts.map +1 -0
  243. package/dist/blocks/layout/grid.js +99 -0
  244. package/dist/blocks/layout/grid.js.map +1 -0
  245. package/dist/blocks/layout/index.d.ts +4 -0
  246. package/dist/blocks/layout/index.d.ts.map +1 -0
  247. package/dist/blocks/layout/index.js +23 -0
  248. package/dist/blocks/layout/index.js.map +1 -0
  249. package/dist/blocks/layout/layout-styles.d.ts +40 -0
  250. package/dist/blocks/layout/layout-styles.d.ts.map +1 -0
  251. package/dist/blocks/layout/layout-styles.js +110 -0
  252. package/dist/blocks/layout/layout-styles.js.map +1 -0
  253. package/dist/blocks/layout/main-aside.d.ts +4 -0
  254. package/dist/blocks/layout/main-aside.d.ts.map +1 -0
  255. package/dist/blocks/layout/main-aside.js +21 -0
  256. package/dist/blocks/layout/main-aside.js.map +1 -0
  257. package/dist/blocks/layout/rail-layout.d.ts +4 -0
  258. package/dist/blocks/layout/rail-layout.d.ts.map +1 -0
  259. package/dist/blocks/layout/rail-layout.js +33 -0
  260. package/dist/blocks/layout/rail-layout.js.map +1 -0
  261. package/dist/blocks/layout/semantic-layout-parts.d.ts +14 -0
  262. package/dist/blocks/layout/semantic-layout-parts.d.ts.map +1 -0
  263. package/dist/blocks/layout/semantic-layout-parts.js +9 -0
  264. package/dist/blocks/layout/semantic-layout-parts.js.map +1 -0
  265. package/dist/blocks/layout/sidebar-layout.d.ts +4 -0
  266. package/dist/blocks/layout/sidebar-layout.d.ts.map +1 -0
  267. package/dist/blocks/layout/sidebar-layout.js +30 -0
  268. package/dist/blocks/layout/sidebar-layout.js.map +1 -0
  269. package/dist/blocks/layout/split.d.ts +4 -0
  270. package/dist/blocks/layout/split.d.ts.map +1 -0
  271. package/dist/blocks/layout/split.js +23 -0
  272. package/dist/blocks/layout/split.js.map +1 -0
  273. package/dist/blocks/layout/stack.d.ts +4 -0
  274. package/dist/blocks/layout/stack.d.ts.map +1 -0
  275. package/dist/blocks/layout/stack.js +36 -0
  276. package/dist/blocks/layout/stack.js.map +1 -0
  277. package/dist/blocks/product/calendar-dates.d.ts +59 -0
  278. package/dist/blocks/product/calendar-dates.d.ts.map +1 -0
  279. package/dist/blocks/product/calendar-dates.js +100 -0
  280. package/dist/blocks/product/calendar-dates.js.map +1 -0
  281. package/dist/blocks/product/calendar.d.ts +12 -0
  282. package/dist/blocks/product/calendar.d.ts.map +1 -0
  283. package/dist/blocks/product/calendar.js +125 -0
  284. package/dist/blocks/product/calendar.js.map +1 -0
  285. package/dist/blocks/product/feature-matrix.d.ts +4 -0
  286. package/dist/blocks/product/feature-matrix.d.ts.map +1 -0
  287. package/dist/blocks/product/feature-matrix.js +72 -0
  288. package/dist/blocks/product/feature-matrix.js.map +1 -0
  289. package/dist/blocks/product/gallery.d.ts +14 -0
  290. package/dist/blocks/product/gallery.d.ts.map +1 -0
  291. package/dist/blocks/product/gallery.js +86 -0
  292. package/dist/blocks/product/gallery.js.map +1 -0
  293. package/dist/blocks/product/index.d.ts +4 -0
  294. package/dist/blocks/product/index.d.ts.map +1 -0
  295. package/dist/blocks/product/index.js +40 -0
  296. package/dist/blocks/product/index.js.map +1 -0
  297. package/dist/blocks/product/logo-cloud.d.ts +4 -0
  298. package/dist/blocks/product/logo-cloud.d.ts.map +1 -0
  299. package/dist/blocks/product/logo-cloud.js +42 -0
  300. package/dist/blocks/product/logo-cloud.js.map +1 -0
  301. package/dist/blocks/product/people.d.ts +4 -0
  302. package/dist/blocks/product/people.d.ts.map +1 -0
  303. package/dist/blocks/product/people.js +53 -0
  304. package/dist/blocks/product/people.js.map +1 -0
  305. package/dist/blocks/product/pricing.d.ts +4 -0
  306. package/dist/blocks/product/pricing.d.ts.map +1 -0
  307. package/dist/blocks/product/pricing.js +86 -0
  308. package/dist/blocks/product/pricing.js.map +1 -0
  309. package/dist/blocks/product/product-helpers.d.ts +22 -0
  310. package/dist/blocks/product/product-helpers.d.ts.map +1 -0
  311. package/dist/blocks/product/product-helpers.js +48 -0
  312. package/dist/blocks/product/product-helpers.js.map +1 -0
  313. package/dist/blocks/product/product-runtime.d.ts +15 -0
  314. package/dist/blocks/product/product-runtime.d.ts.map +1 -0
  315. package/dist/blocks/product/product-runtime.js +97 -0
  316. package/dist/blocks/product/product-runtime.js.map +1 -0
  317. package/dist/blocks/product/product-styles.d.ts +14 -0
  318. package/dist/blocks/product/product-styles.d.ts.map +1 -0
  319. package/dist/blocks/product/product-styles.js +120 -0
  320. package/dist/blocks/product/product-styles.js.map +1 -0
  321. package/dist/blocks/product/testimonial.d.ts +8 -0
  322. package/dist/blocks/product/testimonial.d.ts.map +1 -0
  323. package/dist/blocks/product/testimonial.js +67 -0
  324. package/dist/blocks/product/testimonial.js.map +1 -0
  325. package/dist/cli.d.ts +2 -0
  326. package/dist/cli.d.ts.map +1 -1
  327. package/dist/cli.js +193 -39
  328. package/dist/cli.js.map +1 -1
  329. package/dist/data/data-json-schema.d.ts +9 -0
  330. package/dist/data/data-json-schema.d.ts.map +1 -0
  331. package/dist/data/data-json-schema.js +48 -0
  332. package/dist/data/data-json-schema.js.map +1 -0
  333. package/dist/data/dataset-types.d.ts +47 -0
  334. package/dist/data/dataset-types.d.ts.map +1 -0
  335. package/dist/data/dataset-types.js +49 -0
  336. package/dist/data/dataset-types.js.map +1 -0
  337. package/dist/data/format-value.d.ts +39 -0
  338. package/dist/data/format-value.d.ts.map +1 -0
  339. package/dist/data/format-value.js +214 -0
  340. package/dist/data/format-value.js.map +1 -0
  341. package/dist/data/resolve-block-data.d.ts +24 -0
  342. package/dist/data/resolve-block-data.d.ts.map +1 -0
  343. package/dist/data/resolve-block-data.js +190 -0
  344. package/dist/data/resolve-block-data.js.map +1 -0
  345. package/dist/data/transform-pipeline.d.ts +65 -0
  346. package/dist/data/transform-pipeline.d.ts.map +1 -0
  347. package/dist/data/transform-pipeline.js +234 -0
  348. package/dist/data/transform-pipeline.js.map +1 -0
  349. package/dist/data/validate-datasets.d.ts +22 -0
  350. package/dist/data/validate-datasets.d.ts.map +1 -0
  351. package/dist/data/validate-datasets.js +137 -0
  352. package/dist/data/validate-datasets.js.map +1 -0
  353. package/dist/diagram/adapter-markup-fit.d.ts +44 -0
  354. package/dist/diagram/adapter-markup-fit.d.ts.map +1 -0
  355. package/dist/diagram/adapter-markup-fit.js +292 -0
  356. package/dist/diagram/adapter-markup-fit.js.map +1 -0
  357. package/dist/diagram/adapter-stylesheet-filter.d.ts +56 -0
  358. package/dist/diagram/adapter-stylesheet-filter.d.ts.map +1 -0
  359. package/dist/diagram/adapter-stylesheet-filter.js +245 -0
  360. package/dist/diagram/adapter-stylesheet-filter.js.map +1 -0
  361. package/dist/diagram/adapter.d.ts +17 -0
  362. package/dist/diagram/adapter.d.ts.map +1 -1
  363. package/dist/diagram/adapter.js +43 -2
  364. package/dist/diagram/adapter.js.map +1 -1
  365. package/dist/index.d.ts +14 -1
  366. package/dist/index.d.ts.map +1 -1
  367. package/dist/index.js +6 -0
  368. package/dist/index.js.map +1 -1
  369. package/dist/ir.d.ts +18 -0
  370. package/dist/ir.d.ts.map +1 -1
  371. package/dist/ir.js.map +1 -1
  372. package/dist/mcp/mcp-http-transport.d.ts +68 -0
  373. package/dist/mcp/mcp-http-transport.d.ts.map +1 -0
  374. package/dist/mcp/mcp-http-transport.js +140 -0
  375. package/dist/mcp/mcp-http-transport.js.map +1 -0
  376. package/dist/mcp/mcp-json-rpc-dispatch.d.ts +38 -0
  377. package/dist/mcp/mcp-json-rpc-dispatch.d.ts.map +1 -0
  378. package/dist/mcp/mcp-json-rpc-dispatch.js +98 -0
  379. package/dist/mcp/mcp-json-rpc-dispatch.js.map +1 -0
  380. package/dist/mcp/mcp-local-tools.d.ts +20 -0
  381. package/dist/mcp/mcp-local-tools.d.ts.map +1 -0
  382. package/dist/mcp/mcp-local-tools.js +58 -0
  383. package/dist/mcp/mcp-local-tools.js.map +1 -0
  384. package/dist/mcp/mcp-protocol.d.ts +79 -0
  385. package/dist/mcp/mcp-protocol.d.ts.map +1 -0
  386. package/dist/mcp/mcp-protocol.js +83 -0
  387. package/dist/mcp/mcp-protocol.js.map +1 -0
  388. package/dist/mcp/mcp-stdio-transport.d.ts +28 -0
  389. package/dist/mcp/mcp-stdio-transport.d.ts.map +1 -0
  390. package/dist/mcp/mcp-stdio-transport.js +73 -0
  391. package/dist/mcp/mcp-stdio-transport.js.map +1 -0
  392. package/dist/mcp/mcp-tool-definitions.d.ts +66 -0
  393. package/dist/mcp/mcp-tool-definitions.d.ts.map +1 -0
  394. package/dist/mcp/mcp-tool-definitions.js +246 -0
  395. package/dist/mcp/mcp-tool-definitions.js.map +1 -0
  396. package/dist/mcp-server.d.ts +10 -0
  397. package/dist/mcp-server.d.ts.map +1 -0
  398. package/dist/mcp-server.js +9 -0
  399. package/dist/mcp-server.js.map +1 -0
  400. package/dist/recipes/index.d.ts +27 -0
  401. package/dist/recipes/index.d.ts.map +1 -0
  402. package/dist/recipes/index.js +30 -0
  403. package/dist/recipes/index.js.map +1 -0
  404. package/dist/recipes/recipes.generated.d.ts +8 -0
  405. package/dist/recipes/recipes.generated.d.ts.map +1 -0
  406. package/dist/recipes/recipes.generated.js +704 -0
  407. package/dist/recipes/recipes.generated.js.map +1 -0
  408. package/dist/registry/actions.d.ts +2 -0
  409. package/dist/registry/actions.d.ts.map +1 -1
  410. package/dist/registry/actions.js +3 -1
  411. package/dist/registry/actions.js.map +1 -1
  412. package/dist/registry/block-module.d.ts +65 -0
  413. package/dist/registry/block-module.d.ts.map +1 -0
  414. package/dist/registry/block-module.js +19 -0
  415. package/dist/registry/block-module.js.map +1 -0
  416. package/dist/registry/catalog-search.d.ts +32 -0
  417. package/dist/registry/catalog-search.d.ts.map +1 -0
  418. package/dist/registry/catalog-search.js +122 -0
  419. package/dist/registry/catalog-search.js.map +1 -0
  420. package/dist/registry/define-helpers.d.ts +89 -0
  421. package/dist/registry/define-helpers.d.ts.map +1 -0
  422. package/dist/registry/define-helpers.js +87 -0
  423. package/dist/registry/define-helpers.js.map +1 -0
  424. package/dist/registry/describe-many.d.ts +58 -0
  425. package/dist/registry/describe-many.d.ts.map +1 -0
  426. package/dist/registry/describe-many.js +156 -0
  427. package/dist/registry/describe-many.js.map +1 -0
  428. package/dist/registry/prop-schema.d.ts +32 -1
  429. package/dist/registry/prop-schema.d.ts.map +1 -1
  430. package/dist/registry/prop-schema.js +108 -2
  431. package/dist/registry/prop-schema.js.map +1 -1
  432. package/dist/registry/registry-builder.d.ts +17 -0
  433. package/dist/registry/registry-builder.d.ts.map +1 -0
  434. package/dist/registry/registry-builder.js +158 -0
  435. package/dist/registry/registry-builder.js.map +1 -0
  436. package/dist/registry/registry.d.ts +32 -5
  437. package/dist/registry/registry.d.ts.map +1 -1
  438. package/dist/registry/registry.js +67 -14
  439. package/dist/registry/registry.js.map +1 -1
  440. package/dist/registry/roster.d.ts +34 -5
  441. package/dist/registry/roster.d.ts.map +1 -1
  442. package/dist/registry/roster.js +360 -184
  443. package/dist/registry/roster.js.map +1 -1
  444. package/dist/render/block-helpers.d.ts +45 -0
  445. package/dist/render/block-helpers.d.ts.map +1 -0
  446. package/dist/render/block-helpers.js +83 -0
  447. package/dist/render/block-helpers.js.map +1 -0
  448. package/dist/render/blocks.d.ts +10 -35
  449. package/dist/render/blocks.d.ts.map +1 -1
  450. package/dist/render/blocks.js +144 -263
  451. package/dist/render/blocks.js.map +1 -1
  452. package/dist/render/chart-figure-encoded.d.ts +11 -0
  453. package/dist/render/chart-figure-encoded.d.ts.map +1 -0
  454. package/dist/render/chart-figure-encoded.js +81 -0
  455. package/dist/render/chart-figure-encoded.js.map +1 -0
  456. package/dist/render/chart-kinds-cartesian.d.ts +14 -0
  457. package/dist/render/chart-kinds-cartesian.d.ts.map +1 -0
  458. package/dist/render/chart-kinds-cartesian.js +122 -0
  459. package/dist/render/chart-kinds-cartesian.js.map +1 -0
  460. package/dist/render/chart-kinds-composite.d.ts +16 -0
  461. package/dist/render/chart-kinds-composite.d.ts.map +1 -0
  462. package/dist/render/chart-kinds-composite.js +144 -0
  463. package/dist/render/chart-kinds-composite.js.map +1 -0
  464. package/dist/render/chart-kinds-gauge-treemap.d.ts +8 -0
  465. package/dist/render/chart-kinds-gauge-treemap.d.ts.map +1 -0
  466. package/dist/render/chart-kinds-gauge-treemap.js +101 -0
  467. package/dist/render/chart-kinds-gauge-treemap.js.map +1 -0
  468. package/dist/render/chart-kinds-histogram-waterfall.d.ts +17 -0
  469. package/dist/render/chart-kinds-histogram-waterfall.d.ts.map +1 -0
  470. package/dist/render/chart-kinds-histogram-waterfall.js +172 -0
  471. package/dist/render/chart-kinds-histogram-waterfall.js.map +1 -0
  472. package/dist/render/chart-overlays.d.ts +18 -0
  473. package/dist/render/chart-overlays.d.ts.map +1 -0
  474. package/dist/render/chart-overlays.js +58 -0
  475. package/dist/render/chart-overlays.js.map +1 -0
  476. package/dist/render/chart-scales.d.ts +83 -0
  477. package/dist/render/chart-scales.d.ts.map +1 -0
  478. package/dist/render/chart-scales.js +166 -0
  479. package/dist/render/chart-scales.js.map +1 -0
  480. package/dist/render/chart-svg-parts.d.ts +50 -0
  481. package/dist/render/chart-svg-parts.d.ts.map +1 -0
  482. package/dist/render/chart-svg-parts.js +125 -0
  483. package/dist/render/chart-svg-parts.js.map +1 -0
  484. package/dist/render/chart-text.d.ts +18 -0
  485. package/dist/render/chart-text.d.ts.map +1 -0
  486. package/dist/render/chart-text.js +69 -0
  487. package/dist/render/chart-text.js.map +1 -0
  488. package/dist/render/chart-treemap-layout.d.ts +17 -0
  489. package/dist/render/chart-treemap-layout.d.ts.map +1 -0
  490. package/dist/render/chart-treemap-layout.js +74 -0
  491. package/dist/render/chart-treemap-layout.js.map +1 -0
  492. package/dist/render/chart-types.d.ts +107 -0
  493. package/dist/render/chart-types.d.ts.map +1 -0
  494. package/dist/render/chart-types.js +11 -0
  495. package/dist/render/chart-types.js.map +1 -0
  496. package/dist/render/charts.d.ts +33 -11
  497. package/dist/render/charts.d.ts.map +1 -1
  498. package/dist/render/charts.js +145 -109
  499. package/dist/render/charts.js.map +1 -1
  500. package/dist/render/derived-variables.d.ts +37 -0
  501. package/dist/render/derived-variables.d.ts.map +1 -0
  502. package/dist/render/derived-variables.js +40 -0
  503. package/dist/render/derived-variables.js.map +1 -0
  504. package/dist/render/diagram-fallback.d.ts +25 -0
  505. package/dist/render/diagram-fallback.d.ts.map +1 -0
  506. package/dist/render/diagram-fallback.js +86 -0
  507. package/dist/render/diagram-fallback.js.map +1 -0
  508. package/dist/render/document.d.ts +15 -0
  509. package/dist/render/document.d.ts.map +1 -1
  510. package/dist/render/document.js +53 -8
  511. package/dist/render/document.js.map +1 -1
  512. package/dist/render/effects-styles.d.ts +14 -0
  513. package/dist/render/effects-styles.d.ts.map +1 -0
  514. package/dist/render/effects-styles.js +39 -0
  515. package/dist/render/effects-styles.js.map +1 -0
  516. package/dist/render/embedded-fonts.generated.d.ts +22 -0
  517. package/dist/render/embedded-fonts.generated.d.ts.map +1 -0
  518. package/dist/render/embedded-fonts.generated.js +59 -0
  519. package/dist/render/embedded-fonts.generated.js.map +1 -0
  520. package/dist/render/escape.d.ts +10 -0
  521. package/dist/render/escape.d.ts.map +1 -1
  522. package/dist/render/escape.js +28 -0
  523. package/dist/render/escape.js.map +1 -1
  524. package/dist/render/feature-styles.d.ts +14 -0
  525. package/dist/render/feature-styles.d.ts.map +1 -0
  526. package/dist/render/feature-styles.js +123 -0
  527. package/dist/render/feature-styles.js.map +1 -0
  528. package/dist/render/font-faces.d.ts +22 -0
  529. package/dist/render/font-faces.d.ts.map +1 -0
  530. package/dist/render/font-faces.js +60 -0
  531. package/dist/render/font-faces.js.map +1 -0
  532. package/dist/render/outline.d.ts +21 -0
  533. package/dist/render/outline.d.ts.map +1 -0
  534. package/dist/render/outline.js +47 -0
  535. package/dist/render/outline.js.map +1 -0
  536. package/dist/render/recipe-styles.d.ts +26 -0
  537. package/dist/render/recipe-styles.d.ts.map +1 -0
  538. package/dist/render/recipe-styles.js +218 -0
  539. package/dist/render/recipe-styles.js.map +1 -0
  540. package/dist/render/render-context.d.ts +40 -0
  541. package/dist/render/render-context.d.ts.map +1 -0
  542. package/dist/render/render-context.js +16 -0
  543. package/dist/render/render-context.js.map +1 -0
  544. package/dist/render/render.d.ts +7 -0
  545. package/dist/render/render.d.ts.map +1 -1
  546. package/dist/render/render.js +108 -41
  547. package/dist/render/render.js.map +1 -1
  548. package/dist/render/runtime.d.ts +4 -1
  549. package/dist/render/runtime.d.ts.map +1 -1
  550. package/dist/render/runtime.js +275 -128
  551. package/dist/render/runtime.js.map +1 -1
  552. package/dist/render/showcase-blocks.d.ts +52 -0
  553. package/dist/render/showcase-blocks.d.ts.map +1 -0
  554. package/dist/render/showcase-blocks.js +329 -0
  555. package/dist/render/showcase-blocks.js.map +1 -0
  556. package/dist/render/showcase-styles.d.ts +15 -0
  557. package/dist/render/showcase-styles.d.ts.map +1 -0
  558. package/dist/render/showcase-styles.js +201 -0
  559. package/dist/render/showcase-styles.js.map +1 -0
  560. package/dist/render/signature-styles.d.ts +18 -0
  561. package/dist/render/signature-styles.d.ts.map +1 -0
  562. package/dist/render/signature-styles.js +41 -0
  563. package/dist/render/signature-styles.js.map +1 -0
  564. package/dist/render/style-units.d.ts +17 -0
  565. package/dist/render/style-units.d.ts.map +1 -0
  566. package/dist/render/style-units.js +24 -0
  567. package/dist/render/style-units.js.map +1 -0
  568. package/dist/render/styles.d.ts +18 -9
  569. package/dist/render/styles.d.ts.map +1 -1
  570. package/dist/render/styles.js +228 -129
  571. package/dist/render/styles.js.map +1 -1
  572. package/dist/render/surface-styles.d.ts +24 -0
  573. package/dist/render/surface-styles.d.ts.map +1 -0
  574. package/dist/render/surface-styles.js +41 -0
  575. package/dist/render/surface-styles.js.map +1 -0
  576. package/dist/render/tone.d.ts +14 -0
  577. package/dist/render/tone.d.ts.map +1 -0
  578. package/dist/render/tone.js +40 -0
  579. package/dist/render/tone.js.map +1 -0
  580. package/dist/render/verify.d.ts +3 -0
  581. package/dist/render/verify.d.ts.map +1 -1
  582. package/dist/render/verify.js +45 -2
  583. package/dist/render/verify.js.map +1 -1
  584. package/dist/spec/asset-references.d.ts +35 -0
  585. package/dist/spec/asset-references.d.ts.map +1 -0
  586. package/dist/spec/asset-references.js +93 -0
  587. package/dist/spec/asset-references.js.map +1 -0
  588. package/dist/spec/bounds.d.ts +6 -0
  589. package/dist/spec/bounds.d.ts.map +1 -1
  590. package/dist/spec/bounds.js +7 -0
  591. package/dist/spec/bounds.js.map +1 -1
  592. package/dist/spec/conditions.d.ts +43 -0
  593. package/dist/spec/conditions.d.ts.map +1 -0
  594. package/dist/spec/conditions.js +179 -0
  595. package/dist/spec/conditions.js.map +1 -0
  596. package/dist/spec/network-policy.d.ts +33 -0
  597. package/dist/spec/network-policy.d.ts.map +1 -0
  598. package/dist/spec/network-policy.js +57 -0
  599. package/dist/spec/network-policy.js.map +1 -0
  600. package/dist/spec/normalize.d.ts +7 -2
  601. package/dist/spec/normalize.d.ts.map +1 -1
  602. package/dist/spec/normalize.js +219 -41
  603. package/dist/spec/normalize.js.map +1 -1
  604. package/dist/theme/dialect-presets.d.ts +12 -0
  605. package/dist/theme/dialect-presets.d.ts.map +1 -0
  606. package/dist/theme/dialect-presets.js +214 -0
  607. package/dist/theme/dialect-presets.js.map +1 -0
  608. package/dist/theme/load-theme.d.ts +11 -3
  609. package/dist/theme/load-theme.d.ts.map +1 -1
  610. package/dist/theme/load-theme.js +71 -12
  611. package/dist/theme/load-theme.js.map +1 -1
  612. package/dist/theme/preset-builder.d.ts +36 -0
  613. package/dist/theme/preset-builder.d.ts.map +1 -0
  614. package/dist/theme/preset-builder.js +51 -0
  615. package/dist/theme/preset-builder.js.map +1 -0
  616. package/dist/theme/presets.d.ts +8 -10
  617. package/dist/theme/presets.d.ts.map +1 -1
  618. package/dist/theme/presets.js +40 -56
  619. package/dist/theme/presets.js.map +1 -1
  620. package/dist/theme/recipes.d.ts +38 -0
  621. package/dist/theme/recipes.d.ts.map +1 -0
  622. package/dist/theme/recipes.js +96 -0
  623. package/dist/theme/recipes.js.map +1 -0
  624. package/dist/theme/theme-catalog.d.ts.map +1 -1
  625. package/dist/theme/theme-catalog.js +16 -0
  626. package/dist/theme/theme-catalog.js.map +1 -1
  627. package/dist/theme/tokens.d.ts.map +1 -1
  628. package/dist/theme/tokens.js +4 -4
  629. package/dist/theme/tokens.js.map +1 -1
  630. package/dist/version.d.ts +1 -1
  631. package/dist/version.d.ts.map +1 -1
  632. package/dist/version.js +1 -1
  633. package/dist/version.js.map +1 -1
  634. package/llms.txt +29 -0
  635. package/package.json +13 -3
@@ -0,0 +1,43 @@
1
+ /** Checkbox: a native on/off input that writes a boolean or filters to truthy rows. */
2
+ import { bool, define } from '../../registry/define-helpers.js';
3
+ import { element, stringProp } from '../../render/block-helpers.js';
4
+ import { escapeAttribute, escapeText, renderAttributes } from '../../render/escape.js';
5
+ import { checkControl, controlAttributes, controlFooter, controlProps, describedBy, initialValue, inputId, } from './control-shared.js';
6
+ const KIND = { type: 'checkbox', valueType: 'boolean', matches: ['truthy'] };
7
+ /**
8
+ * The checkbox markup, shared with `switch`: the input comes first so the
9
+ * label sits beside it, and the whole row is the touch target.
10
+ */
11
+ export function renderToggle(node, kind, context, asSwitch) {
12
+ const checked = initialValue(node, context.ir.state) === true;
13
+ const id = inputId(node);
14
+ const input = `<input${renderAttributes({
15
+ type: 'checkbox',
16
+ id,
17
+ role: asSwitch ? 'switch' : undefined,
18
+ checked,
19
+ disabled: true,
20
+ 'aria-describedby': describedBy(node),
21
+ })} />`;
22
+ return element('div', controlAttributes(node, kind, context, `ak-block ak-control${asSwitch ? ' ak-switch' : ''}`), [
23
+ `<div class="ak-choice">${input}<label for="${escapeAttribute(id)}">${escapeText(stringProp(node, 'label'))}</label></div>`,
24
+ controlFooter(node, context),
25
+ ].join(''));
26
+ }
27
+ export const checkboxBlock = {
28
+ definition: define({
29
+ type: 'checkbox',
30
+ category: 'interaction',
31
+ tags: ['input', 'boolean', 'state', 'filter'],
32
+ useCases: ['opt in to detail', 'filter to flagged rows'],
33
+ purpose: 'Native on/off choice.',
34
+ summary: 'Checkbox: labeled native checkbox; writes a boolean or filters to truthy rows.',
35
+ props: controlProps(KIND, bool({ description: 'Initially checked.' })),
36
+ runtimeFeatures: ['controls'],
37
+ actions: ['set-value'],
38
+ a11y: 'Native checkbox with a visible <label>; Space toggles it.',
39
+ }),
40
+ render: (node, context) => renderToggle(node, KIND, context, false),
41
+ check: (node, context) => checkControl(node, KIND, context),
42
+ };
43
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../../src/blocks/controls/checkbox.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAIvF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEvF,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,OAAO,GACR,MAAM,qBAAqB,CAAC;AAE7B,MAAM,IAAI,GAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AAE1F;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,IAAiB,EACjB,OAAsB,EACtB,QAAiB;IAEjB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAC9D,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,SAAS,gBAAgB,CAAC;QACtC,IAAI,EAAE,UAAU;QAChB,EAAE;QACF,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACrC,OAAO;QACP,QAAQ,EAAE,IAAI;QACd,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAAC;KACtC,CAAC,KAAK,CAAC;IACR,OAAO,OAAO,CACZ,KAAK,EACL,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAC5F;QACE,0BAA0B,KAAK,eAAe,eAAe,CAAC,EAAE,CAAC,KAAK,UAAU,CAC9E,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAC1B,gBAAgB;QACjB,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;KAC7B,CAAC,IAAI,CAAC,EAAE,CAAC,CACX,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAgB;IACxC,UAAU,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,aAAa;QACvB,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC7C,QAAQ,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;QACxD,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,gFAAgF;QACzF,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACtE,eAAe,EAAE,CAAC,UAAU,CAAC;QAC7B,OAAO,EAAE,CAAC,WAAW,CAAC;QACtB,IAAI,EAAE,2DAA2D;KAClE,CAAC;IACF,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;IACnE,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;CAC5D,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Options for the choice controls (select and radio-group): authored
3
+ * `options`, or `optionsFrom`, the distinct values of one field of the
4
+ * filter-bar's target. Inside a filter-bar the compiler adds an "All" choice
5
+ * with the empty value, which means "no filter on this field".
6
+ */
7
+ import type { IrNode } from '../../ir.js';
8
+ import type { CheckContext } from '../../registry/block-module.js';
9
+ import type { PropSchema } from '../../registry/prop-schema.js';
10
+ import { type ControlPlacement } from './control-shared.js';
11
+ export interface ChoiceOption {
12
+ value: string;
13
+ label: string;
14
+ }
15
+ /** The "no filter" choice a filter-bar adds in front of the authored options. */
16
+ export declare const ANY_OPTION: ChoiceOption;
17
+ export declare function choiceProps(maxOptions: number): Record<string, PropSchema>;
18
+ /** Authored options, or the target's distinct field values; no "All" choice. */
19
+ export declare function resolveOptions(node: IrNode, placement: ControlPlacement): ChoiceOption[];
20
+ /** The value the control starts on: the initial value when it is a choice, else the first. */
21
+ export declare function selectedValue(options: readonly ChoiceOption[], initial: unknown): string | undefined;
22
+ /** Choice-specific checks: one source of options, unique non-empty values, a valid start. */
23
+ export declare function checkChoices(node: IrNode, maxOptions: number, context: CheckContext): void;
24
+ //# sourceMappingURL=choice-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-options.d.ts","sourceRoot":"","sources":["../../../src/blocks/controls/choice-options.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iFAAiF;AACjF,eAAO,MAAM,UAAU,EAAE,YAA0C,CAAC;AAEpE,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAW1E;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAUxF;AAED,8FAA8F;AAC9F,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,EAAE,OAAO,GACf,MAAM,GAAG,SAAS,CAKpB;AAED,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAsE1F"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Options for the choice controls (select and radio-group): authored
3
+ * `options`, or `optionsFrom`, the distinct values of one field of the
4
+ * filter-bar's target. Inside a filter-bar the compiler adds an "All" choice
5
+ * with the empty value, which means "no filter on this field".
6
+ */
7
+ import { reportUnknownField } from '../../data/resolve-block-data.js';
8
+ import { pathIndex, pathKey } from '../../diagnostics.js';
9
+ import { isPlainObject } from '../../json.js';
10
+ import { list, obj, str } from '../../registry/define-helpers.js';
11
+ import { objectListProp } from '../../render/block-helpers.js';
12
+ import { distinctFieldValues, initialValue, placementOf, } from './control-shared.js';
13
+ /** The "no filter" choice a filter-bar adds in front of the authored options. */
14
+ export const ANY_OPTION = { value: '', label: 'All' };
15
+ export function choiceProps(maxOptions) {
16
+ return {
17
+ options: list(obj({ value: str({ required: true, maxLength: 120 }), label: str({ maxLength: 120 }) }), { minItems: 1, maxItems: maxOptions, description: 'Choices; `label` defaults to `value`.' }),
18
+ optionsFrom: str({
19
+ maxLength: 64,
20
+ description: "Inside a filter-bar: use the target's distinct values of this field.",
21
+ }),
22
+ };
23
+ }
24
+ /** Authored options, or the target's distinct field values; no "All" choice. */
25
+ export function resolveOptions(node, placement) {
26
+ const from = node.props.optionsFrom;
27
+ if (typeof from === 'string') {
28
+ const rows = placement.target?.data?.rows ?? [];
29
+ return distinctFieldValues(rows, from).map((value) => ({ value, label: value }));
30
+ }
31
+ return objectListProp(node, 'options').map((option) => {
32
+ const value = typeof option.value === 'string' ? option.value : '';
33
+ return { value, label: typeof option.label === 'string' ? option.label : value };
34
+ });
35
+ }
36
+ /** The value the control starts on: the initial value when it is a choice, else the first. */
37
+ export function selectedValue(options, initial) {
38
+ if (typeof initial === 'string' && options.some((option) => option.value === initial)) {
39
+ return initial;
40
+ }
41
+ return options[0]?.value;
42
+ }
43
+ /** Choice-specific checks: one source of options, unique non-empty values, a valid start. */
44
+ export function checkChoices(node, maxOptions, context) {
45
+ const { bag } = context;
46
+ const placement = placementOf(node, (id) => context.byId.get(id));
47
+ const from = node.props.optionsFrom;
48
+ const authored = node.props.options;
49
+ const add = (path, message, details) => {
50
+ bag.add({
51
+ code: 'SPEC_VALIDATION_ERROR',
52
+ path,
53
+ nodeId: node.id,
54
+ message,
55
+ ...(details === undefined ? {} : { details }),
56
+ });
57
+ };
58
+ // An absent list prop validates to [], so "authored" means a non-empty list.
59
+ const hasOptions = Array.isArray(authored) && authored.length > 0;
60
+ if ((typeof from === 'string') === hasOptions) {
61
+ add(node.path, `a ${node.type} needs exactly one of "options" or "optionsFrom"`);
62
+ return;
63
+ }
64
+ if (typeof from === 'string') {
65
+ const at = pathKey(node.path, 'optionsFrom');
66
+ if (placement.bar === undefined) {
67
+ add(at, '"optionsFrom" only applies inside a filter-bar, which provides the rows');
68
+ return;
69
+ }
70
+ const data = placement.target?.data;
71
+ if (data === undefined) {
72
+ add(at, '"optionsFrom" needs a filter-bar target that is bound to data');
73
+ return;
74
+ }
75
+ if (!data.fields.includes(from)) {
76
+ reportUnknownField(from, data, at, bag, node.id);
77
+ return;
78
+ }
79
+ const count = distinctFieldValues(data.rows, from).length;
80
+ if (count === 0 || count > maxOptions) {
81
+ add(at, `"${from}" has ${count} distinct values; a ${node.type} takes 1-${maxOptions}`);
82
+ return;
83
+ }
84
+ }
85
+ else if (Array.isArray(authored)) {
86
+ const seen = new Set();
87
+ authored.forEach((option, index) => {
88
+ if (!isPlainObject(option) || typeof option.value !== 'string')
89
+ return;
90
+ const at = pathKey(pathIndex(pathKey(node.path, 'options'), index), 'value');
91
+ if (option.value === '')
92
+ add(at, 'an option value cannot be empty');
93
+ else if (seen.has(option.value))
94
+ add(at, `duplicate option value "${option.value}"`);
95
+ seen.add(option.value);
96
+ });
97
+ }
98
+ const value = node.props.value;
99
+ const allowed = resolveOptions(node, placement).map((option) => option.value);
100
+ if (placement.bar !== undefined)
101
+ allowed.unshift(ANY_OPTION.value);
102
+ if (typeof value === 'string' && !allowed.includes(value)) {
103
+ add(pathKey(node.path, 'value'), `"${value}" is not one of the options`, { allowed });
104
+ }
105
+ const start = initialValue(node, context.state);
106
+ if (typeof start === 'string' && start !== value && !allowed.includes(start)) {
107
+ bag.add({
108
+ code: 'SPEC_VALIDATION_ERROR',
109
+ severity: 'warning',
110
+ path: pathKey(node.path, 'bind'),
111
+ nodeId: node.id,
112
+ message: `the bound state value "${start}" is not one of the options`,
113
+ details: { allowed },
114
+ });
115
+ }
116
+ }
117
+ //# sourceMappingURL=choice-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-options.js","sourceRoot":"","sources":["../../../src/blocks/controls/choice-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * What every input control shares: the prop fragment, the cross-field checks
3
+ * (state binding, initial value, filter field and match), and the markup
4
+ * pieces (wrapper attributes, hint, the no-script note).
5
+ *
6
+ * A control writes one scalar to `state.<key>`, and inside a `filter-bar` it
7
+ * filters its target's rows by one field with one enumerated operator. There
8
+ * is no other behavior to express: no handler, expression or selector.
9
+ */
10
+ import type { DataRow } from '../../data/dataset-types.js';
11
+ import type { IrNode } from '../../ir.js';
12
+ import type { JsonValue } from '../../json.js';
13
+ import type { CheckContext } from '../../registry/block-module.js';
14
+ import type { PropSchema } from '../../registry/prop-schema.js';
15
+ import type { AttributeValue } from '../../render/escape.js';
16
+ import type { RenderContext } from '../../render/render-context.js';
17
+ export declare const FILTER_BAR_TYPE = "filter-bar";
18
+ /** The JSON type a control writes to state. */
19
+ export type ControlValueType = 'string' | 'number' | 'boolean';
20
+ /** One control type's binding and filtering contract. */
21
+ export interface ControlKind {
22
+ type: string;
23
+ valueType: ControlValueType;
24
+ /** Filter operators the control may use inside a filter-bar; the first is the default. */
25
+ matches: readonly string[];
26
+ }
27
+ /** Shown in place of a working control when scripts are off. */
28
+ export declare const REQUIRES_JS_NOTE = "Interactive when JavaScript is on.";
29
+ /** Props shared by every control. `matches` decides whether `match` is a prop at all. */
30
+ export declare function controlProps(kind: ControlKind, value: PropSchema, extra?: Record<string, PropSchema>): Record<string, PropSchema>;
31
+ /** Where a control sits: inside a filter-bar (with its resolved target) or standalone. */
32
+ export interface ControlPlacement {
33
+ bar?: IrNode;
34
+ target?: IrNode;
35
+ }
36
+ export declare function placementOf(node: IrNode, byId: (id: string) => IrNode | undefined): ControlPlacement;
37
+ /** The declared state key a valid `bind` names, or undefined. */
38
+ export declare function boundKey(node: IrNode, state: Record<string, JsonValue>): string | undefined;
39
+ /**
40
+ * The value the control starts with: a bound, non-null state value wins over
41
+ * the authored `value`, so the compiled page matches the state it boots with.
42
+ */
43
+ export declare function initialValue(node: IrNode, state: Record<string, JsonValue>): JsonValue | undefined;
44
+ /** The checks every control runs; type-specific checks follow in each module. */
45
+ export declare function checkControl(node: IrNode, kind: ControlKind, context: CheckContext): void;
46
+ /**
47
+ * Distinct, non-null values of one field, as option values: numbers in
48
+ * numeric order first, then everything else by code unit. Deterministic and
49
+ * locale-free.
50
+ */
51
+ export declare function distinctFieldValues(rows: readonly DataRow[], field: string): string[];
52
+ /** Wrapper attributes: identity, state binding and filter wiring. */
53
+ export declare function controlAttributes(node: IrNode, kind: ControlKind, context: RenderContext, className?: string): AttributeValue;
54
+ /** The operator the runtime applies; checkbox and switch filter on truthiness. */
55
+ export declare function filterMatch(node: IrNode, kind: ControlKind): string;
56
+ export declare function inputId(node: IrNode): string;
57
+ export declare function hintId(node: IrNode): string;
58
+ /** `aria-describedby` for the native input, when a hint exists. */
59
+ export declare function describedBy(node: IrNode): string | undefined;
60
+ /** The hint, then the no-script note for a standalone control (a bar carries one note). */
61
+ export declare function controlFooter(node: IrNode, context: RenderContext): string;
62
+ export declare function requiresJsNote(): string;
63
+ export declare function visibleLabel(node: IrNode): string;
64
+ /** True when the control sits in a filter-bar, so an empty choice means "no filter". */
65
+ export declare function inFilterBar(node: IrNode, context: RenderContext): boolean;
66
+ //# sourceMappingURL=control-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-shared.d.ts","sourceRoot":"","sources":["../../../src/blocks/controls/control-shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * What every input control shares: the prop fragment, the cross-field checks
3
+ * (state binding, initial value, filter field and match), and the markup
4
+ * pieces (wrapper attributes, hint, the no-script note).
5
+ *
6
+ * A control writes one scalar to `state.<key>`, and inside a `filter-bar` it
7
+ * filters its target's rows by one field with one enumerated operator. There
8
+ * is no other behavior to express: no handler, expression or selector.
9
+ */
10
+ import { reportUnknownField } from '../../data/resolve-block-data.js';
11
+ import { pathKey } from '../../diagnostics.js';
12
+ import { isSafeStatePath } from '../../registry/actions.js';
13
+ import { anchorProps, enumStr, LABEL, onProp, str } from '../../registry/define-helpers.js';
14
+ import { nodeAttributes, stringProp } from '../../render/block-helpers.js';
15
+ import { escapeAttribute, escapeText } from '../../render/escape.js';
16
+ export const FILTER_BAR_TYPE = 'filter-bar';
17
+ /** Shown in place of a working control when scripts are off. */
18
+ export const REQUIRES_JS_NOTE = 'Interactive when JavaScript is on.';
19
+ /** Props shared by every control. `matches` decides whether `match` is a prop at all. */
20
+ export function controlProps(kind, value, extra = {}) {
21
+ return {
22
+ label: LABEL,
23
+ bind: str({
24
+ maxLength: 128,
25
+ description: '`state.<key>` to write; the key must be declared in `state`.',
26
+ }),
27
+ value,
28
+ ...extra,
29
+ field: str({ maxLength: 64, description: 'Row field to filter (inside a filter-bar).' }),
30
+ ...(kind.matches.length > 1
31
+ ? { match: enumStr(kind.matches, { description: 'Filter operator (inside a filter-bar).' }) }
32
+ : {}),
33
+ hint: str({ maxLength: 200 }),
34
+ on: onProp('Bindings fired with `{ value }` when the value changes.'),
35
+ ...anchorProps,
36
+ };
37
+ }
38
+ export function placementOf(node, byId) {
39
+ const parent = node.parentId === null ? undefined : byId(node.parentId);
40
+ if (parent === undefined || parent.type !== FILTER_BAR_TYPE)
41
+ return {};
42
+ const targetId = parent.props.target;
43
+ const target = typeof targetId === 'string' ? byId(targetId) : undefined;
44
+ return target === undefined ? { bar: parent } : { bar: parent, target };
45
+ }
46
+ /** The declared state key a valid `bind` names, or undefined. */
47
+ export function boundKey(node, state) {
48
+ const bind = node.props.bind;
49
+ if (typeof bind !== 'string' || !isSafeStatePath(bind))
50
+ return undefined;
51
+ const parts = bind.split('.');
52
+ const key = parts[1];
53
+ if (parts.length !== 2 || key === undefined || !Object.hasOwn(state, key))
54
+ return undefined;
55
+ return key;
56
+ }
57
+ /**
58
+ * The value the control starts with: a bound, non-null state value wins over
59
+ * the authored `value`, so the compiled page matches the state it boots with.
60
+ */
61
+ export function initialValue(node, state) {
62
+ const key = boundKey(node, state);
63
+ if (key !== undefined) {
64
+ const stateValue = state[key];
65
+ if (stateValue !== null && stateValue !== undefined)
66
+ return stateValue;
67
+ }
68
+ return node.props.value;
69
+ }
70
+ function scalarType(value) {
71
+ if (value === null)
72
+ return 'null';
73
+ const type = typeof value;
74
+ return type === 'string' || type === 'number' || type === 'boolean' ? type : 'other';
75
+ }
76
+ /** `bind`: a two-segment safe state path whose key is declared, holding the right type. */
77
+ function checkBinding(node, kind, context) {
78
+ const { bag, state } = context;
79
+ const bind = node.props.bind;
80
+ if (typeof bind !== 'string')
81
+ return;
82
+ const at = pathKey(node.path, 'bind');
83
+ const parts = bind.split('.');
84
+ if (!isSafeStatePath(bind) || parts.length !== 2) {
85
+ bag.add({
86
+ code: 'POLICY_VIOLATION',
87
+ path: at,
88
+ nodeId: node.id,
89
+ message: `"${bind}" is not a state path of the form state.<key>`,
90
+ });
91
+ return;
92
+ }
93
+ const key = parts[1] ?? '';
94
+ if (!Object.hasOwn(state, key)) {
95
+ bag.add({
96
+ code: 'SPEC_VALIDATION_ERROR',
97
+ path: at,
98
+ nodeId: node.id,
99
+ message: `"state.${key}" is not declared in state`,
100
+ details: { known: Object.keys(state) },
101
+ });
102
+ return;
103
+ }
104
+ const stateValue = state[key];
105
+ const type = scalarType(stateValue);
106
+ if (type !== 'null' && type !== kind.valueType) {
107
+ bag.add({
108
+ code: 'SPEC_VALIDATION_ERROR',
109
+ severity: 'warning',
110
+ path: at,
111
+ nodeId: node.id,
112
+ message: `a ${kind.type} writes a ${kind.valueType}, but "state.${key}" holds a ${type}`,
113
+ });
114
+ }
115
+ const value = node.props.value;
116
+ if (value !== undefined && stateValue !== null && value !== stateValue) {
117
+ bag.add({
118
+ code: 'SPEC_VALIDATION_ERROR',
119
+ severity: 'warning',
120
+ path: pathKey(node.path, 'value'),
121
+ nodeId: node.id,
122
+ message: `"value" differs from "state.${key}"; the state value is used`,
123
+ });
124
+ }
125
+ }
126
+ /** `field` and `match`: required and checked inside a filter-bar, inert outside one. */
127
+ function checkFiltering(node, placement, context) {
128
+ const { bag } = context;
129
+ const field = node.props.field;
130
+ if (placement.bar === undefined) {
131
+ for (const key of ['field', 'match']) {
132
+ if (node.props[key] === undefined)
133
+ continue;
134
+ bag.add({
135
+ code: 'SPEC_VALIDATION_ERROR',
136
+ severity: 'warning',
137
+ path: pathKey(node.path, key),
138
+ nodeId: node.id,
139
+ message: `"${key}" only applies inside a filter-bar`,
140
+ });
141
+ }
142
+ return;
143
+ }
144
+ if (typeof field !== 'string') {
145
+ bag.add({
146
+ code: 'SPEC_VALIDATION_ERROR',
147
+ path: node.path,
148
+ nodeId: node.id,
149
+ message: `a ${node.type} inside a filter-bar needs "field", the row field it filters`,
150
+ });
151
+ return;
152
+ }
153
+ const data = placement.target?.data;
154
+ if (data !== undefined && !data.fields.includes(field)) {
155
+ reportUnknownField(field, data, pathKey(node.path, 'field'), context.bag, node.id);
156
+ }
157
+ }
158
+ /** The checks every control runs; type-specific checks follow in each module. */
159
+ export function checkControl(node, kind, context) {
160
+ checkBinding(node, kind, context);
161
+ checkFiltering(node, placementOf(node, (id) => context.byId.get(id)), context);
162
+ }
163
+ /**
164
+ * Distinct, non-null values of one field, as option values: numbers in
165
+ * numeric order first, then everything else by code unit. Deterministic and
166
+ * locale-free.
167
+ */
168
+ export function distinctFieldValues(rows, field) {
169
+ const numbers = new Map();
170
+ const others = new Set();
171
+ for (const row of rows) {
172
+ const value = Object.hasOwn(row, field) ? row[field] : undefined;
173
+ if (value === null || value === undefined)
174
+ continue;
175
+ if (typeof value === 'number')
176
+ numbers.set(String(value), value);
177
+ else
178
+ others.add(String(value));
179
+ }
180
+ const numeric = [...numbers.entries()].sort((a, b) => a[1] - b[1]).map(([text]) => text);
181
+ const rest = [...others].filter((text) => !numbers.has(text)).sort(codeUnitCompare);
182
+ return [...numeric, ...rest];
183
+ }
184
+ function codeUnitCompare(a, b) {
185
+ if (a === b)
186
+ return 0;
187
+ return a < b ? -1 : 1;
188
+ }
189
+ /** Wrapper attributes: identity, state binding and filter wiring. */
190
+ export function controlAttributes(node, kind, context, className = 'ak-block ak-control') {
191
+ const placement = placementOf(node, context.byId);
192
+ const bound = boundKey(node, context.ir.state) !== undefined;
193
+ const inBar = placement.bar !== undefined;
194
+ const field = stringProp(node, 'field');
195
+ return nodeAttributes(node, {
196
+ class: className,
197
+ 'data-ak-control': kind.type,
198
+ 'data-ak-bind': bound ? stringProp(node, 'bind') : undefined,
199
+ 'data-ak-bind-target': bound ? 'state' : undefined,
200
+ 'data-ak-field': inBar && field !== '' ? field : undefined,
201
+ 'data-ak-match': inBar && field !== '' ? filterMatch(node, kind) : undefined,
202
+ });
203
+ }
204
+ /** The operator the runtime applies; checkbox and switch filter on truthiness. */
205
+ export function filterMatch(node, kind) {
206
+ if (kind.valueType === 'boolean')
207
+ return 'truthy';
208
+ return stringProp(node, 'match', kind.matches[0] ?? 'equals');
209
+ }
210
+ export function inputId(node) {
211
+ return `${node.id}-input`;
212
+ }
213
+ export function hintId(node) {
214
+ return `${node.id}-hint`;
215
+ }
216
+ /** `aria-describedby` for the native input, when a hint exists. */
217
+ export function describedBy(node) {
218
+ return stringProp(node, 'hint') === '' ? undefined : hintId(node);
219
+ }
220
+ /** The hint, then the no-script note for a standalone control (a bar carries one note). */
221
+ export function controlFooter(node, context) {
222
+ const hint = stringProp(node, 'hint');
223
+ const inBar = placementOf(node, context.byId).bar !== undefined;
224
+ return [
225
+ hint === ''
226
+ ? ''
227
+ : `<p class="ak-control-hint" id="${escapeAttribute(hintId(node))}">${escapeText(hint)}</p>`,
228
+ inBar ? '' : requiresJsNote(),
229
+ ].join('');
230
+ }
231
+ export function requiresJsNote() {
232
+ return `<p class="ak-control-note" data-ak-requires-js>${escapeText(REQUIRES_JS_NOTE)}</p>`;
233
+ }
234
+ export function visibleLabel(node) {
235
+ return `<label for="${escapeAttribute(inputId(node))}">${escapeText(stringProp(node, 'label'))}</label>`;
236
+ }
237
+ /** True when the control sits in a filter-bar, so an empty choice means "no filter". */
238
+ export function inFilterBar(node, context) {
239
+ return placementOf(node, context.byId).bar !== undefined;
240
+ }
241
+ //# sourceMappingURL=control-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-shared.js","sourceRoot":"","sources":["../../../src/blocks/controls/control-shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAE5F,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGrE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAa5C,gEAAgE;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;AAErE,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAC1B,IAAiB,EACjB,KAAiB,EACjB,QAAoC,EAAE;IAEtC,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,GAAG,CAAC;YACR,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,8DAA8D;SAC5E,CAAC;QACF,KAAK;QACL,GAAG,KAAK;QACR,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,4CAA4C,EAAE,CAAC;QACxF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC,EAAE;YAC7F,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QAC7B,EAAE,EAAE,MAAM,CAAC,yDAAyD,CAAC;QACrE,GAAG,WAAW;KACf,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,IAAwC;IAExC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe;QAAE,OAAO,EAAE,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC1E,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,KAAgC;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5F,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,KAAgC;IAEhC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,UAAU,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB;IAClC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC;IAC1B,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACvF,CAAC;AAED,2FAA2F;AAC3F,SAAS,YAAY,CAAC,IAAY,EAAE,IAAiB,EAAE,OAAqB;IAC1E,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IACrC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,GAAG,CAAC;YACN,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,OAAO,EAAE,IAAI,IAAI,+CAA+C;SACjE,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,GAAG,CAAC;YACN,IAAI,EAAE,uBAAuB;YAC7B,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,OAAO,EAAE,UAAU,GAAG,4BAA4B;YAClD,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;SACvC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAc,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/C,GAAG,CAAC,GAAG,CAAC;YACN,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,OAAO,EAAE,KAAK,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,SAAS,gBAAgB,GAAG,aAAa,IAAI,EAAE;SACzF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACvE,GAAG,CAAC,GAAG,CAAC;YACN,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACjC,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,OAAO,EAAE,+BAA+B,GAAG,4BAA4B;SACxE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,SAAS,cAAc,CAAC,IAAY,EAAE,SAA2B,EAAE,OAAqB;IACtF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/B,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,SAAS;YAC5C,GAAG,CAAC,GAAG,CAAC;gBACN,IAAI,EAAE,uBAAuB;gBAC7B,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;gBAC7B,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,OAAO,EAAE,IAAI,GAAG,oCAAoC;aACrD,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC;YACN,IAAI,EAAE,uBAAuB;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,OAAO,EAAE,KAAK,IAAI,CAAC,IAAI,8DAA8D;SACtF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;IACpC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAiB,EAAE,OAAqB;IACjF,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,cAAc,CACZ,IAAI,EACJ,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAC/C,OAAO,CACR,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAwB,EAAE,KAAa;IACzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAA2B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;;YAC5D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC3C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,IAAiB,EACjB,OAAsB,EACtB,SAAS,GAAG,qBAAqB;IAEjC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO,cAAc,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,SAAS;QAChB,iBAAiB,EAAE,IAAI,CAAC,IAAI;QAC5B,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5D,qBAAqB,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAClD,eAAe,EAAE,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAC1D,eAAe,EAAE,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC7E,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAiB;IACzD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAClD,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,GAAG,IAAI,CAAC,EAAE,QAAQ,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC;AAC3B,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAsB;IAChE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC;IAChE,OAAO;QACL,IAAI,KAAK,EAAE;YACT,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,kCAAkC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,MAAM;QAC9F,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;KAC9B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,kDAAkD,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,eAAe,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC;AAC3G,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAsB;IAC9D,OAAO,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Runtime parts for the input controls and the filter bar. ES5-style, like
3
+ * `runtime.ts`, and appended in registry order: `controls` before
4
+ * `filter-bar`, which reuses its readers.
5
+ *
6
+ * Nothing here reads a selector, handler or expression from the spec. A
7
+ * control writes its coerced value through `setPath` (one path for every state
8
+ * write) and fires `change` with `{ value }`. A bound control follows state
9
+ * written elsewhere through the core `data-ak-bind-target="state"` binding,
10
+ * observed as an attribute change. A filter bar resolves its target by the
11
+ * compiled node id and parses each row's `data-ak-row` once. Print shows
12
+ * every row: the bar is hidden there, so a filtered printout would be
13
+ * silently partial.
14
+ */
15
+ export declare const CONTROLS_RUNTIME = "\nvar controlSyncHooks = [];\nfunction controlInputs(control) {\n return qa('input, select', control).filter(function (el) { return el.closest('[data-ak-control]') === control; });\n}\nfunction readControl(control) {\n var kind = control.getAttribute('data-ak-control');\n var inputs = controlInputs(control);\n if (!inputs.length) return null;\n if (kind === 'checkbox' || kind === 'switch') return inputs[0].checked;\n if (kind === 'radio-group') {\n for (var i = 0; i < inputs.length; i += 1) if (inputs[i].checked) return inputs[i].value;\n return '';\n }\n var raw = inputs[0].value;\n if (kind === 'number-input') {\n if (raw === '') return null;\n var number = Number(raw);\n return isFinite(number) ? number : null;\n }\n return raw;\n}\nfunction writeControl(control, value) {\n var kind = control.getAttribute('data-ak-control');\n controlInputs(control).forEach(function (input) {\n if (kind === 'checkbox' || kind === 'switch') { input.checked = value === true; return; }\n if (kind === 'radio-group') { input.checked = input.value === String(value); return; }\n // Never rewrite the field being typed in: it would move the caret.\n if (input === doc.activeElement) return;\n var text = value === null || value === undefined ? '' : String(value);\n if (input.value !== text) input.value = text;\n });\n}\nfunction resetControl(control) {\n controlInputs(control).forEach(function (input) {\n if (input.tagName === 'SELECT') {\n for (var i = 0; i < input.options.length; i += 1) input.options[i].selected = input.options[i].defaultSelected;\n } else if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = input.defaultChecked;\n } else {\n input.value = input.defaultValue;\n }\n });\n}\nfunction commitControl(control) {\n var value = readControl(control);\n var path = control.getAttribute('data-ak-bind');\n if (path) setPath(path, value);\n fire(control, 'change', { value: value });\n}\nfunction wireControls() {\n qa('[data-ak-control]').forEach(function (control) {\n controlInputs(control).forEach(function (input) {\n input.disabled = false;\n var live = input.type === 'text' || input.type === 'number';\n input.addEventListener(live ? 'input' : 'change', function () { commitControl(control); }, false);\n });\n control.setAttribute('data-ak-ready', '');\n });\n if (typeof window.MutationObserver !== 'function') return;\n new window.MutationObserver(function (records) {\n records.forEach(function (record) {\n var control = record.target;\n if (!control.hasAttribute('data-ak-control')) return;\n var value = readPath(control.getAttribute('data-ak-bind'));\n if (value === undefined || value === null) return;\n writeControl(control, value);\n controlSyncHooks.forEach(function (hook) { hook(control); });\n });\n }).observe(doc.body, { attributes: true, attributeFilter: ['data-ak-state'], subtree: true });\n}";
16
+ export declare const FILTER_BAR_RUNTIME = "\nfunction foldAscii(text) {\n return String(text).replace(/[A-Z]/g, function (c) { return String.fromCharCode(c.charCodeAt(0) + 32); });\n}\nfunction filterCriteria(bar) {\n var criteria = [];\n qa('[data-ak-control][data-ak-field]', bar).forEach(function (control) {\n var value = readControl(control);\n if (value === null || value === '' || value === false) return;\n criteria.push({\n kind: control.getAttribute('data-ak-control'),\n field: control.getAttribute('data-ak-field'),\n match: control.getAttribute('data-ak-match'),\n value: value\n });\n });\n qa('input[data-ak-search]', bar).forEach(function (input) {\n var text = String(input.value || '').trim().toLowerCase();\n if (text !== '') criteria.push({ match: 'text', value: text });\n });\n return criteria;\n}\nfunction criterionHolds(criterion, entry) {\n var match = criterion.match;\n if (match === 'text') return (entry.item.textContent || '').toLowerCase().indexOf(criterion.value) !== -1;\n var raw = Object.prototype.hasOwnProperty.call(entry.row, criterion.field) ? entry.row[criterion.field] : null;\n if (match === 'truthy') return Boolean(raw);\n if (raw === null || raw === undefined) return false;\n if (match === 'contains') return foldAscii(raw).indexOf(foldAscii(criterion.value)) !== -1;\n if (criterion.kind === 'number-input') {\n var number = typeof raw === 'number' ? raw : parseFloat(raw);\n if (!isFinite(number)) return false;\n if (match === 'min') return number >= criterion.value;\n if (match === 'max') return number <= criterion.value;\n return number === criterion.value;\n }\n var text = String(raw);\n // A date filter compares the calendar day of an ISO date or timestamp.\n if (criterion.kind === 'date-input') text = text.slice(0, 10);\n if (match === 'min') return text >= criterion.value;\n if (match === 'max') return text <= criterion.value;\n return text === String(criterion.value);\n}\nfunction wireFilterBars() {\n qa('[data-ak-filter-bar]').forEach(function (bar) {\n var target = byId(bar.getAttribute('data-ak-filter-target'))[0];\n var count = q('[data-ak-filter-count]', bar);\n var reset = q('[data-ak-filter-reset]', bar);\n var noun = bar.getAttribute('data-ak-filter-noun') || 'items';\n var entries = (target ? qa('[data-ak-filter-item]', target) : []).map(function (item) {\n var row = null;\n try { row = JSON.parse(item.getAttribute('data-ak-row') || '{}'); } catch (error) { row = null; }\n return { item: item, row: row && typeof row === 'object' ? row : {} };\n });\n var last = '';\n var apply = function (speak) {\n var criteria = filterCriteria(bar);\n var shown = 0;\n entries.forEach(function (entry) {\n var keep = criteria.every(function (criterion) { return criterionHolds(criterion, entry); });\n entry.item.hidden = !keep;\n if (keep) shown += 1;\n });\n var text = shown + ' of ' + entries.length + ' ' + noun;\n if (count) count.textContent = text;\n if (speak || text !== last) { if (last !== '') announce(text); }\n last = text;\n };\n var onEdit = function (event) {\n // The core search announces its own count first; the bar's count replaces it.\n apply(Boolean(event.target && event.target.hasAttribute && event.target.hasAttribute('data-ak-search')));\n };\n bar.addEventListener('input', onEdit, false);\n bar.addEventListener('change', onEdit, false);\n if (reset) {\n reset.addEventListener('click', function () {\n qa('[data-ak-control]', bar).forEach(function (control) {\n resetControl(control);\n commitControl(control);\n });\n qa('input[data-ak-search]', bar).forEach(function (input) { input.value = ''; });\n apply(true);\n }, false);\n }\n controlSyncHooks.push(function (control) { if (bar.contains(control)) apply(false); });\n // Print hides the bar, so the printout carries every row, as without script.\n window.addEventListener('beforeprint', function () {\n entries.forEach(function (entry) { entry.item.hidden = false; });\n });\n window.addEventListener('afterprint', function () { apply(false); });\n apply(false);\n bar.setAttribute('data-ak-ready', '');\n });\n}";
17
+ //# sourceMappingURL=controls-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls-runtime.d.ts","sourceRoot":"","sources":["../../../src/blocks/controls/controls-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,gBAAgB,g8FAsE3B,CAAC;AAEH,eAAO,MAAM,kBAAkB,quIA6F7B,CAAC"}