@supersoniks/concorde 5.1.0 → 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 (312) 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 +1939 -1939
  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 +16 -16
  39. package/concorde-core.es.js +235 -233
  40. package/dist/concorde-core.bundle.js +16 -16
  41. package/dist/concorde-core.es.js +235 -233
  42. package/dist/img/archive/concorde-001-2cv.webp +0 -0
  43. package/dist/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  44. package/dist/img/archive/concorde-red-arrows-2002.webm +0 -0
  45. package/dist/img/archive/credits.json +28 -0
  46. package/docs/assets/index-Bb-_LRyY.js +12280 -0
  47. package/docs/assets/index-CD4WyL6o.css +1 -0
  48. package/docs/docs-mock-api-sw.js +2 -0
  49. package/docs/docs-mock-api-sw.js.map +2 -2
  50. package/docs/index.html +9 -7
  51. package/index.html +27 -63
  52. package/package.json +11 -4
  53. package/public/img/archive/concorde-001-2cv.webp +0 -0
  54. package/public/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  55. package/public/img/archive/concorde-red-arrows-2002.webm +0 -0
  56. package/public/img/archive/credits.json +28 -0
  57. package/scripts/post-build-docs.js +0 -0
  58. package/scripts/post-build.mjs +0 -0
  59. package/src/core/components/functional/fetch/fetch.md +2 -2
  60. package/src/core/components/functional/if/if.md +0 -0
  61. package/src/core/components/functional/if/if.ts +0 -0
  62. package/src/core/components/functional/list/list.demo.ts +0 -0
  63. package/src/core/components/functional/list/list.md +0 -0
  64. package/src/core/components/functional/router/router.md +0 -0
  65. package/src/core/components/functional/router/router.ts +0 -0
  66. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
  67. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  68. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  69. package/src/core/components/functional/sdui/types.ts +0 -0
  70. package/src/core/components/functional/states/states.md +0 -0
  71. package/src/core/components/functional/submit/submit.md +0 -0
  72. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  73. package/src/core/components/functional/value/value.ts +0 -0
  74. package/src/core/components/ui/_css/size.ts +0 -0
  75. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  76. package/src/core/components/ui/form/radio/radio.md +0 -0
  77. package/src/core/components/ui/form/select/select.md +0 -0
  78. package/src/core/components/ui/form/switch/switch.md +0 -0
  79. package/src/core/components/ui/modal/modal.ts +14 -11
  80. package/src/core/mixins/Subscriber.ts +0 -0
  81. package/src/core/utils/DataBindObserver.ts +0 -0
  82. package/src/core/utils/Objects.ts +0 -0
  83. package/src/core/utils/route.ts +0 -0
  84. package/src/docs/_core-concept/subscriber.md +0 -0
  85. package/src/docs/_getting-started/components.md +5 -0
  86. package/src/docs/_getting-started/my-first-subscriber.md +0 -0
  87. package/src/docs/_getting-started/pubsub.md +0 -0
  88. package/src/docs/_getting-started/theming.md +2 -2
  89. package/src/docs/code.ts +88 -75
  90. package/src/docs/components/docs-demo-sources.ts +16 -8
  91. package/src/docs/components/docs-lit-demo.ts +19 -37
  92. package/src/docs/docs.ts +5 -0
  93. package/src/docs/example/docs-boarding-pass-demo.ts +134 -0
  94. package/src/docs/example/docs-provider-keys.ts +12 -0
  95. package/src/docs/example/users.ts +0 -0
  96. package/src/docs/header/header.ts +233 -69
  97. package/src/docs/home/catalog.ts +44 -0
  98. package/src/docs/home/home.ts +513 -0
  99. package/src/docs/home/mach-stage.ts +389 -0
  100. package/src/docs/layout.ts +3 -1
  101. package/src/docs/navigation/components-index.ts +56 -0
  102. package/src/docs/navigation/navigation.ts +240 -232
  103. package/src/docs/navigation/pager.ts +67 -0
  104. package/src/docs/navigation/toc.ts +98 -0
  105. package/src/docs/search/docs-search.json +330 -20
  106. package/src/docs/search/markdown-renderer.ts +11 -3
  107. package/src/docs/search/page.ts +0 -0
  108. package/src/docs/shiki/index.ts +109 -0
  109. package/src/docs/tailwind/css/base/scrollbar.css +22 -0
  110. package/src/docs/tailwind/css/base/theme.css +96 -0
  111. package/src/docs/tailwind/css/base/typography.css +4 -0
  112. package/src/docs/tailwind/css/docs/boarding-pass.css +65 -0
  113. package/src/docs/tailwind/css/docs/content.css +32 -0
  114. package/src/docs/tailwind/css/docs/page.css +10 -0
  115. package/src/docs/tailwind/css/docs.css +9 -0
  116. package/src/docs/tailwind/css/home/hero.css +210 -0
  117. package/src/docs/tailwind/css/home/motion.css +84 -0
  118. package/src/docs/tailwind/css/home/sections.css +416 -0
  119. package/src/docs/tailwind/css/tailwind.css +7 -185
  120. package/src/tsconfig.json +23 -2
  121. package/src/tsconfig.tsbuildinfo +1 -1
  122. package/tailwind.config.js +8 -4
  123. package/.github/workflows/ci.yml +0 -21
  124. package/.github-export-ignore +0 -30
  125. package/CONTRIBUTING.md +0 -59
  126. package/DEV.md +0 -54
  127. package/LICENSE +0 -21
  128. package/OPEN_SOURCE_CHECKPOINT.md +0 -133
  129. package/concorde-3d.bundle.js +0 -3960
  130. package/concorde-3d.es.js +0 -33433
  131. package/concorde-hugging-face-infer.bundle.js +0 -32
  132. package/concorde-hugging-face-infer.es.js +0 -2952
  133. package/concorde-interactive.bundle.js +0 -1157
  134. package/concorde-interactive.es.js +0 -10734
  135. package/concorde-shader.bundle.js +0 -116
  136. package/concorde-shader.es.js +0 -8353
  137. package/concorde-webgpu.bundle.js +0 -307
  138. package/concorde-webgpu.es.js +0 -8627
  139. package/docs/assets/index-D8MVWqY6.js +0 -12251
  140. package/docs/assets/index-DiD0qYvE.css +0 -1
  141. package/docs/crawl/core/components/functional/date/date.html +0 -190
  142. package/docs/crawl/core/components/functional/fetch/fetch.html +0 -109
  143. package/docs/crawl/core/components/functional/if/if.html +0 -27
  144. package/docs/crawl/core/components/functional/jsonata/jsonata.html +0 -79
  145. package/docs/crawl/core/components/functional/list/list.html +0 -70
  146. package/docs/crawl/core/components/functional/mix/mix.html +0 -45
  147. package/docs/crawl/core/components/functional/queue/queue.html +0 -96
  148. package/docs/crawl/core/components/functional/router/router.html +0 -106
  149. package/docs/crawl/core/components/functional/sdui/sdui.html +0 -269
  150. package/docs/crawl/core/components/functional/states/states.html +0 -66
  151. package/docs/crawl/core/components/functional/submit/submit.html +0 -160
  152. package/docs/crawl/core/components/functional/subscriber/subscriber.html +0 -67
  153. package/docs/crawl/core/components/functional/value/value.html +0 -51
  154. package/docs/crawl/core/components/ui/alert/alert.html +0 -110
  155. package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +0 -23
  156. package/docs/crawl/core/components/ui/badge/badge.html +0 -119
  157. package/docs/crawl/core/components/ui/button/button.html +0 -149
  158. package/docs/crawl/core/components/ui/captcha/captcha.html +0 -30
  159. package/docs/crawl/core/components/ui/card/card.html +0 -99
  160. package/docs/crawl/core/components/ui/divider/divider.html +0 -58
  161. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +0 -73
  162. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +0 -135
  163. package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +0 -79
  164. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +0 -62
  165. package/docs/crawl/core/components/ui/form/input/input.html +0 -109
  166. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +0 -38
  167. package/docs/crawl/core/components/ui/form/radio/radio.html +0 -56
  168. package/docs/crawl/core/components/ui/form/select/select.html +0 -73
  169. package/docs/crawl/core/components/ui/form/switch/switch.html +0 -56
  170. package/docs/crawl/core/components/ui/form/textarea/textarea.html +0 -59
  171. package/docs/crawl/core/components/ui/group/group.html +0 -82
  172. package/docs/crawl/core/components/ui/icon/icon.html +0 -133
  173. package/docs/crawl/core/components/ui/image/image.html +0 -110
  174. package/docs/crawl/core/components/ui/link/link.html +0 -42
  175. package/docs/crawl/core/components/ui/loader/loader.html +0 -50
  176. package/docs/crawl/core/components/ui/menu/menu.html +0 -322
  177. package/docs/crawl/core/components/ui/modal/modal.html +0 -117
  178. package/docs/crawl/core/components/ui/pop/pop.html +0 -102
  179. package/docs/crawl/core/components/ui/progress/progress.html +0 -58
  180. package/docs/crawl/core/components/ui/table/table.html +0 -413
  181. package/docs/crawl/core/components/ui/toast/toast.html +0 -122
  182. package/docs/crawl/core/components/ui/tooltip/tooltip.html +0 -79
  183. package/docs/crawl/docs/_core-concept/dataFlow.html +0 -177
  184. package/docs/crawl/docs/_core-concept/overview.html +0 -66
  185. package/docs/crawl/docs/_core-concept/subscriber.html +0 -75
  186. package/docs/crawl/docs/_decorators/ancestor-attribute.html +0 -116
  187. package/docs/crawl/docs/_decorators/auto-subscribe.html +0 -202
  188. package/docs/crawl/docs/_decorators/bind.html +0 -141
  189. package/docs/crawl/docs/_decorators/get.html +0 -149
  190. package/docs/crawl/docs/_decorators/handle.html +0 -165
  191. package/docs/crawl/docs/_decorators/on-assign.html +0 -355
  192. package/docs/crawl/docs/_decorators/patch.html +0 -78
  193. package/docs/crawl/docs/_decorators/post.html +0 -139
  194. package/docs/crawl/docs/_decorators/publish.html +0 -61
  195. package/docs/crawl/docs/_decorators/put.html +0 -78
  196. package/docs/crawl/docs/_decorators/subscribe.html +0 -109
  197. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +0 -137
  198. package/docs/crawl/docs/_directives/sub.html +0 -93
  199. package/docs/crawl/docs/_getting-started/ai-agents.html +0 -173
  200. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +0 -100
  201. package/docs/crawl/docs/_getting-started/concorde-outside.html +0 -58
  202. package/docs/crawl/docs/_getting-started/create-a-component.html +0 -111
  203. package/docs/crawl/docs/_getting-started/my-first-component.html +0 -189
  204. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +0 -110
  205. package/docs/crawl/docs/_getting-started/pubsub.html +0 -62
  206. package/docs/crawl/docs/_getting-started/start.html +0 -76
  207. package/docs/crawl/docs/_getting-started/theming.html +0 -85
  208. package/docs/crawl/docs/_misc/api-configuration.html +0 -149
  209. package/docs/crawl/docs/_misc/dataProviderKey.html +0 -135
  210. package/docs/crawl/docs/_misc/docs-mock-api.html +0 -158
  211. package/docs/crawl/docs/_misc/dynamic-path.html +0 -180
  212. package/docs/crawl/docs/_misc/endpoint.html +0 -50
  213. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +0 -138
  214. package/docs/crawl/docs/_misc/html-integration.html +0 -48
  215. package/docs/crawl/hubs/decorators.html +0 -547
  216. package/docs/crawl/hubs/form-components.html +0 -359
  217. package/docs/crawl/hubs/remote-data.html +0 -452
  218. package/docs/crawl/index.html +0 -101
  219. package/docs/llms-full.txt +0 -5761
  220. package/docs/llms.txt +0 -104
  221. package/docs/sitemap.xml +0 -237
  222. package/docs/src/core/components/functional/date/date.md +0 -290
  223. package/docs/src/core/components/functional/fetch/fetch.md +0 -125
  224. package/docs/src/core/components/functional/if/if.md +0 -9
  225. package/docs/src/core/components/functional/jsonata/jsonata.md +0 -56
  226. package/docs/src/core/components/functional/list/list.md +0 -65
  227. package/docs/src/core/components/functional/mix/mix.md +0 -41
  228. package/docs/src/core/components/functional/queue/queue.md +0 -72
  229. package/docs/src/core/components/functional/router/router.md +0 -94
  230. package/docs/src/core/components/functional/sdui/default-library.json +0 -108
  231. package/docs/src/core/components/functional/sdui/example.json +0 -99
  232. package/docs/src/core/components/functional/sdui/sdui.md +0 -356
  233. package/docs/src/core/components/functional/states/states.md +0 -87
  234. package/docs/src/core/components/functional/submit/submit.md +0 -114
  235. package/docs/src/core/components/functional/subscriber/subscriber.md +0 -91
  236. package/docs/src/core/components/functional/value/value.md +0 -35
  237. package/docs/src/core/components/ui/alert/alert.md +0 -121
  238. package/docs/src/core/components/ui/alert-messages/alert-messages.md +0 -0
  239. package/docs/src/core/components/ui/badge/badge.md +0 -127
  240. package/docs/src/core/components/ui/button/button.md +0 -182
  241. package/docs/src/core/components/ui/captcha/captcha.md +0 -12
  242. package/docs/src/core/components/ui/card/card.md +0 -97
  243. package/docs/src/core/components/ui/divider/divider.md +0 -35
  244. package/docs/src/core/components/ui/form/checkbox/checkbox.md +0 -77
  245. package/docs/src/core/components/ui/form/fieldset/fieldset.md +0 -129
  246. package/docs/src/core/components/ui/form/form-actions/form-actions.md +0 -77
  247. package/docs/src/core/components/ui/form/form-layout/form-layout.md +0 -44
  248. package/docs/src/core/components/ui/form/input/input.md +0 -142
  249. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  250. package/docs/src/core/components/ui/form/radio/radio.md +0 -57
  251. package/docs/src/core/components/ui/form/select/select.md +0 -71
  252. package/docs/src/core/components/ui/form/switch/switch.md +0 -57
  253. package/docs/src/core/components/ui/form/textarea/textarea.md +0 -65
  254. package/docs/src/core/components/ui/group/group.md +0 -75
  255. package/docs/src/core/components/ui/icon/icon.md +0 -125
  256. package/docs/src/core/components/ui/icon/icons.json +0 -1
  257. package/docs/src/core/components/ui/image/image.md +0 -107
  258. package/docs/src/core/components/ui/link/link.md +0 -43
  259. package/docs/src/core/components/ui/loader/loader.md +0 -55
  260. package/docs/src/core/components/ui/menu/menu.md +0 -329
  261. package/docs/src/core/components/ui/modal/modal.md +0 -119
  262. package/docs/src/core/components/ui/pop/pop.md +0 -96
  263. package/docs/src/core/components/ui/progress/progress.md +0 -63
  264. package/docs/src/core/components/ui/table/table.md +0 -455
  265. package/docs/src/core/components/ui/toast/toast.md +0 -166
  266. package/docs/src/core/components/ui/tooltip/tooltip.md +0 -82
  267. package/docs/src/docs/_core-concept/dataFlow.md +0 -88
  268. package/docs/src/docs/_core-concept/overview.md +0 -57
  269. package/docs/src/docs/_core-concept/subscriber.md +0 -75
  270. package/docs/src/docs/_decorators/ancestor-attribute.md +0 -127
  271. package/docs/src/docs/_decorators/auto-subscribe.md +0 -202
  272. package/docs/src/docs/_decorators/bind.md +0 -167
  273. package/docs/src/docs/_decorators/get.md +0 -162
  274. package/docs/src/docs/_decorators/handle.md +0 -175
  275. package/docs/src/docs/_decorators/on-assign.md +0 -390
  276. package/docs/src/docs/_decorators/patch.md +0 -70
  277. package/docs/src/docs/_decorators/post.md +0 -146
  278. package/docs/src/docs/_decorators/publish.md +0 -55
  279. package/docs/src/docs/_decorators/put.md +0 -70
  280. package/docs/src/docs/_decorators/subscribe.md +0 -100
  281. package/docs/src/docs/_decorators/wait-for-ancestors.md +0 -163
  282. package/docs/src/docs/_directives/sub.md +0 -91
  283. package/docs/src/docs/_getting-started/ai-agents.md +0 -76
  284. package/docs/src/docs/_getting-started/concorde-manual-install.md +0 -133
  285. package/docs/src/docs/_getting-started/concorde-outside.md +0 -33
  286. package/docs/src/docs/_getting-started/create-a-component.md +0 -139
  287. package/docs/src/docs/_getting-started/my-first-component.md +0 -236
  288. package/docs/src/docs/_getting-started/my-first-subscriber.md +0 -120
  289. package/docs/src/docs/_getting-started/pubsub.md +0 -37
  290. package/docs/src/docs/_getting-started/start.md +0 -47
  291. package/docs/src/docs/_getting-started/theming.md +0 -91
  292. package/docs/src/docs/_misc/api-configuration.md +0 -81
  293. package/docs/src/docs/_misc/dataProviderKey.md +0 -168
  294. package/docs/src/docs/_misc/docs-mock-api.md +0 -63
  295. package/docs/src/docs/_misc/dynamic-path.md +0 -71
  296. package/docs/src/docs/_misc/endpoint.md +0 -45
  297. package/docs/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  298. package/docs/src/docs/_misc/html-integration.md +0 -15
  299. package/docs/src/docs/search/docs-search.json +0 -9507
  300. package/docs/src/tag-list.json +0 -1
  301. package/docs/src/tsconfig-model.json +0 -23
  302. package/docs/src/tsconfig.declarations.json +0 -22
  303. package/docs/src/tsconfig.emit.json +0 -23
  304. package/docs/src/tsconfig.json +0 -1182
  305. package/gitlab/job_github_mirror.sh +0 -39
  306. package/scripts/github-export.mjs +0 -150
  307. package/src/css.d.ts +0 -19
  308. package/src/docs/prism/index.ts +0 -6
  309. package/src/docs/prism/prism.css +0 -158
  310. package/src/docs/prism/prism.js +0 -1022
  311. package/src/tsconfig.declarations.json +0 -22
  312. package/src/tsconfig.emit.json +0 -23
@@ -1,125 +0,0 @@
1
- # Fetch
2
-
3
- > **New apps:** prefer [@get](#docs/_decorators/get.md/get) for a typed GET on a component, or [List](#core/components/functional/list/list.md/list) / [Queue](#core/components/functional/queue/queue.md/queue) with `fetch` for collections. Use [Local API demos](#docs/_misc/docs-mock-api.md/docs-mock-api) (`serviceURL="/docs-mock-api"`) to try examples offline.
4
-
5
- The **sonic-fetch** component requests and stores API data. It extends the Fetcher and [Subscriber](#docs/_core-concept/subscriber.md/subscriber) mixins.
6
-
7
-
8
-
9
-
10
-
11
- ## Basic usage
12
- In order to work properly the <b>sonic-fetch</b> component needs at least the following attributes.
13
- - **serviceURL** : A base service url. This attribute can be inherited from an ancestor.
14
- *ex : /docs-mock-api*
15
- - **endPoint** : the specific location where requests for information are sent (see the api docs).
16
- *ex : api/users | api/users?page=2 | api/users/2*
17
- - **dataProvider *(Required)*** : An ID that is used as a reference to the object storing the data returned by the API.
18
- This attribute can be inherited from an ancestor.
19
-
20
-
21
-
22
- <sonic-code>
23
- <template>
24
- <sonic-fetch serviceURL="/docs-mock-api" endPoint="api/users?page=2" dataProvider="myDataObj"></sonic-fetch>
25
- <sonic-button dataProvider="myDataObj" debug>Hover to see the data</sonic-button>
26
- </template>
27
- </sonic-code>
28
-
29
- ## DataProvider as an endPoint
30
- If no **endPoint** is specified it will be filled by the **dataProvider ID** instead
31
-
32
- <sonic-code>
33
- <template>
34
- <sonic-fetch serviceURL="/docs-mock-api" dataProvider="api/users?page=2" ></sonic-fetch>
35
- <sonic-button dataProvider="api/users?page=2" debug>Hover to see the data</sonic-button>
36
- </template>
37
- </sonic-code>
38
-
39
- ## HeadersDataProvider
40
-
41
- <sonic-alert status="error" background>Deprecated</sonic-alert>
42
-
43
- ## Key
44
- When the **key** attribute is present, only a sub-part of the data received is injected into the **dataProvider**.
45
- We can use the dot syntax to target what we want to keep.
46
-
47
- For example if the data is `{my:{data:{a:1,b:2}}}` and the key is `key="my.data"`, the data available in the **dataProvider** will be `{a:1 , b:2}`
48
-
49
- <sonic-code>
50
- <template>
51
- <sonic-fetch serviceURL="/docs-mock-api" dataProvider="api/users/2" ></sonic-fetch>
52
- <sonic-button dataProvider="api/users/2" debug>dataProvider object</sonic-button>
53
- <!-- Get the user ID -->
54
- <sonic-fetch serviceURL="/docs-mock-api" dataProvider="id" endPoint="api/users/2" key="data.id"></sonic-fetch>
55
- <sonic-button dataProvider="id" debug>data.id</sonic-button>
56
- <!-- Get the user First name -->
57
- <sonic-fetch serviceURL="/docs-mock-api" dataProvider="first_name" endPoint="api/users/2" key="data.first_name"></sonic-fetch>
58
- <sonic-button dataProvider="first_name" debug>data.first_name</sonic-button>
59
- <!-- Get the user Last name -->
60
- <sonic-fetch serviceURL="/docs-mock-api" dataProvider="last_name" endPoint="api/users/2" key="data.last_name"></sonic-fetch>
61
- <sonic-button dataProvider="last_name" debug>data.last_name</sonic-button>
62
- <!-- Get the user email -->
63
- <sonic-fetch serviceURL="/docs-mock-api" dataProvider="email" endPoint="api/users/2" key="data.email"></sonic-fetch>
64
- <sonic-button dataProvider="email" debug>data.email</sonic-button>
65
- </template>
66
- </sonic-code>
67
-
68
- ## Text mode
69
-
70
- if the mime type of the content returned by the service begins with **text/**, then the dataProvider has a key named "text" which contains the text returned by the service.
71
-
72
- <sonic-code>
73
- <template>
74
- <sonic-fetch endPoint="README.md" dataProvider="fetchText"></sonic-fetch>
75
- <sonic-button dataProvider="fetchText" debug>Hover to see the data</sonic-button>
76
- </template>
77
- </sonic-code>
78
-
79
- ## NoLoader
80
-
81
- The noLoader attribute disables display of the default loader
82
-
83
- <sonic-code>
84
- <template>
85
- <sonic-fetch noLoader serviceURL="/docs-mock-api" endPoint="api/users?page=2" dataProvider="myDataObj"></sonic-fetch>
86
- <sonic-button dataProvider="myDataObj" debug>Basic fetch with noLoader attribute</sonic-button>
87
- </template>
88
- </sonic-code>
89
-
90
-
91
-
92
-
93
- <!--
94
- ## Summary
95
- Extends mixins : Fetcher, [Subscriber](#core/components/functional/subscriber/subscriber.md/subscriber)
96
-
97
- ### Configuration via les attributs
98
-
99
- | nom | sur quelle balise | Description | Exemple de valeur | défaut / requis |
100
- |-----|-----|---|---|---|
101
- | serviceURL |Fetcher ou un de ses parents | URL de base des services. | http://la-billetterie.net/api/v2 | domain du site |
102
- | endpoint |Fetcher | point d'accès d'un service | user/2 | valeur de l'attribut dataProvider |
103
- | dataProvider |Fetcher ou un de ses parents | Identifiant d'un publisher qui stock les données, voir [subscriber](#core/components/functional/subscriber/subscriber.md/subscriber). | billetterie/user/2 | *REQUIS* |
104
- | headersDataProvider |Fetcher ou un de ses parents | Identifiant d'un publisher qui stock les données destinées à être envoyées en entêtes de la requetes | MyCoockieHEaders | null |
105
- | key |Fetcher | extrait une sous propriété de la donnée chargée avant de l'assignée à son publisher | ma.data | null |
106
-
107
- *Si la données est `{ma:{data:{a:1,b:2}}}` et `key="ma.data"`, la données disponible dans le composant sera `{a:1, b:2}`*
108
-
109
- ### Intégration auto de basic auth (pour tester une api qui nécessite une authentification)
110
-
111
- Fetch utilise le service pour générer le token et l'ajoute au header de l'appel qui récupère les données.
112
-
113
- | nom | sur quelle balise | Description | Exemple de valeur | défaut / requis |
114
- |-----|-----|---|---|---|
115
- | userName | Fetcher ou un de ses parents | Nom de l'utilisateur | DjuDju | null |
116
- | password | Fetcher ou un de ses parents | mot de passe | pom_549 | null |
117
- | tokenProvider | Fetcher ou un de ses parents | point d'accès du service fournissant le token | auth | null |
118
- | token | Fetcher ou un de ses parents | A fournir à la place des autres attributs si on le possède | q<d34gb | null |
119
-
120
- ### Autres choses utiles
121
- L'attribut *noLoader* du composant permet de désactiver l'affichage du loader par défaut.
122
- On peut appeler la methode invalidate() sur le publisher associé au composant pour declencher le rechargement des données.
123
- endPoint est une propriété réctive, par conséquent, sa modification, manuelle via template ou data binbding provoque la mise à jour du contenu.
124
- -->
125
-
@@ -1,9 +0,0 @@
1
- # if
2
-
3
- The **sonic-if** component shows its slot when **`.condition`** is true. In Lit, bind `.condition` from store-driven state (`@subscribe` on a `formDataProvider` field) — live preview and **TypeScript source are the same file** (`docs-lit-demo`):
4
-
5
- <docs-lit-demo for="docs-toggle-if-demo"></docs-lit-demo>
6
-
7
- Plain HTML without Lit: [HTML integration](#docs/_misc/html-integration.md/html-integration).
8
-
9
-
@@ -1,56 +0,0 @@
1
- # Jsonata
2
-
3
- `sonic-jsonata` : **1 input → expression → 1 output** (readonly).
4
-
5
- Unidirectional (fetch → compute → display), unlike [`sonic-mix`](#core/components/functional/mix/mix.md/mix).
6
-
7
- > Offline : `serviceURL="/docs-mock-api"` — [Local API demos](#docs/_misc/docs-mock-api.md/docs-mock-api).
8
-
9
- ## Demos
10
-
11
- ### Groupby + top N
12
-
13
- Change **Top N** → recalcul sans refetch.
14
-
15
- <docs-lit-demo for="docs-jsonata-space-cats-demo"></docs-lit-demo>
16
-
17
- ### Totaux (somme + taxe)
18
-
19
- Change **Tax %** → même idée.
20
-
21
- <docs-lit-demo for="docs-jsonata-table-totals-demo"></docs-lit-demo>
22
-
23
- ## Attributes
24
-
25
- | Attribute | Role |
26
- |-----------|------|
27
- | `inputProvider` | Entrée (`$input` dans l’expression) |
28
- | `outputProvider` | Sortie (readonly) |
29
- | `expression` | Expression JSONata |
30
- | `formDataProvider` | Form optionnel (`$top`, `$taxPercent`, …) — même id que le form |
31
- | `outputSchema` | Schéma léger optionnel (`type`, `required`) |
32
-
33
- ## Helpers
34
-
35
- `$ucFirst` · `$currency` · `$percent` · `$date` · `$toChart(items, labelKey, valueKey, datasetLabel?)`
36
-
37
- Pas de DOM, pas de réseau, pas d’`eval`.
38
-
39
- ## Markup
40
-
41
- <sonic-code language="html">
42
- <template>
43
- &lt;sonic-jsonata
44
- inputProvider="api/space-cats"
45
- outputProvider="leaderboard"
46
- formDataProvider="topForm"
47
- expression='$input{name: $sum(points)} ~> $each(function($v,$k){{"name":$k,"points":$v}}) ^(>points)[[0..$number($top)-1]]'
48
- &gt;&lt;/sonic-jsonata&gt;
49
- </template>
50
- </sonic-code>
51
-
52
- Pour du multi-entrées ou une fonction TS : primitive [`derive`](#docs/_core-concept/dataFlow.md/dataFlow).
53
-
54
- ## States
55
-
56
- `{output}/_state_` → `{ status, error? }` (`loading` | `ready` | `error` | `empty`). Brancher avec `sonic-states`.
@@ -1,65 +0,0 @@
1
- # List
2
-
3
- > **Try offline:** `serviceURL="/docs-mock-api"` and `dataProvider="api/users"` with `key="data"` — see [Local API demos](#docs/_misc/docs-mock-api.md/docs-mock-api). Recommended patterns: [Data flow](#docs/_core-concept/dataFlow.md/dataFlow).
4
-
5
- The **sonic-list** component renders one row per entry in **`props`** (array from fetch or set on the element).
6
-
7
- List extends [Subscriber](#docs/_core-concept/subscriber.md/subscriber) and **Fetcher**:
8
- * **Subscriber** — `props` + `dataProvider`
9
- * **Fetcher** — optional `fetch` + `serviceURL` / `key` (see [Fetch](#core/components/functional/fetch/fetch.md/fetch))
10
-
11
- ## Row renderer (`items`) — recommended
12
-
13
- From a **Lit** parent, pass a function on the **`items`** property (`ListItems`). Each row is wrapped in a `sonic-subscriber` with `dataProvider="…/list-item/n"` (hover rows with `debug`).
14
-
15
- ```typescript
16
- private items = ({ first_name, last_name, email, avatar }) => html`
17
- <sonic-image src=${avatar} …></sonic-image>
18
- <div>${first_name} <b>${last_name}</b></div>
19
- <div>${email}</div>
20
- `;
21
-
22
- html`<sonic-list
23
- fetch
24
- dataProvider="api/users"
25
- key="data"
26
- serviceURL="/docs-mock-api"
27
- .items=${this.items}
28
- ></sonic-list>`;
29
- ```
30
-
31
- Use **`.items=${fn}`** (property binding): Lit passes functions only as properties, not as HTML attributes — `@property({ type: Function })` does not change that. Same for **`.noItems`**, **`.separator`**, **`.skeleton`**. The callback receives each row object (replacing `data-bind` / `<sonic-value>` in a `<template>`).
32
-
33
- Live demo + TypeScript source (one file, no Markdown copy):
34
-
35
- <docs-lit-demo for="docs-users-list"></docs-lit-demo>
36
-
37
- Implementation: `src/docs/example/docs-users-list.ts` — row markup in the **`items`** callback (`item.first_name`, …), same idea as replacing `data-bind` / `<sonic-value>` in a `<template>`.
38
-
39
- ## Alternating row layouts
40
-
41
- Use **`metadata`** (`even`, `odd`, `firstChild`, …) or fields on each item (e.g. `tpl` with `templateKey`):
42
-
43
- <docs-lit-demo for="docs-list-alternate-demo"></docs-lit-demo>
44
-
45
- <docs-lit-demo for="docs-list-template-key-demo"></docs-lit-demo>
46
-
47
- ## Separator and empty list
48
-
49
- <docs-lit-demo for="docs-list-separator-demo"></docs-lit-demo>
50
-
51
- ## Fetch + `extractValues`
52
-
53
- <docs-lit-demo for="docs-list-extract-values-demo"></docs-lit-demo>
54
-
55
- ## HTML `<template>` children (integration without Lit)
56
-
57
- For **plain HTML** hosts, you can still declare **`<template>`** children (and `data-value` for `templateKey`, `separator`, `no-item`). That path is for [HTML integration](#docs/_misc/html-integration.md/html-integration) — not used in Concorde doc live demos.
58
-
59
- Each list row still gets `dataProvider="[list]/list-item/[index]"`.
60
-
61
- ## Additionnal tips
62
-
63
- * If the request returns an object, it is wrapped in an array (unless `extractValues` is set).
64
- * Call **`invalidate()`** on the list publisher to reload fetch data.
65
- * Each row publisher exposes **`_parent_`** pointing at the list publisher.
@@ -1,41 +0,0 @@
1
- # Mix
2
-
3
- Mix allows you to mix several subsets of dataProvider in a new key/value structure which is itself associated with a new dataProvider. The data update is then bidirectional.
4
-
5
- Dot notation is supported to extract a sub-part of the data.
6
-
7
- For example, if we declare dataproviders as follows :
8
- <sonic-code>
9
- <template>
10
- <sonic-subscriber dataProvider="dataToMixA" props='{"foo":{"bar":2}}'></sonic-subscriber>
11
- <sonic-subscriber dataProvider="dataToMixB" props='{"baz":3}'></sonic-subscriber>
12
- </template>
13
- </sonic-code>
14
- We can rearrange the data as follows
15
- <sonic-code>
16
- <template>
17
- <sonic-mix dataProvider="mixedData" composition='{"either":"dataToMixB","orThat":"dataToMixA.foo.bar"}'>
18
- <div>Value of dataToMixA.foo.bar and mixedData.orThat : <sonic-value key="orThat"></sonic-value></div>
19
- <div>Value of dataToMixB.baz and mixedData.either.baz : <sonic-value key="either.baz"></sonic-value></div>
20
- </sonic-mix>
21
- </template>
22
- </sonic-code>
23
- Then we can change values in both dataProviders programaticaly this way, they will stay in sync
24
- <sonic-code language="javascript">
25
- <template>
26
- SonicPublisherManager.get("mixedData").either.baz=6;
27
- SonicPublisherManager.get("dataToMixB").baz=8;
28
- SonicPublisherManager.get("dataToMixA").foo.bar=8;
29
- SonicPublisherManager.get("mixedData").orThat=6;
30
- </template>
31
- </sonic-code>
32
- Or by using a form element
33
- <sonic-code>
34
- <template>
35
- <sonic-input label="mixedData.orThat" formDataProvider="mixedData" name="orThat"></sonic-input>
36
- </template>
37
- </sonic-code>
38
-
39
-
40
-
41
-
@@ -1,72 +0,0 @@
1
- # Queue
2
-
3
- > **Try offline:** `serviceURL="/docs-mock-api"` — see [Local API demos](#docs/_misc/docs-mock-api.md/docs-mock-api). Row rendering: [Data flow](#docs/_core-concept/dataFlow.md/dataFlow) (`.items` property binding).
4
-
5
- **sonic-queue** loads data in **batches**. Each batch is an internal [List](#core/components/functional/list/list.md/list) with its own `dataProvider` (`…/list-item/0`, `…/1`, …).
6
-
7
- | Mechanism | Role |
8
- |-----------|------|
9
- | **`dataProviderExpression`** | API path template; `$offset` and `$limit` are replaced per batch |
10
- | **`lazyload`** | Load the next batch when the user scrolls near the end |
11
- | **`dataFilterProvider`** | Publisher id of a form (`formDataProvider`); field values are merged into the request query string |
12
- | **`filteredFields`** | Optional list of form field names to **exclude** from the query (space-separated) — omit when every field should be sent |
13
- | **`.items`**, **`.noItems`**, **`.separator`**, **`.skeleton`** | Lit callbacks forwarded to each batch list (use the **dot** — functions are properties, not attributes) |
14
-
15
- ## Lazy load — `$offset` and `$limit`
16
-
17
- When the expression contains **`$offset`** and **`$limit`**, the queue:
18
-
19
- 1. Fetches the first batch with `offset=0` (or the initial `offset` attribute) and `per_page=$limit`.
20
- 2. On scroll, appends a batch with `offset` increased by the previous batch size.
21
- 3. Stops when a batch returns fewer rows than `limit` (or none).
22
-
23
- The doc mock implements this on `GET /docs-mock-api/api/users?offset=…&per_page=…` (`paginateUsers` in `src/docs/mock-api/router.ts`).
24
-
25
- <docs-lit-demo for="docs-queue-users-demo"></docs-lit-demo>
26
-
27
- Wrap the queue in a **fixed height** with **`overflow-y-auto`** so lazy load triggers when scrolling inside the box (same layout as the [TS starter](https://github.com/supersoniks/create-concorde-ts-starter) `demo-queue-templates`).
28
-
29
- Try scrolling after load — batches of 4 users. Search e.g. `George`, `Bluth`, or `zzz` for empty results.
30
-
31
- ### Expression example
32
-
33
- ```typescript
34
- html`<sonic-queue
35
- lazyload
36
- serviceURL="/docs-mock-api"
37
- dataProviderExpression="api/users?offset=$offset&limit=$limit"
38
- key="data"
39
- limit="4"
40
- class="grid max-h-96 overflow-y-auto"
41
- .items=${this.renderUser}
42
- ></sonic-queue>`;
43
- ```
44
-
45
- Without **`$offset`** in the expression, the queue behaves like a single list (one batch), e.g. geo communes below.
46
-
47
- ## Filter — `dataFilterProvider` + `q`
48
-
49
- One search field (`name="q"`) on `formDataProvider="filter"`. The queue listens via **`dataFilterProvider="filter"`** and, on change:
50
-
51
- 1. Resets loaded batches.
52
- 2. Appends each non-empty form field to the query (here only **`q`** — no `filteredFields` needed).
53
- 3. Fetches again from offset `0`.
54
-
55
- Use **`filteredFields`** only when the form has extra fields that must **not** be sent to the API (e.g. `filteredFields="rememberMe internalId"`).
56
-
57
- The mock API filters before pagination — same haystack logic as the starter (`filterDocsUsers` in `src/docs/mock-api/fixtures.ts`, used by `paginateUsers` in `router.ts` / Service Worker):
58
-
59
- ```typescript
60
- const haystack = `${first_name} ${last_name} ${email}`.toLowerCase();
61
- return haystack.includes(q);
62
- ```
63
-
64
- ## Simple batch (no lazy scroll)
65
-
66
- Geo communes: expression uses **`$limit` only** (no `$offset`) — one request, one batch.
67
-
68
- <docs-lit-demo for="docs-queue-geo-demo"></docs-lit-demo>
69
-
70
- ## HTML `<template>` children
71
-
72
- Optional for hosts without Lit — see [HTML integration](#docs/_misc/html-integration.md/html-integration).
@@ -1,94 +0,0 @@
1
- # Router
2
-
3
- **sonic-router** watches `document.location` (pathname + hash) and renders the matching view.
4
-
5
- From a **Lit** parent, pass a **`.routes`** map (property binding — same rule as [`.items` on list](#core/components/functional/list/list.md/list)): keys are path patterns, values are render functions. Use **`fallback`** when nothing matches.
6
-
7
- Legacy HTML **`<template data-route="…">`** remains for hosts without Lit — [HTML integration](#docs/_misc/html-integration.md/html-integration).
8
-
9
- ## Static routes (no parameters)
10
-
11
- Route keys are matched against `pathname + hash`. A simple hash route `#home` matches when the location contains that segment.
12
-
13
- On the **doc site**, the page URL is already a hash (`#…/router.md/router`). Demos append a **second** hash for in-page routes (`#…/router#home`), use **`href` + `autoActive="strict"`** on `sonic-button` for the active state, and `history.replaceState` on click so markdown is not reloaded (`setDocsDemoSubHash` in `src/docs/docs-location.ts`).
14
-
15
- <docs-lit-demo for="docs-router-basic-demo"></docs-lit-demo>
16
-
17
- ```typescript
18
- @state()
19
- private routes = {
20
- "#home": () => html`<div>Home</div>`,
21
- "#about": () => html`<div>About</div>`,
22
- fallback: () => html`<div>Not found</div>`,
23
- };
24
-
25
- html`
26
- <sonic-button href="#home">Home</sonic-button>
27
- <sonic-router .routes=${this.routes}></sonic-router>
28
- `;
29
- ```
30
-
31
- | Key | When it runs |
32
- |-----|----------------|
33
- | `"#home"`, `"#about"`, … | `RegExp` or [url-pattern](https://www.npmjs.com/package/url-pattern) test succeeds on current location |
34
- | **`fallback`** | No other route matched (not an attribute — a key on the same object) |
35
-
36
- ## Routes with parameters
37
-
38
- Two styles (see `router.demo.ts` and `docs-router-params-demo`):
39
-
40
- ### Url-pattern (`:name`)
41
-
42
- Key uses **`:param`** segments. The render function receives an **object** `{ param: string }`.
43
-
44
- <docs-lit-demo for="docs-router-params-demo"></docs-lit-demo>
45
-
46
- ```typescript
47
- "#couleur/:id": ({ id }) => html`<p>Colour id: ${id}</p>`,
48
- ```
49
-
50
- ### RegExp (capturing groups)
51
-
52
- Key is a **RegExp** string with `(\d+)` / `(\w+)` groups. The render function receives an **array** of captured strings (in order).
53
-
54
- ```typescript
55
- "#products/(\\d+)/(\\w+)": ([productId, slug]) =>
56
- html`<p>Product ${productId}, slug ${slug}</p>`,
57
- ```
58
-
59
- With parameters you usually render data directly in Lit (`${id}`). The old **`<template data-route>` + `dataProviderExpression`** pattern scoped a `dataProvider` for `data-bind` / fetch children — prefer **`@subscribe`** or explicit props when using `.routes`.
60
-
61
- ## `.routes` binding
62
-
63
- Always use **`.routes=${…}`** in Lit templates: route handlers are functions and must be set as **properties**, not HTML attributes.
64
-
65
- ## Optional attributes
66
-
67
- | Attribute | Role |
68
- |-----------|------|
69
- | **`basePath`** | Prefix for pattern matching (default allows optional leading segments) |
70
- | **`fallBackRoute`** | If set and no template/route matches, navigates to this URL (redirect). Distinct from **`routes.fallback`** which only renders content |
71
-
72
- ## `sonic-redirect`
73
-
74
- Separate component: redirect when data appears on a publisher (login steps, wizards). Not part of the `.routes` map.
75
-
76
- <sonic-code>
77
- <template>
78
- <sonic-redirect to="#core/components/functional/router/router.md/router#data-is-set" dataProvider="stupid-data-set-id" onData="theData"></sonic-redirect>
79
- <div class="flex gap-2 mb-4" formDataProvider="stupid-data-set-id">
80
- <sonic-button radio name="theData" value="Some Data" size="xs">
81
- Enter data
82
- </sonic-button>
83
- <sonic-button radio name="theData" value="" href="javascript:history.back();" size="xs">
84
- Delete the data and do a history.back()
85
- </sonic-button>
86
- </div>
87
- </template>
88
- </sonic-code>
89
-
90
- Example: combine with **`.routes`** and **submit** for login / logout / profile steps.
91
-
92
- ## Package demo
93
-
94
- `sonic-router-demo` (`router.demo.ts`) — home, user profile (`#user/:id/:slug`), products RegExp, **fallback** 404.
@@ -1,108 +0,0 @@
1
- {
2
- "checkbox": {
3
- "tagName": "sonic-checkbox"
4
- },
5
- "date": {
6
- "tagName": "sonic-input",
7
- "attributes": {
8
- "type": "date"
9
- }
10
- },
11
- "fieldset": {
12
- "tagName": "sonic-fieldset",
13
- "nodes":[{"libraryKey":"formLayout"}],
14
- "contentElementSelector":"sonic-form-layout"
15
- },
16
- "managed_file": {
17
- "tagName": "sonic-input",
18
- "attributes": {
19
- "variant":"ghost",
20
- "type": "file"
21
- }
22
- },
23
- "password": {
24
- "tagName": "sonic-input",
25
- "attributes": {
26
- "type": "password"
27
- }
28
- },
29
- "radio": {
30
- "tagName": "sonic-radio"
31
- },
32
- "select": {
33
- "tagName": "sonic-select"
34
- },
35
- "textarea": {
36
- "tagName": "sonic-textarea"
37
- },
38
- "textfield": {
39
- "tagName": "sonic-input",
40
- "attributes": {
41
- "type": "text"
42
- }
43
- },
44
- "hidden": {
45
- "tagName": "sonic-input",
46
- "attributes": {
47
- "type": "hidden"
48
- }
49
- },
50
- "button": {
51
- "tagName": "sonic-button"
52
- },
53
- "form": {
54
- "tagName": "sonic-submit",
55
- "attributes": {
56
- "onEnterKey": true
57
- }
58
- },
59
- "submit": {
60
- "tagName": "sonic-submit",
61
- "attributes": {
62
- "onClick": true
63
- },
64
- "contentElementSelector":"sonic-button",
65
- "nodes":[
66
- {
67
- "libraryKey":"button",
68
- "attributes":{"type":"success"},
69
- "nodes":[
70
- {
71
- "tagName":"sonic-icon",
72
- "attributes":{
73
- "name":"check",
74
- "slot":"prefix"
75
- }
76
- }
77
- ]
78
- }
79
- ]
80
- },
81
- "email": {
82
- "tagName": "sonic-input",
83
- "attributes": {
84
- "type": "email"
85
- }
86
- },
87
- "formItemContainer": {
88
- "tagName": "div",
89
- "attributes": {
90
- "class": "form-item-container"
91
- }
92
- },
93
- "formLayout": {
94
- "tagName": "sonic-form-layout"
95
- },
96
- "formActions": {
97
- "tagName": "sonic-form-actions"
98
- },
99
- "passwordHelper": {
100
- "tagName": "sonic-password-helper"
101
- },
102
- "sameValueHelper": {
103
- "tagName": "sonic-same-value-helper"
104
- },
105
- "divider": {
106
- "tagName": "sonic-divider"
107
- }
108
- }
@@ -1,99 +0,0 @@
1
- {
2
- "nodes": [
3
- {
4
- "tagName": "div",
5
- "attributes": {
6
- "class": "flex gap-2 items-center",
7
- "formdataprovider": "states-basic-example"
8
- },
9
- "nodes": [
10
- {
11
- "tagName": "sonic-button",
12
- "attributes": {
13
- "radio": "",
14
- "name": "selection",
15
- "value": "#home",
16
- "checked": "",
17
- "size": "xs"
18
- },
19
- "innerHTML": "Home"
20
- },
21
- {
22
- "tagName": "sonic-button",
23
- "attributes": {
24
- "radio": "",
25
- "name": "selection",
26
- "value": "#about",
27
- "size": "xs"
28
- },
29
- "innerHTML": "About"
30
- },
31
- {
32
- "tagName": "sonic-button",
33
- "attributes": {
34
- "radio": "",
35
- "name": "selection",
36
- "value": "#work",
37
- "size": "xs"
38
- },
39
- "innerHTML": "Work"
40
- },
41
- {
42
- "tagName": "sonic-button",
43
- "attributes": {
44
- "radio": "",
45
- "name": "selection",
46
- "value": "#contact",
47
- "size": "xs"
48
- },
49
- "innerHTML": "Contact"
50
- }
51
- ]
52
- },
53
- {
54
- "tagName": "div",
55
- "attributes": {
56
- "class": "text-center text-neutral-700 border rounded text-4xl my-6 p-3 "
57
- },
58
- "nodes": [
59
- {
60
- "tagName": "sonic-states",
61
- "attributes": {
62
- "dataprovider": "states-basic-example",
63
- "data-path": "selection"
64
- },
65
- "nodes": [
66
- {
67
- "tagName": "template",
68
- "attributes": {
69
- "data-value": "#home"
70
- },
71
- "innerHTML": "Home"
72
- },
73
- {
74
- "tagName": "template",
75
- "attributes": {
76
- "data-value": "#about"
77
- },
78
- "innerHTML": "About"
79
- },
80
- {
81
- "tagName": "template",
82
- "attributes": {
83
- "data-value": "#work"
84
- },
85
- "innerHTML": "Work"
86
- },
87
- {
88
- "tagName": "template",
89
- "attributes": {
90
- "data-value": "#contact"
91
- },
92
- "innerHTML": "Contact"
93
- }
94
- ]
95
- }
96
- ]
97
- }
98
- ]
99
- }