@supersoniks/concorde 5.1.0 → 5.1.2

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 (628) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +153 -0
  2. package/.agents/skills/{concorde-component-docs/template.md → concorde-docs/templates/component.md} +6 -2
  3. package/.agents/skills/concorde-docs/templates/decorator.md +43 -0
  4. package/.agents/skills/concorde-docs/templates/guide.md +25 -0
  5. package/.claude/launch.json +15 -0
  6. package/.claude/vite.http.config.mjs +7 -0
  7. package/.taste-skill/after/desktop-fold.jpg +0 -0
  8. package/.taste-skill/after/desktop-page-01.jpg +0 -0
  9. package/.taste-skill/after/desktop-page-02.jpg +0 -0
  10. package/.taste-skill/after/desktop-page-03.jpg +0 -0
  11. package/.taste-skill/after/mobile-fold.jpg +0 -0
  12. package/.taste-skill/after/mobile-page-01.jpg +0 -0
  13. package/.taste-skill/after/report.json +4103 -0
  14. package/.taste-skill/after/tablet-fold.jpg +0 -0
  15. package/.taste-skill/after/tablet-page-01.jpg +0 -0
  16. package/.taste-skill/after/tablet-page-02.jpg +0 -0
  17. package/.taste-skill/before/desktop-fold.jpg +0 -0
  18. package/.taste-skill/before/desktop-page-01.jpg +0 -0
  19. package/.taste-skill/before/desktop-page-02.jpg +0 -0
  20. package/.taste-skill/before/mobile-fold.jpg +0 -0
  21. package/.taste-skill/before/mobile-page-01.jpg +0 -0
  22. package/.taste-skill/before/report.json +2556 -0
  23. package/.taste-skill/before/tablet-fold.jpg +0 -0
  24. package/.taste-skill/before/tablet-page-01.jpg +0 -0
  25. package/.taste-skill/direction.json +510 -0
  26. package/.taste-skill/notes.md +84 -0
  27. package/.taste-skill/prod/desktop-fold.jpg +0 -0
  28. package/.taste-skill/prod/desktop-page-01.jpg +0 -0
  29. package/.taste-skill/prod/desktop-page-02.jpg +0 -0
  30. package/.taste-skill/prod/desktop-page-03.jpg +0 -0
  31. package/.taste-skill/prod/mobile-fold.jpg +0 -0
  32. package/.taste-skill/prod/mobile-page-01.jpg +0 -0
  33. package/.taste-skill/prod/mobile-page-02.jpg +0 -0
  34. package/.taste-skill/prod/report.json +1973 -0
  35. package/.taste-skill/prod/tablet-fold.jpg +0 -0
  36. package/.taste-skill/prod/tablet-page-01.jpg +0 -0
  37. package/.taste-skill/prod/tablet-page-02.jpg +0 -0
  38. package/.tmp-cem/custom-elements.json +2013 -2013
  39. package/AUDIT.md +228 -0
  40. package/PLAN-AMELIORATION.md +220 -0
  41. package/PLAN-DOCS-AGENTS.md +80 -0
  42. package/README.md +3 -3
  43. package/ai/skills/concorde/SKILL.md +1 -1
  44. package/ai/skills/concorde-get-set-dp/SKILL.md +3 -3
  45. package/ai/skills/concorde-theme/SKILL.md +1 -1
  46. package/build-infos.json +1 -1
  47. package/concorde-core.bundle.js +16 -16
  48. package/concorde-core.es.js +235 -233
  49. package/dist/concorde-core.bundle.js +16 -16
  50. package/dist/concorde-core.es.js +235 -233
  51. package/dist/img/archive/concorde-001-2cv.webp +0 -0
  52. package/dist/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  53. package/dist/img/archive/concorde-red-arrows-2002.webm +0 -0
  54. package/dist/img/archive/credits.json +28 -0
  55. package/docs/.htaccess +75 -0
  56. package/docs/404.html +15 -0
  57. package/docs/404.md +5 -0
  58. package/docs/assets/index-BgG6FFPt.js +11765 -0
  59. package/docs/assets/index-x89XINSG.css +1 -0
  60. package/docs/core/components/functional/date/date.html +211 -0
  61. package/docs/core/components/functional/date/date.md +150 -0
  62. package/docs/core/components/functional/fetch/fetch.html +180 -0
  63. package/docs/core/components/functional/fetch/fetch.md +108 -0
  64. package/docs/core/components/functional/if/if.html +65 -0
  65. package/docs/core/components/functional/if/if.md +34 -0
  66. package/docs/core/components/functional/jsonata/jsonata.html +110 -0
  67. package/docs/core/components/functional/jsonata/jsonata.md +61 -0
  68. package/docs/core/components/functional/list/list.html +198 -0
  69. package/docs/core/components/functional/list/list.md +121 -0
  70. package/docs/core/components/functional/mix/mix.html +78 -0
  71. package/docs/core/components/functional/mix/mix.md +46 -0
  72. package/docs/core/components/functional/queue/queue.html +155 -0
  73. package/docs/core/components/functional/queue/queue.md +51 -0
  74. package/docs/core/components/functional/router/router.html +154 -0
  75. package/docs/core/components/functional/router/router.md +93 -0
  76. package/docs/core/components/functional/sdui/sdui-extension-points.html +127 -0
  77. package/docs/core/components/functional/sdui/sdui-extension-points.md +94 -0
  78. package/docs/core/components/functional/sdui/sdui.html +397 -0
  79. package/docs/core/components/functional/sdui/sdui.md +307 -0
  80. package/docs/core/components/functional/states/states.html +141 -0
  81. package/docs/core/components/functional/states/states.md +112 -0
  82. package/docs/core/components/functional/submit/submit.html +178 -0
  83. package/docs/core/components/functional/submit/submit.md +106 -0
  84. package/docs/{crawl/core → core}/components/functional/subscriber/subscriber.html +6 -5
  85. package/docs/core/components/functional/subscriber/subscriber.md +91 -0
  86. package/docs/core/components/functional/translation/translation.html +60 -0
  87. package/docs/core/components/functional/translation/translation.md +38 -0
  88. package/docs/core/components/functional/value/value.html +81 -0
  89. package/docs/core/components/functional/value/value.md +47 -0
  90. package/docs/core/components/ui/alert/alert.html +201 -0
  91. package/docs/core/components/ui/alert/alert.md +186 -0
  92. package/docs/core/components/ui/alert-messages/alert-messages.html +132 -0
  93. package/docs/core/components/ui/alert-messages/alert-messages.md +85 -0
  94. package/docs/core/components/ui/badge/badge.html +197 -0
  95. package/docs/core/components/ui/badge/badge.md +181 -0
  96. package/docs/core/components/ui/button/button.html +309 -0
  97. package/docs/core/components/ui/button/button.md +216 -0
  98. package/docs/core/components/ui/captcha/captcha.html +80 -0
  99. package/docs/core/components/ui/captcha/captcha.md +56 -0
  100. package/docs/core/components/ui/card/card.html +254 -0
  101. package/docs/core/components/ui/card/card.md +215 -0
  102. package/docs/core/components/ui/divider/divider.html +144 -0
  103. package/docs/core/components/ui/divider/divider.md +126 -0
  104. package/docs/core/components/ui/form/checkbox/checkbox.html +200 -0
  105. package/docs/core/components/ui/form/checkbox/checkbox.md +125 -0
  106. package/docs/core/components/ui/form/fieldset/fieldset.html +238 -0
  107. package/docs/core/components/ui/form/fieldset/fieldset.md +161 -0
  108. package/docs/core/components/ui/form/form-actions/form-actions.html +122 -0
  109. package/docs/core/components/ui/form/form-actions/form-actions.md +98 -0
  110. package/docs/core/components/ui/form/form-layout/form-layout.html +115 -0
  111. package/docs/core/components/ui/form/form-layout/form-layout.md +109 -0
  112. package/docs/core/components/ui/form/input/input.html +235 -0
  113. package/docs/core/components/ui/form/input/input.md +142 -0
  114. package/docs/core/components/ui/form/radio/radio.html +144 -0
  115. package/docs/core/components/ui/form/radio/radio.md +78 -0
  116. package/docs/core/components/ui/form/select/select.html +178 -0
  117. package/docs/core/components/ui/form/select/select.md +86 -0
  118. package/docs/core/components/ui/form/switch/switch.html +146 -0
  119. package/docs/core/components/ui/form/switch/switch.md +80 -0
  120. package/docs/core/components/ui/form/textarea/textarea.html +162 -0
  121. package/docs/core/components/ui/form/textarea/textarea.md +82 -0
  122. package/docs/core/components/ui/group/group.html +113 -0
  123. package/docs/core/components/ui/group/group.md +77 -0
  124. package/docs/core/components/ui/icon/icon.html +223 -0
  125. package/docs/core/components/ui/icon/icon.md +214 -0
  126. package/docs/core/components/ui/image/image.html +194 -0
  127. package/docs/core/components/ui/image/image.md +167 -0
  128. package/docs/core/components/ui/link/link.html +101 -0
  129. package/docs/core/components/ui/link/link.md +81 -0
  130. package/docs/core/components/ui/loader/loader.html +114 -0
  131. package/docs/core/components/ui/loader/loader.md +87 -0
  132. package/docs/{crawl/core → core}/components/ui/menu/menu.html +189 -116
  133. package/docs/core/components/ui/menu/menu.md +370 -0
  134. package/docs/core/components/ui/modal/modal.html +324 -0
  135. package/docs/core/components/ui/modal/modal.md +211 -0
  136. package/docs/core/components/ui/pop/pop.html +250 -0
  137. package/docs/core/components/ui/pop/pop.md +216 -0
  138. package/docs/core/components/ui/progress/progress.html +132 -0
  139. package/docs/core/components/ui/progress/progress.md +109 -0
  140. package/docs/core/components/ui/table/table.html +333 -0
  141. package/docs/core/components/ui/table/table.md +267 -0
  142. package/docs/core/components/ui/theme/theme.html +116 -0
  143. package/docs/core/components/ui/theme/theme.md +97 -0
  144. package/docs/core/components/ui/toast/toast.html +185 -0
  145. package/docs/core/components/ui/toast/toast.md +147 -0
  146. package/docs/core/components/ui/tooltip/tooltip.html +112 -0
  147. package/docs/core/components/ui/tooltip/tooltip.md +89 -0
  148. package/docs/docs/decorators/ancestor-attribute.html +71 -0
  149. package/docs/docs/decorators/ancestor-attribute.md +59 -0
  150. package/docs/docs/decorators/auto-subscribe.html +61 -0
  151. package/docs/docs/decorators/auto-subscribe.md +40 -0
  152. package/docs/docs/decorators/bind.html +86 -0
  153. package/docs/docs/decorators/bind.md +77 -0
  154. package/docs/docs/decorators/get.html +166 -0
  155. package/docs/docs/decorators/get.md +160 -0
  156. package/docs/docs/decorators/handle.html +139 -0
  157. package/docs/docs/decorators/handle.md +119 -0
  158. package/docs/docs/decorators/on-assign.html +72 -0
  159. package/docs/docs/decorators/on-assign.md +63 -0
  160. package/docs/docs/decorators/patch.html +76 -0
  161. package/docs/docs/decorators/patch.md +44 -0
  162. package/docs/docs/decorators/post.html +150 -0
  163. package/docs/docs/decorators/post.md +134 -0
  164. package/docs/docs/decorators/publish.html +74 -0
  165. package/docs/docs/decorators/publish.md +56 -0
  166. package/docs/docs/decorators/put.html +83 -0
  167. package/docs/docs/decorators/put.md +51 -0
  168. package/docs/docs/decorators/subscribe.html +91 -0
  169. package/docs/docs/decorators/subscribe.md +87 -0
  170. package/docs/docs/decorators/wait-for-ancestors.html +82 -0
  171. package/docs/docs/decorators/wait-for-ancestors.md +76 -0
  172. package/docs/docs/directives/sub.html +79 -0
  173. package/docs/docs/directives/sub.md +75 -0
  174. package/docs/docs/directives/t.html +91 -0
  175. package/docs/docs/directives/t.md +73 -0
  176. package/docs/{crawl/docs/_getting-started → docs/getting-started}/ai-agents.html +12 -11
  177. package/{src/docs/_getting-started → docs/docs/getting-started}/ai-agents.md +3 -3
  178. package/docs/docs/getting-started/components.html +27 -0
  179. package/docs/docs/getting-started/components.md +5 -0
  180. package/docs/{crawl/docs/_getting-started → docs/getting-started}/create-a-component.html +11 -14
  181. package/docs/{src/docs/_getting-started → docs/getting-started}/create-a-component.md +3 -6
  182. package/docs/{crawl/docs/_core-concept → docs/getting-started}/dataFlow.html +26 -29
  183. package/docs/{src/docs/_core-concept → docs/getting-started}/dataFlow.md +17 -18
  184. package/docs/docs/getting-started/installation.html +69 -0
  185. package/docs/docs/getting-started/installation.md +36 -0
  186. package/docs/{crawl/docs/_getting-started → docs/getting-started}/my-first-component.html +13 -22
  187. package/docs/{src/docs/_getting-started → docs/getting-started}/my-first-component.md +5 -14
  188. package/docs/docs/getting-started/start.html +47 -0
  189. package/{src/docs/_getting-started → docs/docs/getting-started}/start.md +1 -13
  190. package/docs/docs/getting-started/theming.html +334 -0
  191. package/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +2 -2
  192. package/docs/docs/index.html +99 -0
  193. package/docs/{crawl/docs/_misc → docs/misc}/api-configuration.html +18 -18
  194. package/docs/{src/docs/_misc → docs/misc}/api-configuration.md +10 -12
  195. package/docs/{crawl/docs/_misc → docs/misc}/dataProviderKey.html +12 -11
  196. package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
  197. package/docs/{crawl/docs/_misc → docs/misc}/docs-mock-api.html +25 -28
  198. package/docs/{src/docs/_misc → docs/misc}/docs-mock-api.md +12 -13
  199. package/docs/{crawl/docs/_misc → docs/misc}/dynamic-path.html +16 -15
  200. package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
  201. package/docs/{crawl/docs/_misc → docs/misc}/endpoint.html +16 -15
  202. package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
  203. package/docs/{crawl/docs/_misc → docs/misc}/html-integration.html +12 -15
  204. package/docs/{src/docs/_misc → docs/misc}/html-integration.md +4 -5
  205. package/docs/docs-mock-api-sw.js +60 -223
  206. package/docs/docs-mock-api-sw.js.map +4 -4
  207. package/docs/hubs/decorators.html +443 -0
  208. package/docs/hubs/form-components.html +404 -0
  209. package/docs/hubs/remote-data.html +371 -0
  210. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  211. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  212. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  213. package/docs/img/archive/credits.json +28 -0
  214. package/docs/img/concorde/plane_01.jpg +0 -0
  215. package/docs/img/concorde/plane_02.jpg +0 -0
  216. package/docs/img/concorde/plane_03.jpg +0 -0
  217. package/docs/img/concorde/plane_04.jpg +0 -0
  218. package/docs/img/concorde/plane_05.jpg +0 -0
  219. package/docs/img/concorde/plane_06.jpg +0 -0
  220. package/docs/img/concorde/plane_07.jpg +0 -0
  221. package/docs/img/concorde/plane_08.jpg +0 -0
  222. package/docs/img/concorde/plane_09.jpg +0 -0
  223. package/docs/img/concorde/plane_10.jpg +0 -0
  224. package/docs/img/concorde/plane_11.jpg +0 -0
  225. package/docs/img/concorde/plane_12.jpg +0 -0
  226. package/docs/img/concorde/plane_13.jpg +0 -0
  227. package/docs/index.html +96 -67
  228. package/docs/index.md +22 -0
  229. package/docs/llms-full.txt +3329 -3295
  230. package/docs/llms.txt +94 -92
  231. package/docs/robots.txt +11 -10
  232. package/docs/sitemap.xml +78 -78
  233. package/docs/src/core/components/functional/date/date.md +91 -231
  234. package/docs/src/core/components/functional/fetch/fetch.md +66 -83
  235. package/docs/src/core/components/functional/if/if.md +28 -3
  236. package/docs/src/core/components/functional/jsonata/jsonata.md +42 -37
  237. package/docs/src/core/components/functional/list/list.md +99 -43
  238. package/docs/src/core/components/functional/mix/mix.md +31 -26
  239. package/docs/src/core/components/functional/queue/queue.md +40 -61
  240. package/docs/src/core/components/functional/router/router.md +64 -65
  241. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  242. package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
  243. package/docs/src/core/components/functional/sdui/example.json +19 -86
  244. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  245. package/docs/src/core/components/functional/sdui/sdui.md +196 -245
  246. package/docs/src/core/components/functional/states/states.md +86 -61
  247. package/docs/src/core/components/functional/submit/submit.md +64 -72
  248. package/docs/src/core/components/functional/translation/translation.md +38 -0
  249. package/docs/src/core/components/functional/value/value.md +34 -22
  250. package/docs/src/core/components/ui/alert/alert.md +139 -74
  251. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  252. package/docs/src/core/components/ui/badge/badge.md +137 -83
  253. package/docs/src/core/components/ui/button/button.md +139 -105
  254. package/docs/src/core/components/ui/captcha/captcha.md +50 -6
  255. package/docs/src/core/components/ui/card/card.md +183 -65
  256. package/docs/src/core/components/ui/divider/divider.md +104 -13
  257. package/docs/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  258. package/docs/src/core/components/ui/form/fieldset/fieldset.md +135 -103
  259. package/docs/src/core/components/ui/form/form-actions/form-actions.md +71 -50
  260. package/docs/src/core/components/ui/form/form-layout/form-layout.md +99 -34
  261. package/docs/src/core/components/ui/form/input/input.md +95 -95
  262. package/docs/src/core/components/ui/form/radio/radio.md +55 -34
  263. package/docs/src/core/components/ui/form/select/select.md +60 -45
  264. package/docs/src/core/components/ui/form/switch/switch.md +57 -34
  265. package/docs/src/core/components/ui/form/textarea/textarea.md +55 -38
  266. package/docs/src/core/components/ui/group/group.md +49 -47
  267. package/docs/src/core/components/ui/icon/icon.md +132 -43
  268. package/docs/src/core/components/ui/image/image.md +132 -72
  269. package/docs/src/core/components/ui/link/link.md +46 -8
  270. package/docs/src/core/components/ui/loader/loader.md +55 -23
  271. package/docs/src/core/components/ui/menu/menu.md +155 -114
  272. package/docs/src/core/components/ui/modal/modal.md +154 -62
  273. package/docs/src/core/components/ui/pop/pop.md +185 -65
  274. package/docs/src/core/components/ui/progress/progress.md +76 -30
  275. package/docs/src/core/components/ui/table/table.md +146 -334
  276. package/docs/src/core/components/ui/theme/theme.md +97 -0
  277. package/docs/src/core/components/ui/toast/toast.md +80 -99
  278. package/docs/src/core/components/ui/tooltip/tooltip.md +52 -45
  279. package/docs/src/docs/decorators/ancestor-attribute.md +59 -0
  280. package/docs/src/docs/decorators/auto-subscribe.md +40 -0
  281. package/docs/src/docs/decorators/bind.md +77 -0
  282. package/docs/src/docs/decorators/get.md +160 -0
  283. package/docs/src/docs/decorators/handle.md +119 -0
  284. package/docs/src/docs/decorators/on-assign.md +63 -0
  285. package/docs/src/docs/decorators/patch.md +44 -0
  286. package/docs/src/docs/decorators/post.md +134 -0
  287. package/docs/src/docs/decorators/publish.md +56 -0
  288. package/docs/src/docs/decorators/put.md +51 -0
  289. package/docs/src/docs/decorators/subscribe.md +87 -0
  290. package/docs/src/docs/decorators/wait-for-ancestors.md +76 -0
  291. package/docs/src/docs/directives/sub.md +75 -0
  292. package/docs/src/docs/directives/t.md +73 -0
  293. package/docs/src/docs/{_getting-started → getting-started}/ai-agents.md +3 -3
  294. package/docs/src/docs/getting-started/components.md +5 -0
  295. package/{src/docs/_getting-started → docs/src/docs/getting-started}/create-a-component.md +3 -6
  296. package/{src/docs/_core-concept → docs/src/docs/getting-started}/dataFlow.md +17 -18
  297. package/docs/src/docs/getting-started/installation.md +36 -0
  298. package/{src/docs/_getting-started → docs/src/docs/getting-started}/my-first-component.md +5 -14
  299. package/docs/src/docs/getting-started/start.md +35 -0
  300. package/docs/src/docs/getting-started/theming.md +253 -0
  301. package/{src/docs/_misc → docs/src/docs/misc}/api-configuration.md +10 -12
  302. package/docs/src/docs/{_misc → misc}/dataProviderKey.md +4 -4
  303. package/{src/docs/_misc → docs/src/docs/misc}/docs-mock-api.md +12 -13
  304. package/docs/src/docs/{_misc → misc}/dynamic-path.md +8 -8
  305. package/docs/src/docs/{_misc → misc}/endpoint.md +8 -8
  306. package/{src/docs/_misc → docs/src/docs/misc}/html-integration.md +4 -5
  307. package/docs/src/docs/search/docs-search.json +3729 -2949
  308. package/docs/src/tsconfig.json +176 -5
  309. package/index.html +94 -67
  310. package/package.json +11 -4
  311. package/public/docs-mock-api-sw.js +58 -223
  312. package/public/docs-mock-api-sw.js.map +4 -4
  313. package/public/img/archive/concorde-001-2cv.webp +0 -0
  314. package/public/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  315. package/public/img/archive/concorde-red-arrows-2002.webm +0 -0
  316. package/public/img/archive/credits.json +28 -0
  317. package/public/img/concorde/plane_01.jpg +0 -0
  318. package/public/img/concorde/plane_02.jpg +0 -0
  319. package/public/img/concorde/plane_03.jpg +0 -0
  320. package/public/img/concorde/plane_04.jpg +0 -0
  321. package/public/img/concorde/plane_05.jpg +0 -0
  322. package/public/img/concorde/plane_06.jpg +0 -0
  323. package/public/img/concorde/plane_07.jpg +0 -0
  324. package/public/img/concorde/plane_08.jpg +0 -0
  325. package/public/img/concorde/plane_09.jpg +0 -0
  326. package/public/img/concorde/plane_10.jpg +0 -0
  327. package/public/img/concorde/plane_11.jpg +0 -0
  328. package/public/img/concorde/plane_12.jpg +0 -0
  329. package/public/img/concorde/plane_13.jpg +0 -0
  330. package/public/robots.txt +11 -10
  331. package/scripts/docs-markdown-vite-plugin.ts +37 -0
  332. package/scripts/docs-public-url.mjs +50 -0
  333. package/scripts/docs.htaccess +75 -0
  334. package/scripts/generate-crawl-docs.mjs +207 -116
  335. package/scripts/generate-crawl-docs.test.mjs +124 -0
  336. package/scripts/post-build-docs.js +34 -50
  337. package/scripts/post-build.mjs +0 -0
  338. package/src/core/components/functional/date/date.md +91 -231
  339. package/src/core/components/functional/fetch/fetch.md +66 -83
  340. package/src/core/components/functional/if/if.md +28 -3
  341. package/src/core/components/functional/if/if.ts +0 -0
  342. package/src/core/components/functional/jsonata/jsonata.md +42 -37
  343. package/src/core/components/functional/list/list.demo.ts +0 -0
  344. package/src/core/components/functional/list/list.md +99 -43
  345. package/src/core/components/functional/mix/mix.md +31 -26
  346. package/src/core/components/functional/queue/queue.demo.ts +10 -7
  347. package/src/core/components/functional/queue/queue.md +40 -61
  348. package/src/core/components/functional/router/router.demo.ts +16 -16
  349. package/src/core/components/functional/router/router.md +64 -65
  350. package/src/core/components/functional/router/router.ts +0 -0
  351. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
  352. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  353. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  354. package/src/core/components/functional/sdui/example.json +19 -86
  355. package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  356. package/src/core/components/functional/sdui/sdui.md +187 -358
  357. package/src/core/components/functional/sdui/types.ts +0 -0
  358. package/src/core/components/functional/states/states.demo.ts +21 -22
  359. package/src/core/components/functional/states/states.md +86 -61
  360. package/src/core/components/functional/states/states.ts +1 -1
  361. package/src/core/components/functional/submit/submit.md +64 -72
  362. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  363. package/src/core/components/functional/translation/translation.md +38 -0
  364. package/src/core/components/functional/value/value.md +34 -22
  365. package/src/core/components/functional/value/value.ts +0 -0
  366. package/src/core/components/ui/_css/size.ts +0 -0
  367. package/src/core/components/ui/alert/alert.md +48 -58
  368. package/src/core/components/ui/badge/badge.md +27 -34
  369. package/src/core/components/ui/button/button.md +139 -106
  370. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  371. package/src/core/components/ui/captcha/captcha.md +17 -32
  372. package/src/core/components/ui/card/card.md +6 -6
  373. package/src/core/components/ui/divider/divider.md +8 -11
  374. package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  375. package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
  376. package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
  377. package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
  378. package/src/core/components/ui/form/input/input.md +95 -95
  379. package/src/core/components/ui/form/radio/radio.md +55 -34
  380. package/src/core/components/ui/form/select/select.md +60 -45
  381. package/src/core/components/ui/form/switch/switch.md +57 -34
  382. package/src/core/components/ui/form/textarea/textarea.md +55 -38
  383. package/src/core/components/ui/group/group.md +35 -33
  384. package/src/core/components/ui/icon/icon.md +4 -4
  385. package/src/core/components/ui/image/image.md +41 -107
  386. package/src/core/components/ui/link/link.md +6 -6
  387. package/src/core/components/ui/loader/loader.md +30 -55
  388. package/src/core/components/ui/menu/menu.md +27 -27
  389. package/src/core/components/ui/modal/modal.md +72 -96
  390. package/src/core/components/ui/modal/modal.ts +14 -11
  391. package/src/core/components/ui/pop/pop.md +80 -158
  392. package/src/core/components/ui/progress/progress.md +2 -2
  393. package/src/core/components/ui/table/table.md +91 -255
  394. package/src/core/components/ui/theme/theme.md +11 -36
  395. package/src/core/components/ui/toast/toast.md +48 -117
  396. package/src/core/components/ui/tooltip/tooltip.md +27 -62
  397. package/src/core/mixins/Subscriber.ts +0 -0
  398. package/src/core/utils/DataBindObserver.ts +0 -0
  399. package/src/core/utils/LocationHandler.spec.ts +80 -0
  400. package/src/core/utils/LocationHandler.ts +5 -9
  401. package/src/core/utils/Objects.ts +0 -0
  402. package/src/core/utils/route.ts +0 -0
  403. package/src/docs/code.ts +88 -75
  404. package/src/docs/components/docs-demo-sources.ts +70 -147
  405. package/src/docs/components/docs-lit-demo.ts +20 -40
  406. package/src/docs/components/docs-source-link.ts +0 -82
  407. package/src/docs/decorators/ancestor-attribute.md +59 -0
  408. package/src/docs/decorators/auto-subscribe.md +40 -0
  409. package/src/docs/decorators/bind.md +77 -0
  410. package/src/docs/decorators/get.md +160 -0
  411. package/src/docs/decorators/handle.md +119 -0
  412. package/src/docs/decorators/on-assign.md +63 -0
  413. package/src/docs/decorators/patch.md +44 -0
  414. package/src/docs/decorators/post.md +134 -0
  415. package/src/docs/decorators/publish.md +56 -0
  416. package/src/docs/decorators/put.md +51 -0
  417. package/src/docs/decorators/subscribe.md +87 -0
  418. package/src/docs/decorators/wait-for-ancestors.md +76 -0
  419. package/src/docs/directives/sub.md +75 -0
  420. package/src/docs/directives/t.md +73 -0
  421. package/src/docs/docs-location.spec.ts +46 -0
  422. package/src/docs/docs-location.ts +123 -32
  423. package/src/docs/docs.ts +6 -2
  424. package/src/docs/example/decorators-demo-bind-demos.ts +81 -116
  425. package/src/docs/example/decorators-demo-geo.ts +30 -19
  426. package/src/docs/example/decorators-demo-post.ts +88 -186
  427. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
  428. package/src/docs/example/decorators-demo.ts +85 -98
  429. package/src/docs/example/docs-api-config-demos.ts +19 -20
  430. package/src/docs/example/docs-boarding-pass-demo.ts +134 -0
  431. package/src/docs/example/docs-flight-demos.ts +147 -0
  432. package/src/docs/example/docs-jsonata-demos.ts +52 -52
  433. package/src/docs/example/docs-list-demos.ts +43 -123
  434. package/src/docs/example/docs-provider-keys.ts +33 -28
  435. package/src/docs/example/docs-queue-demos.ts +37 -77
  436. package/src/docs/example/docs-router-demos.ts +20 -25
  437. package/src/docs/example/docs-submit-demos.ts +48 -48
  438. package/src/docs/example/docs-toggle-demos.ts +4 -3
  439. package/src/docs/example/users.ts +0 -0
  440. package/src/docs/getting-started/ai-agents.md +76 -0
  441. package/src/docs/getting-started/components.md +5 -0
  442. package/src/docs/getting-started/create-a-component.md +136 -0
  443. package/src/docs/getting-started/dataFlow.md +87 -0
  444. package/src/docs/getting-started/installation.md +36 -0
  445. package/src/docs/getting-started/my-first-component.md +227 -0
  446. package/src/docs/getting-started/start.md +35 -0
  447. package/src/docs/getting-started/theming.md +253 -0
  448. package/src/docs/header/header.ts +240 -71
  449. package/src/docs/home/catalog.ts +44 -0
  450. package/src/docs/home/home.ts +520 -0
  451. package/src/docs/home/mach-stage.ts +389 -0
  452. package/src/docs/layout.ts +12 -11
  453. package/src/docs/misc/api-configuration.md +79 -0
  454. package/src/docs/misc/dataProviderKey.md +168 -0
  455. package/src/docs/misc/docs-mock-api.md +62 -0
  456. package/src/docs/misc/dynamic-path.md +71 -0
  457. package/src/docs/misc/endpoint.md +45 -0
  458. package/src/docs/misc/html-integration.md +14 -0
  459. package/src/docs/mock-api/api-config-mock.ts +5 -0
  460. package/src/docs/mock-api/fixtures.ts +0 -278
  461. package/src/docs/mock-api/flights.ts +89 -0
  462. package/src/docs/mock-api/router.ts +3 -4
  463. package/src/docs/mock-api/urls.ts +1 -2
  464. package/src/docs/navigation/components-index.ts +56 -0
  465. package/src/docs/navigation/navigation.ts +219 -232
  466. package/src/docs/navigation/pager.ts +67 -0
  467. package/src/docs/navigation/toc.ts +101 -0
  468. package/src/docs/search/docs-search.json +2419 -4374
  469. package/src/docs/search/markdown-renderer.ts +33 -7
  470. package/src/docs/search/page.ts +9 -6
  471. package/src/docs/search/search.ts +154 -122
  472. package/src/docs/shiki/index.ts +109 -0
  473. package/src/docs/tailwind/css/base/scrollbar.css +22 -0
  474. package/src/docs/tailwind/css/base/theme.css +96 -0
  475. package/src/docs/tailwind/css/base/typography.css +4 -0
  476. package/src/docs/tailwind/css/docs/boarding-pass.css +65 -0
  477. package/src/docs/tailwind/css/docs/content.css +32 -0
  478. package/src/docs/tailwind/css/docs/page.css +10 -0
  479. package/src/docs/tailwind/css/docs.css +9 -0
  480. package/src/docs/tailwind/css/home/hero.css +210 -0
  481. package/src/docs/tailwind/css/home/motion.css +84 -0
  482. package/src/docs/tailwind/css/home/sections.css +416 -0
  483. package/src/docs/tailwind/css/tailwind.css +7 -185
  484. package/src/tsconfig.json +23 -2
  485. package/src/tsconfig.tsbuildinfo +1 -1
  486. package/tailwind.config.js +8 -4
  487. package/vite.config.mts +11 -2
  488. package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
  489. package/.github/workflows/ci.yml +0 -21
  490. package/.github-export-ignore +0 -30
  491. package/CONTRIBUTING.md +0 -59
  492. package/DEV.md +0 -54
  493. package/LICENSE +0 -21
  494. package/OPEN_SOURCE_CHECKPOINT.md +0 -133
  495. package/concorde-3d.bundle.js +0 -3960
  496. package/concorde-3d.es.js +0 -33433
  497. package/concorde-hugging-face-infer.bundle.js +0 -32
  498. package/concorde-hugging-face-infer.es.js +0 -2952
  499. package/concorde-interactive.bundle.js +0 -1157
  500. package/concorde-interactive.es.js +0 -10734
  501. package/concorde-shader.bundle.js +0 -116
  502. package/concorde-shader.es.js +0 -8353
  503. package/concorde-webgpu.bundle.js +0 -307
  504. package/concorde-webgpu.es.js +0 -8627
  505. package/docs/assets/index-D8MVWqY6.js +0 -12251
  506. package/docs/assets/index-DiD0qYvE.css +0 -1
  507. package/docs/crawl/core/components/functional/date/date.html +0 -190
  508. package/docs/crawl/core/components/functional/fetch/fetch.html +0 -109
  509. package/docs/crawl/core/components/functional/if/if.html +0 -27
  510. package/docs/crawl/core/components/functional/jsonata/jsonata.html +0 -79
  511. package/docs/crawl/core/components/functional/list/list.html +0 -70
  512. package/docs/crawl/core/components/functional/mix/mix.html +0 -45
  513. package/docs/crawl/core/components/functional/queue/queue.html +0 -96
  514. package/docs/crawl/core/components/functional/router/router.html +0 -106
  515. package/docs/crawl/core/components/functional/sdui/sdui.html +0 -269
  516. package/docs/crawl/core/components/functional/states/states.html +0 -66
  517. package/docs/crawl/core/components/functional/submit/submit.html +0 -160
  518. package/docs/crawl/core/components/functional/value/value.html +0 -51
  519. package/docs/crawl/core/components/ui/alert/alert.html +0 -110
  520. package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +0 -23
  521. package/docs/crawl/core/components/ui/badge/badge.html +0 -119
  522. package/docs/crawl/core/components/ui/button/button.html +0 -149
  523. package/docs/crawl/core/components/ui/captcha/captcha.html +0 -30
  524. package/docs/crawl/core/components/ui/card/card.html +0 -99
  525. package/docs/crawl/core/components/ui/divider/divider.html +0 -58
  526. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +0 -73
  527. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +0 -135
  528. package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +0 -79
  529. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +0 -62
  530. package/docs/crawl/core/components/ui/form/input/input.html +0 -109
  531. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +0 -38
  532. package/docs/crawl/core/components/ui/form/radio/radio.html +0 -56
  533. package/docs/crawl/core/components/ui/form/select/select.html +0 -73
  534. package/docs/crawl/core/components/ui/form/switch/switch.html +0 -56
  535. package/docs/crawl/core/components/ui/form/textarea/textarea.html +0 -59
  536. package/docs/crawl/core/components/ui/group/group.html +0 -82
  537. package/docs/crawl/core/components/ui/icon/icon.html +0 -133
  538. package/docs/crawl/core/components/ui/image/image.html +0 -110
  539. package/docs/crawl/core/components/ui/link/link.html +0 -42
  540. package/docs/crawl/core/components/ui/loader/loader.html +0 -50
  541. package/docs/crawl/core/components/ui/modal/modal.html +0 -117
  542. package/docs/crawl/core/components/ui/pop/pop.html +0 -102
  543. package/docs/crawl/core/components/ui/progress/progress.html +0 -58
  544. package/docs/crawl/core/components/ui/table/table.html +0 -413
  545. package/docs/crawl/core/components/ui/toast/toast.html +0 -122
  546. package/docs/crawl/core/components/ui/tooltip/tooltip.html +0 -79
  547. package/docs/crawl/docs/_core-concept/overview.html +0 -66
  548. package/docs/crawl/docs/_core-concept/subscriber.html +0 -75
  549. package/docs/crawl/docs/_decorators/ancestor-attribute.html +0 -116
  550. package/docs/crawl/docs/_decorators/auto-subscribe.html +0 -202
  551. package/docs/crawl/docs/_decorators/bind.html +0 -141
  552. package/docs/crawl/docs/_decorators/get.html +0 -149
  553. package/docs/crawl/docs/_decorators/handle.html +0 -165
  554. package/docs/crawl/docs/_decorators/on-assign.html +0 -355
  555. package/docs/crawl/docs/_decorators/patch.html +0 -78
  556. package/docs/crawl/docs/_decorators/post.html +0 -139
  557. package/docs/crawl/docs/_decorators/publish.html +0 -61
  558. package/docs/crawl/docs/_decorators/put.html +0 -78
  559. package/docs/crawl/docs/_decorators/subscribe.html +0 -109
  560. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +0 -137
  561. package/docs/crawl/docs/_directives/sub.html +0 -93
  562. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +0 -100
  563. package/docs/crawl/docs/_getting-started/concorde-outside.html +0 -58
  564. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +0 -110
  565. package/docs/crawl/docs/_getting-started/pubsub.html +0 -62
  566. package/docs/crawl/docs/_getting-started/start.html +0 -76
  567. package/docs/crawl/docs/_getting-started/theming.html +0 -85
  568. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +0 -138
  569. package/docs/crawl/hubs/decorators.html +0 -547
  570. package/docs/crawl/hubs/form-components.html +0 -359
  571. package/docs/crawl/hubs/remote-data.html +0 -452
  572. package/docs/crawl/index.html +0 -101
  573. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  574. package/docs/src/docs/_core-concept/overview.md +0 -57
  575. package/docs/src/docs/_core-concept/subscriber.md +0 -75
  576. package/docs/src/docs/_decorators/ancestor-attribute.md +0 -127
  577. package/docs/src/docs/_decorators/auto-subscribe.md +0 -202
  578. package/docs/src/docs/_decorators/bind.md +0 -167
  579. package/docs/src/docs/_decorators/get.md +0 -162
  580. package/docs/src/docs/_decorators/handle.md +0 -175
  581. package/docs/src/docs/_decorators/on-assign.md +0 -390
  582. package/docs/src/docs/_decorators/patch.md +0 -70
  583. package/docs/src/docs/_decorators/post.md +0 -146
  584. package/docs/src/docs/_decorators/publish.md +0 -55
  585. package/docs/src/docs/_decorators/put.md +0 -70
  586. package/docs/src/docs/_decorators/subscribe.md +0 -100
  587. package/docs/src/docs/_decorators/wait-for-ancestors.md +0 -163
  588. package/docs/src/docs/_directives/sub.md +0 -91
  589. package/docs/src/docs/_getting-started/concorde-manual-install.md +0 -133
  590. package/docs/src/docs/_getting-started/concorde-outside.md +0 -33
  591. package/docs/src/docs/_getting-started/my-first-subscriber.md +0 -120
  592. package/docs/src/docs/_getting-started/pubsub.md +0 -37
  593. package/docs/src/docs/_getting-started/start.md +0 -47
  594. package/docs/src/docs/_getting-started/theming.md +0 -91
  595. package/docs/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  596. package/docs/src/tsconfig.declarations.json +0 -22
  597. package/docs/src/tsconfig.emit.json +0 -23
  598. package/gitlab/job_github_mirror.sh +0 -39
  599. package/scripts/github-export.mjs +0 -150
  600. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  601. package/src/css.d.ts +0 -19
  602. package/src/docs/_core-concept/overview.md +0 -57
  603. package/src/docs/_core-concept/subscriber.md +0 -75
  604. package/src/docs/_decorators/ancestor-attribute.md +0 -128
  605. package/src/docs/_decorators/auto-subscribe.md +0 -202
  606. package/src/docs/_decorators/bind.md +0 -167
  607. package/src/docs/_decorators/get.md +0 -162
  608. package/src/docs/_decorators/handle.md +0 -175
  609. package/src/docs/_decorators/on-assign.md +0 -390
  610. package/src/docs/_decorators/patch.md +0 -70
  611. package/src/docs/_decorators/post.md +0 -146
  612. package/src/docs/_decorators/publish.md +0 -55
  613. package/src/docs/_decorators/put.md +0 -70
  614. package/src/docs/_decorators/subscribe.md +0 -100
  615. package/src/docs/_decorators/wait-for-ancestors.md +0 -163
  616. package/src/docs/_directives/sub.md +0 -91
  617. package/src/docs/_getting-started/concorde-manual-install.md +0 -133
  618. package/src/docs/_getting-started/concorde-outside.md +0 -33
  619. package/src/docs/_getting-started/my-first-subscriber.md +0 -120
  620. package/src/docs/_getting-started/pubsub.md +0 -37
  621. package/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  622. package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
  623. package/src/docs/example/docs-joke-demos.ts +0 -297
  624. package/src/docs/prism/index.ts +0 -6
  625. package/src/docs/prism/prism.css +0 -158
  626. package/src/docs/prism/prism.js +0 -1022
  627. package/src/tsconfig.declarations.json +0 -22
  628. package/src/tsconfig.emit.json +0 -23
@@ -1,390 +0,0 @@
1
- # @onAssign
2
-
3
- > **New apps:** use [@handle](#docs/_decorators/handle.md/handle) with `DataProviderKey` ([Data flow](#docs/_core-concept/dataFlow.md/dataFlow)). `@onAssign` uses untyped string paths; it remains documented for existing codebases — see **Migrating to @handle** below.
4
-
5
- The `@onAssign` decorator allows you to execute a method when one or more publishers are updated. The method is called only when all specified publishers have been assigned values.
6
-
7
- For a **typed** equivalent (recommended), use [@handle](#docs/_decorators/handle.md/handle).
8
-
9
- ## Principle
10
-
11
- This decorator subscribes to one or more publishers by **string path** (legacy). When all specified publishers have been assigned values (via `set`), the decorated method is called with all the values as arguments. Prefer [@handle](#docs/_decorators/handle.md/handle) + `DataProviderKey` and `get` / `set` from [Data flow](#docs/_core-concept/dataFlow.md/dataFlow).
12
-
13
- This is particularly useful when you need to wait for multiple data sources to be ready before executing logic.
14
-
15
- ## Usage
16
-
17
- ### Import
18
-
19
- <sonic-code language="typescript">
20
- <template>
21
- import { onAssign } from "@supersoniks/concorde/decorators";
22
- </template>
23
- </sonic-code>
24
-
25
- ### Basic example
26
-
27
-
28
- <sonic-code language="typescript">
29
- <template>
30
- //...
31
- @customElement("demo-on-assign")
32
- export class DemoOnAssign extends LitElement {
33
- static styles = [tailwind];
34
-
35
- @state() userWithSettings: any = null;
36
- @state() isReady: boolean = false;
37
- @state() lastUpdate: string = "";
38
-
39
- @onAssign("demoUser", "demoUserSettings")
40
- handleDataReady(user: any, settings: any) {
41
- this.isReady = Object.keys(user).length > 0 && Object.keys(settings).length > 0;
42
- this.userWithSettings = { ...user, ...settings };
43
- this.lastUpdate = new Date().toLocaleTimeString();
44
- this.requestUpdate();
45
- }
46
-
47
- render() {
48
- const { name, email, theme, language } = this.userWithSettings;
49
- return //...
50
- }
51
-
52
- updateData() {
53
- const user = PublisherManager.get("demoUser");
54
- const userSettings = PublisherManager.get("demoUserSettings");
55
- const userNumber = Math.floor(Math.random() * 100);
56
- user.set({
57
- name: `User n°${userNumber}`,
58
- email: `user-${userNumber}@example.com`,
59
- });
60
-
61
- userSettings.set({
62
- theme: ["light", "dark", "auto"][Math.floor(Math.random() * 3)],
63
- language: ["en", "fr", "es"][Math.floor(Math.random() * 3)],
64
- });
65
- }
66
- }
67
- </template>
68
- </sonic-code>
69
-
70
- <sonic-code>
71
- <template>
72
- <docs-demo-sources for="demo-on-assign"></docs-demo-sources>
73
- <demo-on-assign></demo-on-assign>
74
- </template>
75
- </sonic-code>
76
-
77
-
78
- ### Example with nested paths
79
-
80
- <sonic-code language="typescript">
81
- <template>
82
- @customElement("product-view")
83
- export class ProductView extends LitElement {
84
- product: any = null;
85
- inventory: any = null;
86
-
87
- @onAssign("store.product", "store.inventory")
88
- handleProductData(product: any, inventory: any) {
89
- this.product = product;
90
- this.inventory = inventory;
91
- this.requestUpdate();
92
- }
93
-
94
- render() {
95
- if (!this.product) return html`<div>Loading...</div>`;
96
-
97
- const stock = this.inventory[this.product.id] || 0;
98
- return html`
99
- <div>
100
- <h2>${this.product.name}</h2>
101
- <p>Price: ${this.product.price}€</p>
102
- <p>Stock: ${stock}</p>
103
- </div>
104
- `;
105
- }
106
- }
107
- </template>
108
- </sonic-code>
109
-
110
- ## Path syntax
111
-
112
- The path uses dot notation to navigate through the publisher structure:
113
-
114
- - **First segment**: dataProvider identifier (e.g., `"userData"`)
115
- - **Following segments**: nested properties (e.g., `"store.product"`)
116
- - **Array access**: use numeric index (e.g., `"data.items.0"`)
117
-
118
- ### Dynamic path driven by class properties
119
-
120
- You can now build the paths dynamically by referencing the host class properties inside the strings passed to `@onAssign`. Two placeholder syntaxes are supported:
121
-
122
- - `` ${myProperty} `` or `` ${this.myProperty} ``
123
- - `` {$myProperty} ``
124
-
125
- Each placeholder is replaced at runtime with the current value of the corresponding property. `@onAssign` automatically watches those properties and:
126
-
127
- - re-evaluates the final paths when one of them changes,
128
- - removes the previous subscriptions before attaching the new ones,
129
- - observe the changes inside `willUpdate(changedProperties)` so nothing touches the getters/setters.
130
-
131
- While a placeholder is `null`/`undefined`, subscriptions are detached. Optional `skipEmptyPlaceholder` on [@handle](#docs/_decorators/handle.md/handle) (typed replacement). Details: [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
132
-
133
-
134
- <sonic-code language="typescript">
135
- <template>
136
- @customElement("demo-on-assign-dynamic")
137
- export class DemoOnAssignDynamic extends LitElement {
138
- static styles = [tailwind];
139
-
140
- @property({ type: String })
141
- dataProvider: "demoUsers" | "demoUsersAlt" = "demoUsers";
142
-
143
- @property({ type: Number })
144
- userIndex: number = 0;
145
-
146
- @state() user: any = null;
147
- @state() userSettings: any = null;
148
-
149
- @onAssign("${dataProvider}.${userIndex}", "${dataProvider}Settings.${userIndex}")
150
- handleUserDataReady(user: any, settings: any) {
151
- this.user = user;
152
- this.userSettings = settings;
153
- }
154
-
155
- updateUserIndex(e: Event) {
156
- this.userIndex = parseInt((e.target as HTMLInputElement).value);
157
- }
158
-
159
- updateDataProvider(e: Event) {
160
- this.dataProvider = (e.target as HTMLSelectElement).value as
161
- | "demoUsers"
162
- | "demoUsersAlt";
163
- }
164
-
165
- updateCurrentUserData() {
166
- const usersPublisher = PublisherManager.get(this.dataProvider);
167
- const settingsPublisher = PublisherManager.get(
168
- `${this.dataProvider}Settings`
169
- );
170
- const userPublisher = Objects.traverse(
171
- usersPublisher,
172
- [String(this.userIndex)]
173
- ) as PublisherProxy;
174
- const settingPublisher = Objects.traverse(
175
- settingsPublisher,
176
- [String(this.userIndex)]
177
- ) as PublisherProxy;
178
-
179
- if (userPublisher && settingPublisher) {
180
- // Générer de nouvelles données aléatoires
181
- const randomNames = [
182
- { firstName: "Alice", lastName: "Wonder" },
183
- { firstName: "Bob", lastName: "Builder" },
184
- { firstName: "Charlie", lastName: "Chaplin" },
185
- ];
186
- const randomThemes = ["light", "dark", "auto"];
187
- const randomLanguages = ["en", "fr", "es"];
188
-
189
- const randomName =
190
- randomNames[Math.floor(Math.random() * randomNames.length)];
191
- const randomEmail = `${randomName.firstName.toLowerCase()}.${randomName.lastName.toLowerCase()}@example.com`;
192
- const randomTheme =
193
- randomThemes[Math.floor(Math.random() * randomThemes.length)];
194
- const randomLanguage =
195
- randomLanguages[Math.floor(Math.random() * randomLanguages.length)];
196
-
197
- // Mettre à jour l'utilisateur directement
198
- const currentUser = userPublisher.get() || {};
199
- userPublisher.set({
200
- ...currentUser,
201
- firstName: randomName.firstName,
202
- lastName: randomName.lastName,
203
- email: randomEmail,
204
- });
205
-
206
- // Mettre à jour les settings directement
207
- settingPublisher.set({
208
- theme: randomTheme,
209
- language: randomLanguage,
210
- });
211
- }
212
- }
213
-
214
- render() {
215
- return html`
216
- &lt;div class="flex flex-col gap-2"&gt;
217
- &lt;sonic-select label="Users set" @change=${this.updateDataProvider}&gt;
218
- &lt;option value="demoUsers"&gt;First set of users&lt;/option&gt;
219
- &lt;option value="demoUsersAlt"&gt;Second set of users&lt;/option&gt;
220
- &lt;/sonic-select&gt;
221
- &lt;sonic-input
222
- type="number"
223
- .value=${this.userIndex}
224
- @input=${this.updateUserIndex}
225
- min="0"
226
- max="9"
227
- label="Index"
228
- class="block"
229
- &gt;&lt;/sonic-input&gt;
230
- &lt;sonic-button @click=${this.updateCurrentUserData}&gt;
231
- Update current user data
232
- &lt;/sonic-button&gt;
233
- &lt;div class="flex flex-col gap-2 border p-2"&gt;
234
- &lt;div&gt;
235
- &lt;sonic-icon name="user" library="heroicons"&gt;&lt;/sonic-icon&gt;
236
- ${this.user?.firstName} ${this.user?.lastName}
237
- &lt;/div&gt;
238
- &lt;div&gt;
239
- &lt;sonic-icon name="envelope" library="heroicons"&gt;&lt;/sonic-icon&gt;
240
- ${this.user?.email}
241
- &lt;/div&gt;
242
- &lt;div&gt;
243
- Theme: ${this.userSettings?.theme} | Language:
244
- ${this.userSettings?.language}
245
- &lt;/div&gt;
246
- &lt;/div&gt;
247
- &lt;/div&gt;
248
- `;
249
- }
250
- }
251
- </template>
252
- </sonic-code>
253
-
254
- <sonic-code>
255
- <template>
256
- <docs-demo-sources for="demo-on-assign-dynamic"></docs-demo-sources>
257
- <demo-on-assign-dynamic></demo-on-assign-dynamic>
258
- </template>
259
- </sonic-code>
260
-
261
- > ⚠️ Use classic string literals: `@onAssign("${dataProvider}.${profileId}", "settings.${profileId}")`. Do **not** use template literals (backticks), otherwise JavaScript would try to interpolate the value immediately.
262
-
263
- Additional constraints:
264
-
265
- - The hosting class must expose a `willUpdate(changedProperties?: Map<PropertyKey, unknown>)` method (LitElement already provides it) so that `@onAssign` can listen to dependency changes.
266
- - Dependencies need to be reactive (e.g. `@property()` on LitElement) or you must call `this.requestUpdate("myProp")` manually after changing them, otherwise `willUpdate` will never be notified.
267
- - If you use nested expressions like `${user.id}`, the first segment (`user`) is the one being observed: you need to reassign `this.user` (e.g. with a new object) so that the binding can detect the change.
268
-
269
- ## Behavior
270
-
271
- - The method is called only when **all** specified publishers have been assigned values
272
- - The method receives the values of all publishers as arguments, in the same order as specified
273
- - Subscription happens at the time of `connectedCallback`
274
- - Unsubscription happens automatically at the time of `disconnectedCallback`
275
- - If a publisher doesn't exist yet, it will be created with the value `null`
276
- - The method is called with `this` bound to the component instance
277
-
278
- ## Use cases
279
-
280
- This decorator is particularly useful for:
281
-
282
- - **Waiting for multiple data sources** before rendering or executing logic
283
- - **Synchronizing data** from different publishers
284
- - **Initializing components** that depend on multiple data providers
285
- - **Handling complex data dependencies** where you need all data to be ready
286
-
287
- ## Complete example
288
-
289
- <sonic-code language="typescript">
290
- <template>
291
- import { html, LitElement } from "lit";
292
- import { customElement } from "lit/decorators.js";
293
- import { onAssign } from "@supersoniks/concorde/decorators";
294
- import { PublisherManager } from "@supersoniks/concorde/core/utils/PublisherProxy";
295
-
296
- @customElement("order-summary")
297
- export class OrderSummary extends LitElement {
298
- order: any = null;
299
- customer: any = null;
300
- shipping: any = null;
301
-
302
- @onAssign("orderData", "customerData", "shippingData")
303
- handleOrderReady(order: any, customer: any, shipping: any) {
304
- this.order = order;
305
- this.customer = customer;
306
- this.shipping = shipping;
307
- this.requestUpdate();
308
- }
309
-
310
- render() {
311
- if (!this.order || !this.customer || !this.shipping) {
312
- return html`<div>Loading order details...</div>`;
313
- }
314
-
315
- return html`
316
- <div class="order-summary">
317
- <h2>Order #${this.order.id}</h2>
318
- <p>Customer: ${this.customer.name}</p>
319
- <p>Shipping to: ${this.shipping.address}</p>
320
- <p>Total: ${this.order.total}€</p>
321
- </div>
322
- `;
323
- }
324
- }
325
- // Somewhere in your code, update the publishers:
326
- const orderPub = PublisherManager.get("orderData");
327
- const customerPub = PublisherManager.get("customerData");
328
- const shippingPub = PublisherManager.get("shippingData");
329
- // The method will be called only when all three are set:
330
- orderPub.set({ id: "123", total: 99.99 });
331
- customerPub.set({ name: "John Doe", email: "john@example.com" });
332
- shippingPub.set({ address: "123 Main St" });
333
- // handleOrderReady will be called with all three values
334
- </template>
335
- </sonic-code>
336
-
337
- ## Migrating to @handle
338
-
339
- `@handle` is the typed successor of `@onAssign`. The key behavioral difference: `@onAssign` waits for **all** values to be defined before calling the method, whereas `@handle` calls it on **every** assignment by default. Use the `waitForAllDefined` option to keep the old semantics.
340
-
341
- ### Why migrate
342
-
343
- - **Typed paths**: keys are `DataProviderKey<T>`, so the method arguments are strongly typed (no more `any`).
344
- - **Explicit intent**: `waitForAllDefined` and `skip` replace implicit behavior.
345
- - **Single API**: `@handle` covers the mono- and multi-path cases (up to 3 keys).
346
-
347
- ### Equivalent semantics (`waitForAllDefined`)
348
-
349
- <sonic-code language="typescript">
350
- <template>
351
- // Before
352
- @onAssign("demoUser", "demoUserSettings")
353
- handleDataReady(user: any, settings: any) { /* ... */ }
354
-
355
- // After — same "wait for everything" behavior, but typed
356
- const user = new DataProviderKey&lt;User&gt;("demoUser");
357
- const settings = new DataProviderKey&lt;Settings&gt;("demoUserSettings");
358
-
359
- @handle(user, settings, { waitForAllDefined: true })
360
- handleDataReady(user: User, settings: Settings) { /* ... */ }
361
- </template>
362
- </sonic-code>
363
-
364
- ### Single path
365
-
366
- <sonic-code language="typescript">
367
- <template>
368
- // Before
369
- @onAssign("settings.modules.logs_route.enabled")
370
- onLogRoute(value: boolean) { /* ... */ }
371
-
372
- // After
373
- const settings = new DataProviderKey&lt;AppSettings&gt;("settings");
374
-
375
- @handle(settings.modules.logs_route.enabled)
376
- onLogRoute(value: boolean) { /* ... */ }
377
- </template>
378
- </sonic-code>
379
-
380
- ### 4+ paths
381
-
382
- `@handle` is capped at 3 keys. For the rare case of 4 or more publishers, keep `@onAssign` for now, or split the logic into several `@handle` methods that each store their value and call a shared method (guarding against partial values).
383
-
384
- ## Notes
385
-
386
- - This decorator works with any component that has `connectedCallback` and `disconnectedCallback` methods (such as `LitElement` or components extending `Subscriber`)
387
- - The method is called synchronously when all publishers are ready
388
- - If you need to update the UI, remember to call `this.requestUpdate()` inside the method
389
- - For more information about publishers, see the documentation on [Sharing data](#docs/_getting-started/pubsub.md/pubsub)
390
-
@@ -1,70 +0,0 @@
1
- # @patch
2
-
3
- `@patch` applies a partial update with the body from a publisher. It uses the
4
- same model as [@post](#docs/_decorators/post.md/post):
5
- `Endpoint<T>`, `DataProviderKey<B>`, `ApiResult<T>`, options, and the
6
- `send(component)` handle.
7
-
8
- ## Minimal usage
9
-
10
- ```typescript
11
- const bodyKey = new DataProviderKey<Partial<User>>("users.patch");
12
- const patchUser = patch(new Endpoint<User>("users/42"), bodyKey);
13
-
14
- @patchUser
15
- @state()
16
- payload?: ApiResult<User>;
17
- ```
18
-
19
- The same decorator adapts to a method:
20
-
21
- ```typescript
22
- @patch(new Endpoint<User>("users/42"), bodyKey)
23
- handlePatch(payload?: ApiResult<User>) {
24
- if (payload?.response?.ok) console.log(payload.result);
25
- }
26
- ```
27
-
28
- To run the operation again from the component:
29
-
30
- ```typescript
31
- async savePatch() {
32
- await patchUser.send(this);
33
- }
34
- ```
35
-
36
- `send(component)` returns a Promise resolved after the PATCH completes. See
37
- [@post](#docs/_decorators/post.md/post) for the method-decorator form and the
38
- `when: "before"` option.
39
-
40
- The PATCH is also sent automatically when the body mutates, unless
41
- `autoPostOnBodyMutation: false` is set. The available options are described in
42
- [@post](#docs/_decorators/post.md/post):
43
-
44
- - `autoPostOnBodyMutation`
45
- - `skipIfBodyMissing`
46
- - `refetchEveryMs`
47
- - `skipEmptyPlaceholder`
48
- - `triggerKey`
49
-
50
- Pass explicit API configuration as the third argument:
51
-
52
- ```typescript
53
- @patch(endpoint, bodyKey, apiConfigurationKey)
54
- ```
55
-
56
- ## Import
57
-
58
- <sonic-code language="typescript">
59
- <template>
60
- import { patch, type ApiResult } from "@supersoniks/concorde/decorators";
61
- import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
62
- import { Endpoint } from "@supersoniks/concorde/utils/endpoint";
63
- </template>
64
- </sonic-code>
65
-
66
- ## See also
67
-
68
- - [@post](#docs/_decorators/post.md/post) — options and triggers
69
- - [@put](#docs/_decorators/put.md/put) — full replacement
70
- - [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path)
@@ -1,146 +0,0 @@
1
- # @post
2
-
3
- `@post` sends the contents of a publisher and stores the response in an
4
- optional `ApiResult<T>` property. The property is `undefined` until a result
5
- is available.
6
-
7
- ## Minimal usage
8
-
9
- Pass an `Endpoint<T>` and a `DataProviderKey<B>` for the request body.
10
-
11
- ```typescript
12
- const userBodyKey = new DataProviderKey<CreateUser>("users.form");
13
- const createUser = post(new Endpoint<User>("users"), userBodyKey);
14
-
15
- @createUser
16
- @state()
17
- payload?: ApiResult<User>;
18
- ```
19
-
20
- The same decorator adapts to a method and receives the complete payload:
21
-
22
- ```typescript
23
- @post(new Endpoint<User>("users"), userBodyKey)
24
- handleCreate(payload?: ApiResult<User>) {
25
- if (payload?.response?.ok) console.log(payload.result);
26
- }
27
- ```
28
-
29
- The current body is read from `userBodyKey`. By default, the POST is sent when
30
- the component connects and after each body mutation. Mutations in the same
31
- frame are coalesced into one request.
32
-
33
- API configuration is read from the HTML scope, as with
34
- [@get](#docs/_decorators/get.md/get).
35
-
36
- ## Sending the POST again
37
-
38
- ### From the component
39
-
40
- Keep the decorator to access `send(component)`. The body is read again when the
41
- operation runs.
42
-
43
- ```typescript
44
- async saveAgain() {
45
- const payload = await createUser.send(this);
46
- console.log(payload?.result);
47
- }
48
- ```
49
-
50
- `send()` returns a `Promise<ApiResult<T> | undefined>` that resolves after the
51
- operation completes. It is useful for “Save” or “Retry” buttons and can repeat
52
- an operation with side effects.
53
-
54
- ### From a method decorator
55
-
56
- The send action can decorate a local method. It runs after the method by
57
- default, waits for an eventual Promise to resolve, and the decorated method
58
- call waits for the send to complete:
59
-
60
- ```typescript
61
- import { send } from "@supersoniks/concorde/decorators";
62
-
63
- @send(createUser)
64
- async save() {
65
- // Prepare local state or validate the form.
66
- }
67
- ```
68
-
69
- Use `{ when: "before" }` when the send must complete before the method runs:
70
-
71
- ```typescript
72
- @send(createUser, { when: "before" })
73
- saveBefore() {
74
- // The POST has completed before this method runs.
75
- }
76
- ```
77
-
78
- The method decorator adds an explicit send. If the method also mutates the body
79
- publisher, set `autoPostOnBodyMutation: false` when the decorated method must
80
- be the only trigger.
81
-
82
- ## Options (`PostOptions`)
83
-
84
- Options are the third argument, or the fourth argument when a configuration key
85
- is provided.
86
-
87
- - `autoPostOnBodyMutation`: send after a body mutation (default: `true`). Set
88
- it to `false` to use `send()`.
89
- - `skipIfBodyMissing`: skip when the body is `null` or `undefined` (default:
90
- `true`).
91
- - `refetchEveryMs`: repeat the POST at this interval. Use it only when
92
- repeating the operation is intended.
93
- - `skipEmptyPlaceholder`: block the request when a `${...}` placeholder is
94
- `""`.
95
- - `triggerKey`: a publisher whose `invalidate()` sends the POST again.
96
-
97
- With a configuration key:
98
-
99
- ```typescript
100
- @post(endpoint, userBodyKey, apiConfigurationKey)
101
- ```
102
-
103
- See [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path) for
104
- dynamic path details.
105
-
106
- ## When the POST is sent
107
-
108
- - when the component connects and the body and configuration are available;
109
- - after a body mutation, unless `autoPostOnBodyMutation: false`;
110
- - when a property used in `${...}` changes;
111
- - when a configuration publisher changes;
112
- - when the `triggerKey` publisher is invalidated;
113
- - when `send()` is called;
114
- - after each response when `refetchEveryMs` is set.
115
-
116
- ## Import
117
-
118
- <sonic-code language="typescript">
119
- <template>
120
- import { post, type ApiResult } from "@supersoniks/concorde/decorators";
121
- import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
122
- import { Endpoint } from "@supersoniks/concorde/utils/endpoint";
123
- </template>
124
- </sonic-code>
125
-
126
- ## Demos
127
-
128
- <sonic-code>
129
- <template>
130
- <docs-demo-sources for="demo-api-post"></docs-demo-sources>
131
- <demo-api-post></demo-api-post>
132
- <docs-demo-sources for="demo-api-post-method"></docs-demo-sources>
133
- <demo-api-post-method></demo-api-post-method>
134
- <docs-demo-sources for="demo-api-post-dynamic"></docs-demo-sources>
135
- <demo-api-post-dynamic></demo-api-post-dynamic>
136
- </template>
137
- </sonic-code>
138
-
139
- See [@put](#docs/_decorators/put.md/put) and
140
- [@patch](#docs/_decorators/patch.md/patch): they use the same model with a
141
- different HTTP method.
142
-
143
- ## Advanced
144
-
145
- External invalidation is currently available through `triggerKey`; it is kept
146
- out of the main usage examples.
@@ -1,55 +0,0 @@
1
- # @publish
2
-
3
- Write-only binding: assigning to the property publishes to the `DataProviderKey` path. No read subscription (inverse of [@subscribe](#docs/_decorators/subscribe.md/subscribe)).
4
-
5
- Similar to the “reflect” half of [@bind](#docs/_decorators/bind.md/bind) without listening to the publisher.
6
-
7
- ## Import
8
-
9
- <sonic-code language="typescript">
10
- <template>
11
- import { publish } from "@supersoniks/concorde/decorators";
12
- import { sub } from "@supersoniks/concorde/directives";
13
- import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
14
- </template>
15
- </sonic-code>
16
-
17
- ## Example
18
-
19
- <sonic-code language="typescript">
20
- <template>
21
- type PublishDemoData = { email: string; message: string };
22
- const publishDemoKey = new DataProviderKey<PublishDemoData>("publishDemo");
23
- //
24
- @customElement("demo-publish")
25
- export class DemoPublish extends LitElement {
26
- @publish(publishDemoKey.email)
27
- @state()
28
- email = "";
29
- //
30
- @publish(publishDemoKey.message)
31
- @state()
32
- message = "";
33
- //
34
- render() {
35
- return html`
36
- <sonic-input
37
- .value=${this.email}
38
- @input=${(e) => (this.email = (e.target as HTMLInputElement).value)}
39
- label="Email"
40
- ></sonic-input>
41
- <p>${sub(publishDemoKey.email)}</p>
42
- `;
43
- }
44
- }
45
- </template>
46
- </sonic-code>
47
-
48
- <sonic-code>
49
- <template>
50
- <docs-demo-sources for="demo-publish"></docs-demo-sources>
51
- <demo-publish></demo-publish>
52
- </template>
53
- </sonic-code>
54
-
55
- Dynamic paths use the same placeholder rules as `@bind` / `@subscribe`. Resolution and `skipEmptyPlaceholder`: [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).