@supersoniks/concorde 4.7.3 → 4.8.0
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/README.md +1 -1
- package/ai/AGENTS.md +4 -0
- package/ai/cursor/rules/concorde.mdc +11 -1
- package/ai/jetbrains/rules/concorde.md +8 -0
- package/ai/skills/concorde/SKILL.md +29 -2
- package/ai/skills/concorde-scope/SKILL.md +2 -2
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +289 -289
- package/concorde-core.es.js +4839 -4546
- package/dist/concorde-core.bundle.js +289 -289
- package/dist/concorde-core.es.js +4839 -4546
- package/dist/docs-mock-api-sw.js +19 -0
- package/dist/docs-mock-api-sw.js.map +2 -2
- package/dist/robots.txt +2 -0
- package/docs/assets/index-wyNMyWT9.js +11196 -0
- package/docs/docs-mock-api-sw.js +19 -0
- package/docs/docs-mock-api-sw.js.map +2 -2
- package/docs/index.html +1 -1
- package/docs/robots.txt +2 -0
- package/package.json +9 -1
- package/public/docs-mock-api-sw.js +19 -0
- package/public/docs-mock-api-sw.js.map +2 -2
- package/public/robots.txt +2 -0
- package/src/core/components/functional/example/example.ts +3 -3
- package/src/core/components/ui/captcha/captcha.md +0 -12
- package/src/core/components/ui/icon/icon.ts +17 -2
- package/src/core/components/ui/menu/menu.ts +12 -3
- package/src/core/decorators/api.post.spec.ts +293 -0
- package/src/core/decorators/api.spec.ts +7 -14
- package/src/core/decorators/api.ts +648 -15
- package/src/core/decorators/subscriber/bind.ts +13 -5
- package/src/core/decorators/subscriber/dynamicPath.spec.ts +53 -0
- package/src/core/decorators/subscriber/dynamicPath.ts +23 -1
- package/src/core/decorators/subscriber/handle.ts +3 -1
- package/src/core/decorators/subscriber/onAssign.ts +10 -2
- package/src/core/decorators/subscriber/publish.ts +12 -2
- package/src/core/utils/PublisherProxy.ts +95 -11
- package/src/core/utils/api.ts +72 -3
- package/src/core/utils/dpOptions.spec.ts +56 -0
- package/src/core/utils/endpoint.ts +3 -3
- package/src/decorators.ts +17 -1
- package/src/docs/_core-concept/dataFlow.md +9 -3
- package/src/docs/_decorators/bind.md +2 -2
- package/src/docs/_decorators/get.md +13 -4
- package/src/docs/_decorators/handle.md +5 -1
- package/src/docs/_decorators/on-assign.md +2 -0
- package/src/docs/_decorators/patch.md +45 -0
- package/src/docs/_decorators/post.md +93 -0
- package/src/docs/_decorators/publish.md +1 -1
- package/src/docs/_decorators/put.md +43 -0
- package/src/docs/_decorators/subscribe.md +4 -1
- package/src/docs/_directives/sub.md +1 -1
- package/src/docs/_getting-started/my-first-component.md +1 -1
- package/src/docs/_misc/api-configuration.md +3 -1
- package/src/docs/_misc/dataProviderKey.md +2 -2
- package/src/docs/_misc/dynamic-path.md +71 -0
- package/src/docs/_misc/endpoint.md +5 -3
- package/src/docs/components/docs-demo-sources.ts +102 -3
- package/src/docs/components/docs-lit-demo-raw.ts +2 -26
- package/src/docs/components/docs-lit-demo.ts +9 -42
- package/src/docs/components/docs-source-excerpt.ts +53 -0
- package/src/docs/components/docs-source-link.ts +24 -8
- package/src/docs/components/docs-source-raw.ts +34 -0
- package/src/docs/example/decorators-demo-geo.ts +2 -2
- package/src/docs/example/decorators-demo-post.ts +249 -0
- package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +5 -5
- package/src/docs/example/decorators-demo.ts +1 -0
- package/src/docs/example/docs-api-config-demos.ts +5 -5
- package/src/docs/mock-api/router.ts +20 -0
- package/src/docs/navigation/navigation.ts +16 -0
- package/src/docs/search/docs-search.json +540 -15
- package/src/tsconfig.json +24 -0
- package/src/tsconfig.tsbuildinfo +1 -1
- package/vite.config.mts +1 -1
- package/docs/assets/index-D9pxaQYK.js +0 -7508
- package/docs/src/core/components/functional/date/date.md +0 -290
- package/docs/src/core/components/functional/fetch/fetch.md +0 -125
- package/docs/src/core/components/functional/if/if.md +0 -9
- package/docs/src/core/components/functional/list/list.md +0 -65
- package/docs/src/core/components/functional/mix/mix.md +0 -41
- package/docs/src/core/components/functional/queue/queue.md +0 -72
- package/docs/src/core/components/functional/router/router.md +0 -94
- package/docs/src/core/components/functional/sdui/default-library.json +0 -108
- package/docs/src/core/components/functional/sdui/example.json +0 -99
- package/docs/src/core/components/functional/sdui/sdui.md +0 -356
- package/docs/src/core/components/functional/states/states.md +0 -87
- package/docs/src/core/components/functional/submit/submit.md +0 -114
- package/docs/src/core/components/functional/subscriber/subscriber.md +0 -91
- package/docs/src/core/components/functional/value/value.md +0 -35
- package/docs/src/core/components/ui/alert/alert.md +0 -121
- package/docs/src/core/components/ui/alert-messages/alert-messages.md +0 -0
- package/docs/src/core/components/ui/badge/badge.md +0 -127
- package/docs/src/core/components/ui/button/button.md +0 -182
- package/docs/src/core/components/ui/captcha/captcha.md +0 -24
- package/docs/src/core/components/ui/card/card.md +0 -97
- package/docs/src/core/components/ui/divider/divider.md +0 -35
- package/docs/src/core/components/ui/form/checkbox/checkbox.md +0 -77
- package/docs/src/core/components/ui/form/fieldset/fieldset.md +0 -129
- package/docs/src/core/components/ui/form/form-actions/form-actions.md +0 -77
- package/docs/src/core/components/ui/form/form-layout/form-layout.md +0 -44
- package/docs/src/core/components/ui/form/input/input.md +0 -142
- package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -133
- package/docs/src/core/components/ui/form/radio/radio.md +0 -57
- package/docs/src/core/components/ui/form/select/select.md +0 -71
- package/docs/src/core/components/ui/form/switch/switch.md +0 -57
- package/docs/src/core/components/ui/form/textarea/textarea.md +0 -65
- package/docs/src/core/components/ui/group/group.md +0 -75
- package/docs/src/core/components/ui/icon/icon.md +0 -125
- package/docs/src/core/components/ui/icon/icons.json +0 -1
- package/docs/src/core/components/ui/image/image.md +0 -107
- package/docs/src/core/components/ui/link/link.md +0 -43
- package/docs/src/core/components/ui/loader/loader.md +0 -55
- package/docs/src/core/components/ui/menu/menu.md +0 -329
- package/docs/src/core/components/ui/modal/modal.md +0 -119
- package/docs/src/core/components/ui/pop/pop.md +0 -96
- package/docs/src/core/components/ui/progress/progress.md +0 -63
- package/docs/src/core/components/ui/table/table.md +0 -455
- package/docs/src/core/components/ui/toast/toast.md +0 -166
- package/docs/src/core/components/ui/tooltip/tooltip.md +0 -82
- package/docs/src/docs/_core-concept/dataFlow.md +0 -73
- 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 -79
- 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 -68
- package/docs/src/docs/_decorators/handle.md +0 -171
- package/docs/src/docs/_decorators/on-assign.md +0 -388
- package/docs/src/docs/_decorators/publish.md +0 -55
- package/docs/src/docs/_decorators/subscribe.md +0 -97
- 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/ai-agents.md +0 -56
- 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/create-a-component.md +0 -139
- package/docs/src/docs/_getting-started/my-first-component.md +0 -236
- 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/api-configuration.md +0 -79
- package/docs/src/docs/_misc/dataProviderKey.md +0 -168
- package/docs/src/docs/_misc/docs-mock-api.md +0 -60
- package/docs/src/docs/_misc/endpoint.md +0 -43
- package/docs/src/docs/_misc/html-integration.md +0 -13
- package/docs/src/docs/search/docs-search.json +0 -8532
- package/docs/src/tag-list.json +0 -1
- package/docs/src/tsconfig-model.json +0 -23
- package/docs/src/tsconfig.json +0 -1050
- package/php/get-challenge.php +0 -34
- package/php/some-service.php +0 -42
package/README.md
CHANGED
|
@@ -89,7 +89,7 @@ flowchart LR
|
|
|
89
89
|
| `@publish(key)` | Liaison **écriture seule** : assigner la propriété publie vers le chemin | `DataProviderKey<T>` |
|
|
90
90
|
| `@bind(path)` | Liaison **bidirectionnelle** (accepte aussi un chemin string) | chemin / clé |
|
|
91
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 `
|
|
92
|
+
| `@get(endpoint)` | Charge des données via l'API ; la propriété devient `ApiResult<T> \| null` | `Endpoint<T>` |
|
|
93
93
|
|
|
94
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).
|
|
95
95
|
|
package/ai/AGENTS.md
CHANGED
|
@@ -47,6 +47,10 @@ Skill **`concorde-imports`** : section « Dans le dépôt Concorde ».
|
|
|
47
47
|
|
|
48
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
49
|
|
|
50
|
+
## Migration Subscriber / sonic-fetch
|
|
51
|
+
|
|
52
|
+
Skill **`concorde`** — section **« Piège migration Subscriber → LitElement »** : ne pas laisser des `@property` orphelines après retrait du mixin ; `@get` + `@subscribe` feuille ; `apiConfigKey` en modale ; sync des noms de props pour les `Endpoint` dynamiques.
|
|
53
|
+
|
|
50
54
|
## Documentation
|
|
51
55
|
|
|
52
56
|
Fichiers `.md` dans le package : `node_modules/@supersoniks/concorde/src/` (composants, décorateurs, getting-started).
|
|
@@ -18,7 +18,7 @@ Migration get/set/dp : `.cursor/skills/concorde-get-set-dp/SKILL.md`
|
|
|
18
18
|
## Vocabulaire
|
|
19
19
|
|
|
20
20
|
- **DataProvider** (jamais « publisher »)
|
|
21
|
-
- Accès : **`get` / `
|
|
21
|
+
- Accès impératif : **`dp(clé).get()` / `.set()` / `.invalidate()`** ou `get(clé)` / `set(clé, v)` — **jamais** `PublisherManager.getInstance()` ni `PublisherManager.get()` dans le code métier (bootstrap `dp.ts` excepté)
|
|
22
22
|
|
|
23
23
|
## Interdits (nouveau code)
|
|
24
24
|
|
|
@@ -47,3 +47,13 @@ Placeholder `${prop}` = chaîne normale, résolu depuis le composant hôte.
|
|
|
47
47
|
|
|
48
48
|
- **Scope** : `<sonic-scope serviceURL="…">` · `@get(endpoint)` ou `@get(endpoint, apiConfigKey)` — skills `concorde-scope`
|
|
49
49
|
- **Theme** : `<sonic-theme background color font>` · `--sc-*` — skill `concorde-theme`
|
|
50
|
+
|
|
51
|
+
## Migration Subscriber / sonic-fetch (piège fréquent)
|
|
52
|
+
|
|
53
|
+
- Retirer `extends Subscriber` **sans** `@subscribe` sur chaque champ affiché → UI vide (props orphelines).
|
|
54
|
+
- Remplacer `sonic-fetch` : `@get` + alimenter le DP ; UI en `@subscribe` feuille ou hôte `Subscriber` + `dataProvider`/`subDataProvider`.
|
|
55
|
+
- `@get` + placeholders `${prop}` : propriétés homonymes sur l'hôte (ou sync dans `willUpdate`).
|
|
56
|
+
- Modale / portal : `@get(endpoint, apiConfigKey)` si pas de `serviceURL` ascendant.
|
|
57
|
+
- `@subscribe` → préférer `@state()`, pas `@property`.
|
|
58
|
+
|
|
59
|
+
Détail : skill `concorde` — section « Piège migration Subscriber → LitElement ».
|
|
@@ -31,6 +31,14 @@ Placeholder `${prop}` dans une chaîne normale : `"users.${userIndex}"`.
|
|
|
31
31
|
- **Scope** (`sonic-scope`) : `serviceURL`, `formDataProvider`, icônes — skill `concorde-scope`
|
|
32
32
|
- **Theme** (`sonic-theme`) : `--sc-*` tokens, dark mode — skill `concorde-theme`
|
|
33
33
|
- `@get(endpoint)` sans clé config → hérite scope ; `@get(endpoint, apiConfigKey)` → DataProvider
|
|
34
|
+
- Modale / portal : préférer `apiConfigKey` si pas de scope DOM fiable
|
|
35
|
+
|
|
36
|
+
## Migration Subscriber / sonic-fetch
|
|
37
|
+
|
|
38
|
+
- Ne pas retirer `Subscriber` sans `@subscribe` feuille par feuille sur chaque champ du `render()`.
|
|
39
|
+
- `sonic-fetch` → `@get` + DP ; `@subscribe` ou hôte `Subscriber` avec `dataProvider`/`subDataProvider`.
|
|
40
|
+
- Placeholders Endpoint = propriétés homonymes sur l'hôte (`checkCode` → copier vers `code` si besoin).
|
|
41
|
+
- `@subscribe` + `@state()`, pas `@property` pour la lecture DP.
|
|
34
42
|
|
|
35
43
|
## Navigation
|
|
36
44
|
|
|
@@ -195,6 +195,32 @@ Après `initPublisher`, refléter le chemin résolu sur l’attribut (ex. `app/c
|
|
|
195
195
|
|
|
196
196
|
**Liste / queue** : chaque ligne a son publisher — l’hôte **hérite** de l’ancêtre ; ne pas forcer `app.currentSession` sur un item de liste.
|
|
197
197
|
|
|
198
|
+
### Piège migration `Subscriber` → `LitElement` (checklist)
|
|
199
|
+
|
|
200
|
+
Lors du remplacement de `sonic-fetch` ou du retrait du mixin `Subscriber` sur un composant **métier** :
|
|
201
|
+
|
|
202
|
+
| Étape | Vérification |
|
|
203
|
+
|-------|----------------|
|
|
204
|
+
| Champs affichés dans `render()` | Chaque `@property` autrefois remplie par template filling → **`@subscribe(dpKey.feuille)` + `@state()`** (pas laisser des `@property` orphelins) |
|
|
205
|
+
| Enfant d’un `@get` | `@get` + `@publish`/`@handle` vers le DataProvider cible ; l’UI lit ce DP via `@subscribe`, pas via des props vides |
|
|
206
|
+
| Placeholders `Endpoint` | Les noms `${prop}` doivent exister sur l’hôte (`@property` ou copie dans `willUpdate` si le scan utilise un autre nom, ex. `checkCode` → `code`) |
|
|
207
|
+
| Modale / portal | `@get(endpoint, apiConfigKey)` si pas de `serviceURL` ascendant fiable (`Modal` → `Theme.getPopContainer()`) |
|
|
208
|
+
| Remplacement `sonic-fetch` | Expliciter `dataProvider` + `subDataProvider` sur les hôtes `Subscriber` enfants (ex. `app` + `currentScanTicket`) |
|
|
209
|
+
|
|
210
|
+
```typescript
|
|
211
|
+
// ❌ — Subscriber retiré, props jamais alimentées
|
|
212
|
+
export class TicketInfos extends LitElement {
|
|
213
|
+
@property({ type: Object }) owner = {};
|
|
214
|
+
render() { return html`${this.owner?.firstName}`; }
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// ✅ — une souscription par champ affiché
|
|
218
|
+
@subscribe(dpKeys.currentScanTicket.owner)
|
|
219
|
+
@state() owner: Contact = {};
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**`@subscribe` + décorateur Lit** : préférer **`@state()`** (pas `@property`) pour les champs purement lus depuis le DataProvider.
|
|
223
|
+
|
|
198
224
|
## formDataProvider
|
|
199
225
|
|
|
200
226
|
```html
|
|
@@ -254,9 +280,10 @@ Propriétés Lit (recommandé) :
|
|
|
254
280
|
| `PublisherManager.get(…)` | `get(…)` ou `set(…)` |
|
|
255
281
|
| « publisher » | DataProvider |
|
|
256
282
|
| `sonic-input` + `@input` | `formDataProvider` + `name` |
|
|
257
|
-
| `sonic-fetch` | `sonic-queue` + filtre, ou `@get` |
|
|
258
|
-
| `extends Subscriber(LitElement)` (métier seul) | `LitElement` + `@subscribe` feuille par feuille / `sub()` |
|
|
283
|
+
| `sonic-fetch` | `sonic-queue` + filtre, ou `@get` + `@publish`/`@handle` + `@subscribe` / hôte `Subscriber` |
|
|
284
|
+
| `extends Subscriber(LitElement)` (métier seul) | `LitElement` + `@subscribe` feuille par feuille / `sub()` — **ne pas oublier** les champs template-filled |
|
|
259
285
|
| `extends Subscriber` (hôte d’enfants sonic) | Conserver `Subscriber` + `dataProvider` / `subDataProvider` corrects |
|
|
286
|
+
| `@get` dans modale | `@get(endpoint, apiConfigKey)` si config API hors scope DOM |
|
|
260
287
|
| `data-bind` HTML | `@subscribe` / `sub()` |
|
|
261
288
|
| `@bind` décorateur | `@subscribe` + `DataProviderKey` (lecture) ou `@publish` (écriture) |
|
|
262
289
|
| `@onAssign` | `@handle` + `DataProviderKey` |
|
|
@@ -47,7 +47,7 @@ Type : `@supersoniks/concorde/utils/api`.
|
|
|
47
47
|
|
|
48
48
|
```typescript
|
|
49
49
|
@get(usersEndpoint) // pas de 2ᵉ arg — hérite serviceURL
|
|
50
|
-
@state() data:
|
|
50
|
+
@state() data: ApiResult<Users> | null = null;
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
**2. DataProvider** — objet typé :
|
|
@@ -59,7 +59,7 @@ const apiKey = new DataProviderKey<APIConfiguration>("myApi");
|
|
|
59
59
|
set(apiKey, { serviceURL: "https://api.example.com", credentials: "same-origin" });
|
|
60
60
|
|
|
61
61
|
@get(usersEndpoint, apiKey)
|
|
62
|
-
@state() data:
|
|
62
|
+
@state() data: ApiResult<Users> | null = null;
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
Les deux patterns peuvent coexister (scope pour l’URL par défaut, clé explicite quand nécessaire).
|
package/build-infos.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"date":
|
|
1
|
+
{"date":1781160844}
|