@supersoniks/concorde 3.3.2 → 4.0.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/build-infos.json +1 -1
- package/concorde-core.bundle.js +154 -154
- package/concorde-core.es.js +2366 -2356
- package/dist/concorde-core.bundle.js +154 -154
- package/dist/concorde-core.es.js +2366 -2356
- package/package.json +1 -4
- package/src/core/_types/types.ts +1 -1
- package/src/core/components/functional/queue/queue.ts +3 -4
- package/src/core/components/functional/states/states.demo.ts +5 -2
- package/src/core/components/functional/states/states.spec.ts +14 -13
- package/src/core/components/functional/submit/submit.ts +2 -2
- package/src/core/components/ui/captcha/captcha.ts +16 -12
- package/src/core/components/ui/form/input-autocomplete/input-autocomplete.ts +41 -7
- package/src/core/components/ui/pop/pop.ts +6 -6
- package/src/core/components/ui/theme/theme.ts +3 -3
- package/src/core/decorators/subscriber/bind.ts +2 -2
- package/src/core/decorators/subscriber/onAssign.ts +6 -4
- package/src/core/directives/DataProvider.ts +47 -60
- package/src/core/directives/Wording.ts +4 -4
- package/src/core/mixins/FormCheckable.ts +12 -12
- package/src/core/mixins/FormElement.ts +1 -1
- package/src/core/utils/PublisherProxy.ts +260 -178
- package/src/core/utils/Utils.ts +3 -0
- package/src/core/utils/api.ts +4 -6
- package/src/dataprovider.ts +1 -0
- package/src/directives.ts +27 -13
- package/src/docs/_misc/on-assign.md +5 -5
- package/src/docs/search/docs-search.json +70 -0
- package/src/tsconfig.json +0 -9
- package/src/tsconfig.tsbuildinfo +1 -1
- package/src/utils.ts +2 -4
- package/mcp-server/COMPARISON-MCP.md +0 -176
- package/mcp-server/README-MCP-NODEJS.md +0 -284
- package/mcp-server/README-MCP.md +0 -114
- package/mcp-server/README.md +0 -127
- package/mcp-server/TECHNICAL-DOCS.md +0 -269
- package/mcp-server/concorde-mcp-server.js +0 -859
- package/mcp-server/concorde-mcp-server.py +0 -801
- package/mcp-server/cursor-mcp-config-advanced.json +0 -68
- package/mcp-server/cursor-mcp-config-nodejs.json +0 -74
- package/mcp-server/cursor-mcp-config.json +0 -11
- package/mcp-server/install-mcp-nodejs.sh +0 -104
- package/mcp-server/install-mcp.sh +0 -62
- package/mcp-server/package-lock.json +0 -147
- package/mcp-server/package-mcp.json +0 -40
- package/mcp-server/package.json +0 -40
- package/mcp-server/test-mcp.js +0 -107
- package/mcp-server/test-mcp.py +0 -73
- package/src/core/components/ui/toast/message-subscriber.stories.ts +0 -43
package/src/directives.ts
CHANGED
|
@@ -1,21 +1,35 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as directives from "@supersoniks/concorde/core/directives/DataProvider";
|
|
2
|
+
import {dp as pubDp, dataProvider as pubDataProvider, get as pubGet, set as pubSet} from "@supersoniks/concorde/core/utils/PublisherProxy";
|
|
2
3
|
|
|
3
4
|
import {ConcordeWindow} from "./core/_types/types";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export const
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated @see pubDp
|
|
7
|
+
*/
|
|
8
|
+
export const dp = pubDp;
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated @see pubDataProvider
|
|
11
|
+
*/
|
|
12
|
+
export const dataProvider = pubDataProvider;
|
|
13
|
+
export const subscribe = directives.subscribe;
|
|
14
|
+
export const sub = directives.sub;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated @see pubGet
|
|
18
|
+
*/
|
|
19
|
+
export const get = pubGet;
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated @see pubSet
|
|
22
|
+
*/
|
|
23
|
+
export const set = pubSet;
|
|
10
24
|
|
|
11
25
|
declare const window: ConcordeWindow;
|
|
12
26
|
|
|
13
27
|
window["concorde-directives-data-provider"] = window["concorde-directives-data-provider"] || {};
|
|
14
28
|
window["concorde-directives-data-provider"] = {
|
|
15
|
-
dp:
|
|
16
|
-
dataProvider:
|
|
17
|
-
sub:
|
|
18
|
-
subscribe:
|
|
19
|
-
get:
|
|
20
|
-
set:
|
|
29
|
+
dp: pubDp,
|
|
30
|
+
dataProvider: pubDataProvider,
|
|
31
|
+
sub: directives.sub,
|
|
32
|
+
subscribe: directives.subscribe,
|
|
33
|
+
get: pubGet,
|
|
34
|
+
set: pubSet,
|
|
21
35
|
};
|
|
@@ -138,7 +138,7 @@ export class DemoOnAssignDynamic extends LitElement {
|
|
|
138
138
|
//
|
|
139
139
|
@state() user: any = null;
|
|
140
140
|
@state() userSettings: any = null;
|
|
141
|
-
|
|
141
|
+
//
|
|
142
142
|
@onAssign("${dataProvider}.${userIndex}", "${dataProvider}Settings.${userIndex}")
|
|
143
143
|
handleUserDataReady(user: any, settings: any) {
|
|
144
144
|
this.user = user;
|
|
@@ -168,7 +168,7 @@ export class DemoOnAssignDynamic extends LitElement {
|
|
|
168
168
|
settingsPublisher,
|
|
169
169
|
[String(this.userIndex)]
|
|
170
170
|
) as PublisherProxy;
|
|
171
|
-
|
|
171
|
+
//
|
|
172
172
|
if (userPublisher && settingPublisher) {
|
|
173
173
|
// Générer de nouvelles données aléatoires
|
|
174
174
|
const randomNames = [
|
|
@@ -178,7 +178,7 @@ export class DemoOnAssignDynamic extends LitElement {
|
|
|
178
178
|
];
|
|
179
179
|
const randomThemes = ["light", "dark", "auto"];
|
|
180
180
|
const randomLanguages = ["en", "fr", "es"];
|
|
181
|
-
|
|
181
|
+
//
|
|
182
182
|
const randomName =
|
|
183
183
|
randomNames[Math.floor(Math.random() * randomNames.length)];
|
|
184
184
|
const randomEmail = `${randomName.firstName.toLowerCase()}.${randomName.lastName.toLowerCase()}@example.com`;
|
|
@@ -186,7 +186,7 @@ export class DemoOnAssignDynamic extends LitElement {
|
|
|
186
186
|
randomThemes[Math.floor(Math.random() * randomThemes.length)];
|
|
187
187
|
const randomLanguage =
|
|
188
188
|
randomLanguages[Math.floor(Math.random() * randomLanguages.length)];
|
|
189
|
-
|
|
189
|
+
//
|
|
190
190
|
// Mettre à jour l'utilisateur directement
|
|
191
191
|
const currentUser = userPublisher.get() || {};
|
|
192
192
|
userPublisher.set({
|
|
@@ -195,7 +195,7 @@ export class DemoOnAssignDynamic extends LitElement {
|
|
|
195
195
|
lastName: randomName.lastName,
|
|
196
196
|
email: randomEmail,
|
|
197
197
|
});
|
|
198
|
-
|
|
198
|
+
//
|
|
199
199
|
// Mettre à jour les settings directement
|
|
200
200
|
settingPublisher.set({
|
|
201
201
|
theme: randomTheme,
|
|
@@ -4344,6 +4344,21 @@
|
|
|
4344
4344
|
}
|
|
4345
4345
|
}
|
|
4346
4346
|
},
|
|
4347
|
+
{
|
|
4348
|
+
"search": " }\n //\n render() {\n return html <div class="flex flex-col gap-2"> <sonic-select .value=${this.dataProvider} label="Users set" @change=${this.updateDataProvider} > <option value="demoUsers">First set of users</option> <option value="demoUsersAlt">Second set of users</option> </sonic-select> <sonic-input type="number" .value=${this.userIndex} @input=${this.updateUserIndex} min="0" max="9" label="Index" class="block" > </sonic-input> <sonic-button @click=${this.updateCurrentUserData} >Update current user data</sonic-button > <div class="flex flex-col gap-2 border p-2"> <div> <sonic-icon name="user" library="heroicons"></sonic-icon> ${this.user?.firstName} ${this.user?.lastName} </div> <div> <sonic-icon name="envelope" library="heroicons"></sonic-icon> ${this.user?.email} </div> </div> </div> ;\n }\n",
|
|
4349
|
+
"files": {
|
|
4350
|
+
"docs/_misc/bind.md": {
|
|
4351
|
+
"title": "@bind",
|
|
4352
|
+
"hashes": {
|
|
4353
|
+
"dynamic-path-driven-by-class-properties": {
|
|
4354
|
+
"count": 1,
|
|
4355
|
+
"title": "Dynamic path driven by class properties",
|
|
4356
|
+
"type": "paragraph"
|
|
4357
|
+
}
|
|
4358
|
+
}
|
|
4359
|
+
}
|
|
4360
|
+
}
|
|
4361
|
+
},
|
|
4347
4362
|
{
|
|
4348
4363
|
"search": "⚠️ Use a classic string literal: @bind("${dataProvider}.${profileId}.info.title"). Do not use a template literal (backticks), otherwise JavaScript would try to interpolate the value immediately.\n",
|
|
4349
4364
|
"files": {
|
|
@@ -4371,6 +4386,16 @@
|
|
|
4371
4386
|
"type": "paragraph"
|
|
4372
4387
|
}
|
|
4373
4388
|
}
|
|
4389
|
+
},
|
|
4390
|
+
"docs/_misc/on-assign.md": {
|
|
4391
|
+
"title": "@onAssign",
|
|
4392
|
+
"hashes": {
|
|
4393
|
+
"dynamic-path-driven-by-class-properties": {
|
|
4394
|
+
"count": 1,
|
|
4395
|
+
"title": "Dynamic path driven by class properties",
|
|
4396
|
+
"type": "paragraph"
|
|
4397
|
+
}
|
|
4398
|
+
}
|
|
4374
4399
|
}
|
|
4375
4400
|
}
|
|
4376
4401
|
},
|
|
@@ -4434,6 +4459,51 @@
|
|
|
4434
4459
|
}
|
|
4435
4460
|
}
|
|
4436
4461
|
},
|
|
4462
|
+
{
|
|
4463
|
+
"search": "You can now build the paths dynamically by referencing the host class properties inside the strings passed to @onAssign. Two placeholder syntaxes are supported:\n",
|
|
4464
|
+
"files": {
|
|
4465
|
+
"docs/_misc/on-assign.md": {
|
|
4466
|
+
"title": "@onAssign",
|
|
4467
|
+
"hashes": {
|
|
4468
|
+
"dynamic-path-driven-by-class-properties": {
|
|
4469
|
+
"count": 1,
|
|
4470
|
+
"title": "Dynamic path driven by class properties",
|
|
4471
|
+
"type": "paragraph"
|
|
4472
|
+
}
|
|
4473
|
+
}
|
|
4474
|
+
}
|
|
4475
|
+
}
|
|
4476
|
+
},
|
|
4477
|
+
{
|
|
4478
|
+
"search": "Each placeholder is replaced at runtime with the current value of the corresponding property. @onAssign automatically watches those properties and:\n",
|
|
4479
|
+
"files": {
|
|
4480
|
+
"docs/_misc/on-assign.md": {
|
|
4481
|
+
"title": "@onAssign",
|
|
4482
|
+
"hashes": {
|
|
4483
|
+
"dynamic-path-driven-by-class-properties": {
|
|
4484
|
+
"count": 1,
|
|
4485
|
+
"title": "Dynamic path driven by class properties",
|
|
4486
|
+
"type": "paragraph"
|
|
4487
|
+
}
|
|
4488
|
+
}
|
|
4489
|
+
}
|
|
4490
|
+
}
|
|
4491
|
+
},
|
|
4492
|
+
{
|
|
4493
|
+
"search": "⚠️ Use classic string literals: @onAssign("${dataProvider}.${profileId}", "settings.${profileId}"). Do not use template literals (backticks), otherwise JavaScript would try to interpolate the value immediately.\n",
|
|
4494
|
+
"files": {
|
|
4495
|
+
"docs/_misc/on-assign.md": {
|
|
4496
|
+
"title": "@onAssign",
|
|
4497
|
+
"hashes": {
|
|
4498
|
+
"dynamic-path-driven-by-class-properties": {
|
|
4499
|
+
"count": 1,
|
|
4500
|
+
"title": "Dynamic path driven by class properties",
|
|
4501
|
+
"type": "paragraph"
|
|
4502
|
+
}
|
|
4503
|
+
}
|
|
4504
|
+
}
|
|
4505
|
+
}
|
|
4506
|
+
},
|
|
4437
4507
|
{
|
|
4438
4508
|
"search": "Templates Demo",
|
|
4439
4509
|
"files": {
|
package/src/tsconfig.json
CHANGED
|
@@ -734,15 +734,6 @@
|
|
|
734
734
|
"./ui/theme": [
|
|
735
735
|
"/sites/concorde/src/core/components/ui/theme/theme.ts"
|
|
736
736
|
],
|
|
737
|
-
"./message-subscriber.stories": [
|
|
738
|
-
"/sites/concorde/src/core/components/ui/toast/message-subscriber.stories.ts"
|
|
739
|
-
],
|
|
740
|
-
"./ui/message-subscriber.stories": [
|
|
741
|
-
"/sites/concorde/src/core/components/ui/toast/message-subscriber.stories.ts"
|
|
742
|
-
],
|
|
743
|
-
"./ui/toast/message-subscriber.stories": [
|
|
744
|
-
"/sites/concorde/src/core/components/ui/toast/message-subscriber.stories.ts"
|
|
745
|
-
],
|
|
746
737
|
"./message-subscriber": [
|
|
747
738
|
"/sites/concorde/src/core/components/ui/toast/message-subscriber.ts"
|
|
748
739
|
],
|
package/src/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./components.ts","./concorde-loaded.ts","./decorators.ts","./directives.ts","./index.ts","./mixins.ts","./utils.ts","./core/core.ts","./core/_types/types.ts","./core/components/functional/functional.ts","./core/components/functional/date/date.ts","./core/components/functional/example/example.ts","./core/components/functional/fetch/fetch.ts","./core/components/functional/if/if.test.ts","./core/components/functional/if/if.ts","./core/components/functional/list/list.demo.ts","./core/components/functional/list/list.spec.ts","./core/components/functional/list/list.ts","./core/components/functional/mix/mix.ts","./core/components/functional/queue/queue.demo.ts","./core/components/functional/queue/queue.ts","./core/components/functional/router/redirect.ts","./core/components/functional/router/router.demo.ts","./core/components/functional/router/router.spec.ts","./core/components/functional/router/router.ts","./core/components/functional/sdui/SDUIDescriptorTransformer.ts","./core/components/functional/sdui/sdui-utils.ts","./core/components/functional/sdui/sdui.ts","./core/components/functional/sdui/types.ts","./core/components/functional/sonic-scope/sonic-scope.ts","./core/components/functional/states/states.demo.ts","./core/components/functional/states/states.spec.ts","./core/components/functional/states/states.ts","./core/components/functional/submit/submit.ts","./core/components/functional/subscriber/subscriber.ts","./core/components/functional/translation/translation.ts","./core/components/functional/value/value.ts","./core/components/ui/ui.ts","./core/components/ui/_css/scroll.ts","./core/components/ui/_css/shadow.ts","./core/components/ui/_css/size.ts","./core/components/ui/_css/type.ts","./core/components/ui/alert/alert.ts","./core/components/ui/alert-messages/alert-messages.ts","./core/components/ui/badge/badge.ts","./core/components/ui/button/button.ts","./core/components/ui/captcha/altchaStyles.ts","./core/components/ui/captcha/captcha.ts","./core/components/ui/card/card-footer.ts","./core/components/ui/card/card-header-descripton.ts","./core/components/ui/card/card-header.ts","./core/components/ui/card/card-main.ts","./core/components/ui/card/card.ts","./core/components/ui/divider/divider.ts","./core/components/ui/form/checkbox/checkbox.ts","./core/components/ui/form/css/form-control.ts","./core/components/ui/form/fieldset/fieldset.ts","./core/components/ui/form/fieldset/legend-description.ts","./core/components/ui/form/fieldset/legend.ts","./core/components/ui/form/form-actions/form-actions.ts","./core/components/ui/form/form-layout/form-layout.ts","./core/components/ui/form/input/input.ts","./core/components/ui/form/input/password-helper.ts","./core/components/ui/form/input/same-value-helper.ts","./core/components/ui/form/input-autocomplete/input-autocomplete.ts","./core/components/ui/form/radio/radio.ts","./core/components/ui/form/select/select.ts","./core/components/ui/form/switch/switch.ts","./core/components/ui/form/textarea/textarea.ts","./core/components/ui/group/group.ts","./core/components/ui/icon/icon.stories.ts","./core/components/ui/icon/icon.ts","./core/components/ui/icon/icons.ts","./core/components/ui/image/image.ts","./core/components/ui/link/link.ts","./core/components/ui/loader/loader.stories.ts","./core/components/ui/loader/loader.ts","./core/components/ui/loader/styles/fixed.ts","./core/components/ui/loader/styles/inline.ts","./core/components/ui/menu/menu-item.ts","./core/components/ui/menu/menu.ts","./core/components/ui/modal/modal-actions.ts","./core/components/ui/modal/modal-close.ts","./core/components/ui/modal/modal-content.ts","./core/components/ui/modal/modal-subtitle.ts","./core/components/ui/modal/modal-title.ts","./core/components/ui/modal/modal.stories.ts","./core/components/ui/modal/modal.ts","./core/components/ui/pop/pop.ts","./core/components/ui/progress/progress.ts","./core/components/ui/table/table-caption.ts","./core/components/ui/table/table-tbody.ts","./core/components/ui/table/table-td.ts","./core/components/ui/table/table-tfoot.ts","./core/components/ui/table/table-th.ts","./core/components/ui/table/table-thead.ts","./core/components/ui/table/table-tr.ts","./core/components/ui/table/table.ts","./core/components/ui/theme/theme.ts","./core/components/ui/theme/theme-collection/core-variables.ts","./core/components/ui/theme/theme-collection/dark.ts","./core/components/ui/theme/theme-collection/light.ts","./core/components/ui/toast/message-subscriber.
|
|
1
|
+
{"root":["./components.ts","./concorde-loaded.ts","./dataprovider.ts","./decorators.ts","./directives.ts","./index.ts","./mixins.ts","./utils.ts","./core/core.ts","./core/_types/types.ts","./core/components/functional/functional.ts","./core/components/functional/date/date.ts","./core/components/functional/example/example.ts","./core/components/functional/fetch/fetch.ts","./core/components/functional/if/if.test.ts","./core/components/functional/if/if.ts","./core/components/functional/list/list.demo.ts","./core/components/functional/list/list.spec.ts","./core/components/functional/list/list.ts","./core/components/functional/mix/mix.ts","./core/components/functional/queue/queue.demo.ts","./core/components/functional/queue/queue.ts","./core/components/functional/router/redirect.ts","./core/components/functional/router/router.demo.ts","./core/components/functional/router/router.spec.ts","./core/components/functional/router/router.ts","./core/components/functional/sdui/SDUIDescriptorTransformer.ts","./core/components/functional/sdui/sdui-utils.ts","./core/components/functional/sdui/sdui.ts","./core/components/functional/sdui/types.ts","./core/components/functional/sonic-scope/sonic-scope.ts","./core/components/functional/states/states.demo.ts","./core/components/functional/states/states.spec.ts","./core/components/functional/states/states.ts","./core/components/functional/submit/submit.ts","./core/components/functional/subscriber/subscriber.ts","./core/components/functional/translation/translation.ts","./core/components/functional/value/value.ts","./core/components/ui/ui.ts","./core/components/ui/_css/scroll.ts","./core/components/ui/_css/shadow.ts","./core/components/ui/_css/size.ts","./core/components/ui/_css/type.ts","./core/components/ui/alert/alert.ts","./core/components/ui/alert-messages/alert-messages.ts","./core/components/ui/badge/badge.ts","./core/components/ui/button/button.ts","./core/components/ui/captcha/altchaStyles.ts","./core/components/ui/captcha/captcha.ts","./core/components/ui/card/card-footer.ts","./core/components/ui/card/card-header-descripton.ts","./core/components/ui/card/card-header.ts","./core/components/ui/card/card-main.ts","./core/components/ui/card/card.ts","./core/components/ui/divider/divider.ts","./core/components/ui/form/checkbox/checkbox.ts","./core/components/ui/form/css/form-control.ts","./core/components/ui/form/fieldset/fieldset.ts","./core/components/ui/form/fieldset/legend-description.ts","./core/components/ui/form/fieldset/legend.ts","./core/components/ui/form/form-actions/form-actions.ts","./core/components/ui/form/form-layout/form-layout.ts","./core/components/ui/form/input/input.ts","./core/components/ui/form/input/password-helper.ts","./core/components/ui/form/input/same-value-helper.ts","./core/components/ui/form/input-autocomplete/input-autocomplete.ts","./core/components/ui/form/radio/radio.ts","./core/components/ui/form/select/select.ts","./core/components/ui/form/switch/switch.ts","./core/components/ui/form/textarea/textarea.ts","./core/components/ui/group/group.ts","./core/components/ui/icon/icon.stories.ts","./core/components/ui/icon/icon.ts","./core/components/ui/icon/icons.ts","./core/components/ui/image/image.ts","./core/components/ui/link/link.ts","./core/components/ui/loader/loader.stories.ts","./core/components/ui/loader/loader.ts","./core/components/ui/loader/styles/fixed.ts","./core/components/ui/loader/styles/inline.ts","./core/components/ui/menu/menu-item.ts","./core/components/ui/menu/menu.ts","./core/components/ui/modal/modal-actions.ts","./core/components/ui/modal/modal-close.ts","./core/components/ui/modal/modal-content.ts","./core/components/ui/modal/modal-subtitle.ts","./core/components/ui/modal/modal-title.ts","./core/components/ui/modal/modal.stories.ts","./core/components/ui/modal/modal.ts","./core/components/ui/pop/pop.ts","./core/components/ui/progress/progress.ts","./core/components/ui/table/table-caption.ts","./core/components/ui/table/table-tbody.ts","./core/components/ui/table/table-td.ts","./core/components/ui/table/table-tfoot.ts","./core/components/ui/table/table-th.ts","./core/components/ui/table/table-thead.ts","./core/components/ui/table/table-tr.ts","./core/components/ui/table/table.ts","./core/components/ui/theme/theme.ts","./core/components/ui/theme/theme-collection/core-variables.ts","./core/components/ui/theme/theme-collection/dark.ts","./core/components/ui/theme/theme-collection/light.ts","./core/components/ui/toast/message-subscriber.ts","./core/components/ui/toast/toast-item.ts","./core/components/ui/toast/toast.ts","./core/components/ui/toast/types.ts","./core/components/ui/tooltip/tooltip.ts","./core/decorators/Subscriber.ts","./core/decorators/subscriber/ancestorAttribute.ts","./core/decorators/subscriber/autoFill.ts","./core/decorators/subscriber/autoSubscribe.ts","./core/decorators/subscriber/bind.ts","./core/decorators/subscriber/common.ts","./core/decorators/subscriber/onAssign.ts","./core/directives/DataProvider.ts","./core/directives/Wording.ts","./core/mixins/Fetcher.ts","./core/mixins/FormCheckable.ts","./core/mixins/FormElement.ts","./core/mixins/FormInput.ts","./core/mixins/Subscriber.ts","./core/mixins/TemplatesContainer.ts","./core/mixins/mixins.ts","./core/utils/Arrays.ts","./core/utils/DataBindObserver.ts","./core/utils/Electron.ts","./core/utils/Format.ts","./core/utils/HTML.ts","./core/utils/LocationHandler.ts","./core/utils/Objects.ts","./core/utils/PublisherProxy.ts","./core/utils/Utils.ts","./core/utils/aesCrypto.ts","./core/utils/api.ts","./core/utils/route.spec.ts","./core/utils/route.ts","./core/utils/url-pattern.ts","./test-utils/TestUtils.ts"],"version":"5.9.2"}
|
package/src/utils.ts
CHANGED
|
@@ -14,9 +14,8 @@ import * as myLocationHandler from "@supersoniks/concorde/core/utils/LocationHan
|
|
|
14
14
|
export const LocationHandler = myLocationHandler.default;
|
|
15
15
|
import * as myObjects from "@supersoniks/concorde/core/utils/Objects";
|
|
16
16
|
export const Objects = myObjects.default;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export const PublisherManager = myPublisherProxy.PublisherManager;
|
|
17
|
+
export * from "@supersoniks/concorde/core/utils/PublisherProxy";
|
|
18
|
+
import { PublisherManager } from "@supersoniks/concorde/core/utils/PublisherProxy";
|
|
20
19
|
import * as myApi from "@supersoniks/concorde/core/utils/api";
|
|
21
20
|
export const api = myApi.default;
|
|
22
21
|
import * as myURLPattern from "@supersoniks/concorde/core/utils/url-pattern";
|
|
@@ -34,7 +33,6 @@ window["concorde-utils"] = {
|
|
|
34
33
|
HTML: HTML,
|
|
35
34
|
LocationHandler: LocationHandler,
|
|
36
35
|
Objects: Objects,
|
|
37
|
-
PublisherProxy: PublisherProxy,
|
|
38
36
|
PublisherManager: PublisherManager,
|
|
39
37
|
api: api,
|
|
40
38
|
URLPattern: URLPattern,
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
# Comparaison des versions MCP Concorde
|
|
2
|
-
|
|
3
|
-
## 🐍 Version Python vs 🟢 Version Node.js
|
|
4
|
-
|
|
5
|
-
J'ai créé deux versions du serveur MCP Concorde pour vous donner le choix selon vos préférences et votre environnement.
|
|
6
|
-
|
|
7
|
-
## 📊 Comparaison technique
|
|
8
|
-
|
|
9
|
-
| Critère | Python | Node.js |
|
|
10
|
-
|---------|--------|---------|
|
|
11
|
-
| **Temps de démarrage** | ~2-3 secondes | ~1-2 secondes |
|
|
12
|
-
| **Mémoire utilisée** | ~50-100 MB | ~30-50 MB |
|
|
13
|
-
| **Temps de réponse** | <100ms | <50ms |
|
|
14
|
-
| **Taille des dépendances** | ~25 MB | ~15 MB |
|
|
15
|
-
| **Compatibilité** | Universelle | Écosystème JS/TS |
|
|
16
|
-
| **Maintenance** | Plus lourde | Plus légère |
|
|
17
|
-
|
|
18
|
-
## 🎯 Recommandations d'usage
|
|
19
|
-
|
|
20
|
-
### Choisir la version Python si :
|
|
21
|
-
- ✅ Vous préférez Python
|
|
22
|
-
- ✅ Vous avez déjà Python installé
|
|
23
|
-
- ✅ Vous travaillez dans un environnement Python
|
|
24
|
-
- ✅ Vous voulez la compatibilité maximale
|
|
25
|
-
|
|
26
|
-
### Choisir la version Node.js si :
|
|
27
|
-
- ✅ Vous travaillez avec JavaScript/TypeScript
|
|
28
|
-
- ✅ Vous voulez de meilleures performances
|
|
29
|
-
- ✅ Vous préférez l'écosystème Node.js
|
|
30
|
-
- ✅ Vous voulez une intégration plus native avec Concorde
|
|
31
|
-
|
|
32
|
-
## 🚀 Installation
|
|
33
|
-
|
|
34
|
-
### Version Python
|
|
35
|
-
```bash
|
|
36
|
-
# Installation automatique
|
|
37
|
-
./install-mcp.sh
|
|
38
|
-
|
|
39
|
-
# Ou manuelle
|
|
40
|
-
pip install mcp
|
|
41
|
-
python3 concorde-mcp-server.py
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Version Node.js
|
|
45
|
-
```bash
|
|
46
|
-
# Installation automatique
|
|
47
|
-
./install-mcp-nodejs.sh
|
|
48
|
-
|
|
49
|
-
# Ou manuelle
|
|
50
|
-
npm install
|
|
51
|
-
node concorde-mcp-server.js
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## ⚙️ Configuration Cursor
|
|
55
|
-
|
|
56
|
-
### Version Python
|
|
57
|
-
```json
|
|
58
|
-
{
|
|
59
|
-
"mcpServers": {
|
|
60
|
-
"concorde": {
|
|
61
|
-
"command": "python3",
|
|
62
|
-
"args": ["/usr2/sites/concorde/concorde-mcp-server.py"],
|
|
63
|
-
"env": {
|
|
64
|
-
"PYTHONPATH": "/usr2/sites/concorde"
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Version Node.js
|
|
72
|
-
```json
|
|
73
|
-
{
|
|
74
|
-
"mcpServers": {
|
|
75
|
-
"concorde": {
|
|
76
|
-
"command": "node",
|
|
77
|
-
"args": ["/usr2/sites/concorde/concorde-mcp-server.js"],
|
|
78
|
-
"env": {
|
|
79
|
-
"NODE_PATH": "/usr2/sites/concorde"
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## 🧪 Test des versions
|
|
87
|
-
|
|
88
|
-
### Version Python
|
|
89
|
-
```bash
|
|
90
|
-
python3 test-mcp.py
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### Version Node.js
|
|
94
|
-
```bash
|
|
95
|
-
npm test
|
|
96
|
-
# ou
|
|
97
|
-
node test-mcp.js
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## 📁 Fichiers créés
|
|
101
|
-
|
|
102
|
-
### Version Python
|
|
103
|
-
- `concorde-mcp-server.py` - Serveur principal
|
|
104
|
-
- `test-mcp.py` - Script de test
|
|
105
|
-
- `install-mcp.sh` - Script d'installation
|
|
106
|
-
- `cursor-mcp-config.json` - Configuration Cursor
|
|
107
|
-
- `README-MCP.md` - Documentation
|
|
108
|
-
|
|
109
|
-
### Version Node.js
|
|
110
|
-
- `concorde-mcp-server.js` - Serveur principal
|
|
111
|
-
- `test-mcp.js` - Script de test
|
|
112
|
-
- `package-mcp.json` - Configuration npm
|
|
113
|
-
- `install-mcp-nodejs.sh` - Script d'installation
|
|
114
|
-
- `cursor-mcp-config-nodejs.json` - Configuration Cursor
|
|
115
|
-
- `README-MCP-NODEJS.md` - Documentation
|
|
116
|
-
|
|
117
|
-
## 🔧 Fonctionnalités identiques
|
|
118
|
-
|
|
119
|
-
Les deux versions offrent exactement les mêmes fonctionnalités :
|
|
120
|
-
|
|
121
|
-
### Outils MCP
|
|
122
|
-
- `search_component` - Recherche de composants
|
|
123
|
-
- `get_component_info` - Informations détaillées
|
|
124
|
-
- `generate_component_code` - Génération de code
|
|
125
|
-
- `get_form_example` - Exemples de formulaires
|
|
126
|
-
- `get_theme_info` - Informations sur les thèmes
|
|
127
|
-
- `get_icons_list` - Liste des icônes
|
|
128
|
-
|
|
129
|
-
### Ressources
|
|
130
|
-
- Documentation complète des composants
|
|
131
|
-
- Exemples d'utilisation
|
|
132
|
-
- Concepts de base (architecture, data binding)
|
|
133
|
-
- Exemples pratiques
|
|
134
|
-
|
|
135
|
-
## 🎨 Exemples d'utilisation
|
|
136
|
-
|
|
137
|
-
Les deux versions génèrent le même code :
|
|
138
|
-
|
|
139
|
-
```html
|
|
140
|
-
<!-- Bouton avec icône -->
|
|
141
|
-
<sonic-button type="primary" size="lg">
|
|
142
|
-
<sonic-icon library="core" name="check" slot="prefix"></sonic-icon>
|
|
143
|
-
Valider
|
|
144
|
-
</sonic-button>
|
|
145
|
-
|
|
146
|
-
<!-- Formulaire complet -->
|
|
147
|
-
<div formDataProvider="userForm">
|
|
148
|
-
<sonic-fieldset label="Informations">
|
|
149
|
-
<sonic-form-layout>
|
|
150
|
-
<sonic-input name="email" type="email" label="Email" required></sonic-input>
|
|
151
|
-
<sonic-input name="password" type="password" label="Mot de passe" required></sonic-input>
|
|
152
|
-
</sonic-form-layout>
|
|
153
|
-
</sonic-fieldset>
|
|
154
|
-
<sonic-form-actions>
|
|
155
|
-
<sonic-button type="primary">Connexion</sonic-button>
|
|
156
|
-
</sonic-form-actions>
|
|
157
|
-
</div>
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## 🔄 Migration entre versions
|
|
161
|
-
|
|
162
|
-
Si vous voulez changer de version :
|
|
163
|
-
|
|
164
|
-
1. **Arrêter Cursor**
|
|
165
|
-
2. **Modifier la configuration** dans settings.json
|
|
166
|
-
3. **Redémarrer Cursor**
|
|
167
|
-
4. **Tester** avec les commandes de test
|
|
168
|
-
|
|
169
|
-
## 🏆 Conclusion
|
|
170
|
-
|
|
171
|
-
Les deux versions sont parfaitement fonctionnelles et offrent les mêmes capacités. Le choix dépend principalement de vos préférences :
|
|
172
|
-
|
|
173
|
-
- **Python** : Plus universel, plus lourd
|
|
174
|
-
- **Node.js** : Plus rapide, plus léger, mieux intégré
|
|
175
|
-
|
|
176
|
-
Les deux versions permettent à l'IA de Cursor d'avoir un accès complet et intelligent à toute la documentation et au code du framework Concorde ! 🎉
|