@supersoniks/concorde 5.1.1 → 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 (438) 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/.tmp-cem/custom-elements.json +503 -503
  6. package/PLAN-DOCS-AGENTS.md +80 -0
  7. package/README.md +3 -3
  8. package/ai/skills/concorde/SKILL.md +1 -1
  9. package/ai/skills/concorde-get-set-dp/SKILL.md +3 -3
  10. package/ai/skills/concorde-theme/SKILL.md +1 -1
  11. package/build-infos.json +1 -1
  12. package/concorde-core.bundle.js +1 -1
  13. package/concorde-core.es.js +1 -1
  14. package/dist/concorde-core.bundle.js +1 -1
  15. package/dist/concorde-core.es.js +1 -1
  16. package/docs/.htaccess +75 -0
  17. package/docs/404.html +15 -0
  18. package/docs/404.md +5 -0
  19. package/docs/assets/{index-Bb-_LRyY.js → index-BgG6FFPt.js} +2582 -3097
  20. package/docs/assets/index-x89XINSG.css +1 -0
  21. package/docs/core/components/functional/date/date.html +211 -0
  22. package/docs/core/components/functional/date/date.md +150 -0
  23. package/docs/core/components/functional/fetch/fetch.html +180 -0
  24. package/docs/core/components/functional/fetch/fetch.md +108 -0
  25. package/docs/core/components/functional/if/if.html +65 -0
  26. package/docs/core/components/functional/if/if.md +34 -0
  27. package/docs/core/components/functional/jsonata/jsonata.html +110 -0
  28. package/docs/core/components/functional/jsonata/jsonata.md +61 -0
  29. package/docs/core/components/functional/list/list.html +198 -0
  30. package/docs/core/components/functional/list/list.md +121 -0
  31. package/docs/core/components/functional/mix/mix.html +78 -0
  32. package/docs/core/components/functional/mix/mix.md +46 -0
  33. package/docs/core/components/functional/queue/queue.html +155 -0
  34. package/docs/core/components/functional/queue/queue.md +51 -0
  35. package/docs/core/components/functional/router/router.html +154 -0
  36. package/docs/core/components/functional/router/router.md +93 -0
  37. package/docs/core/components/functional/sdui/sdui-extension-points.html +127 -0
  38. package/docs/core/components/functional/sdui/sdui-extension-points.md +94 -0
  39. package/docs/core/components/functional/sdui/sdui.html +397 -0
  40. package/docs/core/components/functional/sdui/sdui.md +307 -0
  41. package/docs/core/components/functional/states/states.html +141 -0
  42. package/docs/core/components/functional/states/states.md +112 -0
  43. package/docs/core/components/functional/submit/submit.html +178 -0
  44. package/docs/core/components/functional/submit/submit.md +106 -0
  45. package/docs/core/components/functional/subscriber/subscriber.html +68 -0
  46. package/docs/core/components/functional/subscriber/subscriber.md +91 -0
  47. package/docs/core/components/functional/translation/translation.html +60 -0
  48. package/docs/core/components/functional/translation/translation.md +38 -0
  49. package/docs/core/components/functional/value/value.html +81 -0
  50. package/docs/core/components/functional/value/value.md +47 -0
  51. package/docs/core/components/ui/alert/alert.html +201 -0
  52. package/docs/core/components/ui/alert/alert.md +186 -0
  53. package/docs/core/components/ui/alert-messages/alert-messages.html +132 -0
  54. package/docs/core/components/ui/alert-messages/alert-messages.md +85 -0
  55. package/docs/core/components/ui/badge/badge.html +197 -0
  56. package/docs/core/components/ui/badge/badge.md +181 -0
  57. package/docs/core/components/ui/button/button.html +309 -0
  58. package/docs/core/components/ui/button/button.md +216 -0
  59. package/docs/core/components/ui/captcha/captcha.html +80 -0
  60. package/docs/core/components/ui/captcha/captcha.md +56 -0
  61. package/docs/core/components/ui/card/card.html +254 -0
  62. package/docs/core/components/ui/card/card.md +215 -0
  63. package/docs/core/components/ui/divider/divider.html +144 -0
  64. package/docs/core/components/ui/divider/divider.md +126 -0
  65. package/docs/core/components/ui/form/checkbox/checkbox.html +200 -0
  66. package/docs/core/components/ui/form/checkbox/checkbox.md +125 -0
  67. package/docs/core/components/ui/form/fieldset/fieldset.html +238 -0
  68. package/docs/core/components/ui/form/fieldset/fieldset.md +161 -0
  69. package/docs/core/components/ui/form/form-actions/form-actions.html +122 -0
  70. package/docs/core/components/ui/form/form-actions/form-actions.md +98 -0
  71. package/docs/core/components/ui/form/form-layout/form-layout.html +115 -0
  72. package/docs/core/components/ui/form/form-layout/form-layout.md +109 -0
  73. package/docs/core/components/ui/form/input/input.html +235 -0
  74. package/docs/core/components/ui/form/input/input.md +142 -0
  75. package/docs/core/components/ui/form/radio/radio.html +144 -0
  76. package/docs/core/components/ui/form/radio/radio.md +78 -0
  77. package/docs/core/components/ui/form/select/select.html +178 -0
  78. package/docs/core/components/ui/form/select/select.md +86 -0
  79. package/docs/core/components/ui/form/switch/switch.html +146 -0
  80. package/docs/core/components/ui/form/switch/switch.md +80 -0
  81. package/docs/core/components/ui/form/textarea/textarea.html +162 -0
  82. package/docs/core/components/ui/form/textarea/textarea.md +82 -0
  83. package/docs/core/components/ui/group/group.html +113 -0
  84. package/docs/core/components/ui/group/group.md +77 -0
  85. package/docs/core/components/ui/icon/icon.html +223 -0
  86. package/docs/core/components/ui/icon/icon.md +214 -0
  87. package/docs/core/components/ui/image/image.html +194 -0
  88. package/docs/core/components/ui/image/image.md +167 -0
  89. package/docs/core/components/ui/link/link.html +101 -0
  90. package/docs/core/components/ui/link/link.md +81 -0
  91. package/docs/core/components/ui/loader/loader.html +114 -0
  92. package/docs/core/components/ui/loader/loader.md +87 -0
  93. package/docs/core/components/ui/menu/menu.html +395 -0
  94. package/docs/core/components/ui/menu/menu.md +370 -0
  95. package/docs/core/components/ui/modal/modal.html +324 -0
  96. package/docs/core/components/ui/modal/modal.md +211 -0
  97. package/docs/core/components/ui/pop/pop.html +250 -0
  98. package/docs/core/components/ui/pop/pop.md +216 -0
  99. package/docs/core/components/ui/progress/progress.html +132 -0
  100. package/docs/core/components/ui/progress/progress.md +109 -0
  101. package/docs/core/components/ui/table/table.html +333 -0
  102. package/docs/core/components/ui/table/table.md +267 -0
  103. package/docs/core/components/ui/theme/theme.html +116 -0
  104. package/docs/core/components/ui/theme/theme.md +97 -0
  105. package/docs/core/components/ui/toast/toast.html +185 -0
  106. package/docs/core/components/ui/toast/toast.md +147 -0
  107. package/docs/core/components/ui/tooltip/tooltip.html +112 -0
  108. package/docs/core/components/ui/tooltip/tooltip.md +89 -0
  109. package/docs/docs/decorators/ancestor-attribute.html +71 -0
  110. package/docs/docs/decorators/ancestor-attribute.md +59 -0
  111. package/docs/docs/decorators/auto-subscribe.html +61 -0
  112. package/docs/docs/decorators/auto-subscribe.md +40 -0
  113. package/docs/docs/decorators/bind.html +86 -0
  114. package/docs/docs/decorators/bind.md +77 -0
  115. package/docs/docs/decorators/get.html +166 -0
  116. package/docs/docs/decorators/get.md +160 -0
  117. package/docs/docs/decorators/handle.html +139 -0
  118. package/docs/docs/decorators/handle.md +119 -0
  119. package/docs/docs/decorators/on-assign.html +72 -0
  120. package/docs/docs/decorators/on-assign.md +63 -0
  121. package/docs/docs/decorators/patch.html +76 -0
  122. package/docs/docs/decorators/patch.md +44 -0
  123. package/docs/docs/decorators/post.html +150 -0
  124. package/docs/docs/decorators/post.md +134 -0
  125. package/docs/docs/decorators/publish.html +74 -0
  126. package/docs/docs/decorators/publish.md +56 -0
  127. package/docs/docs/decorators/put.html +83 -0
  128. package/docs/docs/decorators/put.md +51 -0
  129. package/docs/docs/decorators/subscribe.html +91 -0
  130. package/docs/docs/decorators/subscribe.md +87 -0
  131. package/docs/docs/decorators/wait-for-ancestors.html +82 -0
  132. package/docs/docs/decorators/wait-for-ancestors.md +76 -0
  133. package/docs/docs/directives/sub.html +79 -0
  134. package/docs/docs/directives/sub.md +75 -0
  135. package/docs/docs/directives/t.html +91 -0
  136. package/docs/docs/directives/t.md +73 -0
  137. package/docs/docs/getting-started/ai-agents.html +174 -0
  138. package/{src/docs/_getting-started → docs/docs/getting-started}/ai-agents.md +3 -3
  139. package/docs/docs/getting-started/components.html +27 -0
  140. package/docs/docs/getting-started/create-a-component.html +108 -0
  141. package/{src/docs/_getting-started → docs/docs/getting-started}/create-a-component.md +3 -6
  142. package/docs/docs/getting-started/dataFlow.html +174 -0
  143. package/{src/docs/_core-concept → docs/docs/getting-started}/dataFlow.md +17 -18
  144. package/docs/docs/getting-started/installation.html +69 -0
  145. package/docs/docs/getting-started/installation.md +36 -0
  146. package/docs/docs/getting-started/my-first-component.html +180 -0
  147. package/{src/docs/_getting-started → docs/docs/getting-started}/my-first-component.md +5 -14
  148. package/docs/docs/getting-started/start.html +47 -0
  149. package/{src/docs/_getting-started → docs/docs/getting-started}/start.md +1 -13
  150. package/docs/docs/getting-started/theming.html +334 -0
  151. package/docs/docs/index.html +99 -0
  152. package/docs/docs/misc/api-configuration.html +149 -0
  153. package/{src/docs/_misc → docs/docs/misc}/api-configuration.md +10 -12
  154. package/docs/docs/misc/dataProviderKey.html +136 -0
  155. package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
  156. package/docs/docs/misc/docs-mock-api.html +155 -0
  157. package/{src/docs/_misc → docs/docs/misc}/docs-mock-api.md +12 -13
  158. package/docs/docs/misc/dynamic-path.html +181 -0
  159. package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
  160. package/docs/docs/misc/endpoint.html +51 -0
  161. package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
  162. package/docs/docs/misc/html-integration.html +45 -0
  163. package/{src/docs/_misc → docs/docs/misc}/html-integration.md +4 -5
  164. package/docs/docs-mock-api-sw.js +58 -223
  165. package/docs/docs-mock-api-sw.js.map +4 -4
  166. package/docs/hubs/decorators.html +443 -0
  167. package/docs/hubs/form-components.html +404 -0
  168. package/docs/hubs/remote-data.html +371 -0
  169. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  170. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  171. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  172. package/docs/img/archive/credits.json +28 -0
  173. package/docs/img/concorde/plane_01.jpg +0 -0
  174. package/docs/img/concorde/plane_02.jpg +0 -0
  175. package/docs/img/concorde/plane_03.jpg +0 -0
  176. package/docs/img/concorde/plane_04.jpg +0 -0
  177. package/docs/img/concorde/plane_05.jpg +0 -0
  178. package/docs/img/concorde/plane_06.jpg +0 -0
  179. package/docs/img/concorde/plane_07.jpg +0 -0
  180. package/docs/img/concorde/plane_08.jpg +0 -0
  181. package/docs/img/concorde/plane_09.jpg +0 -0
  182. package/docs/img/concorde/plane_10.jpg +0 -0
  183. package/docs/img/concorde/plane_11.jpg +0 -0
  184. package/docs/img/concorde/plane_12.jpg +0 -0
  185. package/docs/img/concorde/plane_13.jpg +0 -0
  186. package/docs/index.html +95 -68
  187. package/docs/index.md +22 -0
  188. package/docs/llms-full.txt +5795 -0
  189. package/docs/llms.txt +106 -0
  190. package/docs/robots.txt +11 -10
  191. package/docs/sitemap.xml +237 -0
  192. package/docs/src/core/components/functional/date/date.md +150 -0
  193. package/docs/src/core/components/functional/fetch/fetch.md +108 -0
  194. package/docs/src/core/components/functional/if/if.md +34 -0
  195. package/docs/src/core/components/functional/jsonata/jsonata.md +61 -0
  196. package/docs/src/core/components/functional/list/list.md +121 -0
  197. package/docs/src/core/components/functional/mix/mix.md +46 -0
  198. package/docs/src/core/components/functional/queue/queue.md +51 -0
  199. package/docs/src/core/components/functional/router/router.md +93 -0
  200. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  201. package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
  202. package/docs/src/core/components/functional/sdui/default-library.json +108 -0
  203. package/docs/src/core/components/functional/sdui/example.json +32 -0
  204. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  205. package/docs/src/core/components/functional/sdui/sdui.md +307 -0
  206. package/docs/src/core/components/functional/states/states.md +112 -0
  207. package/docs/src/core/components/functional/submit/submit.md +106 -0
  208. package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
  209. package/docs/src/core/components/functional/translation/translation.md +38 -0
  210. package/docs/src/core/components/functional/value/value.md +47 -0
  211. package/docs/src/core/components/ui/alert/alert.md +186 -0
  212. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  213. package/docs/src/core/components/ui/badge/badge.md +181 -0
  214. package/docs/src/core/components/ui/button/button.md +216 -0
  215. package/docs/src/core/components/ui/captcha/captcha.md +56 -0
  216. package/docs/src/core/components/ui/card/card.md +215 -0
  217. package/docs/src/core/components/ui/divider/divider.md +126 -0
  218. package/docs/src/core/components/ui/form/checkbox/checkbox.md +125 -0
  219. package/docs/src/core/components/ui/form/fieldset/fieldset.md +161 -0
  220. package/docs/src/core/components/ui/form/form-actions/form-actions.md +98 -0
  221. package/docs/src/core/components/ui/form/form-layout/form-layout.md +109 -0
  222. package/docs/src/core/components/ui/form/input/input.md +142 -0
  223. package/docs/src/core/components/ui/form/radio/radio.md +78 -0
  224. package/docs/src/core/components/ui/form/select/select.md +86 -0
  225. package/docs/src/core/components/ui/form/switch/switch.md +80 -0
  226. package/docs/src/core/components/ui/form/textarea/textarea.md +82 -0
  227. package/docs/src/core/components/ui/group/group.md +77 -0
  228. package/docs/src/core/components/ui/icon/icon.md +214 -0
  229. package/docs/src/core/components/ui/icon/icons.json +1 -0
  230. package/docs/src/core/components/ui/image/image.md +167 -0
  231. package/docs/src/core/components/ui/link/link.md +81 -0
  232. package/docs/src/core/components/ui/loader/loader.md +87 -0
  233. package/docs/src/core/components/ui/menu/menu.md +370 -0
  234. package/docs/src/core/components/ui/modal/modal.md +211 -0
  235. package/docs/src/core/components/ui/pop/pop.md +216 -0
  236. package/docs/src/core/components/ui/progress/progress.md +109 -0
  237. package/docs/src/core/components/ui/table/table.md +267 -0
  238. package/docs/src/core/components/ui/theme/theme.md +97 -0
  239. package/docs/src/core/components/ui/toast/toast.md +147 -0
  240. package/docs/src/core/components/ui/tooltip/tooltip.md +89 -0
  241. package/docs/src/docs/decorators/ancestor-attribute.md +59 -0
  242. package/docs/src/docs/decorators/auto-subscribe.md +40 -0
  243. package/docs/src/docs/decorators/bind.md +77 -0
  244. package/docs/src/docs/decorators/get.md +160 -0
  245. package/docs/src/docs/decorators/handle.md +119 -0
  246. package/docs/src/docs/decorators/on-assign.md +63 -0
  247. package/docs/src/docs/decorators/patch.md +44 -0
  248. package/docs/src/docs/decorators/post.md +134 -0
  249. package/docs/src/docs/decorators/publish.md +56 -0
  250. package/docs/src/docs/decorators/put.md +51 -0
  251. package/docs/src/docs/decorators/subscribe.md +87 -0
  252. package/docs/src/docs/decorators/wait-for-ancestors.md +76 -0
  253. package/docs/src/docs/directives/sub.md +75 -0
  254. package/docs/src/docs/directives/t.md +73 -0
  255. package/docs/src/docs/getting-started/ai-agents.md +76 -0
  256. package/docs/src/docs/getting-started/components.md +5 -0
  257. package/docs/src/docs/getting-started/create-a-component.md +136 -0
  258. package/docs/src/docs/getting-started/dataFlow.md +87 -0
  259. package/docs/src/docs/getting-started/installation.md +36 -0
  260. package/docs/src/docs/getting-started/my-first-component.md +227 -0
  261. package/docs/src/docs/getting-started/start.md +35 -0
  262. package/docs/src/docs/getting-started/theming.md +253 -0
  263. package/docs/src/docs/misc/api-configuration.md +79 -0
  264. package/docs/src/docs/misc/dataProviderKey.md +168 -0
  265. package/docs/src/docs/misc/docs-mock-api.md +62 -0
  266. package/docs/src/docs/misc/dynamic-path.md +71 -0
  267. package/docs/src/docs/misc/endpoint.md +45 -0
  268. package/docs/src/docs/misc/html-integration.md +14 -0
  269. package/docs/src/docs/search/docs-search.json +10287 -0
  270. package/docs/src/tag-list.json +1 -0
  271. package/docs/src/tsconfig-model.json +23 -0
  272. package/docs/src/tsconfig.json +1353 -0
  273. package/index.html +68 -5
  274. package/package.json +1 -1
  275. package/public/docs-mock-api-sw.js +58 -223
  276. package/public/docs-mock-api-sw.js.map +4 -4
  277. package/public/img/concorde/plane_01.jpg +0 -0
  278. package/public/img/concorde/plane_02.jpg +0 -0
  279. package/public/img/concorde/plane_03.jpg +0 -0
  280. package/public/img/concorde/plane_04.jpg +0 -0
  281. package/public/img/concorde/plane_05.jpg +0 -0
  282. package/public/img/concorde/plane_06.jpg +0 -0
  283. package/public/img/concorde/plane_07.jpg +0 -0
  284. package/public/img/concorde/plane_08.jpg +0 -0
  285. package/public/img/concorde/plane_09.jpg +0 -0
  286. package/public/img/concorde/plane_10.jpg +0 -0
  287. package/public/img/concorde/plane_11.jpg +0 -0
  288. package/public/img/concorde/plane_12.jpg +0 -0
  289. package/public/img/concorde/plane_13.jpg +0 -0
  290. package/public/robots.txt +11 -10
  291. package/scripts/docs-markdown-vite-plugin.ts +37 -0
  292. package/scripts/docs-public-url.mjs +50 -0
  293. package/scripts/docs.htaccess +75 -0
  294. package/scripts/generate-crawl-docs.mjs +207 -116
  295. package/scripts/generate-crawl-docs.test.mjs +124 -0
  296. package/scripts/post-build-docs.js +34 -50
  297. package/src/core/components/functional/date/date.md +91 -231
  298. package/src/core/components/functional/fetch/fetch.md +66 -83
  299. package/src/core/components/functional/if/if.md +28 -3
  300. package/src/core/components/functional/jsonata/jsonata.md +42 -37
  301. package/src/core/components/functional/list/list.md +99 -43
  302. package/src/core/components/functional/mix/mix.md +31 -26
  303. package/src/core/components/functional/queue/queue.demo.ts +10 -7
  304. package/src/core/components/functional/queue/queue.md +40 -61
  305. package/src/core/components/functional/router/router.demo.ts +16 -16
  306. package/src/core/components/functional/router/router.md +64 -65
  307. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  308. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  309. package/src/core/components/functional/sdui/example.json +19 -86
  310. package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  311. package/src/core/components/functional/sdui/sdui.md +187 -358
  312. package/src/core/components/functional/states/states.demo.ts +21 -22
  313. package/src/core/components/functional/states/states.md +86 -61
  314. package/src/core/components/functional/states/states.ts +1 -1
  315. package/src/core/components/functional/submit/submit.md +64 -72
  316. package/src/core/components/functional/translation/translation.md +38 -0
  317. package/src/core/components/functional/value/value.md +34 -22
  318. package/src/core/components/ui/alert/alert.md +48 -58
  319. package/src/core/components/ui/badge/badge.md +27 -34
  320. package/src/core/components/ui/button/button.md +139 -106
  321. package/src/core/components/ui/captcha/captcha.md +17 -32
  322. package/src/core/components/ui/card/card.md +6 -6
  323. package/src/core/components/ui/divider/divider.md +8 -11
  324. package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  325. package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
  326. package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
  327. package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
  328. package/src/core/components/ui/form/input/input.md +95 -95
  329. package/src/core/components/ui/form/radio/radio.md +55 -34
  330. package/src/core/components/ui/form/select/select.md +60 -45
  331. package/src/core/components/ui/form/switch/switch.md +57 -34
  332. package/src/core/components/ui/form/textarea/textarea.md +55 -38
  333. package/src/core/components/ui/group/group.md +35 -33
  334. package/src/core/components/ui/icon/icon.md +4 -4
  335. package/src/core/components/ui/image/image.md +41 -107
  336. package/src/core/components/ui/link/link.md +6 -6
  337. package/src/core/components/ui/loader/loader.md +30 -55
  338. package/src/core/components/ui/menu/menu.md +27 -27
  339. package/src/core/components/ui/modal/modal.md +72 -96
  340. package/src/core/components/ui/pop/pop.md +80 -158
  341. package/src/core/components/ui/progress/progress.md +2 -2
  342. package/src/core/components/ui/table/table.md +91 -255
  343. package/src/core/components/ui/theme/theme.md +11 -36
  344. package/src/core/components/ui/toast/toast.md +48 -117
  345. package/src/core/components/ui/tooltip/tooltip.md +27 -62
  346. package/src/core/utils/LocationHandler.spec.ts +80 -0
  347. package/src/core/utils/LocationHandler.ts +5 -9
  348. package/src/docs/components/docs-demo-sources.ts +55 -140
  349. package/src/docs/components/docs-lit-demo.ts +1 -3
  350. package/src/docs/components/docs-source-link.ts +0 -82
  351. package/src/docs/decorators/ancestor-attribute.md +59 -0
  352. package/src/docs/decorators/auto-subscribe.md +40 -0
  353. package/src/docs/decorators/bind.md +77 -0
  354. package/src/docs/decorators/get.md +160 -0
  355. package/src/docs/decorators/handle.md +119 -0
  356. package/src/docs/decorators/on-assign.md +63 -0
  357. package/src/docs/decorators/patch.md +44 -0
  358. package/src/docs/decorators/post.md +134 -0
  359. package/src/docs/decorators/publish.md +56 -0
  360. package/src/docs/decorators/put.md +51 -0
  361. package/src/docs/decorators/subscribe.md +87 -0
  362. package/src/docs/decorators/wait-for-ancestors.md +76 -0
  363. package/src/docs/directives/sub.md +75 -0
  364. package/src/docs/directives/t.md +73 -0
  365. package/src/docs/docs-location.spec.ts +46 -0
  366. package/src/docs/docs-location.ts +123 -32
  367. package/src/docs/docs.ts +1 -2
  368. package/src/docs/example/decorators-demo-bind-demos.ts +81 -116
  369. package/src/docs/example/decorators-demo-geo.ts +30 -19
  370. package/src/docs/example/decorators-demo-post.ts +88 -186
  371. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
  372. package/src/docs/example/decorators-demo.ts +85 -98
  373. package/src/docs/example/docs-api-config-demos.ts +19 -20
  374. package/src/docs/example/docs-flight-demos.ts +147 -0
  375. package/src/docs/example/docs-jsonata-demos.ts +52 -52
  376. package/src/docs/example/docs-list-demos.ts +43 -123
  377. package/src/docs/example/docs-provider-keys.ts +21 -28
  378. package/src/docs/example/docs-queue-demos.ts +37 -77
  379. package/src/docs/example/docs-router-demos.ts +20 -25
  380. package/src/docs/example/docs-submit-demos.ts +48 -48
  381. package/src/docs/example/docs-toggle-demos.ts +4 -3
  382. package/src/docs/getting-started/ai-agents.md +76 -0
  383. package/src/docs/getting-started/components.md +5 -0
  384. package/src/docs/getting-started/create-a-component.md +136 -0
  385. package/src/docs/getting-started/dataFlow.md +87 -0
  386. package/src/docs/getting-started/installation.md +36 -0
  387. package/src/docs/getting-started/my-first-component.md +227 -0
  388. package/src/docs/getting-started/start.md +35 -0
  389. package/src/docs/getting-started/theming.md +253 -0
  390. package/src/docs/header/header.ts +11 -6
  391. package/src/docs/home/catalog.ts +1 -1
  392. package/src/docs/home/home.ts +17 -10
  393. package/src/docs/layout.ts +12 -13
  394. package/src/docs/misc/api-configuration.md +79 -0
  395. package/src/docs/misc/dataProviderKey.md +168 -0
  396. package/src/docs/misc/docs-mock-api.md +62 -0
  397. package/src/docs/misc/dynamic-path.md +71 -0
  398. package/src/docs/misc/endpoint.md +45 -0
  399. package/src/docs/misc/html-integration.md +14 -0
  400. package/src/docs/mock-api/api-config-mock.ts +5 -0
  401. package/src/docs/mock-api/fixtures.ts +0 -278
  402. package/src/docs/mock-api/flights.ts +89 -0
  403. package/src/docs/mock-api/router.ts +3 -4
  404. package/src/docs/mock-api/urls.ts +1 -2
  405. package/src/docs/navigation/navigation.ts +82 -103
  406. package/src/docs/navigation/toc.ts +7 -4
  407. package/src/docs/search/docs-search.json +2845 -5110
  408. package/src/docs/search/markdown-renderer.ts +25 -7
  409. package/src/docs/search/page.ts +9 -6
  410. package/src/docs/search/search.ts +154 -122
  411. package/vite.config.mts +11 -2
  412. package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
  413. package/docs/assets/index-CD4WyL6o.css +0 -1
  414. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  415. package/src/docs/_core-concept/overview.md +0 -57
  416. package/src/docs/_core-concept/subscriber.md +0 -75
  417. package/src/docs/_decorators/ancestor-attribute.md +0 -128
  418. package/src/docs/_decorators/auto-subscribe.md +0 -202
  419. package/src/docs/_decorators/bind.md +0 -167
  420. package/src/docs/_decorators/get.md +0 -162
  421. package/src/docs/_decorators/handle.md +0 -175
  422. package/src/docs/_decorators/on-assign.md +0 -390
  423. package/src/docs/_decorators/patch.md +0 -70
  424. package/src/docs/_decorators/post.md +0 -146
  425. package/src/docs/_decorators/publish.md +0 -55
  426. package/src/docs/_decorators/put.md +0 -70
  427. package/src/docs/_decorators/subscribe.md +0 -100
  428. package/src/docs/_decorators/wait-for-ancestors.md +0 -163
  429. package/src/docs/_directives/sub.md +0 -91
  430. package/src/docs/_getting-started/concorde-manual-install.md +0 -133
  431. package/src/docs/_getting-started/concorde-outside.md +0 -33
  432. package/src/docs/_getting-started/my-first-subscriber.md +0 -120
  433. package/src/docs/_getting-started/pubsub.md +0 -37
  434. package/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  435. package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
  436. package/src/docs/example/docs-joke-demos.ts +0 -297
  437. /package/{src/docs/_getting-started → docs/docs/getting-started}/components.md +0 -0
  438. /package/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +0 -0
@@ -1,120 +0,0 @@
1
- # Legacy: My first subscriber component
2
-
3
- > **New projects:** use [My first component](#docs/_getting-started/my-first-component.md/my-first-component) (`@ancestorAttribute`, `@subscribe` + `DataProviderKey`, `.items` on lists) and [Data flow](#docs/_core-concept/dataFlow.md/dataFlow). This page documents the **Subscriber mixin** used by older apps and core components.
4
-
5
- Learn how to build a component with the **Subscriber** mixin, styled with Tailwind, filled from a DataProvider via automatic property mapping.
6
-
7
- ## Create a classic lit component
8
-
9
- <sonic-code language="javascript" >
10
- <template>
11
- import { html, LitElement, nothing } from "lit";
12
- import { customElement, property } from "lit/decorators.js";
13
- @customElement("docs-user")
14
- export class user extends LitElement {
15
- @property({ type: String }) first_name = "";
16
- @property({ type: String }) last_name = "";
17
- @property({ type: String }) avatar = "";
18
- @property({ type: String }) email = "";
19
- render() {
20
- return html`
21
- &lt;img src="${this.avatar}" /&gt; &lt;br&gt;
22
- ${this.first_name} ${this.last_name} &lt;br&gt;
23
- ${this.email}`;
24
- }
25
- }
26
- </template>
27
- </sonic-code>
28
-
29
- ### Style with tailwind and ui components
30
-
31
- <sonic-code language="javascript">
32
- <template>
33
- import { css, unsafeCSS } from "lit";
34
- import tailwindImport from "./css/tailwind.css?inline";
35
- export const tailwind = css`${unsafeCSS(tailwindImport)}`;
36
- </template>
37
- </sonic-code>
38
-
39
- <sonic-code language="javascript">
40
- <template>
41
- import { html, LitElement } from "lit";
42
- import { customElement, property } from "lit/decorators.js";
43
- import { tailwind } from "../tailwind";
44
- import '@supersoniks/concode/ui/image'
45
- import '@supersoniks/concode/ui/button'
46
- import '@supersoniks/concode/ui/icon'
47
- @customElement("docs-user")
48
- export class user extends LitElement {
49
- static styles = [tailwind];
50
- @property({ type: String }) first_name = "";
51
- @property({ type: String }) last_name = "";
52
- @property({ type: String }) avatar = "";
53
- @property({ type: String }) email = "";
54
- render() {
55
- return html`&lt;div class="flex items-center gap-3 p-2"&gt;
56
- &lt;sonic-image src=${this.avatar} rounded="md" ratio="1/1" class="w-16"&gt;&lt;/sonic-image&gt;
57
- &lt;div&gt;${this.first_name} &lt;span class="font-bold"&gt;${this.last_name}&lt;/span&gt;&lt;/div&gt;
58
- &lt;div class="text-sm text-neutral-400"&gt;${this.email}&lt;/div&gt;
59
- &lt;/div&gt;`;
60
- }
61
- }
62
- </template>
63
- </sonic-code>
64
-
65
- ## Add Subscriber mixin
66
-
67
- <sonic-code language="javascript">
68
- <template>
69
- import Subscriber from "@supersoniks/concorde/core/mixins/Subscriber";
70
- @customElement("docs-user")
71
- export class user extends Subscriber(LitElement) {
72
- // properties auto-filled from DataProvider when names match
73
- }
74
- </template>
75
- </sonic-code>
76
-
77
- See [Legacy: Subscriber mixin](#docs/_core-concept/subscriber.md/subscriber).
78
-
79
- ## Autofill from a dataProvider
80
-
81
- <sonic-code >
82
- <template>
83
- <docs-demo-sources for="list-users-fetch"></docs-demo-sources>
84
- <div serviceURL="/docs-mock-api">
85
- <sonic-fetch
86
- serviceURL="/docs-mock-api"
87
- dataProvider="api/users/3"
88
- key="data">
89
- <docs-user></docs-user>
90
- </sonic-fetch>
91
- </div>
92
- </template>
93
- </sonic-code>
94
-
95
- <sonic-code >
96
- <template>
97
- <sonic-fetch
98
- serviceURL="/docs-mock-api"
99
- dataProvider="api/users/2"
100
- key="data"></sonic-fetch>
101
- <docs-user dataProvider="api/users/2" ></docs-user>
102
- </template>
103
- </sonic-code>
104
-
105
- <sonic-code >
106
- <template>
107
- <div class="grid grid-cols-1 gap-4">
108
- <form formDataProvider="userPreview" class="grid grid-cols-4 gap-3" >
109
- <sonic-input label="First name" type="text" name="first_name" value="Paul" size="sm"></sonic-input>
110
- <sonic-input label="Last name" type="text" name="last_name" value="Metrand" size="sm"></sonic-input>
111
- <sonic-input class="col-span-2" label="email" type="text" name="email" value="paul@example.com" size="sm"></sonic-input>
112
- <sonic-input label="Image url" type="text" name="avatar" value="https://i.pravatar.cc/150?u=paul" size="sm"></sonic-input>
113
- </form>
114
- <sonic-divider align="left">Preview before submit</sonic-divider>
115
- <div dataProvider="userPreview">
116
- <docs-user></docs-user>
117
- </div>
118
- </div>
119
- </template>
120
- </sonic-code>
@@ -1,37 +0,0 @@
1
- # Legacy: Sharing data
2
-
3
- > **New apps:** [Data flow](#docs/_core-concept/dataFlow.md/dataFlow) (`get` / `set` / `DataProviderKey`, decorators). This page documents the historical **Publisher** proxy API (`PublisherManager`, `publisher.set`, `onAssign`, …).
4
-
5
- This section describes how data is shared between graphical and non-graphical components.
6
-
7
- Graphical components should not reference each other directly — they stay decoupled via a **publish/subscribe** store.
8
-
9
- ## The Publisher
10
-
11
- ### Principle
12
-
13
- * The **publisher** is a [JavaScript proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) that holds data.<br>
14
- Example: `{foo:{hello:["world"]}, bar:"baz"}`
15
-
16
- * Accessing a property (`myPublisher.foo.hello`) returns another **publisher** for that segment.
17
-
18
- * Missing properties create a publisher with internal data `null`, filled later.
19
-
20
- * **Subscribers** listen via `onAssign`, `onInternalMutation`, template filling on the **Subscriber mixin**, etc.
21
-
22
- * Updates use `publisher.set(...)` or nested assignment; changes propagate to subscribers.
23
-
24
- ❇️ Order of creation vs subscription theoretically does not matter.
25
-
26
- ### Methods
27
-
28
- * **set** — replace internal value
29
- <sonic-code language="javascript"><template>publisher.set({foo:{hello:["world"]}, bar:"baz"});</template></sonic-code>
30
-
31
- * **get** — read internal value
32
- <sonic-code language="javascript"><template>publisher.get()</template></sonic-code>
33
-
34
- * **onAssign / offAssign** — react to `set`
35
- <sonic-code language="javascript"><template>publisher.a.b.onAssign(console.log);</template></sonic-code>
36
-
37
- Modern equivalent: `get` / `set` / `@handle` — see [Data flow](#docs/_core-concept/dataFlow.md/dataFlow).
@@ -1,115 +0,0 @@
1
- # FormElement without Subscriber (REDMINE-79569)
2
-
3
- Form fields (`sonic-input`, `textarea`, `select`, `checkbox`, `radio`, `switch`, `button`, `input-autocomplete`) no longer inherit the **Subscriber** mixin.
4
-
5
- ## Behaviour now
6
-
7
- | Before | After |
8
- |--------|--------|
9
- | Dual channel `dataProvider` (autofill) + `formDataProvider` | **`formDataProvider` + `name` only** |
10
- | Ancestor `dataProvider` auto-filled field props | Ignored by form fields |
11
- | `noAutoFill` on fields/buttons inside a `dataProvider` tree | Dead on form fields (attribute harmless; can be cleaned in apps) |
12
-
13
- Preview pattern still valid: form writes via `formDataProvider`, display card reads via `dataProvider` on a **Subscriber** (or `@subscribe`) sibling — not on the fields themselves.
14
-
15
- ## Migration checklist (apps)
16
-
17
- 1. Prefer `formDataProvider` alone on forms / fieldsets.
18
- 2. Drop redundant `dataProvider={sameKey}` on form containers when it only existed for field autofill.
19
- 3. Prefill edit forms with `set(formKey, row)` / `dp(formKey.field).set(...)` before mount — not field `dataProvider`.
20
- 4. Remove `noAutoFill` on `sonic-button` / fields when it only blocked Subscriber autofill.
21
- 5. `initFromPublisher` still works (form publisher only).
22
-
23
- ## Billetterie collect — dual-channel risk
24
-
25
- Files under `la-billetterie/concorde` that mention both `formDataProvider` and `dataProvider=` (review; many are filter+queue, not field autofill):
26
-
27
- ### High priority (same key on form container)
28
-
29
- - `la-billetterie/components/reservation-request/atoms/request-event-form.ts` — `form` / `fieldset` with both attrs equal
30
- - `la-billetterie/components/reservation/atoms/new-quote-form.ts`
31
- - `la-billetterie/components/stats/sales-summary/sales-summary.ts`
32
- - `la-billetterie/components/product/price-selection-form/price-selection-form.ts` — `formDataProvider` + `dataProvider="cart/editForm"`
33
- - `la-billetterie/components/user/account/link-ticket/link-ticket.ts` — distinct keys (API vs form) — keep `dataProvider` only if used by fetch/submit siblings
34
-
35
- ### Filters + queue (usually OK)
36
-
37
- `formDataProvider` on filter bar, `dataProvider` on `sonic-queue` / list — no field autofill dependency:
38
-
39
- - `access-control/components/event/list/index.ts`
40
- - `access-control/components/control/search/views/list.ts`
41
- - `la-billetterie/components/event/form-event-filter/form-event-filter.ts`
42
- - `la-billetterie/components/counter/*` (agenda, store, reservation-request-treatment, …)
43
- - `widgets/agenda/agenda.ts`
44
- - … see full dual list in ticket notes / grep below
45
-
46
- ### Full dual-channel file list (55)
47
-
48
- ```
49
- concorde/src/access-control/components/control/search/views/list.ts
50
- concorde/src/access-control/components/event/list/index.ts
51
- concorde/src/la-billetterie/components/access-control-mobile/access-controller-picker.ts
52
- concorde/src/la-billetterie/components/accreditations-directory/accreditations-directory.ts
53
- concorde/src/la-billetterie/components/address/address-suggestion.ts
54
- concorde/src/la-billetterie/components/bulk/bulk.ts
55
- concorde/src/la-billetterie/components/campaign/campaign-content.ts
56
- concorde/src/la-billetterie/components/counter/agenda/agenda.ts
57
- concorde/src/la-billetterie/components/counter/event-selector/event-selector.ts
58
- concorde/src/la-billetterie/components/counter/order-validation/order-validation-settings.ts
59
- concorde/src/la-billetterie/components/counter/print/format-menu.ts
60
- concorde/src/la-billetterie/components/counter/reservation-request-treatment/reservation-request-treatment.ts
61
- concorde/src/la-billetterie/components/counter/store/counter-store.ts
62
- concorde/src/la-billetterie/components/counter/widgets-settings/widgets-settings-page.ts
63
- concorde/src/la-billetterie/components/custom-list/custom-list.ts
64
- concorde/src/la-billetterie/components/event/agenda/agenda.ts
65
- concorde/src/la-billetterie/components/event/atoms/buy-event-block/buy-event-block.ts
66
- concorde/src/la-billetterie/components/event/atoms/categorizedPrices/categorizedPrices.ts
67
- concorde/src/la-billetterie/components/event/event-store/event-store-content.ts
68
- concorde/src/la-billetterie/components/event/form-event-filter/form-event-filter.ts
69
- concorde/src/la-billetterie/components/form/event-selection/event-selection-filters.ts
70
- concorde/src/la-billetterie/components/form/event-selection/event-selection.ts
71
- concorde/src/la-billetterie/components/giftcards/giftcard-link.ts
72
- concorde/src/la-billetterie/components/layout/header.ts
73
- concorde/src/la-billetterie/components/orders/recover/recover.ts
74
- concorde/src/la-billetterie/components/placing/atoms/placement-choice/placement-choice.ts
75
- concorde/src/la-billetterie/components/placing/seatmap-view/seatmap-view.ts
76
- concorde/src/la-billetterie/components/product/price-selection-form/price-selection-form.ts
77
- concorde/src/la-billetterie/components/product/prices-form/price-button/price-button.ts
78
- concorde/src/la-billetterie/components/purchase/purchase-summary/complementary-info/complementary-info.ts
79
- concorde/src/la-billetterie/components/reservation-request/atoms/request-event-form.ts
80
- concorde/src/la-billetterie/components/reservation/atoms/new-quote-form.ts
81
- concorde/src/la-billetterie/components/reservation/reservation-content.ts
82
- concorde/src/la-billetterie/components/seatmap/seatmap.ts
83
- concorde/src/la-billetterie/components/shop/shop.ts
84
- concorde/src/la-billetterie/components/stats/dashboard/dashboard.ts
85
- concorde/src/la-billetterie/components/stats/event/event-stats-check.ts
86
- concorde/src/la-billetterie/components/stats/sales-summary/sales-summary.ts
87
- concorde/src/la-billetterie/components/subscription/atoms/quick-select-display-toggle/quick-select-display-toggle.ts
88
- concorde/src/la-billetterie/components/subscription/cart-quick-select.ts
89
- concorde/src/la-billetterie/components/subscription/edit/subscription-renew-form.ts
90
- concorde/src/la-billetterie/components/ticket/ticket-freeup.ts
91
- concorde/src/la-billetterie/components/tickets-app/default-router.ts
92
- concorde/src/la-billetterie/components/user/account/account-purchases.ts
93
- concorde/src/la-billetterie/components/user/account/account-tickets.ts
94
- concorde/src/la-billetterie/components/user/account/link-ticket/link-ticket.ts
95
- concorde/src/la-billetterie/components/user/form/login.ts
96
- concorde/src/la-billetterie/components/user/user-attach/buyer-attach-form.ts
97
- concorde/src/la-billetterie/components/user/user-attach/buyer-attach.ts
98
- concorde/src/la-billetterie/components/user/user-attach/owner-attach-form.ts
99
- concorde/src/la-billetterie/components/user/user-attach/subscription-attach-form.ts
100
- concorde/src/la-billetterie/components/user/user-attach/subscription-selector.ts
101
- concorde/src/la-billetterie/components/user/user-selector/user-selector.ts
102
- concorde/src/la-billetterie/components/user/user-suggest/user-suggest.ts
103
- concorde/src/widgets/agenda/agenda.ts
104
- ```
105
-
106
- Re-run audit:
107
-
108
- ```bash
109
- # from la-billetterie
110
- rg -l 'formDataProvider' concorde/src | while read f; do rg -q 'dataProvider\s*=' "$f" && echo "$f"; done
111
- ```
112
-
113
- ## Non-regression (Concorde docs)
114
-
115
- Smoke form demos: input, textarea, select, checkbox (incl. check-all), radio, switch, button form modes, queue + `dataFilterProvider`, submit, validation / sameValueAs, input-autocomplete.
@@ -1,110 +0,0 @@
1
- import { html, LitElement } from "lit";
2
- import { customElement } from "lit/decorators.js";
3
- import { DOCS_MOCK_GEO_SERVICE } from "../mock-api/urls";
4
-
5
- import "../../core/components/ui/form/input-autocomplete/input-autocomplete";
6
- import "../../core/components/ui/menu/menu-item";
7
-
8
- type CommuneRow = { nom: string; code: string };
9
-
10
- /** Ligne suggestion : pas de radio/name (évite d'écrire dans le form au render). */
11
- const communeItem =
12
- (valueKey: "nom" | "code") => (item: CommuneRow) =>
13
- html`<sonic-menu-item
14
- data-autocomplete-value=${item[valueKey]}
15
- data-autocomplete-label=${item.nom}
16
- >${item.nom}</sonic-menu-item
17
- >`;
18
-
19
- @customElement("docs-input-autocomplete-basic-demo")
20
- export class DocsInputAutocompleteBasicDemo extends LitElement {
21
- private items = communeItem("nom");
22
-
23
- render() {
24
- return html`
25
- <sonic-input-autocomplete
26
- class="w-64"
27
- label="Ville"
28
- formDataProvider="autoComplete-example-base"
29
- name="nom"
30
- placeholder="Paris, Lyon, Tours, ..."
31
- serviceURL=${DOCS_MOCK_GEO_SERVICE}
32
- dataProviderExpression="communes?limit=5"
33
- .items=${this.items}
34
- ></sonic-input-autocomplete>
35
- `;
36
- }
37
- }
38
-
39
- @customElement("docs-input-autocomplete-code-demo")
40
- export class DocsInputAutocompleteCodeDemo extends LitElement {
41
- private items = communeItem("code");
42
-
43
- render() {
44
- return html`
45
- <sonic-input-autocomplete
46
- class="w-64"
47
- label="Ville (code INSEE)"
48
- formDataProvider="autoComplete-example"
49
- name="code"
50
- value="13055"
51
- placeholder="Paris, Lyon, Tours, ..."
52
- serviceURL=${DOCS_MOCK_GEO_SERVICE}
53
- dataProviderExpression="communes?limit=5"
54
- searchParameter="nom"
55
- .items=${this.items}
56
- ></sonic-input-autocomplete>
57
- `;
58
- }
59
- }
60
-
61
- @customElement("docs-input-autocomplete-select-demo")
62
- export class DocsInputAutocompleteSelectDemo extends LitElement {
63
- private items = communeItem("code");
64
-
65
- render() {
66
- return html`
67
- <sonic-input-autocomplete
68
- select
69
- class="w-64"
70
- label="Ville (select)"
71
- formDataProvider="autoComplete-example2"
72
- name="code"
73
- value="69123"
74
- placeholder="Paris, Lyon, Tours, ..."
75
- serviceURL=${DOCS_MOCK_GEO_SERVICE}
76
- dataProviderExpression="communes?limit=5"
77
- searchParameter="nom"
78
- .items=${this.items}
79
- ></sonic-input-autocomplete>
80
- `;
81
- }
82
- }
83
-
84
- @customElement("docs-input-autocomplete-keyboard-demo")
85
- export class DocsInputAutocompleteKeyboardDemo extends LitElement {
86
- private items = (item: CommuneRow) =>
87
- html`<sonic-menu-item
88
- data-keyboard-nav="nav-autocomplete"
89
- data-autocomplete-value=${item.nom}
90
- data-autocomplete-label=${item.nom}
91
- >${item.nom}</sonic-menu-item
92
- >`;
93
-
94
- render() {
95
- return html`
96
- <sonic-input-autocomplete
97
- class="w-64"
98
- label="Ville"
99
- formDataProvider="autoComplete-example-keyboard"
100
- name="nom"
101
- data-keyboard-nav="nav-autocomplete"
102
- placeholder="Paris, Lyon, Tours, ..."
103
- serviceURL=${DOCS_MOCK_GEO_SERVICE}
104
- dataProviderExpression="communes?limit=60"
105
- minSearchLength="1"
106
- .items=${this.items}
107
- ></sonic-input-autocomplete>
108
- `;
109
- }
110
- }
@@ -1,297 +0,0 @@
1
- import { html, LitElement, nothing } from "lit";
2
- import { customElement, property, state } from "lit/decorators.js";
3
- import {
4
- ancestorAttribute,
5
- subscribe,
6
- } from "@supersoniks/concorde/core/decorators/Subscriber";
7
- import { DataProviderKey } from "@supersoniks/concorde/core/utils/dataProviderKey";
8
- import { DOCS_MOCK_JOKES_SERVICE } from "../mock-api/urls";
9
- import {
10
- docsJokeCheckboxFilterKey,
11
- docsJokeInputFilterKey,
12
- docsJokeRadioFilterKey,
13
- docsJokeSelectFilterKey,
14
- docsJokeSwitchFilterKey,
15
- } from "./docs-provider-keys";
16
- import { tailwind } from "../tailwind";
17
-
18
- import "../../core/components/functional/queue/queue";
19
- import "../../core/components/ui/form/input/input";
20
- import "../../core/components/ui/form/select/select";
21
- import "../../core/components/ui/form/checkbox/checkbox";
22
- import "../../core/components/ui/form/radio/radio";
23
- import "../../core/components/ui/form/switch/switch";
24
-
25
- type JokeRow = {
26
- joke: string;
27
- setup?: string;
28
- delivery?: string;
29
- };
30
-
31
- const jokeRowKey = new DataProviderKey<
32
- JokeRow,
33
- { dataProvider: string | null }
34
- >("${dataProvider}");
35
-
36
- const filterFieldKey = new DataProviderKey<
37
- string,
38
- { filterProvider: string; field: string }
39
- >("${filterProvider}.${field}");
40
-
41
- @customElement("docs-joke-item")
42
- export class DocsJokeItem extends LitElement {
43
- static styles = [tailwind];
44
-
45
- @ancestorAttribute("dataProvider")
46
- dataProvider: string | null = null;
47
-
48
- @subscribe(jokeRowKey)
49
- @state()
50
- row: JokeRow | null = null;
51
-
52
- render() {
53
- const r = this.row;
54
- if (!r) return nothing;
55
- return html`
56
- <div
57
- class="space-y-1 border-0 border-b border-dotted border-neutral-300 py-3"
58
- >
59
- <div>${r.joke}</div>
60
- ${r.setup
61
- ? html`<div class="text-sm text-neutral-500">${r.setup}</div>`
62
- : nothing}
63
- ${r.delivery
64
- ? html`<div class="text-sm text-neutral-500">${r.delivery}</div>`
65
- : nothing}
66
- </div>
67
- `;
68
- }
69
- }
70
-
71
- @customElement("docs-joke-filter-caption")
72
- export class DocsJokeFilterCaption extends LitElement {
73
- @property() filterProvider = "";
74
- @property() field = "";
75
- @property() label = "";
76
-
77
- @subscribe(filterFieldKey)
78
- @state()
79
- value = "";
80
-
81
- render() {
82
- return html`
83
- <p class="my-4 block text-xl font-bold">
84
- ${this.label} « <span class="text-info">${this.value || "…"}</span> » :
85
- </p>
86
- `;
87
- }
88
- }
89
-
90
- @customElement("docs-joke-queue")
91
- export class DocsJokeQueue extends LitElement {
92
- @property() filterProvider = "";
93
- @property() expression = "joke/Any?amount=10&lang=fr";
94
-
95
- private jokeItem = () => html`<docs-joke-item></docs-joke-item>`;
96
-
97
- render() {
98
- return html`
99
- <sonic-queue
100
- lazyload
101
- dataProviderExpression=${this.expression}
102
- dataFilterProvider=${this.filterProvider}
103
- serviceURL=${DOCS_MOCK_JOKES_SERVICE}
104
- key="jokes"
105
- .items=${this.jokeItem}
106
- ></sonic-queue>
107
- `;
108
- }
109
- }
110
-
111
- @customElement("docs-joke-search-demo")
112
- export class DocsJokeSearchDemo extends LitElement {
113
- static styles = [tailwind];
114
-
115
- render() {
116
- return html`
117
- <sonic-input
118
- formDataProvider=${docsJokeInputFilterKey.path}
119
- name="contains"
120
- value="chien"
121
- class="mb-4"
122
- ></sonic-input>
123
- <docs-joke-filter-caption
124
- filterProvider=${docsJokeInputFilterKey.path}
125
- field="contains"
126
- label="Blagues trouvées pour"
127
- ></docs-joke-filter-caption>
128
- <docs-joke-queue
129
- filterProvider=${docsJokeInputFilterKey.path}
130
- expression="joke/Any?amount=10&lang=fr"
131
- ></docs-joke-queue>
132
- `;
133
- }
134
- }
135
-
136
- @customElement("docs-joke-lang-demo")
137
- export class DocsJokeLangDemo extends LitElement {
138
- static styles = [tailwind];
139
-
140
- render() {
141
- return html`
142
- <sonic-select
143
- formDataProvider=${docsJokeSelectFilterKey.path}
144
- name="lang"
145
- value="fr"
146
- >
147
- <option value="fr">fr</option>
148
- <option value="en">en</option>
149
- </sonic-select>
150
- <docs-joke-filter-caption
151
- filterProvider=${docsJokeSelectFilterKey.path}
152
- field="lang"
153
- label="Blagues pour la langue"
154
- ></docs-joke-filter-caption>
155
- <docs-joke-queue
156
- filterProvider=${docsJokeSelectFilterKey.path}
157
- expression="joke/Any?amount=10"
158
- ></docs-joke-queue>
159
- `;
160
- }
161
- }
162
-
163
- const jokeQueueRow = (row: JokeRow) => html`
164
- <div class="border-0 border-b border-neutral-300 py-3 leading-tight">
165
- <div>${row.joke}</div>
166
- ${row.setup ? html`<div class="font-bold">${row.setup}</div>` : nothing}
167
- ${row.delivery ? html`<div>${row.delivery}</div>` : nothing}
168
- </div>
169
- `;
170
-
171
- const BLACKLIST_CONTROLS = html`
172
- <sonic-checkbox name="blacklistFlags" value="nsfw">nsfw</sonic-checkbox>
173
- <sonic-checkbox name="blacklistFlags" value="religious">religious</sonic-checkbox>
174
- <sonic-checkbox name="blacklistFlags" value="political">political</sonic-checkbox>
175
- <sonic-checkbox name="blacklistFlags" value="racist" checked>racist</sonic-checkbox>
176
- <sonic-checkbox name="blacklistFlags" value="sexist" checked>sexist</sonic-checkbox>
177
- <sonic-checkbox name="blacklistFlags" value="explicit">explicit</sonic-checkbox>
178
- `;
179
-
180
- /** Checkbox — « Remove following jokes » (blacklistFlags → mock API). */
181
- @customElement("docs-joke-blacklist-demo")
182
- export class DocsJokeBlacklistDemo extends LitElement {
183
- static styles = [tailwind];
184
-
185
- private items = jokeQueueRow;
186
-
187
- render() {
188
- return html`
189
- <p class="my-4 block text-xl font-bold">Remove following jokes :</p>
190
- <div
191
- formDataProvider=${docsJokeCheckboxFilterKey.path}
192
- class="mb-3 grid grid-cols-2 gap-x-6 gap-y-2 lg:grid-cols-3"
193
- >
194
- ${BLACKLIST_CONTROLS}
195
- </div>
196
- <sonic-queue
197
- lazyload
198
- dataProviderExpression="joke/Any?offset=$offset&limit=$limit&lang=en"
199
- dataFilterProvider=${docsJokeCheckboxFilterKey.path}
200
- serviceURL=${DOCS_MOCK_JOKES_SERVICE}
201
- key="jokes"
202
- limit="5"
203
- class="grid max-h-96 overflow-y-auto"
204
- .items=${this.items}
205
- debug
206
- ></sonic-queue>
207
- `;
208
- }
209
- }
210
-
211
- /** Radio group — same API, single `blacklistFlags` value. */
212
- @customElement("docs-joke-blacklist-radio-demo")
213
- export class DocsJokeBlacklistRadioDemo extends LitElement {
214
- static styles = [tailwind];
215
-
216
- private items = jokeQueueRow;
217
-
218
- render() {
219
- return html`
220
- <p class="my-4 block text-xl font-bold">Remove following jokes :</p>
221
- <div
222
- formDataProvider=${docsJokeRadioFilterKey.path}
223
- class="mb-3 grid grid-cols-2 gap-x-6 gap-y-2 lg:grid-cols-3"
224
- >
225
- <sonic-radio name="blacklistFlags" value="nsfw">nsfw</sonic-radio>
226
- <sonic-radio name="blacklistFlags" value="religious"
227
- >religious</sonic-radio
228
- >
229
- <sonic-radio name="blacklistFlags" value="political"
230
- >political</sonic-radio
231
- >
232
- <sonic-radio name="blacklistFlags" value="racist" checked
233
- >racist</sonic-radio
234
- >
235
- <sonic-radio name="blacklistFlags" value="sexist">sexist</sonic-radio>
236
- <sonic-radio name="blacklistFlags" value="explicit"
237
- >explicit</sonic-radio
238
- >
239
- </div>
240
- <sonic-queue
241
- lazyload
242
- dataProviderExpression="joke/Any?offset=$offset&limit=$limit&lang=en"
243
- dataFilterProvider="jokeFilterRadio"
244
- serviceURL=${DOCS_MOCK_JOKES_SERVICE}
245
- key="jokes"
246
- limit="5"
247
- class="grid max-h-96 overflow-y-auto"
248
- .items=${this.items}
249
- debug
250
- ></sonic-queue>
251
- `;
252
- }
253
- }
254
-
255
- /** Switch — same blacklist filter. */
256
- @customElement("docs-joke-blacklist-switch-demo")
257
- export class DocsJokeBlacklistSwitchDemo extends LitElement {
258
- static styles = [tailwind];
259
-
260
- private items = jokeQueueRow;
261
-
262
- render() {
263
- return html`
264
- <p class="my-4 block text-xl font-bold">Remove following jokes :</p>
265
- <div
266
- formDataProvider=${docsJokeSwitchFilterKey.path}
267
- class="mb-3 grid grid-cols-2 gap-x-6 gap-y-2 lg:grid-cols-3"
268
- >
269
- <sonic-switch name="blacklistFlags" value="nsfw">nsfw</sonic-switch>
270
- <sonic-switch name="blacklistFlags" value="religious"
271
- >religious</sonic-switch
272
- >
273
- <sonic-switch name="blacklistFlags" value="political"
274
- >political</sonic-switch
275
- >
276
- <sonic-switch name="blacklistFlags" value="racist" checked
277
- >racist</sonic-switch
278
- >
279
- <sonic-switch name="blacklistFlags" value="sexist">sexist</sonic-switch>
280
- <sonic-switch name="blacklistFlags" value="explicit"
281
- >explicit</sonic-switch
282
- >
283
- </div>
284
- <sonic-queue
285
- lazyload
286
- dataProviderExpression="joke/Any?offset=$offset&limit=$limit&lang=en"
287
- dataFilterProvider=${docsJokeSwitchFilterKey.path}
288
- serviceURL=${DOCS_MOCK_JOKES_SERVICE}
289
- key="jokes"
290
- limit="5"
291
- class="grid max-h-96 overflow-y-auto"
292
- .items=${this.items}
293
- debug
294
- ></sonic-queue>
295
- `;
296
- }
297
- }