@supersoniks/concorde 5.0.5 → 5.1.1

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 (282) hide show
  1. package/.claude/launch.json +15 -0
  2. package/.claude/vite.http.config.mjs +7 -0
  3. package/.taste-skill/after/desktop-fold.jpg +0 -0
  4. package/.taste-skill/after/desktop-page-01.jpg +0 -0
  5. package/.taste-skill/after/desktop-page-02.jpg +0 -0
  6. package/.taste-skill/after/desktop-page-03.jpg +0 -0
  7. package/.taste-skill/after/mobile-fold.jpg +0 -0
  8. package/.taste-skill/after/mobile-page-01.jpg +0 -0
  9. package/.taste-skill/after/report.json +4103 -0
  10. package/.taste-skill/after/tablet-fold.jpg +0 -0
  11. package/.taste-skill/after/tablet-page-01.jpg +0 -0
  12. package/.taste-skill/after/tablet-page-02.jpg +0 -0
  13. package/.taste-skill/before/desktop-fold.jpg +0 -0
  14. package/.taste-skill/before/desktop-page-01.jpg +0 -0
  15. package/.taste-skill/before/desktop-page-02.jpg +0 -0
  16. package/.taste-skill/before/mobile-fold.jpg +0 -0
  17. package/.taste-skill/before/mobile-page-01.jpg +0 -0
  18. package/.taste-skill/before/report.json +2556 -0
  19. package/.taste-skill/before/tablet-fold.jpg +0 -0
  20. package/.taste-skill/before/tablet-page-01.jpg +0 -0
  21. package/.taste-skill/direction.json +510 -0
  22. package/.taste-skill/notes.md +84 -0
  23. package/.taste-skill/prod/desktop-fold.jpg +0 -0
  24. package/.taste-skill/prod/desktop-page-01.jpg +0 -0
  25. package/.taste-skill/prod/desktop-page-02.jpg +0 -0
  26. package/.taste-skill/prod/desktop-page-03.jpg +0 -0
  27. package/.taste-skill/prod/mobile-fold.jpg +0 -0
  28. package/.taste-skill/prod/mobile-page-01.jpg +0 -0
  29. package/.taste-skill/prod/mobile-page-02.jpg +0 -0
  30. package/.taste-skill/prod/report.json +1973 -0
  31. package/.taste-skill/prod/tablet-fold.jpg +0 -0
  32. package/.taste-skill/prod/tablet-page-01.jpg +0 -0
  33. package/.taste-skill/prod/tablet-page-02.jpg +0 -0
  34. package/.tmp-cem/custom-elements.json +13705 -0
  35. package/AUDIT.md +228 -0
  36. package/PLAN-AMELIORATION.md +220 -0
  37. package/build-infos.json +1 -1
  38. package/concorde-core.bundle.js +196 -196
  39. package/concorde-core.es.js +3854 -3572
  40. package/custom-elements-manifest.config.mjs +14 -0
  41. package/dist/concorde-core.bundle.js +196 -196
  42. package/dist/concorde-core.es.js +3854 -3572
  43. package/dist/img/archive/concorde-001-2cv.webp +0 -0
  44. package/dist/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  45. package/dist/img/archive/concorde-red-arrows-2002.webm +0 -0
  46. package/dist/img/archive/credits.json +28 -0
  47. package/docs/assets/index-Bb-_LRyY.js +12280 -0
  48. package/docs/index.html +1 -1
  49. package/index.html +27 -63
  50. package/package.json +44 -3
  51. package/public/img/archive/concorde-001-2cv.webp +0 -0
  52. package/public/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  53. package/public/img/archive/concorde-red-arrows-2002.webm +0 -0
  54. package/public/img/archive/credits.json +28 -0
  55. package/scripts/generate-sdui-catalog.mjs +250 -0
  56. package/scripts/generate-sdui-catalog.spec.ts +91 -0
  57. package/scripts/pre-build.mjs +15 -0
  58. package/src/core/components/functional/fetch/fetch.md +2 -2
  59. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +5 -5
  60. package/src/core/components/functional/sdui/__fixtures__/descriptors.ts +251 -0
  61. package/src/core/components/functional/sdui/__snapshots__/sdui-action.spec.ts.snap +73 -0
  62. package/src/core/components/functional/sdui/__snapshots__/sdui-incremental.spec.ts.snap +50 -0
  63. package/src/core/components/functional/sdui/__snapshots__/sdui-partial.spec.ts.snap +50 -0
  64. package/src/core/components/functional/sdui/__snapshots__/sdui.regression.spec.ts.snap +461 -0
  65. package/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  66. package/src/core/components/functional/sdui/component-catalog.json +3103 -0
  67. package/src/core/components/functional/sdui/component-catalog.spec.ts +23 -0
  68. package/src/core/components/functional/sdui/sdui-action.spec.ts +99 -0
  69. package/src/core/components/functional/sdui/sdui-dom-snapshot.ts +61 -0
  70. package/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  71. package/src/core/components/functional/sdui/sdui-incremental.spec.ts +137 -0
  72. package/src/core/components/functional/sdui/sdui-partial.spec.ts +83 -0
  73. package/src/core/components/functional/sdui/sdui-partial.ts +19 -0
  74. package/src/core/components/functional/sdui/sdui-safe.spec.ts +188 -0
  75. package/src/core/components/functional/sdui/sdui-safe.ts +100 -0
  76. package/src/core/components/functional/sdui/sdui.md +122 -0
  77. package/src/core/components/functional/sdui/sdui.regression.spec.ts +64 -0
  78. package/src/core/components/functional/sdui/sdui.ts +442 -34
  79. package/src/core/components/functional/sdui/types.ts +49 -0
  80. package/src/core/components/ui/modal/modal.ts +14 -11
  81. package/src/docs/_getting-started/components.md +5 -0
  82. package/src/docs/_getting-started/theming.md +2 -2
  83. package/src/docs/code.ts +88 -75
  84. package/src/docs/components/docs-demo-sources.ts +16 -8
  85. package/src/docs/components/docs-lit-demo.ts +19 -37
  86. package/src/docs/docs.ts +5 -0
  87. package/src/docs/example/docs-boarding-pass-demo.ts +134 -0
  88. package/src/docs/example/docs-provider-keys.ts +12 -0
  89. package/src/docs/header/header.ts +233 -69
  90. package/src/docs/home/catalog.ts +44 -0
  91. package/src/docs/home/home.ts +513 -0
  92. package/src/docs/home/mach-stage.ts +389 -0
  93. package/src/docs/layout.ts +3 -1
  94. package/src/docs/navigation/components-index.ts +56 -0
  95. package/src/docs/navigation/navigation.ts +240 -232
  96. package/src/docs/navigation/pager.ts +67 -0
  97. package/src/docs/navigation/toc.ts +98 -0
  98. package/src/docs/search/docs-search.json +330 -20
  99. package/src/docs/search/markdown-renderer.ts +11 -3
  100. package/src/docs/shiki/index.ts +109 -0
  101. package/src/docs/tailwind/css/base/scrollbar.css +22 -0
  102. package/src/docs/tailwind/css/base/theme.css +96 -0
  103. package/src/docs/tailwind/css/base/typography.css +4 -0
  104. package/src/docs/tailwind/css/docs/boarding-pass.css +65 -0
  105. package/src/docs/tailwind/css/docs/content.css +32 -0
  106. package/src/docs/tailwind/css/docs/page.css +10 -0
  107. package/src/docs/tailwind/css/docs.css +9 -0
  108. package/src/docs/tailwind/css/home/hero.css +210 -0
  109. package/src/docs/tailwind/css/home/motion.css +84 -0
  110. package/src/docs/tailwind/css/home/sections.css +416 -0
  111. package/src/docs/tailwind/css/tailwind.css +7 -185
  112. package/src/tsconfig.json +113 -2
  113. package/src/tsconfig.tsbuildinfo +1 -1
  114. package/tailwind.config.js +8 -4
  115. package/docs/assets/index-wVZpLVYW.js +0 -12122
  116. package/docs/crawl/core/components/functional/date/date.html +0 -190
  117. package/docs/crawl/core/components/functional/fetch/fetch.html +0 -109
  118. package/docs/crawl/core/components/functional/if/if.html +0 -27
  119. package/docs/crawl/core/components/functional/jsonata/jsonata.html +0 -79
  120. package/docs/crawl/core/components/functional/list/list.html +0 -70
  121. package/docs/crawl/core/components/functional/mix/mix.html +0 -45
  122. package/docs/crawl/core/components/functional/queue/queue.html +0 -96
  123. package/docs/crawl/core/components/functional/router/router.html +0 -106
  124. package/docs/crawl/core/components/functional/sdui/sdui.html +0 -269
  125. package/docs/crawl/core/components/functional/states/states.html +0 -66
  126. package/docs/crawl/core/components/functional/submit/submit.html +0 -160
  127. package/docs/crawl/core/components/functional/subscriber/subscriber.html +0 -67
  128. package/docs/crawl/core/components/functional/value/value.html +0 -51
  129. package/docs/crawl/core/components/ui/alert/alert.html +0 -211
  130. package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +0 -131
  131. package/docs/crawl/core/components/ui/badge/badge.html +0 -197
  132. package/docs/crawl/core/components/ui/button/button.html +0 -150
  133. package/docs/crawl/core/components/ui/captcha/captcha.html +0 -112
  134. package/docs/crawl/core/components/ui/card/card.html +0 -253
  135. package/docs/crawl/core/components/ui/divider/divider.html +0 -144
  136. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +0 -73
  137. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +0 -266
  138. package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +0 -122
  139. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +0 -121
  140. package/docs/crawl/core/components/ui/form/input/input.html +0 -109
  141. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +0 -38
  142. package/docs/crawl/core/components/ui/form/radio/radio.html +0 -56
  143. package/docs/crawl/core/components/ui/form/select/select.html +0 -73
  144. package/docs/crawl/core/components/ui/form/switch/switch.html +0 -56
  145. package/docs/crawl/core/components/ui/form/textarea/textarea.html +0 -59
  146. package/docs/crawl/core/components/ui/group/group.html +0 -104
  147. package/docs/crawl/core/components/ui/icon/icon.html +0 -222
  148. package/docs/crawl/core/components/ui/image/image.html +0 -298
  149. package/docs/crawl/core/components/ui/link/link.html +0 -100
  150. package/docs/crawl/core/components/ui/loader/loader.html +0 -124
  151. package/docs/crawl/core/components/ui/menu/menu.html +0 -394
  152. package/docs/crawl/core/components/ui/modal/modal.html +0 -342
  153. package/docs/crawl/core/components/ui/pop/pop.html +0 -296
  154. package/docs/crawl/core/components/ui/progress/progress.html +0 -131
  155. package/docs/crawl/core/components/ui/table/table.html +0 -545
  156. package/docs/crawl/core/components/ui/theme/theme.html +0 -131
  157. package/docs/crawl/core/components/ui/toast/toast.html +0 -233
  158. package/docs/crawl/core/components/ui/tooltip/tooltip.html +0 -140
  159. package/docs/crawl/docs/_core-concept/dataFlow.html +0 -177
  160. package/docs/crawl/docs/_core-concept/overview.html +0 -66
  161. package/docs/crawl/docs/_core-concept/subscriber.html +0 -75
  162. package/docs/crawl/docs/_decorators/ancestor-attribute.html +0 -117
  163. package/docs/crawl/docs/_decorators/auto-subscribe.html +0 -202
  164. package/docs/crawl/docs/_decorators/bind.html +0 -141
  165. package/docs/crawl/docs/_decorators/get.html +0 -149
  166. package/docs/crawl/docs/_decorators/handle.html +0 -165
  167. package/docs/crawl/docs/_decorators/on-assign.html +0 -355
  168. package/docs/crawl/docs/_decorators/patch.html +0 -78
  169. package/docs/crawl/docs/_decorators/post.html +0 -139
  170. package/docs/crawl/docs/_decorators/publish.html +0 -61
  171. package/docs/crawl/docs/_decorators/put.html +0 -78
  172. package/docs/crawl/docs/_decorators/subscribe.html +0 -109
  173. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +0 -137
  174. package/docs/crawl/docs/_directives/sub.html +0 -93
  175. package/docs/crawl/docs/_getting-started/ai-agents.html +0 -173
  176. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +0 -100
  177. package/docs/crawl/docs/_getting-started/concorde-outside.html +0 -58
  178. package/docs/crawl/docs/_getting-started/create-a-component.html +0 -111
  179. package/docs/crawl/docs/_getting-started/my-first-component.html +0 -189
  180. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +0 -110
  181. package/docs/crawl/docs/_getting-started/pubsub.html +0 -62
  182. package/docs/crawl/docs/_getting-started/start.html +0 -76
  183. package/docs/crawl/docs/_getting-started/theming.html +0 -333
  184. package/docs/crawl/docs/_misc/api-configuration.html +0 -149
  185. package/docs/crawl/docs/_misc/dataProviderKey.html +0 -135
  186. package/docs/crawl/docs/_misc/docs-mock-api.html +0 -158
  187. package/docs/crawl/docs/_misc/dynamic-path.html +0 -180
  188. package/docs/crawl/docs/_misc/endpoint.html +0 -50
  189. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +0 -138
  190. package/docs/crawl/docs/_misc/html-integration.html +0 -48
  191. package/docs/crawl/hubs/decorators.html +0 -547
  192. package/docs/crawl/hubs/form-components.html +0 -381
  193. package/docs/crawl/hubs/remote-data.html +0 -452
  194. package/docs/crawl/index.html +0 -102
  195. package/docs/llms-full.txt +0 -7008
  196. package/docs/llms.txt +0 -97
  197. package/docs/sitemap.xml +0 -240
  198. package/docs/src/core/components/functional/date/date.md +0 -290
  199. package/docs/src/core/components/functional/fetch/fetch.md +0 -125
  200. package/docs/src/core/components/functional/if/if.md +0 -9
  201. package/docs/src/core/components/functional/jsonata/jsonata.md +0 -56
  202. package/docs/src/core/components/functional/list/list.md +0 -65
  203. package/docs/src/core/components/functional/mix/mix.md +0 -41
  204. package/docs/src/core/components/functional/queue/queue.md +0 -72
  205. package/docs/src/core/components/functional/router/router.md +0 -94
  206. package/docs/src/core/components/functional/sdui/default-library.json +0 -108
  207. package/docs/src/core/components/functional/sdui/example.json +0 -99
  208. package/docs/src/core/components/functional/sdui/sdui.md +0 -356
  209. package/docs/src/core/components/functional/states/states.md +0 -87
  210. package/docs/src/core/components/functional/submit/submit.md +0 -114
  211. package/docs/src/core/components/functional/subscriber/subscriber.md +0 -91
  212. package/docs/src/core/components/functional/value/value.md +0 -35
  213. package/docs/src/core/components/ui/alert/alert.md +0 -196
  214. package/docs/src/core/components/ui/alert-messages/alert-messages.md +0 -85
  215. package/docs/src/core/components/ui/badge/badge.md +0 -188
  216. package/docs/src/core/components/ui/button/button.md +0 -183
  217. package/docs/src/core/components/ui/captcha/captcha.md +0 -71
  218. package/docs/src/core/components/ui/card/card.md +0 -215
  219. package/docs/src/core/components/ui/divider/divider.md +0 -129
  220. package/docs/src/core/components/ui/form/checkbox/checkbox.md +0 -77
  221. package/docs/src/core/components/ui/form/fieldset/fieldset.md +0 -205
  222. package/docs/src/core/components/ui/form/form-actions/form-actions.md +0 -100
  223. package/docs/src/core/components/ui/form/form-layout/form-layout.md +0 -119
  224. package/docs/src/core/components/ui/form/input/input.md +0 -142
  225. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  226. package/docs/src/core/components/ui/form/radio/radio.md +0 -57
  227. package/docs/src/core/components/ui/form/select/select.md +0 -71
  228. package/docs/src/core/components/ui/form/switch/switch.md +0 -57
  229. package/docs/src/core/components/ui/form/textarea/textarea.md +0 -65
  230. package/docs/src/core/components/ui/group/group.md +0 -75
  231. package/docs/src/core/components/ui/icon/icon.md +0 -214
  232. package/docs/src/core/components/ui/icon/icons.json +0 -1
  233. package/docs/src/core/components/ui/image/image.md +0 -233
  234. package/docs/src/core/components/ui/link/link.md +0 -81
  235. package/docs/src/core/components/ui/loader/loader.md +0 -112
  236. package/docs/src/core/components/ui/menu/menu.md +0 -370
  237. package/docs/src/core/components/ui/modal/modal.md +0 -235
  238. package/docs/src/core/components/ui/pop/pop.md +0 -294
  239. package/docs/src/core/components/ui/progress/progress.md +0 -109
  240. package/docs/src/core/components/ui/table/table.md +0 -431
  241. package/docs/src/core/components/ui/theme/theme.md +0 -122
  242. package/docs/src/core/components/ui/toast/toast.md +0 -216
  243. package/docs/src/core/components/ui/tooltip/tooltip.md +0 -124
  244. package/docs/src/docs/_core-concept/dataFlow.md +0 -88
  245. package/docs/src/docs/_core-concept/overview.md +0 -57
  246. package/docs/src/docs/_core-concept/subscriber.md +0 -75
  247. package/docs/src/docs/_decorators/ancestor-attribute.md +0 -128
  248. package/docs/src/docs/_decorators/auto-subscribe.md +0 -202
  249. package/docs/src/docs/_decorators/bind.md +0 -167
  250. package/docs/src/docs/_decorators/get.md +0 -162
  251. package/docs/src/docs/_decorators/handle.md +0 -175
  252. package/docs/src/docs/_decorators/on-assign.md +0 -390
  253. package/docs/src/docs/_decorators/patch.md +0 -70
  254. package/docs/src/docs/_decorators/post.md +0 -146
  255. package/docs/src/docs/_decorators/publish.md +0 -55
  256. package/docs/src/docs/_decorators/put.md +0 -70
  257. package/docs/src/docs/_decorators/subscribe.md +0 -100
  258. package/docs/src/docs/_decorators/wait-for-ancestors.md +0 -163
  259. package/docs/src/docs/_directives/sub.md +0 -91
  260. package/docs/src/docs/_getting-started/ai-agents.md +0 -76
  261. package/docs/src/docs/_getting-started/concorde-manual-install.md +0 -133
  262. package/docs/src/docs/_getting-started/concorde-outside.md +0 -33
  263. package/docs/src/docs/_getting-started/create-a-component.md +0 -139
  264. package/docs/src/docs/_getting-started/my-first-component.md +0 -236
  265. package/docs/src/docs/_getting-started/my-first-subscriber.md +0 -120
  266. package/docs/src/docs/_getting-started/pubsub.md +0 -37
  267. package/docs/src/docs/_getting-started/start.md +0 -47
  268. package/docs/src/docs/_getting-started/theming.md +0 -253
  269. package/docs/src/docs/_misc/api-configuration.md +0 -81
  270. package/docs/src/docs/_misc/dataProviderKey.md +0 -168
  271. package/docs/src/docs/_misc/docs-mock-api.md +0 -63
  272. package/docs/src/docs/_misc/dynamic-path.md +0 -71
  273. package/docs/src/docs/_misc/endpoint.md +0 -45
  274. package/docs/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  275. package/docs/src/docs/_misc/html-integration.md +0 -15
  276. package/docs/src/docs/search/docs-search.json +0 -12242
  277. package/docs/src/tag-list.json +0 -1
  278. package/docs/src/tsconfig-model.json +0 -23
  279. package/docs/src/tsconfig.json +0 -1242
  280. package/src/docs/prism/index.ts +0 -6
  281. package/src/docs/prism/prism.css +0 -158
  282. package/src/docs/prism/prism.js +0 -1022
@@ -1,240 +1,248 @@
1
1
  import { html, LitElement, PropertyValues } from "lit";
2
2
  import { customElement, property } from "lit/decorators.js";
3
+
4
+ /** Sidebar order: strings are section titles, objects are pages. */
5
+ export const docsNavigation: Array<string | { label: string; href: string }> = [
6
+ "Getting Started",
7
+ { label: "Introduction", href: "#docs/_getting-started/start.md/start" },
8
+ {
9
+ label: "Components",
10
+ href: "#docs/_getting-started/components.md/components",
11
+ },
12
+ {
13
+ label: "Installation",
14
+ href: "#docs/_getting-started/concorde-outside.md/concorde-outside",
15
+ },
16
+ {
17
+ label: "AI agents (skills)",
18
+ href: "#docs/_getting-started/ai-agents.md/ai-agents",
19
+ },
20
+ {
21
+ label: "My first component",
22
+ href: "#docs/_getting-started/my-first-component.md/my-first-component",
23
+ },
24
+ {
25
+ label: "Theming",
26
+ href: "#docs/_getting-started/theming.md/theming",
27
+ },
28
+ "Core concept",
29
+ {
30
+ label: "Lit + Tailwind + Vite",
31
+ href: "#docs/_core-concept/overview.md/overview",
32
+ },
33
+ {
34
+ label: "Data flow",
35
+ href: "#docs/_core-concept/dataFlow.md/dataFlow",
36
+ },
37
+ "Functional components",
38
+ { label: "Date", href: "#core/components/functional/date/date.md/date" },
39
+ {
40
+ label: "Fetch",
41
+ href: "#core/components/functional/fetch/fetch.md/fetch",
42
+ },
43
+ { label: "If", href: "#core/components/functional/if/if.md/if" },
44
+ { label: "List", href: "#core/components/functional/list/list.md/list" },
45
+ { label: "Mix", href: "#core/components/functional/mix/mix.md/mix" },
46
+ {
47
+ label: "Jsonata",
48
+ href: "#core/components/functional/jsonata/jsonata.md/jsonata",
49
+ },
50
+ {
51
+ label: "Queue",
52
+ href: "#core/components/functional/queue/queue.md/queue",
53
+ },
54
+ {
55
+ label: "Router",
56
+ href: "#core/components/functional/router/router.md/router",
57
+ },
58
+ { label: "SDUI", href: "#core/components/functional/sdui/sdui.md/sdui" },
59
+ {
60
+ label: "States",
61
+ href: "#core/components/functional/states/states.md/states",
62
+ },
63
+ {
64
+ label: "Submit",
65
+ href: "#core/components/functional/submit/submit.md/submit",
66
+ },
67
+ //{label: "Subscriber", href: "#core/components/functional/subscriber/subscriber.md/subscriber"},
68
+ {
69
+ label: "Value",
70
+ href: "#core/components/functional/value/value.md/value",
71
+ },
72
+ "UI components",
73
+ { label: "Alert", href: "#core/components/ui/alert/alert.md/alert" },
74
+ { label: "Badge", href: "#core/components/ui/badge/badge.md/badge" },
75
+ { label: "Button", href: "#core/components/ui/button/button.md/button" },
76
+ {
77
+ label: "Captcha",
78
+ href: "#core/components/ui/captcha/captcha.md/captcha",
79
+ },
80
+ { label: "Card", href: "#core/components/ui/card/card.md/card" },
81
+ {
82
+ label: "Checkbox",
83
+ href: "#core/components/ui/form/checkbox/checkbox.md/checkbox",
84
+ },
85
+ {
86
+ label: "Divider",
87
+ href: "#core/components/ui/divider/divider.md/divider",
88
+ },
89
+ {
90
+ label: "Fieldset",
91
+ href: "#core/components/ui/form/fieldset/fieldset.md/fieldset",
92
+ },
93
+ {
94
+ label: "Form actions",
95
+ href: "#core/components/ui/form/form-actions/form-actions.md/form-actions",
96
+ },
97
+ {
98
+ label: "Form layout",
99
+ href: "#core/components/ui/form/form-layout/form-layout.md/form-layout",
100
+ },
101
+ { label: "Group", href: "#core/components/ui/group/group.md/group" },
102
+ { label: "Icon", href: "#core/components/ui/icon/icon.md/icon" },
103
+ { label: "Image", href: "#core/components/ui/image/image.md/image" },
104
+ { label: "Input", href: "#core/components/ui/form/input/input.md/input" },
105
+ {
106
+ label: "Input autocomplete",
107
+ href: "#core/components/ui/form/input-autocomplete/input-autocomplete.md/input-autocomplete",
108
+ },
109
+ { label: "Link", href: "#core/components/ui/link/link.md/link" },
110
+ { label: "Loader", href: "#core/components/ui/loader/loader.md/loader" },
111
+ { label: "Menu", href: "#core/components/ui/menu/menu.md/menu" },
112
+ { label: "Modal", href: "#core/components/ui/modal/modal.md/modal" },
113
+ { label: "Pop", href: "#core/components/ui/pop/pop.md/pop" },
114
+ {
115
+ label: "Progress",
116
+ href: "#core/components/ui/progress/progress.md/progress",
117
+ },
118
+ { label: "Radio", href: "#core/components/ui/form/radio/radio.md/radio" },
119
+ {
120
+ label: "Select",
121
+ href: "#core/components/ui/form/select/select.md/select",
122
+ },
123
+ {
124
+ label: "Switch",
125
+ href: "#core/components/ui/form/switch/switch.md/switch",
126
+ },
127
+ { label: "Table", href: "#core/components/ui/table/table.md/table" },
128
+ {
129
+ label: "Textarea",
130
+ href: "#core/components/ui/form/textarea/textarea.md/textarea",
131
+ },
132
+ {
133
+ label: "Theme",
134
+ href: "#core/components/ui/theme/theme.md/theme",
135
+ },
136
+ { label: "Toast", href: "#core/components/ui/toast/toast.md/toast" },
137
+ {
138
+ label: "Tooltip",
139
+ href: "#core/components/ui/tooltip/tooltip.md/tooltip",
140
+ },
141
+ "Decorators",
142
+ {
143
+ label: "@ancestorAttribute",
144
+ href: "#docs/_decorators/ancestor-attribute.md/ancestor-attribute",
145
+ },
146
+ {
147
+ label: "@bind",
148
+ href: "#docs/_decorators/bind.md/bind",
149
+ },
150
+ {
151
+ label: "@subscribe",
152
+ href: "#docs/_decorators/subscribe.md/subscribe",
153
+ },
154
+ {
155
+ label: "@handle",
156
+ href: "#docs/_decorators/handle.md/handle",
157
+ },
158
+ {
159
+ label: "@publish",
160
+ href: "#docs/_decorators/publish.md/publish",
161
+ },
162
+ {
163
+ label: "@get",
164
+ href: "#docs/_decorators/get.md/get",
165
+ },
166
+ {
167
+ label: "@post",
168
+ href: "#docs/_decorators/post.md/post",
169
+ },
170
+ {
171
+ label: "@put",
172
+ href: "#docs/_decorators/put.md/put",
173
+ },
174
+ {
175
+ label: "@patch",
176
+ href: "#docs/_decorators/patch.md/patch",
177
+ },
178
+ {
179
+ label: "@onAssign",
180
+ href: "#docs/_decorators/on-assign.md/on-assign",
181
+ },
182
+ {
183
+ label: "@autoSubscribe",
184
+ href: "#docs/_decorators/auto-subscribe.md/auto-subscribe",
185
+ },
186
+ {
187
+ label: "@awaitConnectedAncestors",
188
+ href: "#docs/_decorators/wait-for-ancestors.md/wait-for-ancestors",
189
+ },
190
+ "Misc",
191
+ {
192
+ label: "DataProviderKey",
193
+ href: "#docs/_misc/dataProviderKey.md/dataProviderKey",
194
+ },
195
+ {
196
+ label: "Endpoint",
197
+ href: "#docs/_misc/endpoint.md/endpoint",
198
+ },
199
+ {
200
+ label: "Dynamic paths",
201
+ href: "#docs/_misc/dynamic-path.md/dynamic-path",
202
+ },
203
+ {
204
+ label: "API configuration",
205
+ href: "#docs/_misc/api-configuration.md/api-configuration",
206
+ },
207
+ {
208
+ label: "sub()",
209
+ href: "#docs/_directives/sub.md/sub",
210
+ },
211
+ {
212
+ label: "HTML integration",
213
+ href: "#docs/_misc/html-integration.md/html-integration",
214
+ },
215
+ {
216
+ label: "FormElement / Subscriber removal",
217
+ href: "#docs/_misc/formelement-subscriber-removal.md/formelement-subscriber-removal",
218
+ },
219
+ {
220
+ label: "Local API demos",
221
+ href: "#docs/_misc/docs-mock-api.md/docs-mock-api",
222
+ },
223
+ "Legacy",
224
+ {
225
+ label: "Manual installation (Vite)",
226
+ href: "#docs/_getting-started/concorde-manual-install.md/concorde-manual-install",
227
+ },
228
+ {
229
+ label: "Subscriber mixin",
230
+ href: "#docs/_core-concept/subscriber.md/subscriber",
231
+ },
232
+ {
233
+ label: "Sharing data (Publisher)",
234
+ href: "#docs/_getting-started/pubsub.md/pubsub",
235
+ },
236
+ {
237
+ label: "My first subscriber",
238
+ href: "#docs/_getting-started/my-first-subscriber.md/my-first-subscriber",
239
+ },
240
+ ];
241
+
3
242
  const tagName = "docs-navigation"; // For Astro.build
4
243
  @customElement(tagName)
5
244
  export class DocsNavigation extends LitElement {
6
- @property() navigation = [
7
- { label: "Introduction", href: "#docs/_getting-started/start.md/start" },
8
- "Getting Started",
9
- {
10
- label: "Installation",
11
- href: "#docs/_getting-started/concorde-outside.md/concorde-outside",
12
- },
13
- {
14
- label: "AI agents (skills)",
15
- href: "#docs/_getting-started/ai-agents.md/ai-agents",
16
- },
17
- {
18
- label: "My first component",
19
- href: "#docs/_getting-started/my-first-component.md/my-first-component",
20
- },
21
- {
22
- label: "Customization",
23
- href: "#docs/_getting-started/theming.md/theming",
24
- },
25
- "Core concept",
26
- {
27
- label: "Lit + Tailwind + Vite",
28
- href: "#docs/_core-concept/overview.md/overview",
29
- },
30
- {
31
- label: "Data flow",
32
- href: "#docs/_core-concept/dataFlow.md/dataFlow",
33
- },
34
- "Functionnal components",
35
- { label: "Date", href: "#core/components/functional/date/date.md/date" },
36
- {
37
- label: "Fetch",
38
- href: "#core/components/functional/fetch/fetch.md/fetch",
39
- },
40
- { label: "If", href: "#core/components/functional/if/if.md/if" },
41
- { label: "List", href: "#core/components/functional/list/list.md/list" },
42
- { label: "Mix", href: "#core/components/functional/mix/mix.md/mix" },
43
- {
44
- label: "Jsonata",
45
- href: "#core/components/functional/jsonata/jsonata.md/jsonata",
46
- },
47
- {
48
- label: "Queue",
49
- href: "#core/components/functional/queue/queue.md/queue",
50
- },
51
- {
52
- label: "Router",
53
- href: "#core/components/functional/router/router.md/router",
54
- },
55
- { label: "SDUI", href: "#core/components/functional/sdui/sdui.md/sdui" },
56
- {
57
- label: "States",
58
- href: "#core/components/functional/states/states.md/states",
59
- },
60
- {
61
- label: "Submit",
62
- href: "#core/components/functional/submit/submit.md/submit",
63
- },
64
- //{label: "Subscriber", href: "#core/components/functional/subscriber/subscriber.md/subscriber"},
65
- {
66
- label: "Value",
67
- href: "#core/components/functional/value/value.md/value",
68
- },
69
- "UI components",
70
- { label: "Alert", href: "#core/components/ui/alert/alert.md/alert" },
71
- { label: "Badge", href: "#core/components/ui/badge/badge.md/badge" },
72
- { label: "Button", href: "#core/components/ui/button/button.md/button" },
73
- {
74
- label: "Captcha",
75
- href: "#core/components/ui/captcha/captcha.md/captcha",
76
- },
77
- { label: "Card", href: "#core/components/ui/card/card.md/card" },
78
- {
79
- label: "Checkbox",
80
- href: "#core/components/ui/form/checkbox/checkbox.md/checkbox",
81
- },
82
- {
83
- label: "Divider",
84
- href: "#core/components/ui/divider/divider.md/divider",
85
- },
86
- {
87
- label: "Fieldset",
88
- href: "#core/components/ui/form/fieldset/fieldset.md/fieldset",
89
- },
90
- {
91
- label: "Form actions",
92
- href: "#core/components/ui/form/form-actions/form-actions.md/form-actions",
93
- },
94
- {
95
- label: "Form layout",
96
- href: "#core/components/ui/form/form-layout/form-layout.md/form-layout",
97
- },
98
- { label: "Group", href: "#core/components/ui/group/group.md/group" },
99
- { label: "Icon", href: "#core/components/ui/icon/icon.md/icon" },
100
- { label: "Image", href: "#core/components/ui/image/image.md/image" },
101
- { label: "Input", href: "#core/components/ui/form/input/input.md/input" },
102
- {
103
- label: "Input autocomplete",
104
- href: "#core/components/ui/form/input-autocomplete/input-autocomplete.md/input-autocomplete",
105
- },
106
- { label: "Link", href: "#core/components/ui/link/link.md/link" },
107
- { label: "Loader", href: "#core/components/ui/loader/loader.md/loader" },
108
- { label: "Menu", href: "#core/components/ui/menu/menu.md/menu" },
109
- { label: "Modal", href: "#core/components/ui/modal/modal.md/modal" },
110
- { label: "Pop", href: "#core/components/ui/pop/pop.md/pop" },
111
- {
112
- label: "Progress",
113
- href: "#core/components/ui/progress/progress.md/progress",
114
- },
115
- { label: "Radio", href: "#core/components/ui/form/radio/radio.md/radio" },
116
- {
117
- label: "Select",
118
- href: "#core/components/ui/form/select/select.md/select",
119
- },
120
- {
121
- label: "Switch",
122
- href: "#core/components/ui/form/switch/switch.md/switch",
123
- },
124
- { label: "Table", href: "#core/components/ui/table/table.md/table" },
125
- {
126
- label: "Textarea",
127
- href: "#core/components/ui/form/textarea/textarea.md/textarea",
128
- },
129
- {
130
- label: "Theme",
131
- href: "#core/components/ui/theme/theme.md/theme",
132
- },
133
- { label: "Toast", href: "#core/components/ui/toast/toast.md/toast" },
134
- {
135
- label: "Tooltip",
136
- href: "#core/components/ui/tooltip/tooltip.md/tooltip",
137
- },
138
- "Decorators",
139
- {
140
- label: "@ancestorAttribute",
141
- href: "#docs/_decorators/ancestor-attribute.md/ancestor-attribute",
142
- },
143
- {
144
- label: "@bind",
145
- href: "#docs/_decorators/bind.md/bind",
146
- },
147
- {
148
- label: "@subscribe",
149
- href: "#docs/_decorators/subscribe.md/subscribe",
150
- },
151
- {
152
- label: "@handle",
153
- href: "#docs/_decorators/handle.md/handle",
154
- },
155
- {
156
- label: "@publish",
157
- href: "#docs/_decorators/publish.md/publish",
158
- },
159
- {
160
- label: "@get",
161
- href: "#docs/_decorators/get.md/get",
162
- },
163
- {
164
- label: "@post",
165
- href: "#docs/_decorators/post.md/post",
166
- },
167
- {
168
- label: "@put",
169
- href: "#docs/_decorators/put.md/put",
170
- },
171
- {
172
- label: "@patch",
173
- href: "#docs/_decorators/patch.md/patch",
174
- },
175
- {
176
- label: "@onAssign",
177
- href: "#docs/_decorators/on-assign.md/on-assign",
178
- },
179
- {
180
- label: "@autoSubscribe",
181
- href: "#docs/_decorators/auto-subscribe.md/auto-subscribe",
182
- },
183
- {
184
- label: "@awaitConnectedAncestors",
185
- href: "#docs/_decorators/wait-for-ancestors.md/wait-for-ancestors",
186
- },
187
- "Misc",
188
- {
189
- label: "DataProviderKey",
190
- href: "#docs/_misc/dataProviderKey.md/dataProviderKey",
191
- },
192
- {
193
- label: "Endpoint",
194
- href: "#docs/_misc/endpoint.md/endpoint",
195
- },
196
- {
197
- label: "Dynamic paths",
198
- href: "#docs/_misc/dynamic-path.md/dynamic-path",
199
- },
200
- {
201
- label: "API configuration",
202
- href: "#docs/_misc/api-configuration.md/api-configuration",
203
- },
204
- {
205
- label: "sub()",
206
- href: "#docs/_directives/sub.md/sub",
207
- },
208
- {
209
- label: "HTML integration",
210
- href: "#docs/_misc/html-integration.md/html-integration",
211
- },
212
- {
213
- label: "FormElement / Subscriber removal",
214
- href: "#docs/_misc/formelement-subscriber-removal.md/formelement-subscriber-removal",
215
- },
216
- {
217
- label: "Local API demos",
218
- href: "#docs/_misc/docs-mock-api.md/docs-mock-api",
219
- },
220
- "Legacy",
221
- {
222
- label: "Manual installation (Vite)",
223
- href: "#docs/_getting-started/concorde-manual-install.md/concorde-manual-install",
224
- },
225
- {
226
- label: "Subscriber mixin",
227
- href: "#docs/_core-concept/subscriber.md/subscriber",
228
- },
229
- {
230
- label: "Sharing data (Publisher)",
231
- href: "#docs/_getting-started/pubsub.md/pubsub",
232
- },
233
- {
234
- label: "My first subscriber",
235
- href: "#docs/_getting-started/my-first-subscriber.md/my-first-subscriber",
236
- },
237
- ];
245
+ @property({ attribute: false }) navigation = docsNavigation;
238
246
 
239
247
  /**
240
248
  * Save the scroll position when the component is disconnected
@@ -0,0 +1,67 @@
1
+ import { html, LitElement, nothing } from "lit";
2
+ import { customElement, state } from "lit/decorators.js";
3
+ import { parseDocsLocation } from "../docs-location";
4
+ import { tailwind } from "../tailwind";
5
+ import { docsNavigation } from "./navigation";
6
+ import { DOCS_PAGE_RENDERED } from "./toc";
7
+
8
+ type Page = { label: string; href: string };
9
+
10
+ const pages = docsNavigation.filter((item): item is Page => typeof item !== "string");
11
+ const pageUrl = (href: string) => parseDocsLocation(href).url;
12
+
13
+ const tagName = "docs-pager";
14
+ /** Previous / next page links, following the sidebar order. */
15
+ @customElement(tagName)
16
+ export class DocsPager extends LitElement {
17
+ static styles = [tailwind];
18
+
19
+ @state() index = -1;
20
+
21
+ connectedCallback() {
22
+ super.connectedCallback();
23
+ window.addEventListener(DOCS_PAGE_RENDERED, this.locate);
24
+ this.locate();
25
+ }
26
+
27
+ disconnectedCallback() {
28
+ window.removeEventListener(DOCS_PAGE_RENDERED, this.locate);
29
+ super.disconnectedCallback();
30
+ }
31
+
32
+ private locate = () => {
33
+ const current = parseDocsLocation(document.location.href).url;
34
+ this.index = pages.findIndex((p) => pageUrl(p.href) === current);
35
+ };
36
+
37
+ private link(page: Page | undefined, direction: "previous" | "next") {
38
+ if (!page) return html`<div class="hidden sm:block"></div>`;
39
+ const next = direction === "next";
40
+ return html`<sonic-button
41
+ variant="outline"
42
+ size="lg"
43
+ shape="block"
44
+ pushState
45
+ align=${next ? "right" : "left"}
46
+ href=${page.href}
47
+ @click=${() => window.scrollTo({ top: 0, behavior: "instant" })}
48
+ >
49
+ <sonic-icon
50
+ slot=${next ? "suffix" : "prefix"}
51
+ name=${next ? "arrow-right" : "arrow-left"}
52
+ library="iconoir"
53
+ ></sonic-icon>
54
+ ${page.label}
55
+ </sonic-button>`;
56
+ }
57
+
58
+ render() {
59
+ if (this.index < 0) return nothing;
60
+ return html`
61
+ <div class="grid grid-cols-[minmax(0,1fr)] sm:grid-cols-2 gap-3">
62
+ ${this.link(pages[this.index - 1], "previous")}
63
+ ${this.link(pages[this.index + 1], "next")}
64
+ </div>
65
+ `;
66
+ }
67
+ }
@@ -0,0 +1,98 @@
1
+ import { html, LitElement, nothing } from "lit";
2
+ import { customElement, state } from "lit/decorators.js";
3
+ import { parseDocsLocation } from "../docs-location";
4
+
5
+ /** Fired on window by `docs-markdown-renderer` once a page is in the DOM. */
6
+ export const DOCS_PAGE_RENDERED = "docs-page-rendered";
7
+
8
+ type TocEntry = { id: string; label: string };
9
+
10
+ const tagName = "docs-toc";
11
+ /**
12
+ * "On this page" navigation: lists the h2 of the rendered markdown
13
+ * and highlights the section currently in view.
14
+ */
15
+ @customElement(tagName)
16
+ export class DocsToc extends LitElement {
17
+ @state() entries: TocEntry[] = [];
18
+ @state() activeId = "";
19
+
20
+ private observer?: IntersectionObserver;
21
+ private visible = new Set<string>();
22
+
23
+ connectedCallback() {
24
+ super.connectedCallback();
25
+ window.addEventListener(DOCS_PAGE_RENDERED, this.collect);
26
+ this.collect();
27
+ }
28
+
29
+ disconnectedCallback() {
30
+ window.removeEventListener(DOCS_PAGE_RENDERED, this.collect);
31
+ this.observer?.disconnect();
32
+ super.disconnectedCallback();
33
+ }
34
+
35
+ private headings(): HTMLElement[] {
36
+ return Array.from(
37
+ document.querySelectorAll<HTMLElement>("docs-markdown-renderer h2[id]"),
38
+ ).filter((h) => !h.closest("sonic-code, docs-lit-demo, docs-demo-sources"));
39
+ }
40
+
41
+ private collect = () => {
42
+ const headings = this.headings();
43
+ this.entries = headings.map((h) => ({
44
+ id: h.id,
45
+ label: h.textContent?.trim() || h.id,
46
+ }));
47
+ this.activeId = this.entries[0]?.id || "";
48
+
49
+ this.observer?.disconnect();
50
+ this.visible.clear();
51
+ this.observer = new IntersectionObserver(
52
+ (records) => {
53
+ records.forEach((r) => {
54
+ if (r.isIntersecting) this.visible.add(r.target.id);
55
+ else this.visible.delete(r.target.id);
56
+ });
57
+ const first = this.entries.find((e) => this.visible.has(e.id));
58
+ if (first) this.activeId = first.id;
59
+ },
60
+ { rootMargin: "-80px 0px -55% 0px" },
61
+ );
62
+ headings.forEach((h) => this.observer?.observe(h));
63
+ };
64
+
65
+ private goTo(id: string) {
66
+ const target = document.getElementById(id);
67
+ if (!target) return;
68
+ this.activeId = id;
69
+ target.scrollIntoView({ behavior: "smooth", block: "start" });
70
+ // Keep the URL shareable without triggering a markdown reload.
71
+ const { pageHash } = parseDocsLocation(document.location.href);
72
+ const base = pageHash.substring(0, pageHash.lastIndexOf("/"));
73
+ if (base) {
74
+ history.replaceState(history.state, "", `${base}/${encodeURIComponent(id)}`);
75
+ }
76
+ }
77
+
78
+ render() {
79
+ if (this.entries.length < 2) return nothing;
80
+ return html`
81
+ <sonic-divider class="uppercase" align="left" size="xs"
82
+ >On this page</sonic-divider
83
+ >
84
+ <sonic-menu size="xs">
85
+ ${this.entries.map(
86
+ (e) => html`<sonic-menu-item
87
+ type="neutral"
88
+ size="xs"
89
+ ?active=${e.id === this.activeId}
90
+ @click=${() => this.goTo(e.id)}
91
+ >${e.label}</sonic-menu-item
92
+ >`,
93
+ )}
94
+ </sonic-menu>
95
+ `;
96
+ }
97
+ }
98
+