@supersoniks/concorde 5.1.2 → 5.1.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/.agents/skills/concorde-docs/SKILL.md +1 -1
- package/README.md +1 -1
- package/ai/README.md +29 -41
- package/ai/skills/concorde/SKILL.md +54 -324
- package/ai/skills/concorde/rules/composition.md +32 -0
- package/ai/skills/concorde/rules/data.md +47 -0
- package/ai/skills/concorde/rules/http.md +25 -0
- package/ai/skills/concorde/rules/lists-forms.md +35 -0
- package/ai/skills/concorde/rules/styling.md +46 -0
- package/ai/skills/concorde/rules/troubleshooting.md +45 -0
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +21 -21
- package/concorde-core.es.js +977 -980
- package/custom-elements-manifest.public.config.mjs +8 -0
- package/{.tmp-cem/custom-elements.json → custom-elements.json} +11722 -8868
- package/dist/concorde-core.bundle.js +21 -21
- package/dist/concorde-core.es.js +977 -980
- package/dist/docs-mock-api-sw.js +58 -223
- package/dist/docs-mock-api-sw.js.map +4 -4
- package/dist/img/concorde/plane_01.jpg +0 -0
- package/dist/img/concorde/plane_02.jpg +0 -0
- package/dist/img/concorde/plane_03.jpg +0 -0
- package/dist/img/concorde/plane_04.jpg +0 -0
- package/dist/img/concorde/plane_05.jpg +0 -0
- package/dist/img/concorde/plane_06.jpg +0 -0
- package/dist/img/concorde/plane_07.jpg +0 -0
- package/dist/img/concorde/plane_08.jpg +0 -0
- package/dist/img/concorde/plane_09.jpg +0 -0
- package/dist/img/concorde/plane_10.jpg +0 -0
- package/dist/img/concorde/plane_11.jpg +0 -0
- package/dist/img/concorde/plane_12.jpg +0 -0
- package/dist/img/concorde/plane_13.jpg +0 -0
- package/dist/img/og-concorde.jpg +0 -0
- package/dist/robots.txt +11 -10
- package/docs/.htaccess +7 -0
- package/docs/about.html +111 -0
- package/docs/about.md +22 -0
- package/docs/assets/{index-BgG6FFPt.js → index-6sS76xWj.js} +482 -500
- package/docs/assets/{index-x89XINSG.css → index-DkdPbH0F.css} +1 -1
- package/docs/core/components/functional/date/date.md +1 -1
- package/docs/core/components/functional/list/list.html +7 -5
- package/docs/core/components/functional/list/list.md +6 -2
- package/docs/core/components/ui/card/card.html +1 -1
- package/docs/core/components/ui/card/card.md +1 -1
- package/docs/core/components/ui/image/image.html +17 -17
- package/docs/core/components/ui/image/image.md +17 -17
- package/docs/core/components/ui/modal/modal.html +2 -2
- package/docs/core/components/ui/modal/modal.md +2 -2
- package/docs/custom-elements.json +16559 -0
- package/docs/docs/decorators/bind.html +22 -21
- package/docs/docs/decorators/bind.md +23 -24
- package/docs/docs/getting-started/ai-agents.html +50 -94
- package/docs/docs/getting-started/ai-agents.md +29 -55
- package/docs/docs/getting-started/dataFlow.html +1 -1
- package/docs/docs/getting-started/dataFlow.md +1 -1
- package/docs/docs/index.html +1 -1
- package/docs/hubs/decorators.html +11 -16
- package/docs/hubs/remote-data.html +5 -9
- package/docs/img/og-concorde.jpg +0 -0
- package/docs/index.html +91 -2
- package/docs/index.md +2 -2
- package/docs/llms-full.txt +58 -74
- package/docs/llms.txt +6 -4
- package/docs/privacy.html +122 -0
- package/docs/privacy.md +32 -0
- package/docs/sitemap.xml +6 -0
- package/docs/src/core/components/functional/date/date.md +1 -1
- package/docs/src/core/components/functional/list/list.md +6 -2
- package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
- package/docs/src/core/components/functional/sdui/component-catalog.json +1 -1
- package/docs/src/core/components/ui/card/card.md +1 -1
- package/docs/src/core/components/ui/image/image.md +17 -17
- package/docs/src/core/components/ui/modal/modal.md +2 -2
- package/docs/src/docs/decorators/bind.md +23 -24
- package/docs/src/docs/getting-started/ai-agents.md +29 -55
- package/docs/src/docs/getting-started/dataFlow.md +1 -1
- package/docs/src/docs/search/docs-search.json +100 -55
- package/docs/src/tsconfig.json +11 -5
- package/index.html +89 -0
- package/package.json +8 -4
- package/public/img/og-concorde.jpg +0 -0
- package/scripts/ai-init.mjs +104 -379
- package/scripts/ai-init.test.mjs +81 -239
- package/scripts/docs-markdown-vite-plugin.ts +11 -5
- package/scripts/docs-public-url.mjs +6 -0
- package/scripts/docs.htaccess +7 -0
- package/scripts/generate-cem.mjs +244 -0
- package/scripts/generate-cem.test.mjs +122 -0
- package/scripts/generate-crawl-docs.mjs +29 -5
- package/scripts/generate-sdui-catalog.mjs +11 -10
- package/scripts/post-build-docs.js +3 -0
- package/scripts/pre-publish.mjs +2 -1
- package/scripts/site-pages.mjs +212 -0
- package/scripts/site-pages.test.mjs +116 -0
- package/site-pages/about.md +22 -0
- package/site-pages/privacy.md +32 -0
- package/src/core/components/functional/date/date.md +1 -1
- package/src/core/components/functional/list/list.md +6 -2
- 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/ui/card/card.md +1 -1
- package/src/core/components/ui/image/image.md +17 -17
- package/src/core/components/ui/modal/modal.md +2 -2
- package/src/core/decorators/subscriber/bind.ts +9 -14
- package/src/docs/components/docs-demo-sources.ts +3 -3
- package/src/docs/decorators/bind.md +23 -24
- package/src/docs/docs-location.spec.ts +10 -0
- package/src/docs/docs-location.ts +10 -0
- package/src/docs/example/decorators-demo-bind-demos.ts +11 -28
- package/src/docs/example/docs-toggle-demos.ts +1 -1
- package/src/docs/getting-started/ai-agents.md +29 -55
- package/src/docs/getting-started/dataFlow.md +1 -1
- package/src/docs/home/home.ts +3 -1
- package/src/docs/navigation/navigation.ts +1 -1
- package/src/docs/search/docs-search.json +100 -55
- package/src/docs/search/markdown-renderer.ts +6 -1
- package/src/docs/tailwind/css/docs/content.css +4 -5
- package/src/tsconfig.json +11 -5
- package/src/tsconfig.tsbuildinfo +1 -1
- package/ai/AGENTS.md +0 -56
- package/ai/cursor/rules/concorde-menu.mdc +0 -15
- package/ai/cursor/rules/concorde-scope.mdc +0 -14
- package/ai/cursor/rules/concorde-theme.mdc +0 -13
- package/ai/cursor/rules/concorde.mdc +0 -66
- package/ai/jetbrains/rules/concorde.md +0 -53
- package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
- package/ai/skills/concorde-imports/SKILL.md +0 -78
- package/ai/skills/concorde-menu/SKILL.md +0 -74
- package/ai/skills/concorde-scope/SKILL.md +0 -70
- package/ai/skills/concorde-theme/SKILL.md +0 -57
|
@@ -53,10 +53,10 @@ When the response type starts w</pre>
|
|
|
53
53
|
<section id="core-components-functional-list-list" data-doc-id="core/components/functional/list/list">
|
|
54
54
|
<h2><a href="/core/components/functional/list">List</a></h2>
|
|
55
55
|
<p><strong>Doc ID:</strong> <code>core/components/functional/list/list</code> · <a href="/core/components/functional/list">full page</a></p>
|
|
56
|
-
<p>sonic-list renders one row per entry of its props array, either set directly or loaded with fetch.
|
|
56
|
+
<p>sonic-list renders one row per entry of its props array, either set directly or loaded with fetch. In TypeScript, prefer the .items row renderer (with .separator · .noItems · .skeleton); <template> ch</p>
|
|
57
57
|
<pre class="doc-excerpt">List
|
|
58
58
|
|
|
59
|
-
sonic-list renders one row per entry of its props array, either set directly or loaded with fetch.
|
|
59
|
+
sonic-list renders one row per entry of its props array, either set directly or loaded with fetch. In TypeScript, prefer the .items row renderer (with .separator · .noItems · .skeleton); children are for plain HTML hosts without Lit. Each row gets its own data provider at /list-item/ .
|
|
60
60
|
|
|
61
61
|
Basic example
|
|
62
62
|
|
|
@@ -64,7 +64,7 @@ Add fetch to load props from serviceURL + endPoint (or dataProvider when endPoin
|
|
|
64
64
|
|
|
65
65
|
$time $code from $city ($airport)">
|
|
66
66
|
|
|
67
|
-
Fetch attributes (lazyload · refetchEveryMs · headers · authentication) are shared with Fetch.
|
|
67
|
+
This example uses HTML templates; from Lit, use the row renderer instead. Fetch attributes (lazyload · refetchEveryMs · headers · authentication) are shared with Fetch.
|
|
68
68
|
|
|
69
69
|
Row renderer
|
|
70
70
|
|
|
@@ -72,11 +72,7 @@ From a Lit component, set .items to a function (item, metadata) => TemplateRe
|
|
|
72
72
|
|
|
73
73
|
Row variants
|
|
74
74
|
|
|
75
|
-
In HTML, templateKey (default template) names the row field that selects a . Rows without a match cycle through the children that have no data-value. From Lit, branch
|
|
76
|
-
|
|
77
|
-
Separator and empty list
|
|
78
|
-
|
|
79
|
-
.separator renders between rows (not after the last one). .noItems</pre>
|
|
75
|
+
In HTML, templateKey (default template) names the row field that selects a . Rows without a match cycle through the children that have no data-value. From Lit, branch insid</pre>
|
|
80
76
|
</section>
|
|
81
77
|
<section id="core-components-functional-queue-queue" data-doc-id="core/components/functional/queue/queue">
|
|
82
78
|
<h2><a href="/core/components/functional/queue">Queue</a></h2>
|
|
@@ -274,7 +270,7 @@ Quick map
|
|
|
274
270
|
| Derived / aggregate (JSONata) | derive() or sonic-jsonata — Jsonata |
|
|
275
271
|
| Offline doc demos | serviceURL="/docs-mock-api" — Local API demos |
|
|
276
272
|
|
|
277
|
-
|
|
273
|
+
Agent skill: concorde (rules/data.md), see AI agents.
|
|
278
274
|
|
|
279
275
|
DataProviderKey
|
|
280
276
|
|
|
Binary file
|
package/docs/index.html
CHANGED
|
@@ -16,6 +16,94 @@
|
|
|
16
16
|
<link rel="canonical" href="https://concorde.supersoniks.org/" />
|
|
17
17
|
<link rel="alternate" type="text/markdown" href="/index.md" title="Markdown" />
|
|
18
18
|
<link rel="alternate" type="text/plain" href="/llms.txt" title="llms.txt" />
|
|
19
|
+
<meta property="og:type" content="website" />
|
|
20
|
+
<meta property="og:site_name" content="Concorde by Supersoniks" />
|
|
21
|
+
<meta property="og:title" content="Concorde by Supersoniks — Web components for every stack" />
|
|
22
|
+
<meta property="og:description" content="Open-source Lit web components framework: UI, data binding, forms and themes for React, Vue, PHP or plain HTML." />
|
|
23
|
+
<meta property="og:url" content="https://concorde.supersoniks.org/" />
|
|
24
|
+
<meta property="og:image" content="https://concorde.supersoniks.org/img/og-concorde.jpg" />
|
|
25
|
+
<meta property="og:image:width" content="1200" />
|
|
26
|
+
<meta property="og:image:height" content="630" />
|
|
27
|
+
<meta property="og:image:alt" content="Five Concorde aircraft parked nose to nose, black and white photo" />
|
|
28
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
29
|
+
<script type="application/ld+json">
|
|
30
|
+
{
|
|
31
|
+
"@context": "https://schema.org",
|
|
32
|
+
"@graph": [
|
|
33
|
+
{
|
|
34
|
+
"@type": "WebSite",
|
|
35
|
+
"@id": "https://concorde.supersoniks.org/#website",
|
|
36
|
+
"name": "Concorde",
|
|
37
|
+
"alternateName": "Concorde by Supersoniks",
|
|
38
|
+
"url": "https://concorde.supersoniks.org/",
|
|
39
|
+
"inLanguage": "en",
|
|
40
|
+
"publisher": {
|
|
41
|
+
"@id": "https://supersoniks.com/#organization"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"@type": "SoftwareApplication",
|
|
46
|
+
"@id": "https://concorde.supersoniks.org/#software",
|
|
47
|
+
"name": "Concorde",
|
|
48
|
+
"alternateName": "@supersoniks/concorde",
|
|
49
|
+
"description": "Concorde is an open-source web components framework built on Lit: UI components, data binding, forms, routing helpers and theming that work in React, Vue, PHP or plain HTML.",
|
|
50
|
+
"url": "https://concorde.supersoniks.org/",
|
|
51
|
+
"applicationCategory": "DeveloperApplication",
|
|
52
|
+
"applicationSubCategory": "Web components framework",
|
|
53
|
+
"operatingSystem": "Any (web browser)",
|
|
54
|
+
"programmingLanguage": "TypeScript",
|
|
55
|
+
"license": "https://opensource.org/licenses/MIT",
|
|
56
|
+
"downloadUrl": "https://www.npmjs.com/package/@supersoniks/concorde",
|
|
57
|
+
"softwareHelp": "https://concorde.supersoniks.org/docs/getting-started/start",
|
|
58
|
+
"image": "https://concorde.supersoniks.org/img/og-concorde.jpg",
|
|
59
|
+
"offers": {
|
|
60
|
+
"@type": "Offer",
|
|
61
|
+
"price": "0",
|
|
62
|
+
"priceCurrency": "EUR"
|
|
63
|
+
},
|
|
64
|
+
"author": {
|
|
65
|
+
"@id": "https://supersoniks.com/#organization"
|
|
66
|
+
},
|
|
67
|
+
"publisher": {
|
|
68
|
+
"@id": "https://supersoniks.com/#organization"
|
|
69
|
+
},
|
|
70
|
+
"sameAs": [
|
|
71
|
+
"https://www.npmjs.com/package/@supersoniks/concorde"
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"@type": "Organization",
|
|
76
|
+
"@id": "https://supersoniks.com/#organization",
|
|
77
|
+
"name": "Supersoniks",
|
|
78
|
+
"legalName": "SUPERSONIKS",
|
|
79
|
+
"url": "https://supersoniks.com/",
|
|
80
|
+
"telephone": "+33 2 47 68 93 25",
|
|
81
|
+
"address": {
|
|
82
|
+
"@type": "PostalAddress",
|
|
83
|
+
"streetAddress": "22 rue du Docteur Bretonneau",
|
|
84
|
+
"postalCode": "37000",
|
|
85
|
+
"addressLocality": "Tours",
|
|
86
|
+
"addressCountry": "FR"
|
|
87
|
+
},
|
|
88
|
+
"contactPoint": {
|
|
89
|
+
"@type": "ContactPoint",
|
|
90
|
+
"contactType": "customer service",
|
|
91
|
+
"telephone": "+33 2 47 68 93 25",
|
|
92
|
+
"url": "https://supersoniks.com/un-projet",
|
|
93
|
+
"availableLanguage": [
|
|
94
|
+
"fr",
|
|
95
|
+
"en"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
"sameAs": [
|
|
99
|
+
"https://www.linkedin.com/company/supersoniks/",
|
|
100
|
+
"https://www.facebook.com/supersoniks",
|
|
101
|
+
"https://www.instagram.com/agencesupersoniks/"
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
</script>
|
|
19
107
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
20
108
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
21
109
|
<link
|
|
@@ -35,8 +123,8 @@
|
|
|
35
123
|
display: none !important;
|
|
36
124
|
}
|
|
37
125
|
</style>
|
|
38
|
-
<script type="module" crossorigin src="/assets/index-
|
|
39
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
126
|
+
<script type="module" crossorigin src="/assets/index-6sS76xWj.js"></script>
|
|
127
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DkdPbH0F.css">
|
|
40
128
|
</head>
|
|
41
129
|
<body class="px-4 sm:px-6 lg:px-10 2xl:px-20">
|
|
42
130
|
<!--
|
|
@@ -78,6 +166,7 @@
|
|
|
78
166
|
wire components to a shared DataProvider without framework lock-in.
|
|
79
167
|
Concorde is MIT-licensed and maintained by Supersoniks for production
|
|
80
168
|
stacks that need one component set across many hosts.
|
|
169
|
+
<a href="/about">About</a> · <a href="/privacy">Privacy</a>
|
|
81
170
|
</p>
|
|
82
171
|
</section>
|
|
83
172
|
|
package/docs/index.md
CHANGED
|
@@ -12,11 +12,11 @@ Install the npm package [`@supersoniks/concorde`](https://www.npmjs.com/package/
|
|
|
12
12
|
- Docs index: https://concorde.supersoniks.org/docs/index.html
|
|
13
13
|
- Sitemap: https://concorde.supersoniks.org/sitemap.xml
|
|
14
14
|
- Getting started: https://concorde.supersoniks.org/docs/getting-started/start
|
|
15
|
-
- AI agents (
|
|
15
|
+
- AI agents (skill): https://concorde.supersoniks.org/docs/getting-started/ai-agents
|
|
16
16
|
- Components: https://concorde.supersoniks.org/docs/getting-started/components
|
|
17
17
|
|
|
18
18
|
Doc pages share pathnames with the interactive site (`/docs/…`, `/core/…`). Markdown is at the same path with a `.md` suffix (e.g. `/docs/getting-started/start.md`), or via `Accept: text/markdown` on the pathname (`Content-Type: text/markdown`, `Vary: Accept`).
|
|
19
19
|
|
|
20
20
|
## What Concorde includes
|
|
21
21
|
|
|
22
|
-
Custom elements (`sonic-*`) for buttons, forms, lists, queues, SDUI trees and more. Decorators such as `@get`, `@post`, `@subscribe` and `@bind` wire components to a shared DataProvider without framework lock-in. Concorde is MIT-licensed and maintained by Supersoniks.
|
|
22
|
+
Custom elements (`sonic-*`) for buttons, forms, lists, queues, SDUI trees and more. Decorators such as `@get`, `@post`, `@subscribe` and `@bind` wire components to a shared DataProvider without framework lock-in. Concorde is MIT-licensed and maintained by Supersoniks ([about](https://concorde.supersoniks.org/about), [privacy](https://concorde.supersoniks.org/privacy)).
|
package/docs/llms-full.txt
CHANGED
|
@@ -273,11 +273,11 @@ No slots.
|
|
|
273
273
|
|
|
274
274
|
- URL: https://concorde.supersoniks.org/core/components/functional/list
|
|
275
275
|
- Doc ID: core/components/functional/list/list
|
|
276
|
-
- Keywords: Concorde, supersoniks, core/components/functional/list/list, list, List, functional component, sonic-list, web component, props, fetch, items, , /list-item
|
|
276
|
+
- Keywords: Concorde, supersoniks, core/components/functional/list/list, list, List, functional component, sonic-list, web component, props, fetch, .items, .separator, .noItems, .skeleton, , /list-item/
|
|
277
277
|
|
|
278
278
|
List
|
|
279
279
|
|
|
280
|
-
sonic-list renders one row per entry of its props array, either set directly or loaded with fetch.
|
|
280
|
+
sonic-list renders one row per entry of its props array, either set directly or loaded with fetch. In TypeScript, prefer the .items row renderer (with .separator · .noItems · .skeleton); children are for plain HTML hosts without Lit. Each row gets its own data provider at /list-item/ .
|
|
281
281
|
|
|
282
282
|
Basic example
|
|
283
283
|
|
|
@@ -285,7 +285,7 @@ Add fetch to load props from serviceURL + endPoint (or dataProvider when endPoin
|
|
|
285
285
|
|
|
286
286
|
$time $code from $city ($airport)">
|
|
287
287
|
|
|
288
|
-
Fetch attributes (lazyload · refetchEveryMs · headers · authentication) are shared with Fetch.
|
|
288
|
+
This example uses HTML templates; from Lit, use the row renderer instead. Fetch attributes (lazyload · refetchEveryMs · headers · authentication) are shared with Fetch.
|
|
289
289
|
|
|
290
290
|
Row renderer
|
|
291
291
|
|
|
@@ -327,6 +327,8 @@ API reference
|
|
|
327
327
|
| loader | fixed (when empty) · inline | Loader shown while fetching. None by default |
|
|
328
328
|
| debug | boolean | Shows each row's data on hover |
|
|
329
329
|
|
|
330
|
+
Properties (TypeScript / Lit, preferred):
|
|
331
|
+
|
|
330
332
|
| Property | Type | Description |
|
|
331
333
|
|----------|------|-------------|
|
|
332
334
|
| props | array · object | Rows to render |
|
|
@@ -336,6 +338,8 @@ API reference
|
|
|
336
338
|
| skeleton | () => TemplateResult | Rendered while fetching |
|
|
337
339
|
| itemPropertyMap | object | propertyMap passed to each row subscriber |
|
|
338
340
|
|
|
341
|
+
Templates (plain HTML hosts):
|
|
342
|
+
|
|
339
343
|
| Template | Description |
|
|
340
344
|
|----------|-------------|
|
|
341
345
|
| | Row markup; several are used in turn |
|
|
@@ -3743,28 +3747,15 @@ API reference
|
|
|
3743
3747
|
|
|
3744
3748
|
- URL: https://concorde.supersoniks.org/docs/decorators/bind
|
|
3745
3749
|
- Doc ID: docs/decorators/bind
|
|
3746
|
-
- Keywords: Concorde, supersoniks, docs/decorators/bind, bind, @bind, decorator, { reflect: true },
|
|
3750
|
+
- Keywords: Concorde, supersoniks, docs/decorators/bind, bind, @bind, decorator, @bind(key), { reflect: true }, @state(), reflect: true, set(), reflect, @subscribe, ${index}
|
|
3747
3751
|
|
|
3748
3752
|
@bind
|
|
3749
3753
|
|
|
3750
|
-
|
|
3754
|
+
@bind(key) keeps a class property and one path of the DataProvider store in sync. With { reflect: true } the sync goes both ways: the property follows the store, and each assignment is written back to it. For one direction only, use the complementary decorators: @subscribe to read, @publish to write. See Data flow for the overall model.
|
|
3751
3755
|
|
|
3752
3756
|
Import
|
|
3753
3757
|
|
|
3754
3758
|
import { bind } from "@supersoniks/concorde/decorators";
|
|
3755
|
-
|
|
3756
|
-
@bind("flight.gate")
|
|
3757
|
-
@state()
|
|
3758
|
-
gate = "";
|
|
3759
|
-
|
|
3760
|
-
Basic usage
|
|
3761
|
-
|
|
3762
|
-
The first path segment is the data provider id, the rest is dot notation (array items use a numeric index: passengers.0). The property updates each time the store value changes. Add @state() so Lit re-renders.
|
|
3763
|
-
|
|
3764
|
-
Typed key
|
|
3765
|
-
|
|
3766
|
-
With a DataProviderKey , TypeScript checks that the property type matches T at that path.
|
|
3767
|
-
|
|
3768
3759
|
import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
|
|
3769
3760
|
|
|
3770
3761
|
type Flight = { flight: string; gate: string; boarded: number };
|
|
@@ -3774,13 +3765,25 @@ const flightKey = new DataProviderKey<Flight>("flight");
|
|
|
3774
3765
|
@state()
|
|
3775
3766
|
boarded = 0;
|
|
3776
3767
|
|
|
3768
|
+
Basic usage
|
|
3769
|
+
|
|
3770
|
+
The key is a DataProviderKey: TypeScript checks that the property type matches T at that path. The property updates each time the store value changes. Add @state() so Lit re-renders.
|
|
3771
|
+
|
|
3777
3772
|
Reflect
|
|
3778
3773
|
|
|
3779
|
-
|
|
3774
|
+
With reflect: true, each assignment to the property calls set() at the key path, so every other subscriber sees the new value. An internal guard prevents update loops. Without reflect (the default), assigning the property does not touch the store, and @bind behaves like @subscribe.
|
|
3780
3775
|
|
|
3781
3776
|
Dynamic path
|
|
3782
3777
|
|
|
3783
|
-
Placeholders such as ${index} are resolved from properties of the same component, and @bind re-subscribes when they change.
|
|
3778
|
+
Placeholders such as ${index} are resolved from properties of the same component, and @bind re-subscribes when they change. Declare them in the key's second generic and write them in a plain string, not a backtick template literal. While a placeholder is null or undefined the binding is inactive; { skipEmptyPlaceholder: true } also waits on "". Full rules: Dynamic paths.
|
|
3779
|
+
|
|
3780
|
+
const personKey = new DataProviderKey<Person, { dataProvider: string; index: number }>(
|
|
3781
|
+
"${dataProvider}.${index}",
|
|
3782
|
+
);
|
|
3783
|
+
|
|
3784
|
+
@bind(personKey)
|
|
3785
|
+
@state()
|
|
3786
|
+
person: Person | null = null;
|
|
3784
3787
|
|
|
3785
3788
|
Lifecycle
|
|
3786
3789
|
|
|
@@ -3790,7 +3793,7 @@ API reference
|
|
|
3790
3793
|
|
|
3791
3794
|
| Argument | Type | Description |
|
|
3792
3795
|
|----------|------|-------------|
|
|
3793
|
-
|
|
|
3796
|
+
| key | DataProviderKey | Store path to bind. Supports ${prop} placeholders |
|
|
3794
3797
|
| options.reflect | boolean (default false) | Write local assignments back to the store |
|
|
3795
3798
|
| options.skipEmptyPlaceholder | boolean (default false) | Treat a placeholder resolved to "" as not ready |
|
|
3796
3799
|
|
|
@@ -4566,20 +4569,20 @@ Other ancestor attributes (serviceURL, token, …) apply as for any request: see
|
|
|
4566
4569
|
|
|
4567
4570
|
---
|
|
4568
4571
|
|
|
4569
|
-
## AI agents (
|
|
4572
|
+
## AI agents (skill)
|
|
4570
4573
|
|
|
4571
4574
|
- URL: https://concorde.supersoniks.org/docs/getting-started/ai-agents
|
|
4572
4575
|
- Doc ID: docs/getting-started/ai-agents
|
|
4573
|
-
- Keywords: Concorde, supersoniks, docs/getting-started/ai-agents, ai-agents, AI agents (
|
|
4574
|
-
| Concorde repo (contributors) | ,
|
|
4576
|
+
- Keywords: Concorde, supersoniks, docs/getting-started/ai-agents, ai-agents, AI agents (skill), guide, concorde, AGENTS.md, yarn ai:sync, ai-init, yarn add @supersoniks/concorde, |
|
|
4577
|
+
| Concorde repo (contributors) | , SKILL.md, custom-elements.json, rules/
|
|
4575
4578
|
|
|
4576
|
-
AI agents (
|
|
4579
|
+
AI agents (skill)
|
|
4577
4580
|
|
|
4578
|
-
Concorde ships
|
|
4581
|
+
Concorde ships one Agent Skill, concorde, so coding agents follow the framework patterns. Cursor, Claude Code, JetBrains Junie and other agents load it on their own when they work on Concorde code; there is nothing to add to your AGENTS.md.
|
|
4579
4582
|
|
|
4580
|
-
On a starter project, run yarn ai:sync after install. On an existing project, install Concorde first, then
|
|
4583
|
+
On a starter project, run yarn ai:sync after install. On an existing project, install Concorde first, then run ai-init.
|
|
4581
4584
|
|
|
4582
|
-
|
|
4585
|
+
Commands
|
|
4583
4586
|
|
|
4584
4587
|
| Context | Command |
|
|
4585
4588
|
|---------|---------|
|
|
@@ -4587,61 +4590,42 @@ Dedicated commands
|
|
|
4587
4590
|
| Any consumer app (after yarn add @supersoniks/concorde) | node nodemodules/@supersoniks/concorde/scripts/ai-init.mjs |
|
|
4588
4591
|
| Concorde repo (contributors) | yarn ai-init |
|
|
4589
4592
|
|
|
4590
|
-
|
|
4591
|
-
yarn ai:sync
|
|
4593
|
+
Re-run the same command after each Concorde upgrade to refresh the skill.
|
|
4592
4594
|
|
|
4593
|
-
|
|
4594
|
-
node nodemodules/@supersoniks/concorde/scripts/ai-init.mjs
|
|
4595
|
+
The skill
|
|
4595
4596
|
|
|
4596
|
-
|
|
4597
|
+
SKILL.md is the entry point: where to find the truth (the project, these docs, custom-elements.json), the critical rules and the imports. Details live in rules/ files that the agent reads only for the topic at hand.
|
|
4597
4598
|
|
|
4598
|
-
|
|
|
4599
|
-
|
|
4600
|
-
|
|
|
4601
|
-
|
|
|
4602
|
-
|
|
|
4603
|
-
|
|
|
4604
|
-
|
|
|
4605
|
-
|
|
|
4599
|
+
| File | Topic |
|
|
4600
|
+
|------|-------|
|
|
4601
|
+
| SKILL.md | Sources, critical rules, component shape, imports |
|
|
4602
|
+
| rules/data.md | Store, DataProviderKey, @subscribe / @publish / @bind / @handle, sub(), get / set / dp |
|
|
4603
|
+
| rules/http.md | Endpoint, @get / @post, API configuration |
|
|
4604
|
+
| rules/lists-forms.md | sonic-list / sonic-queue, form fields |
|
|
4605
|
+
| rules/styling.md | Theme, tokens, classes, styling rules |
|
|
4606
|
+
| rules/composition.md | Parts of compound components, built-in states |
|
|
4607
|
+
| rules/troubleshooting.md | Symptom → cause → fix: values not updating, requests not sent, empty lists |
|
|
4606
4608
|
|
|
4607
|
-
|
|
4609
|
+
What gets installed
|
|
4608
4610
|
|
|
4609
|
-
|
|
|
4610
|
-
|
|
4611
|
-
|
|
|
4612
|
-
|
|
|
4613
|
-
|
|
|
4614
|
-
| --merge-agents / --force-agents / --skip-agents | See flags above |
|
|
4611
|
+
| Path | Role |
|
|
4612
|
+
|------|------|
|
|
4613
|
+
| .agents/skills/concorde/ | The skill (read directly by Cursor) |
|
|
4614
|
+
| .claude/skills/concorde | Symlink for Claude Code |
|
|
4615
|
+
| .junie/skills/concorde | Symlink for JetBrains Junie |
|
|
4615
4616
|
|
|
4616
|
-
|
|
4617
|
+
Where symlinks are not allowed (some Windows setups), the skill is copied instead. Your own skills in these folders are never touched. Commit .agents/ and the links if your team shares agent settings.
|
|
4617
4618
|
|
|
4618
|
-
|
|
4619
|
+
AGENTS.md stays yours: ai-init never reads or writes it.
|
|
4619
4620
|
|
|
4620
|
-
|
|
4621
|
+
Flags
|
|
4621
4622
|
|
|
4622
|
-
|
|
4623
|
+
| Flag | Effect |
|
|
4624
|
+
|------|--------|
|
|
4625
|
+
| --no-links | Install .agents/skills only, without the .claude / .junie links |
|
|
4626
|
+
| --overlay | Also install the skills found in /skills/ (project kit) |
|
|
4623
4627
|
|
|
4624
|
-
|
|
4625
|
-
|------|------|
|
|
4626
|
-
| AGENTS.md | Created only if missing; existing project-owned files are left alone unless --merge-agents / --force-agents |
|
|
4627
|
-
| .cursor/skills/concorde/ | Core Lit + DataProvider patterns |
|
|
4628
|
-
| .cursor/skills/concorde-imports/ | Short @supersoniks/concorde/… import paths |
|
|
4629
|
-
| .cursor/skills/concorde-scope/ | serviceURL, formDataProvider, API configuration |
|
|
4630
|
-
| .cursor/skills/concorde-theme/ | sonic-theme and --sc- tokens |
|
|
4631
|
-
| .cursor/skills/concorde-menu/ | sonic-menu navigation |
|
|
4632
|
-
| .cursor/skills/concorde-get-set-dp/ | get / set / dp and DataProviderKey migration |
|
|
4633
|
-
| .cursor/rules/concorde.mdc | Cursor rules (always-on patterns) |
|
|
4634
|
-
| .aiassistant/rules/concorde.md | JetBrains AI Assistant rules |
|
|
4635
|
-
|
|
4636
|
-
Workflow
|
|
4637
|
-
|
|
4638
|
-
1. Starter project: Installation — yarn ai:sync is wired in the kit.
|
|
4639
|
-
2. Existing project: run ai-init after yarn add @supersoniks/concorde.
|
|
4640
|
-
3. Commit .cursor/ and .aiassistant/ (and AGENTS.md only if you opted in / it was created) if your team shares agent settings.
|
|
4641
|
-
4. Re-run the same command when you bump @supersoniks/concorde to refresh skills from nodemodules/@supersoniks/concorde/ai/.
|
|
4642
|
-
5. In Cursor, skills under .cursor/skills/ are picked up automatically; mention a skill in chat for focused tasks (e.g. migration → concorde-get-set-dp).
|
|
4643
|
-
|
|
4644
|
-
Source files in the npm package: nodemodules/@supersoniks/concorde/ai/ (see also ai/README.md in the Concorde repository).
|
|
4628
|
+
Source files in the npm package: nodemodules/@supersoniks/concorde/ai/skills/concorde/.
|
|
4645
4629
|
|
|
4646
4630
|
---
|
|
4647
4631
|
|
|
@@ -4802,7 +4786,7 @@ Quick map
|
|
|
4802
4786
|
| Derived / aggregate (JSONata) | derive() or sonic-jsonata — Jsonata |
|
|
4803
4787
|
| Offline doc demos | serviceURL="/docs-mock-api" — Local API demos |
|
|
4804
4788
|
|
|
4805
|
-
|
|
4789
|
+
Agent skill: concorde (rules/data.md), see AI agents.
|
|
4806
4790
|
|
|
4807
4791
|
DataProviderKey
|
|
4808
4792
|
|
package/docs/llms.txt
CHANGED
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
- [Sitemap](https://concorde.supersoniks.org/sitemap.xml)
|
|
14
14
|
- [npm package @supersoniks/concorde](https://www.npmjs.com/package/@supersoniks/concorde)
|
|
15
15
|
- [Getting started](https://concorde.supersoniks.org/docs/getting-started/start)
|
|
16
|
-
- [AI agents (
|
|
16
|
+
- [AI agents (skill)](https://concorde.supersoniks.org/docs/getting-started/ai-agents)
|
|
17
17
|
- [Components index](https://concorde.supersoniks.org/docs/getting-started/components)
|
|
18
|
+
- [custom-elements.json](https://concorde.supersoniks.org/custom-elements.json) — Custom Elements Manifest: attributes, properties, events and slots of every `sonic-*` element
|
|
19
|
+
- [About](https://concorde.supersoniks.org/about) · [Privacy](https://concorde.supersoniks.org/privacy)
|
|
18
20
|
|
|
19
21
|
Doc pages use the same pathnames as the interactive site (`/docs/…`, `/core/…`).
|
|
20
22
|
Markdown: same URL with `.md` (e.g. `/docs/getting-started/start.md`), or `Accept: text/markdown` on the pathname.
|
|
@@ -32,7 +34,7 @@ HTML crawlers receive a static HTML variant of the same URL.
|
|
|
32
34
|
- [Fetch](https://concorde.supersoniks.org/core/components/functional/fetch) (core/components/functional/fetch/fetch): sonic-fetch sends a GET request to serviceURL + endPoint and publishes the response under dataProvider, so its children and any subscriber of that provider can render it. In a Lit component, prefer th
|
|
33
35
|
- [If](https://concorde.supersoniks.org/core/components/functional/if) (core/components/functional/if/if): sonic-if renders its default slot only while condition is true. Use it to show or hide a block from reactive state; with no condition, the content is not rendered. The host uses display: contents, so
|
|
34
36
|
- [Jsonata](https://concorde.supersoniks.org/core/components/functional/jsonata) (core/components/functional/jsonata/jsonata): sonic-jsonata reads one data provider, evaluates a JSONata expression on it and writes the result to another data provider. Use it for read-only aggregates such as groups, rankings and totals; use Mix
|
|
35
|
-
- [List](https://concorde.supersoniks.org/core/components/functional/list) (core/components/functional/list/list): sonic-list renders one row per entry of its props array, either set directly or loaded with fetch.
|
|
37
|
+
- [List](https://concorde.supersoniks.org/core/components/functional/list) (core/components/functional/list/list): sonic-list renders one row per entry of its props array, either set directly or loaded with fetch. In TypeScript, prefer the .items row renderer (with .separator · .noItems · .skeleton); <template> ch
|
|
36
38
|
- [Mix](https://concorde.supersoniks.org/core/components/functional/mix) (core/components/functional/mix/mix): sonic-mix builds a new data provider from parts of other ones. Each key of composition maps to a source data provider id, with an optional dot path to a sub-value. The mixed provider is named by the d
|
|
37
39
|
- [Queue](https://concorde.supersoniks.org/core/components/functional/queue) (core/components/functional/queue/queue): sonic-queue loads a paginated API in batches and renders each batch as an internal List. Choose it over sonic-list for long or endless lists; the key attributes are dataProviderExpression · limit · da
|
|
38
40
|
- [Router](https://concorde.supersoniks.org/core/components/functional/router) (core/components/functional/router/router): sonic-router watches the location (pathname + hash) and renders the views whose route matches. From Lit, pass a .routes map of path patterns to render functions; use sonic-redirect to navigate when a
|
|
@@ -74,7 +76,7 @@ HTML crawlers receive a static HTML variant of the same URL.
|
|
|
74
76
|
- [Tooltip](https://concorde.supersoniks.org/core/components/ui/tooltip) (core/components/ui/tooltip/tooltip): sonic-tooltip shows a short label in a bubble when the trigger in the default slot is hovered or receives focus. With no placement, the bubble sits on top, centered. An empty label hides the bubble, l
|
|
75
77
|
- [@ancestorAttribute](https://concorde.supersoniks.org/docs/decorators/ancestor-attribute) (docs/decorators/ancestor-attribute): Copies the value of an attribute from the nearest element that carries it (the host itself, then its ancestors, across shadow roots) into a class property. Use it to pick up a scope such as dataProvid
|
|
76
78
|
- [@autoSubscribe](https://concorde.supersoniks.org/docs/decorators/auto-subscribe) (docs/decorators/auto-subscribe): Legacy decorator that re-runs a method whenever one of the store values it reads is assigned. For new code, prefer @subscribe with a DataProviderKey: dependencies are explicit and typed.
|
|
77
|
-
- [@bind](https://concorde.supersoniks.org/docs/decorators/bind) (docs/decorators/bind):
|
|
79
|
+
- [@bind](https://concorde.supersoniks.org/docs/decorators/bind) (docs/decorators/bind): @bind(key) keeps a class property and one path of the DataProvider store in sync. With { reflect: true } the sync goes both ways: the property follows the store, and each assignment is written back to
|
|
78
80
|
- [@get](https://concorde.supersoniks.org/docs/decorators/get) (docs/decorators/get): @get(endpoint) runs an HTTP GET on an Endpoint and stores the full ApiResult<T> in a property, or passes it to a method. It runs again when the endpoint's placeholders or the API configuration change,
|
|
79
81
|
- [@handle](https://concorde.supersoniks.org/docs/decorators/handle) (docs/decorators/handle): @handle(...keys) calls the decorated method each time a publisher assigns one of up to three store paths, with one typed argument per key. Nothing is stored on the component: use it for derived values
|
|
80
82
|
- [@onAssign](https://concorde.supersoniks.org/docs/decorators/on-assign) (docs/decorators/on-assign): Legacy decorator that calls a method with the values at one or more string paths of the store, once all of them are defined. For new code, use @handle with { waitForAllDefined: true }: same behaviour,
|
|
@@ -86,7 +88,7 @@ HTML crawlers receive a static HTML variant of the same URL.
|
|
|
86
88
|
- [@awaitConnectedAncestors](https://concorde.supersoniks.org/docs/decorators/wait-for-ancestors) (docs/decorators/wait-for-ancestors): Delays a component's connectedCallback until its matching ancestors are defined and connected, so context they set up (a dataProvider, a publisher, a fetched payload) is ready when the child starts. P
|
|
87
89
|
- [sub()](https://concorde.supersoniks.org/docs/directives/sub) (docs/directives/sub): sub(path) is a Lit directive that renders the current value of a store path and updates in place on every assignment. Use it inside html templates for read-only display; in a decorator, the same path
|
|
88
90
|
- [t()](https://concorde.supersoniks.org/docs/directives/t) (docs/directives/t): Lit directive that renders a translated label by key. Keys are batched into one GET to the endpoint set by the nearest wordingProvider ancestor attribute, and results are cached in localStorage.
|
|
89
|
-
- [AI agents (
|
|
91
|
+
- [AI agents (skill)](https://concorde.supersoniks.org/docs/getting-started/ai-agents) (docs/getting-started/ai-agents): Concorde ships one Agent Skill, concorde, so coding agents follow the framework patterns. Cursor, Claude Code, JetBrains Junie and other agents load it on their own when they work on Concorde code; th
|
|
90
92
|
- [Components](https://concorde.supersoniks.org/docs/getting-started/components) (docs/getting-started/components): Every Concorde web component, grouped like the sidebar. Pick one to see its live demos, attributes and import path.
|
|
91
93
|
- [Creating components](https://concorde.supersoniks.org/docs/getting-started/create-a-component) (docs/getting-started/create-a-component): > New app components: start with My first component and Data flow. The Subscriber mixin below is legacy.
|
|
92
94
|
- [Data flow](https://concorde.supersoniks.org/docs/getting-started/dataFlow) (docs/getting-started/dataFlow): Recommended patterns for new Concorde apps (Lit + TypeScript). Under the hood, data lives in a DataProvider store.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="./svg/favicon.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>Privacy notice — Concorde by Supersoniks</title>
|
|
8
|
+
<meta name="description" content="Privacy notice of the Concorde documentation site: no cookies, no analytics, third-party hosts and your GDPR rights." />
|
|
9
|
+
<meta
|
|
10
|
+
name="keywords"
|
|
11
|
+
content="Concorde, Supersoniks, web components, Lit, design system, @supersoniks/concorde, DataProvider, sonic-button"
|
|
12
|
+
/>
|
|
13
|
+
<link rel="canonical" href="https://concorde.supersoniks.org/privacy" />
|
|
14
|
+
<link rel="alternate" type="text/markdown" href="/privacy.md" title="Markdown" />
|
|
15
|
+
<link rel="alternate" type="text/plain" href="/llms.txt" title="llms.txt" />
|
|
16
|
+
<meta property="og:type" content="website" />
|
|
17
|
+
<meta property="og:site_name" content="Concorde by Supersoniks" />
|
|
18
|
+
<meta property="og:title" content="Privacy notice — Concorde by Supersoniks" />
|
|
19
|
+
<meta property="og:description" content="Privacy notice of the Concorde documentation site: no cookies, no analytics, third-party hosts and your GDPR rights." />
|
|
20
|
+
<meta property="og:url" content="https://concorde.supersoniks.org/privacy" />
|
|
21
|
+
<meta property="og:image" content="https://concorde.supersoniks.org/img/og-concorde.jpg" />
|
|
22
|
+
<meta property="og:image:width" content="1200" />
|
|
23
|
+
<meta property="og:image:height" content="630" />
|
|
24
|
+
<meta property="og:image:alt" content="Five Concorde aircraft parked nose to nose, black and white photo" />
|
|
25
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
26
|
+
<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Privacy notice — Concorde by Supersoniks","description":"Privacy notice of the Concorde documentation site: no cookies, no analytics, third-party hosts and your GDPR rights.","url":"https://concorde.supersoniks.org/privacy","isPartOf":{"@type":"WebSite","name":"Concorde","url":"https://concorde.supersoniks.org/"},"publisher":{"@type":"Organization","@id":"https://supersoniks.com/#organization","name":"Supersoniks","legalName":"SUPERSONIKS","url":"https://supersoniks.com/","telephone":"+33 2 47 68 93 25","address":{"@type":"PostalAddress","streetAddress":"22 rue du Docteur Bretonneau","postalCode":"37000","addressLocality":"Tours","addressCountry":"FR"},"contactPoint":{"@type":"ContactPoint","contactType":"customer service","telephone":"+33 2 47 68 93 25","url":"https://supersoniks.com/un-projet","availableLanguage":["fr","en"]},"sameAs":["https://www.linkedin.com/company/supersoniks/","https://www.facebook.com/supersoniks","https://www.instagram.com/agencesupersoniks/"]}}</script>
|
|
27
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
28
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
29
|
+
<link
|
|
30
|
+
href="https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@400;600;800&display=swap"
|
|
31
|
+
rel="stylesheet"
|
|
32
|
+
/>
|
|
33
|
+
<script src="https://cdn.jsdelivr.net/npm/fuzzysort@2.0.1/fuzzysort.min.js"></script>
|
|
34
|
+
<!-- <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
|
35
|
+
-->
|
|
36
|
+
<script src="https://cdn.jsdelivr.net/npm/marked@13.0.3"></script>
|
|
37
|
+
<style>
|
|
38
|
+
/*
|
|
39
|
+
Crawler/agent fallback stays in the HTML source (Is Agentic raw-text check)
|
|
40
|
+
but must not take clicks or layout away from the interactive homepage.
|
|
41
|
+
*/
|
|
42
|
+
#docs-agent-content {
|
|
43
|
+
display: none !important;
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
46
|
+
<script type="module" crossorigin src="/assets/index-6sS76xWj.js"></script>
|
|
47
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DkdPbH0F.css">
|
|
48
|
+
</head>
|
|
49
|
+
<body class="px-4 sm:px-6 lg:px-10 2xl:px-20">
|
|
50
|
+
<!--
|
|
51
|
+
Static homepage copy for agents and no-JS crawlers (Is Agentic / Ora).
|
|
52
|
+
Hidden after JS boot; must stay in raw HTML with a clear H1 and 500+ chars.
|
|
53
|
+
-->
|
|
54
|
+
<section id="docs-agent-content" aria-hidden="true">
|
|
55
|
+
<h1 id="privacy-notice">Privacy notice</h1>
|
|
56
|
+
<p>This notice covers the Concorde documentation site, <a href="https://concorde.supersoniks.org">https://concorde.supersoniks.org</a>, published by <a href="https://supersoniks.com/">Supersoniks</a>, 22 rue du Docteur Bretonneau, 37000 Tours, France.</p>
|
|
57
|
+
<h2 id="what-this-site-does-not-do">What this site does not do</h2>
|
|
58
|
+
<ul>
|
|
59
|
+
<li>It has no user accounts, sign-up or login.</li>
|
|
60
|
+
<li>It sets no cookies and runs no analytics, advertising or tracking scripts.</li>
|
|
61
|
+
<li>It has no forms that send personal data to Supersoniks.</li>
|
|
62
|
+
</ul>
|
|
63
|
+
<h2 id="what-is-stored-in-your-browser">What is stored in your browser</h2>
|
|
64
|
+
<ul>
|
|
65
|
+
<li><code>sonicTheme</code> in localStorage remembers your light or dark theme choice. It never leaves your browser.</li>
|
|
66
|
+
<li>A service worker serves the mock API used by live examples (<code>/docs-mock-api/…</code>). It runs locally in your browser.</li>
|
|
67
|
+
<li>Some examples demonstrate features that store values in localStorage (for example dismissed alerts or cached labels). They only run when you open those pages.</li>
|
|
68
|
+
</ul>
|
|
69
|
+
<h2 id="third-party-services">Third-party services</h2>
|
|
70
|
+
<p>To display pages, your browser loads files from these providers, which receive your IP address and browser details as part of any web request:</p>
|
|
71
|
+
<ul>
|
|
72
|
+
<li>Google Fonts (fonts.googleapis.com, fonts.gstatic.com) for the Schibsted Grotesk font.</li>
|
|
73
|
+
<li>jsDelivr (cdn.jsdelivr.net) for the search and Markdown libraries.</li>
|
|
74
|
+
<li>cdn.supersoniks.com for icons.</li>
|
|
75
|
+
<li>A few live examples call public demo APIs (geo.api.gouv.fr, reqres.in, i.pravatar.cc) when you open them.</li>
|
|
76
|
+
</ul>
|
|
77
|
+
<h2 id="server-logs">Server logs</h2>
|
|
78
|
+
<p>Like any web server, the host records technical request data (IP address, URL, date, user agent) to operate and secure the site.</p>
|
|
79
|
+
<h2 id="your-rights">Your rights</h2>
|
|
80
|
+
<p>Under the GDPR you can ask for access to, correction or deletion of data about you. Contact Supersoniks through <a href="https://supersoniks.com/un-projet">supersoniks.com/un-projet</a>, by phone at +33 2 47 68 93 25, or by mail at 22 rue du Docteur Bretonneau, 37000 Tours, France. See also the <a href="https://supersoniks.com/politique-de-confidentialite">Supersoniks privacy policy</a> and <a href="https://supersoniks.com/mentions-legales">legal notice</a>.</p>
|
|
81
|
+
|
|
82
|
+
</section>
|
|
83
|
+
|
|
84
|
+
<sonic-theme
|
|
85
|
+
customIconLibraryPath="https://cdn.supersoniks.com/concorde/icons/fontawesome/v6/$prefix/$name.svg"
|
|
86
|
+
customIconDefaultPrefix="regular"
|
|
87
|
+
markdownsURL=""
|
|
88
|
+
>
|
|
89
|
+
<sonic-docs-header></sonic-docs-header>
|
|
90
|
+
<sonic-router>
|
|
91
|
+
<!-- Home only at `/` (doc pages use pathname `/docs/...` or `/core/...`). -->
|
|
92
|
+
<template data-route="^/?$">
|
|
93
|
+
<docs-home></docs-home>
|
|
94
|
+
</template>
|
|
95
|
+
</sonic-router>
|
|
96
|
+
|
|
97
|
+
<div
|
|
98
|
+
class="[[data-home]_&]:hidden grid grid-cols-1 lg:grid-cols-[14rem_minmax(0,1fr)] xl:grid-cols-[15rem_minmax(0,1fr)_13rem] gap-8 xl:gap-12"
|
|
99
|
+
>
|
|
100
|
+
<aside class="hidden lg:block">
|
|
101
|
+
<docs-navigation
|
|
102
|
+
class="sticky top-[4.2rem] max-h-[calc(100svh_-_4.2rem)] block overflow-auto py-4 custom-scroll"
|
|
103
|
+
></docs-navigation>
|
|
104
|
+
</aside>
|
|
105
|
+
<main class="min-w-0 min-h-[100svh] pt-3">
|
|
106
|
+
<div class="max-w-prose mx-auto xl:mx-0">
|
|
107
|
+
<docs-page
|
|
108
|
+
noShadowDom
|
|
109
|
+
class="prose max-w-none block py-8 prose-li:my-[.2em] leading-[1.5] lg:leading-[1.5] prose-h1:text-[2.4em] sm:prose-h1:text-[3.25em] prose-code:before:content-none prose-code:after:content-none prose-pre:font-mono"
|
|
110
|
+
></docs-page>
|
|
111
|
+
<docs-pager class="block mt-8 pb-16"></docs-pager>
|
|
112
|
+
</div>
|
|
113
|
+
</main>
|
|
114
|
+
<aside class="hidden xl:block">
|
|
115
|
+
<docs-toc
|
|
116
|
+
class="sticky top-[4.2rem] max-h-[calc(100svh_-_4.2rem)] block overflow-auto py-4 custom-scroll"
|
|
117
|
+
></docs-toc>
|
|
118
|
+
</aside>
|
|
119
|
+
</div>
|
|
120
|
+
</sonic-theme>
|
|
121
|
+
</body>
|
|
122
|
+
</html>
|
package/docs/privacy.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Privacy notice
|
|
2
|
+
|
|
3
|
+
This notice covers the Concorde documentation site, https://concorde.supersoniks.org, published by [Supersoniks](https://supersoniks.com/), 22 rue du Docteur Bretonneau, 37000 Tours, France.
|
|
4
|
+
|
|
5
|
+
## What this site does not do
|
|
6
|
+
|
|
7
|
+
- It has no user accounts, sign-up or login.
|
|
8
|
+
- It sets no cookies and runs no analytics, advertising or tracking scripts.
|
|
9
|
+
- It has no forms that send personal data to Supersoniks.
|
|
10
|
+
|
|
11
|
+
## What is stored in your browser
|
|
12
|
+
|
|
13
|
+
- `sonicTheme` in localStorage remembers your light or dark theme choice. It never leaves your browser.
|
|
14
|
+
- A service worker serves the mock API used by live examples (`/docs-mock-api/…`). It runs locally in your browser.
|
|
15
|
+
- Some examples demonstrate features that store values in localStorage (for example dismissed alerts or cached labels). They only run when you open those pages.
|
|
16
|
+
|
|
17
|
+
## Third-party services
|
|
18
|
+
|
|
19
|
+
To display pages, your browser loads files from these providers, which receive your IP address and browser details as part of any web request:
|
|
20
|
+
|
|
21
|
+
- Google Fonts (fonts.googleapis.com, fonts.gstatic.com) for the Schibsted Grotesk font.
|
|
22
|
+
- jsDelivr (cdn.jsdelivr.net) for the search and Markdown libraries.
|
|
23
|
+
- cdn.supersoniks.com for icons.
|
|
24
|
+
- A few live examples call public demo APIs (geo.api.gouv.fr, reqres.in, i.pravatar.cc) when you open them.
|
|
25
|
+
|
|
26
|
+
## Server logs
|
|
27
|
+
|
|
28
|
+
Like any web server, the host records technical request data (IP address, URL, date, user agent) to operate and secure the site.
|
|
29
|
+
|
|
30
|
+
## Your rights
|
|
31
|
+
|
|
32
|
+
Under the GDPR you can ask for access to, correction or deletion of data about you. Contact Supersoniks through [supersoniks.com/un-projet](https://supersoniks.com/un-projet), by phone at +33 2 47 68 93 25, or by mail at 22 rue du Docteur Bretonneau, 37000 Tours, France. See also the [Supersoniks privacy policy](https://supersoniks.com/politique-de-confidentialite) and [legal notice](https://supersoniks.com/mentions-legales).
|