@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.
- package/.agents/skills/concorde-docs/SKILL.md +153 -0
- package/.agents/skills/{concorde-component-docs/template.md → concorde-docs/templates/component.md} +6 -2
- package/.agents/skills/concorde-docs/templates/decorator.md +43 -0
- package/.agents/skills/concorde-docs/templates/guide.md +25 -0
- package/.tmp-cem/custom-elements.json +503 -503
- package/PLAN-DOCS-AGENTS.md +80 -0
- package/README.md +3 -3
- package/ai/skills/concorde/SKILL.md +1 -1
- package/ai/skills/concorde-get-set-dp/SKILL.md +3 -3
- package/ai/skills/concorde-theme/SKILL.md +1 -1
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +1 -1
- package/concorde-core.es.js +1 -1
- package/dist/concorde-core.bundle.js +1 -1
- package/dist/concorde-core.es.js +1 -1
- package/docs/.htaccess +75 -0
- package/docs/404.html +15 -0
- package/docs/404.md +5 -0
- package/docs/assets/{index-Bb-_LRyY.js → index-BgG6FFPt.js} +2582 -3097
- package/docs/assets/index-x89XINSG.css +1 -0
- package/docs/core/components/functional/date/date.html +211 -0
- package/docs/core/components/functional/date/date.md +150 -0
- package/docs/core/components/functional/fetch/fetch.html +180 -0
- package/docs/core/components/functional/fetch/fetch.md +108 -0
- package/docs/core/components/functional/if/if.html +65 -0
- package/docs/core/components/functional/if/if.md +34 -0
- package/docs/core/components/functional/jsonata/jsonata.html +110 -0
- package/docs/core/components/functional/jsonata/jsonata.md +61 -0
- package/docs/core/components/functional/list/list.html +198 -0
- package/docs/core/components/functional/list/list.md +121 -0
- package/docs/core/components/functional/mix/mix.html +78 -0
- package/docs/core/components/functional/mix/mix.md +46 -0
- package/docs/core/components/functional/queue/queue.html +155 -0
- package/docs/core/components/functional/queue/queue.md +51 -0
- package/docs/core/components/functional/router/router.html +154 -0
- package/docs/core/components/functional/router/router.md +93 -0
- package/docs/core/components/functional/sdui/sdui-extension-points.html +127 -0
- package/docs/core/components/functional/sdui/sdui-extension-points.md +94 -0
- package/docs/core/components/functional/sdui/sdui.html +397 -0
- package/docs/core/components/functional/sdui/sdui.md +307 -0
- package/docs/core/components/functional/states/states.html +141 -0
- package/docs/core/components/functional/states/states.md +112 -0
- package/docs/core/components/functional/submit/submit.html +178 -0
- package/docs/core/components/functional/submit/submit.md +106 -0
- package/docs/core/components/functional/subscriber/subscriber.html +68 -0
- package/docs/core/components/functional/subscriber/subscriber.md +91 -0
- package/docs/core/components/functional/translation/translation.html +60 -0
- package/docs/core/components/functional/translation/translation.md +38 -0
- package/docs/core/components/functional/value/value.html +81 -0
- package/docs/core/components/functional/value/value.md +47 -0
- package/docs/core/components/ui/alert/alert.html +201 -0
- package/docs/core/components/ui/alert/alert.md +186 -0
- package/docs/core/components/ui/alert-messages/alert-messages.html +132 -0
- package/docs/core/components/ui/alert-messages/alert-messages.md +85 -0
- package/docs/core/components/ui/badge/badge.html +197 -0
- package/docs/core/components/ui/badge/badge.md +181 -0
- package/docs/core/components/ui/button/button.html +309 -0
- package/docs/core/components/ui/button/button.md +216 -0
- package/docs/core/components/ui/captcha/captcha.html +80 -0
- package/docs/core/components/ui/captcha/captcha.md +56 -0
- package/docs/core/components/ui/card/card.html +254 -0
- package/docs/core/components/ui/card/card.md +215 -0
- package/docs/core/components/ui/divider/divider.html +144 -0
- package/docs/core/components/ui/divider/divider.md +126 -0
- package/docs/core/components/ui/form/checkbox/checkbox.html +200 -0
- package/docs/core/components/ui/form/checkbox/checkbox.md +125 -0
- package/docs/core/components/ui/form/fieldset/fieldset.html +238 -0
- package/docs/core/components/ui/form/fieldset/fieldset.md +161 -0
- package/docs/core/components/ui/form/form-actions/form-actions.html +122 -0
- package/docs/core/components/ui/form/form-actions/form-actions.md +98 -0
- package/docs/core/components/ui/form/form-layout/form-layout.html +115 -0
- package/docs/core/components/ui/form/form-layout/form-layout.md +109 -0
- package/docs/core/components/ui/form/input/input.html +235 -0
- package/docs/core/components/ui/form/input/input.md +142 -0
- package/docs/core/components/ui/form/radio/radio.html +144 -0
- package/docs/core/components/ui/form/radio/radio.md +78 -0
- package/docs/core/components/ui/form/select/select.html +178 -0
- package/docs/core/components/ui/form/select/select.md +86 -0
- package/docs/core/components/ui/form/switch/switch.html +146 -0
- package/docs/core/components/ui/form/switch/switch.md +80 -0
- package/docs/core/components/ui/form/textarea/textarea.html +162 -0
- package/docs/core/components/ui/form/textarea/textarea.md +82 -0
- package/docs/core/components/ui/group/group.html +113 -0
- package/docs/core/components/ui/group/group.md +77 -0
- package/docs/core/components/ui/icon/icon.html +223 -0
- package/docs/core/components/ui/icon/icon.md +214 -0
- package/docs/core/components/ui/image/image.html +194 -0
- package/docs/core/components/ui/image/image.md +167 -0
- package/docs/core/components/ui/link/link.html +101 -0
- package/docs/core/components/ui/link/link.md +81 -0
- package/docs/core/components/ui/loader/loader.html +114 -0
- package/docs/core/components/ui/loader/loader.md +87 -0
- package/docs/core/components/ui/menu/menu.html +395 -0
- package/docs/core/components/ui/menu/menu.md +370 -0
- package/docs/core/components/ui/modal/modal.html +324 -0
- package/docs/core/components/ui/modal/modal.md +211 -0
- package/docs/core/components/ui/pop/pop.html +250 -0
- package/docs/core/components/ui/pop/pop.md +216 -0
- package/docs/core/components/ui/progress/progress.html +132 -0
- package/docs/core/components/ui/progress/progress.md +109 -0
- package/docs/core/components/ui/table/table.html +333 -0
- package/docs/core/components/ui/table/table.md +267 -0
- package/docs/core/components/ui/theme/theme.html +116 -0
- package/docs/core/components/ui/theme/theme.md +97 -0
- package/docs/core/components/ui/toast/toast.html +185 -0
- package/docs/core/components/ui/toast/toast.md +147 -0
- package/docs/core/components/ui/tooltip/tooltip.html +112 -0
- package/docs/core/components/ui/tooltip/tooltip.md +89 -0
- package/docs/docs/decorators/ancestor-attribute.html +71 -0
- package/docs/docs/decorators/ancestor-attribute.md +59 -0
- package/docs/docs/decorators/auto-subscribe.html +61 -0
- package/docs/docs/decorators/auto-subscribe.md +40 -0
- package/docs/docs/decorators/bind.html +86 -0
- package/docs/docs/decorators/bind.md +77 -0
- package/docs/docs/decorators/get.html +166 -0
- package/docs/docs/decorators/get.md +160 -0
- package/docs/docs/decorators/handle.html +139 -0
- package/docs/docs/decorators/handle.md +119 -0
- package/docs/docs/decorators/on-assign.html +72 -0
- package/docs/docs/decorators/on-assign.md +63 -0
- package/docs/docs/decorators/patch.html +76 -0
- package/docs/docs/decorators/patch.md +44 -0
- package/docs/docs/decorators/post.html +150 -0
- package/docs/docs/decorators/post.md +134 -0
- package/docs/docs/decorators/publish.html +74 -0
- package/docs/docs/decorators/publish.md +56 -0
- package/docs/docs/decorators/put.html +83 -0
- package/docs/docs/decorators/put.md +51 -0
- package/docs/docs/decorators/subscribe.html +91 -0
- package/docs/docs/decorators/subscribe.md +87 -0
- package/docs/docs/decorators/wait-for-ancestors.html +82 -0
- package/docs/docs/decorators/wait-for-ancestors.md +76 -0
- package/docs/docs/directives/sub.html +79 -0
- package/docs/docs/directives/sub.md +75 -0
- package/docs/docs/directives/t.html +91 -0
- package/docs/docs/directives/t.md +73 -0
- package/docs/docs/getting-started/ai-agents.html +174 -0
- package/{src/docs/_getting-started → docs/docs/getting-started}/ai-agents.md +3 -3
- package/docs/docs/getting-started/components.html +27 -0
- package/docs/docs/getting-started/create-a-component.html +108 -0
- package/{src/docs/_getting-started → docs/docs/getting-started}/create-a-component.md +3 -6
- package/docs/docs/getting-started/dataFlow.html +174 -0
- package/{src/docs/_core-concept → docs/docs/getting-started}/dataFlow.md +17 -18
- package/docs/docs/getting-started/installation.html +69 -0
- package/docs/docs/getting-started/installation.md +36 -0
- package/docs/docs/getting-started/my-first-component.html +180 -0
- package/{src/docs/_getting-started → docs/docs/getting-started}/my-first-component.md +5 -14
- package/docs/docs/getting-started/start.html +47 -0
- package/{src/docs/_getting-started → docs/docs/getting-started}/start.md +1 -13
- package/docs/docs/getting-started/theming.html +334 -0
- package/docs/docs/index.html +99 -0
- package/docs/docs/misc/api-configuration.html +149 -0
- package/{src/docs/_misc → docs/docs/misc}/api-configuration.md +10 -12
- package/docs/docs/misc/dataProviderKey.html +136 -0
- package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
- package/docs/docs/misc/docs-mock-api.html +155 -0
- package/{src/docs/_misc → docs/docs/misc}/docs-mock-api.md +12 -13
- package/docs/docs/misc/dynamic-path.html +181 -0
- package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
- package/docs/docs/misc/endpoint.html +51 -0
- package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
- package/docs/docs/misc/html-integration.html +45 -0
- package/{src/docs/_misc → docs/docs/misc}/html-integration.md +4 -5
- package/docs/docs-mock-api-sw.js +58 -223
- package/docs/docs-mock-api-sw.js.map +4 -4
- package/docs/hubs/decorators.html +443 -0
- package/docs/hubs/form-components.html +404 -0
- package/docs/hubs/remote-data.html +371 -0
- package/docs/img/archive/concorde-001-2cv.webp +0 -0
- package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
- package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
- package/docs/img/archive/credits.json +28 -0
- package/docs/img/concorde/plane_01.jpg +0 -0
- package/docs/img/concorde/plane_02.jpg +0 -0
- package/docs/img/concorde/plane_03.jpg +0 -0
- package/docs/img/concorde/plane_04.jpg +0 -0
- package/docs/img/concorde/plane_05.jpg +0 -0
- package/docs/img/concorde/plane_06.jpg +0 -0
- package/docs/img/concorde/plane_07.jpg +0 -0
- package/docs/img/concorde/plane_08.jpg +0 -0
- package/docs/img/concorde/plane_09.jpg +0 -0
- package/docs/img/concorde/plane_10.jpg +0 -0
- package/docs/img/concorde/plane_11.jpg +0 -0
- package/docs/img/concorde/plane_12.jpg +0 -0
- package/docs/img/concorde/plane_13.jpg +0 -0
- package/docs/index.html +95 -68
- package/docs/index.md +22 -0
- package/docs/llms-full.txt +5795 -0
- package/docs/llms.txt +106 -0
- package/docs/robots.txt +11 -10
- package/docs/sitemap.xml +237 -0
- package/docs/src/core/components/functional/date/date.md +150 -0
- package/docs/src/core/components/functional/fetch/fetch.md +108 -0
- package/docs/src/core/components/functional/if/if.md +34 -0
- package/docs/src/core/components/functional/jsonata/jsonata.md +61 -0
- package/docs/src/core/components/functional/list/list.md +121 -0
- package/docs/src/core/components/functional/mix/mix.md +46 -0
- package/docs/src/core/components/functional/queue/queue.md +51 -0
- package/docs/src/core/components/functional/router/router.md +93 -0
- package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
- package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
- package/docs/src/core/components/functional/sdui/default-library.json +108 -0
- package/docs/src/core/components/functional/sdui/example.json +32 -0
- package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
- package/docs/src/core/components/functional/sdui/sdui.md +307 -0
- package/docs/src/core/components/functional/states/states.md +112 -0
- package/docs/src/core/components/functional/submit/submit.md +106 -0
- package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
- package/docs/src/core/components/functional/translation/translation.md +38 -0
- package/docs/src/core/components/functional/value/value.md +47 -0
- package/docs/src/core/components/ui/alert/alert.md +186 -0
- package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
- package/docs/src/core/components/ui/badge/badge.md +181 -0
- package/docs/src/core/components/ui/button/button.md +216 -0
- package/docs/src/core/components/ui/captcha/captcha.md +56 -0
- package/docs/src/core/components/ui/card/card.md +215 -0
- package/docs/src/core/components/ui/divider/divider.md +126 -0
- package/docs/src/core/components/ui/form/checkbox/checkbox.md +125 -0
- package/docs/src/core/components/ui/form/fieldset/fieldset.md +161 -0
- package/docs/src/core/components/ui/form/form-actions/form-actions.md +98 -0
- package/docs/src/core/components/ui/form/form-layout/form-layout.md +109 -0
- package/docs/src/core/components/ui/form/input/input.md +142 -0
- package/docs/src/core/components/ui/form/radio/radio.md +78 -0
- package/docs/src/core/components/ui/form/select/select.md +86 -0
- package/docs/src/core/components/ui/form/switch/switch.md +80 -0
- package/docs/src/core/components/ui/form/textarea/textarea.md +82 -0
- package/docs/src/core/components/ui/group/group.md +77 -0
- package/docs/src/core/components/ui/icon/icon.md +214 -0
- package/docs/src/core/components/ui/icon/icons.json +1 -0
- package/docs/src/core/components/ui/image/image.md +167 -0
- package/docs/src/core/components/ui/link/link.md +81 -0
- package/docs/src/core/components/ui/loader/loader.md +87 -0
- package/docs/src/core/components/ui/menu/menu.md +370 -0
- package/docs/src/core/components/ui/modal/modal.md +211 -0
- package/docs/src/core/components/ui/pop/pop.md +216 -0
- package/docs/src/core/components/ui/progress/progress.md +109 -0
- package/docs/src/core/components/ui/table/table.md +267 -0
- package/docs/src/core/components/ui/theme/theme.md +97 -0
- package/docs/src/core/components/ui/toast/toast.md +147 -0
- package/docs/src/core/components/ui/tooltip/tooltip.md +89 -0
- package/docs/src/docs/decorators/ancestor-attribute.md +59 -0
- package/docs/src/docs/decorators/auto-subscribe.md +40 -0
- package/docs/src/docs/decorators/bind.md +77 -0
- package/docs/src/docs/decorators/get.md +160 -0
- package/docs/src/docs/decorators/handle.md +119 -0
- package/docs/src/docs/decorators/on-assign.md +63 -0
- package/docs/src/docs/decorators/patch.md +44 -0
- package/docs/src/docs/decorators/post.md +134 -0
- package/docs/src/docs/decorators/publish.md +56 -0
- package/docs/src/docs/decorators/put.md +51 -0
- package/docs/src/docs/decorators/subscribe.md +87 -0
- package/docs/src/docs/decorators/wait-for-ancestors.md +76 -0
- package/docs/src/docs/directives/sub.md +75 -0
- package/docs/src/docs/directives/t.md +73 -0
- package/docs/src/docs/getting-started/ai-agents.md +76 -0
- package/docs/src/docs/getting-started/components.md +5 -0
- package/docs/src/docs/getting-started/create-a-component.md +136 -0
- package/docs/src/docs/getting-started/dataFlow.md +87 -0
- package/docs/src/docs/getting-started/installation.md +36 -0
- package/docs/src/docs/getting-started/my-first-component.md +227 -0
- package/docs/src/docs/getting-started/start.md +35 -0
- package/docs/src/docs/getting-started/theming.md +253 -0
- package/docs/src/docs/misc/api-configuration.md +79 -0
- package/docs/src/docs/misc/dataProviderKey.md +168 -0
- package/docs/src/docs/misc/docs-mock-api.md +62 -0
- package/docs/src/docs/misc/dynamic-path.md +71 -0
- package/docs/src/docs/misc/endpoint.md +45 -0
- package/docs/src/docs/misc/html-integration.md +14 -0
- package/docs/src/docs/search/docs-search.json +10287 -0
- package/docs/src/tag-list.json +1 -0
- package/docs/src/tsconfig-model.json +23 -0
- package/docs/src/tsconfig.json +1353 -0
- package/index.html +68 -5
- package/package.json +1 -1
- package/public/docs-mock-api-sw.js +58 -223
- package/public/docs-mock-api-sw.js.map +4 -4
- package/public/img/concorde/plane_01.jpg +0 -0
- package/public/img/concorde/plane_02.jpg +0 -0
- package/public/img/concorde/plane_03.jpg +0 -0
- package/public/img/concorde/plane_04.jpg +0 -0
- package/public/img/concorde/plane_05.jpg +0 -0
- package/public/img/concorde/plane_06.jpg +0 -0
- package/public/img/concorde/plane_07.jpg +0 -0
- package/public/img/concorde/plane_08.jpg +0 -0
- package/public/img/concorde/plane_09.jpg +0 -0
- package/public/img/concorde/plane_10.jpg +0 -0
- package/public/img/concorde/plane_11.jpg +0 -0
- package/public/img/concorde/plane_12.jpg +0 -0
- package/public/img/concorde/plane_13.jpg +0 -0
- package/public/robots.txt +11 -10
- package/scripts/docs-markdown-vite-plugin.ts +37 -0
- package/scripts/docs-public-url.mjs +50 -0
- package/scripts/docs.htaccess +75 -0
- package/scripts/generate-crawl-docs.mjs +207 -116
- package/scripts/generate-crawl-docs.test.mjs +124 -0
- package/scripts/post-build-docs.js +34 -50
- package/src/core/components/functional/date/date.md +91 -231
- package/src/core/components/functional/fetch/fetch.md +66 -83
- package/src/core/components/functional/if/if.md +28 -3
- package/src/core/components/functional/jsonata/jsonata.md +42 -37
- package/src/core/components/functional/list/list.md +99 -43
- package/src/core/components/functional/mix/mix.md +31 -26
- package/src/core/components/functional/queue/queue.demo.ts +10 -7
- package/src/core/components/functional/queue/queue.md +40 -61
- package/src/core/components/functional/router/router.demo.ts +16 -16
- package/src/core/components/functional/router/router.md +64 -65
- package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
- package/src/core/components/functional/sdui/component-catalog.json +1 -1
- package/src/core/components/functional/sdui/example.json +19 -86
- package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
- package/src/core/components/functional/sdui/sdui.md +187 -358
- package/src/core/components/functional/states/states.demo.ts +21 -22
- package/src/core/components/functional/states/states.md +86 -61
- package/src/core/components/functional/states/states.ts +1 -1
- package/src/core/components/functional/submit/submit.md +64 -72
- package/src/core/components/functional/translation/translation.md +38 -0
- package/src/core/components/functional/value/value.md +34 -22
- package/src/core/components/ui/alert/alert.md +48 -58
- package/src/core/components/ui/badge/badge.md +27 -34
- package/src/core/components/ui/button/button.md +139 -106
- package/src/core/components/ui/captcha/captcha.md +17 -32
- package/src/core/components/ui/card/card.md +6 -6
- package/src/core/components/ui/divider/divider.md +8 -11
- package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
- package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
- package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
- package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
- package/src/core/components/ui/form/input/input.md +95 -95
- package/src/core/components/ui/form/radio/radio.md +55 -34
- package/src/core/components/ui/form/select/select.md +60 -45
- package/src/core/components/ui/form/switch/switch.md +57 -34
- package/src/core/components/ui/form/textarea/textarea.md +55 -38
- package/src/core/components/ui/group/group.md +35 -33
- package/src/core/components/ui/icon/icon.md +4 -4
- package/src/core/components/ui/image/image.md +41 -107
- package/src/core/components/ui/link/link.md +6 -6
- package/src/core/components/ui/loader/loader.md +30 -55
- package/src/core/components/ui/menu/menu.md +27 -27
- package/src/core/components/ui/modal/modal.md +72 -96
- package/src/core/components/ui/pop/pop.md +80 -158
- package/src/core/components/ui/progress/progress.md +2 -2
- package/src/core/components/ui/table/table.md +91 -255
- package/src/core/components/ui/theme/theme.md +11 -36
- package/src/core/components/ui/toast/toast.md +48 -117
- package/src/core/components/ui/tooltip/tooltip.md +27 -62
- package/src/core/utils/LocationHandler.spec.ts +80 -0
- package/src/core/utils/LocationHandler.ts +5 -9
- package/src/docs/components/docs-demo-sources.ts +55 -140
- package/src/docs/components/docs-lit-demo.ts +1 -3
- package/src/docs/components/docs-source-link.ts +0 -82
- package/src/docs/decorators/ancestor-attribute.md +59 -0
- package/src/docs/decorators/auto-subscribe.md +40 -0
- package/src/docs/decorators/bind.md +77 -0
- package/src/docs/decorators/get.md +160 -0
- package/src/docs/decorators/handle.md +119 -0
- package/src/docs/decorators/on-assign.md +63 -0
- package/src/docs/decorators/patch.md +44 -0
- package/src/docs/decorators/post.md +134 -0
- package/src/docs/decorators/publish.md +56 -0
- package/src/docs/decorators/put.md +51 -0
- package/src/docs/decorators/subscribe.md +87 -0
- package/src/docs/decorators/wait-for-ancestors.md +76 -0
- package/src/docs/directives/sub.md +75 -0
- package/src/docs/directives/t.md +73 -0
- package/src/docs/docs-location.spec.ts +46 -0
- package/src/docs/docs-location.ts +123 -32
- package/src/docs/docs.ts +1 -2
- package/src/docs/example/decorators-demo-bind-demos.ts +81 -116
- package/src/docs/example/decorators-demo-geo.ts +30 -19
- package/src/docs/example/decorators-demo-post.ts +88 -186
- package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
- package/src/docs/example/decorators-demo.ts +85 -98
- package/src/docs/example/docs-api-config-demos.ts +19 -20
- package/src/docs/example/docs-flight-demos.ts +147 -0
- package/src/docs/example/docs-jsonata-demos.ts +52 -52
- package/src/docs/example/docs-list-demos.ts +43 -123
- package/src/docs/example/docs-provider-keys.ts +21 -28
- package/src/docs/example/docs-queue-demos.ts +37 -77
- package/src/docs/example/docs-router-demos.ts +20 -25
- package/src/docs/example/docs-submit-demos.ts +48 -48
- package/src/docs/example/docs-toggle-demos.ts +4 -3
- package/src/docs/getting-started/ai-agents.md +76 -0
- package/src/docs/getting-started/components.md +5 -0
- package/src/docs/getting-started/create-a-component.md +136 -0
- package/src/docs/getting-started/dataFlow.md +87 -0
- package/src/docs/getting-started/installation.md +36 -0
- package/src/docs/getting-started/my-first-component.md +227 -0
- package/src/docs/getting-started/start.md +35 -0
- package/src/docs/getting-started/theming.md +253 -0
- package/src/docs/header/header.ts +11 -6
- package/src/docs/home/catalog.ts +1 -1
- package/src/docs/home/home.ts +17 -10
- package/src/docs/layout.ts +12 -13
- package/src/docs/misc/api-configuration.md +79 -0
- package/src/docs/misc/dataProviderKey.md +168 -0
- package/src/docs/misc/docs-mock-api.md +62 -0
- package/src/docs/misc/dynamic-path.md +71 -0
- package/src/docs/misc/endpoint.md +45 -0
- package/src/docs/misc/html-integration.md +14 -0
- package/src/docs/mock-api/api-config-mock.ts +5 -0
- package/src/docs/mock-api/fixtures.ts +0 -278
- package/src/docs/mock-api/flights.ts +89 -0
- package/src/docs/mock-api/router.ts +3 -4
- package/src/docs/mock-api/urls.ts +1 -2
- package/src/docs/navigation/navigation.ts +82 -103
- package/src/docs/navigation/toc.ts +7 -4
- package/src/docs/search/docs-search.json +2845 -5110
- package/src/docs/search/markdown-renderer.ts +25 -7
- package/src/docs/search/page.ts +9 -6
- package/src/docs/search/search.ts +154 -122
- package/vite.config.mts +11 -2
- package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
- package/docs/assets/index-CD4WyL6o.css +0 -1
- package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
- package/src/docs/_core-concept/overview.md +0 -57
- package/src/docs/_core-concept/subscriber.md +0 -75
- package/src/docs/_decorators/ancestor-attribute.md +0 -128
- package/src/docs/_decorators/auto-subscribe.md +0 -202
- package/src/docs/_decorators/bind.md +0 -167
- package/src/docs/_decorators/get.md +0 -162
- package/src/docs/_decorators/handle.md +0 -175
- package/src/docs/_decorators/on-assign.md +0 -390
- package/src/docs/_decorators/patch.md +0 -70
- package/src/docs/_decorators/post.md +0 -146
- package/src/docs/_decorators/publish.md +0 -55
- package/src/docs/_decorators/put.md +0 -70
- package/src/docs/_decorators/subscribe.md +0 -100
- package/src/docs/_decorators/wait-for-ancestors.md +0 -163
- package/src/docs/_directives/sub.md +0 -91
- package/src/docs/_getting-started/concorde-manual-install.md +0 -133
- package/src/docs/_getting-started/concorde-outside.md +0 -33
- package/src/docs/_getting-started/my-first-subscriber.md +0 -120
- package/src/docs/_getting-started/pubsub.md +0 -37
- package/src/docs/_misc/formelement-subscriber-removal.md +0 -115
- package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
- package/src/docs/example/docs-joke-demos.ts +0 -297
- /package/{src/docs/_getting-started → docs/docs/getting-started}/components.md +0 -0
- /package/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# t()
|
|
2
|
+
|
|
3
|
+
Lit directive that renders a translated label by key. Keys are batched into one GET to the endpoint set by the nearest `wordingProvider` ancestor attribute, and results are cached in `localStorage`.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
<sonic-code language="typescript">
|
|
8
|
+
<template>
|
|
9
|
+
import { t } from "@supersoniks/concorde/directives/Wording";
|
|
10
|
+
</template>
|
|
11
|
+
</sonic-code>
|
|
12
|
+
|
|
13
|
+
`wording` and `w` are aliases of `t`. In plain HTML, use the [`sonic-t`](/core/components/functional/translation) element.
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
Set `serviceURL` and `wordingProvider` on the host component or one of its ancestors, then call `t(key)` in a template. Attributes on elements **inside** the component's own template are not read. Click the button to bump the version and reload the labels.
|
|
18
|
+
|
|
19
|
+
<docs-lit-demo for="docs-api-config-wording-demo"></docs-lit-demo>
|
|
20
|
+
|
|
21
|
+
## Endpoint contract
|
|
22
|
+
|
|
23
|
+
All keys requested in the same tick are sent in one request, appended to `wordingProvider` as `labels[]`:
|
|
24
|
+
|
|
25
|
+
<sonic-code language="shell">
|
|
26
|
+
<template>
|
|
27
|
+
GET {serviceURL}/wording/labels?lang=fr&labels[]=greeting&labels[]=farewell
|
|
28
|
+
</template>
|
|
29
|
+
</sonic-code>
|
|
30
|
+
|
|
31
|
+
The response is a flat map of key to label:
|
|
32
|
+
|
|
33
|
+
<sonic-code language="json">
|
|
34
|
+
<template>
|
|
35
|
+
{ "greeting": "Bonjour", "farewell": "Au revoir" }
|
|
36
|
+
</template>
|
|
37
|
+
</sonic-code>
|
|
38
|
+
|
|
39
|
+
Until the label arrives, `t()` renders an empty string.
|
|
40
|
+
|
|
41
|
+
## HTML labels
|
|
42
|
+
|
|
43
|
+
`t()` escapes the label. Use `unsafeWording(key)` for labels that contain trusted HTML.
|
|
44
|
+
|
|
45
|
+
<sonic-code language="typescript">
|
|
46
|
+
<template>
|
|
47
|
+
import { unsafeWording } from "@supersoniks/concorde/directives/Wording";
|
|
48
|
+
|
|
49
|
+
html`<p>${unsafeWording("terms.notice")}</p>`;
|
|
50
|
+
</template>
|
|
51
|
+
</sonic-code>
|
|
52
|
+
|
|
53
|
+
## Reloading labels
|
|
54
|
+
|
|
55
|
+
Labels are fetched again when:
|
|
56
|
+
|
|
57
|
+
- the `lang` attribute of `<html>` changes
|
|
58
|
+
- the number stored at `wordingVersionProvider` changes — bump it after publishing new labels to invalidate the `localStorage` cache
|
|
59
|
+
|
|
60
|
+
## API reference
|
|
61
|
+
|
|
62
|
+
| Function | Description |
|
|
63
|
+
|----------|-------------|
|
|
64
|
+
| `t(key)` · `wording(key)` · `w(key)` | Renders the escaped label for `key` |
|
|
65
|
+
| `unsafeWording(key)` | Renders the label as HTML |
|
|
66
|
+
| `isWordingReady(key)` | `true` once the label for `key` is loaded |
|
|
67
|
+
|
|
68
|
+
| Ancestor attribute | Description |
|
|
69
|
+
|--------------------|-------------|
|
|
70
|
+
| `wordingProvider` | Endpoint path and query, relative to `serviceURL` |
|
|
71
|
+
| `wordingVersionProvider` | DataProvider path holding a version number |
|
|
72
|
+
|
|
73
|
+
Other ancestor attributes (`serviceURL`, `token`, …) apply as for any request: see [API configuration](/docs/misc/api-configuration).
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-doc-url="https://concorde.supersoniks.org/docs/getting-started/ai-agents" data-doc-id="docs/getting-started/ai-agents">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>AI agents (skills & AGENTS.md) — Concorde by Supersoniks</title>
|
|
7
|
+
<meta name="description" content="Concorde ships skills, rules, and a root AGENTS.md so Cursor, JetBrains AI Assistant, and other coding agents follow framework patterns (DataProvider, decorators, short imports, scope, theme, migratio">
|
|
8
|
+
<meta name="keywords" content="Concorde, supersoniks, docs/getting-started/ai-agents, ai-agents, AI agents (skills & AGENTS.md), guide, AGENTS.md, yarn ai:sync, ai-init, yarn add @supersoniks/concorde, |
|
|
9
|
+
| Concorde repo (contributors) | , --skip-agents, --merge-agents, --force-agents">
|
|
10
|
+
<meta name="concorde-doc-id" content="docs/getting-started/ai-agents">
|
|
11
|
+
<link rel="canonical" href="https://concorde.supersoniks.org/docs/getting-started/ai-agents">
|
|
12
|
+
<link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/docs/getting-started/ai-agents.md">
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<header>
|
|
16
|
+
<p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/docs/getting-started/ai-agents">same URL (interactive)</a> · <a href="/llms.txt">llms.txt</a></p>
|
|
17
|
+
</header>
|
|
18
|
+
<main>
|
|
19
|
+
<article>
|
|
20
|
+
<p class="doc-lead" id="doc-summary"><strong>Concorde guide — AI agents (skills & AGENTS.md)</strong>. Concorde ships skills, rules, and a root AGENTS.md so Cursor, JetBrains AI Assistant, and other coding agents follow framework patterns (DataProvider, decorators, short imports, scope, theme, migratio <span>Doc ID: <code>docs/getting-started/ai-agents</code>. Keywords: Concorde, supersoniks, docs/getting-started/ai-agents, ai-agents, AI agents (skills & AGENTS.md), guide, AGENTS.md, yarn ai:sync, ai-init, yarn add @supersoniks/concorde, |
|
|
21
|
+
| Concorde repo (contributors) | , --skip-agents, --merge-agents, --force-agents. URL: <a href="https://concorde.supersoniks.org/docs/getting-started/ai-agents">https://concorde.supersoniks.org/docs/getting-started/ai-agents</a>.</span></p>
|
|
22
|
+
<h1 id="ai-agents-skills--agentsmd">AI agents (skills & AGENTS.md)</h1>
|
|
23
|
+
<p>Concorde ships <strong>skills</strong>, <strong>rules</strong>, and a root <strong><code>AGENTS.md</code></strong> so Cursor, JetBrains AI Assistant, and other coding agents follow framework patterns (DataProvider, decorators, short imports, scope, theme, migrations).</p>
|
|
24
|
+
<p>On a <a href="/docs/getting-started/installation">starter</a> project, run <code>yarn ai:sync</code> after install. On an existing project, install Concorde first, then use <code>ai-init</code> below.</p>
|
|
25
|
+
<h2 id="dedicated-commands">Dedicated commands</h2>
|
|
26
|
+
<table>
|
|
27
|
+
<thead>
|
|
28
|
+
<tr>
|
|
29
|
+
<th>Context</th>
|
|
30
|
+
<th>Command</th>
|
|
31
|
+
</tr>
|
|
32
|
+
</thead>
|
|
33
|
+
<tbody><tr>
|
|
34
|
+
<td><a href="https://www.npmjs.com/package/@supersoniks/create-concorde-ts-starter">create-concorde-ts-starter</a> project</td>
|
|
35
|
+
<td><code>yarn ai:sync</code></td>
|
|
36
|
+
</tr>
|
|
37
|
+
<tr>
|
|
38
|
+
<td>Any consumer app (after <code>yarn add @supersoniks/concorde</code>)</td>
|
|
39
|
+
<td><code>node node_modules/@supersoniks/concorde/scripts/ai-init.mjs</code></td>
|
|
40
|
+
</tr>
|
|
41
|
+
<tr>
|
|
42
|
+
<td>Concorde repo (contributors)</td>
|
|
43
|
+
<td><code>yarn ai-init</code></td>
|
|
44
|
+
</tr>
|
|
45
|
+
</tbody></table>
|
|
46
|
+
<pre><code class="language-shell"># Starter (from project root)
|
|
47
|
+
yarn ai:sync
|
|
48
|
+
|
|
49
|
+
# Manual / existing project
|
|
50
|
+
node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
|
|
51
|
+
</code></pre>
|
|
52
|
+
<h2 id="useful-flags">Useful flags</h2>
|
|
53
|
+
<table>
|
|
54
|
+
<thead>
|
|
55
|
+
<tr>
|
|
56
|
+
<th>Flag</th>
|
|
57
|
+
<th>Effect</th>
|
|
58
|
+
</tr>
|
|
59
|
+
</thead>
|
|
60
|
+
<tbody><tr>
|
|
61
|
+
<td><code>--skip-agents</code></td>
|
|
62
|
+
<td>Never write <code>AGENTS.md</code> (skills / rules only)</td>
|
|
63
|
+
</tr>
|
|
64
|
+
<tr>
|
|
65
|
+
<td><code>--merge-agents</code></td>
|
|
66
|
+
<td>Opt-in: keep the project preamble and append / refresh the Concorde block</td>
|
|
67
|
+
</tr>
|
|
68
|
+
<tr>
|
|
69
|
+
<td><code>--force-agents</code></td>
|
|
70
|
+
<td>Opt-in: <strong>replace</strong> the whole <code>AGENTS.md</code> (destructive)</td>
|
|
71
|
+
</tr>
|
|
72
|
+
<tr>
|
|
73
|
+
<td><code>--overlay <dir></code></td>
|
|
74
|
+
<td>Extra rules/skills + optional <code>AGENTS.concorde.md</code> for project-only Concorde agent notes</td>
|
|
75
|
+
</tr>
|
|
76
|
+
<tr>
|
|
77
|
+
<td><code>--cursor-only</code></td>
|
|
78
|
+
<td>Install only <code>.cursor/skills</code> and <code>.cursor/rules</code></td>
|
|
79
|
+
</tr>
|
|
80
|
+
<tr>
|
|
81
|
+
<td><code>--jetbrains-only</code></td>
|
|
82
|
+
<td>Install only <code>.aiassistant/rules/</code></td>
|
|
83
|
+
</tr>
|
|
84
|
+
</tbody></table>
|
|
85
|
+
<h2 id="agentsmd-policy-non-invasive"><code>AGENTS.md</code> policy (non-invasive)</h2>
|
|
86
|
+
<table>
|
|
87
|
+
<thead>
|
|
88
|
+
<tr>
|
|
89
|
+
<th>Situation</th>
|
|
90
|
+
<th>Default</th>
|
|
91
|
+
</tr>
|
|
92
|
+
</thead>
|
|
93
|
+
<tbody><tr>
|
|
94
|
+
<td>No <code>AGENTS.md</code></td>
|
|
95
|
+
<td>Create the Concorde guide</td>
|
|
96
|
+
</tr>
|
|
97
|
+
<tr>
|
|
98
|
+
<td>File with <code><!-- concorde-ai --></code></td>
|
|
99
|
+
<td>Refresh the managed zone only</td>
|
|
100
|
+
</tr>
|
|
101
|
+
<tr>
|
|
102
|
+
<td>File <strong>without</strong> marker (project notes)</td>
|
|
103
|
+
<td><strong>Left untouched</strong> — skills / rules are enough</td>
|
|
104
|
+
</tr>
|
|
105
|
+
<tr>
|
|
106
|
+
<td><code>--merge-agents</code> / <code>--force-agents</code> / <code>--skip-agents</code></td>
|
|
107
|
+
<td>See flags above</td>
|
|
108
|
+
</tr>
|
|
109
|
+
</tbody></table>
|
|
110
|
+
<pre><code class="language-text">[optional project preamble — short, project-only]
|
|
111
|
+
<!-- concorde-ai -->
|
|
112
|
+
<package ai/AGENTS.md>
|
|
113
|
+
[--- + overlay AGENTS.concorde.md]
|
|
114
|
+
</code></pre>
|
|
115
|
+
<p>Everything <strong>after</strong> <code><!-- concorde-ai --></code> is replaced on each <code>ai-init</code> run (idempotent). Do not paste a full copy of the Concorde guide above the marker — put project-specific notes in <code>AGENTS.concorde.md</code> (overlay). If the preamble duplicates package <code>AGENTS.md</code>, <code>ai-init</code> slims or drops it and prints a warning. Legacy filenames <code>AGENTS.overlay.md</code> / <code>AGENTS.starter.md</code> are still accepted with a deprecation warning.</p>
|
|
116
|
+
<h2 id="what-gets-installed">What gets installed</h2>
|
|
117
|
+
<table>
|
|
118
|
+
<thead>
|
|
119
|
+
<tr>
|
|
120
|
+
<th>Path</th>
|
|
121
|
+
<th>Role</th>
|
|
122
|
+
</tr>
|
|
123
|
+
</thead>
|
|
124
|
+
<tbody><tr>
|
|
125
|
+
<td><code>AGENTS.md</code></td>
|
|
126
|
+
<td>Created only if missing; existing project-owned files are left alone unless <code>--merge-agents</code> / <code>--force-agents</code></td>
|
|
127
|
+
</tr>
|
|
128
|
+
<tr>
|
|
129
|
+
<td><code>.cursor/skills/concorde/</code></td>
|
|
130
|
+
<td>Core Lit + DataProvider patterns</td>
|
|
131
|
+
</tr>
|
|
132
|
+
<tr>
|
|
133
|
+
<td><code>.cursor/skills/concorde-imports/</code></td>
|
|
134
|
+
<td>Short <code>@supersoniks/concorde/…</code> import paths</td>
|
|
135
|
+
</tr>
|
|
136
|
+
<tr>
|
|
137
|
+
<td><code>.cursor/skills/concorde-scope/</code></td>
|
|
138
|
+
<td><code>serviceURL</code>, <code>formDataProvider</code>, API configuration</td>
|
|
139
|
+
</tr>
|
|
140
|
+
<tr>
|
|
141
|
+
<td><code>.cursor/skills/concorde-theme/</code></td>
|
|
142
|
+
<td><code>sonic-theme</code> and <code>--sc-*</code> tokens</td>
|
|
143
|
+
</tr>
|
|
144
|
+
<tr>
|
|
145
|
+
<td><code>.cursor/skills/concorde-menu/</code></td>
|
|
146
|
+
<td><code>sonic-menu</code> navigation</td>
|
|
147
|
+
</tr>
|
|
148
|
+
<tr>
|
|
149
|
+
<td><code>.cursor/skills/concorde-get-set-dp/</code></td>
|
|
150
|
+
<td><code>get</code> / <code>set</code> / <code>dp</code> and <code>DataProviderKey</code> migration</td>
|
|
151
|
+
</tr>
|
|
152
|
+
<tr>
|
|
153
|
+
<td><code>.cursor/rules/concorde.mdc</code></td>
|
|
154
|
+
<td>Cursor rules (always-on patterns)</td>
|
|
155
|
+
</tr>
|
|
156
|
+
<tr>
|
|
157
|
+
<td><code>.aiassistant/rules/concorde.md</code></td>
|
|
158
|
+
<td>JetBrains AI Assistant rules</td>
|
|
159
|
+
</tr>
|
|
160
|
+
</tbody></table>
|
|
161
|
+
<h2 id="workflow">Workflow</h2>
|
|
162
|
+
<ol>
|
|
163
|
+
<li><strong>Starter project:</strong> <a href="/docs/getting-started/installation">Installation</a> — <code>yarn ai:sync</code> is wired in the kit.</li>
|
|
164
|
+
<li><strong>Existing project:</strong> run <strong><code>ai-init</code></strong> after <code>yarn add @supersoniks/concorde</code>.</li>
|
|
165
|
+
<li>Commit <code>.cursor/</code> and <code>.aiassistant/</code> (and <code>AGENTS.md</code> only if you opted in / it was created) if your team shares agent settings.</li>
|
|
166
|
+
<li>Re-run the same command when you bump <code>@supersoniks/concorde</code> to refresh skills from <code>node_modules/@supersoniks/concorde/ai/</code>.</li>
|
|
167
|
+
<li>In Cursor, skills under <code>.cursor/skills/</code> are picked up automatically; mention a skill in chat for focused tasks (e.g. migration → <code>concorde-get-set-dp</code>).</li>
|
|
168
|
+
</ol>
|
|
169
|
+
<p>Source files in the npm package: <code>node_modules/@supersoniks/concorde/ai/</code> (see also <code>ai/README.md</code> in the <a href="https://github.com/supersoniks/concorde">Concorde repository</a>).</p>
|
|
170
|
+
|
|
171
|
+
</article>
|
|
172
|
+
</main>
|
|
173
|
+
</body>
|
|
174
|
+
</html>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Concorde ships **skills**, **rules**, and a root **`AGENTS.md`** so Cursor, JetBrains AI Assistant, and other coding agents follow framework patterns (DataProvider, decorators, short imports, scope, theme, migrations).
|
|
4
4
|
|
|
5
|
-
On a [starter](
|
|
5
|
+
On a [starter](/docs/getting-started/installation) project, run `yarn ai:sync` after install. On an existing project, install Concorde first, then use `ai-init` below.
|
|
6
6
|
|
|
7
7
|
## Dedicated commands
|
|
8
8
|
|
|
@@ -67,8 +67,8 @@ Everything **after** `<!-- concorde-ai -->` is replaced on each `ai-init` run (i
|
|
|
67
67
|
|
|
68
68
|
## Workflow
|
|
69
69
|
|
|
70
|
-
1. **Starter project:** [Installation](
|
|
71
|
-
2. **Existing
|
|
70
|
+
1. **Starter project:** [Installation](/docs/getting-started/installation) — `yarn ai:sync` is wired in the kit.
|
|
71
|
+
2. **Existing project:** run **`ai-init`** after `yarn add @supersoniks/concorde`.
|
|
72
72
|
3. Commit `.cursor/` and `.aiassistant/` (and `AGENTS.md` only if you opted in / it was created) if your team shares agent settings.
|
|
73
73
|
4. Re-run the same command when you bump `@supersoniks/concorde` to refresh skills from `node_modules/@supersoniks/concorde/ai/`.
|
|
74
74
|
5. In Cursor, skills under `.cursor/skills/` are picked up automatically; mention a skill in chat for focused tasks (e.g. migration → `concorde-get-set-dp`).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-doc-url="https://concorde.supersoniks.org/docs/getting-started/components" data-doc-id="docs/getting-started/components">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Components — Concorde by Supersoniks</title>
|
|
7
|
+
<meta name="description" content="Every Concorde web component, grouped like the sidebar. Pick one to see its live demos, attributes and import path.">
|
|
8
|
+
<meta name="keywords" content="Concorde, supersoniks, docs/getting-started/components, components, Components, guide">
|
|
9
|
+
<meta name="concorde-doc-id" content="docs/getting-started/components">
|
|
10
|
+
<link rel="canonical" href="https://concorde.supersoniks.org/docs/getting-started/components">
|
|
11
|
+
<link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/docs/getting-started/components.md">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<header>
|
|
15
|
+
<p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/docs/getting-started/components">same URL (interactive)</a> · <a href="/llms.txt">llms.txt</a></p>
|
|
16
|
+
</header>
|
|
17
|
+
<main>
|
|
18
|
+
<article>
|
|
19
|
+
<p class="doc-lead" id="doc-summary"><strong>Concorde guide — Components</strong>. Every Concorde web component, grouped like the sidebar. Pick one to see its live demos, attributes and import path. <span>Doc ID: <code>docs/getting-started/components</code>. Keywords: Concorde, supersoniks, docs/getting-started/components, components, Components, guide. URL: <a href="https://concorde.supersoniks.org/docs/getting-started/components">https://concorde.supersoniks.org/docs/getting-started/components</a>.</span></p>
|
|
20
|
+
<h1 id="components">Components</h1>
|
|
21
|
+
<p>Every Concorde web component, grouped like the sidebar. Pick one to see its live demos, attributes and import path.</p>
|
|
22
|
+
<p><docs-components-index></docs-components-index></p>
|
|
23
|
+
|
|
24
|
+
</article>
|
|
25
|
+
</main>
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-doc-url="https://concorde.supersoniks.org/docs/getting-started/create-a-component" data-doc-id="docs/getting-started/create-a-component">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Creating components — Concorde by Supersoniks</title>
|
|
7
|
+
<meta name="description" content="> New app components: start with My first component and Data flow. The Subscriber mixin below is legacy.">
|
|
8
|
+
<meta name="keywords" content="Concorde, supersoniks, docs/getting-started/create-a-component, create-a-component, Creating components, guide, Subscriber, core, /components/destination/, /components/atoms, example.ts, ${this.text}">
|
|
9
|
+
<meta name="concorde-doc-id" content="docs/getting-started/create-a-component">
|
|
10
|
+
<link rel="canonical" href="https://concorde.supersoniks.org/docs/getting-started/create-a-component">
|
|
11
|
+
<link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/docs/getting-started/create-a-component.md">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<header>
|
|
15
|
+
<p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/docs/getting-started/create-a-component">same URL (interactive)</a> · <a href="/llms.txt">llms.txt</a></p>
|
|
16
|
+
</header>
|
|
17
|
+
<main>
|
|
18
|
+
<article>
|
|
19
|
+
<p class="doc-lead" id="doc-summary"><strong>Concorde guide — Creating components</strong>. > New app components: start with My first component and Data flow. The Subscriber mixin below is legacy. <span>Doc ID: <code>docs/getting-started/create-a-component</code>. Keywords: Concorde, supersoniks, docs/getting-started/create-a-component, create-a-component, Creating components, guide, Subscriber, core, /components/destination/, /components/atoms, example.ts, ${this.text}. URL: <a href="https://concorde.supersoniks.org/docs/getting-started/create-a-component">https://concorde.supersoniks.org/docs/getting-started/create-a-component</a>.</span></p>
|
|
20
|
+
<h1 id="creating-components">Creating components</h1>
|
|
21
|
+
<blockquote>
|
|
22
|
+
<p><strong>New app components:</strong> start with <a href="/docs/getting-started/my-first-component">My first component</a> and <a href="/docs/getting-started/dataFlow">Data flow</a>. The <code>Subscriber</code> mixin below is legacy.</p>
|
|
23
|
+
</blockquote>
|
|
24
|
+
<h2 id="where-to-put-it">Where to put it?</h2>
|
|
25
|
+
<p>In this document, we consider the src directory of the project as the root.<br>
|
|
26
|
+
We describe how we organize our components as an example, however it depends on your project.</p>
|
|
27
|
+
<p>In concorde each component is currently organized in the following directory structure (at least we try):</p>
|
|
28
|
+
<ul>
|
|
29
|
+
<li><strong>/core/components/functional/component-name/component-name.ts</strong><br>Generic/functional/generally unstyled component.
|
|
30
|
+
The component usually doesn't use any other concrete components.</li>
|
|
31
|
+
<li><strong>/core/components/ui/component-name/component-name.ts</strong><br>Generic but UI-oriented component.
|
|
32
|
+
The component usually only uses generic components and other UI components.</li>
|
|
33
|
+
<li><strong>la-billetterie/components/atoms/component-name/component-name.ts</strong><br>The component is intended to have a concrete usage within our ticketing system <strong>"la-billetterie"</strong>.
|
|
34
|
+
It usually only uses generic components from <code>core</code> and possibly other atoms.</li>
|
|
35
|
+
<li><strong>la-billetterie/components/concrete-destination/component-name/component-name.ts</strong><br>The component has a specific destination: (event / cart / gift card): <code>/components/destination/</code>
|
|
36
|
+
The component uses various components, usually from the <code>/components/atoms</code> directory.
|
|
37
|
+
It does not use components at the same level in the file hierarchy.</li>
|
|
38
|
+
</ul>
|
|
39
|
+
<h2 id="starting-from-a-simple-model">Starting from a Simple Model</h2>
|
|
40
|
+
<p>You can copy <code>example.ts</code> from the source to the desired destination to start with.
|
|
41
|
+
This file contains a web component in the form of a class that extends the <code>Subscriber</code> mixin, with a reactive property and a render function.</p>
|
|
42
|
+
<pre><code class="language-javascript">import { html, LitElement } from "lit";
|
|
43
|
+
import { customElement, property } from "lit/decorators.js";
|
|
44
|
+
import Subscriber from "@supersoniks/concorde/core/mixins/Subscriber";
|
|
45
|
+
|
|
46
|
+
@customElement("sonic-example")
|
|
47
|
+
export class SonicComponent extends Subscriber(LitElement) {
|
|
48
|
+
@property() text = "Example";
|
|
49
|
+
render() {
|
|
50
|
+
return html`${this.text}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
</code></pre>
|
|
54
|
+
<p><strong>You can remove the dependency on <code>Subscriber</code></strong> if automatic population of the component with external data is not required.
|
|
55
|
+
For example, for a UI component:</p>
|
|
56
|
+
<pre><code class="language-javascript">import { html, LitElement } from "lit";
|
|
57
|
+
import { customElement, property } from "lit/decorators.js";
|
|
58
|
+
|
|
59
|
+
@customElement("sonic-example")
|
|
60
|
+
export class SonicComponent extends LitElement {
|
|
61
|
+
@property() text = "Example";
|
|
62
|
+
render() {
|
|
63
|
+
return html`${this.text}`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
</code></pre>
|
|
67
|
+
<p>Regarding data sharing, see <a href="/docs/getting-started/dataFlow">Data flow</a>.</p>
|
|
68
|
+
<h3 id="naming-the-component">Naming the Component</h3>
|
|
69
|
+
<p>The class name is not necessarily important. However, it is important to <strong>give it a component name prefixed with "sonic"</strong> (or a prefix of your own) using the dedicated metadata already present in the copied document. For example, a button component would be named as follows:</p>
|
|
70
|
+
<pre><code class="language-typescript">@customElement("sonic-button")
|
|
71
|
+
</code></pre>
|
|
72
|
+
<p>For less generic components with a specific destination, we advise to include the destination in the name.
|
|
73
|
+
For example, for a "title" component in the "event" destination, the name would be simply:</p>
|
|
74
|
+
<pre><code class="language-typescript">@customElement("sonic-event-title")
|
|
75
|
+
</code></pre>
|
|
76
|
+
<h2 id="modifying-it">Modifying It</h2>
|
|
77
|
+
<h4 id="creating-reactive-properties-and-modifying-the-render-function">Creating Reactive Properties and Modifying the Render Function</h4>
|
|
78
|
+
<p>To do this, study the functioning of <a href="https://lit.dev">https://lit.dev</a> and also refer to <a href="/docs/getting-started/dataFlow">Data flow</a>.</p>
|
|
79
|
+
<h4 id="html-structure-of-a-component">HTML Structure of a Component</h4>
|
|
80
|
+
<p>The HTML structure of a component should remain as simple as possible.</p>
|
|
81
|
+
<p>Ideally, there should be only one additional level of elements in addition to slots.</p>
|
|
82
|
+
<ul>
|
|
83
|
+
<li><strong>The main component is already a wrapper</strong>.
|
|
84
|
+
It receives classes to manage its layout, but it should not style internal elements.</li>
|
|
85
|
+
<li><strong>Slots handle the visual organization</strong> of elements.</li>
|
|
86
|
+
<li><strong>The specificity of the component is expressed in this additional level</strong> by adding a list, a functional native element (e.g., button), or another component.</li>
|
|
87
|
+
</ul>
|
|
88
|
+
<p>This leads to the creation of more components and thus raises questions about the hierarchical organization of files. However, this tends to atomize their roles.</p>
|
|
89
|
+
<h2 id="referencing-it">Referencing It</h2>
|
|
90
|
+
<p>To compile the component, it needs to be referenced somewhere through an import statement. In particular, it is important to reference it in any component that uses it.</p>
|
|
91
|
+
<p>In the case where it can be directly used in a page, it should also be globally referenced, especially considering the creation of <strong>specific bundles</strong> in the future.</p>
|
|
92
|
+
<p>Here's where we add imports based on the component's location inside concorde as an example</p>
|
|
93
|
+
<ul>
|
|
94
|
+
<li><strong>/core/components/functional/component-name/component-name.ts</strong><br>In <code>/core/components/functional/functional.ts</code>, which is referenced in core.ts and imported in <code>index.ts</code>.</li>
|
|
95
|
+
<li><strong>/core/components/ui/component-name/component-name.ts</strong><br>In <code>/core/components/ui/ui.ts</code>, which is referenced in core.ts and imported in <code>index.ts</code>.</li>
|
|
96
|
+
<li><strong>la-billetterie/components/atoms/component-name/component-name.ts</strong><br>Nowhere else but where it will be used, except for possible <strong>temporary</strong> tests, for example, in <code>index.ts</code>.</li>
|
|
97
|
+
<li><strong>la-billetterie/components/concrete-destination/component-name/component-name.ts</strong><br>In <code>la-billetterie/components/concrete-destination/destination-concrete.ts</code>.
|
|
98
|
+
If it's a new destination, you'll need to create the corresponding import .ts file and import it in <code>la-billetterie.ts</code>.</li>
|
|
99
|
+
</ul>
|
|
100
|
+
<h2 id="using-it">Using It</h2>
|
|
101
|
+
<p>As a reminder, the component is simply integrated into the context by adding a tag with the component's name, for example:</p>
|
|
102
|
+
<pre><code class="language-html"><sonic-event-title></sonic-event-title>
|
|
103
|
+
</code></pre>
|
|
104
|
+
|
|
105
|
+
</article>
|
|
106
|
+
</main>
|
|
107
|
+
</body>
|
|
108
|
+
</html>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Creating components
|
|
2
2
|
|
|
3
|
-
> **New app components:** start with [My first component](
|
|
3
|
+
> **New app components:** start with [My first component](/docs/getting-started/my-first-component) and [Data flow](/docs/getting-started/dataFlow). The `Subscriber` mixin below is legacy.
|
|
4
4
|
|
|
5
5
|
## Where to put it?
|
|
6
6
|
|
|
@@ -63,10 +63,7 @@ export class SonicComponent extends LitElement {
|
|
|
63
63
|
</template>
|
|
64
64
|
</sonic-code>
|
|
65
65
|
|
|
66
|
-
Regarding
|
|
67
|
-
|
|
68
|
-
- [🔔 Subscriber](#docs/_core-concept/subscriber.md/subscriber)
|
|
69
|
-
- [🥨 Sharing Data](#docs/_getting-started/pubsub.md/pubsub)
|
|
66
|
+
Regarding data sharing, see [Data flow](/docs/getting-started/dataFlow).
|
|
70
67
|
|
|
71
68
|
### Naming the Component
|
|
72
69
|
|
|
@@ -94,7 +91,7 @@ For example, for a "title" component in the "event" destination, the name would
|
|
|
94
91
|
|
|
95
92
|
#### Creating Reactive Properties and Modifying the Render Function
|
|
96
93
|
|
|
97
|
-
To do this, study the functioning of https://lit.dev and also refer to [
|
|
94
|
+
To do this, study the functioning of https://lit.dev and also refer to [Data flow](/docs/getting-started/dataFlow).
|
|
98
95
|
|
|
99
96
|
#### HTML Structure of a Component
|
|
100
97
|
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-doc-url="https://concorde.supersoniks.org/docs/getting-started/dataFlow" data-doc-id="docs/getting-started/dataFlow">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Data flow — Concorde by Supersoniks</title>
|
|
7
|
+
<meta name="description" content="Recommended patterns for new Concorde apps (Lit + TypeScript). Under the hood, data lives in a DataProvider store.">
|
|
8
|
+
<meta name="keywords" content="Concorde, supersoniks, docs/getting-started/dataFlow, dataFlow, Data flow, guide, DataProvider, get, set, dp, DataProviderKey, sub(key), @subscribe, @state, @ancestorAttribute">
|
|
9
|
+
<meta name="concorde-doc-id" content="docs/getting-started/dataFlow">
|
|
10
|
+
<link rel="canonical" href="https://concorde.supersoniks.org/docs/getting-started/dataFlow">
|
|
11
|
+
<link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/docs/getting-started/dataFlow.md">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<header>
|
|
15
|
+
<p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/docs/getting-started/dataFlow">same URL (interactive)</a> · <a href="/llms.txt">llms.txt</a></p>
|
|
16
|
+
</header>
|
|
17
|
+
<main>
|
|
18
|
+
<article>
|
|
19
|
+
<p class="doc-lead" id="doc-summary"><strong>Concorde guide — Data flow</strong>. Recommended patterns for new Concorde apps (Lit + TypeScript). Under the hood, data lives in a DataProvider store. <span>Doc ID: <code>docs/getting-started/dataFlow</code>. Keywords: Concorde, supersoniks, docs/getting-started/dataFlow, dataFlow, Data flow, guide, DataProvider, get, set, dp, DataProviderKey, sub(key), @subscribe, @state, @ancestorAttribute. URL: <a href="https://concorde.supersoniks.org/docs/getting-started/dataFlow">https://concorde.supersoniks.org/docs/getting-started/dataFlow</a>.</span></p>
|
|
20
|
+
<h1 id="data-flow">Data flow</h1>
|
|
21
|
+
<p>Recommended patterns for new Concorde apps (Lit + TypeScript). Under the hood, data lives in a <strong>DataProvider</strong> store.</p>
|
|
22
|
+
<h2 id="quick-map">Quick map</h2>
|
|
23
|
+
<table>
|
|
24
|
+
<thead>
|
|
25
|
+
<tr>
|
|
26
|
+
<th>Need</th>
|
|
27
|
+
<th>Use</th>
|
|
28
|
+
</tr>
|
|
29
|
+
</thead>
|
|
30
|
+
<tbody><tr>
|
|
31
|
+
<td>Read/write in code</td>
|
|
32
|
+
<td><code>get</code> / <code>set</code> / <code>dp</code> + <code>DataProviderKey</code> (static paths only)</td>
|
|
33
|
+
</tr>
|
|
34
|
+
<tr>
|
|
35
|
+
<td>Reactive Lit template</td>
|
|
36
|
+
<td><code>sub(key)</code> or <code>@subscribe</code></td>
|
|
37
|
+
</tr>
|
|
38
|
+
<tr>
|
|
39
|
+
<td>Read component state from store</td>
|
|
40
|
+
<td><code>@subscribe</code> + <code>DataProviderKey<T, U></code> + <code>@state</code></td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<td>Inherit ancestor attributes</td>
|
|
44
|
+
<td><code>@ancestorAttribute</code></td>
|
|
45
|
+
</tr>
|
|
46
|
+
<tr>
|
|
47
|
+
<td>Write from component state</td>
|
|
48
|
+
<td><code>@publish</code></td>
|
|
49
|
+
</tr>
|
|
50
|
+
<tr>
|
|
51
|
+
<td>React to assignments</td>
|
|
52
|
+
<td><code>@handle</code></td>
|
|
53
|
+
</tr>
|
|
54
|
+
<tr>
|
|
55
|
+
<td>HTTP GET</td>
|
|
56
|
+
<td><code>@get</code> + <code>Endpoint</code>, or <code>sonic-list</code> / <code>sonic-queue</code> with <code>fetch</code></td>
|
|
57
|
+
</tr>
|
|
58
|
+
<tr>
|
|
59
|
+
<td>HTTP POST (body from store)</td>
|
|
60
|
+
<td><code>@post</code> + <code>Endpoint</code> + body <code>DataProviderKey</code></td>
|
|
61
|
+
</tr>
|
|
62
|
+
<tr>
|
|
63
|
+
<td>HTTP PUT / PATCH (body from store)</td>
|
|
64
|
+
<td><code>@put</code> / <code>@patch</code> — same model as <code>@post</code></td>
|
|
65
|
+
</tr>
|
|
66
|
+
<tr>
|
|
67
|
+
<td>Forms</td>
|
|
68
|
+
<td><code>formDataProvider</code> + <code>name</code> on fields (no Subscriber on form elements)</td>
|
|
69
|
+
</tr>
|
|
70
|
+
<tr>
|
|
71
|
+
<td>Derived / aggregate (JSONata)</td>
|
|
72
|
+
<td><code>derive()</code> or <code>sonic-jsonata</code> — <a href="/core/components/functional/jsonata">Jsonata</a></td>
|
|
73
|
+
</tr>
|
|
74
|
+
<tr>
|
|
75
|
+
<td>Offline doc demos</td>
|
|
76
|
+
<td><code>serviceURL="/docs-mock-api"</code> — <a href="/docs/misc/docs-mock-api">Local API demos</a></td>
|
|
77
|
+
</tr>
|
|
78
|
+
</tbody></table>
|
|
79
|
+
<p>Skill: <code>concorde-get-set-dp</code> in the package <code>ai/</code> folder.</p>
|
|
80
|
+
<h2 id="dataproviderkey">DataProviderKey</h2>
|
|
81
|
+
<pre><code class="language-typescript">import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
|
|
82
|
+
import { dp, get, set } from "@supersoniks/concorde/utils";
|
|
83
|
+
|
|
84
|
+
const cartKey = new DataProviderKey&lt;{ items: string[] }&gt;("cart");
|
|
85
|
+
|
|
86
|
+
set(cartKey, { items: [] });
|
|
87
|
+
dp(cartKey.items).set(["a", "b"]);
|
|
88
|
+
get(cartKey);
|
|
89
|
+
</code></pre>
|
|
90
|
+
<p>Dynamic paths (<code>users.${userId}</code>) → decorators or <code>sub()</code> — not <code>get("users.${id}")</code> in imperative code. Resolution rules: <a href="/docs/misc/dynamic-path">Dynamic path placeholders</a>.</p>
|
|
91
|
+
<p><a href="/docs/misc/dataProviderKey">DataProviderKey</a></p>
|
|
92
|
+
<h2 id="decorators">Decorators</h2>
|
|
93
|
+
<table>
|
|
94
|
+
<thead>
|
|
95
|
+
<tr>
|
|
96
|
+
<th>Decorator</th>
|
|
97
|
+
<th>Role</th>
|
|
98
|
+
</tr>
|
|
99
|
+
</thead>
|
|
100
|
+
<tbody><tr>
|
|
101
|
+
<td><code>@subscribe</code></td>
|
|
102
|
+
<td>Read-only property from store — <a href="/docs/getting-started/my-first-component">data configuration</a> (type + key + scope)</td>
|
|
103
|
+
</tr>
|
|
104
|
+
<tr>
|
|
105
|
+
<td><code>@publish</code></td>
|
|
106
|
+
<td>Push property writes to store</td>
|
|
107
|
+
</tr>
|
|
108
|
+
<tr>
|
|
109
|
+
<td><code>@handle</code></td>
|
|
110
|
+
<td>Method called on assignment</td>
|
|
111
|
+
</tr>
|
|
112
|
+
<tr>
|
|
113
|
+
<td><code>@ancestorAttribute</code></td>
|
|
114
|
+
<td>Copy ancestor HTML attribute onto property</td>
|
|
115
|
+
</tr>
|
|
116
|
+
<tr>
|
|
117
|
+
<td><code>@get</code></td>
|
|
118
|
+
<td>HTTP GET into <code>ApiResult&lt;T&gt;</code></td>
|
|
119
|
+
</tr>
|
|
120
|
+
<tr>
|
|
121
|
+
<td><code>@post</code></td>
|
|
122
|
+
<td>HTTP POST into <code>ApiResult&lt;T&gt;</code> (body from a publisher)</td>
|
|
123
|
+
</tr>
|
|
124
|
+
<tr>
|
|
125
|
+
<td><code>@put</code> / <code>@patch</code></td>
|
|
126
|
+
<td>HTTP PUT / PATCH into <code>ApiResult&lt;T&gt;</code></td>
|
|
127
|
+
</tr>
|
|
128
|
+
</tbody></table>
|
|
129
|
+
<p>Walkthrough: <a href="/docs/getting-started/my-first-component">My first component</a></p>
|
|
130
|
+
<h2 id="http-and-lists">HTTP and lists</h2>
|
|
131
|
+
<ul>
|
|
132
|
+
<li><a href="/docs/decorators/get">@get</a> — single GET on a component</li>
|
|
133
|
+
<li><a href="/docs/decorators/post">@post</a> — POST with body read from a <code>DataProviderKey</code></li>
|
|
134
|
+
<li><a href="/docs/decorators/put">@put</a> · <a href="/docs/decorators/patch">@patch</a> — PUT / PATCH (same options as <code>@post</code>)</li>
|
|
135
|
+
<li><a href="/core/components/functional/list">List</a> — <code>fetch</code> + <code>key="data"</code> + <code>/docs-mock-api/api/users</code></li>
|
|
136
|
+
<li><a href="/core/components/functional/queue">Queue</a> — lazy <code>offset=$offset&per_page=$limit</code> + optional <code>dataFilterProvider</code> (form → query)</li>
|
|
137
|
+
</ul>
|
|
138
|
+
<h2 id="starter-kit">Starter kit</h2>
|
|
139
|
+
<pre><code class="language-bash">npx @supersoniks/create-concorde-ts-starter my-app
|
|
140
|
+
</code></pre>
|
|
141
|
+
<p>Interactive routes mirror these patterns (<code>/concepts/*</code>, <code>/demo/*</code>).</p>
|
|
142
|
+
<h2 id="derived-data-derive--sonic-jsonata">Derived data (<code>derive</code> / <code>sonic-jsonata</code>)</h2>
|
|
143
|
+
<p>Use when you need <strong>client-side aggregations</strong> (groupby, top N, chart shapes) from existing DataProviders — without inline app JS in SDUI.</p>
|
|
144
|
+
<ul>
|
|
145
|
+
<li>Primitive: <code>derive({ inputs, compute, output, variables? })</code> from <code>@supersoniks/concorde/utils</code> (read-only output, debounce, generation, cycle detection, <code>{output}/_state_</code>).</li>
|
|
146
|
+
<li>SDUI adapter: <a href="/core/components/functional/jsonata"><code>sonic-jsonata</code></a> (<code>inputProvider</code> → <code>expression</code> → <code>outputProvider</code>, optional <code>formDataProvider</code>).</li>
|
|
147
|
+
<li>vs <a href="/core/components/functional/mix"><code>sonic-mix</code></a>: mix composes bidirectionally; jsonata <strong>computes</strong> unidirectionally.</li>
|
|
148
|
+
</ul>
|
|
149
|
+
<h2 id="legacy-integration">Legacy integration</h2>
|
|
150
|
+
<table>
|
|
151
|
+
<thead>
|
|
152
|
+
<tr>
|
|
153
|
+
<th>Topic</th>
|
|
154
|
+
<th>Page</th>
|
|
155
|
+
</tr>
|
|
156
|
+
</thead>
|
|
157
|
+
<tbody><tr>
|
|
158
|
+
<td><code>data-bind</code> HTML (plain HTML hosts)</td>
|
|
159
|
+
<td><a href="/docs/misc/html-integration">HTML integration</a> — doc demos use Lit in <code>src/docs/example/</code></td>
|
|
160
|
+
</tr>
|
|
161
|
+
<tr>
|
|
162
|
+
<td><code>@onAssign</code></td>
|
|
163
|
+
<td><a href="/docs/decorators/on-assign">@onAssign</a> (prefer <code>@handle</code>)</td>
|
|
164
|
+
</tr>
|
|
165
|
+
<tr>
|
|
166
|
+
<td><code>sonic-fetch</code> alone</td>
|
|
167
|
+
<td><a href="/core/components/functional/fetch">Fetch</a></td>
|
|
168
|
+
</tr>
|
|
169
|
+
</tbody></table>
|
|
170
|
+
|
|
171
|
+
</article>
|
|
172
|
+
</main>
|
|
173
|
+
</body>
|
|
174
|
+
</html>
|