@supersoniks/concorde 5.1.0 → 5.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/.claude/launch.json +15 -0
- package/.claude/vite.http.config.mjs +7 -0
- package/.taste-skill/after/desktop-fold.jpg +0 -0
- package/.taste-skill/after/desktop-page-01.jpg +0 -0
- package/.taste-skill/after/desktop-page-02.jpg +0 -0
- package/.taste-skill/after/desktop-page-03.jpg +0 -0
- package/.taste-skill/after/mobile-fold.jpg +0 -0
- package/.taste-skill/after/mobile-page-01.jpg +0 -0
- package/.taste-skill/after/report.json +4103 -0
- package/.taste-skill/after/tablet-fold.jpg +0 -0
- package/.taste-skill/after/tablet-page-01.jpg +0 -0
- package/.taste-skill/after/tablet-page-02.jpg +0 -0
- package/.taste-skill/before/desktop-fold.jpg +0 -0
- package/.taste-skill/before/desktop-page-01.jpg +0 -0
- package/.taste-skill/before/desktop-page-02.jpg +0 -0
- package/.taste-skill/before/mobile-fold.jpg +0 -0
- package/.taste-skill/before/mobile-page-01.jpg +0 -0
- package/.taste-skill/before/report.json +2556 -0
- package/.taste-skill/before/tablet-fold.jpg +0 -0
- package/.taste-skill/before/tablet-page-01.jpg +0 -0
- package/.taste-skill/direction.json +510 -0
- package/.taste-skill/notes.md +84 -0
- package/.taste-skill/prod/desktop-fold.jpg +0 -0
- package/.taste-skill/prod/desktop-page-01.jpg +0 -0
- package/.taste-skill/prod/desktop-page-02.jpg +0 -0
- package/.taste-skill/prod/desktop-page-03.jpg +0 -0
- package/.taste-skill/prod/mobile-fold.jpg +0 -0
- package/.taste-skill/prod/mobile-page-01.jpg +0 -0
- package/.taste-skill/prod/mobile-page-02.jpg +0 -0
- package/.taste-skill/prod/report.json +1973 -0
- package/.taste-skill/prod/tablet-fold.jpg +0 -0
- package/.taste-skill/prod/tablet-page-01.jpg +0 -0
- package/.taste-skill/prod/tablet-page-02.jpg +0 -0
- package/.tmp-cem/custom-elements.json +2013 -2013
- package/AUDIT.md +228 -0
- package/PLAN-AMELIORATION.md +220 -0
- 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 +16 -16
- package/concorde-core.es.js +235 -233
- package/dist/concorde-core.bundle.js +16 -16
- package/dist/concorde-core.es.js +235 -233
- package/dist/img/archive/concorde-001-2cv.webp +0 -0
- package/dist/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
- package/dist/img/archive/concorde-red-arrows-2002.webm +0 -0
- package/dist/img/archive/credits.json +28 -0
- package/docs/.htaccess +75 -0
- package/docs/404.html +15 -0
- package/docs/404.md +5 -0
- package/docs/assets/index-BgG6FFPt.js +11765 -0
- 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/{crawl/core → core}/components/functional/subscriber/subscriber.html +6 -5
- 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/{crawl/core → core}/components/ui/menu/menu.html +189 -116
- 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/{crawl/docs/_getting-started → docs/getting-started}/ai-agents.html +12 -11
- 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/components.md +5 -0
- package/docs/{crawl/docs/_getting-started → docs/getting-started}/create-a-component.html +11 -14
- package/docs/{src/docs/_getting-started → docs/getting-started}/create-a-component.md +3 -6
- package/docs/{crawl/docs/_core-concept → docs/getting-started}/dataFlow.html +26 -29
- package/docs/{src/docs/_core-concept → 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/{crawl/docs/_getting-started → docs/getting-started}/my-first-component.html +13 -22
- package/docs/{src/docs/_getting-started → 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/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +2 -2
- package/docs/docs/index.html +99 -0
- package/docs/{crawl/docs/_misc → docs/misc}/api-configuration.html +18 -18
- package/docs/{src/docs/_misc → docs/misc}/api-configuration.md +10 -12
- package/docs/{crawl/docs/_misc → docs/misc}/dataProviderKey.html +12 -11
- package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
- package/docs/{crawl/docs/_misc → docs/misc}/docs-mock-api.html +25 -28
- package/docs/{src/docs/_misc → docs/misc}/docs-mock-api.md +12 -13
- package/docs/{crawl/docs/_misc → docs/misc}/dynamic-path.html +16 -15
- package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
- package/docs/{crawl/docs/_misc → docs/misc}/endpoint.html +16 -15
- package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
- package/docs/{crawl/docs/_misc → docs/misc}/html-integration.html +12 -15
- package/docs/{src/docs/_misc → docs/misc}/html-integration.md +4 -5
- package/docs/docs-mock-api-sw.js +60 -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 +96 -67
- package/docs/index.md +22 -0
- package/docs/llms-full.txt +3329 -3295
- package/docs/llms.txt +94 -92
- package/docs/robots.txt +11 -10
- package/docs/sitemap.xml +78 -78
- package/docs/src/core/components/functional/date/date.md +91 -231
- package/docs/src/core/components/functional/fetch/fetch.md +66 -83
- package/docs/src/core/components/functional/if/if.md +28 -3
- package/docs/src/core/components/functional/jsonata/jsonata.md +42 -37
- package/docs/src/core/components/functional/list/list.md +99 -43
- package/docs/src/core/components/functional/mix/mix.md +31 -26
- package/docs/src/core/components/functional/queue/queue.md +40 -61
- package/docs/src/core/components/functional/router/router.md +64 -65
- 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/example.json +19 -86
- package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
- package/docs/src/core/components/functional/sdui/sdui.md +196 -245
- package/docs/src/core/components/functional/states/states.md +86 -61
- package/docs/src/core/components/functional/submit/submit.md +64 -72
- package/docs/src/core/components/functional/translation/translation.md +38 -0
- package/docs/src/core/components/functional/value/value.md +34 -22
- package/docs/src/core/components/ui/alert/alert.md +139 -74
- package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
- package/docs/src/core/components/ui/badge/badge.md +137 -83
- package/docs/src/core/components/ui/button/button.md +139 -105
- package/docs/src/core/components/ui/captcha/captcha.md +50 -6
- package/docs/src/core/components/ui/card/card.md +183 -65
- package/docs/src/core/components/ui/divider/divider.md +104 -13
- package/docs/src/core/components/ui/form/checkbox/checkbox.md +90 -42
- package/docs/src/core/components/ui/form/fieldset/fieldset.md +135 -103
- package/docs/src/core/components/ui/form/form-actions/form-actions.md +71 -50
- package/docs/src/core/components/ui/form/form-layout/form-layout.md +99 -34
- package/docs/src/core/components/ui/form/input/input.md +95 -95
- package/docs/src/core/components/ui/form/radio/radio.md +55 -34
- package/docs/src/core/components/ui/form/select/select.md +60 -45
- package/docs/src/core/components/ui/form/switch/switch.md +57 -34
- package/docs/src/core/components/ui/form/textarea/textarea.md +55 -38
- package/docs/src/core/components/ui/group/group.md +49 -47
- package/docs/src/core/components/ui/icon/icon.md +132 -43
- package/docs/src/core/components/ui/image/image.md +132 -72
- package/docs/src/core/components/ui/link/link.md +46 -8
- package/docs/src/core/components/ui/loader/loader.md +55 -23
- package/docs/src/core/components/ui/menu/menu.md +155 -114
- package/docs/src/core/components/ui/modal/modal.md +154 -62
- package/docs/src/core/components/ui/pop/pop.md +185 -65
- package/docs/src/core/components/ui/progress/progress.md +76 -30
- package/docs/src/core/components/ui/table/table.md +146 -334
- package/docs/src/core/components/ui/theme/theme.md +97 -0
- package/docs/src/core/components/ui/toast/toast.md +80 -99
- package/docs/src/core/components/ui/tooltip/tooltip.md +52 -45
- 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 → getting-started}/ai-agents.md +3 -3
- package/docs/src/docs/getting-started/components.md +5 -0
- package/{src/docs/_getting-started → docs/src/docs/getting-started}/create-a-component.md +3 -6
- package/{src/docs/_core-concept → docs/src/docs/getting-started}/dataFlow.md +17 -18
- package/docs/src/docs/getting-started/installation.md +36 -0
- package/{src/docs/_getting-started → docs/src/docs/getting-started}/my-first-component.md +5 -14
- package/docs/src/docs/getting-started/start.md +35 -0
- package/docs/src/docs/getting-started/theming.md +253 -0
- package/{src/docs/_misc → docs/src/docs/misc}/api-configuration.md +10 -12
- package/docs/src/docs/{_misc → misc}/dataProviderKey.md +4 -4
- package/{src/docs/_misc → docs/src/docs/misc}/docs-mock-api.md +12 -13
- package/docs/src/docs/{_misc → misc}/dynamic-path.md +8 -8
- package/docs/src/docs/{_misc → misc}/endpoint.md +8 -8
- package/{src/docs/_misc → docs/src/docs/misc}/html-integration.md +4 -5
- package/docs/src/docs/search/docs-search.json +3729 -2949
- package/docs/src/tsconfig.json +176 -5
- package/index.html +94 -67
- package/package.json +11 -4
- package/public/docs-mock-api-sw.js +58 -223
- package/public/docs-mock-api-sw.js.map +4 -4
- package/public/img/archive/concorde-001-2cv.webp +0 -0
- package/public/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
- package/public/img/archive/concorde-red-arrows-2002.webm +0 -0
- package/public/img/archive/credits.json +28 -0
- 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/scripts/post-build.mjs +0 -0
- 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/if/if.ts +0 -0
- package/src/core/components/functional/jsonata/jsonata.md +42 -37
- package/src/core/components/functional/list/list.demo.ts +0 -0
- 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/router/router.ts +0 -0
- package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
- 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/sdui/types.ts +0 -0
- 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/subscriber/subscriber.ts +0 -0
- package/src/core/components/functional/translation/translation.md +38 -0
- package/src/core/components/functional/value/value.md +34 -22
- package/src/core/components/functional/value/value.ts +0 -0
- package/src/core/components/ui/_css/size.ts +0 -0
- 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/altchaStyles.ts +0 -0
- 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/modal/modal.ts +14 -11
- 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/mixins/Subscriber.ts +0 -0
- package/src/core/utils/DataBindObserver.ts +0 -0
- package/src/core/utils/LocationHandler.spec.ts +80 -0
- package/src/core/utils/LocationHandler.ts +5 -9
- package/src/core/utils/Objects.ts +0 -0
- package/src/core/utils/route.ts +0 -0
- package/src/docs/code.ts +88 -75
- package/src/docs/components/docs-demo-sources.ts +70 -147
- package/src/docs/components/docs-lit-demo.ts +20 -40
- 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 +6 -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-boarding-pass-demo.ts +134 -0
- 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 +33 -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/example/users.ts +0 -0
- 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 +240 -71
- package/src/docs/home/catalog.ts +44 -0
- package/src/docs/home/home.ts +520 -0
- package/src/docs/home/mach-stage.ts +389 -0
- package/src/docs/layout.ts +12 -11
- 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/components-index.ts +56 -0
- package/src/docs/navigation/navigation.ts +219 -232
- package/src/docs/navigation/pager.ts +67 -0
- package/src/docs/navigation/toc.ts +101 -0
- package/src/docs/search/docs-search.json +2419 -4374
- package/src/docs/search/markdown-renderer.ts +33 -7
- package/src/docs/search/page.ts +9 -6
- package/src/docs/search/search.ts +154 -122
- package/src/docs/shiki/index.ts +109 -0
- package/src/docs/tailwind/css/base/scrollbar.css +22 -0
- package/src/docs/tailwind/css/base/theme.css +96 -0
- package/src/docs/tailwind/css/base/typography.css +4 -0
- package/src/docs/tailwind/css/docs/boarding-pass.css +65 -0
- package/src/docs/tailwind/css/docs/content.css +32 -0
- package/src/docs/tailwind/css/docs/page.css +10 -0
- package/src/docs/tailwind/css/docs.css +9 -0
- package/src/docs/tailwind/css/home/hero.css +210 -0
- package/src/docs/tailwind/css/home/motion.css +84 -0
- package/src/docs/tailwind/css/home/sections.css +416 -0
- package/src/docs/tailwind/css/tailwind.css +7 -185
- package/src/tsconfig.json +23 -2
- package/src/tsconfig.tsbuildinfo +1 -1
- package/tailwind.config.js +8 -4
- package/vite.config.mts +11 -2
- package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
- package/.github/workflows/ci.yml +0 -21
- package/.github-export-ignore +0 -30
- package/CONTRIBUTING.md +0 -59
- package/DEV.md +0 -54
- package/LICENSE +0 -21
- package/OPEN_SOURCE_CHECKPOINT.md +0 -133
- package/concorde-3d.bundle.js +0 -3960
- package/concorde-3d.es.js +0 -33433
- package/concorde-hugging-face-infer.bundle.js +0 -32
- package/concorde-hugging-face-infer.es.js +0 -2952
- package/concorde-interactive.bundle.js +0 -1157
- package/concorde-interactive.es.js +0 -10734
- package/concorde-shader.bundle.js +0 -116
- package/concorde-shader.es.js +0 -8353
- package/concorde-webgpu.bundle.js +0 -307
- package/concorde-webgpu.es.js +0 -8627
- package/docs/assets/index-D8MVWqY6.js +0 -12251
- package/docs/assets/index-DiD0qYvE.css +0 -1
- package/docs/crawl/core/components/functional/date/date.html +0 -190
- package/docs/crawl/core/components/functional/fetch/fetch.html +0 -109
- package/docs/crawl/core/components/functional/if/if.html +0 -27
- package/docs/crawl/core/components/functional/jsonata/jsonata.html +0 -79
- package/docs/crawl/core/components/functional/list/list.html +0 -70
- package/docs/crawl/core/components/functional/mix/mix.html +0 -45
- package/docs/crawl/core/components/functional/queue/queue.html +0 -96
- package/docs/crawl/core/components/functional/router/router.html +0 -106
- package/docs/crawl/core/components/functional/sdui/sdui.html +0 -269
- package/docs/crawl/core/components/functional/states/states.html +0 -66
- package/docs/crawl/core/components/functional/submit/submit.html +0 -160
- package/docs/crawl/core/components/functional/value/value.html +0 -51
- package/docs/crawl/core/components/ui/alert/alert.html +0 -110
- package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +0 -23
- package/docs/crawl/core/components/ui/badge/badge.html +0 -119
- package/docs/crawl/core/components/ui/button/button.html +0 -149
- package/docs/crawl/core/components/ui/captcha/captcha.html +0 -30
- package/docs/crawl/core/components/ui/card/card.html +0 -99
- package/docs/crawl/core/components/ui/divider/divider.html +0 -58
- package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +0 -73
- package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +0 -135
- package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +0 -79
- package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +0 -62
- package/docs/crawl/core/components/ui/form/input/input.html +0 -109
- package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +0 -38
- package/docs/crawl/core/components/ui/form/radio/radio.html +0 -56
- package/docs/crawl/core/components/ui/form/select/select.html +0 -73
- package/docs/crawl/core/components/ui/form/switch/switch.html +0 -56
- package/docs/crawl/core/components/ui/form/textarea/textarea.html +0 -59
- package/docs/crawl/core/components/ui/group/group.html +0 -82
- package/docs/crawl/core/components/ui/icon/icon.html +0 -133
- package/docs/crawl/core/components/ui/image/image.html +0 -110
- package/docs/crawl/core/components/ui/link/link.html +0 -42
- package/docs/crawl/core/components/ui/loader/loader.html +0 -50
- package/docs/crawl/core/components/ui/modal/modal.html +0 -117
- package/docs/crawl/core/components/ui/pop/pop.html +0 -102
- package/docs/crawl/core/components/ui/progress/progress.html +0 -58
- package/docs/crawl/core/components/ui/table/table.html +0 -413
- package/docs/crawl/core/components/ui/toast/toast.html +0 -122
- package/docs/crawl/core/components/ui/tooltip/tooltip.html +0 -79
- package/docs/crawl/docs/_core-concept/overview.html +0 -66
- package/docs/crawl/docs/_core-concept/subscriber.html +0 -75
- package/docs/crawl/docs/_decorators/ancestor-attribute.html +0 -116
- package/docs/crawl/docs/_decorators/auto-subscribe.html +0 -202
- package/docs/crawl/docs/_decorators/bind.html +0 -141
- package/docs/crawl/docs/_decorators/get.html +0 -149
- package/docs/crawl/docs/_decorators/handle.html +0 -165
- package/docs/crawl/docs/_decorators/on-assign.html +0 -355
- package/docs/crawl/docs/_decorators/patch.html +0 -78
- package/docs/crawl/docs/_decorators/post.html +0 -139
- package/docs/crawl/docs/_decorators/publish.html +0 -61
- package/docs/crawl/docs/_decorators/put.html +0 -78
- package/docs/crawl/docs/_decorators/subscribe.html +0 -109
- package/docs/crawl/docs/_decorators/wait-for-ancestors.html +0 -137
- package/docs/crawl/docs/_directives/sub.html +0 -93
- package/docs/crawl/docs/_getting-started/concorde-manual-install.html +0 -100
- package/docs/crawl/docs/_getting-started/concorde-outside.html +0 -58
- package/docs/crawl/docs/_getting-started/my-first-subscriber.html +0 -110
- package/docs/crawl/docs/_getting-started/pubsub.html +0 -62
- package/docs/crawl/docs/_getting-started/start.html +0 -76
- package/docs/crawl/docs/_getting-started/theming.html +0 -85
- package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +0 -138
- package/docs/crawl/hubs/decorators.html +0 -547
- package/docs/crawl/hubs/form-components.html +0 -359
- package/docs/crawl/hubs/remote-data.html +0 -452
- package/docs/crawl/index.html +0 -101
- package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
- package/docs/src/docs/_core-concept/overview.md +0 -57
- package/docs/src/docs/_core-concept/subscriber.md +0 -75
- package/docs/src/docs/_decorators/ancestor-attribute.md +0 -127
- package/docs/src/docs/_decorators/auto-subscribe.md +0 -202
- package/docs/src/docs/_decorators/bind.md +0 -167
- package/docs/src/docs/_decorators/get.md +0 -162
- package/docs/src/docs/_decorators/handle.md +0 -175
- package/docs/src/docs/_decorators/on-assign.md +0 -390
- package/docs/src/docs/_decorators/patch.md +0 -70
- package/docs/src/docs/_decorators/post.md +0 -146
- package/docs/src/docs/_decorators/publish.md +0 -55
- package/docs/src/docs/_decorators/put.md +0 -70
- package/docs/src/docs/_decorators/subscribe.md +0 -100
- package/docs/src/docs/_decorators/wait-for-ancestors.md +0 -163
- package/docs/src/docs/_directives/sub.md +0 -91
- package/docs/src/docs/_getting-started/concorde-manual-install.md +0 -133
- package/docs/src/docs/_getting-started/concorde-outside.md +0 -33
- package/docs/src/docs/_getting-started/my-first-subscriber.md +0 -120
- package/docs/src/docs/_getting-started/pubsub.md +0 -37
- package/docs/src/docs/_getting-started/start.md +0 -47
- package/docs/src/docs/_getting-started/theming.md +0 -91
- package/docs/src/docs/_misc/formelement-subscriber-removal.md +0 -115
- package/docs/src/tsconfig.declarations.json +0 -22
- package/docs/src/tsconfig.emit.json +0 -23
- package/gitlab/job_github_mirror.sh +0 -39
- package/scripts/github-export.mjs +0 -150
- package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
- package/src/css.d.ts +0 -19
- 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/prism/index.ts +0 -6
- package/src/docs/prism/prism.css +0 -158
- package/src/docs/prism/prism.js +0 -1022
- package/src/tsconfig.declarations.json +0 -22
- package/src/tsconfig.emit.json +0 -23
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
# Legacy: My first subscriber component
|
|
2
|
-
|
|
3
|
-
> **New projects:** use [My first component](#docs/_getting-started/my-first-component.md/my-first-component) (`@ancestorAttribute`, `@subscribe` + `DataProviderKey`, `.items` on lists) and [Data flow](#docs/_core-concept/dataFlow.md/dataFlow). This page documents the **Subscriber mixin** used by older apps and core components.
|
|
4
|
-
|
|
5
|
-
Learn how to build a component with the **Subscriber** mixin, styled with Tailwind, filled from a DataProvider via automatic property mapping.
|
|
6
|
-
|
|
7
|
-
## Create a classic lit component
|
|
8
|
-
|
|
9
|
-
<sonic-code language="javascript" >
|
|
10
|
-
<template>
|
|
11
|
-
import { html, LitElement, nothing } from "lit";
|
|
12
|
-
import { customElement, property } from "lit/decorators.js";
|
|
13
|
-
@customElement("docs-user")
|
|
14
|
-
export class user extends LitElement {
|
|
15
|
-
@property({ type: String }) first_name = "";
|
|
16
|
-
@property({ type: String }) last_name = "";
|
|
17
|
-
@property({ type: String }) avatar = "";
|
|
18
|
-
@property({ type: String }) email = "";
|
|
19
|
-
render() {
|
|
20
|
-
return html`
|
|
21
|
-
<img src="${this.avatar}" /> <br>
|
|
22
|
-
${this.first_name} ${this.last_name} <br>
|
|
23
|
-
${this.email}`;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
</template>
|
|
27
|
-
</sonic-code>
|
|
28
|
-
|
|
29
|
-
### Style with tailwind and ui components
|
|
30
|
-
|
|
31
|
-
<sonic-code language="javascript">
|
|
32
|
-
<template>
|
|
33
|
-
import { css, unsafeCSS } from "lit";
|
|
34
|
-
import tailwindImport from "./css/tailwind.css?inline";
|
|
35
|
-
export const tailwind = css`${unsafeCSS(tailwindImport)}`;
|
|
36
|
-
</template>
|
|
37
|
-
</sonic-code>
|
|
38
|
-
|
|
39
|
-
<sonic-code language="javascript">
|
|
40
|
-
<template>
|
|
41
|
-
import { html, LitElement } from "lit";
|
|
42
|
-
import { customElement, property } from "lit/decorators.js";
|
|
43
|
-
import { tailwind } from "../tailwind";
|
|
44
|
-
import '@supersoniks/concode/ui/image'
|
|
45
|
-
import '@supersoniks/concode/ui/button'
|
|
46
|
-
import '@supersoniks/concode/ui/icon'
|
|
47
|
-
@customElement("docs-user")
|
|
48
|
-
export class user extends LitElement {
|
|
49
|
-
static styles = [tailwind];
|
|
50
|
-
@property({ type: String }) first_name = "";
|
|
51
|
-
@property({ type: String }) last_name = "";
|
|
52
|
-
@property({ type: String }) avatar = "";
|
|
53
|
-
@property({ type: String }) email = "";
|
|
54
|
-
render() {
|
|
55
|
-
return html`<div class="flex items-center gap-3 p-2">
|
|
56
|
-
<sonic-image src=${this.avatar} rounded="md" ratio="1/1" class="w-16"></sonic-image>
|
|
57
|
-
<div>${this.first_name} <span class="font-bold">${this.last_name}</span></div>
|
|
58
|
-
<div class="text-sm text-neutral-400">${this.email}</div>
|
|
59
|
-
</div>`;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
</template>
|
|
63
|
-
</sonic-code>
|
|
64
|
-
|
|
65
|
-
## Add Subscriber mixin
|
|
66
|
-
|
|
67
|
-
<sonic-code language="javascript">
|
|
68
|
-
<template>
|
|
69
|
-
import Subscriber from "@supersoniks/concorde/core/mixins/Subscriber";
|
|
70
|
-
@customElement("docs-user")
|
|
71
|
-
export class user extends Subscriber(LitElement) {
|
|
72
|
-
// properties auto-filled from DataProvider when names match
|
|
73
|
-
}
|
|
74
|
-
</template>
|
|
75
|
-
</sonic-code>
|
|
76
|
-
|
|
77
|
-
See [Legacy: Subscriber mixin](#docs/_core-concept/subscriber.md/subscriber).
|
|
78
|
-
|
|
79
|
-
## Autofill from a dataProvider
|
|
80
|
-
|
|
81
|
-
<sonic-code >
|
|
82
|
-
<template>
|
|
83
|
-
<docs-demo-sources for="list-users-fetch"></docs-demo-sources>
|
|
84
|
-
<div serviceURL="/docs-mock-api">
|
|
85
|
-
<sonic-fetch
|
|
86
|
-
serviceURL="/docs-mock-api"
|
|
87
|
-
dataProvider="api/users/3"
|
|
88
|
-
key="data">
|
|
89
|
-
<docs-user></docs-user>
|
|
90
|
-
</sonic-fetch>
|
|
91
|
-
</div>
|
|
92
|
-
</template>
|
|
93
|
-
</sonic-code>
|
|
94
|
-
|
|
95
|
-
<sonic-code >
|
|
96
|
-
<template>
|
|
97
|
-
<sonic-fetch
|
|
98
|
-
serviceURL="/docs-mock-api"
|
|
99
|
-
dataProvider="api/users/2"
|
|
100
|
-
key="data"></sonic-fetch>
|
|
101
|
-
<docs-user dataProvider="api/users/2" ></docs-user>
|
|
102
|
-
</template>
|
|
103
|
-
</sonic-code>
|
|
104
|
-
|
|
105
|
-
<sonic-code >
|
|
106
|
-
<template>
|
|
107
|
-
<div class="grid grid-cols-1 gap-4">
|
|
108
|
-
<form formDataProvider="userPreview" class="grid grid-cols-4 gap-3" >
|
|
109
|
-
<sonic-input label="First name" type="text" name="first_name" value="Paul" size="sm"></sonic-input>
|
|
110
|
-
<sonic-input label="Last name" type="text" name="last_name" value="Metrand" size="sm"></sonic-input>
|
|
111
|
-
<sonic-input class="col-span-2" label="email" type="text" name="email" value="paul@example.com" size="sm"></sonic-input>
|
|
112
|
-
<sonic-input label="Image url" type="text" name="avatar" value="https://i.pravatar.cc/150?u=paul" size="sm"></sonic-input>
|
|
113
|
-
</form>
|
|
114
|
-
<sonic-divider align="left">Preview before submit</sonic-divider>
|
|
115
|
-
<div dataProvider="userPreview">
|
|
116
|
-
<docs-user></docs-user>
|
|
117
|
-
</div>
|
|
118
|
-
</div>
|
|
119
|
-
</template>
|
|
120
|
-
</sonic-code>
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# Legacy: Sharing data
|
|
2
|
-
|
|
3
|
-
> **New apps:** [Data flow](#docs/_core-concept/dataFlow.md/dataFlow) (`get` / `set` / `DataProviderKey`, decorators). This page documents the historical **Publisher** proxy API (`PublisherManager`, `publisher.set`, `onAssign`, …).
|
|
4
|
-
|
|
5
|
-
This section describes how data is shared between graphical and non-graphical components.
|
|
6
|
-
|
|
7
|
-
Graphical components should not reference each other directly — they stay decoupled via a **publish/subscribe** store.
|
|
8
|
-
|
|
9
|
-
## The Publisher
|
|
10
|
-
|
|
11
|
-
### Principle
|
|
12
|
-
|
|
13
|
-
* The **publisher** is a [JavaScript proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) that holds data.<br>
|
|
14
|
-
Example: `{foo:{hello:["world"]}, bar:"baz"}`
|
|
15
|
-
|
|
16
|
-
* Accessing a property (`myPublisher.foo.hello`) returns another **publisher** for that segment.
|
|
17
|
-
|
|
18
|
-
* Missing properties create a publisher with internal data `null`, filled later.
|
|
19
|
-
|
|
20
|
-
* **Subscribers** listen via `onAssign`, `onInternalMutation`, template filling on the **Subscriber mixin**, etc.
|
|
21
|
-
|
|
22
|
-
* Updates use `publisher.set(...)` or nested assignment; changes propagate to subscribers.
|
|
23
|
-
|
|
24
|
-
❇️ Order of creation vs subscription theoretically does not matter.
|
|
25
|
-
|
|
26
|
-
### Methods
|
|
27
|
-
|
|
28
|
-
* **set** — replace internal value
|
|
29
|
-
<sonic-code language="javascript"><template>publisher.set({foo:{hello:["world"]}, bar:"baz"});</template></sonic-code>
|
|
30
|
-
|
|
31
|
-
* **get** — read internal value
|
|
32
|
-
<sonic-code language="javascript"><template>publisher.get()</template></sonic-code>
|
|
33
|
-
|
|
34
|
-
* **onAssign / offAssign** — react to `set`
|
|
35
|
-
<sonic-code language="javascript"><template>publisher.a.b.onAssign(console.log);</template></sonic-code>
|
|
36
|
-
|
|
37
|
-
Modern equivalent: `get` / `set` / `@handle` — see [Data flow](#docs/_core-concept/dataFlow.md/dataFlow).
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# Introduction
|
|
2
|
-
|
|
3
|
-
## What is Concorde?
|
|
4
|
-
|
|
5
|
-
Based on **[lit.dev](https://lit.dev)**, Concorde is a collection of web components for shared apps and websites.
|
|
6
|
-
Build UIs without tying components to a specific host stack, while keeping visual consistency through a small set of CSS variables.
|
|
7
|
-
|
|
8
|
-
## Why and use case
|
|
9
|
-
|
|
10
|
-
In 2022, Supersoniks needed a new ticketing stack for nearly 100 sites — mobile apps, modern sites, and legacy PHP without bundlers.
|
|
11
|
-
One composable web-component library replaced many one-off apps. Lit was chosen for broad runtime compatibility.
|
|
12
|
-
|
|
13
|
-
### Stack
|
|
14
|
-
|
|
15
|
-
* Lit
|
|
16
|
-
* TypeScript
|
|
17
|
-
* Vite
|
|
18
|
-
* Tailwind (starter kit, not required in the core package)
|
|
19
|
-
|
|
20
|
-
### Functional features
|
|
21
|
-
|
|
22
|
-
* **DataProvider** store (decorators, `get` / `set`)
|
|
23
|
-
* Forms (`formDataProvider`)
|
|
24
|
-
* Lists, queues, lazy loading
|
|
25
|
-
* Router, states, UI kit with status variants
|
|
26
|
-
|
|
27
|
-
## Learn Concorde
|
|
28
|
-
|
|
29
|
-
| Step | Page |
|
|
30
|
-
|------|------|
|
|
31
|
-
| 1 | [My first component](#docs/_getting-started/my-first-component.md/my-first-component) — Lit card, `@ancestorAttribute`, `@bind`, mock API |
|
|
32
|
-
| 2 | [Data flow](#docs/_core-concept/dataFlow.md/dataFlow) — Core concepts: decorators and APIs |
|
|
33
|
-
| 3 | [Local API demos](#docs/_misc/docs-mock-api.md/docs-mock-api) — offline `serviceURL` for this site (Misc) |
|
|
34
|
-
| 4 | [create-concorde-ts-starter](https://www.npmjs.com/package/@supersoniks/create-concorde-ts-starter) — **recommended** project kit (Vite, Tailwind, `yarn ai:sync`) |
|
|
35
|
-
| 5 | [AI agents (skills)](#docs/_getting-started/ai-agents.md/ai-agents) — `AGENTS.md`, Cursor / JetBrains rules |
|
|
36
|
-
|
|
37
|
-
Legacy (Subscriber mixin, Publisher API): **Legacy** section at the bottom of the sidebar.
|
|
38
|
-
|
|
39
|
-
## Start a new project
|
|
40
|
-
|
|
41
|
-
<sonic-code language="bash">
|
|
42
|
-
<template>
|
|
43
|
-
npx @supersoniks/create-concorde-ts-starter "project_name"
|
|
44
|
-
</template>
|
|
45
|
-
</sonic-code>
|
|
46
|
-
|
|
47
|
-
The starter runs **`yarn ai:sync`** for you. Details: [AI agents (skills)](#docs/_getting-started/ai-agents.md/ai-agents). Manual Vite setup: [Legacy: Manual installation](#docs/_getting-started/concorde-manual-install.md/concorde-manual-install).
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# Adding styles
|
|
2
|
-
|
|
3
|
-
## Normal Behavior
|
|
4
|
-
|
|
5
|
-
No style crosses the shadow root of a component, except for inheritable properties (which have the "inherit" property possible) and CSS variables.
|
|
6
|
-
Properties integrated via a "[slot](https://developer.mozilla.org/en/docs/Web/HTML/Element/slot)" remain stylizable in a conventional way.
|
|
7
|
-
|
|
8
|
-
- **During creation / from the inside:**
|
|
9
|
-
- We edit the [static "styles" property of the lit component](https://lit.dev/docs/components/styles/), which can also reference shared and dynamic styles.
|
|
10
|
-
These styles are scoped and do not impact the outside.
|
|
11
|
-
- We use CSS variables as the value of properties intended to be customized from the outside.
|
|
12
|
-
For each variable, we define a default value to have a simple but consistent base style.
|
|
13
|
-
- We only rewrite inheritable properties with hard values if they are truly specific to the component.
|
|
14
|
-
- The `<style>` tag as a direct child can be used as a last resort, especially if there is a need for particularly dynamic customization. Performance is reduced.
|
|
15
|
-
- **During use / from the outside:**
|
|
16
|
-
We define values for **inheritable CSS properties** (e.g., font-\_, color...) using tools like Tailwind.
|
|
17
|
-
We modify the value of **CSS variables** used by the component.
|
|
18
|
-
|
|
19
|
-
## Choosing Style Presets via Reactive Properties:
|
|
20
|
-
|
|
21
|
-
The declaration of reactive properties is useful for selecting a particular configuration that mostly affects a set of properties.
|
|
22
|
-
|
|
23
|
-
For example, a `size` property (xs, sm, md, xl) will affect margins, font, line heights to align them with the corresponding CSS vars, which can be customized using the methods mentioned earlier if necessary.
|
|
24
|
-
|
|
25
|
-
It is recommended to use the `{reflect: true}` property for reactive properties that have an associated style on the `:host()`. For example: `:host([type='primary']){...}`
|
|
26
|
-
|
|
27
|
-
☢️ **Caution:** Passing class names via reactive properties / HTML attributes of the component should be avoided as it can quickly lead to difficult-to-manage situations.
|
|
28
|
-
|
|
29
|
-
#### CSS "display" Property
|
|
30
|
-
|
|
31
|
-
By default, the display property is `inline`.
|
|
32
|
-
Therefore, be careful to define it according to the needs, as one might mistakenly expect it to be `block` as with a regular `<div>`.
|
|
33
|
-
|
|
34
|
-
☢️ **Caution:** Defining the `display` property as `contents` may seem attractive at first, but:
|
|
35
|
-
|
|
36
|
-
- It almost always leads to the creation of wrappers to style the content (instead of using `:host`).
|
|
37
|
-
- It is no longer possible to directly add classes to the component or style it from the outside.
|
|
38
|
-
Ultimately, the amount of code to write increases significantly.
|
|
39
|
-
|
|
40
|
-
## TAILWIND Functional Classes
|
|
41
|
-
|
|
42
|
-
[tailwind](https://tailwindcss.com/) has been integrated into Concorde and is available in scoped components (with Shadow DOM).
|
|
43
|
-
To use it, you need to import the following:
|
|
44
|
-
|
|
45
|
-
<sonic-code language="javascript">
|
|
46
|
-
<template>
|
|
47
|
-
import { tailwind } from "@supersoniks/concorde/la-billetterie/ui/theme/theme";
|
|
48
|
-
</template>
|
|
49
|
-
</sonic-code>
|
|
50
|
-
|
|
51
|
-
Then include the `tailwind` style in the static `styles` property of the component:
|
|
52
|
-
|
|
53
|
-
<sonic-code language="javascript">
|
|
54
|
-
<template>
|
|
55
|
-
static styles = [tailwind];
|
|
56
|
-
</template>
|
|
57
|
-
</sonic-code>
|
|
58
|
-
|
|
59
|
-
Finally, use it in the HTML within the render function:
|
|
60
|
-
|
|
61
|
-
<sonic-code language="html">
|
|
62
|
-
<template>
|
|
63
|
-
<p class="m-2">A paragraph with margin</p>
|
|
64
|
-
</template>
|
|
65
|
-
</sonic-code>
|
|
66
|
-
|
|
67
|
-
The colors from Concorde's theme are referenced in Tailwind's theme.
|
|
68
|
-
|
|
69
|
-
## Operation without Shadow DOM
|
|
70
|
-
|
|
71
|
-
### Usefulness
|
|
72
|
-
|
|
73
|
-
This operation is particularly useful when it comes to **adding behavior to a simple existing element**.
|
|
74
|
-
It may also become necessary to establish **compatibility with a traditional JS library**.
|
|
75
|
-
|
|
76
|
-
For example, with a text input:
|
|
77
|
-
|
|
78
|
-
- Trigger automatic data or filter update when typing text.
|
|
79
|
-
- Automatic formatting.
|
|
80
|
-
- Constraints that cannot be handled by native methods.
|
|
81
|
-
|
|
82
|
-
### Consequences
|
|
83
|
-
|
|
84
|
-
If there is no shadow DOM (see the **noShadowDom** property of **Subscriber**):
|
|
85
|
-
|
|
86
|
-
- Styling using the static "styles" property of the lit component will not be applied.
|
|
87
|
-
- The element and its content can be styled in a traditional manner.
|
|
88
|
-
|
|
89
|
-
For example, the components `queue`, `list`, and `fetch` do not have a shadow DOM.
|
|
90
|
-
|
|
91
|
-
ℹ️ **Note:** Specifically in this case, it may be useful to set the `display` property to `contents`.
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
# FormElement without Subscriber (REDMINE-79569)
|
|
2
|
-
|
|
3
|
-
Form fields (`sonic-input`, `textarea`, `select`, `checkbox`, `radio`, `switch`, `button`, `input-autocomplete`) no longer inherit the **Subscriber** mixin.
|
|
4
|
-
|
|
5
|
-
## Behaviour now
|
|
6
|
-
|
|
7
|
-
| Before | After |
|
|
8
|
-
|--------|--------|
|
|
9
|
-
| Dual channel `dataProvider` (autofill) + `formDataProvider` | **`formDataProvider` + `name` only** |
|
|
10
|
-
| Ancestor `dataProvider` auto-filled field props | Ignored by form fields |
|
|
11
|
-
| `noAutoFill` on fields/buttons inside a `dataProvider` tree | Dead on form fields (attribute harmless; can be cleaned in apps) |
|
|
12
|
-
|
|
13
|
-
Preview pattern still valid: form writes via `formDataProvider`, display card reads via `dataProvider` on a **Subscriber** (or `@subscribe`) sibling — not on the fields themselves.
|
|
14
|
-
|
|
15
|
-
## Migration checklist (apps)
|
|
16
|
-
|
|
17
|
-
1. Prefer `formDataProvider` alone on forms / fieldsets.
|
|
18
|
-
2. Drop redundant `dataProvider={sameKey}` on form containers when it only existed for field autofill.
|
|
19
|
-
3. Prefill edit forms with `set(formKey, row)` / `dp(formKey.field).set(...)` before mount — not field `dataProvider`.
|
|
20
|
-
4. Remove `noAutoFill` on `sonic-button` / fields when it only blocked Subscriber autofill.
|
|
21
|
-
5. `initFromPublisher` still works (form publisher only).
|
|
22
|
-
|
|
23
|
-
## Billetterie collect — dual-channel risk
|
|
24
|
-
|
|
25
|
-
Files under `la-billetterie/concorde` that mention both `formDataProvider` and `dataProvider=` (review; many are filter+queue, not field autofill):
|
|
26
|
-
|
|
27
|
-
### High priority (same key on form container)
|
|
28
|
-
|
|
29
|
-
- `la-billetterie/components/reservation-request/atoms/request-event-form.ts` — `form` / `fieldset` with both attrs equal
|
|
30
|
-
- `la-billetterie/components/reservation/atoms/new-quote-form.ts`
|
|
31
|
-
- `la-billetterie/components/stats/sales-summary/sales-summary.ts`
|
|
32
|
-
- `la-billetterie/components/product/price-selection-form/price-selection-form.ts` — `formDataProvider` + `dataProvider="cart/editForm"`
|
|
33
|
-
- `la-billetterie/components/user/account/link-ticket/link-ticket.ts` — distinct keys (API vs form) — keep `dataProvider` only if used by fetch/submit siblings
|
|
34
|
-
|
|
35
|
-
### Filters + queue (usually OK)
|
|
36
|
-
|
|
37
|
-
`formDataProvider` on filter bar, `dataProvider` on `sonic-queue` / list — no field autofill dependency:
|
|
38
|
-
|
|
39
|
-
- `access-control/components/event/list/index.ts`
|
|
40
|
-
- `access-control/components/control/search/views/list.ts`
|
|
41
|
-
- `la-billetterie/components/event/form-event-filter/form-event-filter.ts`
|
|
42
|
-
- `la-billetterie/components/counter/*` (agenda, store, reservation-request-treatment, …)
|
|
43
|
-
- `widgets/agenda/agenda.ts`
|
|
44
|
-
- … see full dual list in ticket notes / grep below
|
|
45
|
-
|
|
46
|
-
### Full dual-channel file list (55)
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
concorde/src/access-control/components/control/search/views/list.ts
|
|
50
|
-
concorde/src/access-control/components/event/list/index.ts
|
|
51
|
-
concorde/src/la-billetterie/components/access-control-mobile/access-controller-picker.ts
|
|
52
|
-
concorde/src/la-billetterie/components/accreditations-directory/accreditations-directory.ts
|
|
53
|
-
concorde/src/la-billetterie/components/address/address-suggestion.ts
|
|
54
|
-
concorde/src/la-billetterie/components/bulk/bulk.ts
|
|
55
|
-
concorde/src/la-billetterie/components/campaign/campaign-content.ts
|
|
56
|
-
concorde/src/la-billetterie/components/counter/agenda/agenda.ts
|
|
57
|
-
concorde/src/la-billetterie/components/counter/event-selector/event-selector.ts
|
|
58
|
-
concorde/src/la-billetterie/components/counter/order-validation/order-validation-settings.ts
|
|
59
|
-
concorde/src/la-billetterie/components/counter/print/format-menu.ts
|
|
60
|
-
concorde/src/la-billetterie/components/counter/reservation-request-treatment/reservation-request-treatment.ts
|
|
61
|
-
concorde/src/la-billetterie/components/counter/store/counter-store.ts
|
|
62
|
-
concorde/src/la-billetterie/components/counter/widgets-settings/widgets-settings-page.ts
|
|
63
|
-
concorde/src/la-billetterie/components/custom-list/custom-list.ts
|
|
64
|
-
concorde/src/la-billetterie/components/event/agenda/agenda.ts
|
|
65
|
-
concorde/src/la-billetterie/components/event/atoms/buy-event-block/buy-event-block.ts
|
|
66
|
-
concorde/src/la-billetterie/components/event/atoms/categorizedPrices/categorizedPrices.ts
|
|
67
|
-
concorde/src/la-billetterie/components/event/event-store/event-store-content.ts
|
|
68
|
-
concorde/src/la-billetterie/components/event/form-event-filter/form-event-filter.ts
|
|
69
|
-
concorde/src/la-billetterie/components/form/event-selection/event-selection-filters.ts
|
|
70
|
-
concorde/src/la-billetterie/components/form/event-selection/event-selection.ts
|
|
71
|
-
concorde/src/la-billetterie/components/giftcards/giftcard-link.ts
|
|
72
|
-
concorde/src/la-billetterie/components/layout/header.ts
|
|
73
|
-
concorde/src/la-billetterie/components/orders/recover/recover.ts
|
|
74
|
-
concorde/src/la-billetterie/components/placing/atoms/placement-choice/placement-choice.ts
|
|
75
|
-
concorde/src/la-billetterie/components/placing/seatmap-view/seatmap-view.ts
|
|
76
|
-
concorde/src/la-billetterie/components/product/price-selection-form/price-selection-form.ts
|
|
77
|
-
concorde/src/la-billetterie/components/product/prices-form/price-button/price-button.ts
|
|
78
|
-
concorde/src/la-billetterie/components/purchase/purchase-summary/complementary-info/complementary-info.ts
|
|
79
|
-
concorde/src/la-billetterie/components/reservation-request/atoms/request-event-form.ts
|
|
80
|
-
concorde/src/la-billetterie/components/reservation/atoms/new-quote-form.ts
|
|
81
|
-
concorde/src/la-billetterie/components/reservation/reservation-content.ts
|
|
82
|
-
concorde/src/la-billetterie/components/seatmap/seatmap.ts
|
|
83
|
-
concorde/src/la-billetterie/components/shop/shop.ts
|
|
84
|
-
concorde/src/la-billetterie/components/stats/dashboard/dashboard.ts
|
|
85
|
-
concorde/src/la-billetterie/components/stats/event/event-stats-check.ts
|
|
86
|
-
concorde/src/la-billetterie/components/stats/sales-summary/sales-summary.ts
|
|
87
|
-
concorde/src/la-billetterie/components/subscription/atoms/quick-select-display-toggle/quick-select-display-toggle.ts
|
|
88
|
-
concorde/src/la-billetterie/components/subscription/cart-quick-select.ts
|
|
89
|
-
concorde/src/la-billetterie/components/subscription/edit/subscription-renew-form.ts
|
|
90
|
-
concorde/src/la-billetterie/components/ticket/ticket-freeup.ts
|
|
91
|
-
concorde/src/la-billetterie/components/tickets-app/default-router.ts
|
|
92
|
-
concorde/src/la-billetterie/components/user/account/account-purchases.ts
|
|
93
|
-
concorde/src/la-billetterie/components/user/account/account-tickets.ts
|
|
94
|
-
concorde/src/la-billetterie/components/user/account/link-ticket/link-ticket.ts
|
|
95
|
-
concorde/src/la-billetterie/components/user/form/login.ts
|
|
96
|
-
concorde/src/la-billetterie/components/user/user-attach/buyer-attach-form.ts
|
|
97
|
-
concorde/src/la-billetterie/components/user/user-attach/buyer-attach.ts
|
|
98
|
-
concorde/src/la-billetterie/components/user/user-attach/owner-attach-form.ts
|
|
99
|
-
concorde/src/la-billetterie/components/user/user-attach/subscription-attach-form.ts
|
|
100
|
-
concorde/src/la-billetterie/components/user/user-attach/subscription-selector.ts
|
|
101
|
-
concorde/src/la-billetterie/components/user/user-selector/user-selector.ts
|
|
102
|
-
concorde/src/la-billetterie/components/user/user-suggest/user-suggest.ts
|
|
103
|
-
concorde/src/widgets/agenda/agenda.ts
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Re-run audit:
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
# from la-billetterie
|
|
110
|
-
rg -l 'formDataProvider' concorde/src | while read f; do rg -q 'dataProvider\s*=' "$f" && echo "$f"; done
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
## Non-regression (Concorde docs)
|
|
114
|
-
|
|
115
|
-
Smoke form demos: input, textarea, select, checkbox (incl. check-all), radio, switch, button form modes, queue + `dataFilterProvider`, submit, validation / sameValueAs, input-autocomplete.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig-model.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"noEmit": false,
|
|
5
|
-
"emitDeclarationOnly": true,
|
|
6
|
-
"declaration": true,
|
|
7
|
-
"declarationMap": true,
|
|
8
|
-
"outDir": "../dist/types",
|
|
9
|
-
"rootDir": "."
|
|
10
|
-
},
|
|
11
|
-
"include": ["**/*.ts"],
|
|
12
|
-
"exclude": [
|
|
13
|
-
"node_modules/**/*",
|
|
14
|
-
"**/*.spec.ts",
|
|
15
|
-
"**/*.test.ts",
|
|
16
|
-
"**/*.demo.ts",
|
|
17
|
-
"**/*.stories.ts",
|
|
18
|
-
"**/*.type-test.ts",
|
|
19
|
-
"docs.ts",
|
|
20
|
-
"docs/**/*"
|
|
21
|
-
]
|
|
22
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig-model.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"noEmit": false,
|
|
5
|
-
"emitDeclarationOnly": false,
|
|
6
|
-
"declaration": false,
|
|
7
|
-
"sourceMap": true,
|
|
8
|
-
"outDir": "../dist/js",
|
|
9
|
-
"rootDir": ".",
|
|
10
|
-
"lib": ["ES2021", "DOM", "DOM.Iterable"]
|
|
11
|
-
},
|
|
12
|
-
"include": ["**/*.ts"],
|
|
13
|
-
"exclude": [
|
|
14
|
-
"node_modules/**/*",
|
|
15
|
-
"**/*.spec.ts",
|
|
16
|
-
"**/*.test.ts",
|
|
17
|
-
"**/*.demo.ts",
|
|
18
|
-
"**/*.stories.ts",
|
|
19
|
-
"**/*.type-test.ts",
|
|
20
|
-
"docs.ts",
|
|
21
|
-
"docs/**/*"
|
|
22
|
-
]
|
|
23
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Pousse un export filtré (lib publique) vers GitHub.
|
|
3
|
-
# Remplace le push mirror « tout le dépôt » : pas de doc, pas de captcha, pas de gitlab/.
|
|
4
|
-
#
|
|
5
|
-
# Variables CI requises :
|
|
6
|
-
# GITHUB_REPO_URL — ex. https://github.com/supersoniks/concorde.git
|
|
7
|
-
# GITHUB_TOKEN — PAT avec scope repo (masqué)
|
|
8
|
-
#
|
|
9
|
-
# Usage manuel (hors CI) :
|
|
10
|
-
# GITHUB_REPO_URL=https://github.com/supersoniks/concorde.git \
|
|
11
|
-
# GITHUB_TOKEN=ghp_… \
|
|
12
|
-
# bash gitlab/job_github_mirror.sh
|
|
13
|
-
#
|
|
14
|
-
set -euo pipefail
|
|
15
|
-
|
|
16
|
-
EXPORT_DIR="${CI_PROJECT_DIR:-$(cd "$(dirname "$0")/.." && pwd)}/.github-export"
|
|
17
|
-
BRANCH="${GITHUB_BRANCH:-master}"
|
|
18
|
-
|
|
19
|
-
if [[ -z "${GITHUB_REPO_URL:-}" || -z "${GITHUB_TOKEN:-}" ]]; then
|
|
20
|
-
echo "❌ GITHUB_REPO_URL et GITHUB_TOKEN sont requis."
|
|
21
|
-
exit 1
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
echo "=== Export filtré ==="
|
|
25
|
-
node "${CI_PROJECT_DIR:-.}/scripts/github-export.mjs" "$EXPORT_DIR"
|
|
26
|
-
|
|
27
|
-
echo "=== Push vers GitHub ($BRANCH) ==="
|
|
28
|
-
cd "$EXPORT_DIR"
|
|
29
|
-
git init -q
|
|
30
|
-
git config user.email "ci@supersoniks.org"
|
|
31
|
-
git config user.name "GitLab CI"
|
|
32
|
-
git add -A
|
|
33
|
-
git commit -q -m "sync: export lib depuis GitLab ${CI_COMMIT_SHORT_SHA:-local}"
|
|
34
|
-
|
|
35
|
-
PUSH_URL="${GITHUB_REPO_URL/https:\/\//https://${GITHUB_TOKEN}@}"
|
|
36
|
-
git branch -M "$BRANCH"
|
|
37
|
-
git push -f "$PUSH_URL" "$BRANCH"
|
|
38
|
-
|
|
39
|
-
echo "=== Miroir GitHub à jour ==="
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Prépare une arborescence « lib publique » pour GitHub :
|
|
4
|
-
* - sans site doc (src/docs, index.html, …)
|
|
5
|
-
* - sans sonic-captcha (altcha.supersoniks.org)
|
|
6
|
-
* - sans scripts / jobs GitLab internes
|
|
7
|
-
*
|
|
8
|
-
* Usage :
|
|
9
|
-
* node scripts/github-export.mjs [répertoire_cible]
|
|
10
|
-
*
|
|
11
|
-
* Par défaut : ../concorde-github-export
|
|
12
|
-
*/
|
|
13
|
-
import fs from "fs";
|
|
14
|
-
import path from "path";
|
|
15
|
-
import { fileURLToPath } from "url";
|
|
16
|
-
|
|
17
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
18
|
-
const ROOT = path.resolve(__dirname, "..");
|
|
19
|
-
const IGNORE_FILE = path.join(ROOT, ".github-export-ignore");
|
|
20
|
-
const DEFAULT_OUT = path.resolve(ROOT, "../concorde-github-export");
|
|
21
|
-
|
|
22
|
-
const EXPORT_FILTER_KEY =
|
|
23
|
-
/(?:^|\/)(?:docs|mock-api|undefined)(?:\/|$)|captcha|\.demo\.|\.stories\.|TestUtils|\/prism\/|\/search\/|\/tailwind\/|\/header\/|\/navigation\/|\/layout\.ts$|\/code\.ts$|^code$|^docs$|^layout$/;
|
|
24
|
-
|
|
25
|
-
function readIgnorePatterns() {
|
|
26
|
-
if (!fs.existsSync(IGNORE_FILE)) return [];
|
|
27
|
-
return fs
|
|
28
|
-
.readFileSync(IGNORE_FILE, "utf8")
|
|
29
|
-
.split("\n")
|
|
30
|
-
.map((l) => l.trim())
|
|
31
|
-
.filter((l) => l && !l.startsWith("#"));
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function globToRegExp(pattern) {
|
|
35
|
-
const escaped = pattern
|
|
36
|
-
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
37
|
-
.replace(/\*\*/g, "{{GLOBSTAR}}")
|
|
38
|
-
.replace(/\*/g, "[^/]*")
|
|
39
|
-
.replace(/\{\{GLOBSTAR\}\}/g, ".*");
|
|
40
|
-
return new RegExp(`^${escaped}$`);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function shouldExclude(relativePath, patterns) {
|
|
44
|
-
const normalized = relativePath.replace(/\\/g, "/");
|
|
45
|
-
for (const pattern of patterns) {
|
|
46
|
-
const re = globToRegExp(pattern);
|
|
47
|
-
if (re.test(normalized)) return true;
|
|
48
|
-
if (normalized.startsWith(pattern.endsWith("/") ? pattern : `${pattern}/`))
|
|
49
|
-
return true;
|
|
50
|
-
if (normalized === pattern) return true;
|
|
51
|
-
}
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function listAllFiles(dir, base = dir) {
|
|
56
|
-
const out = [];
|
|
57
|
-
for (const name of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
58
|
-
if (name.name === ".git" || name.name === "node_modules") continue;
|
|
59
|
-
const full = path.join(dir, name.name);
|
|
60
|
-
const rel = path.relative(base, full).replace(/\\/g, "/");
|
|
61
|
-
if (name.isDirectory()) {
|
|
62
|
-
if (shouldExclude(rel, ignorePatterns)) continue;
|
|
63
|
-
out.push(...listAllFiles(full, base));
|
|
64
|
-
} else {
|
|
65
|
-
if (!shouldExclude(rel, ignorePatterns)) out.push(rel);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return out;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function copyFile(rel, destRoot) {
|
|
72
|
-
const src = path.join(ROOT, rel);
|
|
73
|
-
const dest = path.join(destRoot, rel);
|
|
74
|
-
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
75
|
-
fs.copyFileSync(src, dest);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function patchUiTs(destRoot) {
|
|
79
|
-
const uiPath = path.join(
|
|
80
|
-
destRoot,
|
|
81
|
-
"src/core/components/ui/ui.ts",
|
|
82
|
-
);
|
|
83
|
-
if (!fs.existsSync(uiPath)) return;
|
|
84
|
-
const content = fs.readFileSync(uiPath, "utf8");
|
|
85
|
-
const patched = content.replace(
|
|
86
|
-
/import "\.\/captcha\/captcha";\n?/,
|
|
87
|
-
"",
|
|
88
|
-
);
|
|
89
|
-
fs.writeFileSync(uiPath, patched);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function exportHaystack(value) {
|
|
93
|
-
if (typeof value === "string") return value;
|
|
94
|
-
if (value && typeof value === "object") {
|
|
95
|
-
return `${value.types ?? ""}${value.default ?? ""}`;
|
|
96
|
-
}
|
|
97
|
-
return String(value);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function filterPackageJson(destRoot) {
|
|
101
|
-
const pkgPath = path.join(destRoot, "package.json");
|
|
102
|
-
if (!fs.existsSync(pkgPath)) return;
|
|
103
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
104
|
-
if (pkg.exports && typeof pkg.exports === "object") {
|
|
105
|
-
const next = {};
|
|
106
|
-
for (const [key, value] of Object.entries(pkg.exports)) {
|
|
107
|
-
const hay = `${key}:${exportHaystack(value)}`;
|
|
108
|
-
if (EXPORT_FILTER_KEY.test(hay)) continue;
|
|
109
|
-
if (exportHaystack(value).includes("/captcha/")) continue;
|
|
110
|
-
if (exportHaystack(value).includes("/docs/")) continue;
|
|
111
|
-
if (exportHaystack(value).includes(".demo.")) continue;
|
|
112
|
-
if (exportHaystack(value).includes(".stories.")) continue;
|
|
113
|
-
next[key] = value;
|
|
114
|
-
}
|
|
115
|
-
pkg.exports = next;
|
|
116
|
-
}
|
|
117
|
-
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
function patchReadme(destRoot) {
|
|
121
|
-
const readmePath = path.join(destRoot, "README.md");
|
|
122
|
-
if (!fs.existsSync(readmePath)) return;
|
|
123
|
-
let text = fs.readFileSync(readmePath, "utf8");
|
|
124
|
-
text = text.replace(
|
|
125
|
-
/Le dépôt GitHub est un \*\*miroir\*\* synchronisé depuis GitLab \(voir \[OPEN_SOURCE_CHECKPOINT\.md\]\(OPEN_SOURCE_CHECKPOINT\.md\)\)\./,
|
|
126
|
-
"Le dépôt GitHub est un **export filtré** depuis GitLab (librairie uniquement, sans site doc ni composant captcha — voir [OPEN_SOURCE_CHECKPOINT.md](OPEN_SOURCE_CHECKPOINT.md)).",
|
|
127
|
-
);
|
|
128
|
-
fs.writeFileSync(readmePath, text);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const ignorePatterns = readIgnorePatterns();
|
|
132
|
-
const outDir = path.resolve(process.argv[2] || DEFAULT_OUT);
|
|
133
|
-
|
|
134
|
-
if (fs.existsSync(outDir)) {
|
|
135
|
-
fs.rmSync(outDir, { recursive: true, force: true });
|
|
136
|
-
}
|
|
137
|
-
fs.mkdirSync(outDir, { recursive: true });
|
|
138
|
-
|
|
139
|
-
const files = listAllFiles(ROOT);
|
|
140
|
-
for (const rel of files) {
|
|
141
|
-
copyFile(rel, outDir);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
patchUiTs(outDir);
|
|
145
|
-
filterPackageJson(outDir);
|
|
146
|
-
patchReadme(outDir);
|
|
147
|
-
|
|
148
|
-
console.log(`✅ Export GitHub : ${files.length} fichiers → ${outDir}`);
|
|
149
|
-
console.log(" Exclusions : .github-export-ignore");
|
|
150
|
-
console.log(" Patches : ui.ts (sans captcha), package.json exports");
|