@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,183 +1,178 @@
1
1
  import { html, LitElement } from "lit";
2
2
  import { customElement, property, state } from "lit/decorators.js";
3
- import { get, handle, publish, subscribe } from "@supersoniks/concorde/decorators";
4
- import type { ApiResult } from "@supersoniks/concorde/core/utils/api";
5
- import { DataProviderKey } from "@supersoniks/concorde/core/utils/dataProviderKey";
6
- import { sub } from "@supersoniks/concorde/directives";
7
3
  import {
8
- dp,
9
- get as storeGet,
10
- set,
11
- } from "@supersoniks/concorde/core/utils/PublisherProxy";
12
- import { publishDemoKey } from "./docs-provider-keys";
4
+ DataProviderKey,
5
+ get,
6
+ handle,
7
+ publish,
8
+ subscribe,
9
+ type ApiResult,
10
+ } from "@supersoniks/concorde/decorators";
11
+ import { sub } from "@supersoniks/concorde/directives";
12
+ import { dp, get as storeGet, set } from "@supersoniks/concorde/utils";
13
13
  import { tailwind } from "../tailwind";
14
14
  import "./decorators-demo-init";
15
15
  import {
16
- docsDemoGeoApiConfigurationKey,
17
- geoCommunesApiGetEndpoint,
18
- geoCommunesApiGetEndpointDynamic,
19
- geoCommunesApiGetPublishKey,
20
- type GeoCommuneRow,
16
+ departuresEndpoint,
17
+ departuresPayloadKey,
18
+ flightsApiConfigurationKey,
19
+ flightsByDirectionEndpoint,
20
+ type Flight,
21
+ type FlightBoard,
22
+ type FlightDirection,
21
23
  } from "./decorators-demo-geo";
22
24
 
23
- type PublishDemoData = {
24
- email: string;
25
- message: string;
26
- };
25
+ /* ---------------------------------------------------------------- data */
27
26
 
28
- const geoCommunesGet = get(
29
- geoCommunesApiGetEndpoint,
30
- docsDemoGeoApiConfigurationKey,
31
- );
32
- const geoCommunesMethodTriggerKey = new DataProviderKey<number>(
33
- "docsDemoGeoCommunesMethodTrigger",
27
+ type OnBoard = { name: string; role: string; seat: string };
28
+
29
+ /** People on board flight CN 001 (CDG → JFK). */
30
+ const onBoardKey = new DataProviderKey<OnBoard[]>("demoOnBoard");
31
+ set(onBoardKey, [
32
+ { name: "Captain Leo Marchand", role: "Captain", seat: "Cockpit" },
33
+ { name: "Ada Lindqvist", role: "Passenger", seat: "1A" },
34
+ { name: "Grace Okafor", role: "Flight engineer", seat: "Cockpit" },
35
+ { name: "Noah Keller", role: "Cabin crew", seat: "Galley" },
36
+ { name: "Mateo Ortega", role: "Passenger", seat: "4C" },
37
+ ]);
38
+
39
+ /** One person, picked by `${seatIndex}` on the host component. */
40
+ const personKey = new DataProviderKey<OnBoard, { seatIndex: number }>(
41
+ "demoOnBoard.${seatIndex}",
34
42
  );
35
43
 
44
+ type CheckIn = { passenger: string; seat: string };
45
+ const checkInKey = new DataProviderKey<CheckIn>("demoCheckIn");
46
+
47
+ type Cockpit = { altitude: number };
48
+ const cockpitKey = new DataProviderKey<Cockpit>("demoCockpit");
49
+ set(cockpitKey, { altitude: 50000 });
50
+
51
+ const seatIndexInput = (host: { seatIndex: number }) => html`
52
+ <sonic-input
53
+ type="number"
54
+ .value=${String(host.seatIndex)}
55
+ @input=${(e: Event) =>
56
+ (host.seatIndex = parseInt((e.target as HTMLInputElement).value))}
57
+ min="0"
58
+ max="4"
59
+ label="Seat index"
60
+ ></sonic-input>
61
+ `;
62
+
63
+ const flightList = (flights: Flight[] | undefined) =>
64
+ !flights
65
+ ? html`<p class="text-sm text-neutral-500">Loading…</p>`
66
+ : flights.length === 0
67
+ ? html`<p class="text-sm text-neutral-500">No flight</p>`
68
+ : html`
69
+ <ul class="grid gap-1 sm:grid-cols-2">
70
+ ${flights.map(
71
+ (f) => html`<li class="text-sm">
72
+ <strong>${f.code}</strong> ${f.city}
73
+ <span class="text-neutral-500">· ${f.time} · ${f.status}</span>
74
+ </li>`,
75
+ )}
76
+ </ul>
77
+ `;
78
+
79
+ /* ------------------------------------------------------------- @publish */
80
+
36
81
  @customElement("demo-publish")
37
82
  export class DemoPublish extends LitElement {
38
83
  static styles = [tailwind];
39
84
 
40
- @publish(publishDemoKey.email)
85
+ @publish(checkInKey.passenger)
41
86
  @state()
42
- email = "";
87
+ passenger = "Ada Lindqvist";
43
88
 
44
- @publish(publishDemoKey.message)
89
+ @publish(checkInKey.seat)
45
90
  @state()
46
- message = "";
47
-
48
- connectedCallback() {
49
- super.connectedCallback();
50
- set(publishDemoKey, { email: "", message: "" });
51
- }
91
+ seat = "1A";
52
92
 
53
93
  render() {
54
94
  return html`
55
95
  <div class="space-y-4">
56
- <p class="text-sm text-neutral-600 dark:text-neutral-400">
57
- Les champs publient vers le publisher ; les valeurs ci-dessous passent
58
- par <code>sub()</code>.
59
- </p>
60
96
  <sonic-input
61
- .value=${this.email}
97
+ .value=${this.passenger}
62
98
  @input=${(e: Event) =>
63
- (this.email = (e.target as HTMLInputElement).value)}
64
- label="Email"
65
- placeholder="your@email.com"
99
+ (this.passenger = (e.target as HTMLInputElement).value)}
100
+ label="Passenger"
66
101
  ></sonic-input>
67
102
  <sonic-input
68
- .value=${this.message}
103
+ .value=${this.seat}
69
104
  @input=${(e: Event) =>
70
- (this.message = (e.target as HTMLInputElement).value)}
71
- label="Message"
72
- placeholder="Type a message..."
105
+ (this.seat = (e.target as HTMLInputElement).value)}
106
+ label="Seat"
73
107
  ></sonic-input>
74
- <div
75
- class="rounded border border-neutral-200 dark:border-neutral-700 p-3"
76
- >
77
- <p
78
- class="text-xs font-medium text-neutral-500 dark:text-neutral-400 mb-1"
79
- >
80
- Published values (from sub):
81
- </p>
82
- <p>Email: ${sub(publishDemoKey.email) || "—"}</p>
83
- <p>Message: ${sub(publishDemoKey.message) || "—"}</p>
84
- </div>
108
+ <p class="rounded border border-neutral-200 dark:border-neutral-700 p-3">
109
+ Boarding pass: ${sub(checkInKey.passenger)} · seat
110
+ ${sub(checkInKey.seat)}
111
+ </p>
85
112
  </div>
86
113
  `;
87
114
  }
88
115
  }
89
116
 
117
+ /* ----------------------------------------------------------------- @get */
118
+
119
+ const departuresGet = get(departuresEndpoint, flightsApiConfigurationKey);
120
+
90
121
  @customElement("demo-api-get")
91
122
  export class DemoApiGet extends LitElement {
92
123
  static styles = [tailwind];
93
124
 
94
- @geoCommunesGet
125
+ @departuresGet
95
126
  @state()
96
- geoApiPayload?: ApiResult<GeoCommuneRow[]>;
127
+ departures?: ApiResult<FlightBoard>;
97
128
 
98
129
  private async refresh() {
99
- await geoCommunesGet.refetch(this);
130
+ await departuresGet.refetch(this);
100
131
  }
101
132
 
102
133
  render() {
103
- const rows = this.geoApiPayload?.result;
104
134
  return html`
105
135
  <div class="space-y-3">
106
- <div class="flex flex-wrap items-center gap-3">
107
- <span class="text-sm font-medium">🗺️ GET simple</span>
108
- <sonic-button size="sm" @click=${this.refresh}>Rafraîchir</sonic-button>
109
- </div>
110
- <p class="text-sm text-neutral-600 dark:text-neutral-400">
111
- Une liste de communes chargée avec <code>@get</code>.
112
- </p>
113
- ${this.geoApiPayload == null
114
- ? html`<p class="text-sm text-neutral-500">Chargement…</p>`
115
- : !rows || rows.length === 0
116
- ? html`<p class="text-sm text-neutral-500">Aucune commune</p>`
117
- : html`
118
- <ul class="grid gap-1 sm:grid-cols-2">
119
- ${rows.map(
120
- (c) => html`<li class="text-sm">
121
- ${c.nom} <span class="text-neutral-500">(${c.code})</span>
122
- </li>`,
123
- )}
124
- </ul>
125
- `}
136
+ <sonic-button size="sm" @click=${this.refresh}>Refresh</sonic-button>
137
+ ${flightList(this.departures?.result?.flights)}
126
138
  </div>
127
139
  `;
128
140
  }
129
141
  }
130
142
 
143
+ const departuresRefreshKey = new DataProviderKey<number>(
144
+ "docsDemoDeparturesRefresh",
145
+ );
146
+ set(departuresRefreshKey, 0);
147
+
131
148
  @customElement("demo-api-get-method")
132
149
  export class DemoApiGetMethod extends LitElement {
133
150
  static styles = [tailwind];
134
151
 
135
152
  @state()
136
- private payload?: ApiResult<GeoCommuneRow[]>;
137
-
138
- connectedCallback() {
139
- super.connectedCallback();
140
- set(geoCommunesMethodTriggerKey, 0);
141
- }
153
+ private payload?: ApiResult<FlightBoard>;
142
154
 
143
- @get(geoCommunesApiGetEndpoint, docsDemoGeoApiConfigurationKey, {
144
- triggerKey: geoCommunesMethodTriggerKey,
155
+ @get(departuresEndpoint, flightsApiConfigurationKey, {
156
+ triggerKey: departuresRefreshKey,
145
157
  })
146
- handlePayload(payload?: ApiResult<GeoCommuneRow[]>) {
158
+ onDepartures(payload?: ApiResult<FlightBoard>) {
147
159
  this.payload = payload;
148
160
  }
149
161
 
150
162
  private refresh() {
151
- dp(geoCommunesMethodTriggerKey).invalidate();
163
+ dp(departuresRefreshKey).invalidate();
152
164
  }
153
165
 
154
166
  render() {
155
- const rows = this.payload?.result ?? [];
156
167
  return html`
157
168
  <div class="space-y-3">
158
- <div class="flex flex-wrap items-center gap-3">
159
- <span class="text-sm font-medium">🗺️ GET function mode</span>
160
- <sonic-button size="sm" @click=${this.refresh}>
161
- Invalidate trigger
162
- </sonic-button>
163
- </div>
164
- <p class="text-sm text-neutral-600 dark:text-neutral-400">
165
- The <code>@get</code> decorator calls <code>handlePayload</code> with
166
- the complete API payload.
167
- </p>
169
+ <sonic-button size="sm" @click=${this.refresh}>
170
+ Invalidate trigger
171
+ </sonic-button>
168
172
  <p class="text-xs text-neutral-500">
169
- HTTP status:
170
- <strong>${this.payload?.response?.status ?? "loading…"}</strong>
173
+ HTTP status: ${this.payload?.response?.status ?? "…"}
171
174
  </p>
172
- <ul class="grid gap-1 sm:grid-cols-2">
173
- ${rows.slice(0, 6).map(
174
- (commune) =>
175
- html`<li class="text-sm">
176
- ${commune.nom}
177
- <span class="text-neutral-500">(${commune.code})</span>
178
- </li>`,
179
- )}
180
- </ul>
175
+ ${flightList(this.payload?.result?.flights)}
181
176
  </div>
182
177
  `;
183
178
  }
@@ -187,48 +182,33 @@ export class DemoApiGetMethod extends LitElement {
187
182
  export class DemoApiGetConfigurationKey extends LitElement {
188
183
  static styles = [tailwind];
189
184
 
190
- @property({ type: Number })
191
- communeLimit = 3;
185
+ @property()
186
+ direction: FlightDirection = "departures";
192
187
 
193
- @get(geoCommunesApiGetEndpointDynamic, docsDemoGeoApiConfigurationKey)
188
+ @get(flightsByDirectionEndpoint, flightsApiConfigurationKey)
194
189
  @state()
195
- geoApiPayloadDyn?: ApiResult<GeoCommuneRow[]>;
190
+ board?: ApiResult<FlightBoard>;
196
191
 
197
192
  render() {
198
- const rows = this.geoApiPayloadDyn?.result;
199
193
  return html`
200
194
  <div class="space-y-3">
201
- <p class="text-sm text-neutral-600 dark:text-neutral-400">
202
- <code>@get</code> avec un endpoint et une configuration dynamiques.
203
- </p>
204
- <div class="flex flex-wrap items-center gap-2">
205
- <span class="text-sm">Nombre de communes :</span>
206
- ${[3, 5, 10].map(
207
- (limit) => html`
195
+ <div class="flex flex-wrap gap-2">
196
+ ${(["departures", "arrivals"] as const).map(
197
+ (direction) => html`
208
198
  <sonic-button
209
199
  size="sm"
210
- type=${this.communeLimit === limit ? "primary" : "neutral"}
211
- @click=${() => {
212
- this.communeLimit = limit;
213
- }}
200
+ type=${this.direction === direction ? "primary" : "neutral"}
201
+ @click=${() => (this.direction = direction)}
214
202
  >
215
- ${limit}
203
+ ${direction === "departures" ? "Departures" : "Arrivals"}
216
204
  </sonic-button>
217
205
  `,
218
206
  )}
219
207
  </div>
220
208
  <p class="font-mono text-xs text-neutral-500">
221
- communes?limit=${this.communeLimit}
209
+ flights?direction=${this.direction}&amp;limit=4
222
210
  </p>
223
- ${this.geoApiPayloadDyn == null
224
- ? html`<p class="text-sm text-neutral-500">Chargement…</p>`
225
- : html`
226
- <ul class="grid gap-1 sm:grid-cols-2">
227
- ${(rows ?? []).map(
228
- (c) => html`<li class="text-sm">${c.nom}</li>`,
229
- )}
230
- </ul>
231
- `}
211
+ ${flightList(this.board?.result?.flights)}
232
212
  </div>
233
213
  `;
234
214
  }
@@ -238,87 +218,42 @@ export class DemoApiGetConfigurationKey extends LitElement {
238
218
  export class DemoApiGetPublishSubscribe extends LitElement {
239
219
  static styles = [tailwind];
240
220
 
241
- @get(geoCommunesApiGetEndpoint)
242
- @publish(geoCommunesApiGetPublishKey)
221
+ @get(departuresEndpoint, flightsApiConfigurationKey)
222
+ @publish(departuresPayloadKey)
243
223
  @state()
244
- geoApiPayloadPublished: ApiResult<GeoCommuneRow[]> | null = null;
224
+ departures?: ApiResult<FlightBoard>;
245
225
 
226
+ @subscribe(departuresPayloadKey.result.flights)
246
227
  @state()
247
- @subscribe(geoCommunesApiGetPublishKey.result)
248
- geoCommunesFromSubscribe: GeoCommuneRow[] | null = null;
228
+ flights: Flight[] | null = null;
249
229
 
250
230
  render() {
251
- const rows =
252
- this.geoCommunesFromSubscribe ?? this.geoApiPayloadPublished?.result;
253
- const status = this.geoApiPayloadPublished?.response?.status;
254
- const fetchedAt = formatFetchedAt(
255
- this.geoApiPayloadPublished?.response ?? null,
256
- );
257
231
  return html`
258
232
  <div class="space-y-2">
259
- <p class="text-sm text-neutral-600 dark:text-neutral-400">
260
- <code>@get</code> (scoped) + <code>@publish</code> sur la clé du
261
- payload + <code>@subscribe</code> sur <code>.result</code> — même
262
- rendu que <code>&lt;demo-api-get&gt;</code> (doc @get).
233
+ <p class="text-xs text-neutral-500">
234
+ HTTP ${this.departures?.response?.status ?? "…"}
263
235
  </p>
264
- ${status != null
265
- ? html`<p class="text-xs text-neutral-500">
266
- HTTP ${status} · fetch ${fetchedAt}
267
- </p>`
268
- : ""}
269
- ${this.geoApiPayloadPublished === null
270
- ? html`<p class="text-neutral-500">Chargement…</p>`
271
- : !rows || rows.length === 0
272
- ? html`<p class="text-neutral-500">Aucune commune</p>`
273
- : html`
274
- <ul class="list-disc pl-5 space-y-1">
275
- ${rows.map(
276
- (c) =>
277
- html`<li>
278
- <span class="font-medium">${c.nom}</span>
279
- <span class="text-neutral-500 text-sm">
280
- — ${c.code}</span
281
- >
282
- </li>`,
283
- )}
284
- </ul>
285
- `}
236
+ ${flightList(this.flights ?? undefined)}
286
237
  </div>
287
238
  `;
288
239
  }
289
240
  }
290
241
 
291
- type User = { firstName: string; lastName: string; email: string };
292
-
293
- const demoUsersSubKey = new DataProviderKey<User, { userIndex: number }>(
294
- "demoUsers.${userIndex}",
295
- );
242
+ /* ----------------------------------------------------- sub / @subscribe */
296
243
 
297
244
  @customElement("demo-sub-template")
298
245
  export class DemoSubTemplate extends LitElement {
299
246
  static styles = [tailwind];
300
247
 
301
248
  @property({ type: Number })
302
- userIndex = 0;
249
+ seatIndex = 0;
303
250
 
304
251
  render() {
305
252
  return html`
306
253
  <div class="space-y-4">
307
- <p class="text-sm text-neutral-600 dark:text-neutral-400">
308
- <code>sub(demoUsersSubKey.email)</code> — same dynamic path as
309
- <code>@subscribe</code>, reactive in the template.
310
- </p>
311
- <sonic-input
312
- type="number"
313
- .value=${String(this.userIndex)}
314
- @input=${(e: Event) =>
315
- (this.userIndex = parseInt((e.target as HTMLInputElement).value))}
316
- min="0"
317
- max="9"
318
- label="User index"
319
- ></sonic-input>
254
+ ${seatIndexInput(this)}
320
255
  <p class="rounded border border-neutral-200 dark:border-neutral-700 p-3">
321
- Email: <strong>${sub(demoUsersSubKey.email) || "—"}</strong>
256
+ <strong>${sub(personKey.name)}</strong> · ${sub(personKey.role)}
322
257
  </p>
323
258
  </div>
324
259
  `;
@@ -330,78 +265,63 @@ export class DemoSubscribeDynamic extends LitElement {
330
265
  static styles = [tailwind];
331
266
 
332
267
  @property({ type: Number })
333
- userIndex = 0;
268
+ seatIndex = 0;
334
269
 
335
- @subscribe(new DataProviderKey<User>("demoUsers.${userIndex}"))
270
+ @subscribe(personKey)
336
271
  @state()
337
- user: User | null = null;
272
+ person: OnBoard | null = null;
338
273
 
339
274
  render() {
340
275
  return html`
341
276
  <div class="space-y-4">
342
- <p class="text-sm text-neutral-600 dark:text-neutral-400">
343
- <code>@subscribe</code> avec chemin dynamique
344
- <code>demoUsers.\${userIndex}</code>
345
- </p>
346
- <sonic-input
347
- type="number"
348
- .value=${String(this.userIndex)}
349
- @input=${(e: Event) =>
350
- (this.userIndex = parseInt((e.target as HTMLInputElement).value))}
351
- min="0"
352
- max="9"
353
- label="User index"
354
- ></sonic-input>
355
- ${this.user
277
+ ${seatIndexInput(this)}
278
+ ${this.person
356
279
  ? html`
357
280
  <div
358
281
  class="rounded border border-neutral-200 dark:border-neutral-700 p-3"
359
282
  >
360
- <p>${this.user.firstName} ${this.user.lastName}</p>
361
- <p class="text-sm text-neutral-500">${this.user.email}</p>
283
+ <p>${this.person.name}</p>
284
+ <p class="text-sm text-neutral-500">
285
+ ${this.person.role} · ${this.person.seat}
286
+ </p>
362
287
  </div>
363
288
  `
364
289
  : html`<p class="text-neutral-500">
365
- No user at index ${this.userIndex}
290
+ Nobody at index ${this.seatIndex}
366
291
  </p>`}
367
292
  </div>
368
293
  `;
369
294
  }
370
295
  }
371
296
 
372
- type DemoCounterData = { count: number; title: string; user: { name: string } };
373
- const demoDataKey = new DataProviderKey<DemoCounterData>("demoData");
297
+ /* -------------------------------------------------------------- @handle */
374
298
 
375
299
  @customElement("demo-handle")
376
300
  export class DemoHandle extends LitElement {
377
301
  static styles = [tailwind];
378
302
 
379
- @state() doubled = 0;
380
- @state() lastUpdate = "";
303
+ @state() meters = 0;
304
+ @state() flightLevel = "";
381
305
 
382
- @handle(demoDataKey.count)
383
- onCountChange(count: number) {
384
- this.doubled = count * 2;
385
- this.lastUpdate = new Date().toLocaleTimeString();
306
+ @handle(cockpitKey.altitude)
307
+ onAltitude(feet: number) {
308
+ this.meters = Math.round(feet * 0.3048);
309
+ this.flightLevel = `FL${Math.round(feet / 100)}`;
386
310
  }
387
311
 
388
- incrementCount() {
389
- const data = storeGet(demoDataKey);
390
- set(demoDataKey, { ...data, count: data.count + 1 });
312
+ climb() {
313
+ const cockpit = storeGet(cockpitKey);
314
+ set(cockpitKey, { ...cockpit, altitude: cockpit.altitude + 1000 });
391
315
  }
392
316
 
393
317
  render() {
394
318
  return html`
395
319
  <div class="space-y-4">
396
- <p class="text-sm text-neutral-600 dark:text-neutral-400">
397
- <code>@handle</code> sur <code>demoData.count</code> — calcul
398
- <code>doubled = count * 2</code>
399
- </p>
400
- <p>Doubled count: <strong>${this.doubled}</strong></p>
401
- <p class="text-sm text-neutral-500">
402
- Last update: ${this.lastUpdate || "—"}
320
+ <p>
321
+ Altitude: <strong>${this.flightLevel}</strong> ·
322
+ ${this.meters.toLocaleString("en")} m
403
323
  </p>
404
- <sonic-button @click=${this.incrementCount}>Increment count</sonic-button>
324
+ <sonic-button @click=${this.climb}>Climb 1,000 ft</sonic-button>
405
325
  </div>
406
326
  `;
407
327
  }
@@ -412,47 +332,24 @@ export class DemoHandleDynamic extends LitElement {
412
332
  static styles = [tailwind];
413
333
 
414
334
  @property({ type: Number })
415
- userIndex = 0;
335
+ seatIndex = 0;
416
336
 
417
- @state() displayName = "";
418
- @state() lastUpdate = "";
337
+ @state() announcement = "";
419
338
 
420
- @handle(new DataProviderKey<User, { userIndex: number }>("demoUsers.${userIndex}"))
421
- onUserAssigned(user: User) {
422
- this.displayName = `${user.firstName} ${user.lastName}`;
423
- this.lastUpdate = new Date().toLocaleTimeString();
339
+ @handle(personKey)
340
+ onPerson(person: OnBoard | null) {
341
+ this.announcement = person
342
+ ? `${person.name}, please proceed to gate B12.`
343
+ : "";
424
344
  }
425
345
 
426
346
  render() {
427
347
  return html`
428
348
  <div class="space-y-4">
429
- <p class="text-sm text-neutral-600 dark:text-neutral-400">
430
- <code>@handle</code> avec chemin dynamique
431
- <code>demoUsers.\${userIndex}</code>
349
+ ${seatIndexInput(this)}
350
+ <p class="rounded border border-neutral-200 dark:border-neutral-700 p-3">
351
+ ${this.announcement || `Nobody at index ${this.seatIndex}`}
432
352
  </p>
433
- <sonic-input
434
- type="number"
435
- .value=${String(this.userIndex)}
436
- @input=${(e: Event) =>
437
- (this.userIndex = parseInt((e.target as HTMLInputElement).value))}
438
- min="0"
439
- max="9"
440
- label="User index"
441
- ></sonic-input>
442
- ${this.displayName
443
- ? html`
444
- <div
445
- class="rounded border border-neutral-200 dark:border-neutral-700 p-3"
446
- >
447
- <p>${this.displayName}</p>
448
- <p class="text-sm text-neutral-500">
449
- Assigned at ${this.lastUpdate}
450
- </p>
451
- </div>
452
- `
453
- : html`<p class="text-neutral-500">
454
- No user at index ${this.userIndex}
455
- </p>`}
456
353
  </div>
457
354
  `;
458
355
  }