@supersoniks/concorde 4.9.94 → 4.9.96

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 (636) hide show
  1. package/README.md +16 -30
  2. package/build-infos.json +1 -1
  3. package/concorde-core.bundle.js +1 -1
  4. package/concorde-core.es.js +1 -1
  5. package/dist/concorde-core.bundle.js +1 -1
  6. package/dist/concorde-core.es.js +1 -1
  7. package/docs/assets/{index-D2Q3JyQ6.css → index-BZiZXMU-.css} +1 -1
  8. package/docs/assets/index-FmK4JaIM.js +11992 -0
  9. package/docs/crawl/core/components/functional/jsonata/jsonata.html +79 -0
  10. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +1 -1
  11. package/docs/crawl/docs/_core-concept/dataFlow.html +12 -1
  12. package/docs/crawl/docs/_misc/docs-mock-api.html +12 -0
  13. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
  14. package/docs/crawl/docs/_misc/html-integration.html +3 -2
  15. package/docs/crawl/hubs/remote-data.html +3 -5
  16. package/docs/crawl/index.html +2 -0
  17. package/docs/docs-mock-api-sw.js +110 -0
  18. package/docs/docs-mock-api-sw.js.map +3 -3
  19. package/docs/index.html +2 -2
  20. package/docs/llms-full.txt +193 -2
  21. package/docs/llms.txt +2 -0
  22. package/docs/sitemap.xml +6 -0
  23. package/docs/src/core/components/functional/jsonata/jsonata.md +56 -0
  24. package/docs/src/core/components/ui/form/checkbox/checkbox.md +1 -1
  25. package/docs/src/docs/_core-concept/dataFlow.md +10 -1
  26. package/docs/src/docs/_misc/docs-mock-api.md +3 -0
  27. package/docs/src/docs/_misc/formelement-subscriber-removal.md +115 -0
  28. package/docs/src/docs/_misc/html-integration.md +2 -0
  29. package/docs/src/docs/search/docs-search.json +180 -0
  30. package/docs/src/tsconfig.json +18 -0
  31. package/package.json +379 -1102
  32. package/scripts/post-build.mjs +0 -43
  33. package/scripts/pre-build.mjs +4 -33
  34. package/scripts/pre-publish.mjs +0 -2
  35. package/src/core/components/functional/sdui/sdui.md +0 -0
  36. package/src/core/components/ui/form/checkbox/checkbox.md +0 -0
  37. package/src/core/components/ui/form/input/input.ts +0 -0
  38. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -0
  39. package/src/core/components/ui/form/select/select.ts +0 -0
  40. package/src/core/components/ui/form/textarea/textarea.ts +0 -0
  41. package/src/core/mixins/Fetcher.ts +1 -1
  42. package/src/docs/_getting-started/create-a-component.md +0 -0
  43. package/src/docs/search/docs-search.json +2128 -713
  44. package/src/tsconfig.json +309 -0
  45. package/vite/config.js +23 -35
  46. package/dist/js/components.js +0 -12
  47. package/dist/js/components.js.map +0 -1
  48. package/dist/js/concorde-loaded.js +0 -5
  49. package/dist/js/concorde-loaded.js.map +0 -1
  50. package/dist/js/core/_types/endpoint.js +0 -5
  51. package/dist/js/core/_types/endpoint.js.map +0 -1
  52. package/dist/js/core/_types/key.js +0 -2
  53. package/dist/js/core/_types/key.js.map +0 -1
  54. package/dist/js/core/_types/types.js +0 -3
  55. package/dist/js/core/_types/types.js.map +0 -1
  56. package/dist/js/core/components/functional/date/date.js +0 -272
  57. package/dist/js/core/components/functional/date/date.js.map +0 -1
  58. package/dist/js/core/components/functional/example/example.js +0 -44
  59. package/dist/js/core/components/functional/example/example.js.map +0 -1
  60. package/dist/js/core/components/functional/fetch/fetch.js +0 -79
  61. package/dist/js/core/components/functional/fetch/fetch.js.map +0 -1
  62. package/dist/js/core/components/functional/functional.js +0 -18
  63. package/dist/js/core/components/functional/functional.js.map +0 -1
  64. package/dist/js/core/components/functional/if/if.js +0 -39
  65. package/dist/js/core/components/functional/if/if.js.map +0 -1
  66. package/dist/js/core/components/functional/jsonata/jsonata.js +0 -119
  67. package/dist/js/core/components/functional/jsonata/jsonata.js.map +0 -1
  68. package/dist/js/core/components/functional/list/list.js +0 -341
  69. package/dist/js/core/components/functional/list/list.js.map +0 -1
  70. package/dist/js/core/components/functional/mix/mix.js +0 -103
  71. package/dist/js/core/components/functional/mix/mix.js.map +0 -1
  72. package/dist/js/core/components/functional/queue/queue.js +0 -450
  73. package/dist/js/core/components/functional/queue/queue.js.map +0 -1
  74. package/dist/js/core/components/functional/router/redirect.js +0 -54
  75. package/dist/js/core/components/functional/router/redirect.js.map +0 -1
  76. package/dist/js/core/components/functional/router/router.js +0 -179
  77. package/dist/js/core/components/functional/router/router.js.map +0 -1
  78. package/dist/js/core/components/functional/sdui/SDUIDescriptorTransformer.js +0 -216
  79. package/dist/js/core/components/functional/sdui/SDUIDescriptorTransformer.js.map +0 -1
  80. package/dist/js/core/components/functional/sdui/default-library.json +0 -108
  81. package/dist/js/core/components/functional/sdui/sdui-utils.js +0 -64
  82. package/dist/js/core/components/functional/sdui/sdui-utils.js.map +0 -1
  83. package/dist/js/core/components/functional/sdui/sdui.js +0 -266
  84. package/dist/js/core/components/functional/sdui/sdui.js.map +0 -1
  85. package/dist/js/core/components/functional/sdui/types.js +0 -2
  86. package/dist/js/core/components/functional/sdui/types.js.map +0 -1
  87. package/dist/js/core/components/functional/sonic-scope/sonic-scope.js +0 -22
  88. package/dist/js/core/components/functional/sonic-scope/sonic-scope.js.map +0 -1
  89. package/dist/js/core/components/functional/states/states.js +0 -172
  90. package/dist/js/core/components/functional/states/states.js.map +0 -1
  91. package/dist/js/core/components/functional/submit/submit.js +0 -284
  92. package/dist/js/core/components/functional/submit/submit.js.map +0 -1
  93. package/dist/js/core/components/functional/subscriber/subscriber.js +0 -39
  94. package/dist/js/core/components/functional/subscriber/subscriber.js.map +0 -1
  95. package/dist/js/core/components/functional/translation/translation.js +0 -28
  96. package/dist/js/core/components/functional/translation/translation.js.map +0 -1
  97. package/dist/js/core/components/functional/value/value.js +0 -28
  98. package/dist/js/core/components/functional/value/value.js.map +0 -1
  99. package/dist/js/core/components/ui/_css/scroll.js +0 -27
  100. package/dist/js/core/components/ui/_css/scroll.js.map +0 -1
  101. package/dist/js/core/components/ui/_css/shadow.js +0 -22
  102. package/dist/js/core/components/ui/_css/shadow.js.map +0 -1
  103. package/dist/js/core/components/ui/_css/size.js +0 -36
  104. package/dist/js/core/components/ui/_css/size.js.map +0 -1
  105. package/dist/js/core/components/ui/_css/type.js +0 -92
  106. package/dist/js/core/components/ui/_css/type.js.map +0 -1
  107. package/dist/js/core/components/ui/alert/alert.js +0 -213
  108. package/dist/js/core/components/ui/alert/alert.js.map +0 -1
  109. package/dist/js/core/components/ui/alert-messages/alert-messages.js +0 -68
  110. package/dist/js/core/components/ui/alert-messages/alert-messages.js.map +0 -1
  111. package/dist/js/core/components/ui/badge/badge.js +0 -199
  112. package/dist/js/core/components/ui/badge/badge.js.map +0 -1
  113. package/dist/js/core/components/ui/button/button.js +0 -697
  114. package/dist/js/core/components/ui/button/button.js.map +0 -1
  115. package/dist/js/core/components/ui/captcha/altchaStyles.js +0 -226
  116. package/dist/js/core/components/ui/captcha/altchaStyles.js.map +0 -1
  117. package/dist/js/core/components/ui/captcha/captcha.js +0 -167
  118. package/dist/js/core/components/ui/captcha/captcha.js.map +0 -1
  119. package/dist/js/core/components/ui/card/card-footer.js +0 -26
  120. package/dist/js/core/components/ui/card/card-footer.js.map +0 -1
  121. package/dist/js/core/components/ui/card/card-header-descripton.js +0 -30
  122. package/dist/js/core/components/ui/card/card-header-descripton.js.map +0 -1
  123. package/dist/js/core/components/ui/card/card-header.js +0 -79
  124. package/dist/js/core/components/ui/card/card-header.js.map +0 -1
  125. package/dist/js/core/components/ui/card/card-main.js +0 -26
  126. package/dist/js/core/components/ui/card/card-main.js.map +0 -1
  127. package/dist/js/core/components/ui/card/card.js +0 -67
  128. package/dist/js/core/components/ui/card/card.js.map +0 -1
  129. package/dist/js/core/components/ui/divider/divider.js +0 -200
  130. package/dist/js/core/components/ui/divider/divider.js.map +0 -1
  131. package/dist/js/core/components/ui/form/checkbox/checkbox.js +0 -257
  132. package/dist/js/core/components/ui/form/checkbox/checkbox.js.map +0 -1
  133. package/dist/js/core/components/ui/form/css/form-control.js +0 -393
  134. package/dist/js/core/components/ui/form/css/form-control.js.map +0 -1
  135. package/dist/js/core/components/ui/form/fieldset/fieldset.js +0 -124
  136. package/dist/js/core/components/ui/form/fieldset/fieldset.js.map +0 -1
  137. package/dist/js/core/components/ui/form/fieldset/legend-description.js +0 -38
  138. package/dist/js/core/components/ui/form/fieldset/legend-description.js.map +0 -1
  139. package/dist/js/core/components/ui/form/fieldset/legend.js +0 -130
  140. package/dist/js/core/components/ui/form/fieldset/legend.js.map +0 -1
  141. package/dist/js/core/components/ui/form/form-actions/form-actions.js +0 -47
  142. package/dist/js/core/components/ui/form/form-actions/form-actions.js.map +0 -1
  143. package/dist/js/core/components/ui/form/form-layout/form-layout.js +0 -84
  144. package/dist/js/core/components/ui/form/form-layout/form-layout.js.map +0 -1
  145. package/dist/js/core/components/ui/form/input/input.js +0 -316
  146. package/dist/js/core/components/ui/form/input/input.js.map +0 -1
  147. package/dist/js/core/components/ui/form/input/password-helper.js +0 -134
  148. package/dist/js/core/components/ui/form/input/password-helper.js.map +0 -1
  149. package/dist/js/core/components/ui/form/input/same-value-helper.js +0 -85
  150. package/dist/js/core/components/ui/form/input/same-value-helper.js.map +0 -1
  151. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js +0 -405
  152. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js.map +0 -1
  153. package/dist/js/core/components/ui/form/radio/radio.js +0 -63
  154. package/dist/js/core/components/ui/form/radio/radio.js.map +0 -1
  155. package/dist/js/core/components/ui/form/select/select.js +0 -323
  156. package/dist/js/core/components/ui/form/select/select.js.map +0 -1
  157. package/dist/js/core/components/ui/form/switch/switch.js +0 -90
  158. package/dist/js/core/components/ui/form/switch/switch.js.map +0 -1
  159. package/dist/js/core/components/ui/form/textarea/textarea.js +0 -162
  160. package/dist/js/core/components/ui/form/textarea/textarea.js.map +0 -1
  161. package/dist/js/core/components/ui/group/group.js +0 -128
  162. package/dist/js/core/components/ui/group/group.js.map +0 -1
  163. package/dist/js/core/components/ui/icon/icon.js +0 -145
  164. package/dist/js/core/components/ui/icon/icon.js.map +0 -1
  165. package/dist/js/core/components/ui/icon/icons.js +0 -184
  166. package/dist/js/core/components/ui/icon/icons.js.map +0 -1
  167. package/dist/js/core/components/ui/icon/icons.json +0 -1
  168. package/dist/js/core/components/ui/image/image.js +0 -160
  169. package/dist/js/core/components/ui/image/image.js.map +0 -1
  170. package/dist/js/core/components/ui/link/link.js +0 -125
  171. package/dist/js/core/components/ui/link/link.js.map +0 -1
  172. package/dist/js/core/components/ui/loader/loader.js +0 -106
  173. package/dist/js/core/components/ui/loader/loader.js.map +0 -1
  174. package/dist/js/core/components/ui/loader/styles/fixed.js +0 -56
  175. package/dist/js/core/components/ui/loader/styles/fixed.js.map +0 -1
  176. package/dist/js/core/components/ui/loader/styles/inline.js +0 -70
  177. package/dist/js/core/components/ui/loader/styles/inline.js.map +0 -1
  178. package/dist/js/core/components/ui/menu/menu-item.js +0 -35
  179. package/dist/js/core/components/ui/menu/menu-item.js.map +0 -1
  180. package/dist/js/core/components/ui/menu/menu.js +0 -436
  181. package/dist/js/core/components/ui/menu/menu.js.map +0 -1
  182. package/dist/js/core/components/ui/modal/modal-actions.js +0 -44
  183. package/dist/js/core/components/ui/modal/modal-actions.js.map +0 -1
  184. package/dist/js/core/components/ui/modal/modal-close.js +0 -56
  185. package/dist/js/core/components/ui/modal/modal-close.js.map +0 -1
  186. package/dist/js/core/components/ui/modal/modal-content.js +0 -27
  187. package/dist/js/core/components/ui/modal/modal-content.js.map +0 -1
  188. package/dist/js/core/components/ui/modal/modal-subtitle.js +0 -34
  189. package/dist/js/core/components/ui/modal/modal-subtitle.js.map +0 -1
  190. package/dist/js/core/components/ui/modal/modal-title.js +0 -35
  191. package/dist/js/core/components/ui/modal/modal-title.js.map +0 -1
  192. package/dist/js/core/components/ui/modal/modal-utils.js +0 -32
  193. package/dist/js/core/components/ui/modal/modal-utils.js.map +0 -1
  194. package/dist/js/core/components/ui/modal/modal.js +0 -568
  195. package/dist/js/core/components/ui/modal/modal.js.map +0 -1
  196. package/dist/js/core/components/ui/pop/pop.js +0 -337
  197. package/dist/js/core/components/ui/pop/pop.js.map +0 -1
  198. package/dist/js/core/components/ui/progress/progress.js +0 -164
  199. package/dist/js/core/components/ui/progress/progress.js.map +0 -1
  200. package/dist/js/core/components/ui/table/table-caption.js +0 -29
  201. package/dist/js/core/components/ui/table/table-caption.js.map +0 -1
  202. package/dist/js/core/components/ui/table/table-tbody.js +0 -41
  203. package/dist/js/core/components/ui/table/table-tbody.js.map +0 -1
  204. package/dist/js/core/components/ui/table/table-td.js +0 -69
  205. package/dist/js/core/components/ui/table/table-td.js.map +0 -1
  206. package/dist/js/core/components/ui/table/table-tfoot.js +0 -28
  207. package/dist/js/core/components/ui/table/table-tfoot.js.map +0 -1
  208. package/dist/js/core/components/ui/table/table-th.js +0 -80
  209. package/dist/js/core/components/ui/table/table-th.js.map +0 -1
  210. package/dist/js/core/components/ui/table/table-thead.js +0 -26
  211. package/dist/js/core/components/ui/table/table-thead.js.map +0 -1
  212. package/dist/js/core/components/ui/table/table-tr.js +0 -67
  213. package/dist/js/core/components/ui/table/table-tr.js.map +0 -1
  214. package/dist/js/core/components/ui/table/table.js +0 -106
  215. package/dist/js/core/components/ui/table/table.js.map +0 -1
  216. package/dist/js/core/components/ui/theme/theme-collection/core-variables.js +0 -74
  217. package/dist/js/core/components/ui/theme/theme-collection/core-variables.js.map +0 -1
  218. package/dist/js/core/components/ui/theme/theme-collection/dark.js +0 -39
  219. package/dist/js/core/components/ui/theme/theme-collection/dark.js.map +0 -1
  220. package/dist/js/core/components/ui/theme/theme-collection/light.js +0 -32
  221. package/dist/js/core/components/ui/theme/theme-collection/light.js.map +0 -1
  222. package/dist/js/core/components/ui/theme/theme.js +0 -150
  223. package/dist/js/core/components/ui/theme/theme.js.map +0 -1
  224. package/dist/js/core/components/ui/toast/message-subscriber.js +0 -41
  225. package/dist/js/core/components/ui/toast/message-subscriber.js.map +0 -1
  226. package/dist/js/core/components/ui/toast/toast-item.js +0 -379
  227. package/dist/js/core/components/ui/toast/toast-item.js.map +0 -1
  228. package/dist/js/core/components/ui/toast/toast.js +0 -269
  229. package/dist/js/core/components/ui/toast/toast.js.map +0 -1
  230. package/dist/js/core/components/ui/toast/types.js +0 -2
  231. package/dist/js/core/components/ui/toast/types.js.map +0 -1
  232. package/dist/js/core/components/ui/tooltip/tooltip.js +0 -219
  233. package/dist/js/core/components/ui/tooltip/tooltip.js.map +0 -1
  234. package/dist/js/core/components/ui/ui.js +0 -41
  235. package/dist/js/core/components/ui/ui.js.map +0 -1
  236. package/dist/js/core/core.js +0 -14
  237. package/dist/js/core/core.js.map +0 -1
  238. package/dist/js/core/decorators/Subscriber.js +0 -10
  239. package/dist/js/core/decorators/Subscriber.js.map +0 -1
  240. package/dist/js/core/decorators/api.js +0 -806
  241. package/dist/js/core/decorators/api.js.map +0 -1
  242. package/dist/js/core/decorators/lifecycle.js +0 -67
  243. package/dist/js/core/decorators/lifecycle.js.map +0 -1
  244. package/dist/js/core/decorators/subscriber/ancestorAttribute.js +0 -27
  245. package/dist/js/core/decorators/subscriber/ancestorAttribute.js.map +0 -1
  246. package/dist/js/core/decorators/subscriber/autoFill.js +0 -26
  247. package/dist/js/core/decorators/subscriber/autoFill.js.map +0 -1
  248. package/dist/js/core/decorators/subscriber/autoSubscribe.js +0 -46
  249. package/dist/js/core/decorators/subscriber/autoSubscribe.js.map +0 -1
  250. package/dist/js/core/decorators/subscriber/bind.js +0 -150
  251. package/dist/js/core/decorators/subscriber/bind.js.map +0 -1
  252. package/dist/js/core/decorators/subscriber/common.js +0 -44
  253. package/dist/js/core/decorators/subscriber/common.js.map +0 -1
  254. package/dist/js/core/decorators/subscriber/derive.js +0 -60
  255. package/dist/js/core/decorators/subscriber/derive.js.map +0 -1
  256. package/dist/js/core/decorators/subscriber/dynamicPath.js +0 -75
  257. package/dist/js/core/decorators/subscriber/dynamicPath.js.map +0 -1
  258. package/dist/js/core/decorators/subscriber/dynamicPropertyWatch.js +0 -138
  259. package/dist/js/core/decorators/subscriber/dynamicPropertyWatch.js.map +0 -1
  260. package/dist/js/core/decorators/subscriber/handle.js +0 -22
  261. package/dist/js/core/decorators/subscriber/handle.js.map +0 -1
  262. package/dist/js/core/decorators/subscriber/onAssign.js +0 -199
  263. package/dist/js/core/decorators/subscriber/onAssign.js.map +0 -1
  264. package/dist/js/core/decorators/subscriber/publish.js +0 -108
  265. package/dist/js/core/decorators/subscriber/publish.js.map +0 -1
  266. package/dist/js/core/decorators/subscriber/publisherPath.js +0 -16
  267. package/dist/js/core/decorators/subscriber/publisherPath.js.map +0 -1
  268. package/dist/js/core/decorators/subscriber/subscribe.js +0 -20
  269. package/dist/js/core/decorators/subscriber/subscribe.js.map +0 -1
  270. package/dist/js/core/directives/DataProvider.js +0 -127
  271. package/dist/js/core/directives/DataProvider.js.map +0 -1
  272. package/dist/js/core/directives/Wording.js +0 -221
  273. package/dist/js/core/directives/Wording.js.map +0 -1
  274. package/dist/js/core/mixins/Fetcher.js +0 -325
  275. package/dist/js/core/mixins/Fetcher.js.map +0 -1
  276. package/dist/js/core/mixins/FormCheckable.js +0 -313
  277. package/dist/js/core/mixins/FormCheckable.js.map +0 -1
  278. package/dist/js/core/mixins/FormElement.js +0 -304
  279. package/dist/js/core/mixins/FormElement.js.map +0 -1
  280. package/dist/js/core/mixins/FormInput.js +0 -82
  281. package/dist/js/core/mixins/FormInput.js.map +0 -1
  282. package/dist/js/core/mixins/Subscriber.js +0 -354
  283. package/dist/js/core/mixins/Subscriber.js.map +0 -1
  284. package/dist/js/core/mixins/TemplatesContainer.js +0 -70
  285. package/dist/js/core/mixins/TemplatesContainer.js.map +0 -1
  286. package/dist/js/core/mixins/mixins.js +0 -7
  287. package/dist/js/core/mixins/mixins.js.map +0 -1
  288. package/dist/js/core/utils/AncestorAttributeObserver.js +0 -140
  289. package/dist/js/core/utils/AncestorAttributeObserver.js.map +0 -1
  290. package/dist/js/core/utils/Arrays.js +0 -141
  291. package/dist/js/core/utils/Arrays.js.map +0 -1
  292. package/dist/js/core/utils/DataBindObserver.js +0 -265
  293. package/dist/js/core/utils/DataBindObserver.js.map +0 -1
  294. package/dist/js/core/utils/Electron.js +0 -14
  295. package/dist/js/core/utils/Electron.js.map +0 -1
  296. package/dist/js/core/utils/Format.js +0 -43
  297. package/dist/js/core/utils/Format.js.map +0 -1
  298. package/dist/js/core/utils/HTML.js +0 -272
  299. package/dist/js/core/utils/HTML.js.map +0 -1
  300. package/dist/js/core/utils/LocationHandler.js +0 -143
  301. package/dist/js/core/utils/LocationHandler.js.map +0 -1
  302. package/dist/js/core/utils/Objects.js +0 -111
  303. package/dist/js/core/utils/Objects.js.map +0 -1
  304. package/dist/js/core/utils/PublisherProxy.js +0 -946
  305. package/dist/js/core/utils/PublisherProxy.js.map +0 -1
  306. package/dist/js/core/utils/SafariScrollGuard.js +0 -384
  307. package/dist/js/core/utils/SafariScrollGuard.js.map +0 -1
  308. package/dist/js/core/utils/Utils.js +0 -19
  309. package/dist/js/core/utils/Utils.js.map +0 -1
  310. package/dist/js/core/utils/aesCrypto.js +0 -98
  311. package/dist/js/core/utils/aesCrypto.js.map +0 -1
  312. package/dist/js/core/utils/api.js +0 -595
  313. package/dist/js/core/utils/api.js.map +0 -1
  314. package/dist/js/core/utils/dataProviderKey.js +0 -64
  315. package/dist/js/core/utils/dataProviderKey.js.map +0 -1
  316. package/dist/js/core/utils/derive.js +0 -246
  317. package/dist/js/core/utils/derive.js.map +0 -1
  318. package/dist/js/core/utils/endpoint.js +0 -74
  319. package/dist/js/core/utils/endpoint.js.map +0 -1
  320. package/dist/js/core/utils/jsonataHelpers.js +0 -69
  321. package/dist/js/core/utils/jsonataHelpers.js.map +0 -1
  322. package/dist/js/core/utils/jsonataRuntime.js +0 -75
  323. package/dist/js/core/utils/jsonataRuntime.js.map +0 -1
  324. package/dist/js/core/utils/route.js +0 -149
  325. package/dist/js/core/utils/route.js.map +0 -1
  326. package/dist/js/core/utils/url-pattern.js +0 -3
  327. package/dist/js/core/utils/url-pattern.js.map +0 -1
  328. package/dist/js/dataprovider.js +0 -2
  329. package/dist/js/dataprovider.js.map +0 -1
  330. package/dist/js/decorators.js +0 -43
  331. package/dist/js/decorators.js.map +0 -1
  332. package/dist/js/directives.js +0 -30
  333. package/dist/js/directives.js.map +0 -1
  334. package/dist/js/index.js +0 -8
  335. package/dist/js/index.js.map +0 -1
  336. package/dist/js/mixins.js +0 -23
  337. package/dist/js/mixins.js.map +0 -1
  338. package/dist/js/test-utils/TestUtils.js +0 -10
  339. package/dist/js/test-utils/TestUtils.js.map +0 -1
  340. package/dist/js/utils.js +0 -46
  341. package/dist/js/utils.js.map +0 -1
  342. package/dist/types/components.d.ts +0 -5
  343. package/dist/types/components.d.ts.map +0 -1
  344. package/dist/types/concorde-loaded.d.ts +0 -2
  345. package/dist/types/concorde-loaded.d.ts.map +0 -1
  346. package/dist/types/core/_types/endpoint.d.ts +0 -5
  347. package/dist/types/core/_types/endpoint.d.ts.map +0 -1
  348. package/dist/types/core/_types/key.d.ts +0 -2
  349. package/dist/types/core/_types/key.d.ts.map +0 -1
  350. package/dist/types/core/_types/types.d.ts +0 -28
  351. package/dist/types/core/_types/types.d.ts.map +0 -1
  352. package/dist/types/core/components/functional/date/date.d.ts +0 -52
  353. package/dist/types/core/components/functional/date/date.d.ts.map +0 -1
  354. package/dist/types/core/components/functional/example/example.d.ts +0 -15
  355. package/dist/types/core/components/functional/example/example.d.ts.map +0 -1
  356. package/dist/types/core/components/functional/fetch/fetch.d.ts +0 -102
  357. package/dist/types/core/components/functional/fetch/fetch.d.ts.map +0 -1
  358. package/dist/types/core/components/functional/functional.d.ts +0 -18
  359. package/dist/types/core/components/functional/functional.d.ts.map +0 -1
  360. package/dist/types/core/components/functional/if/if.d.ts +0 -13
  361. package/dist/types/core/components/functional/if/if.d.ts.map +0 -1
  362. package/dist/types/core/components/functional/jsonata/jsonata.d.ts +0 -29
  363. package/dist/types/core/components/functional/jsonata/jsonata.d.ts.map +0 -1
  364. package/dist/types/core/components/functional/list/list.d.ts +0 -149
  365. package/dist/types/core/components/functional/list/list.d.ts.map +0 -1
  366. package/dist/types/core/components/functional/mix/mix.d.ts +0 -23
  367. package/dist/types/core/components/functional/mix/mix.d.ts.map +0 -1
  368. package/dist/types/core/components/functional/queue/queue.d.ts +0 -93
  369. package/dist/types/core/components/functional/queue/queue.d.ts.map +0 -1
  370. package/dist/types/core/components/functional/router/redirect.d.ts +0 -19
  371. package/dist/types/core/components/functional/router/redirect.d.ts.map +0 -1
  372. package/dist/types/core/components/functional/router/router.d.ts +0 -46
  373. package/dist/types/core/components/functional/router/router.d.ts.map +0 -1
  374. package/dist/types/core/components/functional/sdui/SDUIDescriptorTransformer.d.ts +0 -59
  375. package/dist/types/core/components/functional/sdui/SDUIDescriptorTransformer.d.ts.map +0 -1
  376. package/dist/types/core/components/functional/sdui/sdui-utils.d.ts +0 -6
  377. package/dist/types/core/components/functional/sdui/sdui-utils.d.ts.map +0 -1
  378. package/dist/types/core/components/functional/sdui/sdui.d.ts +0 -145
  379. package/dist/types/core/components/functional/sdui/sdui.d.ts.map +0 -1
  380. package/dist/types/core/components/functional/sdui/types.d.ts +0 -38
  381. package/dist/types/core/components/functional/sdui/types.d.ts.map +0 -1
  382. package/dist/types/core/components/functional/sonic-scope/sonic-scope.d.ts +0 -6
  383. package/dist/types/core/components/functional/sonic-scope/sonic-scope.d.ts.map +0 -1
  384. package/dist/types/core/components/functional/states/states.d.ts +0 -42
  385. package/dist/types/core/components/functional/states/states.d.ts.map +0 -1
  386. package/dist/types/core/components/functional/submit/submit.d.ts +0 -37
  387. package/dist/types/core/components/functional/submit/submit.d.ts.map +0 -1
  388. package/dist/types/core/components/functional/subscriber/subscriber.d.ts +0 -13
  389. package/dist/types/core/components/functional/subscriber/subscriber.d.ts.map +0 -1
  390. package/dist/types/core/components/functional/translation/translation.d.ts +0 -7
  391. package/dist/types/core/components/functional/translation/translation.d.ts.map +0 -1
  392. package/dist/types/core/components/functional/value/value.d.ts +0 -8
  393. package/dist/types/core/components/functional/value/value.d.ts.map +0 -1
  394. package/dist/types/core/components/ui/_css/scroll.d.ts +0 -2
  395. package/dist/types/core/components/ui/_css/scroll.d.ts.map +0 -1
  396. package/dist/types/core/components/ui/_css/shadow.d.ts +0 -3
  397. package/dist/types/core/components/ui/_css/shadow.d.ts.map +0 -1
  398. package/dist/types/core/components/ui/_css/size.d.ts +0 -3
  399. package/dist/types/core/components/ui/_css/size.d.ts.map +0 -1
  400. package/dist/types/core/components/ui/_css/type.d.ts +0 -3
  401. package/dist/types/core/components/ui/_css/type.d.ts.map +0 -1
  402. package/dist/types/core/components/ui/alert/alert.d.ts +0 -37
  403. package/dist/types/core/components/ui/alert/alert.d.ts.map +0 -1
  404. package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts +0 -15
  405. package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts.map +0 -1
  406. package/dist/types/core/components/ui/badge/badge.d.ts +0 -27
  407. package/dist/types/core/components/ui/badge/badge.d.ts.map +0 -1
  408. package/dist/types/core/components/ui/button/button.d.ts +0 -180
  409. package/dist/types/core/components/ui/button/button.d.ts.map +0 -1
  410. package/dist/types/core/components/ui/captcha/altchaStyles.d.ts +0 -2
  411. package/dist/types/core/components/ui/captcha/altchaStyles.d.ts.map +0 -1
  412. package/dist/types/core/components/ui/captcha/captcha.d.ts +0 -30
  413. package/dist/types/core/components/ui/captcha/captcha.d.ts.map +0 -1
  414. package/dist/types/core/components/ui/card/card-footer.d.ts +0 -6
  415. package/dist/types/core/components/ui/card/card-footer.d.ts.map +0 -1
  416. package/dist/types/core/components/ui/card/card-header-descripton.d.ts +0 -6
  417. package/dist/types/core/components/ui/card/card-header-descripton.d.ts.map +0 -1
  418. package/dist/types/core/components/ui/card/card-header.d.ts +0 -9
  419. package/dist/types/core/components/ui/card/card-header.d.ts.map +0 -1
  420. package/dist/types/core/components/ui/card/card-main.d.ts +0 -6
  421. package/dist/types/core/components/ui/card/card-main.d.ts.map +0 -1
  422. package/dist/types/core/components/ui/card/card.d.ts +0 -13
  423. package/dist/types/core/components/ui/card/card.d.ts.map +0 -1
  424. package/dist/types/core/components/ui/divider/divider.d.ts +0 -16
  425. package/dist/types/core/components/ui/divider/divider.d.ts.map +0 -1
  426. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts +0 -176
  427. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts.map +0 -1
  428. package/dist/types/core/components/ui/form/css/form-control.d.ts +0 -5
  429. package/dist/types/core/components/ui/form/css/form-control.d.ts.map +0 -1
  430. package/dist/types/core/components/ui/form/fieldset/fieldset.d.ts +0 -24
  431. package/dist/types/core/components/ui/form/fieldset/fieldset.d.ts.map +0 -1
  432. package/dist/types/core/components/ui/form/fieldset/legend-description.d.ts +0 -6
  433. package/dist/types/core/components/ui/form/fieldset/legend-description.d.ts.map +0 -1
  434. package/dist/types/core/components/ui/form/fieldset/legend.d.ts +0 -17
  435. package/dist/types/core/components/ui/form/fieldset/legend.d.ts.map +0 -1
  436. package/dist/types/core/components/ui/form/form-actions/form-actions.d.ts +0 -8
  437. package/dist/types/core/components/ui/form/form-actions/form-actions.d.ts.map +0 -1
  438. package/dist/types/core/components/ui/form/form-layout/form-layout.d.ts +0 -13
  439. package/dist/types/core/components/ui/form/form-layout/form-layout.d.ts.map +0 -1
  440. package/dist/types/core/components/ui/form/input/input.d.ts +0 -123
  441. package/dist/types/core/components/ui/form/input/input.d.ts.map +0 -1
  442. package/dist/types/core/components/ui/form/input/password-helper.d.ts +0 -26
  443. package/dist/types/core/components/ui/form/input/password-helper.d.ts.map +0 -1
  444. package/dist/types/core/components/ui/form/input/same-value-helper.d.ts +0 -17
  445. package/dist/types/core/components/ui/form/input/same-value-helper.d.ts.map +0 -1
  446. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts +0 -155
  447. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts.map +0 -1
  448. package/dist/types/core/components/ui/form/radio/radio.d.ts +0 -15
  449. package/dist/types/core/components/ui/form/radio/radio.d.ts.map +0 -1
  450. package/dist/types/core/components/ui/form/select/select.d.ts +0 -59
  451. package/dist/types/core/components/ui/form/select/select.d.ts.map +0 -1
  452. package/dist/types/core/components/ui/form/switch/switch.d.ts +0 -6
  453. package/dist/types/core/components/ui/form/switch/switch.d.ts.map +0 -1
  454. package/dist/types/core/components/ui/form/textarea/textarea.d.ts +0 -94
  455. package/dist/types/core/components/ui/form/textarea/textarea.d.ts.map +0 -1
  456. package/dist/types/core/components/ui/group/group.d.ts +0 -17
  457. package/dist/types/core/components/ui/group/group.d.ts.map +0 -1
  458. package/dist/types/core/components/ui/icon/icon.d.ts +0 -30
  459. package/dist/types/core/components/ui/icon/icon.d.ts.map +0 -1
  460. package/dist/types/core/components/ui/icon/icons.d.ts +0 -13
  461. package/dist/types/core/components/ui/icon/icons.d.ts.map +0 -1
  462. package/dist/types/core/components/ui/image/image.d.ts +0 -16
  463. package/dist/types/core/components/ui/image/image.d.ts.map +0 -1
  464. package/dist/types/core/components/ui/link/link.d.ts +0 -30
  465. package/dist/types/core/components/ui/link/link.d.ts.map +0 -1
  466. package/dist/types/core/components/ui/loader/loader.d.ts +0 -24
  467. package/dist/types/core/components/ui/loader/loader.d.ts.map +0 -1
  468. package/dist/types/core/components/ui/loader/styles/fixed.d.ts +0 -2
  469. package/dist/types/core/components/ui/loader/styles/fixed.d.ts.map +0 -1
  470. package/dist/types/core/components/ui/loader/styles/inline.d.ts +0 -2
  471. package/dist/types/core/components/ui/loader/styles/inline.d.ts.map +0 -1
  472. package/dist/types/core/components/ui/menu/menu-item.d.ts +0 -6
  473. package/dist/types/core/components/ui/menu/menu-item.d.ts.map +0 -1
  474. package/dist/types/core/components/ui/menu/menu.d.ts +0 -52
  475. package/dist/types/core/components/ui/menu/menu.d.ts.map +0 -1
  476. package/dist/types/core/components/ui/modal/modal-actions.d.ts +0 -9
  477. package/dist/types/core/components/ui/modal/modal-actions.d.ts.map +0 -1
  478. package/dist/types/core/components/ui/modal/modal-close.d.ts +0 -11
  479. package/dist/types/core/components/ui/modal/modal-close.d.ts.map +0 -1
  480. package/dist/types/core/components/ui/modal/modal-content.d.ts +0 -6
  481. package/dist/types/core/components/ui/modal/modal-content.d.ts.map +0 -1
  482. package/dist/types/core/components/ui/modal/modal-subtitle.d.ts +0 -6
  483. package/dist/types/core/components/ui/modal/modal-subtitle.d.ts.map +0 -1
  484. package/dist/types/core/components/ui/modal/modal-title.d.ts +0 -6
  485. package/dist/types/core/components/ui/modal/modal-title.d.ts.map +0 -1
  486. package/dist/types/core/components/ui/modal/modal-utils.d.ts +0 -4
  487. package/dist/types/core/components/ui/modal/modal-utils.d.ts.map +0 -1
  488. package/dist/types/core/components/ui/modal/modal.d.ts +0 -79
  489. package/dist/types/core/components/ui/modal/modal.d.ts.map +0 -1
  490. package/dist/types/core/components/ui/pop/pop.d.ts +0 -42
  491. package/dist/types/core/components/ui/pop/pop.d.ts.map +0 -1
  492. package/dist/types/core/components/ui/progress/progress.d.ts +0 -12
  493. package/dist/types/core/components/ui/progress/progress.d.ts.map +0 -1
  494. package/dist/types/core/components/ui/table/table-caption.d.ts +0 -6
  495. package/dist/types/core/components/ui/table/table-caption.d.ts.map +0 -1
  496. package/dist/types/core/components/ui/table/table-tbody.d.ts +0 -6
  497. package/dist/types/core/components/ui/table/table-tbody.d.ts.map +0 -1
  498. package/dist/types/core/components/ui/table/table-td.d.ts +0 -13
  499. package/dist/types/core/components/ui/table/table-td.d.ts.map +0 -1
  500. package/dist/types/core/components/ui/table/table-tfoot.d.ts +0 -6
  501. package/dist/types/core/components/ui/table/table-tfoot.d.ts.map +0 -1
  502. package/dist/types/core/components/ui/table/table-th.d.ts +0 -12
  503. package/dist/types/core/components/ui/table/table-th.d.ts.map +0 -1
  504. package/dist/types/core/components/ui/table/table-thead.d.ts +0 -6
  505. package/dist/types/core/components/ui/table/table-thead.d.ts.map +0 -1
  506. package/dist/types/core/components/ui/table/table-tr.d.ts +0 -14
  507. package/dist/types/core/components/ui/table/table-tr.d.ts.map +0 -1
  508. package/dist/types/core/components/ui/table/table.d.ts +0 -18
  509. package/dist/types/core/components/ui/table/table.d.ts.map +0 -1
  510. package/dist/types/core/components/ui/theme/theme-collection/core-variables.d.ts +0 -2
  511. package/dist/types/core/components/ui/theme/theme-collection/core-variables.d.ts.map +0 -1
  512. package/dist/types/core/components/ui/theme/theme-collection/dark.d.ts +0 -2
  513. package/dist/types/core/components/ui/theme/theme-collection/dark.d.ts.map +0 -1
  514. package/dist/types/core/components/ui/theme/theme-collection/light.d.ts +0 -2
  515. package/dist/types/core/components/ui/theme/theme-collection/light.d.ts.map +0 -1
  516. package/dist/types/core/components/ui/theme/theme.d.ts +0 -20
  517. package/dist/types/core/components/ui/theme/theme.d.ts.map +0 -1
  518. package/dist/types/core/components/ui/toast/message-subscriber.d.ts +0 -19
  519. package/dist/types/core/components/ui/toast/message-subscriber.d.ts.map +0 -1
  520. package/dist/types/core/components/ui/toast/toast-item.d.ts +0 -41
  521. package/dist/types/core/components/ui/toast/toast-item.d.ts.map +0 -1
  522. package/dist/types/core/components/ui/toast/toast.d.ts +0 -28
  523. package/dist/types/core/components/ui/toast/toast.d.ts.map +0 -1
  524. package/dist/types/core/components/ui/toast/types.d.ts +0 -12
  525. package/dist/types/core/components/ui/toast/types.d.ts.map +0 -1
  526. package/dist/types/core/components/ui/tooltip/tooltip.d.ts +0 -21
  527. package/dist/types/core/components/ui/tooltip/tooltip.d.ts.map +0 -1
  528. package/dist/types/core/components/ui/ui.d.ts +0 -35
  529. package/dist/types/core/components/ui/ui.d.ts.map +0 -1
  530. package/dist/types/core/core.d.ts +0 -5
  531. package/dist/types/core/core.d.ts.map +0 -1
  532. package/dist/types/core/decorators/Subscriber.d.ts +0 -13
  533. package/dist/types/core/decorators/Subscriber.d.ts.map +0 -1
  534. package/dist/types/core/decorators/api.d.ts +0 -155
  535. package/dist/types/core/decorators/api.d.ts.map +0 -1
  536. package/dist/types/core/decorators/lifecycle.d.ts +0 -19
  537. package/dist/types/core/decorators/lifecycle.d.ts.map +0 -1
  538. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts +0 -11
  539. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts.map +0 -1
  540. package/dist/types/core/decorators/subscriber/autoFill.d.ts +0 -2
  541. package/dist/types/core/decorators/subscriber/autoFill.d.ts.map +0 -1
  542. package/dist/types/core/decorators/subscriber/autoSubscribe.d.ts +0 -2
  543. package/dist/types/core/decorators/subscriber/autoSubscribe.d.ts.map +0 -1
  544. package/dist/types/core/decorators/subscriber/bind.d.ts +0 -28
  545. package/dist/types/core/decorators/subscriber/bind.d.ts.map +0 -1
  546. package/dist/types/core/decorators/subscriber/common.d.ts +0 -14
  547. package/dist/types/core/decorators/subscriber/common.d.ts.map +0 -1
  548. package/dist/types/core/decorators/subscriber/derive.d.ts +0 -30
  549. package/dist/types/core/decorators/subscriber/derive.d.ts.map +0 -1
  550. package/dist/types/core/decorators/subscriber/dynamicPath.d.ts +0 -23
  551. package/dist/types/core/decorators/subscriber/dynamicPath.d.ts.map +0 -1
  552. package/dist/types/core/decorators/subscriber/dynamicPropertyWatch.d.ts +0 -42
  553. package/dist/types/core/decorators/subscriber/dynamicPropertyWatch.d.ts.map +0 -1
  554. package/dist/types/core/decorators/subscriber/handle.d.ts +0 -74
  555. package/dist/types/core/decorators/subscriber/handle.d.ts.map +0 -1
  556. package/dist/types/core/decorators/subscriber/onAssign.d.ts +0 -53
  557. package/dist/types/core/decorators/subscriber/onAssign.d.ts.map +0 -1
  558. package/dist/types/core/decorators/subscriber/publish.d.ts +0 -23
  559. package/dist/types/core/decorators/subscriber/publish.d.ts.map +0 -1
  560. package/dist/types/core/decorators/subscriber/publisherPath.d.ts +0 -3
  561. package/dist/types/core/decorators/subscriber/publisherPath.d.ts.map +0 -1
  562. package/dist/types/core/decorators/subscriber/subscribe.d.ts +0 -20
  563. package/dist/types/core/decorators/subscriber/subscribe.d.ts.map +0 -1
  564. package/dist/types/core/directives/DataProvider.d.ts +0 -45
  565. package/dist/types/core/directives/DataProvider.d.ts.map +0 -1
  566. package/dist/types/core/directives/Wording.d.ts +0 -44
  567. package/dist/types/core/directives/Wording.d.ts.map +0 -1
  568. package/dist/types/core/mixins/Fetcher.d.ts +0 -108
  569. package/dist/types/core/mixins/Fetcher.d.ts.map +0 -1
  570. package/dist/types/core/mixins/FormCheckable.d.ts +0 -95
  571. package/dist/types/core/mixins/FormCheckable.d.ts.map +0 -1
  572. package/dist/types/core/mixins/FormElement.d.ts +0 -37
  573. package/dist/types/core/mixins/FormElement.d.ts.map +0 -1
  574. package/dist/types/core/mixins/FormInput.d.ts +0 -79
  575. package/dist/types/core/mixins/FormInput.d.ts.map +0 -1
  576. package/dist/types/core/mixins/Subscriber.d.ts +0 -38
  577. package/dist/types/core/mixins/Subscriber.d.ts.map +0 -1
  578. package/dist/types/core/mixins/TemplatesContainer.d.ts +0 -14
  579. package/dist/types/core/mixins/TemplatesContainer.d.ts.map +0 -1
  580. package/dist/types/core/mixins/mixins.d.ts +0 -7
  581. package/dist/types/core/mixins/mixins.d.ts.map +0 -1
  582. package/dist/types/core/utils/AncestorAttributeObserver.d.ts +0 -38
  583. package/dist/types/core/utils/AncestorAttributeObserver.d.ts.map +0 -1
  584. package/dist/types/core/utils/Arrays.d.ts +0 -98
  585. package/dist/types/core/utils/Arrays.d.ts.map +0 -1
  586. package/dist/types/core/utils/DataBindObserver.d.ts +0 -84
  587. package/dist/types/core/utils/DataBindObserver.d.ts.map +0 -1
  588. package/dist/types/core/utils/Electron.d.ts +0 -8
  589. package/dist/types/core/utils/Electron.d.ts.map +0 -1
  590. package/dist/types/core/utils/Format.d.ts +0 -13
  591. package/dist/types/core/utils/Format.d.ts.map +0 -1
  592. package/dist/types/core/utils/HTML.d.ts +0 -79
  593. package/dist/types/core/utils/HTML.d.ts.map +0 -1
  594. package/dist/types/core/utils/LocationHandler.d.ts +0 -48
  595. package/dist/types/core/utils/LocationHandler.d.ts.map +0 -1
  596. package/dist/types/core/utils/Objects.d.ts +0 -31
  597. package/dist/types/core/utils/Objects.d.ts.map +0 -1
  598. package/dist/types/core/utils/PublisherProxy.d.ts +0 -230
  599. package/dist/types/core/utils/PublisherProxy.d.ts.map +0 -1
  600. package/dist/types/core/utils/SafariScrollGuard.d.ts +0 -36
  601. package/dist/types/core/utils/SafariScrollGuard.d.ts.map +0 -1
  602. package/dist/types/core/utils/Utils.d.ts +0 -6
  603. package/dist/types/core/utils/Utils.d.ts.map +0 -1
  604. package/dist/types/core/utils/aesCrypto.d.ts +0 -53
  605. package/dist/types/core/utils/aesCrypto.d.ts.map +0 -1
  606. package/dist/types/core/utils/api.d.ts +0 -173
  607. package/dist/types/core/utils/api.d.ts.map +0 -1
  608. package/dist/types/core/utils/dataProviderKey.d.ts +0 -56
  609. package/dist/types/core/utils/dataProviderKey.d.ts.map +0 -1
  610. package/dist/types/core/utils/derive.d.ts +0 -40
  611. package/dist/types/core/utils/derive.d.ts.map +0 -1
  612. package/dist/types/core/utils/endpoint.d.ts +0 -37
  613. package/dist/types/core/utils/endpoint.d.ts.map +0 -1
  614. package/dist/types/core/utils/jsonataHelpers.d.ts +0 -15
  615. package/dist/types/core/utils/jsonataHelpers.d.ts.map +0 -1
  616. package/dist/types/core/utils/jsonataRuntime.d.ts +0 -13
  617. package/dist/types/core/utils/jsonataRuntime.d.ts.map +0 -1
  618. package/dist/types/core/utils/route.d.ts +0 -41
  619. package/dist/types/core/utils/route.d.ts.map +0 -1
  620. package/dist/types/core/utils/url-pattern.d.ts +0 -3
  621. package/dist/types/core/utils/url-pattern.d.ts.map +0 -1
  622. package/dist/types/dataprovider.d.ts +0 -2
  623. package/dist/types/dataprovider.d.ts.map +0 -1
  624. package/dist/types/decorators.d.ts +0 -30
  625. package/dist/types/decorators.d.ts.map +0 -1
  626. package/dist/types/directives.d.ts +0 -21
  627. package/dist/types/directives.d.ts.map +0 -1
  628. package/dist/types/index.d.ts +0 -8
  629. package/dist/types/index.d.ts.map +0 -1
  630. package/dist/types/mixins.d.ts +0 -204
  631. package/dist/types/mixins.d.ts.map +0 -1
  632. package/dist/types/test-utils/TestUtils.d.ts +0 -4
  633. package/dist/types/test-utils/TestUtils.d.ts.map +0 -1
  634. package/dist/types/utils.d.ts +0 -20
  635. package/dist/types/utils.d.ts.map +0 -1
  636. package/docs/assets/index-DpIkksht.js +0 -11626
@@ -1,12 +1,12 @@
1
1
  [
2
2
  {
3
- "search": "Date",
3
+ "search": "3D",
4
4
  "files": {
5
- "core/components/functional/date/date.md": {
6
- "title": "Date",
5
+ "core/components/functional/3d/3d.md": {
6
+ "title": "3D",
7
7
  "hashes": {
8
- "date": {
9
- "count": 2,
8
+ "3d": {
9
+ "count": 1,
10
10
  "title": "",
11
11
  "type": "page"
12
12
  }
@@ -15,42 +15,12 @@
15
15
  }
16
16
  },
17
17
  {
18
- "search": "Nothing is displayed.\n",
19
- "files": {
20
- "core/components/functional/date/date.md": {
21
- "title": "Date",
22
- "hashes": {
23
- "no-attribute": {
24
- "count": 1,
25
- "title": "No attribute",
26
- "type": "paragraph"
27
- }
28
- }
29
- }
30
- }
31
- },
32
- {
33
- "search": "Displays the current date.\n",
34
- "files": {
35
- "core/components/functional/date/date.md": {
36
- "title": "Date",
37
- "hashes": {
38
- "now": {
39
- "count": 1,
40
- "title": "Now",
41
- "type": "paragraph"
42
- }
43
- }
44
- }
45
- }
46
- },
47
- {
48
- "search": "Displays a date from a timestamp.\n",
18
+ "search": "sonic-3d — viewer Three.js (glTF / GLB), caméra orbit / perspective / ortho, outputs dataProvider paresseux.\n",
49
19
  "files": {
50
- "core/components/functional/date/date.md": {
51
- "title": "Date",
20
+ "core/components/functional/3d/3d.md": {
21
+ "title": "3D",
52
22
  "hashes": {
53
- "date": {
23
+ "3d": {
54
24
  "count": 1,
55
25
  "title": "",
56
26
  "type": "paragraph"
@@ -60,112 +30,22 @@
60
30
  }
61
31
  },
62
32
  {
63
- "search": "Displays a date from a string.\n",
64
- "files": {
65
- "core/components/functional/date/date.md": {
66
- "title": "Date",
67
- "hashes": {
68
- "date_string": {
69
- "count": 1,
70
- "title": "Date_string",
71
- "type": "paragraph"
72
- }
73
- }
74
- }
75
- }
76
- },
77
- {
78
- "search": "Displays a period of time from start_date to end_date.When by itself start_date will act as dateif a start_date is not specified it will be set by the current date.if the end_date is anterior to start date date it will be used as the start_date. \n",
79
- "files": {
80
- "core/components/functional/date/date.md": {
81
- "title": "Date",
82
- "hashes": {
83
- "start_date--end_date": {
84
- "count": 1,
85
- "title": "Start_date / end_date",
86
- "type": "paragraph"
87
- }
88
- }
89
- }
90
- }
91
- },
92
- {
93
- "search": "ISO 639-1 Language Codes\n",
94
- "files": {
95
- "core/components/functional/date/date.md": {
96
- "title": "Date",
97
- "hashes": {
98
- "language": {
99
- "count": 1,
100
- "title": "Language",
101
- "type": "paragraph"
102
- }
103
- }
104
- }
105
- }
106
- },
107
- {
108
- "search": "For the list of supported timeZones, run Intl.supportedValuesOf('timeZone') in the console\n",
109
- "files": {
110
- "core/components/functional/date/date.md": {
111
- "title": "Date",
112
- "hashes": {
113
- "time_zone": {
114
- "count": 1,
115
- "title": "Time_zone",
116
- "type": "paragraph"
117
- }
118
- }
119
- }
120
- }
121
- },
122
- {
123
- "search": "Deprecated\n",
33
+ "search": "Import opt-in (hors bundle functional) :\n",
124
34
  "files": {
125
- "core/components/functional/date/date.md": {
126
- "title": "Date",
35
+ "core/components/functional/3d/3d.md": {
36
+ "title": "3D",
127
37
  "hashes": {
128
- "renderif": {
38
+ "3d": {
129
39
  "count": 1,
130
- "title": ".renderIf",
40
+ "title": "",
131
41
  "type": "paragraph"
132
42
  }
133
43
  }
134
44
  },
135
- "core/components/functional/fetch/fetch.md": {
136
- "title": "Fetch",
137
- "hashes": {
138
- "headersdataprovider": {
139
- "count": 1,
140
- "title": "HeadersDataProvider",
141
- "type": "paragraph"
142
- }
143
- }
144
- }
145
- }
146
- },
147
- {
148
- "search": "Fetch",
149
- "files": {
150
- "core/components/functional/fetch/fetch.md": {
151
- "title": "Fetch",
152
- "hashes": {
153
- "fetch": {
154
- "count": 1,
155
- "title": "",
156
- "type": "page"
157
- }
158
- }
159
- }
160
- }
161
- },
162
- {
163
- "search": "New apps: prefer @get for a typed GET on a component, or List / Queue with fetch for collections. Use Local API demos (serviceURL="/docs-mock-api") to try examples offline.\n",
164
- "files": {
165
- "core/components/functional/fetch/fetch.md": {
166
- "title": "Fetch",
45
+ "core/components/functional/shader/shader.md": {
46
+ "title": "Shader",
167
47
  "hashes": {
168
- "fetch": {
48
+ "shader": {
169
49
  "count": 1,
170
50
  "title": "",
171
51
  "type": "paragraph"
@@ -175,12 +55,12 @@
175
55
  }
176
56
  },
177
57
  {
178
- "search": "The sonic-fetch component requests and stores API data. It extends the Fetcher and Subscriber mixins.\n",
58
+ "search": "CDN (after the core): concorde-3d.bundle.js — see CDN addons.\n",
179
59
  "files": {
180
- "core/components/functional/fetch/fetch.md": {
181
- "title": "Fetch",
60
+ "core/components/functional/3d/3d.md": {
61
+ "title": "3D",
182
62
  "hashes": {
183
- "fetch": {
63
+ "3d": {
184
64
  "count": 1,
185
65
  "title": "",
186
66
  "type": "paragraph"
@@ -190,44 +70,14 @@
190
70
  }
191
71
  },
192
72
  {
193
- "search": "In order to work properly the sonic-fetch component needs at least the following attributes. \n",
194
- "files": {
195
- "core/components/functional/fetch/fetch.md": {
196
- "title": "Fetch",
197
- "hashes": {
198
- "basic-usage": {
199
- "count": 1,
200
- "title": "Basic usage",
201
- "type": "paragraph"
202
- }
203
- }
204
- }
205
- }
206
- },
207
- {
208
- "search": "If no endPoint is specified it will be filled by the dataProvider ID instead \n",
209
- "files": {
210
- "core/components/functional/fetch/fetch.md": {
211
- "title": "Fetch",
212
- "hashes": {
213
- "dataprovider-as-an-endpoint": {
214
- "count": 1,
215
- "title": "DataProvider as an endPoint",
216
- "type": "paragraph"
217
- }
218
- }
219
- }
220
- }
221
- },
222
- {
223
- "search": "When the key attribute is present, only a sub-part of the data received is injected into the dataProvider.\nWe can use the dot syntax to target what we want to keep.\n",
73
+ "search": "DamagedHelmet (Khronos, jsDelivr). Orbit · zoom · pan · survol highlight · pick · double-clic = recentrer. Sans src : cube de démo. Molette : zoom tant qu’il reste de la marge ; aux bornes minDistance / maxDistance, le scroll page reprend.\n",
224
74
  "files": {
225
- "core/components/functional/fetch/fetch.md": {
226
- "title": "Fetch",
75
+ "core/components/functional/3d/3d.md": {
76
+ "title": "3D",
227
77
  "hashes": {
228
- "key": {
78
+ "démo-modèle-cdn": {
229
79
  "count": 1,
230
- "title": "Key",
80
+ "title": "Démo (modèle CDN)",
231
81
  "type": "paragraph"
232
82
  }
233
83
  }
@@ -235,89 +85,64 @@
235
85
  }
236
86
  },
237
87
  {
238
- "search": "For example if the data is {my:{data:{a:1,b:2}}} and the key is key="my.data", the data available in the dataProvider will be {a:1 , b:2}\n",
88
+ "search": "\n",
239
89
  "files": {
240
- "core/components/functional/fetch/fetch.md": {
241
- "title": "Fetch",
90
+ "core/components/functional/3d/3d.md": {
91
+ "title": "3D",
242
92
  "hashes": {
243
- "key": {
93
+ "démo-modèle-cdn": {
244
94
  "count": 1,
245
- "title": "Key",
95
+ "title": "Démo (modèle CDN)",
246
96
  "type": "paragraph"
247
- }
248
- }
249
- }
250
- }
251
- },
252
- {
253
- "search": "if the mime type of the content returned by the service begins with text/, then the dataProvider has a key named "text" which contains the text returned by the service.\n",
254
- "files": {
255
- "core/components/functional/fetch/fetch.md": {
256
- "title": "Fetch",
257
- "hashes": {
258
- "text-mode": {
97
+ },
98
+ "form-auto-bind-formdataprovider": {
259
99
  "count": 1,
260
- "title": "Text mode",
100
+ "title": "Form auto-bind (`formDataProvider`)",
261
101
  "type": "paragraph"
262
- }
263
- }
264
- }
265
- }
266
- },
267
- {
268
- "search": "The noLoader attribute disables display of the default loader\n",
269
- "files": {
270
- "core/components/functional/fetch/fetch.md": {
271
- "title": "Fetch",
272
- "hashes": {
273
- "noloader": {
102
+ },
103
+ "sortie--dataprovider": {
274
104
  "count": 1,
275
- "title": "NoLoader",
105
+ "title": "Sortie / dataProvider",
276
106
  "type": "paragraph"
277
107
  }
278
108
  }
279
- }
280
- }
281
- },
282
- {
283
- "search": "if",
284
- "files": {
109
+ },
285
110
  "core/components/functional/if/if.md": {
286
111
  "title": "if",
287
112
  "hashes": {
288
113
  "if": {
289
114
  "count": 1,
290
115
  "title": "",
291
- "type": "page"
116
+ "type": "paragraph"
292
117
  }
293
118
  }
294
- }
295
- }
296
- },
297
- {
298
- "search": "The sonic-if component shows its slot when .condition is true. In Lit, bind .condition from store-driven state (@subscribe on a formDataProvider field) — live preview and TypeScript source are the same file (docs-lit-demo):\n",
299
- "files": {
300
- "core/components/functional/if/if.md": {
301
- "title": "if",
119
+ },
120
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
121
+ "title": "Hugging Face infer",
302
122
  "hashes": {
303
- "if": {
123
+ "image--background-removal": {
304
124
  "count": 1,
305
- "title": "",
125
+ "title": "Image — `background-removal`",
126
+ "type": "paragraph"
127
+ },
128
+ "text--zero-shot-classification": {
129
+ "count": 1,
130
+ "title": "Text — `zero-shot-classification`",
306
131
  "type": "paragraph"
307
132
  }
308
133
  }
309
- }
310
- }
311
- },
312
- {
313
- "search": "\n",
314
- "files": {
315
- "core/components/functional/if/if.md": {
316
- "title": "if",
134
+ },
135
+ "core/components/functional/jsonata/jsonata.md": {
136
+ "title": "Jsonata",
317
137
  "hashes": {
318
- "if": {
138
+ "groupby--top-n": {
319
139
  "count": 1,
320
- "title": "",
140
+ "title": "Groupby + top N",
141
+ "type": "paragraph"
142
+ },
143
+ "totaux-somme--taxe": {
144
+ "count": 1,
145
+ "title": "Totaux (somme + taxe)",
321
146
  "type": "paragraph"
322
147
  }
323
148
  }
@@ -377,15 +202,40 @@
377
202
  }
378
203
  }
379
204
  },
380
- "core/components/functional/submit/submit.md": {
381
- "title": "Submit",
205
+ "core/components/functional/shader/shader.md": {
206
+ "title": "Shader",
382
207
  "hashes": {
383
- "form-and-result-handling": {
208
+ "multipass-sur-une-photo": {
384
209
  "count": 1,
385
- "title": "Form and result handling",
210
+ "title": "Multipass sur une photo",
386
211
  "type": "paragraph"
387
212
  },
388
- "native-html-form": {
213
+ "chaînage-deffets-officiel": {
214
+ "count": 1,
215
+ "title": "Chaînage d’effets (officiel)",
216
+ "type": "paragraph"
217
+ },
218
+ "rollover--roll-out-hover-param": {
219
+ "count": 1,
220
+ "title": "Rollover / roll-out (`hover-param`)",
221
+ "type": "paragraph"
222
+ },
223
+ "sortie--sampling-sample--dataprovider": {
224
+ "count": 1,
225
+ "title": "Sortie / sampling (`sample` + dataProvider)",
226
+ "type": "paragraph"
227
+ }
228
+ }
229
+ },
230
+ "core/components/functional/submit/submit.md": {
231
+ "title": "Submit",
232
+ "hashes": {
233
+ "form-and-result-handling": {
234
+ "count": 1,
235
+ "title": "Form and result handling",
236
+ "type": "paragraph"
237
+ },
238
+ "native-html-form": {
389
239
  "count": 1,
390
240
  "title": "Native HTML form",
391
241
  "type": "paragraph"
@@ -422,6 +272,16 @@
422
272
  }
423
273
  }
424
274
  },
275
+ "core/components/functional/webgpu/webgpu.md": {
276
+ "title": "WebGPU",
277
+ "hashes": {
278
+ "demo--particles-compute": {
279
+ "count": 1,
280
+ "title": "Demo — particles (compute)",
281
+ "type": "paragraph"
282
+ }
283
+ }
284
+ },
425
285
  "core/components/ui/form/checkbox/checkbox.md": {
426
286
  "title": "Checkbox",
427
287
  "hashes": {
@@ -460,74 +320,1314 @@
460
320
  "core/components/ui/form/select/select.md": {
461
321
  "title": "Select",
462
322
  "hashes": {
463
- "example-of-use--language-filter--queue": {
323
+ "example-of-use--language-filter--queue": {
324
+ "count": 1,
325
+ "title": "Example of use — language filter + queue",
326
+ "type": "paragraph"
327
+ }
328
+ }
329
+ },
330
+ "core/components/ui/form/switch/switch.md": {
331
+ "title": "Switch",
332
+ "hashes": {
333
+ "example-of-use--blacklist--queue": {
334
+ "count": 1,
335
+ "title": "Example of use — blacklist + queue",
336
+ "type": "paragraph"
337
+ }
338
+ }
339
+ },
340
+ "core/components/ui/icon/icon.md": {
341
+ "title": "Icon",
342
+ "hashes": {
343
+ "custom": {
344
+ "count": 1,
345
+ "title": "Custom",
346
+ "type": "paragraph"
347
+ }
348
+ }
349
+ },
350
+ "core/components/ui/loader/loader.md": {
351
+ "title": "Loader",
352
+ "hashes": {
353
+ "fixed-mode": {
354
+ "count": 1,
355
+ "title": "Fixed mode",
356
+ "type": "paragraph"
357
+ }
358
+ }
359
+ },
360
+ "docs/_misc/api-configuration.md": {
361
+ "title": "API configuration",
362
+ "hashes": {
363
+ "bearer-token-static": {
364
+ "count": 1,
365
+ "title": "Bearer token (static)",
366
+ "type": "paragraph"
367
+ },
368
+ "tokenprovider--basic-auth": {
369
+ "count": 1,
370
+ "title": "tokenProvider + Basic auth",
371
+ "type": "paragraph"
372
+ },
373
+ "http-498--stale-token-refresh": {
374
+ "count": 1,
375
+ "title": "HTTP 498 — stale token refresh",
376
+ "type": "paragraph"
377
+ },
378
+ "eventsapitoken": {
379
+ "count": 1,
380
+ "title": "eventsApiToken",
381
+ "type": "paragraph"
382
+ },
383
+ "wording-api": {
384
+ "count": 1,
385
+ "title": "Wording API",
386
+ "type": "paragraph"
387
+ },
388
+ "scoped-attributes-html--sonic-scope": {
389
+ "count": 1,
390
+ "title": "Scoped attributes (HTML / sonic-scope)",
391
+ "type": "paragraph"
392
+ }
393
+ }
394
+ },
395
+ "docs/_misc/visual-stack.md": {
396
+ "title": "Visual stack",
397
+ "hashes": {
398
+ "demo": {
399
+ "count": 1,
400
+ "title": "Demo",
401
+ "type": "paragraph"
402
+ },
403
+ "harris--patches--webgpu": {
404
+ "count": 1,
405
+ "title": "Harris → patches → WebGPU",
406
+ "type": "paragraph"
407
+ }
408
+ }
409
+ }
410
+ }
411
+ },
412
+ {
413
+ "search": "Comme sonic-shader : si dataProvider (ou un ancêtre formDataProvider) contient des champs aux mêmes noms que l’API, ils pilotent le viewer sans JS.\n",
414
+ "files": {
415
+ "core/components/functional/3d/3d.md": {
416
+ "title": "3D",
417
+ "hashes": {
418
+ "form-auto-bind-formdataprovider": {
419
+ "count": 1,
420
+ "title": "Form auto-bind (`formDataProvider`)",
421
+ "type": "paragraph"
422
+ }
423
+ }
424
+ }
425
+ }
426
+ },
427
+ {
428
+ "search": "Conseil : séparer out-data-provider du form. Les entrées pures (fov, exposure, autoRotate, src…) ne sont jamais réécrites en out sur un DP partagé. yaw / distance / pitch restent publiables ; un changement manuel d’orbit coupe autoRotate.\n",
429
+ "files": {
430
+ "core/components/functional/3d/3d.md": {
431
+ "title": "3D",
432
+ "hashes": {
433
+ "form-auto-bind-formdataprovider": {
434
+ "count": 1,
435
+ "title": "Form auto-bind (`formDataProvider`)",
436
+ "type": "paragraph"
437
+ }
438
+ }
439
+ }
440
+ }
441
+ },
442
+ {
443
+ "search": "Gate paresseuse : un sonic-input name="yaw" ne déclenche pas la publication out (seul un lecteur sur ready / frame / cam* / hit*… le fait).\n",
444
+ "files": {
445
+ "core/components/functional/3d/3d.md": {
446
+ "title": "3D",
447
+ "hashes": {
448
+ "form-auto-bind-formdataprovider": {
449
+ "count": 1,
450
+ "title": "Form auto-bind (`formDataProvider`)",
451
+ "type": "paragraph"
452
+ }
453
+ }
454
+ }
455
+ }
456
+ },
457
+ {
458
+ "search": "Entrée : champs ci-dessus. Sortie (Sonic3dOutput) : cam* / target* / distance / yaw / pitch / pointer* / ready / hit*… With frame-out (or a listener on frameUrl / snapshot): lazy JPEG canvas capture → frameUrl + snapshot (SonicMediaRef). Event out. Publication paresseuse.\n",
459
+ "files": {
460
+ "core/components/functional/3d/3d.md": {
461
+ "title": "3D",
462
+ "hashes": {
463
+ "sortie--dataprovider": {
464
+ "count": 1,
465
+ "title": "Sortie / dataProvider",
466
+ "type": "paragraph"
467
+ }
468
+ }
469
+ }
470
+ }
471
+ },
472
+ {
473
+ "search": "Le viewer lit asset ou src depuis le DP — la source (fetch, upload, HF) n’est pas couplée.\n",
474
+ "files": {
475
+ "core/components/functional/3d/3d.md": {
476
+ "title": "3D",
477
+ "hashes": {
478
+ "asset-neutre-hf-plus-tard": {
479
+ "count": 1,
480
+ "title": "Asset neutre (HF plus tard)",
481
+ "type": "paragraph"
482
+ }
483
+ }
484
+ }
485
+ }
486
+ },
487
+ {
488
+ "search": "No shared WebGL context between sonic-3d and sonic-shader. Bridge: frame-out publishes frameUrl + snapshot (SonicMediaRef) to the DP → shader channels.\n",
489
+ "files": {
490
+ "core/components/functional/3d/3d.md": {
491
+ "title": "3D",
492
+ "hashes": {
493
+ "shader-bridging": {
494
+ "count": 1,
495
+ "title": "Shader bridging",
496
+ "type": "paragraph"
497
+ }
498
+ }
499
+ }
500
+ }
501
+ },
502
+ {
503
+ "search": "Note: each new snapshot revokes the previous ObjectURL. To freeze a frame (HF / shader), clone with cloneMediaRef — otherwise Failed to load texture: blob:….\n",
504
+ "files": {
505
+ "core/components/functional/3d/3d.md": {
506
+ "title": "3D",
507
+ "hashes": {
508
+ "shader-bridging": {
509
+ "count": 1,
510
+ "title": "Shader bridging",
511
+ "type": "paragraph"
512
+ }
513
+ }
514
+ }
515
+ }
516
+ },
517
+ {
518
+ "search": "Date",
519
+ "files": {
520
+ "core/components/functional/date/date.md": {
521
+ "title": "Date",
522
+ "hashes": {
523
+ "date": {
524
+ "count": 2,
525
+ "title": "",
526
+ "type": "page"
527
+ }
528
+ }
529
+ }
530
+ }
531
+ },
532
+ {
533
+ "search": "Nothing is displayed.\n",
534
+ "files": {
535
+ "core/components/functional/date/date.md": {
536
+ "title": "Date",
537
+ "hashes": {
538
+ "no-attribute": {
539
+ "count": 1,
540
+ "title": "No attribute",
541
+ "type": "paragraph"
542
+ }
543
+ }
544
+ }
545
+ }
546
+ },
547
+ {
548
+ "search": "Displays the current date.\n",
549
+ "files": {
550
+ "core/components/functional/date/date.md": {
551
+ "title": "Date",
552
+ "hashes": {
553
+ "now": {
554
+ "count": 1,
555
+ "title": "Now",
556
+ "type": "paragraph"
557
+ }
558
+ }
559
+ }
560
+ }
561
+ },
562
+ {
563
+ "search": "Displays a date from a timestamp.\n",
564
+ "files": {
565
+ "core/components/functional/date/date.md": {
566
+ "title": "Date",
567
+ "hashes": {
568
+ "date": {
569
+ "count": 1,
570
+ "title": "",
571
+ "type": "paragraph"
572
+ }
573
+ }
574
+ }
575
+ }
576
+ },
577
+ {
578
+ "search": "Displays a date from a string.\n",
579
+ "files": {
580
+ "core/components/functional/date/date.md": {
581
+ "title": "Date",
582
+ "hashes": {
583
+ "date_string": {
584
+ "count": 1,
585
+ "title": "Date_string",
586
+ "type": "paragraph"
587
+ }
588
+ }
589
+ }
590
+ }
591
+ },
592
+ {
593
+ "search": "Displays a period of time from start_date to end_date.When by itself start_date will act as dateif a start_date is not specified it will be set by the current date.if the end_date is anterior to start date date it will be used as the start_date. \n",
594
+ "files": {
595
+ "core/components/functional/date/date.md": {
596
+ "title": "Date",
597
+ "hashes": {
598
+ "start_date--end_date": {
599
+ "count": 1,
600
+ "title": "Start_date / end_date",
601
+ "type": "paragraph"
602
+ }
603
+ }
604
+ }
605
+ }
606
+ },
607
+ {
608
+ "search": "ISO 639-1 Language Codes\n",
609
+ "files": {
610
+ "core/components/functional/date/date.md": {
611
+ "title": "Date",
612
+ "hashes": {
613
+ "language": {
614
+ "count": 1,
615
+ "title": "Language",
616
+ "type": "paragraph"
617
+ }
618
+ }
619
+ }
620
+ }
621
+ },
622
+ {
623
+ "search": "For the list of supported timeZones, run Intl.supportedValuesOf('timeZone') in the console\n",
624
+ "files": {
625
+ "core/components/functional/date/date.md": {
626
+ "title": "Date",
627
+ "hashes": {
628
+ "time_zone": {
629
+ "count": 1,
630
+ "title": "Time_zone",
631
+ "type": "paragraph"
632
+ }
633
+ }
634
+ }
635
+ }
636
+ },
637
+ {
638
+ "search": "Deprecated\n",
639
+ "files": {
640
+ "core/components/functional/date/date.md": {
641
+ "title": "Date",
642
+ "hashes": {
643
+ "renderif": {
644
+ "count": 1,
645
+ "title": ".renderIf",
646
+ "type": "paragraph"
647
+ }
648
+ }
649
+ },
650
+ "core/components/functional/fetch/fetch.md": {
651
+ "title": "Fetch",
652
+ "hashes": {
653
+ "headersdataprovider": {
654
+ "count": 1,
655
+ "title": "HeadersDataProvider",
656
+ "type": "paragraph"
657
+ }
658
+ }
659
+ }
660
+ }
661
+ },
662
+ {
663
+ "search": "Fetch",
664
+ "files": {
665
+ "core/components/functional/fetch/fetch.md": {
666
+ "title": "Fetch",
667
+ "hashes": {
668
+ "fetch": {
669
+ "count": 1,
670
+ "title": "",
671
+ "type": "page"
672
+ }
673
+ }
674
+ }
675
+ }
676
+ },
677
+ {
678
+ "search": "New apps: prefer @get for a typed GET on a component, or List / Queue with fetch for collections. Use Local API demos (serviceURL="/docs-mock-api") to try examples offline.\n",
679
+ "files": {
680
+ "core/components/functional/fetch/fetch.md": {
681
+ "title": "Fetch",
682
+ "hashes": {
683
+ "fetch": {
684
+ "count": 1,
685
+ "title": "",
686
+ "type": "paragraph"
687
+ }
688
+ }
689
+ }
690
+ }
691
+ },
692
+ {
693
+ "search": "The sonic-fetch component requests and stores API data. It extends the Fetcher and Subscriber mixins.\n",
694
+ "files": {
695
+ "core/components/functional/fetch/fetch.md": {
696
+ "title": "Fetch",
697
+ "hashes": {
698
+ "fetch": {
699
+ "count": 1,
700
+ "title": "",
701
+ "type": "paragraph"
702
+ }
703
+ }
704
+ }
705
+ }
706
+ },
707
+ {
708
+ "search": "In order to work properly the sonic-fetch component needs at least the following attributes. \n",
709
+ "files": {
710
+ "core/components/functional/fetch/fetch.md": {
711
+ "title": "Fetch",
712
+ "hashes": {
713
+ "basic-usage": {
714
+ "count": 1,
715
+ "title": "Basic usage",
716
+ "type": "paragraph"
717
+ }
718
+ }
719
+ }
720
+ }
721
+ },
722
+ {
723
+ "search": "If no endPoint is specified it will be filled by the dataProvider ID instead \n",
724
+ "files": {
725
+ "core/components/functional/fetch/fetch.md": {
726
+ "title": "Fetch",
727
+ "hashes": {
728
+ "dataprovider-as-an-endpoint": {
729
+ "count": 1,
730
+ "title": "DataProvider as an endPoint",
731
+ "type": "paragraph"
732
+ }
733
+ }
734
+ }
735
+ }
736
+ },
737
+ {
738
+ "search": "When the key attribute is present, only a sub-part of the data received is injected into the dataProvider.\nWe can use the dot syntax to target what we want to keep.\n",
739
+ "files": {
740
+ "core/components/functional/fetch/fetch.md": {
741
+ "title": "Fetch",
742
+ "hashes": {
743
+ "key": {
744
+ "count": 1,
745
+ "title": "Key",
746
+ "type": "paragraph"
747
+ }
748
+ }
749
+ }
750
+ }
751
+ },
752
+ {
753
+ "search": "For example if the data is {my:{data:{a:1,b:2}}} and the key is key="my.data", the data available in the dataProvider will be {a:1 , b:2}\n",
754
+ "files": {
755
+ "core/components/functional/fetch/fetch.md": {
756
+ "title": "Fetch",
757
+ "hashes": {
758
+ "key": {
759
+ "count": 1,
760
+ "title": "Key",
761
+ "type": "paragraph"
762
+ }
763
+ }
764
+ }
765
+ }
766
+ },
767
+ {
768
+ "search": "if the mime type of the content returned by the service begins with text/, then the dataProvider has a key named "text" which contains the text returned by the service.\n",
769
+ "files": {
770
+ "core/components/functional/fetch/fetch.md": {
771
+ "title": "Fetch",
772
+ "hashes": {
773
+ "text-mode": {
774
+ "count": 1,
775
+ "title": "Text mode",
776
+ "type": "paragraph"
777
+ }
778
+ }
779
+ }
780
+ }
781
+ },
782
+ {
783
+ "search": "The noLoader attribute disables display of the default loader\n",
784
+ "files": {
785
+ "core/components/functional/fetch/fetch.md": {
786
+ "title": "Fetch",
787
+ "hashes": {
788
+ "noloader": {
789
+ "count": 1,
790
+ "title": "NoLoader",
791
+ "type": "paragraph"
792
+ }
793
+ }
794
+ }
795
+ }
796
+ },
797
+ {
798
+ "search": "if",
799
+ "files": {
800
+ "core/components/functional/if/if.md": {
801
+ "title": "if",
802
+ "hashes": {
803
+ "if": {
804
+ "count": 1,
805
+ "title": "",
806
+ "type": "page"
807
+ }
808
+ }
809
+ }
810
+ }
811
+ },
812
+ {
813
+ "search": "The sonic-if component shows its slot when .condition is true. In Lit, bind .condition from store-driven state (@subscribe on a formDataProvider field) — live preview and TypeScript source are the same file (docs-lit-demo):\n",
814
+ "files": {
815
+ "core/components/functional/if/if.md": {
816
+ "title": "if",
817
+ "hashes": {
818
+ "if": {
819
+ "count": 1,
820
+ "title": "",
821
+ "type": "paragraph"
822
+ }
823
+ }
824
+ }
825
+ }
826
+ },
827
+ {
828
+ "search": "Plain HTML without Lit: HTML integration.\n",
829
+ "files": {
830
+ "core/components/functional/if/if.md": {
831
+ "title": "if",
832
+ "hashes": {
833
+ "if": {
834
+ "count": 1,
835
+ "title": "",
836
+ "type": "paragraph"
837
+ }
838
+ }
839
+ }
840
+ }
841
+ },
842
+ {
843
+ "search": "Hugging Face infer",
844
+ "files": {
845
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
846
+ "title": "Hugging Face infer",
847
+ "hashes": {
848
+ "hugging-face-infer": {
849
+ "count": 1,
850
+ "title": "",
851
+ "type": "page"
852
+ }
853
+ }
854
+ }
855
+ }
856
+ },
857
+ {
858
+ "search": "sonic-hugging-face-infer: 1 input → Hugging Face model → 1 output (readonly), computed in the browser with Transformers.js. Data never leaves the device.\n",
859
+ "files": {
860
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
861
+ "title": "Hugging Face infer",
862
+ "hashes": {
863
+ "hugging-face-infer": {
864
+ "count": 1,
865
+ "title": "",
866
+ "type": "paragraph"
867
+ }
868
+ }
869
+ }
870
+ }
871
+ },
872
+ {
873
+ "search": "The name names the engine: other inference paths (server, browser AI, …) will get their own sonic-<engine>-infer, with the same attributes, states, and typed outputs.\n",
874
+ "files": {
875
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
876
+ "title": "Hugging Face infer",
877
+ "hashes": {
878
+ "hugging-face-infer": {
879
+ "count": 1,
880
+ "title": "",
881
+ "type": "paragraph"
882
+ }
883
+ }
884
+ }
885
+ }
886
+ },
887
+ {
888
+ "search": "Each demo stays idle until you click Try. The model downloads only after consent.\n",
889
+ "files": {
890
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
891
+ "title": "Hugging Face infer",
892
+ "hashes": {
893
+ "examples": {
894
+ "count": 1,
895
+ "title": "Examples",
896
+ "type": "paragraph"
897
+ }
898
+ }
899
+ }
900
+ }
901
+ },
902
+ {
903
+ "search": "Image + depth / shader chains: Visual stack.\n",
904
+ "files": {
905
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
906
+ "title": "Hugging Face infer",
907
+ "hashes": {
908
+ "text--zero-shot-classification": {
909
+ "count": 1,
910
+ "title": "Text — `zero-shot-classification`",
911
+ "type": "paragraph"
912
+ }
913
+ }
914
+ }
915
+ }
916
+ },
917
+ {
918
+ "search": "Same component, different allowlist alias. Common patterns:\n",
919
+ "files": {
920
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
921
+ "title": "Hugging Face infer",
922
+ "hashes": {
923
+ "other-tasks-markup": {
924
+ "count": 1,
925
+ "title": "Other tasks (markup)",
926
+ "type": "paragraph"
927
+ }
928
+ }
929
+ }
930
+ }
931
+ },
932
+ {
933
+ "search": "<!-- Translation FR → EN -->\n<sonic-hugging-face-infer\n model="fr-en"\n inputProvider="event.edito.description"\n outputProvider="event.edito.descriptionEn"\n load="consent"\n trigger="demand"\n triggerProvider="translateClick"\n></sonic-hugging-face-infer>\n",
934
+ "files": {
935
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
936
+ "title": "Hugging Face infer",
937
+ "hashes": {
938
+ "other-tasks-markup": {
939
+ "count": 1,
940
+ "title": "Other tasks (markup)",
941
+ "type": "paragraph"
942
+ }
943
+ }
944
+ }
945
+ }
946
+ },
947
+ {
948
+ "search": "<!-- Dictation (Whisper) -->\n<sonic-hugging-face-infer\n model="whisper-tiny"\n inputProvider="voice.clipUrl"\n outputProvider="voice.transcript"\n load="consent"\n></sonic-hugging-face-infer>\n \n\n",
949
+ "files": {
950
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
951
+ "title": "Hugging Face infer",
952
+ "hashes": {
953
+ "other-tasks-markup": {
954
+ "count": 1,
955
+ "title": "Other tasks (markup)",
956
+ "type": "paragraph"
957
+ }
958
+ }
959
+ }
960
+ }
961
+ },
962
+ {
963
+ "search": "Load concorde-hugging-face-infer.bundle.js after the core, then call ConcordeHF.configureHuggingFace(…) once. Details: CDN addons.\n",
964
+ "files": {
965
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
966
+ "title": "Hugging Face infer",
967
+ "hashes": {
968
+ "cdn-script--bootstrap": {
969
+ "count": 1,
970
+ "title": "CDN (script + bootstrap)",
971
+ "type": "paragraph"
972
+ }
973
+ }
974
+ }
975
+ }
976
+ },
977
+ {
978
+ "search": "The script checks that ONNX Runtime binaries are exactly those expected by Transformers.js. Serve the folder with Cache-Control: public, max-age=31536000, immutable: the path includes the version and never changes. To upgrade: new folder, regression tests, then change version / url in config. The previous version can stay served.\n",
979
+ "files": {
980
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
981
+ "title": "Hugging Face infer",
982
+ "hashes": {
983
+ "1-pin-and-host-the-runtime": {
984
+ "count": 1,
985
+ "title": "1. Pin and host the runtime",
986
+ "type": "paragraph"
987
+ }
988
+ }
989
+ }
990
+ }
991
+ },
992
+ {
993
+ "search": "The script prints size (sizeBytes) and license for you to verify.\n",
994
+ "files": {
995
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
996
+ "title": "Hugging Face infer",
997
+ "hashes": {
998
+ "2-host-models-pinned-revision": {
999
+ "count": 1,
1000
+ "title": "2. Host models (pinned revision)",
1001
+ "type": "paragraph"
1002
+ }
1003
+ }
1004
+ }
1005
+ }
1006
+ },
1007
+ {
1008
+ "search": "Three ways to supply the runtime (runtime.source):\n",
1009
+ "files": {
1010
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1011
+ "title": "Hugging Face infer",
1012
+ "hashes": {
1013
+ "3-configure-once-at-startup": {
1014
+ "count": 1,
1015
+ "title": "3. Configure (once, at startup)",
1016
+ "type": "paragraph"
1017
+ }
1018
+ }
1019
+ }
1020
+ }
1021
+ },
1022
+ {
1023
+ "search": "<!-- Catalog: runs when the browser is idle, cached in IndexedDB -->\n<sonic-hugging-face-infer\n model="multilingual-mini"\n inputProvider="events"\n outputProvider="search.vectors"\n options='{"text":"label + edito.sub_title + categories.title"}'\n load="idle"\n persistResults\n></sonic-hugging-face-infer>\n",
1024
+ "files": {
1025
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1026
+ "title": "Hugging Face infer",
1027
+ "hashes": {
1028
+ "markup": {
1029
+ "count": 1,
1030
+ "title": "Markup",
1031
+ "type": "paragraph"
1032
+ }
1033
+ }
1034
+ }
1035
+ }
1036
+ },
1037
+ {
1038
+ "search": "<!-- Query: on each keystroke (300 ms debounce) -->\n<sonic-hugging-face-infer\n model="multilingual-mini"\n inputProvider="searchForm.q"\n outputProvider="search.query"\n statusProvider="searchAiStatus"\n debounce="300"\n></sonic-hugging-face-infer>\n \n\n",
1039
+ "files": {
1040
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1041
+ "title": "Hugging Face infer",
1042
+ "hashes": {
1043
+ "markup": {
1044
+ "count": 1,
1045
+ "title": "Markup",
1046
+ "type": "paragraph"
1047
+ }
1048
+ }
1049
+ }
1050
+ }
1051
+ },
1052
+ {
1053
+ "search": "Ranking combines several inputs (events, vectors, query). With the TypeScript API:\n",
1054
+ "files": {
1055
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1056
+ "title": "Hugging Face infer",
1057
+ "hashes": {
1058
+ "markup": {
1059
+ "count": 1,
1060
+ "title": "Markup",
1061
+ "type": "paragraph"
1062
+ }
1063
+ }
1064
+ }
1065
+ }
1066
+ },
1067
+ {
1068
+ "search": "On the JSONata side, $cosine(a, b) and $rankBySimilarity(items, vectors, query, topN?, minScore?) are available in sonic-jsonata (one input: group data under the same DataProvider).\n",
1069
+ "files": {
1070
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1071
+ "title": "Hugging Face infer",
1072
+ "hashes": {
1073
+ "markup": {
1074
+ "count": 1,
1075
+ "title": "Markup",
1076
+ "type": "paragraph"
1077
+ }
1078
+ }
1079
+ }
1080
+ }
1081
+ },
1082
+ {
1083
+ "search": "Methods: run(), loadModel(), accept(), decline().\n",
1084
+ "files": {
1085
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1086
+ "title": "Hugging Face infer",
1087
+ "hashes": {
1088
+ "attributes": {
1089
+ "count": 1,
1090
+ "title": "Attributes",
1091
+ "type": "paragraph"
1092
+ }
1093
+ }
1094
+ }
1095
+ }
1096
+ },
1097
+ {
1098
+ "search": "Guards, regardless of policy: switch to consent on data-saver, slow network (2G), or when the model exceeds consentAboveMB. A cached model loads without prompting. Choice is stored per alias and revision (hf.revokeConsent(alias) to clear). Nothing downloads while the input is empty.\n",
1099
+ "files": {
1100
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1101
+ "title": "Hugging Face infer",
1102
+ "hashes": {
1103
+ "model-loading": {
1104
+ "count": 1,
1105
+ "title": "Model loading",
1106
+ "type": "paragraph"
1107
+ }
1108
+ }
1109
+ }
1110
+ }
1111
+ },
1112
+ {
1113
+ "search": "Consent without JavaScript (SDUI):\n",
1114
+ "files": {
1115
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1116
+ "title": "Hugging Face infer",
1117
+ "hashes": {
1118
+ "model-loading": {
1119
+ "count": 1,
1120
+ "title": "Model loading",
1121
+ "type": "paragraph"
1122
+ }
1123
+ }
1124
+ }
1125
+ }
1126
+ },
1127
+ {
1128
+ "search": "{outputProvider root}/_state_ → { status } (loading | ready | error | empty), like sonic-jsonata, for sonic-states.\n",
1129
+ "files": {
1130
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1131
+ "title": "Hugging Face infer",
1132
+ "hashes": {
1133
+ "states": {
1134
+ "count": 1,
1135
+ "title": "States",
1136
+ "type": "paragraph"
1137
+ }
1138
+ }
1139
+ }
1140
+ }
1141
+ },
1142
+ {
1143
+ "search": "Detailed status on statusProvider:\n",
1144
+ "files": {
1145
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1146
+ "title": "Hugging Face infer",
1147
+ "hashes": {
1148
+ "states": {
1149
+ "count": 1,
1150
+ "title": "States",
1151
+ "type": "paragraph"
1152
+ }
1153
+ }
1154
+ }
1155
+ }
1156
+ },
1157
+ {
1158
+ "search": "ONNX Runtime is a WASM binary in every case (≈ 27 MB, ≈ 6.6 MB compressed for 1.31), including WebGPU: it downloads with the first model from your CDN, then is cached. It is not part of the component.\n",
1159
+ "files": {
1160
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1161
+ "title": "Hugging Face infer",
1162
+ "hashes": {
1163
+ "webgpu-and-wasm": {
1164
+ "count": 1,
1165
+ "title": "WebGPU and WASM",
1166
+ "type": "paragraph"
1167
+ }
1168
+ }
1169
+ }
1170
+ }
1171
+ },
1172
+ {
1173
+ "search": "What you control: CPU (WASM) execution when WebGPU is missing. Allowed per model (devices) and only under allowWasmUpToMB. Beyond that → unsupported; the page keeps working without the model.\n",
1174
+ "files": {
1175
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1176
+ "title": "Hugging Face infer",
1177
+ "hashes": {
1178
+ "webgpu-and-wasm": {
1179
+ "count": 1,
1180
+ "title": "WebGPU and WASM",
1181
+ "type": "paragraph"
1182
+ }
1183
+ }
1184
+ }
1185
+ }
1186
+ },
1187
+ {
1188
+ "search": "configureHuggingFace returns an API typed by the allowlist:\n",
1189
+ "files": {
1190
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1191
+ "title": "Hugging Face infer",
1192
+ "hashes": {
1193
+ "typescript": {
1194
+ "count": 1,
1195
+ "title": "TypeScript",
1196
+ "type": "paragraph"
1197
+ }
1198
+ }
1199
+ }
1200
+ }
1201
+ },
1202
+ {
1203
+ "search": "Cleanup: hf.clearModel(alias), hf.clearAll() (models, WASM, and results).\n",
1204
+ "files": {
1205
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1206
+ "title": "Hugging Face infer",
1207
+ "hashes": {
1208
+ "typescript": {
1209
+ "count": 1,
1210
+ "title": "TypeScript",
1211
+ "type": "paragraph"
1212
+ }
1213
+ }
1214
+ }
1215
+ }
1216
+ },
1217
+ {
1218
+ "search": "Supported tasks: feature-extraction, text-classification, zero-shot-classification, translation, token-classification, fill-mask, question-answering, image-classification, zero-shot-image-classification, object-detection, zero-shot-object-detection, image-feature-extraction, image-segmentation, depth-estimation, background-removal, image-to-text, audio-classification, automatic-speech-recognition. No free-form LLM (text-generation, etc.).\n",
1219
+ "files": {
1220
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1221
+ "title": "Hugging Face infer",
1222
+ "hashes": {
1223
+ "tasks-and-light-models": {
1224
+ "count": 1,
1225
+ "title": "Tasks and light models",
1226
+ "type": "paragraph"
1227
+ }
1228
+ }
1229
+ }
1230
+ }
1231
+ },
1232
+ {
1233
+ "search": "Indicative sizes (quantized); verify with hf-vendor.mjs before allowlisting, including license:\n",
1234
+ "files": {
1235
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1236
+ "title": "Hugging Face infer",
1237
+ "hashes": {
1238
+ "tasks-and-light-models": {
1239
+ "count": 1,
1240
+ "title": "Tasks and light models",
1241
+ "type": "paragraph"
1242
+ }
1243
+ }
1244
+ }
1245
+ }
1246
+ },
1247
+ {
1248
+ "search": "Produced images (cutout, depth, segmentation) come out as { width, height, channels, blob, url } (PNG). url is an ObjectURL attached on the main thread at publish time — chainable into sonic-shader / sonic-jsonata ($mediaUrl) without app glue. Images are not stored in IndexedDB.\n",
1249
+ "files": {
1250
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1251
+ "title": "Hugging Face infer",
1252
+ "hashes": {
1253
+ "tasks-and-light-models": {
1254
+ "count": 1,
1255
+ "title": "Tasks and light models",
1256
+ "type": "paragraph"
1257
+ }
1258
+ }
1259
+ }
1260
+ }
1261
+ },
1262
+ {
1263
+ "search": "End-to-end (depth + shader / Harris) : Visual stack.\n",
1264
+ "files": {
1265
+ "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1266
+ "title": "Hugging Face infer",
1267
+ "hashes": {
1268
+ "tasks-and-light-models": {
1269
+ "count": 1,
1270
+ "title": "Tasks and light models",
1271
+ "type": "paragraph"
1272
+ }
1273
+ }
1274
+ }
1275
+ }
1276
+ },
1277
+ {
1278
+ "search": "Jsonata",
1279
+ "files": {
1280
+ "core/components/functional/jsonata/jsonata.md": {
1281
+ "title": "Jsonata",
1282
+ "hashes": {
1283
+ "jsonata": {
1284
+ "count": 1,
1285
+ "title": "",
1286
+ "type": "page"
1287
+ }
1288
+ }
1289
+ }
1290
+ }
1291
+ },
1292
+ {
1293
+ "search": "sonic-jsonata : 1 input → expression → 1 output (readonly).\n",
1294
+ "files": {
1295
+ "core/components/functional/jsonata/jsonata.md": {
1296
+ "title": "Jsonata",
1297
+ "hashes": {
1298
+ "jsonata": {
1299
+ "count": 1,
1300
+ "title": "",
1301
+ "type": "paragraph"
1302
+ }
1303
+ }
1304
+ }
1305
+ }
1306
+ },
1307
+ {
1308
+ "search": "Unidirectional (fetch → compute → display), unlike sonic-mix.\n",
1309
+ "files": {
1310
+ "core/components/functional/jsonata/jsonata.md": {
1311
+ "title": "Jsonata",
1312
+ "hashes": {
1313
+ "jsonata": {
1314
+ "count": 1,
1315
+ "title": "",
1316
+ "type": "paragraph"
1317
+ }
1318
+ }
1319
+ }
1320
+ }
1321
+ },
1322
+ {
1323
+ "search": "Offline : serviceURL="/docs-mock-api" — Local API demos.\n",
1324
+ "files": {
1325
+ "core/components/functional/jsonata/jsonata.md": {
1326
+ "title": "Jsonata",
1327
+ "hashes": {
1328
+ "jsonata": {
1329
+ "count": 1,
1330
+ "title": "",
1331
+ "type": "paragraph"
1332
+ }
1333
+ }
1334
+ }
1335
+ }
1336
+ },
1337
+ {
1338
+ "search": "Change Top N → recalcul sans refetch.\n",
1339
+ "files": {
1340
+ "core/components/functional/jsonata/jsonata.md": {
1341
+ "title": "Jsonata",
1342
+ "hashes": {
1343
+ "groupby--top-n": {
1344
+ "count": 1,
1345
+ "title": "Groupby + top N",
1346
+ "type": "paragraph"
1347
+ }
1348
+ }
1349
+ }
1350
+ }
1351
+ },
1352
+ {
1353
+ "search": "Change Tax % → même idée.\n",
1354
+ "files": {
1355
+ "core/components/functional/jsonata/jsonata.md": {
1356
+ "title": "Jsonata",
1357
+ "hashes": {
1358
+ "totaux-somme--taxe": {
1359
+ "count": 1,
1360
+ "title": "Totaux (somme + taxe)",
1361
+ "type": "paragraph"
1362
+ }
1363
+ }
1364
+ }
1365
+ }
1366
+ },
1367
+ {
1368
+ "search": "$ucFirst · $currency · $percent · $date · $toChart(items, labelKey, valueKey, datasetLabel?) · $cosine · $rankBySimilarity · $mediaUrl(x) (string | {url} | {blobUrl})\n",
1369
+ "files": {
1370
+ "core/components/functional/jsonata/jsonata.md": {
1371
+ "title": "Jsonata",
1372
+ "hashes": {
1373
+ "helpers": {
1374
+ "count": 1,
1375
+ "title": "Helpers",
1376
+ "type": "paragraph"
1377
+ }
1378
+ }
1379
+ }
1380
+ }
1381
+ },
1382
+ {
1383
+ "search": "Pas de DOM, pas de réseau, pas d’eval. $mediaUrl ne crée pas d’ObjectURL (les producteurs HF / extract publient déjà url).\n",
1384
+ "files": {
1385
+ "core/components/functional/jsonata/jsonata.md": {
1386
+ "title": "Jsonata",
1387
+ "hashes": {
1388
+ "helpers": {
1389
+ "count": 1,
1390
+ "title": "Helpers",
1391
+ "type": "paragraph"
1392
+ }
1393
+ }
1394
+ }
1395
+ }
1396
+ },
1397
+ {
1398
+ "search": "Pour du multi-entrées ou une fonction TS : primitive derive.\n",
1399
+ "files": {
1400
+ "core/components/functional/jsonata/jsonata.md": {
1401
+ "title": "Jsonata",
1402
+ "hashes": {
1403
+ "markup": {
1404
+ "count": 1,
1405
+ "title": "Markup",
1406
+ "type": "paragraph"
1407
+ }
1408
+ }
1409
+ }
1410
+ }
1411
+ },
1412
+ {
1413
+ "search": "Visual stack (3d → HF → jsonata → shader): Visual stack.\n",
1414
+ "files": {
1415
+ "core/components/functional/jsonata/jsonata.md": {
1416
+ "title": "Jsonata",
1417
+ "hashes": {
1418
+ "markup": {
1419
+ "count": 1,
1420
+ "title": "Markup",
1421
+ "type": "paragraph"
1422
+ }
1423
+ }
1424
+ }
1425
+ }
1426
+ },
1427
+ {
1428
+ "search": "{output}/_state_ → { status, error? } (loading | ready | error | empty). Brancher avec sonic-states.\n",
1429
+ "files": {
1430
+ "core/components/functional/jsonata/jsonata.md": {
1431
+ "title": "Jsonata",
1432
+ "hashes": {
1433
+ "states": {
1434
+ "count": 1,
1435
+ "title": "States",
1436
+ "type": "paragraph"
1437
+ }
1438
+ }
1439
+ }
1440
+ }
1441
+ },
1442
+ {
1443
+ "search": "List",
1444
+ "files": {
1445
+ "core/components/functional/list/list.md": {
1446
+ "title": "List",
1447
+ "hashes": {
1448
+ "list": {
1449
+ "count": 1,
1450
+ "title": "",
1451
+ "type": "page"
1452
+ }
1453
+ }
1454
+ }
1455
+ }
1456
+ },
1457
+ {
1458
+ "search": "Try offline: serviceURL="/docs-mock-api" and dataProvider="api/users" with key="data" — see Local API demos. Recommended patterns: Data flow.\n",
1459
+ "files": {
1460
+ "core/components/functional/list/list.md": {
1461
+ "title": "List",
1462
+ "hashes": {
1463
+ "list": {
1464
+ "count": 1,
1465
+ "title": "",
1466
+ "type": "paragraph"
1467
+ }
1468
+ }
1469
+ }
1470
+ }
1471
+ },
1472
+ {
1473
+ "search": "The sonic-list component renders one row per entry in props (array from fetch or set on the element).\n",
1474
+ "files": {
1475
+ "core/components/functional/list/list.md": {
1476
+ "title": "List",
1477
+ "hashes": {
1478
+ "list": {
1479
+ "count": 1,
1480
+ "title": "",
1481
+ "type": "paragraph"
1482
+ }
1483
+ }
1484
+ }
1485
+ }
1486
+ },
1487
+ {
1488
+ "search": "List extends Subscriber and Fetcher:\n",
1489
+ "files": {
1490
+ "core/components/functional/list/list.md": {
1491
+ "title": "List",
1492
+ "hashes": {
1493
+ "list": {
1494
+ "count": 1,
1495
+ "title": "",
1496
+ "type": "paragraph"
1497
+ }
1498
+ }
1499
+ }
1500
+ }
1501
+ },
1502
+ {
1503
+ "search": "From a Lit parent, pass a function on the items property (ListItems). Each row is wrapped in a sonic-subscriber with dataProvider="…/list-item/n" (hover rows with debug).\n",
1504
+ "files": {
1505
+ "core/components/functional/list/list.md": {
1506
+ "title": "List",
1507
+ "hashes": {
1508
+ "row-renderer-items--recommended": {
1509
+ "count": 1,
1510
+ "title": "Row renderer (`items`) — recommended",
1511
+ "type": "paragraph"
1512
+ }
1513
+ }
1514
+ }
1515
+ }
1516
+ },
1517
+ {
1518
+ "search": "Use .items=${fn} (property binding): Lit passes functions only as properties, not as HTML attributes — @property({ type: Function }) does not change that. Same for .noItems, .separator, .skeleton. The callback receives each row object (replacing data-bind / <sonic-value> in a <template>).\n",
1519
+ "files": {
1520
+ "core/components/functional/list/list.md": {
1521
+ "title": "List",
1522
+ "hashes": {
1523
+ "row-renderer-items--recommended": {
1524
+ "count": 1,
1525
+ "title": "Row renderer (`items`) — recommended",
1526
+ "type": "paragraph"
1527
+ }
1528
+ }
1529
+ }
1530
+ }
1531
+ },
1532
+ {
1533
+ "search": "Live demo + TypeScript source (one file, no Markdown copy):\n",
1534
+ "files": {
1535
+ "core/components/functional/list/list.md": {
1536
+ "title": "List",
1537
+ "hashes": {
1538
+ "row-renderer-items--recommended": {
1539
+ "count": 1,
1540
+ "title": "Row renderer (`items`) — recommended",
1541
+ "type": "paragraph"
1542
+ }
1543
+ }
1544
+ }
1545
+ }
1546
+ },
1547
+ {
1548
+ "search": "Implementation: src/docs/example/docs-users-list.ts — row markup in the items callback (item.first_name, …), same idea as replacing data-bind / <sonic-value> in a <template>.\n",
1549
+ "files": {
1550
+ "core/components/functional/list/list.md": {
1551
+ "title": "List",
1552
+ "hashes": {
1553
+ "row-renderer-items--recommended": {
1554
+ "count": 1,
1555
+ "title": "Row renderer (`items`) — recommended",
1556
+ "type": "paragraph"
1557
+ }
1558
+ }
1559
+ }
1560
+ }
1561
+ },
1562
+ {
1563
+ "search": "Use metadata (even, odd, firstChild, …) or fields on each item (e.g. tpl with templateKey):\n",
1564
+ "files": {
1565
+ "core/components/functional/list/list.md": {
1566
+ "title": "List",
1567
+ "hashes": {
1568
+ "alternating-row-layouts": {
464
1569
  "count": 1,
465
- "title": "Example of use — language filter + queue",
1570
+ "title": "Alternating row layouts",
466
1571
  "type": "paragraph"
467
1572
  }
468
1573
  }
469
- },
470
- "core/components/ui/form/switch/switch.md": {
471
- "title": "Switch",
1574
+ }
1575
+ }
1576
+ },
1577
+ {
1578
+ "search": "For plain HTML hosts, you can still declare <template> children (and data-value for templateKey, separator, no-item). That path is for HTML integration — not used in Concorde doc live demos.\n",
1579
+ "files": {
1580
+ "core/components/functional/list/list.md": {
1581
+ "title": "List",
472
1582
  "hashes": {
473
- "example-of-use--blacklist--queue": {
1583
+ "html-template-children-integration-without-lit": {
474
1584
  "count": 1,
475
- "title": "Example of use — blacklist + queue",
1585
+ "title": "HTML `<template>` children (integration without Lit)",
476
1586
  "type": "paragraph"
477
1587
  }
478
1588
  }
479
- },
480
- "core/components/ui/icon/icon.md": {
481
- "title": "Icon",
1589
+ }
1590
+ }
1591
+ },
1592
+ {
1593
+ "search": "Each list row still gets dataProvider=&quot;[list]/list-item/[index]&quot;.\n",
1594
+ "files": {
1595
+ "core/components/functional/list/list.md": {
1596
+ "title": "List",
482
1597
  "hashes": {
483
- "custom": {
1598
+ "html-template-children-integration-without-lit": {
484
1599
  "count": 1,
485
- "title": "Custom",
1600
+ "title": "HTML `<template>` children (integration without Lit)",
486
1601
  "type": "paragraph"
487
1602
  }
488
1603
  }
489
- },
490
- "core/components/ui/loader/loader.md": {
491
- "title": "Loader",
1604
+ }
1605
+ }
1606
+ },
1607
+ {
1608
+ "search": "Mix",
1609
+ "files": {
1610
+ "core/components/functional/mix/mix.md": {
1611
+ "title": "Mix",
492
1612
  "hashes": {
493
- "fixed-mode": {
1613
+ "mix": {
494
1614
  "count": 1,
495
- "title": "Fixed mode",
496
- "type": "paragraph"
1615
+ "title": "",
1616
+ "type": "page"
497
1617
  }
498
1618
  }
499
- },
500
- "docs/_misc/api-configuration.md": {
501
- "title": "API configuration",
1619
+ }
1620
+ }
1621
+ },
1622
+ {
1623
+ "search": "Mix allows you to mix several subsets of dataProvider in a new key/value structure which is itself associated with a new dataProvider. The data update is then bidirectional.\n",
1624
+ "files": {
1625
+ "core/components/functional/mix/mix.md": {
1626
+ "title": "Mix",
502
1627
  "hashes": {
503
- "bearer-token-static": {
504
- "count": 1,
505
- "title": "Bearer token (static)",
506
- "type": "paragraph"
507
- },
508
- "tokenprovider--basic-auth": {
509
- "count": 1,
510
- "title": "tokenProvider + Basic auth",
511
- "type": "paragraph"
512
- },
513
- "http-498--stale-token-refresh": {
514
- "count": 1,
515
- "title": "HTTP 498 — stale token refresh",
516
- "type": "paragraph"
517
- },
518
- "eventsapitoken": {
519
- "count": 1,
520
- "title": "eventsApiToken",
521
- "type": "paragraph"
522
- },
523
- "wording-api": {
524
- "count": 1,
525
- "title": "Wording API",
526
- "type": "paragraph"
527
- },
528
- "scoped-attributes-html--sonic-scope": {
1628
+ "mix": {
529
1629
  "count": 1,
530
- "title": "Scoped attributes (HTML / sonic-scope)",
1630
+ "title": "",
531
1631
  "type": "paragraph"
532
1632
  }
533
1633
  }
@@ -535,12 +1635,12 @@
535
1635
  }
536
1636
  },
537
1637
  {
538
- "search": "Plain HTML without Lit: HTML integration.\n",
1638
+ "search": "Dot notation is supported to extract a sub-part of the data.\n",
539
1639
  "files": {
540
- "core/components/functional/if/if.md": {
541
- "title": "if",
1640
+ "core/components/functional/mix/mix.md": {
1641
+ "title": "Mix",
542
1642
  "hashes": {
543
- "if": {
1643
+ "mix": {
544
1644
  "count": 1,
545
1645
  "title": "",
546
1646
  "type": "paragraph"
@@ -550,42 +1650,42 @@
550
1650
  }
551
1651
  },
552
1652
  {
553
- "search": "Jsonata",
1653
+ "search": "For example, if we declare dataproviders as follows :\n\nWe can rearrange the data as follows\n\nThen we can change values in both dataProviders programaticaly this way, they will stay in sync\n\nOr by using a form element\n\n",
554
1654
  "files": {
555
- "core/components/functional/jsonata/jsonata.md": {
556
- "title": "Jsonata",
1655
+ "core/components/functional/mix/mix.md": {
1656
+ "title": "Mix",
557
1657
  "hashes": {
558
- "jsonata": {
1658
+ "mix": {
559
1659
  "count": 1,
560
1660
  "title": "",
561
- "type": "page"
1661
+ "type": "paragraph"
562
1662
  }
563
1663
  }
564
1664
  }
565
1665
  }
566
1666
  },
567
1667
  {
568
- "search": "sonic-jsonata adapts the derive primitive: it watches input DataProviders (and optional form variables), evaluates a JSONata expression, and publishes a read-only output DataProvider.\n",
1668
+ "search": "Queue",
569
1669
  "files": {
570
- "core/components/functional/jsonata/jsonata.md": {
571
- "title": "Jsonata",
1670
+ "core/components/functional/queue/queue.md": {
1671
+ "title": "Queue",
572
1672
  "hashes": {
573
- "jsonata": {
1673
+ "queue": {
574
1674
  "count": 1,
575
1675
  "title": "",
576
- "type": "paragraph"
1676
+ "type": "page"
577
1677
  }
578
1678
  }
579
1679
  }
580
1680
  }
581
1681
  },
582
1682
  {
583
- "search": "Unlike sonic-mix (bidirectional composition, no compute), sonic-jsonata is unidirectional (fetch → compute → display).\n",
1683
+ "search": "Try offline: serviceURL=&quot;/docs-mock-api&quot; — see Local API demos. Row rendering: Data flow (.items property binding).\n",
584
1684
  "files": {
585
- "core/components/functional/jsonata/jsonata.md": {
586
- "title": "Jsonata",
1685
+ "core/components/functional/queue/queue.md": {
1686
+ "title": "Queue",
587
1687
  "hashes": {
588
- "jsonata": {
1688
+ "queue": {
589
1689
  "count": 1,
590
1690
  "title": "",
591
1691
  "type": "paragraph"
@@ -595,14 +1695,14 @@
595
1695
  }
596
1696
  },
597
1697
  {
598
- "search": "Seed sessions via mock API or imperative set, then:\n",
1698
+ "search": "sonic-queue loads data in batches. Each batch is an internal List with its own dataProvider (…/list-item/0, …/1, …).\n",
599
1699
  "files": {
600
- "core/components/functional/jsonata/jsonata.md": {
601
- "title": "Jsonata",
1700
+ "core/components/functional/queue/queue.md": {
1701
+ "title": "Queue",
602
1702
  "hashes": {
603
- "sdui-example-palmarès": {
1703
+ "queue": {
604
1704
  "count": 1,
605
- "title": "SDUI example (palmarès)",
1705
+ "title": "",
606
1706
  "type": "paragraph"
607
1707
  }
608
1708
  }
@@ -610,14 +1710,14 @@
610
1710
  }
611
1711
  },
612
1712
  {
613
- "search": "No DOM, no network, no eval.\n",
1713
+ "search": "When the expression contains $offset and $limit, the queue:\n",
614
1714
  "files": {
615
- "core/components/functional/jsonata/jsonata.md": {
616
- "title": "Jsonata",
1715
+ "core/components/functional/queue/queue.md": {
1716
+ "title": "Queue",
617
1717
  "hashes": {
618
- "helpers-whitelist": {
1718
+ "lazy-load--offset-and-limit": {
619
1719
  "count": 1,
620
- "title": "Helpers (whitelist)",
1720
+ "title": "Lazy load — `$offset` and `$limit`",
621
1721
  "type": "paragraph"
622
1722
  }
623
1723
  }
@@ -625,14 +1725,14 @@
625
1725
  }
626
1726
  },
627
1727
  {
628
- "search": "type Session = { edito: { title: string }; stock: { internal: { revenue: number } } };\ntype Row = { titre: string; ca: number };\n",
1728
+ "search": "The doc mock implements this on GET /docs-mock-api/api/users?offset=…&amp;per_page=… (paginateUsers in src/docs/mock-api/router.ts).\n",
629
1729
  "files": {
630
- "core/components/functional/jsonata/jsonata.md": {
631
- "title": "Jsonata",
1730
+ "core/components/functional/queue/queue.md": {
1731
+ "title": "Queue",
632
1732
  "hashes": {
633
- "typescript--derive--dataproviderkey": {
1733
+ "lazy-load--offset-and-limit": {
634
1734
  "count": 1,
635
- "title": "TypeScript — `derive` + `DataProviderKey`",
1735
+ "title": "Lazy load — `$offset` and `$limit`",
636
1736
  "type": "paragraph"
637
1737
  }
638
1738
  }
@@ -640,14 +1740,14 @@
640
1740
  }
641
1741
  },
642
1742
  {
643
- "search": "const sessions = new DataProviderKey&lt;Session[]&gt;(&quot;sessions&quot;);\nconst form = new DataProviderKey&lt;{ top: number }&gt;(&quot;lbForm&quot;);\nconst palmares = new DataProviderKey&lt;Row[]&gt;(&quot;palmares&quot;);\n",
1743
+ "search": "Wrap the queue in a fixed height with overflow-y-auto so lazy load triggers when scrolling inside the box (same layout as the TS starter demo-queue-templates).\n",
644
1744
  "files": {
645
- "core/components/functional/jsonata/jsonata.md": {
646
- "title": "Jsonata",
1745
+ "core/components/functional/queue/queue.md": {
1746
+ "title": "Queue",
647
1747
  "hashes": {
648
- "typescript--derive--dataproviderkey": {
1748
+ "lazy-load--offset-and-limit": {
649
1749
  "count": 1,
650
- "title": "TypeScript — `derive` + `DataProviderKey`",
1750
+ "title": "Lazy load — `$offset` and `$limit`",
651
1751
  "type": "paragraph"
652
1752
  }
653
1753
  }
@@ -655,14 +1755,14 @@
655
1755
  }
656
1756
  },
657
1757
  {
658
- "search": "const handle = derive({\n inputs: { s: sessions },\n variables: form,\n output: palmares,\n compute: async (i, v) =&gt; {\n const expr = compileJsonata(\n &#39;$s{edito.title: $sum(stock.internal.revenue)} ~&gt; $each(function($v,$k){{&quot;titre&quot;:$k,&quot;ca&quot;:$v}}) ^(&gt;ca)[[0..$number($top)-1]]&#39;,\n );\n return expr.evaluate({}, { ...i, ...v }) as Row[];\n },\n});\n// handle.stop() on disconnect\n \n\n",
1758
+ "search": "Try scrolling after load — batches of 4 users. Search e.g. George, Bluth, or zzz for empty results.\n",
659
1759
  "files": {
660
- "core/components/functional/jsonata/jsonata.md": {
661
- "title": "Jsonata",
1760
+ "core/components/functional/queue/queue.md": {
1761
+ "title": "Queue",
662
1762
  "hashes": {
663
- "typescript--derive--dataproviderkey": {
1763
+ "lazy-load--offset-and-limit": {
664
1764
  "count": 1,
665
- "title": "TypeScript — `derive` + `DataProviderKey`",
1765
+ "title": "Lazy load — `$offset` and `$limit`",
666
1766
  "type": "paragraph"
667
1767
  }
668
1768
  }
@@ -670,14 +1770,14 @@
670
1770
  }
671
1771
  },
672
1772
  {
673
- "search": "Compile-safe: pass DataProviderKey&amp;lt;T&amp;gt; — not bare untyped strings — for TS callers.\n",
1773
+ "search": "Without $offset in the expression, the queue behaves like a single list (one batch), e.g. geo communes below.\n",
674
1774
  "files": {
675
- "core/components/functional/jsonata/jsonata.md": {
676
- "title": "Jsonata",
1775
+ "core/components/functional/queue/queue.md": {
1776
+ "title": "Queue",
677
1777
  "hashes": {
678
- "typescript--derive--dataproviderkey": {
1778
+ "expression-example": {
679
1779
  "count": 1,
680
- "title": "TypeScript — `derive` + `DataProviderKey`",
1780
+ "title": "Expression example",
681
1781
  "type": "paragraph"
682
1782
  }
683
1783
  }
@@ -685,14 +1785,14 @@
685
1785
  }
686
1786
  },
687
1787
  {
688
- "search": "Status is published on {outputRoot}/_state_ as { status, error? } with status ∈ loading | ready | error | empty. Wire sonic-states with dataProvider=&quot;palmares/_state_&quot; and data-path=&quot;status&quot;.\n",
1788
+ "search": "One search field (name=&quot;q&quot;) on formDataProvider=&quot;filter&quot;. The queue listens via dataFilterProvider=&quot;filter&quot; and, on change:\n",
689
1789
  "files": {
690
- "core/components/functional/jsonata/jsonata.md": {
691
- "title": "Jsonata",
1790
+ "core/components/functional/queue/queue.md": {
1791
+ "title": "Queue",
692
1792
  "hashes": {
693
- "states": {
1793
+ "filter--datafilterprovider--q": {
694
1794
  "count": 1,
695
- "title": "States",
1795
+ "title": "Filter — `dataFilterProvider` + `q`",
696
1796
  "type": "paragraph"
697
1797
  }
698
1798
  }
@@ -700,14 +1800,14 @@
700
1800
  }
701
1801
  },
702
1802
  {
703
- "search": "See the live demo embedded below (fixtures demo14).\n",
1803
+ "search": "Use filteredFields only when the form has extra fields that must not be sent to the API (e.g. filteredFields=&quot;rememberMe internalId&quot;).\n",
704
1804
  "files": {
705
- "core/components/functional/jsonata/jsonata.md": {
706
- "title": "Jsonata",
1805
+ "core/components/functional/queue/queue.md": {
1806
+ "title": "Queue",
707
1807
  "hashes": {
708
- "demo-widget": {
1808
+ "filter--datafilterprovider--q": {
709
1809
  "count": 1,
710
- "title": "Demo widget",
1810
+ "title": "Filter — `dataFilterProvider` + `q`",
711
1811
  "type": "paragraph"
712
1812
  }
713
1813
  }
@@ -715,29 +1815,29 @@
715
1815
  }
716
1816
  },
717
1817
  {
718
- "search": "List",
1818
+ "search": "The mock API filters before pagination — same haystack logic as the starter (filterDocsUsers in src/docs/mock-api/fixtures.ts, used by paginateUsers in router.ts / Service Worker):\n",
719
1819
  "files": {
720
- "core/components/functional/list/list.md": {
721
- "title": "List",
1820
+ "core/components/functional/queue/queue.md": {
1821
+ "title": "Queue",
722
1822
  "hashes": {
723
- "list": {
1823
+ "filter--datafilterprovider--q": {
724
1824
  "count": 1,
725
- "title": "",
726
- "type": "page"
1825
+ "title": "Filter — `dataFilterProvider` + `q`",
1826
+ "type": "paragraph"
727
1827
  }
728
1828
  }
729
1829
  }
730
1830
  }
731
1831
  },
732
1832
  {
733
- "search": "Try offline: serviceURL=&quot;/docs-mock-api&quot; and dataProvider=&quot;api/users&quot; with key=&quot;data&quot; — see Local API demos. Recommended patterns: Data flow.\n",
1833
+ "search": "Geo communes: expression uses $limit only (no $offset) — one request, one batch.\n",
734
1834
  "files": {
735
- "core/components/functional/list/list.md": {
736
- "title": "List",
1835
+ "core/components/functional/queue/queue.md": {
1836
+ "title": "Queue",
737
1837
  "hashes": {
738
- "list": {
1838
+ "simple-batch-no-lazy-scroll": {
739
1839
  "count": 1,
740
- "title": "",
1840
+ "title": "Simple batch (no lazy scroll)",
741
1841
  "type": "paragraph"
742
1842
  }
743
1843
  }
@@ -745,14 +1845,14 @@
745
1845
  }
746
1846
  },
747
1847
  {
748
- "search": "The sonic-list component renders one row per entry in props (array from fetch or set on the element).\n",
1848
+ "search": "Optional for hosts without Lit — see HTML integration.\n",
749
1849
  "files": {
750
- "core/components/functional/list/list.md": {
751
- "title": "List",
1850
+ "core/components/functional/queue/queue.md": {
1851
+ "title": "Queue",
752
1852
  "hashes": {
753
- "list": {
1853
+ "html-template-children": {
754
1854
  "count": 1,
755
- "title": "",
1855
+ "title": "HTML `<template>` children",
756
1856
  "type": "paragraph"
757
1857
  }
758
1858
  }
@@ -760,29 +1860,29 @@
760
1860
  }
761
1861
  },
762
1862
  {
763
- "search": "List extends Subscriber and Fetcher:\n",
1863
+ "search": "Router",
764
1864
  "files": {
765
- "core/components/functional/list/list.md": {
766
- "title": "List",
1865
+ "core/components/functional/router/router.md": {
1866
+ "title": "Router",
767
1867
  "hashes": {
768
- "list": {
1868
+ "router": {
769
1869
  "count": 1,
770
1870
  "title": "",
771
- "type": "paragraph"
1871
+ "type": "page"
772
1872
  }
773
1873
  }
774
1874
  }
775
1875
  }
776
1876
  },
777
1877
  {
778
- "search": "From a Lit parent, pass a function on the items property (ListItems). Each row is wrapped in a sonic-subscriber with dataProvider=&quot;…/list-item/n&quot; (hover rows with debug).\n",
1878
+ "search": "sonic-router watches document.location (pathname + hash) and renders the matching view.\n",
779
1879
  "files": {
780
- "core/components/functional/list/list.md": {
781
- "title": "List",
1880
+ "core/components/functional/router/router.md": {
1881
+ "title": "Router",
782
1882
  "hashes": {
783
- "row-renderer-items--recommended": {
1883
+ "router": {
784
1884
  "count": 1,
785
- "title": "Row renderer (`items`) — recommended",
1885
+ "title": "",
786
1886
  "type": "paragraph"
787
1887
  }
788
1888
  }
@@ -790,14 +1890,14 @@
790
1890
  }
791
1891
  },
792
1892
  {
793
- "search": "Use .items=${fn} (property binding): Lit passes functions only as properties, not as HTML attributes — @property({ type: Function }) does not change that. Same for .noItems, .separator, .skeleton. The callback receives each row object (replacing data-bind / &lt;sonic-value&gt; in a &lt;template&gt;).\n",
1893
+ "search": "From a Lit parent, pass a .routes map (property binding — same rule as .items on list): keys are path patterns, values are render functions. Use fallback when nothing matches.\n",
794
1894
  "files": {
795
- "core/components/functional/list/list.md": {
796
- "title": "List",
1895
+ "core/components/functional/router/router.md": {
1896
+ "title": "Router",
797
1897
  "hashes": {
798
- "row-renderer-items--recommended": {
1898
+ "router": {
799
1899
  "count": 1,
800
- "title": "Row renderer (`items`) — recommended",
1900
+ "title": "",
801
1901
  "type": "paragraph"
802
1902
  }
803
1903
  }
@@ -805,14 +1905,14 @@
805
1905
  }
806
1906
  },
807
1907
  {
808
- "search": "Live demo + TypeScript source (one file, no Markdown copy):\n",
1908
+ "search": "Legacy HTML &lt;template data-route=&quot;…&quot;&gt; remains for hosts without Lit — HTML integration.\n",
809
1909
  "files": {
810
- "core/components/functional/list/list.md": {
811
- "title": "List",
1910
+ "core/components/functional/router/router.md": {
1911
+ "title": "Router",
812
1912
  "hashes": {
813
- "row-renderer-items--recommended": {
1913
+ "router": {
814
1914
  "count": 1,
815
- "title": "Row renderer (`items`) — recommended",
1915
+ "title": "",
816
1916
  "type": "paragraph"
817
1917
  }
818
1918
  }
@@ -820,14 +1920,14 @@
820
1920
  }
821
1921
  },
822
1922
  {
823
- "search": "Implementation: src/docs/example/docs-users-list.ts — row markup in the items callback (item.first_name, …), same idea as replacing data-bind / &lt;sonic-value&gt; in a &lt;template&gt;.\n",
1923
+ "search": "Route keys are matched against pathname + hash. A simple hash route #home matches when the location contains that segment.\n",
824
1924
  "files": {
825
- "core/components/functional/list/list.md": {
826
- "title": "List",
1925
+ "core/components/functional/router/router.md": {
1926
+ "title": "Router",
827
1927
  "hashes": {
828
- "row-renderer-items--recommended": {
1928
+ "static-routes-no-parameters": {
829
1929
  "count": 1,
830
- "title": "Row renderer (`items`) — recommended",
1930
+ "title": "Static routes (no parameters)",
831
1931
  "type": "paragraph"
832
1932
  }
833
1933
  }
@@ -835,14 +1935,14 @@
835
1935
  }
836
1936
  },
837
1937
  {
838
- "search": "Use metadata (even, odd, firstChild, …) or fields on each item (e.g. tpl with templateKey):\n",
1938
+ "search": "On the doc site, the page URL is already a hash (#…/router.md/router). Demos append a second hash for in-page routes (#…/router#home), use href + autoActive=&quot;strict&quot; on sonic-button for the active state, and history.replaceState on click so markdown is not reloaded (setDocsDemoSubHash in src/docs/docs-location.ts).\n",
839
1939
  "files": {
840
- "core/components/functional/list/list.md": {
841
- "title": "List",
1940
+ "core/components/functional/router/router.md": {
1941
+ "title": "Router",
842
1942
  "hashes": {
843
- "alternating-row-layouts": {
1943
+ "static-routes-no-parameters": {
844
1944
  "count": 1,
845
- "title": "Alternating row layouts",
1945
+ "title": "Static routes (no parameters)",
846
1946
  "type": "paragraph"
847
1947
  }
848
1948
  }
@@ -850,14 +1950,14 @@
850
1950
  }
851
1951
  },
852
1952
  {
853
- "search": "For plain HTML hosts, you can still declare &lt;template&gt; children (and data-value for templateKey, separator, no-item). That path is for HTML integration — not used in Concorde doc live demos.\n",
1953
+ "search": "Two styles (see router.demo.ts and docs-router-params-demo):\n",
854
1954
  "files": {
855
- "core/components/functional/list/list.md": {
856
- "title": "List",
1955
+ "core/components/functional/router/router.md": {
1956
+ "title": "Router",
857
1957
  "hashes": {
858
- "html-template-children-integration-without-lit": {
1958
+ "routes-with-parameters": {
859
1959
  "count": 1,
860
- "title": "HTML `<template>` children (integration without Lit)",
1960
+ "title": "Routes with parameters",
861
1961
  "type": "paragraph"
862
1962
  }
863
1963
  }
@@ -865,14 +1965,14 @@
865
1965
  }
866
1966
  },
867
1967
  {
868
- "search": "Each list row still gets dataProvider=&quot;[list]/list-item/[index]&quot;.\n",
1968
+ "search": "Key uses :param segments. The render function receives an object { param: string }.\n",
869
1969
  "files": {
870
- "core/components/functional/list/list.md": {
871
- "title": "List",
1970
+ "core/components/functional/router/router.md": {
1971
+ "title": "Router",
872
1972
  "hashes": {
873
- "html-template-children-integration-without-lit": {
1973
+ "url-pattern-name": {
874
1974
  "count": 1,
875
- "title": "HTML `<template>` children (integration without Lit)",
1975
+ "title": "Url-pattern (`:name`)",
876
1976
  "type": "paragraph"
877
1977
  }
878
1978
  }
@@ -880,29 +1980,29 @@
880
1980
  }
881
1981
  },
882
1982
  {
883
- "search": "Mix",
1983
+ "search": "Key is a RegExp string with (\\d+) / (\\w+) groups. The render function receives an array of captured strings (in order).\n",
884
1984
  "files": {
885
- "core/components/functional/mix/mix.md": {
886
- "title": "Mix",
1985
+ "core/components/functional/router/router.md": {
1986
+ "title": "Router",
887
1987
  "hashes": {
888
- "mix": {
1988
+ "regexp-capturing-groups": {
889
1989
  "count": 1,
890
- "title": "",
891
- "type": "page"
1990
+ "title": "RegExp (capturing groups)",
1991
+ "type": "paragraph"
892
1992
  }
893
1993
  }
894
1994
  }
895
1995
  }
896
1996
  },
897
1997
  {
898
- "search": "Mix allows you to mix several subsets of dataProvider in a new key/value structure which is itself associated with a new dataProvider. The data update is then bidirectional.\n",
1998
+ "search": "With parameters you usually render data directly in Lit (${id}). The old &lt;template data-route&gt; + dataProviderExpression pattern scoped a dataProvider for data-bind / fetch children — prefer @subscribe or explicit props when using .routes.\n",
899
1999
  "files": {
900
- "core/components/functional/mix/mix.md": {
901
- "title": "Mix",
2000
+ "core/components/functional/router/router.md": {
2001
+ "title": "Router",
902
2002
  "hashes": {
903
- "mix": {
2003
+ "regexp-capturing-groups": {
904
2004
  "count": 1,
905
- "title": "",
2005
+ "title": "RegExp (capturing groups)",
906
2006
  "type": "paragraph"
907
2007
  }
908
2008
  }
@@ -910,14 +2010,14 @@
910
2010
  }
911
2011
  },
912
2012
  {
913
- "search": "Dot notation is supported to extract a sub-part of the data.\n",
2013
+ "search": "Always use .routes=${…} in Lit templates: route handlers are functions and must be set as properties, not HTML attributes.\n",
914
2014
  "files": {
915
- "core/components/functional/mix/mix.md": {
916
- "title": "Mix",
2015
+ "core/components/functional/router/router.md": {
2016
+ "title": "Router",
917
2017
  "hashes": {
918
- "mix": {
2018
+ "routes-binding": {
919
2019
  "count": 1,
920
- "title": "",
2020
+ "title": "`.routes` binding",
921
2021
  "type": "paragraph"
922
2022
  }
923
2023
  }
@@ -925,14 +2025,14 @@
925
2025
  }
926
2026
  },
927
2027
  {
928
- "search": "For example, if we declare dataproviders as follows :\n\nWe can rearrange the data as follows\n\nThen we can change values in both dataProviders programaticaly this way, they will stay in sync\n\nOr by using a form element\n\n",
2028
+ "search": "Separate component: redirect when data appears on a publisher (login steps, wizards). Not part of the .routes map.\n",
929
2029
  "files": {
930
- "core/components/functional/mix/mix.md": {
931
- "title": "Mix",
2030
+ "core/components/functional/router/router.md": {
2031
+ "title": "Router",
932
2032
  "hashes": {
933
- "mix": {
2033
+ "sonic-redirect": {
934
2034
  "count": 1,
935
- "title": "",
2035
+ "title": "`sonic-redirect`",
936
2036
  "type": "paragraph"
937
2037
  }
938
2038
  }
@@ -940,29 +2040,29 @@
940
2040
  }
941
2041
  },
942
2042
  {
943
- "search": "Queue",
2043
+ "search": "Example: combine with .routes and submit for login / logout / profile steps.\n",
944
2044
  "files": {
945
- "core/components/functional/queue/queue.md": {
946
- "title": "Queue",
2045
+ "core/components/functional/router/router.md": {
2046
+ "title": "Router",
947
2047
  "hashes": {
948
- "queue": {
2048
+ "sonic-redirect": {
949
2049
  "count": 1,
950
- "title": "",
951
- "type": "page"
2050
+ "title": "`sonic-redirect`",
2051
+ "type": "paragraph"
952
2052
  }
953
2053
  }
954
2054
  }
955
2055
  }
956
2056
  },
957
2057
  {
958
- "search": "Try offline: serviceURL=&quot;/docs-mock-api&quot; — see Local API demos. Row rendering: Data flow (.items property binding).\n",
2058
+ "search": "sonic-router-demo (router.demo.ts) — home, user profile (#user/:id/:slug), products RegExp, fallback 404.\n",
959
2059
  "files": {
960
- "core/components/functional/queue/queue.md": {
961
- "title": "Queue",
2060
+ "core/components/functional/router/router.md": {
2061
+ "title": "Router",
962
2062
  "hashes": {
963
- "queue": {
2063
+ "package-demo": {
964
2064
  "count": 1,
965
- "title": "",
2065
+ "title": "Package demo",
966
2066
  "type": "paragraph"
967
2067
  }
968
2068
  }
@@ -970,29 +2070,29 @@
970
2070
  }
971
2071
  },
972
2072
  {
973
- "search": "sonic-queue loads data in batches. Each batch is an internal List with its own dataProvider (…/list-item/0, …/1, …).\n",
2073
+ "search": "SDUI",
974
2074
  "files": {
975
- "core/components/functional/queue/queue.md": {
976
- "title": "Queue",
2075
+ "core/components/functional/sdui/sdui.md": {
2076
+ "title": "SDUI",
977
2077
  "hashes": {
978
- "queue": {
2078
+ "sdui": {
979
2079
  "count": 1,
980
2080
  "title": "",
981
- "type": "paragraph"
2081
+ "type": "page"
982
2082
  }
983
2083
  }
984
2084
  }
985
2085
  }
986
2086
  },
987
2087
  {
988
- "search": "When the expression contains $offset and $limit, the queue:\n",
2088
+ "search": "SDUI stands for Server Driven User Interfaces.\nBasically, it generates a user interface based on a JSON SDUI Descriptor.\n",
989
2089
  "files": {
990
- "core/components/functional/queue/queue.md": {
991
- "title": "Queue",
2090
+ "core/components/functional/sdui/sdui.md": {
2091
+ "title": "SDUI",
992
2092
  "hashes": {
993
- "lazy-load--offset-and-limit": {
2093
+ "what-is-sdui": {
994
2094
  "count": 1,
995
- "title": "Lazy load — `$offset` and `$limit`",
2095
+ "title": "What is SDUI?",
996
2096
  "type": "paragraph"
997
2097
  }
998
2098
  }
@@ -1000,14 +2100,14 @@
1000
2100
  }
1001
2101
  },
1002
2102
  {
1003
- "search": "The doc mock implements this on GET /docs-mock-api/api/users?offset=…&amp;per_page=… (paginateUsers in src/docs/mock-api/router.ts).\n",
2103
+ "search": "SDUI extends the mixin Subscriber.\nThis means that you must set a dataProvider with an id pointing to the publisher that will hold your SDUI Descriptor.\nThis also means that it has a reactive property named props that you can set with the JSON SDUI Descriptor in order to configure it.\n",
1004
2104
  "files": {
1005
- "core/components/functional/queue/queue.md": {
1006
- "title": "Queue",
2105
+ "core/components/functional/sdui/sdui.md": {
2106
+ "title": "SDUI",
1007
2107
  "hashes": {
1008
- "lazy-load--offset-and-limit": {
2108
+ "subscriber-extension": {
1009
2109
  "count": 1,
1010
- "title": "Lazy load — `$offset` and `$limit`",
2110
+ "title": "Subscriber extension:",
1011
2111
  "type": "paragraph"
1012
2112
  }
1013
2113
  }
@@ -1015,14 +2115,14 @@
1015
2115
  }
1016
2116
  },
1017
2117
  {
1018
- "search": "Wrap the queue in a fixed height with overflow-y-auto so lazy load triggers when scrolling inside the box (same layout as the TS starter demo-queue-templates).\n",
2118
+ "search": "SDUI extends the mixin Fetcher as Fetch and List.\n",
1019
2119
  "files": {
1020
- "core/components/functional/queue/queue.md": {
1021
- "title": "Queue",
2120
+ "core/components/functional/sdui/sdui.md": {
2121
+ "title": "SDUI",
1022
2122
  "hashes": {
1023
- "lazy-load--offset-and-limit": {
2123
+ "fetcher-extension": {
1024
2124
  "count": 1,
1025
- "title": "Lazy load — `$offset` and `$limit`",
2125
+ "title": "Fetcher extension:",
1026
2126
  "type": "paragraph"
1027
2127
  }
1028
2128
  }
@@ -1030,14 +2130,14 @@
1030
2130
  }
1031
2131
  },
1032
2132
  {
1033
- "search": "Try scrolling after load — batches of 4 users. Search e.g. George, Bluth, or zzz for empty results.\n",
2133
+ "search": "In this case, it will parse the JSON coming from the request.\nThe JSON must comply with the SDUI descriptor format.\n",
1034
2134
  "files": {
1035
- "core/components/functional/queue/queue.md": {
1036
- "title": "Queue",
2135
+ "core/components/functional/sdui/sdui.md": {
2136
+ "title": "SDUI",
1037
2137
  "hashes": {
1038
- "lazy-load--offset-and-limit": {
2138
+ "fetcher-extension": {
1039
2139
  "count": 1,
1040
- "title": "Lazy load — `$offset` and `$limit`",
2140
+ "title": "Fetcher extension:",
1041
2141
  "type": "paragraph"
1042
2142
  }
1043
2143
  }
@@ -1045,14 +2145,14 @@
1045
2145
  }
1046
2146
  },
1047
2147
  {
1048
- "search": "Without $offset in the expression, the queue behaves like a single list (one batch), e.g. geo communes below.\n",
2148
+ "search": "As a fetcher, invalidating the publisher or updating the endpoint will trigger a new fetch and update accordingly.\n",
1049
2149
  "files": {
1050
- "core/components/functional/queue/queue.md": {
1051
- "title": "Queue",
2150
+ "core/components/functional/sdui/sdui.md": {
2151
+ "title": "SDUI",
1052
2152
  "hashes": {
1053
- "expression-example": {
2153
+ "fetcher-extension": {
1054
2154
  "count": 1,
1055
- "title": "Expression example",
2155
+ "title": "Fetcher extension:",
1056
2156
  "type": "paragraph"
1057
2157
  }
1058
2158
  }
@@ -1060,14 +2160,14 @@
1060
2160
  }
1061
2161
  },
1062
2162
  {
1063
- "search": "One search field (name=&quot;q&quot;) on formDataProvider=&quot;filter&quot;. The queue listens via dataFilterProvider=&quot;filter&quot; and, on change:\n",
2163
+ "search": "It has no shadowdom, and its display style is set to contents, so an empty SDUI has the fewest impact on the layout.\n",
1064
2164
  "files": {
1065
- "core/components/functional/queue/queue.md": {
1066
- "title": "Queue",
2165
+ "core/components/functional/sdui/sdui.md": {
2166
+ "title": "SDUI",
1067
2167
  "hashes": {
1068
- "filter--datafilterprovider--q": {
2168
+ "rendering": {
1069
2169
  "count": 1,
1070
- "title": "Filter — `dataFilterProvider` + `q`",
2170
+ "title": "Rendering:",
1071
2171
  "type": "paragraph"
1072
2172
  }
1073
2173
  }
@@ -1075,14 +2175,14 @@
1075
2175
  }
1076
2176
  },
1077
2177
  {
1078
- "search": "Use filteredFields only when the form has extra fields that must not be sent to the API (e.g. filteredFields=&quot;rememberMe internalId&quot;).\n",
2178
+ "search": "An SDUINode represents an HTMLElement.\n",
1079
2179
  "files": {
1080
- "core/components/functional/queue/queue.md": {
1081
- "title": "Queue",
2180
+ "core/components/functional/sdui/sdui.md": {
2181
+ "title": "SDUI",
1082
2182
  "hashes": {
1083
- "filter--datafilterprovider--q": {
2183
+ "descriptor": {
1084
2184
  "count": 1,
1085
- "title": "Filter — `dataFilterProvider` + `q`",
2185
+ "title": "Descriptor",
1086
2186
  "type": "paragraph"
1087
2187
  }
1088
2188
  }
@@ -1090,14 +2190,14 @@
1090
2190
  }
1091
2191
  },
1092
2192
  {
1093
- "search": "The mock API filters before pagination — same haystack logic as the starter (filterDocsUsers in src/docs/mock-api/fixtures.ts, used by paginateUsers in router.ts / Service Worker):\n",
2193
+ "search": "TypeScript definition:\n",
1094
2194
  "files": {
1095
- "core/components/functional/queue/queue.md": {
1096
- "title": "Queue",
2195
+ "core/components/functional/sdui/sdui.md": {
2196
+ "title": "SDUI",
1097
2197
  "hashes": {
1098
- "filter--datafilterprovider--q": {
2198
+ "descriptor": {
1099
2199
  "count": 1,
1100
- "title": "Filter — `dataFilterProvider` + `q`",
2200
+ "title": "Descriptor",
1101
2201
  "type": "paragraph"
1102
2202
  }
1103
2203
  }
@@ -1105,14 +2205,14 @@
1105
2205
  }
1106
2206
  },
1107
2207
  {
1108
- "search": "Geo communes: expression uses $limit only (no $offset) — one request, one batch.\n",
2208
+ "search": "Summary of properties:\n",
1109
2209
  "files": {
1110
- "core/components/functional/queue/queue.md": {
1111
- "title": "Queue",
2210
+ "core/components/functional/sdui/sdui.md": {
2211
+ "title": "SDUI",
1112
2212
  "hashes": {
1113
- "simple-batch-no-lazy-scroll": {
2213
+ "descriptor": {
1114
2214
  "count": 1,
1115
- "title": "Simple batch (no lazy scroll)",
2215
+ "title": "Descriptor",
1116
2216
  "type": "paragraph"
1117
2217
  }
1118
2218
  }
@@ -1120,14 +2220,14 @@
1120
2220
  }
1121
2221
  },
1122
2222
  {
1123
- "search": "Optional for hosts without Lit — see HTML integration.\n",
2223
+ "search": "Use it if you prefer to define your node entirely using an HTML string.\n",
1124
2224
  "files": {
1125
- "core/components/functional/queue/queue.md": {
1126
- "title": "Queue",
2225
+ "core/components/functional/sdui/sdui.md": {
2226
+ "title": "SDUI",
1127
2227
  "hashes": {
1128
- "html-template-children": {
2228
+ "markup": {
1129
2229
  "count": 1,
1130
- "title": "HTML `<template>` children",
2230
+ "title": "Markup",
1131
2231
  "type": "paragraph"
1132
2232
  }
1133
2233
  }
@@ -1135,29 +2235,29 @@
1135
2235
  }
1136
2236
  },
1137
2237
  {
1138
- "search": "Router",
2238
+ "search": "Here we use the field tagName of SDUINode to create an element with tag name sonic-input.\n",
1139
2239
  "files": {
1140
- "core/components/functional/router/router.md": {
1141
- "title": "Router",
2240
+ "core/components/functional/sdui/sdui.md": {
2241
+ "title": "SDUI",
1142
2242
  "hashes": {
1143
- "router": {
2243
+ "tag-name": {
1144
2244
  "count": 1,
1145
- "title": "",
1146
- "type": "page"
2245
+ "title": "Tag name",
2246
+ "type": "paragraph"
1147
2247
  }
1148
2248
  }
1149
2249
  }
1150
2250
  }
1151
2251
  },
1152
2252
  {
1153
- "search": "sonic-router watches document.location (pathname + hash) and renders the matching view.\n",
2253
+ "search": "A string key/value pair storing each attribute name/value of the HTML element created.\nAs no tag name is defined, a div element is created.\nHere we define the style attribute to create a tiny red square.\n",
1154
2254
  "files": {
1155
- "core/components/functional/router/router.md": {
1156
- "title": "Router",
2255
+ "core/components/functional/sdui/sdui.md": {
2256
+ "title": "SDUI",
1157
2257
  "hashes": {
1158
- "router": {
2258
+ "attributes": {
1159
2259
  "count": 1,
1160
- "title": "",
2260
+ "title": "Attributes",
1161
2261
  "type": "paragraph"
1162
2262
  }
1163
2263
  }
@@ -1165,14 +2265,14 @@
1165
2265
  }
1166
2266
  },
1167
2267
  {
1168
- "search": "From a Lit parent, pass a .routes map (property binding — same rule as .items on list): keys are path patterns, values are render functions. Use fallback when nothing matches.\n",
2268
+ "search": "Children of the current node can be added using the field nodes recursively.\n",
1169
2269
  "files": {
1170
- "core/components/functional/router/router.md": {
1171
- "title": "Router",
2270
+ "core/components/functional/sdui/sdui.md": {
2271
+ "title": "SDUI",
1172
2272
  "hashes": {
1173
- "router": {
2273
+ "nodes": {
1174
2274
  "count": 1,
1175
- "title": "",
2275
+ "title": "Nodes",
1176
2276
  "type": "paragraph"
1177
2277
  }
1178
2278
  }
@@ -1180,14 +2280,14 @@
1180
2280
  }
1181
2281
  },
1182
2282
  {
1183
- "search": "Legacy HTML &lt;template data-route=&quot;…&quot;&gt; remains for hosts without Lit — HTML integration.\n",
2283
+ "search": "As no tag name is defined, a div element is created, and then we use innerHTML to add content to it.\n",
1184
2284
  "files": {
1185
- "core/components/functional/router/router.md": {
1186
- "title": "Router",
2285
+ "core/components/functional/sdui/sdui.md": {
2286
+ "title": "SDUI",
1187
2287
  "hashes": {
1188
- "router": {
2288
+ "innerhtml": {
1189
2289
  "count": 1,
1190
- "title": "",
2290
+ "title": "InnerHTML",
1191
2291
  "type": "paragraph"
1192
2292
  }
1193
2293
  }
@@ -1195,14 +2295,14 @@
1195
2295
  }
1196
2296
  },
1197
2297
  {
1198
- "search": "Route keys are matched against pathname + hash. A simple hash route #home matches when the location contains that segment.\n",
2298
+ "search": "Use them if you want to wrap the component with some HTML string.\n",
1199
2299
  "files": {
1200
- "core/components/functional/router/router.md": {
1201
- "title": "Router",
2300
+ "core/components/functional/sdui/sdui.md": {
2301
+ "title": "SDUI",
1202
2302
  "hashes": {
1203
- "static-routes-no-parameters": {
2303
+ "prefix-and-suffix": {
1204
2304
  "count": 1,
1205
- "title": "Static routes (no parameters)",
2305
+ "title": "Prefix and suffix",
1206
2306
  "type": "paragraph"
1207
2307
  }
1208
2308
  }
@@ -1210,14 +2310,14 @@
1210
2310
  }
1211
2311
  },
1212
2312
  {
1213
- "search": "On the doc site, the page URL is already a hash (#…/router.md/router). Demos append a second hash for in-page routes (#…/router#home), use href + autoActive=&quot;strict&quot; on sonic-button for the active state, and history.replaceState on click so markdown is not reloaded (setDocsDemoSubHash in src/docs/docs-location.ts).\n",
2313
+ "search": "The libraryKey of SDUINode is an identifier that points to an SDUINode description in the library to be used as a model for this node.\n",
1214
2314
  "files": {
1215
- "core/components/functional/router/router.md": {
1216
- "title": "Router",
2315
+ "core/components/functional/sdui/sdui.md": {
2316
+ "title": "SDUI",
1217
2317
  "hashes": {
1218
- "static-routes-no-parameters": {
2318
+ "library-key-and-contentelementselector": {
1219
2319
  "count": 1,
1220
- "title": "Static routes (no parameters)",
2320
+ "title": "Library key and contentElementSelector",
1221
2321
  "type": "paragraph"
1222
2322
  }
1223
2323
  }
@@ -1225,14 +2325,14 @@
1225
2325
  }
1226
2326
  },
1227
2327
  {
1228
- "search": "Two styles (see router.demo.ts and docs-router-params-demo):\n",
2328
+ "search": "Note that the SDUI has a default library containing some basic component definitions useful for form declaration (see default-library.json).\n",
1229
2329
  "files": {
1230
- "core/components/functional/router/router.md": {
1231
- "title": "Router",
2330
+ "core/components/functional/sdui/sdui.md": {
2331
+ "title": "SDUI",
1232
2332
  "hashes": {
1233
- "routes-with-parameters": {
2333
+ "library-key-and-contentelementselector": {
1234
2334
  "count": 1,
1235
- "title": "Routes with parameters",
2335
+ "title": "Library key and contentElementSelector",
1236
2336
  "type": "paragraph"
1237
2337
  }
1238
2338
  }
@@ -1240,14 +2340,14 @@
1240
2340
  }
1241
2341
  },
1242
2342
  {
1243
- "search": "Key uses :param segments. The render function receives an object { param: string }.\n",
2343
+ "search": "This example uses the library key submit which points to a sonic-submit containing a button also coming from the library.\n",
1244
2344
  "files": {
1245
- "core/components/functional/router/router.md": {
1246
- "title": "Router",
2345
+ "core/components/functional/sdui/sdui.md": {
2346
+ "title": "SDUI",
1247
2347
  "hashes": {
1248
- "url-pattern-name": {
2348
+ "library-key-and-contentelementselector": {
1249
2349
  "count": 1,
1250
- "title": "Url-pattern (`:name`)",
2350
+ "title": "Library key and contentElementSelector",
1251
2351
  "type": "paragraph"
1252
2352
  }
1253
2353
  }
@@ -1255,14 +2355,14 @@
1255
2355
  }
1256
2356
  },
1257
2357
  {
1258
- "search": "Key is a RegExp string with (\\d+) / (\\w+) groups. The render function receives an array of captured strings (in order).\n",
2358
+ "search": "The element named button in the library is a sonic-button of type success containing a check icon as a prefix.\n",
1259
2359
  "files": {
1260
- "core/components/functional/router/router.md": {
1261
- "title": "Router",
2360
+ "core/components/functional/sdui/sdui.md": {
2361
+ "title": "SDUI",
1262
2362
  "hashes": {
1263
- "regexp-capturing-groups": {
2363
+ "library-key-and-contentelementselector": {
1264
2364
  "count": 1,
1265
- "title": "RegExp (capturing groups)",
2365
+ "title": "Library key and contentElementSelector",
1266
2366
  "type": "paragraph"
1267
2367
  }
1268
2368
  }
@@ -1270,14 +2370,14 @@
1270
2370
  }
1271
2371
  },
1272
2372
  {
1273
- "search": "With parameters you usually render data directly in Lit (${id}). The old &lt;template data-route&gt; + dataProviderExpression pattern scoped a dataProvider for data-bind / fetch children — prefer @subscribe or explicit props when using .routes.\n",
2373
+ "search": "Since the submit library element contains an attribute contentElementSelector with the value sonic-button, the &quot;injected content&quot; is put inside the button.\n",
1274
2374
  "files": {
1275
- "core/components/functional/router/router.md": {
1276
- "title": "Router",
2375
+ "core/components/functional/sdui/sdui.md": {
2376
+ "title": "SDUI",
1277
2377
  "hashes": {
1278
- "regexp-capturing-groups": {
2378
+ "library-key-and-contentelementselector": {
1279
2379
  "count": 1,
1280
- "title": "RegExp (capturing groups)",
2380
+ "title": "Library key and contentElementSelector",
1281
2381
  "type": "paragraph"
1282
2382
  }
1283
2383
  }
@@ -1285,14 +2385,14 @@
1285
2385
  }
1286
2386
  },
1287
2387
  {
1288
- "search": "Always use .routes=${…} in Lit templates: route handlers are functions and must be set as properties, not HTML attributes.\n",
2388
+ "search": "We used innerHTML for the sake of simplicity, but you can use nodes to add any complex content.\n",
1289
2389
  "files": {
1290
- "core/components/functional/router/router.md": {
1291
- "title": "Router",
2390
+ "core/components/functional/sdui/sdui.md": {
2391
+ "title": "SDUI",
1292
2392
  "hashes": {
1293
- "routes-binding": {
2393
+ "library-key-and-contentelementselector": {
1294
2394
  "count": 1,
1295
- "title": "`.routes` binding",
2395
+ "title": "Library key and contentElementSelector",
1296
2396
  "type": "paragraph"
1297
2397
  }
1298
2398
  }
@@ -1300,14 +2400,14 @@
1300
2400
  }
1301
2401
  },
1302
2402
  {
1303
- "search": "Separate component: redirect when data appears on a publisher (login steps, wizards). Not part of the .routes map.\n",
2403
+ "search": "This special field lets you inject the content at any place in the HTML flow already set inside the parent SDUI component by using a CSS selector.\n",
1304
2404
  "files": {
1305
- "core/components/functional/router/router.md": {
1306
- "title": "Router",
2405
+ "core/components/functional/sdui/sdui.md": {
2406
+ "title": "SDUI",
1307
2407
  "hashes": {
1308
- "sonic-redirect": {
2408
+ "parentelementselector": {
1309
2409
  "count": 1,
1310
- "title": "`sonic-redirect`",
2410
+ "title": "parentElementSelector",
1311
2411
  "type": "paragraph"
1312
2412
  }
1313
2413
  }
@@ -1315,14 +2415,14 @@
1315
2415
  }
1316
2416
  },
1317
2417
  {
1318
- "search": "Example: combine with .routes and submit for login / logout / profile steps.\n",
2418
+ "search": "⚠️ Note that it doesn&#39;t work with top-level nodes.\n",
1319
2419
  "files": {
1320
- "core/components/functional/router/router.md": {
1321
- "title": "Router",
2420
+ "core/components/functional/sdui/sdui.md": {
2421
+ "title": "SDUI",
1322
2422
  "hashes": {
1323
- "sonic-redirect": {
2423
+ "parentelementselector": {
1324
2424
  "count": 1,
1325
- "title": "`sonic-redirect`",
2425
+ "title": "parentElementSelector",
1326
2426
  "type": "paragraph"
1327
2427
  }
1328
2428
  }
@@ -1330,14 +2430,14 @@
1330
2430
  }
1331
2431
  },
1332
2432
  {
1333
- "search": "sonic-router-demo (router.demo.ts) — home, user profile (#user/:id/:slug), products RegExp, fallback 404.\n",
2433
+ "search": "The transformers let you transform the structure of the SDUI Descriptor into a new one before parsing and rendering it.\n",
1334
2434
  "files": {
1335
- "core/components/functional/router/router.md": {
1336
- "title": "Router",
2435
+ "core/components/functional/sdui/sdui.md": {
2436
+ "title": "SDUI",
1337
2437
  "hashes": {
1338
- "package-demo": {
2438
+ "transformers": {
1339
2439
  "count": 1,
1340
- "title": "Package demo",
2440
+ "title": "Transformers:",
1341
2441
  "type": "paragraph"
1342
2442
  }
1343
2443
  }
@@ -1345,29 +2445,29 @@
1345
2445
  }
1346
2446
  },
1347
2447
  {
1348
- "search": "SDUI",
2448
+ "search": "To enable it, you must fill the transformation attribute of the component with a URL pointing to a Transform descriptor.\n",
1349
2449
  "files": {
1350
2450
  "core/components/functional/sdui/sdui.md": {
1351
2451
  "title": "SDUI",
1352
2452
  "hashes": {
1353
- "sdui": {
2453
+ "transformers": {
1354
2454
  "count": 1,
1355
- "title": "",
1356
- "type": "page"
2455
+ "title": "Transformers:",
2456
+ "type": "paragraph"
1357
2457
  }
1358
2458
  }
1359
2459
  }
1360
2460
  }
1361
2461
  },
1362
2462
  {
1363
- "search": "SDUI stands for Server Driven User Interfaces.\nBasically, it generates a user interface based on a JSON SDUI Descriptor.\n",
2463
+ "search": "Each key of the library will be merged with the current library in the SDUI Descriptor, by replacing or creating items library key by key.\n",
1364
2464
  "files": {
1365
2465
  "core/components/functional/sdui/sdui.md": {
1366
2466
  "title": "SDUI",
1367
2467
  "hashes": {
1368
- "what-is-sdui": {
2468
+ "the-library": {
1369
2469
  "count": 1,
1370
- "title": "What is SDUI?",
2470
+ "title": "The library:",
1371
2471
  "type": "paragraph"
1372
2472
  }
1373
2473
  }
@@ -1375,14 +2475,14 @@
1375
2475
  }
1376
2476
  },
1377
2477
  {
1378
- "search": "SDUI extends the mixin Subscriber.\nThis means that you must set a dataProvider with an id pointing to the publisher that will hold your SDUI Descriptor.\nThis also means that it has a reactive property named props that you can set with the JSON SDUI Descriptor in order to configure it.\n",
2478
+ "search": "Each transform represents an action that will be done on the SDUI descriptor before the creation of the entire UI.\n",
1379
2479
  "files": {
1380
2480
  "core/components/functional/sdui/sdui.md": {
1381
2481
  "title": "SDUI",
1382
2482
  "hashes": {
1383
- "subscriber-extension": {
2483
+ "the-transform-actions": {
1384
2484
  "count": 1,
1385
- "title": "Subscriber extension:",
2485
+ "title": "The transform actions:",
1386
2486
  "type": "paragraph"
1387
2487
  }
1388
2488
  }
@@ -1390,14 +2490,14 @@
1390
2490
  }
1391
2491
  },
1392
2492
  {
1393
- "search": "SDUI extends the mixin Fetcher as Fetch and List.\n",
2493
+ "search": "The action that will be done is a verb:\n",
1394
2494
  "files": {
1395
2495
  "core/components/functional/sdui/sdui.md": {
1396
2496
  "title": "SDUI",
1397
2497
  "hashes": {
1398
- "fetcher-extension": {
2498
+ "the-transform-actions": {
1399
2499
  "count": 1,
1400
- "title": "Fetcher extension:",
2500
+ "title": "The transform actions:",
1401
2501
  "type": "paragraph"
1402
2502
  }
1403
2503
  }
@@ -1405,14 +2505,14 @@
1405
2505
  }
1406
2506
  },
1407
2507
  {
1408
- "search": "In this case, it will parse the JSON coming from the request.\nThe JSON must comply with the SDUI descriptor format.\n",
2508
+ "search": "This is an HTML attribute to set on the component if needed. In this case, the component will not treat its props value directly as an SDUI descriptor. Internally, it will basically extract the SDUIDescriptor by doing something like this: const sduiDescriptor = this.props[this.sduikey].\n",
1409
2509
  "files": {
1410
2510
  "core/components/functional/sdui/sdui.md": {
1411
2511
  "title": "SDUI",
1412
2512
  "hashes": {
1413
- "fetcher-extension": {
2513
+ "sduikey": {
1414
2514
  "count": 1,
1415
- "title": "Fetcher extension:",
2515
+ "title": "sduiKey",
1416
2516
  "type": "paragraph"
1417
2517
  }
1418
2518
  }
@@ -1420,14 +2520,14 @@
1420
2520
  }
1421
2521
  },
1422
2522
  {
1423
- "search": "As a fetcher, invalidating the publisher or updating the endpoint will trigger a new fetch and update accordingly.\n",
2523
+ "search": "This is an HTML attribute to set on the component if needed. In this case, the component will automatically create a sonic-toast-message-subscriber component. The data found in props[messageKey] will be treated as the data expected by the sonic-toast-message-subscriber. So, by respecting the format of data supported by this component, you will be able to show multiple toasts in the result of a request.\n",
1424
2524
  "files": {
1425
2525
  "core/components/functional/sdui/sdui.md": {
1426
2526
  "title": "SDUI",
1427
2527
  "hashes": {
1428
- "fetcher-extension": {
2528
+ "messagekey": {
1429
2529
  "count": 1,
1430
- "title": "Fetcher extension:",
2530
+ "title": "messageKey",
1431
2531
  "type": "paragraph"
1432
2532
  }
1433
2533
  }
@@ -1435,14 +2535,14 @@
1435
2535
  }
1436
2536
  },
1437
2537
  {
1438
- "search": "It has no shadowdom, and its display style is set to contents, so an empty SDUI has the fewest impact on the layout.\n",
2538
+ "search": "Example of JSON with messageKey=messages:\n\n",
1439
2539
  "files": {
1440
2540
  "core/components/functional/sdui/sdui.md": {
1441
2541
  "title": "SDUI",
1442
2542
  "hashes": {
1443
- "rendering": {
2543
+ "messagekey": {
1444
2544
  "count": 1,
1445
- "title": "Rendering:",
2545
+ "title": "messageKey",
1446
2546
  "type": "paragraph"
1447
2547
  }
1448
2548
  }
@@ -1450,14 +2550,14 @@
1450
2550
  }
1451
2551
  },
1452
2552
  {
1453
- "search": "An SDUINode represents an HTMLElement.\n",
2553
+ "search": "This is an HTML attribute to set on the component if needed. You can set a URL pointing to a JSON describing a library with the same structure as the library in the SDUIDescriptor. The component will simply override its library with the given one.\n",
1454
2554
  "files": {
1455
2555
  "core/components/functional/sdui/sdui.md": {
1456
2556
  "title": "SDUI",
1457
2557
  "hashes": {
1458
- "descriptor": {
2558
+ "library": {
1459
2559
  "count": 1,
1460
- "title": "Descriptor",
2560
+ "title": "library",
1461
2561
  "type": "paragraph"
1462
2562
  }
1463
2563
  }
@@ -1465,14 +2565,14 @@
1465
2565
  }
1466
2566
  },
1467
2567
  {
1468
- "search": "TypeScript definition:\n",
2568
+ "search": "Here is a little playground to let you test some simple tricks.\n",
1469
2569
  "files": {
1470
2570
  "core/components/functional/sdui/sdui.md": {
1471
2571
  "title": "SDUI",
1472
2572
  "hashes": {
1473
- "descriptor": {
2573
+ "playground": {
1474
2574
  "count": 1,
1475
- "title": "Descriptor",
2575
+ "title": "Playground",
1476
2576
  "type": "paragraph"
1477
2577
  }
1478
2578
  }
@@ -1480,14 +2580,29 @@
1480
2580
  }
1481
2581
  },
1482
2582
  {
1483
- "search": "Summary of properties:\n",
2583
+ "search": "Shader",
1484
2584
  "files": {
1485
- "core/components/functional/sdui/sdui.md": {
1486
- "title": "SDUI",
2585
+ "core/components/functional/shader/shader.md": {
2586
+ "title": "Shader",
1487
2587
  "hashes": {
1488
- "descriptor": {
2588
+ "shader": {
1489
2589
  "count": 1,
1490
- "title": "Descriptor",
2590
+ "title": "",
2591
+ "type": "page"
2592
+ }
2593
+ }
2594
+ }
2595
+ }
2596
+ },
2597
+ {
2598
+ "search": "sonic-shader — renderer WebGL2 compatible ShaderToy (pass Image + buffers A–D + Common).\n",
2599
+ "files": {
2600
+ "core/components/functional/shader/shader.md": {
2601
+ "title": "Shader",
2602
+ "hashes": {
2603
+ "shader": {
2604
+ "count": 1,
2605
+ "title": "",
1491
2606
  "type": "paragraph"
1492
2607
  }
1493
2608
  }
@@ -1495,14 +2610,14 @@
1495
2610
  }
1496
2611
  },
1497
2612
  {
1498
- "search": "Use it if you prefer to define your node entirely using an HTML string.\n",
2613
+ "search": "For WGSL / WebGPU (1 pass, same DP glue): sonic-webgpu.\n",
1499
2614
  "files": {
1500
- "core/components/functional/sdui/sdui.md": {
1501
- "title": "SDUI",
2615
+ "core/components/functional/shader/shader.md": {
2616
+ "title": "Shader",
1502
2617
  "hashes": {
1503
- "markup": {
2618
+ "shader": {
1504
2619
  "count": 1,
1505
- "title": "Markup",
2620
+ "title": "",
1506
2621
  "type": "paragraph"
1507
2622
  }
1508
2623
  }
@@ -1510,14 +2625,14 @@
1510
2625
  }
1511
2626
  },
1512
2627
  {
1513
- "search": "Here we use the field tagName of SDUINode to create an element with tag name sonic-input.\n",
2628
+ "search": "CDN (after the core): concorde-shader.bundle.js — see CDN addons.\n",
1514
2629
  "files": {
1515
- "core/components/functional/sdui/sdui.md": {
1516
- "title": "SDUI",
2630
+ "core/components/functional/shader/shader.md": {
2631
+ "title": "Shader",
1517
2632
  "hashes": {
1518
- "tag-name": {
2633
+ "shader": {
1519
2634
  "count": 1,
1520
- "title": "Tag name",
2635
+ "title": "",
1521
2636
  "type": "paragraph"
1522
2637
  }
1523
2638
  }
@@ -1525,14 +2640,14 @@
1525
2640
  }
1526
2641
  },
1527
2642
  {
1528
- "search": "A string key/value pair storing each attribute name/value of the HTML element created.\nAs no tag name is defined, a div element is created.\nHere we define the style attribute to create a tiny red square.\n",
2643
+ "search": "Uniforms supportés : iResolution, iTime, iTimeDelta, iFrame, iFrameRate, iMouse, iDate, iChannel0–3, iChannelResolution, iChannelTime, iSampleRate, uParam0–3.\n",
1529
2644
  "files": {
1530
- "core/components/functional/sdui/sdui.md": {
1531
- "title": "SDUI",
2645
+ "core/components/functional/shader/shader.md": {
2646
+ "title": "Shader",
1532
2647
  "hashes": {
1533
- "attributes": {
2648
+ "shader": {
1534
2649
  "count": 1,
1535
- "title": "Attributes",
2650
+ "title": "",
1536
2651
  "type": "paragraph"
1537
2652
  }
1538
2653
  }
@@ -1540,14 +2655,14 @@
1540
2655
  }
1541
2656
  },
1542
2657
  {
1543
- "search": "Children of the current node can be added using the field nodes recursively.\n",
2658
+ "search": "Textures channel0–3 : images ou vidéos (.webm / .mp4 / …).\n",
1544
2659
  "files": {
1545
- "core/components/functional/sdui/sdui.md": {
1546
- "title": "SDUI",
2660
+ "core/components/functional/shader/shader.md": {
2661
+ "title": "Shader",
1547
2662
  "hashes": {
1548
- "nodes": {
2663
+ "shader": {
1549
2664
  "count": 1,
1550
- "title": "Nodes",
2665
+ "title": "",
1551
2666
  "type": "paragraph"
1552
2667
  }
1553
2668
  }
@@ -1555,14 +2670,14 @@
1555
2670
  }
1556
2671
  },
1557
2672
  {
1558
- "search": "As no tag name is defined, a div element is created, and then we use innerHTML to add content to it.\n",
2673
+ "search": "Buffer A simule une height-map d’ondes (ripple) ; Image réfracte la photo via le gradient — sans teinte. Glisser la souris pour faire des vagues.\n",
1559
2674
  "files": {
1560
- "core/components/functional/sdui/sdui.md": {
1561
- "title": "SDUI",
2675
+ "core/components/functional/shader/shader.md": {
2676
+ "title": "Shader",
1562
2677
  "hashes": {
1563
- "innerhtml": {
2678
+ "multipass-sur-une-photo": {
1564
2679
  "count": 1,
1565
- "title": "InnerHTML",
2680
+ "title": "Multipass sur une photo",
1566
2681
  "type": "paragraph"
1567
2682
  }
1568
2683
  }
@@ -1570,14 +2685,14 @@
1570
2685
  }
1571
2686
  },
1572
2687
  {
1573
- "search": "Use them if you want to wrap the component with some HTML string.\n",
2688
+ "search": "Photo + depth parallax (HF): Visual stack.\n",
1574
2689
  "files": {
1575
- "core/components/functional/sdui/sdui.md": {
1576
- "title": "SDUI",
2690
+ "core/components/functional/shader/shader.md": {
2691
+ "title": "Shader",
1577
2692
  "hashes": {
1578
- "prefix-and-suffix": {
2693
+ "multipass-sur-une-photo": {
1579
2694
  "count": 1,
1580
- "title": "Prefix and suffix",
2695
+ "title": "Multipass sur une photo",
1581
2696
  "type": "paragraph"
1582
2697
  }
1583
2698
  }
@@ -1585,14 +2700,14 @@
1585
2700
  }
1586
2701
  },
1587
2702
  {
1588
- "search": "The libraryKey of SDUINode is an identifier that points to an SDUINode description in the library to be used as a model for this node.\n",
2703
+ "search": "Règle : brancher des passes dans un sonic-shader (buffers A–D → Image), pas deux composants via dataProvider.\n",
1589
2704
  "files": {
1590
- "core/components/functional/sdui/sdui.md": {
1591
- "title": "SDUI",
2705
+ "core/components/functional/shader/shader.md": {
2706
+ "title": "Shader",
1592
2707
  "hashes": {
1593
- "library-key-and-contentelementselector": {
2708
+ "chaînage-deffets-officiel": {
1594
2709
  "count": 1,
1595
- "title": "Library key and contentElementSelector",
2710
+ "title": "Chaînage d’effets (officiel)",
1596
2711
  "type": "paragraph"
1597
2712
  }
1598
2713
  }
@@ -1600,14 +2715,14 @@
1600
2715
  }
1601
2716
  },
1602
2717
  {
1603
- "search": "Note that the SDUI has a default library containing some basic component definitions useful for form declaration (see default-library.json).\n",
2718
+ "search": "Les passes intermédiaires sont déjà offscreen (FBO). Pas besoin d’un second sonic-shader invisible.\n",
1604
2719
  "files": {
1605
- "core/components/functional/sdui/sdui.md": {
1606
- "title": "SDUI",
2720
+ "core/components/functional/shader/shader.md": {
2721
+ "title": "Shader",
1607
2722
  "hashes": {
1608
- "library-key-and-contentelementselector": {
2723
+ "chaînage-deffets-officiel": {
1609
2724
  "count": 1,
1610
- "title": "Library key and contentElementSelector",
2725
+ "title": "Chaînage d’effets (officiel)",
1611
2726
  "type": "paragraph"
1612
2727
  }
1613
2728
  }
@@ -1615,14 +2730,14 @@
1615
2730
  }
1616
2731
  },
1617
2732
  {
1618
- "search": "This example uses the library key submit which points to a sonic-submit containing a button also coming from the library.\n",
2733
+ "search": "Deux instances séparées ne partagent pas leurs textures WebGL (contextes distincts). Un bus texture via DP n’existe pas (et un toBlob/dataURL ne serait pas temps réel).\n",
1619
2734
  "files": {
1620
- "core/components/functional/sdui/sdui.md": {
1621
- "title": "SDUI",
2735
+ "core/components/functional/shader/shader.md": {
2736
+ "title": "Shader",
1622
2737
  "hashes": {
1623
- "library-key-and-contentelementselector": {
2738
+ "chaînage-deffets-officiel": {
1624
2739
  "count": 1,
1625
- "title": "Library key and contentElementSelector",
2740
+ "title": "Chaînage d’effets (officiel)",
1626
2741
  "type": "paragraph"
1627
2742
  }
1628
2743
  }
@@ -1630,14 +2745,14 @@
1630
2745
  }
1631
2746
  },
1632
2747
  {
1633
- "search": "The element named button in the library is a sonic-button of type success containing a check icon as a prefix.\n",
2748
+ "search": "Démo pédagogique : Buffer&nbsp;A = Sobel → Image = overlay + param0.\n",
1634
2749
  "files": {
1635
- "core/components/functional/sdui/sdui.md": {
1636
- "title": "SDUI",
2750
+ "core/components/functional/shader/shader.md": {
2751
+ "title": "Shader",
1637
2752
  "hashes": {
1638
- "library-key-and-contentelementselector": {
2753
+ "chaînage-deffets-officiel": {
1639
2754
  "count": 1,
1640
- "title": "Library key and contentElementSelector",
2755
+ "title": "Chaînage d’effets (officiel)",
1641
2756
  "type": "paragraph"
1642
2757
  }
1643
2758
  }
@@ -1645,14 +2760,14 @@
1645
2760
  }
1646
2761
  },
1647
2762
  {
1648
- "search": "Since the submit library element contains an attribute contentElementSelector with the value sonic-button, the &quot;injected content&quot; is put inside the button.\n",
2763
+ "search": "Exemple de câblage :\n",
1649
2764
  "files": {
1650
- "core/components/functional/sdui/sdui.md": {
1651
- "title": "SDUI",
2765
+ "core/components/functional/shader/shader.md": {
2766
+ "title": "Shader",
1652
2767
  "hashes": {
1653
- "library-key-and-contentelementselector": {
2768
+ "chaînage-deffets-officiel": {
1654
2769
  "count": 1,
1655
- "title": "Library key and contentElementSelector",
2770
+ "title": "Chaînage d’effets (officiel)",
1656
2771
  "type": "paragraph"
1657
2772
  }
1658
2773
  }
@@ -1660,14 +2775,14 @@
1660
2775
  }
1661
2776
  },
1662
2777
  {
1663
- "search": "We used innerHTML for the sake of simplicity, but you can use nodes to add any complex content.\n",
2778
+ "search": "Au survol, le composant anime un uParamN de 0 → 1 (et l’inverse au leave), avec easing hover-speed. Le shader lit ce param pour mixer l’effet on/off (zoom, aberration, ripple…). play-on-hover n’anime que pendant le hover / la transition.\n",
1664
2779
  "files": {
1665
- "core/components/functional/sdui/sdui.md": {
1666
- "title": "SDUI",
2780
+ "core/components/functional/shader/shader.md": {
2781
+ "title": "Shader",
1667
2782
  "hashes": {
1668
- "library-key-and-contentelementselector": {
2783
+ "rollover--roll-out-hover-param": {
1669
2784
  "count": 1,
1670
- "title": "Library key and contentElementSelector",
2785
+ "title": "Rollover / roll-out (`hover-param`)",
1671
2786
  "type": "paragraph"
1672
2787
  }
1673
2788
  }
@@ -1675,14 +2790,14 @@
1675
2790
  }
1676
2791
  },
1677
2792
  {
1678
- "search": "This special field lets you inject the content at any place in the HTML flow already set inside the parent SDUI component by using a CSS selector.\n",
2793
+ "search": "Type : ShaderHoverParam = 0 | 1 | 2 | 3 | &quot;param0&quot;…&quot;param3&quot; | &quot;&quot;.\n",
1679
2794
  "files": {
1680
- "core/components/functional/sdui/sdui.md": {
1681
- "title": "SDUI",
2795
+ "core/components/functional/shader/shader.md": {
2796
+ "title": "Shader",
1682
2797
  "hashes": {
1683
- "parentelementselector": {
2798
+ "rollover--roll-out-hover-param": {
1684
2799
  "count": 1,
1685
- "title": "parentElementSelector",
2800
+ "title": "Rollover / roll-out (`hover-param`)",
1686
2801
  "type": "paragraph"
1687
2802
  }
1688
2803
  }
@@ -1690,14 +2805,14 @@
1690
2805
  }
1691
2806
  },
1692
2807
  {
1693
- "search": "⚠️ Note that it doesn&#39;t work with top-level nodes.\n",
2808
+ "search": "dataProvider est bidirectionnel : param0… en entrée ; en sortie mouseX / mouseY / hovering / frame (+ param0… si out-data-provider est séparé, ou le slot hover-param seul si le DP est partagé avec le formulaire). Avec sample, lit la couleur sous le curseur → sampleR/G/B/A + sampleLuma (SonicShaderOutput). Event out (payload complet, y compris les params). Optionnel : out-data-provider pour séparer l’écriture.\n",
1694
2809
  "files": {
1695
- "core/components/functional/sdui/sdui.md": {
1696
- "title": "SDUI",
2810
+ "core/components/functional/shader/shader.md": {
2811
+ "title": "Shader",
1697
2812
  "hashes": {
1698
- "parentelementselector": {
2813
+ "sortie--sampling-sample--dataprovider": {
1699
2814
  "count": 1,
1700
- "title": "parentElementSelector",
2815
+ "title": "Sortie / sampling (`sample` + dataProvider)",
1701
2816
  "type": "paragraph"
1702
2817
  }
1703
2818
  }
@@ -1705,14 +2820,14 @@
1705
2820
  }
1706
2821
  },
1707
2822
  {
1708
- "search": "The transformers let you transform the structure of the SDUI Descriptor into a new one before parsing and rendering it.\n",
2823
+ "search": "Publication paresseuse : rien n’est écrit (ni readPixels) tant qu’aucun champ méta/sample n’a de lecteur DP (@handle(frame) / @subscribe / sonic-value…) et qu’aucun listener out n’est branché. Un sonic-input name=&quot;param0&quot; ne compte pas comme consommateur out (évite le write-back qui remettait les champs à 0). Dès qu’un vrai consommateur apparaît, les maj partent au rythme de out-interval. Avec sample, le readPixels suit le même gate.\n",
1709
2824
  "files": {
1710
- "core/components/functional/sdui/sdui.md": {
1711
- "title": "SDUI",
2825
+ "core/components/functional/shader/shader.md": {
2826
+ "title": "Shader",
1712
2827
  "hashes": {
1713
- "transformers": {
2828
+ "sortie--sampling-sample--dataprovider": {
1714
2829
  "count": 1,
1715
- "title": "Transformers:",
2830
+ "title": "Sortie / sampling (`sample` + dataProvider)",
1716
2831
  "type": "paragraph"
1717
2832
  }
1718
2833
  }
@@ -1720,14 +2835,14 @@
1720
2835
  }
1721
2836
  },
1722
2837
  {
1723
- "search": "To enable it, you must fill the transformation attribute of the component with a URL pointing to a Transform descriptor.\n",
2838
+ "search": "Pattern typique — écoute frame + lecture massive :\n",
1724
2839
  "files": {
1725
- "core/components/functional/sdui/sdui.md": {
1726
- "title": "SDUI",
2840
+ "core/components/functional/shader/shader.md": {
2841
+ "title": "Shader",
1727
2842
  "hashes": {
1728
- "transformers": {
2843
+ "sortie--sampling-sample--dataprovider": {
1729
2844
  "count": 1,
1730
- "title": "Transformers:",
2845
+ "title": "Sortie / sampling (`sample` + dataProvider)",
1731
2846
  "type": "paragraph"
1732
2847
  }
1733
2848
  }
@@ -1735,14 +2850,14 @@
1735
2850
  }
1736
2851
  },
1737
2852
  {
1738
- "search": "Each key of the library will be merged with the current library in the SDUI Descriptor, by replacing or creating items library key by key.\n",
2853
+ "search": "A GPU pass writes a score mask (R channel) into a buffer; extract scans it, crops patches around peaks, and publishes scalars + blobUrl for downstream use.\n",
1739
2854
  "files": {
1740
- "core/components/functional/sdui/sdui.md": {
1741
- "title": "SDUI",
2855
+ "core/components/functional/shader/shader.md": {
2856
+ "title": "Shader",
1742
2857
  "hashes": {
1743
- "the-library": {
2858
+ "extraction-patches--singularities-extract": {
1744
2859
  "count": 1,
1745
- "title": "The library:",
2860
+ "title": "Extraction patches / singularities (`extract`)",
1746
2861
  "type": "paragraph"
1747
2862
  }
1748
2863
  }
@@ -1750,14 +2865,14 @@
1750
2865
  }
1751
2866
  },
1752
2867
  {
1753
- "search": "Each transform represents an action that will be done on the SDUI descriptor before the creation of the entire UI.\n",
2868
+ "search": "detect scores: mask R channel (prefer a soft map, not hard-clipped), then renormalized to the best peak in the batch (1 = strongest). findPeaks sorts and keeps the top ones (NMS ≈ min(patch/3, 16) px).\n",
1754
2869
  "files": {
1755
- "core/components/functional/sdui/sdui.md": {
1756
- "title": "SDUI",
2870
+ "core/components/functional/shader/shader.md": {
2871
+ "title": "Shader",
1757
2872
  "hashes": {
1758
- "the-transform-actions": {
2873
+ "extraction-patches--singularities-extract": {
1759
2874
  "count": 1,
1760
- "title": "The transform actions:",
2875
+ "title": "Extraction patches / singularities (`extract`)",
1761
2876
  "type": "paragraph"
1762
2877
  }
1763
2878
  }
@@ -1765,14 +2880,14 @@
1765
2880
  }
1766
2881
  },
1767
2882
  {
1768
- "search": "The action that will be done is a verb:\n",
2883
+ "search": "Lazy: no readPixels without a DP reader / extract event listener.\n",
1769
2884
  "files": {
1770
- "core/components/functional/sdui/sdui.md": {
1771
- "title": "SDUI",
2885
+ "core/components/functional/shader/shader.md": {
2886
+ "title": "Shader",
1772
2887
  "hashes": {
1773
- "the-transform-actions": {
2888
+ "extraction-patches--singularities-extract": {
1774
2889
  "count": 1,
1775
- "title": "The transform actions:",
2890
+ "title": "Extraction patches / singularities (`extract`)",
1776
2891
  "type": "paragraph"
1777
2892
  }
1778
2893
  }
@@ -1780,14 +2895,14 @@
1780
2895
  }
1781
2896
  },
1782
2897
  {
1783
- "search": "This is an HTML attribute to set on the component if needed. In this case, the component will not treat its props value directly as an SDUI descriptor. Internally, it will basically extract the SDUIDescriptor by doing something like this: const sduiDescriptor = this.props[this.sduikey].\n",
2898
+ "search": "Live Harris → patches → WebGPU: Visual stack.\n",
1784
2899
  "files": {
1785
- "core/components/functional/sdui/sdui.md": {
1786
- "title": "SDUI",
2900
+ "core/components/functional/shader/shader.md": {
2901
+ "title": "Shader",
1787
2902
  "hashes": {
1788
- "sduikey": {
2903
+ "extraction-patches--singularities-extract": {
1789
2904
  "count": 1,
1790
- "title": "sduiKey",
2905
+ "title": "Extraction patches / singularities (`extract`)",
1791
2906
  "type": "paragraph"
1792
2907
  }
1793
2908
  }
@@ -1795,14 +2910,14 @@
1795
2910
  }
1796
2911
  },
1797
2912
  {
1798
- "search": "This is an HTML attribute to set on the component if needed. In this case, the component will automatically create a sonic-toast-message-subscriber component. The data found in props[messageKey] will be treated as the data expected by the sonic-toast-message-subscriber. So, by respecting the format of data supported by this component, you will be able to show multiple toasts in the result of a request.\n",
2913
+ "search": "Assigne le GLSL via .image (et .bufferA, …) depuis JS / Lit.\n",
1799
2914
  "files": {
1800
- "core/components/functional/sdui/sdui.md": {
1801
- "title": "SDUI",
2915
+ "core/components/functional/shader/shader.md": {
2916
+ "title": "Shader",
1802
2917
  "hashes": {
1803
- "messagekey": {
2918
+ "markup": {
1804
2919
  "count": 1,
1805
- "title": "messageKey",
2920
+ "title": "Markup",
1806
2921
  "type": "paragraph"
1807
2922
  }
1808
2923
  }
@@ -1810,14 +2925,14 @@
1810
2925
  }
1811
2926
  },
1812
2927
  {
1813
- "search": "Example of JSON with messageKey=messages:\n\n",
2928
+ "search": "error — compile / link / WebGL (detail.message, detail.pass, detail.infoLog).\n",
1814
2929
  "files": {
1815
- "core/components/functional/sdui/sdui.md": {
1816
- "title": "SDUI",
2930
+ "core/components/functional/shader/shader.md": {
2931
+ "title": "Shader",
1817
2932
  "hashes": {
1818
- "messagekey": {
2933
+ "events": {
1819
2934
  "count": 1,
1820
- "title": "messageKey",
2935
+ "title": "Events",
1821
2936
  "type": "paragraph"
1822
2937
  }
1823
2938
  }
@@ -1825,14 +2940,14 @@
1825
2940
  }
1826
2941
  },
1827
2942
  {
1828
- "search": "This is an HTML attribute to set on the component if needed. You can set a URL pointing to a JSON describing a library with the same structure as the library in the SDUIDescriptor. The component will simply override its library with the given one.\n",
2943
+ "search": "out — snapshot SonicShaderOutput (throttlé par out-interval, seulement s’il y a un listener) : souris, params, samples.\n",
1829
2944
  "files": {
1830
- "core/components/functional/sdui/sdui.md": {
1831
- "title": "SDUI",
2945
+ "core/components/functional/shader/shader.md": {
2946
+ "title": "Shader",
1832
2947
  "hashes": {
1833
- "library": {
2948
+ "events": {
1834
2949
  "count": 1,
1835
- "title": "library",
2950
+ "title": "Events",
1836
2951
  "type": "paragraph"
1837
2952
  }
1838
2953
  }
@@ -1840,14 +2955,14 @@
1840
2955
  }
1841
2956
  },
1842
2957
  {
1843
- "search": "Here is a little playground to let you test some simple tricks.\n",
2958
+ "search": "extract — snapshot ShaderExtractOutput (throttlé, paresseux) : patches manuels + détectés.\n",
1844
2959
  "files": {
1845
- "core/components/functional/sdui/sdui.md": {
1846
- "title": "SDUI",
2960
+ "core/components/functional/shader/shader.md": {
2961
+ "title": "Shader",
1847
2962
  "hashes": {
1848
- "playground": {
2963
+ "events": {
1849
2964
  "count": 1,
1850
- "title": "Playground",
2965
+ "title": "Events",
1851
2966
  "type": "paragraph"
1852
2967
  }
1853
2968
  }
@@ -2374,6 +3489,111 @@
2374
3489
  }
2375
3490
  }
2376
3491
  },
3492
+ {
3493
+ "search": "WebGPU",
3494
+ "files": {
3495
+ "core/components/functional/webgpu/webgpu.md": {
3496
+ "title": "WebGPU",
3497
+ "hashes": {
3498
+ "webgpu": {
3499
+ "count": 1,
3500
+ "title": "",
3501
+ "type": "page"
3502
+ }
3503
+ }
3504
+ }
3505
+ }
3506
+ },
3507
+ {
3508
+ "search": "sonic-webgpu — GPU compute / effects (companion to sonic-shader, not a clone).\n",
3509
+ "files": {
3510
+ "core/components/functional/webgpu/webgpu.md": {
3511
+ "title": "WebGPU",
3512
+ "hashes": {
3513
+ "webgpu": {
3514
+ "count": 1,
3515
+ "title": "",
3516
+ "type": "paragraph"
3517
+ }
3518
+ }
3519
+ }
3520
+ }
3521
+ },
3522
+ {
3523
+ "search": "Opt-in import:\n",
3524
+ "files": {
3525
+ "core/components/functional/webgpu/webgpu.md": {
3526
+ "title": "WebGPU",
3527
+ "hashes": {
3528
+ "webgpu": {
3529
+ "count": 1,
3530
+ "title": "",
3531
+ "type": "paragraph"
3532
+ }
3533
+ }
3534
+ }
3535
+ }
3536
+ },
3537
+ {
3538
+ "search": "Harris → patches → WebGPU mosaic: Visual stack.\n",
3539
+ "files": {
3540
+ "core/components/functional/webgpu/webgpu.md": {
3541
+ "title": "WebGPU",
3542
+ "hashes": {
3543
+ "webgpu": {
3544
+ "count": 1,
3545
+ "title": "",
3546
+ "type": "paragraph"
3547
+ }
3548
+ }
3549
+ }
3550
+ }
3551
+ },
3552
+ {
3553
+ "search": "Simulation: param0 = speed, param1 = mouse attraction. WebGPU compute when available, otherwise CPU.\n",
3554
+ "files": {
3555
+ "core/components/functional/webgpu/webgpu.md": {
3556
+ "title": "WebGPU",
3557
+ "hashes": {
3558
+ "demo--particles-compute": {
3559
+ "count": 1,
3560
+ "title": "Demo — particles (compute)",
3561
+ "type": "paragraph"
3562
+ }
3563
+ }
3564
+ }
3565
+ }
3566
+ },
3567
+ {
3568
+ "search": "Same MediaRef / DP bridge as the rest of the stack. No live texture bus with sonic-shader (separate contexts).\n",
3569
+ "files": {
3570
+ "core/components/functional/webgpu/webgpu.md": {
3571
+ "title": "WebGPU",
3572
+ "hashes": {
3573
+ "chaining": {
3574
+ "count": 1,
3575
+ "title": "Chaining",
3576
+ "type": "paragraph"
3577
+ }
3578
+ }
3579
+ }
3580
+ }
3581
+ },
3582
+ {
3583
+ "search": "concorde-webgpu.bundle.js after the core.\n",
3584
+ "files": {
3585
+ "core/components/functional/webgpu/webgpu.md": {
3586
+ "title": "WebGPU",
3587
+ "hashes": {
3588
+ "cdn": {
3589
+ "count": 1,
3590
+ "title": "CDN",
3591
+ "type": "paragraph"
3592
+ }
3593
+ }
3594
+ }
3595
+ }
3596
+ },
2377
3597
  {
2378
3598
  "search": "Alert",
2379
3599
  "files": {
@@ -3364,6 +4584,21 @@
3364
4584
  }
3365
4585
  }
3366
4586
  },
4587
+ {
4588
+ "search": "Opt-in addons (HF / shader / WebGPU): Visual stack.\n",
4589
+ "files": {
4590
+ "docs/_core-concept/dataFlow.md": {
4591
+ "title": "Data flow",
4592
+ "hashes": {
4593
+ "quick-map": {
4594
+ "count": 1,
4595
+ "title": "Quick map",
4596
+ "type": "paragraph"
4597
+ }
4598
+ }
4599
+ }
4600
+ }
4601
+ },
3367
4602
  {
3368
4603
  "search": "Skill: concorde-get-set-dp in the package ai/ folder.\n",
3369
4604
  "files": {
@@ -7254,6 +8489,96 @@
7254
8489
  }
7255
8490
  }
7256
8491
  },
8492
+ {
8493
+ "search": "CDN addons",
8494
+ "files": {
8495
+ "docs/_getting-started/cdn-addons.md": {
8496
+ "title": "CDN addons",
8497
+ "hashes": {
8498
+ "cdn-addons": {
8499
+ "count": 1,
8500
+ "title": "",
8501
+ "type": "page"
8502
+ }
8503
+ }
8504
+ }
8505
+ }
8506
+ },
8507
+ {
8508
+ "search": "Heavy opt-in features stay out of concorde-core.bundle.js. Load the core bundle first, then the addon you need.\n",
8509
+ "files": {
8510
+ "docs/_getting-started/cdn-addons.md": {
8511
+ "title": "CDN addons",
8512
+ "hashes": {
8513
+ "cdn-addons": {
8514
+ "count": 1,
8515
+ "title": "",
8516
+ "type": "paragraph"
8517
+ }
8518
+ }
8519
+ }
8520
+ }
8521
+ },
8522
+ {
8523
+ "search": "npm: @supersoniks/concorde/bundle/3d, …/bundle/shader, …/bundle/webgpu, …/bundle/hugging-face-infer (IIFE). ESM twins: …/bundle/3d/es, etc.\n",
8524
+ "files": {
8525
+ "docs/_getting-started/cdn-addons.md": {
8526
+ "title": "CDN addons",
8527
+ "hashes": {
8528
+ "cdn-addons": {
8529
+ "count": 1,
8530
+ "title": "",
8531
+ "type": "paragraph"
8532
+ }
8533
+ }
8534
+ }
8535
+ }
8536
+ },
8537
+ {
8538
+ "search": "Scripts in the descriptor are awaited before nodes are created. A failed loadJS throws (no UI parse without deps). Prefer the IIFE .bundle.js files. Descriptors (js[], markup, innerHTML) must be trusted.\n",
8539
+ "files": {
8540
+ "docs/_getting-started/cdn-addons.md": {
8541
+ "title": "CDN addons",
8542
+ "hashes": {
8543
+ "sdui-js": {
8544
+ "count": 1,
8545
+ "title": "SDUI (`js[]`)",
8546
+ "type": "paragraph"
8547
+ }
8548
+ }
8549
+ }
8550
+ }
8551
+ },
8552
+ {
8553
+ "search": "The CE alone is not enough: configure runtime + allowlist once (page script or app entry). The IIFE exposes window.ConcordeHF.\n",
8554
+ "files": {
8555
+ "docs/_getting-started/cdn-addons.md": {
8556
+ "title": "CDN addons",
8557
+ "hashes": {
8558
+ "hugging-face--minimal-bootstrap": {
8559
+ "count": 1,
8560
+ "title": "Hugging Face — minimal bootstrap",
8561
+ "type": "paragraph"
8562
+ }
8563
+ }
8564
+ }
8565
+ }
8566
+ },
8567
+ {
8568
+ "search": "Peer deps (npm, optional): three@0.180.0, @huggingface/transformers@4.3.0. Not needed when using the CDN IIFE addons (Three is inlined in concorde-3d; Transformers.js stays on its own CDN via configureHuggingFace).\n",
8569
+ "files": {
8570
+ "docs/_getting-started/cdn-addons.md": {
8571
+ "title": "CDN addons",
8572
+ "hashes": {
8573
+ "hugging-face--minimal-bootstrap": {
8574
+ "count": 1,
8575
+ "title": "Hugging Face — minimal bootstrap",
8576
+ "type": "paragraph"
8577
+ }
8578
+ }
8579
+ }
8580
+ }
8581
+ },
7257
8582
  {
7258
8583
  "search": "Manual installation (Vite)",
7259
8584
  "files": {
@@ -7780,7 +9105,7 @@
7780
9105
  }
7781
9106
  },
7782
9107
  {
7783
- "search": "In the case where it can be directly used in a page, it should also be globally referenced, especially considering the creation of specific bundles in the future.\n",
9108
+ "search": "In the case where it can be directly used in a page, it should also be globally referenced. Heavy / optional features (3d, shader, webgpu, hugging-face) use CDN addon bundles — see CDN addons — and must not be added to functional.ts / ui.ts.\n",
7784
9109
  "files": {
7785
9110
  "docs/_getting-started/create-a-component.md": {
7786
9111
  "title": "Creating components",
@@ -9508,5 +10833,95 @@
9508
10833
  }
9509
10834
  }
9510
10835
  }
10836
+ },
10837
+ {
10838
+ "search": "Visual stack",
10839
+ "files": {
10840
+ "docs/_misc/visual-stack.md": {
10841
+ "title": "Visual stack",
10842
+ "hashes": {
10843
+ "visual-stack": {
10844
+ "count": 1,
10845
+ "title": "",
10846
+ "type": "page"
10847
+ }
10848
+ }
10849
+ }
10850
+ }
10851
+ },
10852
+ {
10853
+ "search": "Examples of chaining opt-in addons (HF, shader, WebGPU). Outside the main “functional” flow.\n",
10854
+ "files": {
10855
+ "docs/_misc/visual-stack.md": {
10856
+ "title": "Visual stack",
10857
+ "hashes": {
10858
+ "visual-stack": {
10859
+ "count": 1,
10860
+ "title": "",
10861
+ "type": "paragraph"
10862
+ }
10863
+ }
10864
+ }
10865
+ }
10866
+ },
10867
+ {
10868
+ "search": "Photo → sonic-hugging-face-infer (depth) → sonic-shader (parallax) → extract → sonic-jsonata (stats / thresholds).\n",
10869
+ "files": {
10870
+ "docs/_misc/visual-stack.md": {
10871
+ "title": "Visual stack",
10872
+ "hashes": {
10873
+ "hf-depth--parallax": {
10874
+ "count": 1,
10875
+ "title": "HF depth → parallax",
10876
+ "type": "paragraph"
10877
+ }
10878
+ }
10879
+ }
10880
+ }
10881
+ },
10882
+ {
10883
+ "search": "Do not pipe texture channels through jsonata on every frame / slider: that forces rebuilds. JSONata is for scalar derivatives, not the media bus.\n",
10884
+ "files": {
10885
+ "docs/_misc/visual-stack.md": {
10886
+ "title": "Visual stack",
10887
+ "hashes": {
10888
+ "golden-rule": {
10889
+ "count": 1,
10890
+ "title": "Golden rule",
10891
+ "type": "paragraph"
10892
+ }
10893
+ }
10894
+ }
10895
+ }
10896
+ },
10897
+ {
10898
+ "search": "sonic-shader detects corners (Harris) and extracts patches → channel0…3 on sonic-webgpu (kernel=&quot;image&quot;): GPU mosaic.\n",
10899
+ "files": {
10900
+ "docs/_misc/visual-stack.md": {
10901
+ "title": "Visual stack",
10902
+ "hashes": {
10903
+ "harris--patches--webgpu": {
10904
+ "count": 1,
10905
+ "title": "Harris → patches → WebGPU",
10906
+ "type": "paragraph"
10907
+ }
10908
+ }
10909
+ }
10910
+ }
10911
+ },
10912
+ {
10913
+ "search": "SonicMediaRef / toMediaUrl / cloneMediaRef — @supersoniks/concorde/core/utils/mediaRef.\n",
10914
+ "files": {
10915
+ "docs/_misc/visual-stack.md": {
10916
+ "title": "Visual stack",
10917
+ "hashes": {
10918
+ "media-contract": {
10919
+ "count": 1,
10920
+ "title": "Media contract",
10921
+ "type": "paragraph"
10922
+ }
10923
+ }
10924
+ }
10925
+ }
9511
10926
  }
9512
10927
  ]