@supersoniks/concorde 4.6.0 → 4.7.3
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/.gitlab-ci.yml +23 -0
- package/README.md +106 -55
- package/ai/AGENTS.md +52 -0
- package/ai/README.md +30 -0
- package/ai/cursor/rules/concorde-menu.mdc +15 -0
- package/ai/cursor/rules/concorde-scope.mdc +14 -0
- package/ai/cursor/rules/concorde-theme.mdc +13 -0
- package/ai/cursor/rules/concorde.mdc +49 -0
- package/ai/jetbrains/rules/concorde.md +39 -0
- package/ai/skills/concorde/SKILL.md +273 -0
- package/ai/skills/concorde-get-set-dp/SKILL.md +194 -0
- package/ai/skills/concorde-imports/SKILL.md +78 -0
- package/ai/skills/concorde-menu/SKILL.md +74 -0
- package/ai/skills/concorde-scope/SKILL.md +70 -0
- package/ai/skills/concorde-theme/SKILL.md +46 -0
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +152 -152
- package/concorde-core.es.js +1853 -1689
- package/dist/altcha-widget.js +2662 -0
- package/dist/concorde-core.bundle.js +152 -152
- package/dist/concorde-core.es.js +1853 -1689
- package/dist/docs-mock-api-sw.js +589 -0
- package/dist/docs-mock-api-sw.js.map +7 -0
- package/docs/altcha-widget.js +2662 -0
- package/docs/assets/index-D9pxaQYK.js +7508 -0
- package/docs/assets/index-t0-i22oI.css +1 -0
- package/docs/docs-mock-api-sw.js +589 -0
- package/docs/docs-mock-api-sw.js.map +7 -0
- package/docs/index.html +2 -2
- package/docs/src/core/components/functional/fetch/fetch.md +13 -11
- package/docs/src/core/components/functional/if/if.md +4 -11
- package/docs/src/core/components/functional/list/list.md +60 -194
- package/docs/src/core/components/functional/queue/queue.md +70 -85
- package/docs/src/core/components/functional/router/router.md +62 -97
- package/docs/src/core/components/functional/states/states.md +2 -2
- package/docs/src/core/components/functional/submit/submit.md +86 -55
- package/docs/src/core/components/ui/captcha/captcha.md +2 -2
- package/docs/src/core/components/ui/card/card.md +1 -1
- package/docs/src/core/components/ui/form/checkbox/checkbox.md +5 -32
- package/docs/src/core/components/ui/form/input/input.md +5 -30
- package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +6 -4
- package/docs/src/core/components/ui/form/radio/radio.md +5 -32
- package/docs/src/core/components/ui/form/select/select.md +5 -31
- package/docs/src/core/components/ui/form/switch/switch.md +5 -32
- package/docs/src/core/components/ui/loader/loader.md +1 -13
- package/docs/src/core/components/ui/table/table.md +3 -3
- package/docs/src/docs/_core-concept/dataFlow.md +73 -0
- package/docs/src/docs/_core-concept/subscriber.md +9 -10
- package/docs/src/docs/_decorators/ancestor-attribute.md +4 -3
- package/docs/src/docs/_decorators/auto-subscribe.md +19 -16
- package/docs/src/docs/_decorators/bind.md +20 -17
- package/docs/src/docs/_decorators/get.md +7 -4
- package/docs/src/docs/_decorators/handle.md +171 -0
- package/docs/src/docs/_decorators/on-assign.md +99 -73
- package/docs/src/docs/_decorators/publish.md +2 -1
- package/docs/src/docs/_decorators/subscribe.md +70 -9
- package/docs/src/docs/_decorators/wait-for-ancestors.md +13 -10
- package/docs/src/docs/_directives/sub.md +91 -0
- package/docs/src/docs/_getting-started/ai-agents.md +56 -0
- package/docs/src/docs/_getting-started/concorde-manual-install.md +133 -0
- package/docs/src/docs/_getting-started/concorde-outside.md +13 -123
- package/docs/src/docs/_getting-started/create-a-component.md +2 -0
- package/docs/src/docs/_getting-started/my-first-component.md +236 -0
- package/docs/src/docs/_getting-started/my-first-subscriber.md +29 -83
- package/docs/src/docs/_getting-started/pubsub.md +21 -134
- package/docs/src/docs/_getting-started/start.md +26 -18
- package/docs/src/docs/_misc/api-configuration.md +79 -0
- package/docs/src/docs/_misc/dataProviderKey.md +38 -5
- package/docs/src/docs/_misc/docs-mock-api.md +60 -0
- package/docs/src/docs/_misc/endpoint.md +2 -1
- package/docs/src/docs/_misc/html-integration.md +13 -0
- package/docs/src/docs/search/docs-search.json +4163 -873
- package/docs/src/tsconfig.json +380 -317
- package/gitlab/job_tests.sh +55 -0
- package/package.json +34 -3
- package/public/altcha-widget.js +2662 -0
- package/public/docs-mock-api-sw.js +589 -0
- package/public/docs-mock-api-sw.js.map +7 -0
- package/scripts/ai-init.mjs +167 -0
- package/scripts/docs-mock-api-vite-plugin.ts +116 -0
- package/scripts/docs-open-in-editor-plugin.ts +130 -0
- package/scripts/pre-publish.mjs +2 -1
- package/src/core/components/functional/example/example.ts +1 -1
- package/src/core/components/functional/fetch/fetch.md +13 -11
- package/src/core/components/functional/if/if.md +4 -11
- package/src/core/components/functional/list/list.demo.ts +4 -4
- package/src/core/components/functional/list/list.md +60 -194
- package/src/core/components/functional/list/list.ts +8 -7
- package/src/core/components/functional/queue/queue.demo.ts +1 -1
- package/src/core/components/functional/queue/queue.md +70 -85
- package/src/core/components/functional/queue/queue.ts +4 -4
- package/src/core/components/functional/router/router.md +62 -97
- package/src/core/components/functional/router/router.ts +1 -1
- package/src/core/components/functional/states/states.md +2 -2
- package/src/core/components/functional/submit/submit.md +86 -55
- package/src/core/components/functional/submit/submit.ts +10 -3
- package/src/core/components/ui/captcha/captcha.md +2 -2
- package/src/core/components/ui/card/card.md +1 -1
- package/src/core/components/ui/form/checkbox/checkbox.md +5 -32
- package/src/core/components/ui/form/input/input.md +5 -30
- package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +6 -4
- package/src/core/components/ui/form/radio/radio.md +5 -32
- package/src/core/components/ui/form/select/select.md +5 -31
- package/src/core/components/ui/form/switch/switch.md +5 -32
- package/src/core/components/ui/loader/loader.md +1 -13
- package/src/core/components/ui/table/table.md +3 -3
- package/src/core/decorators/api.spec.ts +8 -1
- package/src/core/decorators/api.ts +126 -15
- package/src/core/directives/DataProvider.sub.spec.ts +96 -0
- package/src/core/directives/DataProvider.ts +109 -40
- package/src/core/utils/HTML.ts +42 -10
- package/src/core/utils/PublisherProxy.ts +33 -18
- package/src/core/utils/dataProviderKey.ts +23 -0
- package/src/core/utils/publisherPathKey.spec.ts +58 -0
- package/src/docs/_core-concept/dataFlow.md +73 -0
- package/src/docs/_core-concept/subscriber.md +9 -10
- package/src/docs/_decorators/ancestor-attribute.md +4 -3
- package/src/docs/_decorators/auto-subscribe.md +19 -16
- package/src/docs/_decorators/bind.md +19 -16
- package/src/docs/_decorators/get.md +7 -4
- package/src/docs/_decorators/handle.md +15 -13
- package/src/docs/_decorators/on-assign.md +53 -53
- package/src/docs/_decorators/publish.md +2 -1
- package/src/docs/_decorators/subscribe.md +70 -9
- package/src/docs/_decorators/wait-for-ancestors.md +13 -10
- package/src/docs/_directives/sub.md +91 -0
- package/src/docs/_getting-started/ai-agents.md +56 -0
- package/src/docs/_getting-started/concorde-manual-install.md +133 -0
- package/src/docs/_getting-started/concorde-outside.md +13 -123
- package/src/docs/_getting-started/create-a-component.md +2 -0
- package/src/docs/_getting-started/my-first-component.md +236 -0
- package/src/docs/_getting-started/my-first-subscriber.md +29 -83
- package/src/docs/_getting-started/pubsub.md +21 -134
- package/src/docs/_getting-started/start.md +26 -18
- package/src/docs/_misc/api-configuration.md +79 -0
- package/src/docs/_misc/dataProviderKey.md +34 -1
- package/src/docs/_misc/docs-mock-api.md +60 -0
- package/src/docs/_misc/endpoint.md +2 -1
- package/src/docs/_misc/html-integration.md +13 -0
- package/src/docs/code.ts +58 -12
- package/src/docs/components/docs-demo-sources.ts +397 -0
- package/src/docs/components/docs-lit-demo-raw.ts +28 -0
- package/src/docs/components/docs-lit-demo.ts +166 -0
- package/src/docs/components/docs-source-link.ts +72 -0
- package/src/docs/docs-location.ts +54 -0
- package/src/docs/docs.ts +12 -0
- package/src/docs/example/decorators-demo-bind-demos.ts +41 -46
- package/src/docs/example/decorators-demo-geo.ts +16 -11
- package/src/docs/example/decorators-demo-init.ts +2 -228
- package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +54 -14
- package/src/docs/example/decorators-demo.ts +71 -70
- package/src/docs/example/docs-api-config-demos.ts +234 -0
- package/src/docs/example/docs-joke-demos.ts +297 -0
- package/src/docs/example/docs-list-demos.ts +179 -0
- package/src/docs/example/docs-provider-keys.ts +315 -0
- package/src/docs/example/docs-queue-demos.ts +114 -0
- package/src/docs/example/docs-router-demos.ts +89 -0
- package/src/docs/example/docs-submit-demos.ts +455 -0
- package/src/docs/example/docs-toggle-demos.ts +73 -0
- package/src/docs/example/docs-user-two-scopes.ts +37 -0
- package/src/docs/example/docs-users-list.ts +71 -0
- package/src/docs/example/users.ts +41 -24
- package/src/docs/mock-api/api-config-mock.ts +152 -0
- package/src/docs/mock-api/fixtures.ts +377 -0
- package/src/docs/mock-api/register.ts +25 -0
- package/src/docs/mock-api/router.ts +234 -0
- package/src/docs/mock-api/service-worker.ts +23 -0
- package/src/docs/mock-api/urls.ts +11 -0
- package/src/docs/navigation/navigation.ts +39 -7
- package/src/docs/search/docs-search.json +4021 -936
- package/src/docs/search/markdown-renderer.ts +7 -3
- package/src/docs/search/page.ts +11 -14
- package/src/docs/search/sonic-code-markdown.spec.ts +29 -0
- package/src/docs/search/sonic-code-markdown.ts +28 -0
- package/src/docs.ts +4 -0
- package/src/tsconfig.json +87 -0
- package/src/tsconfig.tsbuildinfo +1 -1
- package/vite.config.mts +8 -0
- package/docs/assets/index-CaysOMFz.js +0 -5046
- package/docs/assets/index-D8mGoXzF.css +0 -1
- package/docs/src/docs/_misc/templates-demo.md +0 -19
- package/src/docs/_misc/templates-demo.md +0 -19
package/.gitlab-ci.yml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
stages:
|
|
2
|
+
- test
|
|
3
|
+
|
|
4
|
+
variables:
|
|
5
|
+
GIT_STRATEGY: clone
|
|
6
|
+
GIT_DEPTH: "0"
|
|
7
|
+
|
|
8
|
+
# TESTS : sur les Merge Requests ET sur les push dans master
|
|
9
|
+
tests:
|
|
10
|
+
stage: test
|
|
11
|
+
tags:
|
|
12
|
+
- ssks7
|
|
13
|
+
rules:
|
|
14
|
+
# Dans le contexte d'une Merge Request
|
|
15
|
+
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
16
|
+
when: on_success
|
|
17
|
+
# Sur un push direct dans master
|
|
18
|
+
- if: '$CI_COMMIT_BRANCH == "master"'
|
|
19
|
+
when: on_success
|
|
20
|
+
# Sinon rien (push de branches sans MR)
|
|
21
|
+
- when: never
|
|
22
|
+
script:
|
|
23
|
+
- bash gitlab/job_tests.sh
|
package/README.md
CHANGED
|
@@ -1,101 +1,152 @@
|
|
|
1
1
|
# Concorde Framework
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`@supersoniks/concorde` — framework de composants Web basé sur Lit avec système de thèmes, data binding (décorateurs `@subscribe` / `@publish` / `@handle` / `@bind`...) et composants réutilisables.
|
|
4
|
+
|
|
5
|
+
## 📚 Documentation
|
|
6
|
+
|
|
7
|
+
La documentation en ligne (à jour) est disponible ici :
|
|
8
|
+
|
|
9
|
+
👉 **https://doc.concorde.test/**
|
|
10
|
+
|
|
11
|
+
Elle est générée à partir des fichiers `.md` du code source (`yarn build-docs`).Utilisation à vos risques — contributions et retours bienvenus !**
|
|
12
|
+
|
|
13
|
+
## 🤖 Agent IA (Cursor + JetBrains)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
> **Disclaimer : les règles n'ont encore été vraiment testées et seront msie a jour au fur et a mesure.
|
|
17
|
+
|
|
18
|
+
Règles et skills installables depuis `ai/` :
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
yarn ai-init
|
|
22
|
+
# ou dans un projet consommateur :
|
|
23
|
+
node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Installe `.cursor/skills`, `.cursor/rules`, `.aiassistant/rules` et `AGENTS.md`. Voir [ai/README.md](ai/README.md).
|
|
4
27
|
|
|
5
28
|
## 📁 Structure du projet
|
|
6
29
|
|
|
7
30
|
```
|
|
8
31
|
concorde/
|
|
9
32
|
├── src/ # Code source principal
|
|
10
|
-
│ ├── core/
|
|
11
|
-
│ │ ├── components/
|
|
12
|
-
│ │ ├──
|
|
13
|
-
│ │ ├──
|
|
14
|
-
│ │
|
|
15
|
-
│ ├──
|
|
16
|
-
│ └──
|
|
17
|
-
├── docs/
|
|
18
|
-
|
|
19
|
-
├──
|
|
20
|
-
├──
|
|
21
|
-
├──
|
|
22
|
-
|
|
33
|
+
│ ├── core/ # Cœur du framework
|
|
34
|
+
│ │ ├── components/ # Composants UI et fonctionnels
|
|
35
|
+
│ │ ├── decorators/ # Décorateurs (subscribe, publish, handle, bind...)
|
|
36
|
+
│ │ ├── directives/ # Directives Lit
|
|
37
|
+
│ │ ├── mixins/ # Mixins réutilisables
|
|
38
|
+
│ │ ├── utils/ # Utilitaires
|
|
39
|
+
│ │ └── _types/ # Types TypeScript
|
|
40
|
+
│ ├── docs/ # Sources de la documentation
|
|
41
|
+
│ └── index.ts # Point d'entrée principal
|
|
42
|
+
├── dist/ # Build de la librairie (généré)
|
|
43
|
+
├── docs/ # Documentation générée (généré)
|
|
44
|
+
├── public/ # Assets publics
|
|
45
|
+
├── gitlab/ # Scripts des jobs GitLab CI
|
|
46
|
+
├── scripts/ # Scripts de build / publication
|
|
47
|
+
├── vite.config.mts # Configuration Vite
|
|
48
|
+
├── tailwind.config.js # Configuration Tailwind
|
|
49
|
+
└── package.json # Configuration du package (yarn)
|
|
23
50
|
```
|
|
24
51
|
|
|
25
52
|
## 🎨 Composants disponibles
|
|
26
53
|
|
|
27
|
-
### Composants UI
|
|
28
|
-
- **Formulaires** : input, select, checkbox, radio, textarea
|
|
54
|
+
### Composants UI
|
|
55
|
+
- **Formulaires** : input, select, checkbox, radio, textarea, switch, fieldset
|
|
29
56
|
- **Navigation** : button, link, menu
|
|
30
|
-
- **Feedback** : alert, badge, modal, toast, tooltip
|
|
57
|
+
- **Feedback** : alert, alert-messages, badge, modal, toast, tooltip, progress
|
|
31
58
|
- **Layout** : card, table, divider, group
|
|
32
|
-
- **Media** : icon, image, loader
|
|
59
|
+
- **Media** : icon, image, loader
|
|
33
60
|
|
|
34
|
-
### Composants fonctionnels
|
|
61
|
+
### Composants fonctionnels
|
|
35
62
|
- **Data** : fetch, list, queue, subscriber, value
|
|
36
63
|
- **Navigation** : router, redirect, states
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
64
|
+
- **Logique** : if, submit, mix, translation
|
|
65
|
+
- **Avancé** : sdui (Server Driven UI)
|
|
66
|
+
|
|
67
|
+
## 🔗 Concepts clés : Endpoint, DataProvider / DataProviderKey & décorateurs
|
|
68
|
+
|
|
69
|
+
Le cœur de Concorde est un **data binding réactif**. Un **DataProvider** (publisher / store observable) détient les données ; les composants s'y **abonnent** ou y **publient** via des **décorateurs**, en ciblant soit un chemin typé local (**DataProviderKey**), soit une ressource distante (**Endpoint**).
|
|
70
|
+
|
|
71
|
+
```mermaid
|
|
72
|
+
flowchart LR
|
|
73
|
+
api[("API / Endpoint<T>")] -->|"@get"| dp["DataProvider (store)"]
|
|
74
|
+
dp -->|"@subscribe / @bind / @handle"| comp["Composant Lit"]
|
|
75
|
+
comp -->|"@publish / @bind"| dp
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Les briques de données
|
|
79
|
+
|
|
80
|
+
- **`DataProviderKey<T>`** — chemin **typé** en notation pointée vers une structure composite, ex. `new DataProviderKey<Data>("data").items[0]` → `"data.items.0"`. Navigation type-safe, chemins dynamiques via `${prop}`. Import : `@supersoniks/concorde/dataProviderKey`. Voir [la doc DataProviderKey](https://doc.concorde.test/#docs/_misc/dataProviderKey.md/dataProviderKey).
|
|
81
|
+
- **`Endpoint<T, U>`** — un **unique chemin HTTP** (sans notation pointée) portant le type de réponse `T` ; segments dynamiques `${...}`. Consommé par `@get`. Import : `@supersoniks/concorde/utils/endpoint`. Voir [la doc Endpoint](https://doc.concorde.test/#docs/_misc/endpoint.md/endpoint).
|
|
82
|
+
- **DataProvider** — le publisher observable qui notifie ses abonnés à chaque assignation.
|
|
83
|
+
|
|
84
|
+
### Les décorateurs (`src/core/decorators/subscriber/`)
|
|
85
|
+
|
|
86
|
+
| Décorateur | Rôle | Cible |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| `@subscribe(key)` | Liaison **lecture seule** : la propriété suit le publisher | `DataProviderKey<T>` |
|
|
89
|
+
| `@publish(key)` | Liaison **écriture seule** : assigner la propriété publie vers le chemin | `DataProviderKey<T>` |
|
|
90
|
+
| `@bind(path)` | Liaison **bidirectionnelle** (accepte aussi un chemin string) | chemin / clé |
|
|
91
|
+
| `@handle(...keys)` | Appelle une **méthode typée** à chaque assignation (effets de bord, calculs) | jusqu'à 3 `DataProviderKey<T>` |
|
|
92
|
+
| `@get(endpoint)` | Charge des données via l'API ; la propriété devient `ApiGetResult<T> \| null` | `Endpoint<T>` |
|
|
93
|
+
|
|
94
|
+
`DataProviderKey` est la pierre angulaire : c'est lui qui fournit les chemins **typés** utilisés par `@subscribe`, `@publish`, `@bind` et `@handle`, tandis que `Endpoint` fait le pont avec les données distantes via `@get`. Détails et exemples sur la [documentation des décorateurs](https://doc.concorde.test/#docs/_decorators/subscribe.md/subscribe).
|
|
39
95
|
|
|
40
96
|
## 🛠️ Développement
|
|
41
97
|
|
|
98
|
+
Le projet utilise **yarn** (voir `packageManager` dans `package.json`).
|
|
99
|
+
|
|
42
100
|
### Installation
|
|
43
101
|
```bash
|
|
44
|
-
npm install
|
|
45
|
-
# ou
|
|
46
102
|
yarn install
|
|
47
103
|
```
|
|
48
104
|
|
|
49
|
-
###
|
|
105
|
+
### Serveur de dev
|
|
50
106
|
```bash
|
|
51
|
-
npm run dev
|
|
52
|
-
# ou
|
|
53
107
|
yarn dev
|
|
54
108
|
```
|
|
109
|
+
Lance Vite sur `https://localhost:3000` (host `0.0.0.0`, SSL local).
|
|
55
110
|
|
|
56
|
-
### Build
|
|
111
|
+
### Build de la librairie
|
|
57
112
|
```bash
|
|
58
|
-
npm run build
|
|
59
|
-
# ou
|
|
60
113
|
yarn build
|
|
61
114
|
```
|
|
115
|
+
Produit `dist/` ainsi que `concorde-core.es.js` / `concorde-core.bundle.js`.
|
|
62
116
|
|
|
63
|
-
###
|
|
117
|
+
### Build de la documentation
|
|
64
118
|
```bash
|
|
65
|
-
|
|
66
|
-
# ou
|
|
67
|
-
yarn test
|
|
119
|
+
yarn build-docs
|
|
68
120
|
```
|
|
69
121
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
122
|
+
### Tests
|
|
123
|
+
```bash
|
|
124
|
+
yarn test # mode watch (développement)
|
|
125
|
+
yarn test:ci # exécution unique (utilisé par la CI)
|
|
126
|
+
```
|
|
75
127
|
|
|
76
128
|
## 🔧 Technologies
|
|
77
129
|
|
|
78
|
-
- **Lit
|
|
79
|
-
- **TypeScript**
|
|
80
|
-
- **Tailwind CSS**
|
|
81
|
-
- **Vite**
|
|
82
|
-
- **Vitest**
|
|
130
|
+
- **Lit** — Web Components
|
|
131
|
+
- **TypeScript** — langage principal
|
|
132
|
+
- **Tailwind CSS** — styles utilitaires
|
|
133
|
+
- **Vite** — build / dev server
|
|
134
|
+
- **Vitest** — tests (environnement jsdom)
|
|
83
135
|
|
|
84
|
-
##
|
|
136
|
+
## 🔁 Intégration continue (GitLab)
|
|
85
137
|
|
|
86
|
-
|
|
138
|
+
Le projet est hébergé sur GitLab et la CI est définie dans [.gitlab-ci.yml](.gitlab-ci.yml) :
|
|
87
139
|
|
|
88
|
-
|
|
140
|
+
- le job `tests` s'exécute sur les **Merge Requests** et sur les push dans **`master`** ;
|
|
141
|
+
- il tourne sur le runner `ssks7` et lance `yarn install` + `yarn test:ci` dans le conteneur `nodejs` (script [gitlab/job_tests.sh](gitlab/job_tests.sh)).
|
|
89
142
|
|
|
90
|
-
|
|
143
|
+
## 🤝 Contribution
|
|
91
144
|
|
|
92
|
-
1.
|
|
93
|
-
2.
|
|
94
|
-
3.
|
|
95
|
-
4.
|
|
96
|
-
5. Créer une Pull Request
|
|
145
|
+
1. Créer une branche à partir de `master`.
|
|
146
|
+
2. Faire ses modifications.
|
|
147
|
+
3. Vérifier les tests : `yarn test:ci`.
|
|
148
|
+
4. Ouvrir une **Merge Request** vers `master` (la CI lance les tests automatiquement).
|
|
97
149
|
|
|
98
|
-
##
|
|
150
|
+
## 📄 Licence
|
|
99
151
|
|
|
100
|
-
|
|
101
|
-
- **Documentation** : [docs/](docs/)
|
|
152
|
+
MIT — voir le fichier [LICENSE](LICENSE).
|
package/ai/AGENTS.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Agents — Concorde
|
|
2
|
+
|
|
3
|
+
Guide pour les agents IA sur un projet **Concorde** (Lit + DataProvider).
|
|
4
|
+
|
|
5
|
+
## Skills / rules (après installation)
|
|
6
|
+
|
|
7
|
+
| Fichier | Rôle |
|
|
8
|
+
|---------|------|
|
|
9
|
+
| `.cursor/skills/concorde/SKILL.md` | Patterns framework |
|
|
10
|
+
| `.cursor/skills/concorde-imports/SKILL.md` | Imports courts |
|
|
11
|
+
| `.cursor/skills/concorde-scope/SKILL.md` | Scope + APIConfiguration |
|
|
12
|
+
| `.cursor/skills/concorde-theme/SKILL.md` | Design tokens sonic-theme |
|
|
13
|
+
| `.cursor/skills/concorde-menu/SKILL.md` | Navigation sonic-menu |
|
|
14
|
+
| `.cursor/skills/concorde-get-set-dp/SKILL.md` | Migration get/set/dp + DataProviderKey statique |
|
|
15
|
+
| `.cursor/rules/concorde.mdc` | Règles Cursor (patterns) |
|
|
16
|
+
| `.aiassistant/rules/concorde.md` | Règles JetBrains AI Assistant |
|
|
17
|
+
|
|
18
|
+
Installation :
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Source : `@supersoniks/concorde/ai/`
|
|
25
|
+
|
|
26
|
+
## Imports dans ce dépôt (lib + doc)
|
|
27
|
+
|
|
28
|
+
Les chemins courts (`@supersoniks/concorde/list`, `/menu`, `/queue`, …) sont des **exports npm** pour les apps **externes**. Dans le repo Concorde (`src/docs`, `src/core`, démos), utiliser les chemins **réels** :
|
|
29
|
+
|
|
30
|
+
- Composants : `@supersoniks/concorde/core/components/…` ou import relatif (`../../core/components/functional/list/list`)
|
|
31
|
+
- Décorateurs : `@supersoniks/concorde/core/decorators/Subscriber` (ou `src/decorators.ts` via `@supersoniks/concorde/decorators` si résolu par l’alias Vite racine)
|
|
32
|
+
- `DataProviderKey` : `@supersoniks/concorde/core/utils/dataProviderKey`
|
|
33
|
+
|
|
34
|
+
Skill **`concorde-imports`** : section « Dans le dépôt Concorde ».
|
|
35
|
+
|
|
36
|
+
## Conventions impératives
|
|
37
|
+
|
|
38
|
+
- Toujours **DataProvider**, accès via **`get` / `set`**
|
|
39
|
+
- Pas de **`sonic-fetch`**, pas de **`PublisherManager`**
|
|
40
|
+
- Pas de `@onAssign` — **`@handle`** + `DataProviderKey`
|
|
41
|
+
- Pas de **`@bind`** sur les composants métier — **`@subscribe`** + `DataProviderKey<T, U>` (type + contraintes hôte `${…}`)
|
|
42
|
+
- Formulaires : **`formDataProvider`** + `name` sur `sonic-input`
|
|
43
|
+
- Listes : templates **Lit** (`.items`, `.separator`, `.noItems`, `.skeleton`) — pas de promotion des `<template>` HTML
|
|
44
|
+
- **Scope** (API/forms) ≠ **theme** (couleurs) — skills `concorde-scope` / `concorde-theme`
|
|
45
|
+
|
|
46
|
+
## Migration get / set / dp
|
|
47
|
+
|
|
48
|
+
Skill **`concorde-get-set-dp`** : chemins sans placeholder **`${…}`** / **`{$…}`** pour `get` / `set` / `dp` ; chemins JS évalués OK ; clés dynamiques → décorateurs, `dp(idRésolu)`, ou **`sub(clé)`** dans les templates Lit.
|
|
49
|
+
|
|
50
|
+
## Documentation
|
|
51
|
+
|
|
52
|
+
Fichiers `.md` dans le package : `node_modules/@supersoniks/concorde/src/` (composants, décorateurs, getting-started).
|
package/ai/README.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Agent IA — Concorde
|
|
2
|
+
|
|
3
|
+
Fichiers installables pour **Cursor** et **JetBrains AI Assistant**.
|
|
4
|
+
|
|
5
|
+
## Installation dans un projet
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Options :
|
|
12
|
+
|
|
13
|
+
- `--overlay <dir>` — couche additionnelle (ex. kit starter)
|
|
14
|
+
- `--merge-agents` — fusionne avec un `AGENTS.md` existant
|
|
15
|
+
- `--cursor-only` / `--jetbrains-only`
|
|
16
|
+
|
|
17
|
+
Depuis le dépôt Concorde (dev) : `yarn ai-init`
|
|
18
|
+
|
|
19
|
+
## Contenu
|
|
20
|
+
|
|
21
|
+
| Dossier | Cible |
|
|
22
|
+
|---------|--------|
|
|
23
|
+
| `skills/` | `.cursor/skills/` (concorde, imports, scope, theme, menu) |
|
|
24
|
+
| `cursor/rules/` | `.cursor/rules/` |
|
|
25
|
+
| `jetbrains/rules/` | `.aiassistant/rules/` |
|
|
26
|
+
| `AGENTS.md` | racine du projet |
|
|
27
|
+
|
|
28
|
+
## Template starter
|
|
29
|
+
|
|
30
|
+
Le package `create-concorde-ts-starter` ajoute un overlay via `yarn ai:sync`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Navigation Concorde — sonic-menu, sonic-menu-item, sonic-divider
|
|
3
|
+
globs: **/{layout,sidebar,nav,docs-shell,routes}/**
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Navigation Concorde
|
|
8
|
+
|
|
9
|
+
1. **`sonic-menu`** + **`sonic-menu-item`** — pas une liste de boutons ghost.
|
|
10
|
+
2. Sections : **`sonic-divider`** (`label`, `align="left"`, `size="sm"`).
|
|
11
|
+
3. Liens internes : `pushstate` + `href` + `autoActive="strict"`.
|
|
12
|
+
|
|
13
|
+
Référence : `.cursor/skills/concorde-menu/SKILL.md`
|
|
14
|
+
|
|
15
|
+
Pas de tirets dans les noms de dossiers de routes (générateur Concorde).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Scope — inherited API, form, icon defaults (not theme)
|
|
3
|
+
globs: **/*.{ts,tsx,html}
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Scope
|
|
8
|
+
|
|
9
|
+
Skill **`concorde-scope`**
|
|
10
|
+
|
|
11
|
+
- `<sonic-scope>` — light DOM, attributes inherited by descendants
|
|
12
|
+
- API: `serviceURL`, `token`, `credentials` → `@get`, list, queue
|
|
13
|
+
- Or: `DataProviderKey<APIConfiguration>` as 2nd arg to `@get`
|
|
14
|
+
- Not for colors/fonts — use **`concorde-theme`**
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: sonic-theme — design tokens, not API scope
|
|
3
|
+
globs: **/*.{ts,tsx,css,html}
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Theme
|
|
8
|
+
|
|
9
|
+
Skill **`concorde-theme`**
|
|
10
|
+
|
|
11
|
+
- `<sonic-theme background color font>` + `--sc-*` CSS variables
|
|
12
|
+
- `theme="dark"` for built-in dark palette
|
|
13
|
+
- Not for `serviceURL` / API — use **`concorde-scope`**
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Patterns Concorde — DataProvider, décorateurs, templates Lit list/queue, pas sonic-fetch
|
|
3
|
+
globs: **/*.{ts,tsx,js,mjs}
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Concorde — patterns
|
|
8
|
+
|
|
9
|
+
Référence : `.cursor/skills/concorde/SKILL.md` + `.cursor/skills/concorde-imports/SKILL.md`
|
|
10
|
+
Migration get/set/dp : `.cursor/skills/concorde-get-set-dp/SKILL.md`
|
|
11
|
+
|
|
12
|
+
## Imports
|
|
13
|
+
|
|
14
|
+
**Apps externes** : chemins courts (`@supersoniks/concorde/list`, `/menu`, `/decorators`, …) — voir skill `concorde-imports`.
|
|
15
|
+
|
|
16
|
+
**Dépôt Concorde (lib + doc)** : chemins longs ou relatifs — ex. `core/components/functional/list/list`, `core/decorators/Subscriber`, `core/utils/dataProviderKey`. Pas `@supersoniks/concorde/list` ici.
|
|
17
|
+
|
|
18
|
+
## Vocabulaire
|
|
19
|
+
|
|
20
|
+
- **DataProvider** (jamais « publisher »)
|
|
21
|
+
- Accès : **`get` / `set`** — pas `PublisherManager`
|
|
22
|
+
|
|
23
|
+
## Interdits (nouveau code)
|
|
24
|
+
|
|
25
|
+
- `sonic-fetch` → `sonic-queue` + filtre, ou `@get`
|
|
26
|
+
- `@onAssign` → `@handle` + `DataProviderKey`
|
|
27
|
+
- `@bind` → `@subscribe` + `DataProviderKey<T, U>` (pas sur composants métier)
|
|
28
|
+
- `data-bind` HTML → `@subscribe` / `sub()`
|
|
29
|
+
- `sonic-input` + `@input` → `formDataProvider` + `name`
|
|
30
|
+
- Templates HTML sur list/queue → `.items`, `.separator`, `.noItems`, `.skeleton`
|
|
31
|
+
|
|
32
|
+
## DataProviderKey dynamique
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
new DataProviderKey<T, { userIndex: number }>("users.${userIndex}")
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Placeholder `${prop}` = chaîne normale, résolu depuis le composant hôte.
|
|
39
|
+
|
|
40
|
+
## get / set / dp vs sub()
|
|
41
|
+
|
|
42
|
+
- **`get` / `set` / `dp`** : pas de `${` / `{$` dans la string passée (clé statique ou chemin JS évalué).
|
|
43
|
+
- **`sub(chemin | DataProviderKey)`** : dynamique OK dans les templates (placeholders `${…}` sur l’hôte).
|
|
44
|
+
- Clé dynamique → décorateur ou `dp(idRésolu)`, pas `dp(cléAvecPlaceholder)`.
|
|
45
|
+
|
|
46
|
+
## Scope / theme
|
|
47
|
+
|
|
48
|
+
- **Scope** : `<sonic-scope serviceURL="…">` · `@get(endpoint)` ou `@get(endpoint, apiConfigKey)` — skills `concorde-scope`
|
|
49
|
+
- **Theme** : `<sonic-theme background color font>` · `--sc-*` — skill `concorde-theme`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Concorde — patterns agent
|
|
2
|
+
|
|
3
|
+
Référence doc : fichiers `.md` dans `node_modules/@supersoniks/concorde/src/`.
|
|
4
|
+
|
|
5
|
+
## Imports
|
|
6
|
+
|
|
7
|
+
**Apps externes** : chemins courts (`/menu`, `/list`, `/decorators`, `/dataProviderKey`, …).
|
|
8
|
+
|
|
9
|
+
**Dépôt Concorde (lib + doc)** : `core/components/functional/list/list`, `core/decorators/Subscriber`, `core/utils/dataProviderKey` — pas `@supersoniks/concorde/list` ici.
|
|
10
|
+
|
|
11
|
+
## Vocabulaire
|
|
12
|
+
|
|
13
|
+
- **DataProvider** (jamais « publisher »)
|
|
14
|
+
- Accès : **get / set** — pas PublisherManager
|
|
15
|
+
|
|
16
|
+
## Interdits (nouveau code)
|
|
17
|
+
|
|
18
|
+
- sonic-fetch → sonic-queue + filtre, ou @get
|
|
19
|
+
- @onAssign → @handle + DataProviderKey
|
|
20
|
+
- data-bind HTML → @subscribe / sub()
|
|
21
|
+
- sonic-input + @input → formDataProvider + name
|
|
22
|
+
- Templates HTML list/queue → .items, .separator, .noItems, .skeleton
|
|
23
|
+
- Chemins longs ui/…, functional/…, core/… quand un alias racine existe
|
|
24
|
+
|
|
25
|
+
## DataProviderKey dynamique
|
|
26
|
+
|
|
27
|
+
Placeholder `${prop}` dans une chaîne normale : `"users.${userIndex}"`.
|
|
28
|
+
|
|
29
|
+
## Scope vs theme
|
|
30
|
+
|
|
31
|
+
- **Scope** (`sonic-scope`) : `serviceURL`, `formDataProvider`, icônes — skill `concorde-scope`
|
|
32
|
+
- **Theme** (`sonic-theme`) : `--sc-*` tokens, dark mode — skill `concorde-theme`
|
|
33
|
+
- `@get(endpoint)` sans clé config → hérite scope ; `@get(endpoint, apiConfigKey)` → DataProvider
|
|
34
|
+
|
|
35
|
+
## Navigation
|
|
36
|
+
|
|
37
|
+
sonic-menu + sonic-menu-item + sonic-divider. pushstate + autoActive="strict".
|
|
38
|
+
|
|
39
|
+
Pas de tirets dans les noms de dossiers routes.
|