@supersoniks/concorde 4.9.98-visual-stack.2 → 4.9.98-visual-stack.4
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-3d.bundle.js +1 -1
- package/concorde-3d.es.js +1 -1
- package/concorde-core.bundle.js +2 -2
- package/concorde-core.es.js +7 -2
- package/concorde-hugging-face-infer.bundle.js +1 -1
- package/concorde-hugging-face-infer.es.js +1 -1
- package/concorde-interactive.bundle.js +38 -43
- package/concorde-interactive.es.js +157 -146
- package/concorde-shader.bundle.js +1 -1
- package/concorde-shader.es.js +1 -1
- package/concorde-webgpu.bundle.js +1 -1
- package/concorde-webgpu.es.js +1 -1
- package/dist/concorde-3d.bundle.js +1 -1
- package/dist/concorde-3d.es.js +1 -1
- package/dist/concorde-core.bundle.js +2 -2
- package/dist/concorde-core.es.js +7 -2
- package/dist/concorde-hugging-face-infer.bundle.js +1 -1
- package/dist/concorde-hugging-face-infer.es.js +1 -1
- package/dist/concorde-interactive.bundle.js +38 -43
- package/dist/concorde-interactive.es.js +157 -146
- package/dist/concorde-shader.bundle.js +1 -1
- package/dist/concorde-shader.es.js +1 -1
- package/dist/concorde-webgpu.bundle.js +1 -1
- package/dist/concorde-webgpu.es.js +1 -1
- package/dist/js/core/components/functional/interactive/gesture.js +19 -6
- package/dist/js/core/components/functional/interactive/gesture.js.map +1 -1
- package/dist/js/core/components/functional/interactive/store.js +11 -3
- package/dist/js/core/components/functional/interactive/store.js.map +1 -1
- package/dist/js/core/mixins/Subscriber.js +6 -1
- package/dist/js/core/mixins/Subscriber.js.map +1 -1
- package/dist/types/core/components/functional/interactive/gesture.d.ts +2 -0
- package/dist/types/core/components/functional/interactive/gesture.d.ts.map +1 -1
- package/dist/types/core/components/functional/interactive/store.d.ts +2 -0
- package/dist/types/core/components/functional/interactive/store.d.ts.map +1 -1
- package/dist/types/core/mixins/Subscriber.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/components/functional/interactive/gesture.ts +20 -6
- package/src/core/components/functional/interactive/store.ts +9 -3
- package/src/core/mixins/Subscriber.ts +5 -1
- package/src/docs/_getting-started/cdn-addons.md +1 -0
- package/src/docs/navigation/navigation.ts +4 -0
- package/src/docs/search/docs-search.json +2513 -710
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
[
|
|
2
2
|
{
|
|
3
|
-
"search": "
|
|
3
|
+
"search": "3D",
|
|
4
4
|
"files": {
|
|
5
|
-
"core/components/functional/
|
|
6
|
-
"title": "
|
|
5
|
+
"core/components/functional/3d/3d.md": {
|
|
6
|
+
"title": "3D",
|
|
7
7
|
"hashes": {
|
|
8
|
-
"
|
|
9
|
-
"count":
|
|
8
|
+
"3d": {
|
|
9
|
+
"count": 1,
|
|
10
10
|
"title": "",
|
|
11
11
|
"type": "page"
|
|
12
12
|
}
|
|
@@ -15,42 +15,12 @@
|
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
|
-
"search": "
|
|
19
|
-
"files": {
|
|
20
|
-
"core/components/functional/date/date.md": {
|
|
21
|
-
"title": "Date",
|
|
22
|
-
"hashes": {
|
|
23
|
-
"no-attribute": {
|
|
24
|
-
"count": 1,
|
|
25
|
-
"title": "No attribute",
|
|
26
|
-
"type": "paragraph"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"search": "Displays the current date.\n",
|
|
34
|
-
"files": {
|
|
35
|
-
"core/components/functional/date/date.md": {
|
|
36
|
-
"title": "Date",
|
|
37
|
-
"hashes": {
|
|
38
|
-
"now": {
|
|
39
|
-
"count": 1,
|
|
40
|
-
"title": "Now",
|
|
41
|
-
"type": "paragraph"
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"search": "Displays a date from a timestamp.\n",
|
|
18
|
+
"search": "sonic-3d — viewer Three.js (glTF / GLB), caméra orbit / perspective / ortho, outputs dataProvider paresseux.\n",
|
|
49
19
|
"files": {
|
|
50
|
-
"core/components/functional/
|
|
51
|
-
"title": "
|
|
20
|
+
"core/components/functional/3d/3d.md": {
|
|
21
|
+
"title": "3D",
|
|
52
22
|
"hashes": {
|
|
53
|
-
"
|
|
23
|
+
"3d": {
|
|
54
24
|
"count": 1,
|
|
55
25
|
"title": "",
|
|
56
26
|
"type": "paragraph"
|
|
@@ -60,112 +30,22 @@
|
|
|
60
30
|
}
|
|
61
31
|
},
|
|
62
32
|
{
|
|
63
|
-
"search": "
|
|
64
|
-
"files": {
|
|
65
|
-
"core/components/functional/date/date.md": {
|
|
66
|
-
"title": "Date",
|
|
67
|
-
"hashes": {
|
|
68
|
-
"date_string": {
|
|
69
|
-
"count": 1,
|
|
70
|
-
"title": "Date_string",
|
|
71
|
-
"type": "paragraph"
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"search": "Displays a period of time from start_date to end_date.When by itself start_date will act as dateif a start_date is not specified it will be set by the current date.if the end_date is anterior to start date date it will be used as the start_date. \n",
|
|
79
|
-
"files": {
|
|
80
|
-
"core/components/functional/date/date.md": {
|
|
81
|
-
"title": "Date",
|
|
82
|
-
"hashes": {
|
|
83
|
-
"start_date--end_date": {
|
|
84
|
-
"count": 1,
|
|
85
|
-
"title": "Start_date / end_date",
|
|
86
|
-
"type": "paragraph"
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"search": "ISO 639-1 Language Codes\n",
|
|
94
|
-
"files": {
|
|
95
|
-
"core/components/functional/date/date.md": {
|
|
96
|
-
"title": "Date",
|
|
97
|
-
"hashes": {
|
|
98
|
-
"language": {
|
|
99
|
-
"count": 1,
|
|
100
|
-
"title": "Language",
|
|
101
|
-
"type": "paragraph"
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"search": "For the list of supported timeZones, run Intl.supportedValuesOf('timeZone') in the console\n",
|
|
109
|
-
"files": {
|
|
110
|
-
"core/components/functional/date/date.md": {
|
|
111
|
-
"title": "Date",
|
|
112
|
-
"hashes": {
|
|
113
|
-
"time_zone": {
|
|
114
|
-
"count": 1,
|
|
115
|
-
"title": "Time_zone",
|
|
116
|
-
"type": "paragraph"
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"search": "Deprecated\n",
|
|
33
|
+
"search": "Import opt-in (hors bundle functional) :\n",
|
|
124
34
|
"files": {
|
|
125
|
-
"core/components/functional/
|
|
126
|
-
"title": "
|
|
35
|
+
"core/components/functional/3d/3d.md": {
|
|
36
|
+
"title": "3D",
|
|
127
37
|
"hashes": {
|
|
128
|
-
"
|
|
38
|
+
"3d": {
|
|
129
39
|
"count": 1,
|
|
130
|
-
"title": "
|
|
40
|
+
"title": "",
|
|
131
41
|
"type": "paragraph"
|
|
132
42
|
}
|
|
133
43
|
}
|
|
134
44
|
},
|
|
135
|
-
"core/components/functional/
|
|
136
|
-
"title": "
|
|
137
|
-
"hashes": {
|
|
138
|
-
"headersdataprovider": {
|
|
139
|
-
"count": 1,
|
|
140
|
-
"title": "HeadersDataProvider",
|
|
141
|
-
"type": "paragraph"
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
"search": "Fetch",
|
|
149
|
-
"files": {
|
|
150
|
-
"core/components/functional/fetch/fetch.md": {
|
|
151
|
-
"title": "Fetch",
|
|
152
|
-
"hashes": {
|
|
153
|
-
"fetch": {
|
|
154
|
-
"count": 1,
|
|
155
|
-
"title": "",
|
|
156
|
-
"type": "page"
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
"search": "New apps: prefer @get for a typed GET on a component, or List / Queue with fetch for collections. Use Local API demos (serviceURL="/docs-mock-api") to try examples offline.\n",
|
|
164
|
-
"files": {
|
|
165
|
-
"core/components/functional/fetch/fetch.md": {
|
|
166
|
-
"title": "Fetch",
|
|
45
|
+
"core/components/functional/shader/shader.md": {
|
|
46
|
+
"title": "Shader",
|
|
167
47
|
"hashes": {
|
|
168
|
-
"
|
|
48
|
+
"shader": {
|
|
169
49
|
"count": 1,
|
|
170
50
|
"title": "",
|
|
171
51
|
"type": "paragraph"
|
|
@@ -175,12 +55,12 @@
|
|
|
175
55
|
}
|
|
176
56
|
},
|
|
177
57
|
{
|
|
178
|
-
"search": "
|
|
58
|
+
"search": "CDN (after the core): concorde-3d.bundle.js — see CDN addons.\n",
|
|
179
59
|
"files": {
|
|
180
|
-
"core/components/functional/
|
|
181
|
-
"title": "
|
|
60
|
+
"core/components/functional/3d/3d.md": {
|
|
61
|
+
"title": "3D",
|
|
182
62
|
"hashes": {
|
|
183
|
-
"
|
|
63
|
+
"3d": {
|
|
184
64
|
"count": 1,
|
|
185
65
|
"title": "",
|
|
186
66
|
"type": "paragraph"
|
|
@@ -190,44 +70,14 @@
|
|
|
190
70
|
}
|
|
191
71
|
},
|
|
192
72
|
{
|
|
193
|
-
"search": "
|
|
194
|
-
"files": {
|
|
195
|
-
"core/components/functional/fetch/fetch.md": {
|
|
196
|
-
"title": "Fetch",
|
|
197
|
-
"hashes": {
|
|
198
|
-
"basic-usage": {
|
|
199
|
-
"count": 1,
|
|
200
|
-
"title": "Basic usage",
|
|
201
|
-
"type": "paragraph"
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
"search": "If no endPoint is specified it will be filled by the dataProvider ID instead \n",
|
|
209
|
-
"files": {
|
|
210
|
-
"core/components/functional/fetch/fetch.md": {
|
|
211
|
-
"title": "Fetch",
|
|
212
|
-
"hashes": {
|
|
213
|
-
"dataprovider-as-an-endpoint": {
|
|
214
|
-
"count": 1,
|
|
215
|
-
"title": "DataProvider as an endPoint",
|
|
216
|
-
"type": "paragraph"
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
"search": "When the key attribute is present, only a sub-part of the data received is injected into the dataProvider.\nWe can use the dot syntax to target what we want to keep.\n",
|
|
73
|
+
"search": "DamagedHelmet (Khronos, jsDelivr). Orbit · zoom · pan · survol highlight · pick · double-clic = recentrer. Sans src : cube de démo. Molette : zoom tant qu’il reste de la marge ; aux bornes minDistance / maxDistance, le scroll page reprend.\n",
|
|
224
74
|
"files": {
|
|
225
|
-
"core/components/functional/
|
|
226
|
-
"title": "
|
|
75
|
+
"core/components/functional/3d/3d.md": {
|
|
76
|
+
"title": "3D",
|
|
227
77
|
"hashes": {
|
|
228
|
-
"
|
|
78
|
+
"démo-modèle-cdn": {
|
|
229
79
|
"count": 1,
|
|
230
|
-
"title": "
|
|
80
|
+
"title": "Démo (modèle CDN)",
|
|
231
81
|
"type": "paragraph"
|
|
232
82
|
}
|
|
233
83
|
}
|
|
@@ -235,93 +85,57 @@
|
|
|
235
85
|
}
|
|
236
86
|
},
|
|
237
87
|
{
|
|
238
|
-
"search": "
|
|
88
|
+
"search": "\n",
|
|
239
89
|
"files": {
|
|
240
|
-
"core/components/functional/
|
|
241
|
-
"title": "
|
|
90
|
+
"core/components/functional/3d/3d.md": {
|
|
91
|
+
"title": "3D",
|
|
242
92
|
"hashes": {
|
|
243
|
-
"
|
|
93
|
+
"démo-modèle-cdn": {
|
|
244
94
|
"count": 1,
|
|
245
|
-
"title": "
|
|
95
|
+
"title": "Démo (modèle CDN)",
|
|
246
96
|
"type": "paragraph"
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
"search": "if the mime type of the content returned by the service begins with text/, then the dataProvider has a key named "text" which contains the text returned by the service.\n",
|
|
254
|
-
"files": {
|
|
255
|
-
"core/components/functional/fetch/fetch.md": {
|
|
256
|
-
"title": "Fetch",
|
|
257
|
-
"hashes": {
|
|
258
|
-
"text-mode": {
|
|
97
|
+
},
|
|
98
|
+
"form-auto-bind-formdataprovider": {
|
|
259
99
|
"count": 1,
|
|
260
|
-
"title": "
|
|
100
|
+
"title": "Form auto-bind (`formDataProvider`)",
|
|
261
101
|
"type": "paragraph"
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
"search": "The noLoader attribute disables display of the default loader\n",
|
|
269
|
-
"files": {
|
|
270
|
-
"core/components/functional/fetch/fetch.md": {
|
|
271
|
-
"title": "Fetch",
|
|
272
|
-
"hashes": {
|
|
273
|
-
"noloader": {
|
|
102
|
+
},
|
|
103
|
+
"sortie--dataprovider": {
|
|
274
104
|
"count": 1,
|
|
275
|
-
"title": "
|
|
105
|
+
"title": "Sortie / dataProvider",
|
|
276
106
|
"type": "paragraph"
|
|
277
107
|
}
|
|
278
108
|
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
},
|
|
282
|
-
{
|
|
283
|
-
"search": "if",
|
|
284
|
-
"files": {
|
|
109
|
+
},
|
|
285
110
|
"core/components/functional/if/if.md": {
|
|
286
111
|
"title": "if",
|
|
287
112
|
"hashes": {
|
|
288
113
|
"if": {
|
|
289
114
|
"count": 1,
|
|
290
115
|
"title": "",
|
|
291
|
-
"type": "
|
|
116
|
+
"type": "paragraph"
|
|
292
117
|
}
|
|
293
118
|
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
{
|
|
298
|
-
"search": "The sonic-if component shows its slot when .condition is true. In Lit, bind .condition from store-driven state (@subscribe on a formDataProvider field) — live preview and TypeScript source are the same file (docs-lit-demo):\n",
|
|
299
|
-
"files": {
|
|
300
|
-
"core/components/functional/if/if.md": {
|
|
301
|
-
"title": "if",
|
|
119
|
+
},
|
|
120
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
121
|
+
"title": "Hugging Face infer",
|
|
302
122
|
"hashes": {
|
|
303
|
-
"
|
|
123
|
+
"image--background-removal": {
|
|
304
124
|
"count": 1,
|
|
305
|
-
"title": "",
|
|
125
|
+
"title": "Image — `background-removal`",
|
|
306
126
|
"type": "paragraph"
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
},
|
|
312
|
-
{
|
|
313
|
-
"search": "\n",
|
|
314
|
-
"files": {
|
|
315
|
-
"core/components/functional/if/if.md": {
|
|
316
|
-
"title": "if",
|
|
317
|
-
"hashes": {
|
|
318
|
-
"if": {
|
|
127
|
+
},
|
|
128
|
+
"text--zero-shot-classification": {
|
|
319
129
|
"count": 1,
|
|
320
|
-
"title": "",
|
|
130
|
+
"title": "Text — `zero-shot-classification`",
|
|
321
131
|
"type": "paragraph"
|
|
322
132
|
}
|
|
323
133
|
}
|
|
324
134
|
},
|
|
135
|
+
"core/components/functional/interactive/interactive.md": {
|
|
136
|
+
"title": "Interactive (SDUI)",
|
|
137
|
+
"hashes": {}
|
|
138
|
+
},
|
|
325
139
|
"core/components/functional/jsonata/jsonata.md": {
|
|
326
140
|
"title": "Jsonata",
|
|
327
141
|
"hashes": {
|
|
@@ -392,25 +206,50 @@
|
|
|
392
206
|
}
|
|
393
207
|
}
|
|
394
208
|
},
|
|
395
|
-
"core/components/functional/
|
|
396
|
-
"title": "
|
|
209
|
+
"core/components/functional/shader/shader.md": {
|
|
210
|
+
"title": "Shader",
|
|
397
211
|
"hashes": {
|
|
398
|
-
"
|
|
212
|
+
"multipass-sur-une-photo": {
|
|
399
213
|
"count": 1,
|
|
400
|
-
"title": "
|
|
214
|
+
"title": "Multipass sur une photo",
|
|
401
215
|
"type": "paragraph"
|
|
402
216
|
},
|
|
403
|
-
"
|
|
217
|
+
"chaînage-deffets-officiel": {
|
|
404
218
|
"count": 1,
|
|
405
|
-
"title": "
|
|
219
|
+
"title": "Chaînage d’effets (officiel)",
|
|
406
220
|
"type": "paragraph"
|
|
407
221
|
},
|
|
408
|
-
"
|
|
222
|
+
"rollover--roll-out-hover-param": {
|
|
409
223
|
"count": 1,
|
|
410
|
-
"title": "
|
|
224
|
+
"title": "Rollover / roll-out (`hover-param`)",
|
|
411
225
|
"type": "paragraph"
|
|
412
226
|
},
|
|
413
|
-
"
|
|
227
|
+
"sortie--sampling-sample--dataprovider": {
|
|
228
|
+
"count": 1,
|
|
229
|
+
"title": "Sortie / sampling (`sample` + dataProvider)",
|
|
230
|
+
"type": "paragraph"
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
"core/components/functional/submit/submit.md": {
|
|
235
|
+
"title": "Submit",
|
|
236
|
+
"hashes": {
|
|
237
|
+
"form-and-result-handling": {
|
|
238
|
+
"count": 1,
|
|
239
|
+
"title": "Form and result handling",
|
|
240
|
+
"type": "paragraph"
|
|
241
|
+
},
|
|
242
|
+
"native-html-form": {
|
|
243
|
+
"count": 1,
|
|
244
|
+
"title": "Native HTML form",
|
|
245
|
+
"type": "paragraph"
|
|
246
|
+
},
|
|
247
|
+
"sendasformdata": {
|
|
248
|
+
"count": 1,
|
|
249
|
+
"title": "sendAsFormData",
|
|
250
|
+
"type": "paragraph"
|
|
251
|
+
},
|
|
252
|
+
"submit-result-key": {
|
|
414
253
|
"count": 1,
|
|
415
254
|
"title": "submit-result-key",
|
|
416
255
|
"type": "paragraph"
|
|
@@ -437,6 +276,16 @@
|
|
|
437
276
|
}
|
|
438
277
|
}
|
|
439
278
|
},
|
|
279
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
280
|
+
"title": "WebGPU",
|
|
281
|
+
"hashes": {
|
|
282
|
+
"demo--particles-compute": {
|
|
283
|
+
"count": 1,
|
|
284
|
+
"title": "Demo — particles (compute)",
|
|
285
|
+
"type": "paragraph"
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
},
|
|
440
289
|
"core/components/ui/form/checkbox/checkbox.md": {
|
|
441
290
|
"title": "Checkbox",
|
|
442
291
|
"hashes": {
|
|
@@ -571,18 +420,48 @@
|
|
|
571
420
|
"type": "paragraph"
|
|
572
421
|
}
|
|
573
422
|
}
|
|
423
|
+
},
|
|
424
|
+
"docs/_misc/visual-stack.md": {
|
|
425
|
+
"title": "Visual stack",
|
|
426
|
+
"hashes": {
|
|
427
|
+
"demo": {
|
|
428
|
+
"count": 1,
|
|
429
|
+
"title": "Demo",
|
|
430
|
+
"type": "paragraph"
|
|
431
|
+
},
|
|
432
|
+
"3d--shader-live-gpu-bridge": {
|
|
433
|
+
"count": 1,
|
|
434
|
+
"title": "3D → shader live (GPU bridge)",
|
|
435
|
+
"type": "paragraph"
|
|
436
|
+
},
|
|
437
|
+
"3d--webgpu-live": {
|
|
438
|
+
"count": 1,
|
|
439
|
+
"title": "3D → WebGPU live",
|
|
440
|
+
"type": "paragraph"
|
|
441
|
+
},
|
|
442
|
+
"post-fx--depth-in-sonic-3d": {
|
|
443
|
+
"count": 1,
|
|
444
|
+
"title": "Post FX + depth (in sonic-3d)",
|
|
445
|
+
"type": "paragraph"
|
|
446
|
+
},
|
|
447
|
+
"harris--patches--webgpu": {
|
|
448
|
+
"count": 1,
|
|
449
|
+
"title": "Harris → patches → WebGPU",
|
|
450
|
+
"type": "paragraph"
|
|
451
|
+
}
|
|
452
|
+
}
|
|
574
453
|
}
|
|
575
454
|
}
|
|
576
455
|
},
|
|
577
456
|
{
|
|
578
|
-
"search": "
|
|
457
|
+
"search": "Comme sonic-shader : si dataProvider (ou un ancêtre formDataProvider) contient des champs aux mêmes noms que l’API, ils pilotent le viewer sans JS.\n",
|
|
579
458
|
"files": {
|
|
580
|
-
"core/components/functional/
|
|
581
|
-
"title": "
|
|
459
|
+
"core/components/functional/3d/3d.md": {
|
|
460
|
+
"title": "3D",
|
|
582
461
|
"hashes": {
|
|
583
|
-
"
|
|
462
|
+
"form-auto-bind-formdataprovider": {
|
|
584
463
|
"count": 1,
|
|
585
|
-
"title": "",
|
|
464
|
+
"title": "Form auto-bind (`formDataProvider`)",
|
|
586
465
|
"type": "paragraph"
|
|
587
466
|
}
|
|
588
467
|
}
|
|
@@ -590,13 +469,178 @@
|
|
|
590
469
|
}
|
|
591
470
|
},
|
|
592
471
|
{
|
|
593
|
-
"search": "
|
|
472
|
+
"search": "Conseil : séparer out-data-provider du form. Les entrées pures (fov, exposure, autoRotate, src…) ne sont jamais réécrites en out sur un DP partagé. yaw / distance / pitch restent publiables ; un changement manuel d’orbit coupe autoRotate.\n",
|
|
594
473
|
"files": {
|
|
595
|
-
"core/components/functional/
|
|
596
|
-
"title": "
|
|
474
|
+
"core/components/functional/3d/3d.md": {
|
|
475
|
+
"title": "3D",
|
|
597
476
|
"hashes": {
|
|
598
|
-
"
|
|
477
|
+
"form-auto-bind-formdataprovider": {
|
|
478
|
+
"count": 1,
|
|
479
|
+
"title": "Form auto-bind (`formDataProvider`)",
|
|
480
|
+
"type": "paragraph"
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"search": "Gate paresseuse : un sonic-input name="yaw" ne déclenche pas la publication out (seul un lecteur sur ready / frame / cam* / hit*… le fait).\n",
|
|
488
|
+
"files": {
|
|
489
|
+
"core/components/functional/3d/3d.md": {
|
|
490
|
+
"title": "3D",
|
|
491
|
+
"hashes": {
|
|
492
|
+
"form-auto-bind-formdataprovider": {
|
|
493
|
+
"count": 1,
|
|
494
|
+
"title": "Form auto-bind (`formDataProvider`)",
|
|
495
|
+
"type": "paragraph"
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
"search": "Entrée : champs ci-dessus. Sortie (Sonic3dOutput) : cam* / target* / distance / yaw / pitch / pointer* / ready / hit*… With frame-out (or a listener on frameUrl / snapshot): lazy JPEG canvas capture → frameUrl + snapshot (SonicMediaRef). Event out. Publication paresseuse.\n",
|
|
503
|
+
"files": {
|
|
504
|
+
"core/components/functional/3d/3d.md": {
|
|
505
|
+
"title": "3D",
|
|
506
|
+
"hashes": {
|
|
507
|
+
"sortie--dataprovider": {
|
|
508
|
+
"count": 1,
|
|
509
|
+
"title": "Sortie / dataProvider",
|
|
510
|
+
"type": "paragraph"
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"search": "Le viewer lit asset ou src depuis le DP — la source (fetch, upload, HF) n’est pas couplée.\n",
|
|
518
|
+
"files": {
|
|
519
|
+
"core/components/functional/3d/3d.md": {
|
|
520
|
+
"title": "3D",
|
|
521
|
+
"hashes": {
|
|
522
|
+
"asset-neutre-hf-plus-tard": {
|
|
523
|
+
"count": 1,
|
|
524
|
+
"title": "Asset neutre (HF plus tard)",
|
|
525
|
+
"type": "paragraph"
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
"search": "No shared WebGL context between sonic-3d and sonic-shader.\n",
|
|
533
|
+
"files": {
|
|
534
|
+
"core/components/functional/3d/3d.md": {
|
|
535
|
+
"title": "3D",
|
|
536
|
+
"hashes": {
|
|
537
|
+
"shader-bridging": {
|
|
538
|
+
"count": 1,
|
|
539
|
+
"title": "Shader bridging",
|
|
540
|
+
"type": "paragraph"
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"search": "Demo: Visual stack — 3D → shader live.\n",
|
|
548
|
+
"files": {
|
|
549
|
+
"core/components/functional/3d/3d.md": {
|
|
550
|
+
"title": "3D",
|
|
551
|
+
"hashes": {
|
|
552
|
+
"shader-bridging": {
|
|
553
|
+
"count": 1,
|
|
554
|
+
"title": "Shader bridging",
|
|
555
|
+
"type": "paragraph"
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
"search": "Un sonic-shader / sonic-webgpu qui pointe #id s’enregistre via registerFrameConsumer : le 3D continue hors viewport (pas de dispose). Option explicite : play-offscreen.\n",
|
|
563
|
+
"files": {
|
|
564
|
+
"core/components/functional/3d/3d.md": {
|
|
565
|
+
"title": "3D",
|
|
566
|
+
"hashes": {
|
|
567
|
+
"shader-bridging": {
|
|
568
|
+
"count": 1,
|
|
569
|
+
"title": "Shader bridging",
|
|
570
|
+
"type": "paragraph"
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
"search": "el.stopMotion() coupe autoRotate et l’inertie OrbitControls. Quand la caméra est immobile depuis ~8 frames : event rest + champ out moving: 0|1. Attribut damping (défaut 0.08, 0 = off).\n",
|
|
578
|
+
"files": {
|
|
579
|
+
"core/components/functional/3d/3d.md": {
|
|
580
|
+
"title": "3D",
|
|
581
|
+
"hashes": {
|
|
582
|
+
"arrêt-net": {
|
|
583
|
+
"count": 1,
|
|
584
|
+
"title": "Arrêt net",
|
|
585
|
+
"type": "paragraph"
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
"search": "When post-image is set, the scene renders to an offscreen target with a depth texture, then ShaderToy-style passes run inside the same Three context (post-buffer-a…post-image). Same GLSL as sonic-shader (mainImage, iChannel0–3, uParam0–3, sonicLinearDepth).\n",
|
|
593
|
+
"files": {
|
|
594
|
+
"core/components/functional/3d/3d.md": {
|
|
595
|
+
"title": "3D",
|
|
596
|
+
"hashes": {
|
|
597
|
+
"post-fx-in-viewer": {
|
|
598
|
+
"count": 1,
|
|
599
|
+
"title": "Post FX (in-viewer)",
|
|
600
|
+
"type": "paragraph"
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
"search": "Demo: Visual stack — post depth edges.\n",
|
|
608
|
+
"files": {
|
|
609
|
+
"core/components/functional/3d/3d.md": {
|
|
610
|
+
"title": "3D",
|
|
611
|
+
"hashes": {
|
|
612
|
+
"post-fx-in-viewer": {
|
|
613
|
+
"count": 1,
|
|
614
|
+
"title": "Post FX (in-viewer)",
|
|
615
|
+
"type": "paragraph"
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
"search": "Pick / orbit still use scene geometry; frame-out captures the final canvas after post.\n",
|
|
623
|
+
"files": {
|
|
624
|
+
"core/components/functional/3d/3d.md": {
|
|
625
|
+
"title": "3D",
|
|
626
|
+
"hashes": {
|
|
627
|
+
"post-fx-in-viewer": {
|
|
599
628
|
"count": 1,
|
|
629
|
+
"title": "Post FX (in-viewer)",
|
|
630
|
+
"type": "paragraph"
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
"search": "Date",
|
|
638
|
+
"files": {
|
|
639
|
+
"core/components/functional/date/date.md": {
|
|
640
|
+
"title": "Date",
|
|
641
|
+
"hashes": {
|
|
642
|
+
"date": {
|
|
643
|
+
"count": 2,
|
|
600
644
|
"title": "",
|
|
601
645
|
"type": "page"
|
|
602
646
|
}
|
|
@@ -605,14 +649,14 @@
|
|
|
605
649
|
}
|
|
606
650
|
},
|
|
607
651
|
{
|
|
608
|
-
"search": "
|
|
652
|
+
"search": "Nothing is displayed.\n",
|
|
609
653
|
"files": {
|
|
610
|
-
"core/components/functional/
|
|
611
|
-
"title": "
|
|
654
|
+
"core/components/functional/date/date.md": {
|
|
655
|
+
"title": "Date",
|
|
612
656
|
"hashes": {
|
|
613
|
-
"
|
|
657
|
+
"no-attribute": {
|
|
614
658
|
"count": 1,
|
|
615
|
-
"title": "",
|
|
659
|
+
"title": "No attribute",
|
|
616
660
|
"type": "paragraph"
|
|
617
661
|
}
|
|
618
662
|
}
|
|
@@ -620,14 +664,14 @@
|
|
|
620
664
|
}
|
|
621
665
|
},
|
|
622
666
|
{
|
|
623
|
-
"search": "
|
|
667
|
+
"search": "Displays the current date.\n",
|
|
624
668
|
"files": {
|
|
625
|
-
"core/components/functional/
|
|
626
|
-
"title": "
|
|
669
|
+
"core/components/functional/date/date.md": {
|
|
670
|
+
"title": "Date",
|
|
627
671
|
"hashes": {
|
|
628
|
-
"
|
|
672
|
+
"now": {
|
|
629
673
|
"count": 1,
|
|
630
|
-
"title": "",
|
|
674
|
+
"title": "Now",
|
|
631
675
|
"type": "paragraph"
|
|
632
676
|
}
|
|
633
677
|
}
|
|
@@ -635,12 +679,12 @@
|
|
|
635
679
|
}
|
|
636
680
|
},
|
|
637
681
|
{
|
|
638
|
-
"search": "
|
|
682
|
+
"search": "Displays a date from a timestamp.\n",
|
|
639
683
|
"files": {
|
|
640
|
-
"core/components/functional/
|
|
641
|
-
"title": "
|
|
684
|
+
"core/components/functional/date/date.md": {
|
|
685
|
+
"title": "Date",
|
|
642
686
|
"hashes": {
|
|
643
|
-
"
|
|
687
|
+
"date": {
|
|
644
688
|
"count": 1,
|
|
645
689
|
"title": "",
|
|
646
690
|
"type": "paragraph"
|
|
@@ -650,14 +694,14 @@
|
|
|
650
694
|
}
|
|
651
695
|
},
|
|
652
696
|
{
|
|
653
|
-
"search": "
|
|
697
|
+
"search": "Displays a date from a string.\n",
|
|
654
698
|
"files": {
|
|
655
|
-
"core/components/functional/
|
|
656
|
-
"title": "
|
|
699
|
+
"core/components/functional/date/date.md": {
|
|
700
|
+
"title": "Date",
|
|
657
701
|
"hashes": {
|
|
658
|
-
"
|
|
702
|
+
"date_string": {
|
|
659
703
|
"count": 1,
|
|
660
|
-
"title": "
|
|
704
|
+
"title": "Date_string",
|
|
661
705
|
"type": "paragraph"
|
|
662
706
|
}
|
|
663
707
|
}
|
|
@@ -665,14 +709,14 @@
|
|
|
665
709
|
}
|
|
666
710
|
},
|
|
667
711
|
{
|
|
668
|
-
"search": "
|
|
712
|
+
"search": "Displays a period of time from start_date to end_date.When by itself start_date will act as dateif a start_date is not specified it will be set by the current date.if the end_date is anterior to start date date it will be used as the start_date. \n",
|
|
669
713
|
"files": {
|
|
670
|
-
"core/components/functional/
|
|
671
|
-
"title": "
|
|
714
|
+
"core/components/functional/date/date.md": {
|
|
715
|
+
"title": "Date",
|
|
672
716
|
"hashes": {
|
|
673
|
-
"
|
|
717
|
+
"start_date--end_date": {
|
|
674
718
|
"count": 1,
|
|
675
|
-
"title": "
|
|
719
|
+
"title": "Start_date / end_date",
|
|
676
720
|
"type": "paragraph"
|
|
677
721
|
}
|
|
678
722
|
}
|
|
@@ -680,14 +724,1323 @@
|
|
|
680
724
|
}
|
|
681
725
|
},
|
|
682
726
|
{
|
|
683
|
-
"search": "
|
|
727
|
+
"search": "ISO 639-1 Language Codes\n",
|
|
684
728
|
"files": {
|
|
685
|
-
"core/components/functional/
|
|
686
|
-
"title": "
|
|
729
|
+
"core/components/functional/date/date.md": {
|
|
730
|
+
"title": "Date",
|
|
731
|
+
"hashes": {
|
|
732
|
+
"language": {
|
|
733
|
+
"count": 1,
|
|
734
|
+
"title": "Language",
|
|
735
|
+
"type": "paragraph"
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
"search": "For the list of supported timeZones, run Intl.supportedValuesOf('timeZone') in the console\n",
|
|
743
|
+
"files": {
|
|
744
|
+
"core/components/functional/date/date.md": {
|
|
745
|
+
"title": "Date",
|
|
746
|
+
"hashes": {
|
|
747
|
+
"time_zone": {
|
|
748
|
+
"count": 1,
|
|
749
|
+
"title": "Time_zone",
|
|
750
|
+
"type": "paragraph"
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
"search": "Deprecated\n",
|
|
758
|
+
"files": {
|
|
759
|
+
"core/components/functional/date/date.md": {
|
|
760
|
+
"title": "Date",
|
|
761
|
+
"hashes": {
|
|
762
|
+
"renderif": {
|
|
763
|
+
"count": 1,
|
|
764
|
+
"title": ".renderIf",
|
|
765
|
+
"type": "paragraph"
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
},
|
|
769
|
+
"core/components/functional/fetch/fetch.md": {
|
|
770
|
+
"title": "Fetch",
|
|
771
|
+
"hashes": {
|
|
772
|
+
"headersdataprovider": {
|
|
773
|
+
"count": 1,
|
|
774
|
+
"title": "HeadersDataProvider",
|
|
775
|
+
"type": "paragraph"
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
"search": "Fetch",
|
|
783
|
+
"files": {
|
|
784
|
+
"core/components/functional/fetch/fetch.md": {
|
|
785
|
+
"title": "Fetch",
|
|
786
|
+
"hashes": {
|
|
787
|
+
"fetch": {
|
|
788
|
+
"count": 1,
|
|
789
|
+
"title": "",
|
|
790
|
+
"type": "page"
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
},
|
|
796
|
+
{
|
|
797
|
+
"search": "New apps: prefer @get for a typed GET on a component, or List / Queue with fetch for collections. Use Local API demos (serviceURL="/docs-mock-api") to try examples offline.\n",
|
|
798
|
+
"files": {
|
|
799
|
+
"core/components/functional/fetch/fetch.md": {
|
|
800
|
+
"title": "Fetch",
|
|
801
|
+
"hashes": {
|
|
802
|
+
"fetch": {
|
|
803
|
+
"count": 1,
|
|
804
|
+
"title": "",
|
|
805
|
+
"type": "paragraph"
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
},
|
|
811
|
+
{
|
|
812
|
+
"search": "The sonic-fetch component requests and stores API data. It extends the Fetcher and Subscriber mixins.\n",
|
|
813
|
+
"files": {
|
|
814
|
+
"core/components/functional/fetch/fetch.md": {
|
|
815
|
+
"title": "Fetch",
|
|
816
|
+
"hashes": {
|
|
817
|
+
"fetch": {
|
|
818
|
+
"count": 1,
|
|
819
|
+
"title": "",
|
|
820
|
+
"type": "paragraph"
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
"search": "In order to work properly the sonic-fetch component needs at least the following attributes. \n",
|
|
828
|
+
"files": {
|
|
829
|
+
"core/components/functional/fetch/fetch.md": {
|
|
830
|
+
"title": "Fetch",
|
|
831
|
+
"hashes": {
|
|
832
|
+
"basic-usage": {
|
|
833
|
+
"count": 1,
|
|
834
|
+
"title": "Basic usage",
|
|
835
|
+
"type": "paragraph"
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
},
|
|
841
|
+
{
|
|
842
|
+
"search": "If no endPoint is specified it will be filled by the dataProvider ID instead \n",
|
|
843
|
+
"files": {
|
|
844
|
+
"core/components/functional/fetch/fetch.md": {
|
|
845
|
+
"title": "Fetch",
|
|
846
|
+
"hashes": {
|
|
847
|
+
"dataprovider-as-an-endpoint": {
|
|
848
|
+
"count": 1,
|
|
849
|
+
"title": "DataProvider as an endPoint",
|
|
850
|
+
"type": "paragraph"
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
"search": "When the key attribute is present, only a sub-part of the data received is injected into the dataProvider.\nWe can use the dot syntax to target what we want to keep.\n",
|
|
858
|
+
"files": {
|
|
859
|
+
"core/components/functional/fetch/fetch.md": {
|
|
860
|
+
"title": "Fetch",
|
|
861
|
+
"hashes": {
|
|
862
|
+
"key": {
|
|
863
|
+
"count": 1,
|
|
864
|
+
"title": "Key",
|
|
865
|
+
"type": "paragraph"
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
"search": "For example if the data is {my:{data:{a:1,b:2}}} and the key is key="my.data", the data available in the dataProvider will be {a:1 , b:2}\n",
|
|
873
|
+
"files": {
|
|
874
|
+
"core/components/functional/fetch/fetch.md": {
|
|
875
|
+
"title": "Fetch",
|
|
876
|
+
"hashes": {
|
|
877
|
+
"key": {
|
|
878
|
+
"count": 1,
|
|
879
|
+
"title": "Key",
|
|
880
|
+
"type": "paragraph"
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
},
|
|
886
|
+
{
|
|
887
|
+
"search": "if the mime type of the content returned by the service begins with text/, then the dataProvider has a key named "text" which contains the text returned by the service.\n",
|
|
888
|
+
"files": {
|
|
889
|
+
"core/components/functional/fetch/fetch.md": {
|
|
890
|
+
"title": "Fetch",
|
|
891
|
+
"hashes": {
|
|
892
|
+
"text-mode": {
|
|
893
|
+
"count": 1,
|
|
894
|
+
"title": "Text mode",
|
|
895
|
+
"type": "paragraph"
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
},
|
|
901
|
+
{
|
|
902
|
+
"search": "The noLoader attribute disables display of the default loader\n",
|
|
903
|
+
"files": {
|
|
904
|
+
"core/components/functional/fetch/fetch.md": {
|
|
905
|
+
"title": "Fetch",
|
|
906
|
+
"hashes": {
|
|
907
|
+
"noloader": {
|
|
908
|
+
"count": 1,
|
|
909
|
+
"title": "NoLoader",
|
|
910
|
+
"type": "paragraph"
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
"search": "if",
|
|
918
|
+
"files": {
|
|
919
|
+
"core/components/functional/if/if.md": {
|
|
920
|
+
"title": "if",
|
|
921
|
+
"hashes": {
|
|
922
|
+
"if": {
|
|
923
|
+
"count": 1,
|
|
924
|
+
"title": "",
|
|
925
|
+
"type": "page"
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
},
|
|
931
|
+
{
|
|
932
|
+
"search": "The sonic-if component shows its slot when .condition is true. In Lit, bind .condition from store-driven state (@subscribe on a formDataProvider field) — live preview and TypeScript source are the same file (docs-lit-demo):\n",
|
|
933
|
+
"files": {
|
|
934
|
+
"core/components/functional/if/if.md": {
|
|
935
|
+
"title": "if",
|
|
936
|
+
"hashes": {
|
|
937
|
+
"if": {
|
|
938
|
+
"count": 1,
|
|
939
|
+
"title": "",
|
|
940
|
+
"type": "paragraph"
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
},
|
|
946
|
+
{
|
|
947
|
+
"search": "Plain HTML without Lit: HTML integration.\n",
|
|
948
|
+
"files": {
|
|
949
|
+
"core/components/functional/if/if.md": {
|
|
950
|
+
"title": "if",
|
|
951
|
+
"hashes": {
|
|
952
|
+
"if": {
|
|
953
|
+
"count": 1,
|
|
954
|
+
"title": "",
|
|
955
|
+
"type": "paragraph"
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
},
|
|
961
|
+
{
|
|
962
|
+
"search": "Hugging Face infer",
|
|
963
|
+
"files": {
|
|
964
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
965
|
+
"title": "Hugging Face infer",
|
|
966
|
+
"hashes": {
|
|
967
|
+
"hugging-face-infer": {
|
|
968
|
+
"count": 1,
|
|
969
|
+
"title": "",
|
|
970
|
+
"type": "page"
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
},
|
|
976
|
+
{
|
|
977
|
+
"search": "sonic-hugging-face-infer: 1 input → Hugging Face model → 1 output (readonly), computed in the browser with Transformers.js. Data never leaves the device.\n",
|
|
978
|
+
"files": {
|
|
979
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
980
|
+
"title": "Hugging Face infer",
|
|
981
|
+
"hashes": {
|
|
982
|
+
"hugging-face-infer": {
|
|
983
|
+
"count": 1,
|
|
984
|
+
"title": "",
|
|
985
|
+
"type": "paragraph"
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
},
|
|
991
|
+
{
|
|
992
|
+
"search": "The name names the engine: other inference paths (server, browser AI, …) will get their own sonic-<engine>-infer, with the same attributes, states, and typed outputs.\n",
|
|
993
|
+
"files": {
|
|
994
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
995
|
+
"title": "Hugging Face infer",
|
|
996
|
+
"hashes": {
|
|
997
|
+
"hugging-face-infer": {
|
|
998
|
+
"count": 1,
|
|
999
|
+
"title": "",
|
|
1000
|
+
"type": "paragraph"
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
"search": "Each demo stays idle until you click Try. The model downloads only after consent.\n",
|
|
1008
|
+
"files": {
|
|
1009
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1010
|
+
"title": "Hugging Face infer",
|
|
1011
|
+
"hashes": {
|
|
1012
|
+
"examples": {
|
|
1013
|
+
"count": 1,
|
|
1014
|
+
"title": "Examples",
|
|
1015
|
+
"type": "paragraph"
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
},
|
|
1021
|
+
{
|
|
1022
|
+
"search": "Image + depth / shader chains: Visual stack.\n",
|
|
1023
|
+
"files": {
|
|
1024
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1025
|
+
"title": "Hugging Face infer",
|
|
1026
|
+
"hashes": {
|
|
1027
|
+
"text--zero-shot-classification": {
|
|
1028
|
+
"count": 1,
|
|
1029
|
+
"title": "Text — `zero-shot-classification`",
|
|
1030
|
+
"type": "paragraph"
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
},
|
|
1036
|
+
{
|
|
1037
|
+
"search": "Same component, different allowlist alias. Common patterns:\n",
|
|
1038
|
+
"files": {
|
|
1039
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1040
|
+
"title": "Hugging Face infer",
|
|
1041
|
+
"hashes": {
|
|
1042
|
+
"other-tasks-markup": {
|
|
1043
|
+
"count": 1,
|
|
1044
|
+
"title": "Other tasks (markup)",
|
|
1045
|
+
"type": "paragraph"
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
},
|
|
1051
|
+
{
|
|
1052
|
+
"search": "<!-- Translation FR → EN -->\n<sonic-hugging-face-infer\n model="fr-en"\n inputProvider="event.edito.description"\n outputProvider="event.edito.descriptionEn"\n load="consent"\n trigger="demand"\n triggerProvider="translateClick"\n></sonic-hugging-face-infer>\n",
|
|
1053
|
+
"files": {
|
|
1054
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1055
|
+
"title": "Hugging Face infer",
|
|
1056
|
+
"hashes": {
|
|
1057
|
+
"other-tasks-markup": {
|
|
1058
|
+
"count": 1,
|
|
1059
|
+
"title": "Other tasks (markup)",
|
|
1060
|
+
"type": "paragraph"
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
"search": "<!-- Dictation (Whisper) -->\n<sonic-hugging-face-infer\n model="whisper-tiny"\n inputProvider="voice.clipUrl"\n outputProvider="voice.transcript"\n load="consent"\n></sonic-hugging-face-infer>\n \n\n",
|
|
1068
|
+
"files": {
|
|
1069
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1070
|
+
"title": "Hugging Face infer",
|
|
1071
|
+
"hashes": {
|
|
1072
|
+
"other-tasks-markup": {
|
|
1073
|
+
"count": 1,
|
|
1074
|
+
"title": "Other tasks (markup)",
|
|
1075
|
+
"type": "paragraph"
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
},
|
|
1081
|
+
{
|
|
1082
|
+
"search": "Load concorde-hugging-face-infer.bundle.js after the core, then call ConcordeHF.configureHuggingFace(…) once. Details: CDN addons.\n",
|
|
1083
|
+
"files": {
|
|
1084
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1085
|
+
"title": "Hugging Face infer",
|
|
1086
|
+
"hashes": {
|
|
1087
|
+
"cdn-script--bootstrap": {
|
|
1088
|
+
"count": 1,
|
|
1089
|
+
"title": "CDN (script + bootstrap)",
|
|
1090
|
+
"type": "paragraph"
|
|
1091
|
+
}
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
},
|
|
1096
|
+
{
|
|
1097
|
+
"search": "The script checks that ONNX Runtime binaries are exactly those expected by Transformers.js. Serve the folder with Cache-Control: public, max-age=31536000, immutable: the path includes the version and never changes. To upgrade: new folder, regression tests, then change version / url in config. The previous version can stay served.\n",
|
|
1098
|
+
"files": {
|
|
1099
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1100
|
+
"title": "Hugging Face infer",
|
|
1101
|
+
"hashes": {
|
|
1102
|
+
"1-pin-and-host-the-runtime": {
|
|
1103
|
+
"count": 1,
|
|
1104
|
+
"title": "1. Pin and host the runtime",
|
|
1105
|
+
"type": "paragraph"
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
},
|
|
1111
|
+
{
|
|
1112
|
+
"search": "The script prints size (sizeBytes) and license for you to verify.\n",
|
|
1113
|
+
"files": {
|
|
1114
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1115
|
+
"title": "Hugging Face infer",
|
|
1116
|
+
"hashes": {
|
|
1117
|
+
"2-host-models-pinned-revision": {
|
|
1118
|
+
"count": 1,
|
|
1119
|
+
"title": "2. Host models (pinned revision)",
|
|
1120
|
+
"type": "paragraph"
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
},
|
|
1126
|
+
{
|
|
1127
|
+
"search": "Three ways to supply the runtime (runtime.source):\n",
|
|
1128
|
+
"files": {
|
|
1129
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1130
|
+
"title": "Hugging Face infer",
|
|
1131
|
+
"hashes": {
|
|
1132
|
+
"3-configure-once-at-startup": {
|
|
1133
|
+
"count": 1,
|
|
1134
|
+
"title": "3. Configure (once, at startup)",
|
|
1135
|
+
"type": "paragraph"
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
"search": "<!-- Catalog: runs when the browser is idle, cached in IndexedDB -->\n<sonic-hugging-face-infer\n model="multilingual-mini"\n inputProvider="events"\n outputProvider="search.vectors"\n options='{"text":"label + edito.sub_title + categories.title"}'\n load="idle"\n persistResults\n></sonic-hugging-face-infer>\n",
|
|
1143
|
+
"files": {
|
|
1144
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1145
|
+
"title": "Hugging Face infer",
|
|
1146
|
+
"hashes": {
|
|
1147
|
+
"markup": {
|
|
1148
|
+
"count": 1,
|
|
1149
|
+
"title": "Markup",
|
|
1150
|
+
"type": "paragraph"
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1155
|
+
},
|
|
1156
|
+
{
|
|
1157
|
+
"search": "<!-- Query: on each keystroke (300 ms debounce) -->\n<sonic-hugging-face-infer\n model="multilingual-mini"\n inputProvider="searchForm.q"\n outputProvider="search.query"\n statusProvider="searchAiStatus"\n debounce="300"\n></sonic-hugging-face-infer>\n \n\n",
|
|
1158
|
+
"files": {
|
|
1159
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1160
|
+
"title": "Hugging Face infer",
|
|
1161
|
+
"hashes": {
|
|
1162
|
+
"markup": {
|
|
1163
|
+
"count": 1,
|
|
1164
|
+
"title": "Markup",
|
|
1165
|
+
"type": "paragraph"
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
},
|
|
1171
|
+
{
|
|
1172
|
+
"search": "Ranking combines several inputs (events, vectors, query). With the TypeScript API:\n",
|
|
1173
|
+
"files": {
|
|
1174
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1175
|
+
"title": "Hugging Face infer",
|
|
1176
|
+
"hashes": {
|
|
1177
|
+
"markup": {
|
|
1178
|
+
"count": 1,
|
|
1179
|
+
"title": "Markup",
|
|
1180
|
+
"type": "paragraph"
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
"search": "On the JSONata side, $cosine(a, b) and $rankBySimilarity(items, vectors, query, topN?, minScore?) are available in sonic-jsonata (one input: group data under the same DataProvider).\n",
|
|
1188
|
+
"files": {
|
|
1189
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1190
|
+
"title": "Hugging Face infer",
|
|
1191
|
+
"hashes": {
|
|
1192
|
+
"markup": {
|
|
1193
|
+
"count": 1,
|
|
1194
|
+
"title": "Markup",
|
|
1195
|
+
"type": "paragraph"
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
},
|
|
1201
|
+
{
|
|
1202
|
+
"search": "Methods: run(), loadModel(), accept(), decline().\n",
|
|
1203
|
+
"files": {
|
|
1204
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1205
|
+
"title": "Hugging Face infer",
|
|
1206
|
+
"hashes": {
|
|
1207
|
+
"attributes": {
|
|
1208
|
+
"count": 1,
|
|
1209
|
+
"title": "Attributes",
|
|
1210
|
+
"type": "paragraph"
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
}
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
"search": "Guards, regardless of policy: switch to consent on data-saver, slow network (2G), or when the model exceeds consentAboveMB. A cached model loads without prompting. Choice is stored per alias and revision (hf.revokeConsent(alias) to clear). Nothing downloads while the input is empty.\n",
|
|
1218
|
+
"files": {
|
|
1219
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1220
|
+
"title": "Hugging Face infer",
|
|
1221
|
+
"hashes": {
|
|
1222
|
+
"model-loading": {
|
|
1223
|
+
"count": 1,
|
|
1224
|
+
"title": "Model loading",
|
|
1225
|
+
"type": "paragraph"
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1230
|
+
},
|
|
1231
|
+
{
|
|
1232
|
+
"search": "Consent without JavaScript (SDUI):\n",
|
|
1233
|
+
"files": {
|
|
1234
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1235
|
+
"title": "Hugging Face infer",
|
|
1236
|
+
"hashes": {
|
|
1237
|
+
"model-loading": {
|
|
1238
|
+
"count": 1,
|
|
1239
|
+
"title": "Model loading",
|
|
1240
|
+
"type": "paragraph"
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
},
|
|
1246
|
+
{
|
|
1247
|
+
"search": "{outputProvider root}/_state_ → { status } (loading | ready | error | empty), like sonic-jsonata, for sonic-states.\n",
|
|
1248
|
+
"files": {
|
|
1249
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1250
|
+
"title": "Hugging Face infer",
|
|
1251
|
+
"hashes": {
|
|
1252
|
+
"states": {
|
|
1253
|
+
"count": 1,
|
|
1254
|
+
"title": "States",
|
|
1255
|
+
"type": "paragraph"
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
},
|
|
1261
|
+
{
|
|
1262
|
+
"search": "Detailed status on statusProvider:\n",
|
|
1263
|
+
"files": {
|
|
1264
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1265
|
+
"title": "Hugging Face infer",
|
|
1266
|
+
"hashes": {
|
|
1267
|
+
"states": {
|
|
1268
|
+
"count": 1,
|
|
1269
|
+
"title": "States",
|
|
1270
|
+
"type": "paragraph"
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
},
|
|
1276
|
+
{
|
|
1277
|
+
"search": "ONNX Runtime is a WASM binary in every case (≈ 27 MB, ≈ 6.6 MB compressed for 1.31), including WebGPU: it downloads with the first model from your CDN, then is cached. It is not part of the component.\n",
|
|
1278
|
+
"files": {
|
|
1279
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1280
|
+
"title": "Hugging Face infer",
|
|
1281
|
+
"hashes": {
|
|
1282
|
+
"webgpu-and-wasm": {
|
|
1283
|
+
"count": 1,
|
|
1284
|
+
"title": "WebGPU and WASM",
|
|
1285
|
+
"type": "paragraph"
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
},
|
|
1291
|
+
{
|
|
1292
|
+
"search": "What you control: CPU (WASM) execution when WebGPU is missing. Allowed per model (devices) and only under allowWasmUpToMB. Beyond that → unsupported; the page keeps working without the model.\n",
|
|
1293
|
+
"files": {
|
|
1294
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1295
|
+
"title": "Hugging Face infer",
|
|
1296
|
+
"hashes": {
|
|
1297
|
+
"webgpu-and-wasm": {
|
|
1298
|
+
"count": 1,
|
|
1299
|
+
"title": "WebGPU and WASM",
|
|
1300
|
+
"type": "paragraph"
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
}
|
|
1304
|
+
}
|
|
1305
|
+
},
|
|
1306
|
+
{
|
|
1307
|
+
"search": "configureHuggingFace returns an API typed by the allowlist:\n",
|
|
1308
|
+
"files": {
|
|
1309
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1310
|
+
"title": "Hugging Face infer",
|
|
1311
|
+
"hashes": {
|
|
1312
|
+
"typescript": {
|
|
1313
|
+
"count": 1,
|
|
1314
|
+
"title": "TypeScript",
|
|
1315
|
+
"type": "paragraph"
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
1320
|
+
},
|
|
1321
|
+
{
|
|
1322
|
+
"search": "Cleanup: hf.clearModel(alias), hf.clearAll() (models, WASM, and results).\n",
|
|
1323
|
+
"files": {
|
|
1324
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1325
|
+
"title": "Hugging Face infer",
|
|
1326
|
+
"hashes": {
|
|
1327
|
+
"typescript": {
|
|
1328
|
+
"count": 1,
|
|
1329
|
+
"title": "TypeScript",
|
|
1330
|
+
"type": "paragraph"
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
},
|
|
1336
|
+
{
|
|
1337
|
+
"search": "Supported tasks: feature-extraction, text-classification, zero-shot-classification, translation, token-classification, fill-mask, question-answering, image-classification, zero-shot-image-classification, object-detection, zero-shot-object-detection, image-feature-extraction, image-segmentation, depth-estimation, background-removal, image-to-text, audio-classification, automatic-speech-recognition. No free-form LLM (text-generation, etc.).\n",
|
|
1338
|
+
"files": {
|
|
1339
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1340
|
+
"title": "Hugging Face infer",
|
|
1341
|
+
"hashes": {
|
|
1342
|
+
"tasks-and-light-models": {
|
|
1343
|
+
"count": 1,
|
|
1344
|
+
"title": "Tasks and light models",
|
|
1345
|
+
"type": "paragraph"
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
},
|
|
1351
|
+
{
|
|
1352
|
+
"search": "Indicative sizes (quantized); verify with hf-vendor.mjs before allowlisting, including license:\n",
|
|
1353
|
+
"files": {
|
|
1354
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1355
|
+
"title": "Hugging Face infer",
|
|
1356
|
+
"hashes": {
|
|
1357
|
+
"tasks-and-light-models": {
|
|
1358
|
+
"count": 1,
|
|
1359
|
+
"title": "Tasks and light models",
|
|
1360
|
+
"type": "paragraph"
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
},
|
|
1366
|
+
{
|
|
1367
|
+
"search": "Produced images (cutout, depth, segmentation) come out as { width, height, channels, blob, url } (PNG). url is an ObjectURL attached on the main thread at publish time — chainable into sonic-shader / sonic-jsonata ($mediaUrl) without app glue. Images are not stored in IndexedDB.\n",
|
|
1368
|
+
"files": {
|
|
1369
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1370
|
+
"title": "Hugging Face infer",
|
|
1371
|
+
"hashes": {
|
|
1372
|
+
"tasks-and-light-models": {
|
|
1373
|
+
"count": 1,
|
|
1374
|
+
"title": "Tasks and light models",
|
|
1375
|
+
"type": "paragraph"
|
|
1376
|
+
}
|
|
1377
|
+
}
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
},
|
|
1381
|
+
{
|
|
1382
|
+
"search": "End-to-end (depth + shader / Harris) : Visual stack.\n",
|
|
1383
|
+
"files": {
|
|
1384
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1385
|
+
"title": "Hugging Face infer",
|
|
1386
|
+
"hashes": {
|
|
1387
|
+
"tasks-and-light-models": {
|
|
1388
|
+
"count": 1,
|
|
1389
|
+
"title": "Tasks and light models",
|
|
1390
|
+
"type": "paragraph"
|
|
1391
|
+
}
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
}
|
|
1395
|
+
},
|
|
1396
|
+
{
|
|
1397
|
+
"search": "Interactive (SDUI)",
|
|
1398
|
+
"files": {
|
|
1399
|
+
"core/components/functional/interactive/interactive.md": {
|
|
1400
|
+
"title": "Interactive (SDUI)",
|
|
1401
|
+
"hashes": {
|
|
1402
|
+
"interactive-sdui": {
|
|
1403
|
+
"count": 1,
|
|
1404
|
+
"title": "",
|
|
1405
|
+
"type": "page"
|
|
1406
|
+
}
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
},
|
|
1411
|
+
{
|
|
1412
|
+
"search": "Addon opt-in @supersoniks/concorde/interactive for declarative playable UIs under a strict CSP (no eval, no inline script, no on* handlers).\n",
|
|
1413
|
+
"files": {
|
|
1414
|
+
"core/components/functional/interactive/interactive.md": {
|
|
1415
|
+
"title": "Interactive (SDUI)",
|
|
1416
|
+
"hashes": {
|
|
1417
|
+
"interactive-sdui": {
|
|
1418
|
+
"count": 1,
|
|
1419
|
+
"title": "",
|
|
1420
|
+
"type": "paragraph"
|
|
1421
|
+
}
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
1425
|
+
},
|
|
1426
|
+
{
|
|
1427
|
+
"search": "",
|
|
1428
|
+
"files": {
|
|
1429
|
+
"core/components/functional/interactive/interactive.md": {
|
|
1430
|
+
"title": "Interactive (SDUI)",
|
|
1431
|
+
"hashes": {}
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
},
|
|
1435
|
+
{
|
|
1436
|
+
"search": "Also: sonic-if accepts dataProvider + key + equals/not/truthy/gt/lt for SDUI. sonic-value accepts format="00000" or format="intl:fr-FR".\n",
|
|
1437
|
+
"files": {
|
|
1438
|
+
"core/components/functional/interactive/interactive.md": {
|
|
1439
|
+
"title": "Interactive (SDUI)",
|
|
1440
|
+
"hashes": {
|
|
1441
|
+
"components": {
|
|
1442
|
+
"count": 1,
|
|
1443
|
+
"title": "Components",
|
|
1444
|
+
"type": "paragraph"
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
1447
|
+
}
|
|
1448
|
+
}
|
|
1449
|
+
},
|
|
1450
|
+
{
|
|
1451
|
+
"search": "Injected: $rand, $randInt, $clamp, $range, $set, $matrix, $rotate.$random and $now throw — use $rand(seed) and $action.t.\n",
|
|
1452
|
+
"files": {
|
|
1453
|
+
"core/components/functional/interactive/interactive.md": {
|
|
1454
|
+
"title": "Interactive (SDUI)",
|
|
1455
|
+
"hashes": {
|
|
1456
|
+
"reducer-purity": {
|
|
1457
|
+
"count": 1,
|
|
1458
|
+
"title": "Reducer purity",
|
|
1459
|
+
"type": "paragraph"
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1462
|
+
}
|
|
1463
|
+
}
|
|
1464
|
+
},
|
|
1465
|
+
{
|
|
1466
|
+
"search": "Declarative sound, multiplayer, persistence.\n",
|
|
1467
|
+
"files": {
|
|
1468
|
+
"core/components/functional/interactive/interactive.md": {
|
|
1469
|
+
"title": "Interactive (SDUI)",
|
|
1470
|
+
"hashes": {
|
|
1471
|
+
"out-of-scope-this-pass": {
|
|
1472
|
+
"count": 1,
|
|
1473
|
+
"title": "Out of scope (this pass)",
|
|
1474
|
+
"type": "paragraph"
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
}
|
|
1478
|
+
}
|
|
1479
|
+
},
|
|
1480
|
+
{
|
|
1481
|
+
"search": "Jsonata",
|
|
1482
|
+
"files": {
|
|
1483
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1484
|
+
"title": "Jsonata",
|
|
1485
|
+
"hashes": {
|
|
1486
|
+
"jsonata": {
|
|
1487
|
+
"count": 1,
|
|
1488
|
+
"title": "",
|
|
1489
|
+
"type": "page"
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
}
|
|
1494
|
+
},
|
|
1495
|
+
{
|
|
1496
|
+
"search": "sonic-jsonata : 1 input → expression → 1 output (readonly).\n",
|
|
1497
|
+
"files": {
|
|
1498
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1499
|
+
"title": "Jsonata",
|
|
1500
|
+
"hashes": {
|
|
1501
|
+
"jsonata": {
|
|
1502
|
+
"count": 1,
|
|
1503
|
+
"title": "",
|
|
1504
|
+
"type": "paragraph"
|
|
1505
|
+
}
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1509
|
+
},
|
|
1510
|
+
{
|
|
1511
|
+
"search": "Unidirectional (fetch → compute → display), unlike sonic-mix.\n",
|
|
1512
|
+
"files": {
|
|
1513
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1514
|
+
"title": "Jsonata",
|
|
1515
|
+
"hashes": {
|
|
1516
|
+
"jsonata": {
|
|
1517
|
+
"count": 1,
|
|
1518
|
+
"title": "",
|
|
1519
|
+
"type": "paragraph"
|
|
1520
|
+
}
|
|
1521
|
+
}
|
|
1522
|
+
}
|
|
1523
|
+
}
|
|
1524
|
+
},
|
|
1525
|
+
{
|
|
1526
|
+
"search": "Offline : serviceURL="/docs-mock-api" — Local API demos.\n",
|
|
1527
|
+
"files": {
|
|
1528
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1529
|
+
"title": "Jsonata",
|
|
1530
|
+
"hashes": {
|
|
1531
|
+
"jsonata": {
|
|
1532
|
+
"count": 1,
|
|
1533
|
+
"title": "",
|
|
1534
|
+
"type": "paragraph"
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
}
|
|
1538
|
+
}
|
|
1539
|
+
},
|
|
1540
|
+
{
|
|
1541
|
+
"search": "Change Top N → recalcul sans refetch.\n",
|
|
1542
|
+
"files": {
|
|
1543
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1544
|
+
"title": "Jsonata",
|
|
1545
|
+
"hashes": {
|
|
1546
|
+
"groupby--top-n": {
|
|
1547
|
+
"count": 1,
|
|
1548
|
+
"title": "Groupby + top N",
|
|
1549
|
+
"type": "paragraph"
|
|
1550
|
+
}
|
|
1551
|
+
}
|
|
1552
|
+
}
|
|
1553
|
+
}
|
|
1554
|
+
},
|
|
1555
|
+
{
|
|
1556
|
+
"search": "Change Tax % → même idée.\n",
|
|
1557
|
+
"files": {
|
|
1558
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1559
|
+
"title": "Jsonata",
|
|
1560
|
+
"hashes": {
|
|
1561
|
+
"totaux-somme--taxe": {
|
|
1562
|
+
"count": 1,
|
|
1563
|
+
"title": "Totaux (somme + taxe)",
|
|
1564
|
+
"type": "paragraph"
|
|
1565
|
+
}
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
1569
|
+
},
|
|
1570
|
+
{
|
|
1571
|
+
"search": "$ucFirst · $currency · $percent · $date · $toChart(items, labelKey, valueKey, datasetLabel?) · $cosine · $rankBySimilarity · $mediaUrl(x) (string | {url} | {blobUrl})\n",
|
|
1572
|
+
"files": {
|
|
1573
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1574
|
+
"title": "Jsonata",
|
|
1575
|
+
"hashes": {
|
|
1576
|
+
"helpers": {
|
|
1577
|
+
"count": 1,
|
|
1578
|
+
"title": "Helpers",
|
|
1579
|
+
"type": "paragraph"
|
|
1580
|
+
}
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1584
|
+
},
|
|
1585
|
+
{
|
|
1586
|
+
"search": "Pas de DOM, pas de réseau, pas d’eval. $mediaUrl ne crée pas d’ObjectURL (les producteurs HF / extract publient déjà url).\n",
|
|
1587
|
+
"files": {
|
|
1588
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1589
|
+
"title": "Jsonata",
|
|
1590
|
+
"hashes": {
|
|
1591
|
+
"helpers": {
|
|
1592
|
+
"count": 1,
|
|
1593
|
+
"title": "Helpers",
|
|
1594
|
+
"type": "paragraph"
|
|
1595
|
+
}
|
|
1596
|
+
}
|
|
1597
|
+
}
|
|
1598
|
+
}
|
|
1599
|
+
},
|
|
1600
|
+
{
|
|
1601
|
+
"search": "Pour du multi-entrées ou une fonction TS : primitive derive.\n",
|
|
1602
|
+
"files": {
|
|
1603
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1604
|
+
"title": "Jsonata",
|
|
1605
|
+
"hashes": {
|
|
1606
|
+
"markup": {
|
|
1607
|
+
"count": 1,
|
|
1608
|
+
"title": "Markup",
|
|
1609
|
+
"type": "paragraph"
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
},
|
|
1615
|
+
{
|
|
1616
|
+
"search": "Visual stack (3d → HF → jsonata → shader): Visual stack.\n",
|
|
1617
|
+
"files": {
|
|
1618
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1619
|
+
"title": "Jsonata",
|
|
1620
|
+
"hashes": {
|
|
1621
|
+
"markup": {
|
|
1622
|
+
"count": 1,
|
|
1623
|
+
"title": "Markup",
|
|
1624
|
+
"type": "paragraph"
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
}
|
|
1628
|
+
}
|
|
1629
|
+
},
|
|
1630
|
+
{
|
|
1631
|
+
"search": "{output}/_state_ → { status, error? } (loading | ready | error | empty). Brancher avec sonic-states.\n",
|
|
1632
|
+
"files": {
|
|
1633
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1634
|
+
"title": "Jsonata",
|
|
1635
|
+
"hashes": {
|
|
1636
|
+
"states": {
|
|
1637
|
+
"count": 1,
|
|
1638
|
+
"title": "States",
|
|
1639
|
+
"type": "paragraph"
|
|
1640
|
+
}
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
}
|
|
1644
|
+
},
|
|
1645
|
+
{
|
|
1646
|
+
"search": "List",
|
|
1647
|
+
"files": {
|
|
1648
|
+
"core/components/functional/list/list.md": {
|
|
1649
|
+
"title": "List",
|
|
1650
|
+
"hashes": {
|
|
1651
|
+
"list": {
|
|
1652
|
+
"count": 1,
|
|
1653
|
+
"title": "",
|
|
1654
|
+
"type": "page"
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
}
|
|
1659
|
+
},
|
|
1660
|
+
{
|
|
1661
|
+
"search": "Try offline: serviceURL="/docs-mock-api" and dataProvider="api/users" with key="data" — see Local API demos. Recommended patterns: Data flow.\n",
|
|
1662
|
+
"files": {
|
|
1663
|
+
"core/components/functional/list/list.md": {
|
|
1664
|
+
"title": "List",
|
|
1665
|
+
"hashes": {
|
|
1666
|
+
"list": {
|
|
1667
|
+
"count": 1,
|
|
1668
|
+
"title": "",
|
|
1669
|
+
"type": "paragraph"
|
|
1670
|
+
}
|
|
1671
|
+
}
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
},
|
|
1675
|
+
{
|
|
1676
|
+
"search": "The sonic-list component renders one row per entry in props (array from fetch or set on the element).\n",
|
|
1677
|
+
"files": {
|
|
1678
|
+
"core/components/functional/list/list.md": {
|
|
1679
|
+
"title": "List",
|
|
1680
|
+
"hashes": {
|
|
1681
|
+
"list": {
|
|
1682
|
+
"count": 1,
|
|
1683
|
+
"title": "",
|
|
1684
|
+
"type": "paragraph"
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1687
|
+
}
|
|
1688
|
+
}
|
|
1689
|
+
},
|
|
1690
|
+
{
|
|
1691
|
+
"search": "List extends Subscriber and Fetcher:\n",
|
|
1692
|
+
"files": {
|
|
1693
|
+
"core/components/functional/list/list.md": {
|
|
1694
|
+
"title": "List",
|
|
1695
|
+
"hashes": {
|
|
1696
|
+
"list": {
|
|
1697
|
+
"count": 1,
|
|
1698
|
+
"title": "",
|
|
1699
|
+
"type": "paragraph"
|
|
1700
|
+
}
|
|
1701
|
+
}
|
|
1702
|
+
}
|
|
1703
|
+
}
|
|
1704
|
+
},
|
|
1705
|
+
{
|
|
1706
|
+
"search": "From a Lit parent, pass a function on the items property (ListItems). Each row is wrapped in a sonic-subscriber with dataProvider="…/list-item/n" (hover rows with debug).\n",
|
|
1707
|
+
"files": {
|
|
1708
|
+
"core/components/functional/list/list.md": {
|
|
1709
|
+
"title": "List",
|
|
1710
|
+
"hashes": {
|
|
1711
|
+
"row-renderer-items--recommended": {
|
|
1712
|
+
"count": 1,
|
|
1713
|
+
"title": "Row renderer (`items`) — recommended",
|
|
1714
|
+
"type": "paragraph"
|
|
1715
|
+
}
|
|
1716
|
+
}
|
|
1717
|
+
}
|
|
1718
|
+
}
|
|
1719
|
+
},
|
|
1720
|
+
{
|
|
1721
|
+
"search": "Use .items=${fn} (property binding): Lit passes functions only as properties, not as HTML attributes — @property({ type: Function }) does not change that. Same for .noItems, .separator, .skeleton. The callback receives each row object (replacing data-bind / <sonic-value> in a <template>).\n",
|
|
1722
|
+
"files": {
|
|
1723
|
+
"core/components/functional/list/list.md": {
|
|
1724
|
+
"title": "List",
|
|
1725
|
+
"hashes": {
|
|
1726
|
+
"row-renderer-items--recommended": {
|
|
1727
|
+
"count": 1,
|
|
1728
|
+
"title": "Row renderer (`items`) — recommended",
|
|
1729
|
+
"type": "paragraph"
|
|
1730
|
+
}
|
|
1731
|
+
}
|
|
1732
|
+
}
|
|
1733
|
+
}
|
|
1734
|
+
},
|
|
1735
|
+
{
|
|
1736
|
+
"search": "Live demo + TypeScript source (one file, no Markdown copy):\n",
|
|
1737
|
+
"files": {
|
|
1738
|
+
"core/components/functional/list/list.md": {
|
|
1739
|
+
"title": "List",
|
|
1740
|
+
"hashes": {
|
|
1741
|
+
"row-renderer-items--recommended": {
|
|
1742
|
+
"count": 1,
|
|
1743
|
+
"title": "Row renderer (`items`) — recommended",
|
|
1744
|
+
"type": "paragraph"
|
|
1745
|
+
}
|
|
1746
|
+
}
|
|
1747
|
+
}
|
|
1748
|
+
}
|
|
1749
|
+
},
|
|
1750
|
+
{
|
|
1751
|
+
"search": "Implementation: src/docs/example/docs-users-list.ts — row markup in the items callback (item.first_name, …), same idea as replacing data-bind / <sonic-value> in a <template>.\n",
|
|
1752
|
+
"files": {
|
|
1753
|
+
"core/components/functional/list/list.md": {
|
|
1754
|
+
"title": "List",
|
|
1755
|
+
"hashes": {
|
|
1756
|
+
"row-renderer-items--recommended": {
|
|
1757
|
+
"count": 1,
|
|
1758
|
+
"title": "Row renderer (`items`) — recommended",
|
|
1759
|
+
"type": "paragraph"
|
|
1760
|
+
}
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
},
|
|
1765
|
+
{
|
|
1766
|
+
"search": "Use metadata (even, odd, firstChild, …) or fields on each item (e.g. tpl with templateKey):\n",
|
|
1767
|
+
"files": {
|
|
1768
|
+
"core/components/functional/list/list.md": {
|
|
1769
|
+
"title": "List",
|
|
1770
|
+
"hashes": {
|
|
1771
|
+
"alternating-row-layouts": {
|
|
1772
|
+
"count": 1,
|
|
1773
|
+
"title": "Alternating row layouts",
|
|
1774
|
+
"type": "paragraph"
|
|
1775
|
+
}
|
|
1776
|
+
}
|
|
1777
|
+
}
|
|
1778
|
+
}
|
|
1779
|
+
},
|
|
1780
|
+
{
|
|
1781
|
+
"search": "For plain HTML hosts, you can still declare <template> children (and data-value for templateKey, separator, no-item). That path is for HTML integration — not used in Concorde doc live demos.\n",
|
|
1782
|
+
"files": {
|
|
1783
|
+
"core/components/functional/list/list.md": {
|
|
1784
|
+
"title": "List",
|
|
1785
|
+
"hashes": {
|
|
1786
|
+
"html-template-children-integration-without-lit": {
|
|
1787
|
+
"count": 1,
|
|
1788
|
+
"title": "HTML `<template>` children (integration without Lit)",
|
|
1789
|
+
"type": "paragraph"
|
|
1790
|
+
}
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1793
|
+
}
|
|
1794
|
+
},
|
|
1795
|
+
{
|
|
1796
|
+
"search": "Each list row still gets dataProvider="[list]/list-item/[index]".\n",
|
|
1797
|
+
"files": {
|
|
1798
|
+
"core/components/functional/list/list.md": {
|
|
1799
|
+
"title": "List",
|
|
1800
|
+
"hashes": {
|
|
1801
|
+
"html-template-children-integration-without-lit": {
|
|
1802
|
+
"count": 1,
|
|
1803
|
+
"title": "HTML `<template>` children (integration without Lit)",
|
|
1804
|
+
"type": "paragraph"
|
|
1805
|
+
}
|
|
1806
|
+
}
|
|
1807
|
+
}
|
|
1808
|
+
}
|
|
1809
|
+
},
|
|
1810
|
+
{
|
|
1811
|
+
"search": "Mix",
|
|
1812
|
+
"files": {
|
|
1813
|
+
"core/components/functional/mix/mix.md": {
|
|
1814
|
+
"title": "Mix",
|
|
1815
|
+
"hashes": {
|
|
1816
|
+
"mix": {
|
|
1817
|
+
"count": 1,
|
|
1818
|
+
"title": "",
|
|
1819
|
+
"type": "page"
|
|
1820
|
+
}
|
|
1821
|
+
}
|
|
1822
|
+
}
|
|
1823
|
+
}
|
|
1824
|
+
},
|
|
1825
|
+
{
|
|
1826
|
+
"search": "Mix allows you to mix several subsets of dataProvider in a new key/value structure which is itself associated with a new dataProvider. The data update is then bidirectional.\n",
|
|
1827
|
+
"files": {
|
|
1828
|
+
"core/components/functional/mix/mix.md": {
|
|
1829
|
+
"title": "Mix",
|
|
1830
|
+
"hashes": {
|
|
1831
|
+
"mix": {
|
|
1832
|
+
"count": 1,
|
|
1833
|
+
"title": "",
|
|
1834
|
+
"type": "paragraph"
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
}
|
|
1838
|
+
}
|
|
1839
|
+
},
|
|
1840
|
+
{
|
|
1841
|
+
"search": "Dot notation is supported to extract a sub-part of the data.\n",
|
|
1842
|
+
"files": {
|
|
1843
|
+
"core/components/functional/mix/mix.md": {
|
|
1844
|
+
"title": "Mix",
|
|
1845
|
+
"hashes": {
|
|
1846
|
+
"mix": {
|
|
1847
|
+
"count": 1,
|
|
1848
|
+
"title": "",
|
|
1849
|
+
"type": "paragraph"
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1852
|
+
}
|
|
1853
|
+
}
|
|
1854
|
+
},
|
|
1855
|
+
{
|
|
1856
|
+
"search": "For example, if we declare dataproviders as follows :\n\nWe can rearrange the data as follows\n\nThen we can change values in both dataProviders programaticaly this way, they will stay in sync\n\nOr by using a form element\n\n",
|
|
1857
|
+
"files": {
|
|
1858
|
+
"core/components/functional/mix/mix.md": {
|
|
1859
|
+
"title": "Mix",
|
|
1860
|
+
"hashes": {
|
|
1861
|
+
"mix": {
|
|
1862
|
+
"count": 1,
|
|
1863
|
+
"title": "",
|
|
1864
|
+
"type": "paragraph"
|
|
1865
|
+
}
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1868
|
+
}
|
|
1869
|
+
},
|
|
1870
|
+
{
|
|
1871
|
+
"search": "Queue",
|
|
1872
|
+
"files": {
|
|
1873
|
+
"core/components/functional/queue/queue.md": {
|
|
1874
|
+
"title": "Queue",
|
|
1875
|
+
"hashes": {
|
|
1876
|
+
"queue": {
|
|
1877
|
+
"count": 1,
|
|
1878
|
+
"title": "",
|
|
1879
|
+
"type": "page"
|
|
1880
|
+
}
|
|
1881
|
+
}
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
},
|
|
1885
|
+
{
|
|
1886
|
+
"search": "Try offline: serviceURL="/docs-mock-api" — see Local API demos. Row rendering: Data flow (.items property binding).\n",
|
|
1887
|
+
"files": {
|
|
1888
|
+
"core/components/functional/queue/queue.md": {
|
|
1889
|
+
"title": "Queue",
|
|
1890
|
+
"hashes": {
|
|
1891
|
+
"queue": {
|
|
1892
|
+
"count": 1,
|
|
1893
|
+
"title": "",
|
|
1894
|
+
"type": "paragraph"
|
|
1895
|
+
}
|
|
1896
|
+
}
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1899
|
+
},
|
|
1900
|
+
{
|
|
1901
|
+
"search": "sonic-queue loads data in batches. Each batch is an internal List with its own dataProvider (…/list-item/0, …/1, …).\n",
|
|
1902
|
+
"files": {
|
|
1903
|
+
"core/components/functional/queue/queue.md": {
|
|
1904
|
+
"title": "Queue",
|
|
1905
|
+
"hashes": {
|
|
1906
|
+
"queue": {
|
|
1907
|
+
"count": 1,
|
|
1908
|
+
"title": "",
|
|
1909
|
+
"type": "paragraph"
|
|
1910
|
+
}
|
|
1911
|
+
}
|
|
1912
|
+
}
|
|
1913
|
+
}
|
|
1914
|
+
},
|
|
1915
|
+
{
|
|
1916
|
+
"search": "When the expression contains $offset and $limit, the queue:\n",
|
|
1917
|
+
"files": {
|
|
1918
|
+
"core/components/functional/queue/queue.md": {
|
|
1919
|
+
"title": "Queue",
|
|
1920
|
+
"hashes": {
|
|
1921
|
+
"lazy-load--offset-and-limit": {
|
|
1922
|
+
"count": 1,
|
|
1923
|
+
"title": "Lazy load — `$offset` and `$limit`",
|
|
1924
|
+
"type": "paragraph"
|
|
1925
|
+
}
|
|
1926
|
+
}
|
|
1927
|
+
}
|
|
1928
|
+
}
|
|
1929
|
+
},
|
|
1930
|
+
{
|
|
1931
|
+
"search": "The doc mock implements this on GET /docs-mock-api/api/users?offset=…&per_page=… (paginateUsers in src/docs/mock-api/router.ts).\n",
|
|
1932
|
+
"files": {
|
|
1933
|
+
"core/components/functional/queue/queue.md": {
|
|
1934
|
+
"title": "Queue",
|
|
1935
|
+
"hashes": {
|
|
1936
|
+
"lazy-load--offset-and-limit": {
|
|
1937
|
+
"count": 1,
|
|
1938
|
+
"title": "Lazy load — `$offset` and `$limit`",
|
|
1939
|
+
"type": "paragraph"
|
|
1940
|
+
}
|
|
1941
|
+
}
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
},
|
|
1945
|
+
{
|
|
1946
|
+
"search": "Wrap the queue in a fixed height with overflow-y-auto so lazy load triggers when scrolling inside the box (same layout as the TS starter demo-queue-templates).\n",
|
|
1947
|
+
"files": {
|
|
1948
|
+
"core/components/functional/queue/queue.md": {
|
|
1949
|
+
"title": "Queue",
|
|
1950
|
+
"hashes": {
|
|
1951
|
+
"lazy-load--offset-and-limit": {
|
|
1952
|
+
"count": 1,
|
|
1953
|
+
"title": "Lazy load — `$offset` and `$limit`",
|
|
1954
|
+
"type": "paragraph"
|
|
1955
|
+
}
|
|
1956
|
+
}
|
|
1957
|
+
}
|
|
1958
|
+
}
|
|
1959
|
+
},
|
|
1960
|
+
{
|
|
1961
|
+
"search": "Try scrolling after load — batches of 4 users. Search e.g. George, Bluth, or zzz for empty results.\n",
|
|
1962
|
+
"files": {
|
|
1963
|
+
"core/components/functional/queue/queue.md": {
|
|
1964
|
+
"title": "Queue",
|
|
1965
|
+
"hashes": {
|
|
1966
|
+
"lazy-load--offset-and-limit": {
|
|
1967
|
+
"count": 1,
|
|
1968
|
+
"title": "Lazy load — `$offset` and `$limit`",
|
|
1969
|
+
"type": "paragraph"
|
|
1970
|
+
}
|
|
1971
|
+
}
|
|
1972
|
+
}
|
|
1973
|
+
}
|
|
1974
|
+
},
|
|
1975
|
+
{
|
|
1976
|
+
"search": "Without $offset in the expression, the queue behaves like a single list (one batch), e.g. geo communes below.\n",
|
|
1977
|
+
"files": {
|
|
1978
|
+
"core/components/functional/queue/queue.md": {
|
|
1979
|
+
"title": "Queue",
|
|
1980
|
+
"hashes": {
|
|
1981
|
+
"expression-example": {
|
|
1982
|
+
"count": 1,
|
|
1983
|
+
"title": "Expression example",
|
|
1984
|
+
"type": "paragraph"
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1987
|
+
}
|
|
1988
|
+
}
|
|
1989
|
+
},
|
|
1990
|
+
{
|
|
1991
|
+
"search": "One search field (name="q") on formDataProvider="filter". The queue listens via dataFilterProvider="filter" and, on change:\n",
|
|
1992
|
+
"files": {
|
|
1993
|
+
"core/components/functional/queue/queue.md": {
|
|
1994
|
+
"title": "Queue",
|
|
1995
|
+
"hashes": {
|
|
1996
|
+
"filter--datafilterprovider--q": {
|
|
1997
|
+
"count": 1,
|
|
1998
|
+
"title": "Filter — `dataFilterProvider` + `q`",
|
|
1999
|
+
"type": "paragraph"
|
|
2000
|
+
}
|
|
2001
|
+
}
|
|
2002
|
+
}
|
|
2003
|
+
}
|
|
2004
|
+
},
|
|
2005
|
+
{
|
|
2006
|
+
"search": "Use filteredFields only when the form has extra fields that must not be sent to the API (e.g. filteredFields="rememberMe internalId").\n",
|
|
2007
|
+
"files": {
|
|
2008
|
+
"core/components/functional/queue/queue.md": {
|
|
2009
|
+
"title": "Queue",
|
|
2010
|
+
"hashes": {
|
|
2011
|
+
"filter--datafilterprovider--q": {
|
|
2012
|
+
"count": 1,
|
|
2013
|
+
"title": "Filter — `dataFilterProvider` + `q`",
|
|
2014
|
+
"type": "paragraph"
|
|
2015
|
+
}
|
|
2016
|
+
}
|
|
2017
|
+
}
|
|
2018
|
+
}
|
|
2019
|
+
},
|
|
2020
|
+
{
|
|
2021
|
+
"search": "The mock API filters before pagination — same haystack logic as the starter (filterDocsUsers in src/docs/mock-api/fixtures.ts, used by paginateUsers in router.ts / Service Worker):\n",
|
|
2022
|
+
"files": {
|
|
2023
|
+
"core/components/functional/queue/queue.md": {
|
|
2024
|
+
"title": "Queue",
|
|
2025
|
+
"hashes": {
|
|
2026
|
+
"filter--datafilterprovider--q": {
|
|
2027
|
+
"count": 1,
|
|
2028
|
+
"title": "Filter — `dataFilterProvider` + `q`",
|
|
2029
|
+
"type": "paragraph"
|
|
2030
|
+
}
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
2033
|
+
}
|
|
2034
|
+
},
|
|
2035
|
+
{
|
|
2036
|
+
"search": "Geo communes: expression uses $limit only (no $offset) — one request, one batch.\n",
|
|
2037
|
+
"files": {
|
|
2038
|
+
"core/components/functional/queue/queue.md": {
|
|
2039
|
+
"title": "Queue",
|
|
687
2040
|
"hashes": {
|
|
688
|
-
"
|
|
2041
|
+
"simple-batch-no-lazy-scroll": {
|
|
689
2042
|
"count": 1,
|
|
690
|
-
"title": "
|
|
2043
|
+
"title": "Simple batch (no lazy scroll)",
|
|
691
2044
|
"type": "paragraph"
|
|
692
2045
|
}
|
|
693
2046
|
}
|
|
@@ -695,14 +2048,14 @@
|
|
|
695
2048
|
}
|
|
696
2049
|
},
|
|
697
2050
|
{
|
|
698
|
-
"search": "
|
|
2051
|
+
"search": "Optional for hosts without Lit — see HTML integration.\n",
|
|
699
2052
|
"files": {
|
|
700
|
-
"core/components/functional/
|
|
701
|
-
"title": "
|
|
2053
|
+
"core/components/functional/queue/queue.md": {
|
|
2054
|
+
"title": "Queue",
|
|
702
2055
|
"hashes": {
|
|
703
|
-
"
|
|
2056
|
+
"html-template-children": {
|
|
704
2057
|
"count": 1,
|
|
705
|
-
"title": "
|
|
2058
|
+
"title": "HTML `<template>` children",
|
|
706
2059
|
"type": "paragraph"
|
|
707
2060
|
}
|
|
708
2061
|
}
|
|
@@ -710,29 +2063,29 @@
|
|
|
710
2063
|
}
|
|
711
2064
|
},
|
|
712
2065
|
{
|
|
713
|
-
"search": "
|
|
2066
|
+
"search": "Router",
|
|
714
2067
|
"files": {
|
|
715
|
-
"core/components/functional/
|
|
716
|
-
"title": "
|
|
2068
|
+
"core/components/functional/router/router.md": {
|
|
2069
|
+
"title": "Router",
|
|
717
2070
|
"hashes": {
|
|
718
|
-
"
|
|
2071
|
+
"router": {
|
|
719
2072
|
"count": 1,
|
|
720
|
-
"title": "
|
|
721
|
-
"type": "
|
|
2073
|
+
"title": "",
|
|
2074
|
+
"type": "page"
|
|
722
2075
|
}
|
|
723
2076
|
}
|
|
724
2077
|
}
|
|
725
2078
|
}
|
|
726
2079
|
},
|
|
727
2080
|
{
|
|
728
|
-
"search": "
|
|
2081
|
+
"search": "sonic-router watches document.location (pathname + hash) and renders the matching view.\n",
|
|
729
2082
|
"files": {
|
|
730
|
-
"core/components/functional/
|
|
731
|
-
"title": "
|
|
2083
|
+
"core/components/functional/router/router.md": {
|
|
2084
|
+
"title": "Router",
|
|
732
2085
|
"hashes": {
|
|
733
|
-
"
|
|
2086
|
+
"router": {
|
|
734
2087
|
"count": 1,
|
|
735
|
-
"title": "
|
|
2088
|
+
"title": "",
|
|
736
2089
|
"type": "paragraph"
|
|
737
2090
|
}
|
|
738
2091
|
}
|
|
@@ -740,27 +2093,27 @@
|
|
|
740
2093
|
}
|
|
741
2094
|
},
|
|
742
2095
|
{
|
|
743
|
-
"search": "
|
|
2096
|
+
"search": "From a Lit parent, pass a .routes map (property binding — same rule as .items on list): keys are path patterns, values are render functions. Use fallback when nothing matches.\n",
|
|
744
2097
|
"files": {
|
|
745
|
-
"core/components/functional/
|
|
746
|
-
"title": "
|
|
2098
|
+
"core/components/functional/router/router.md": {
|
|
2099
|
+
"title": "Router",
|
|
747
2100
|
"hashes": {
|
|
748
|
-
"
|
|
2101
|
+
"router": {
|
|
749
2102
|
"count": 1,
|
|
750
2103
|
"title": "",
|
|
751
|
-
"type": "
|
|
2104
|
+
"type": "paragraph"
|
|
752
2105
|
}
|
|
753
2106
|
}
|
|
754
2107
|
}
|
|
755
2108
|
}
|
|
756
2109
|
},
|
|
757
2110
|
{
|
|
758
|
-
"search": "
|
|
2111
|
+
"search": "Legacy HTML <template data-route="…"> remains for hosts without Lit — HTML integration.\n",
|
|
759
2112
|
"files": {
|
|
760
|
-
"core/components/functional/
|
|
761
|
-
"title": "
|
|
2113
|
+
"core/components/functional/router/router.md": {
|
|
2114
|
+
"title": "Router",
|
|
762
2115
|
"hashes": {
|
|
763
|
-
"
|
|
2116
|
+
"router": {
|
|
764
2117
|
"count": 1,
|
|
765
2118
|
"title": "",
|
|
766
2119
|
"type": "paragraph"
|
|
@@ -770,14 +2123,14 @@
|
|
|
770
2123
|
}
|
|
771
2124
|
},
|
|
772
2125
|
{
|
|
773
|
-
"search": "
|
|
2126
|
+
"search": "Route keys are matched against pathname + hash. A simple hash route #home matches when the location contains that segment.\n",
|
|
774
2127
|
"files": {
|
|
775
|
-
"core/components/functional/
|
|
776
|
-
"title": "
|
|
2128
|
+
"core/components/functional/router/router.md": {
|
|
2129
|
+
"title": "Router",
|
|
777
2130
|
"hashes": {
|
|
778
|
-
"
|
|
2131
|
+
"static-routes-no-parameters": {
|
|
779
2132
|
"count": 1,
|
|
780
|
-
"title": "",
|
|
2133
|
+
"title": "Static routes (no parameters)",
|
|
781
2134
|
"type": "paragraph"
|
|
782
2135
|
}
|
|
783
2136
|
}
|
|
@@ -785,14 +2138,14 @@
|
|
|
785
2138
|
}
|
|
786
2139
|
},
|
|
787
2140
|
{
|
|
788
|
-
"search": "
|
|
2141
|
+
"search": "On the doc site, the page URL is already a hash (#…/router.md/router). Demos append a second hash for in-page routes (#…/router#home), use href + autoActive="strict" on sonic-button for the active state, and history.replaceState on click so markdown is not reloaded (setDocsDemoSubHash in src/docs/docs-location.ts).\n",
|
|
789
2142
|
"files": {
|
|
790
|
-
"core/components/functional/
|
|
791
|
-
"title": "
|
|
2143
|
+
"core/components/functional/router/router.md": {
|
|
2144
|
+
"title": "Router",
|
|
792
2145
|
"hashes": {
|
|
793
|
-
"
|
|
2146
|
+
"static-routes-no-parameters": {
|
|
794
2147
|
"count": 1,
|
|
795
|
-
"title": "",
|
|
2148
|
+
"title": "Static routes (no parameters)",
|
|
796
2149
|
"type": "paragraph"
|
|
797
2150
|
}
|
|
798
2151
|
}
|
|
@@ -800,14 +2153,14 @@
|
|
|
800
2153
|
}
|
|
801
2154
|
},
|
|
802
2155
|
{
|
|
803
|
-
"search": "
|
|
2156
|
+
"search": "Two styles (see router.demo.ts and docs-router-params-demo):\n",
|
|
804
2157
|
"files": {
|
|
805
|
-
"core/components/functional/
|
|
806
|
-
"title": "
|
|
2158
|
+
"core/components/functional/router/router.md": {
|
|
2159
|
+
"title": "Router",
|
|
807
2160
|
"hashes": {
|
|
808
|
-
"
|
|
2161
|
+
"routes-with-parameters": {
|
|
809
2162
|
"count": 1,
|
|
810
|
-
"title": "
|
|
2163
|
+
"title": "Routes with parameters",
|
|
811
2164
|
"type": "paragraph"
|
|
812
2165
|
}
|
|
813
2166
|
}
|
|
@@ -815,14 +2168,14 @@
|
|
|
815
2168
|
}
|
|
816
2169
|
},
|
|
817
2170
|
{
|
|
818
|
-
"search": "
|
|
2171
|
+
"search": "Key uses :param segments. The render function receives an object { param: string }.\n",
|
|
819
2172
|
"files": {
|
|
820
|
-
"core/components/functional/
|
|
821
|
-
"title": "
|
|
2173
|
+
"core/components/functional/router/router.md": {
|
|
2174
|
+
"title": "Router",
|
|
822
2175
|
"hashes": {
|
|
823
|
-
"
|
|
2176
|
+
"url-pattern-name": {
|
|
824
2177
|
"count": 1,
|
|
825
|
-
"title": "
|
|
2178
|
+
"title": "Url-pattern (`:name`)",
|
|
826
2179
|
"type": "paragraph"
|
|
827
2180
|
}
|
|
828
2181
|
}
|
|
@@ -830,14 +2183,14 @@
|
|
|
830
2183
|
}
|
|
831
2184
|
},
|
|
832
2185
|
{
|
|
833
|
-
"search": "
|
|
2186
|
+
"search": "Key is a RegExp string with (\\d+) / (\\w+) groups. The render function receives an array of captured strings (in order).\n",
|
|
834
2187
|
"files": {
|
|
835
|
-
"core/components/functional/
|
|
836
|
-
"title": "
|
|
2188
|
+
"core/components/functional/router/router.md": {
|
|
2189
|
+
"title": "Router",
|
|
837
2190
|
"hashes": {
|
|
838
|
-
"
|
|
2191
|
+
"regexp-capturing-groups": {
|
|
839
2192
|
"count": 1,
|
|
840
|
-
"title": "
|
|
2193
|
+
"title": "RegExp (capturing groups)",
|
|
841
2194
|
"type": "paragraph"
|
|
842
2195
|
}
|
|
843
2196
|
}
|
|
@@ -845,14 +2198,14 @@
|
|
|
845
2198
|
}
|
|
846
2199
|
},
|
|
847
2200
|
{
|
|
848
|
-
"search": "
|
|
2201
|
+
"search": "With parameters you usually render data directly in Lit (${id}). The old <template data-route> + dataProviderExpression pattern scoped a dataProvider for data-bind / fetch children — prefer @subscribe or explicit props when using .routes.\n",
|
|
849
2202
|
"files": {
|
|
850
|
-
"core/components/functional/
|
|
851
|
-
"title": "
|
|
2203
|
+
"core/components/functional/router/router.md": {
|
|
2204
|
+
"title": "Router",
|
|
852
2205
|
"hashes": {
|
|
853
|
-
"
|
|
2206
|
+
"regexp-capturing-groups": {
|
|
854
2207
|
"count": 1,
|
|
855
|
-
"title": "
|
|
2208
|
+
"title": "RegExp (capturing groups)",
|
|
856
2209
|
"type": "paragraph"
|
|
857
2210
|
}
|
|
858
2211
|
}
|
|
@@ -860,14 +2213,14 @@
|
|
|
860
2213
|
}
|
|
861
2214
|
},
|
|
862
2215
|
{
|
|
863
|
-
"search": "
|
|
2216
|
+
"search": "Always use .routes=${…} in Lit templates: route handlers are functions and must be set as properties, not HTML attributes.\n",
|
|
864
2217
|
"files": {
|
|
865
|
-
"core/components/functional/
|
|
866
|
-
"title": "
|
|
2218
|
+
"core/components/functional/router/router.md": {
|
|
2219
|
+
"title": "Router",
|
|
867
2220
|
"hashes": {
|
|
868
|
-
"
|
|
2221
|
+
"routes-binding": {
|
|
869
2222
|
"count": 1,
|
|
870
|
-
"title": "
|
|
2223
|
+
"title": "`.routes` binding",
|
|
871
2224
|
"type": "paragraph"
|
|
872
2225
|
}
|
|
873
2226
|
}
|
|
@@ -875,14 +2228,14 @@
|
|
|
875
2228
|
}
|
|
876
2229
|
},
|
|
877
2230
|
{
|
|
878
|
-
"search": "
|
|
2231
|
+
"search": "Separate component: redirect when data appears on a publisher (login steps, wizards). Not part of the .routes map.\n",
|
|
879
2232
|
"files": {
|
|
880
|
-
"core/components/functional/
|
|
881
|
-
"title": "
|
|
2233
|
+
"core/components/functional/router/router.md": {
|
|
2234
|
+
"title": "Router",
|
|
882
2235
|
"hashes": {
|
|
883
|
-
"
|
|
2236
|
+
"sonic-redirect": {
|
|
884
2237
|
"count": 1,
|
|
885
|
-
"title": "
|
|
2238
|
+
"title": "`sonic-redirect`",
|
|
886
2239
|
"type": "paragraph"
|
|
887
2240
|
}
|
|
888
2241
|
}
|
|
@@ -890,14 +2243,14 @@
|
|
|
890
2243
|
}
|
|
891
2244
|
},
|
|
892
2245
|
{
|
|
893
|
-
"search": "
|
|
2246
|
+
"search": "Example: combine with .routes and submit for login / logout / profile steps.\n",
|
|
894
2247
|
"files": {
|
|
895
|
-
"core/components/functional/
|
|
896
|
-
"title": "
|
|
2248
|
+
"core/components/functional/router/router.md": {
|
|
2249
|
+
"title": "Router",
|
|
897
2250
|
"hashes": {
|
|
898
|
-
"
|
|
2251
|
+
"sonic-redirect": {
|
|
899
2252
|
"count": 1,
|
|
900
|
-
"title": "
|
|
2253
|
+
"title": "`sonic-redirect`",
|
|
901
2254
|
"type": "paragraph"
|
|
902
2255
|
}
|
|
903
2256
|
}
|
|
@@ -905,44 +2258,44 @@
|
|
|
905
2258
|
}
|
|
906
2259
|
},
|
|
907
2260
|
{
|
|
908
|
-
"search": "
|
|
2261
|
+
"search": "sonic-router-demo (router.demo.ts) — home, user profile (#user/:id/:slug), products RegExp, fallback 404.\n",
|
|
909
2262
|
"files": {
|
|
910
|
-
"core/components/functional/
|
|
911
|
-
"title": "
|
|
2263
|
+
"core/components/functional/router/router.md": {
|
|
2264
|
+
"title": "Router",
|
|
912
2265
|
"hashes": {
|
|
913
|
-
"
|
|
2266
|
+
"package-demo": {
|
|
914
2267
|
"count": 1,
|
|
915
|
-
"title": "",
|
|
916
|
-
"type": "
|
|
2268
|
+
"title": "Package demo",
|
|
2269
|
+
"type": "paragraph"
|
|
917
2270
|
}
|
|
918
2271
|
}
|
|
919
2272
|
}
|
|
920
2273
|
}
|
|
921
2274
|
},
|
|
922
2275
|
{
|
|
923
|
-
"search": "
|
|
2276
|
+
"search": "SDUI",
|
|
924
2277
|
"files": {
|
|
925
|
-
"core/components/functional/
|
|
926
|
-
"title": "
|
|
2278
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2279
|
+
"title": "SDUI",
|
|
927
2280
|
"hashes": {
|
|
928
|
-
"
|
|
2281
|
+
"sdui": {
|
|
929
2282
|
"count": 1,
|
|
930
2283
|
"title": "",
|
|
931
|
-
"type": "
|
|
2284
|
+
"type": "page"
|
|
932
2285
|
}
|
|
933
2286
|
}
|
|
934
2287
|
}
|
|
935
2288
|
}
|
|
936
2289
|
},
|
|
937
2290
|
{
|
|
938
|
-
"search": "
|
|
2291
|
+
"search": "SDUI stands for Server Driven User Interfaces.\nBasically, it generates a user interface based on a JSON SDUI Descriptor.\n",
|
|
939
2292
|
"files": {
|
|
940
|
-
"core/components/functional/
|
|
941
|
-
"title": "
|
|
2293
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2294
|
+
"title": "SDUI",
|
|
942
2295
|
"hashes": {
|
|
943
|
-
"
|
|
2296
|
+
"what-is-sdui": {
|
|
944
2297
|
"count": 1,
|
|
945
|
-
"title": "",
|
|
2298
|
+
"title": "What is SDUI?",
|
|
946
2299
|
"type": "paragraph"
|
|
947
2300
|
}
|
|
948
2301
|
}
|
|
@@ -950,14 +2303,14 @@
|
|
|
950
2303
|
}
|
|
951
2304
|
},
|
|
952
2305
|
{
|
|
953
|
-
"search": "
|
|
2306
|
+
"search": "SDUI extends the mixin Subscriber.\nThis means that you must set a dataProvider with an id pointing to the publisher that will hold your SDUI Descriptor.\nThis also means that it has a reactive property named props that you can set with the JSON SDUI Descriptor in order to configure it.\n",
|
|
954
2307
|
"files": {
|
|
955
|
-
"core/components/functional/
|
|
956
|
-
"title": "
|
|
2308
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2309
|
+
"title": "SDUI",
|
|
957
2310
|
"hashes": {
|
|
958
|
-
"
|
|
2311
|
+
"subscriber-extension": {
|
|
959
2312
|
"count": 1,
|
|
960
|
-
"title": "",
|
|
2313
|
+
"title": "Subscriber extension:",
|
|
961
2314
|
"type": "paragraph"
|
|
962
2315
|
}
|
|
963
2316
|
}
|
|
@@ -965,29 +2318,29 @@
|
|
|
965
2318
|
}
|
|
966
2319
|
},
|
|
967
2320
|
{
|
|
968
|
-
"search": "
|
|
2321
|
+
"search": "SDUI extends the mixin Fetcher as Fetch and List.\n",
|
|
969
2322
|
"files": {
|
|
970
|
-
"core/components/functional/
|
|
971
|
-
"title": "
|
|
2323
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2324
|
+
"title": "SDUI",
|
|
972
2325
|
"hashes": {
|
|
973
|
-
"
|
|
2326
|
+
"fetcher-extension": {
|
|
974
2327
|
"count": 1,
|
|
975
|
-
"title": "",
|
|
976
|
-
"type": "
|
|
2328
|
+
"title": "Fetcher extension:",
|
|
2329
|
+
"type": "paragraph"
|
|
977
2330
|
}
|
|
978
2331
|
}
|
|
979
2332
|
}
|
|
980
2333
|
}
|
|
981
2334
|
},
|
|
982
2335
|
{
|
|
983
|
-
"search": "
|
|
2336
|
+
"search": "In this case, it will parse the JSON coming from the request.\nThe JSON must comply with the SDUI descriptor format.\n",
|
|
984
2337
|
"files": {
|
|
985
|
-
"core/components/functional/
|
|
986
|
-
"title": "
|
|
2338
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2339
|
+
"title": "SDUI",
|
|
987
2340
|
"hashes": {
|
|
988
|
-
"
|
|
2341
|
+
"fetcher-extension": {
|
|
989
2342
|
"count": 1,
|
|
990
|
-
"title": "",
|
|
2343
|
+
"title": "Fetcher extension:",
|
|
991
2344
|
"type": "paragraph"
|
|
992
2345
|
}
|
|
993
2346
|
}
|
|
@@ -995,14 +2348,14 @@
|
|
|
995
2348
|
}
|
|
996
2349
|
},
|
|
997
2350
|
{
|
|
998
|
-
"search": "
|
|
2351
|
+
"search": "As a fetcher, invalidating the publisher or updating the endpoint will trigger a new fetch and update accordingly.\n",
|
|
999
2352
|
"files": {
|
|
1000
|
-
"core/components/functional/
|
|
1001
|
-
"title": "
|
|
2353
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2354
|
+
"title": "SDUI",
|
|
1002
2355
|
"hashes": {
|
|
1003
|
-
"
|
|
2356
|
+
"fetcher-extension": {
|
|
1004
2357
|
"count": 1,
|
|
1005
|
-
"title": "",
|
|
2358
|
+
"title": "Fetcher extension:",
|
|
1006
2359
|
"type": "paragraph"
|
|
1007
2360
|
}
|
|
1008
2361
|
}
|
|
@@ -1010,14 +2363,14 @@
|
|
|
1010
2363
|
}
|
|
1011
2364
|
},
|
|
1012
2365
|
{
|
|
1013
|
-
"search": "
|
|
2366
|
+
"search": "It has no shadowdom, and its display style is set to contents, so an empty SDUI has the fewest impact on the layout.\n",
|
|
1014
2367
|
"files": {
|
|
1015
|
-
"core/components/functional/
|
|
1016
|
-
"title": "
|
|
2368
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2369
|
+
"title": "SDUI",
|
|
1017
2370
|
"hashes": {
|
|
1018
|
-
"
|
|
2371
|
+
"rendering": {
|
|
1019
2372
|
"count": 1,
|
|
1020
|
-
"title": "
|
|
2373
|
+
"title": "Rendering:",
|
|
1021
2374
|
"type": "paragraph"
|
|
1022
2375
|
}
|
|
1023
2376
|
}
|
|
@@ -1025,14 +2378,14 @@
|
|
|
1025
2378
|
}
|
|
1026
2379
|
},
|
|
1027
2380
|
{
|
|
1028
|
-
"search": "
|
|
2381
|
+
"search": "An SDUINode represents an HTMLElement.\n",
|
|
1029
2382
|
"files": {
|
|
1030
|
-
"core/components/functional/
|
|
1031
|
-
"title": "
|
|
2383
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2384
|
+
"title": "SDUI",
|
|
1032
2385
|
"hashes": {
|
|
1033
|
-
"
|
|
2386
|
+
"descriptor": {
|
|
1034
2387
|
"count": 1,
|
|
1035
|
-
"title": "
|
|
2388
|
+
"title": "Descriptor",
|
|
1036
2389
|
"type": "paragraph"
|
|
1037
2390
|
}
|
|
1038
2391
|
}
|
|
@@ -1040,14 +2393,14 @@
|
|
|
1040
2393
|
}
|
|
1041
2394
|
},
|
|
1042
2395
|
{
|
|
1043
|
-
"search": "
|
|
2396
|
+
"search": "TypeScript definition:\n",
|
|
1044
2397
|
"files": {
|
|
1045
|
-
"core/components/functional/
|
|
1046
|
-
"title": "
|
|
2398
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2399
|
+
"title": "SDUI",
|
|
1047
2400
|
"hashes": {
|
|
1048
|
-
"
|
|
2401
|
+
"descriptor": {
|
|
1049
2402
|
"count": 1,
|
|
1050
|
-
"title": "
|
|
2403
|
+
"title": "Descriptor",
|
|
1051
2404
|
"type": "paragraph"
|
|
1052
2405
|
}
|
|
1053
2406
|
}
|
|
@@ -1055,14 +2408,14 @@
|
|
|
1055
2408
|
}
|
|
1056
2409
|
},
|
|
1057
2410
|
{
|
|
1058
|
-
"search": "
|
|
2411
|
+
"search": "Summary of properties:\n",
|
|
1059
2412
|
"files": {
|
|
1060
|
-
"core/components/functional/
|
|
1061
|
-
"title": "
|
|
2413
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2414
|
+
"title": "SDUI",
|
|
1062
2415
|
"hashes": {
|
|
1063
|
-
"
|
|
2416
|
+
"descriptor": {
|
|
1064
2417
|
"count": 1,
|
|
1065
|
-
"title": "
|
|
2418
|
+
"title": "Descriptor",
|
|
1066
2419
|
"type": "paragraph"
|
|
1067
2420
|
}
|
|
1068
2421
|
}
|
|
@@ -1070,14 +2423,14 @@
|
|
|
1070
2423
|
}
|
|
1071
2424
|
},
|
|
1072
2425
|
{
|
|
1073
|
-
"search": "
|
|
2426
|
+
"search": "Use it if you prefer to define your node entirely using an HTML string.\n",
|
|
1074
2427
|
"files": {
|
|
1075
|
-
"core/components/functional/
|
|
1076
|
-
"title": "
|
|
2428
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2429
|
+
"title": "SDUI",
|
|
1077
2430
|
"hashes": {
|
|
1078
|
-
"
|
|
2431
|
+
"markup": {
|
|
1079
2432
|
"count": 1,
|
|
1080
|
-
"title": "
|
|
2433
|
+
"title": "Markup",
|
|
1081
2434
|
"type": "paragraph"
|
|
1082
2435
|
}
|
|
1083
2436
|
}
|
|
@@ -1085,14 +2438,14 @@
|
|
|
1085
2438
|
}
|
|
1086
2439
|
},
|
|
1087
2440
|
{
|
|
1088
|
-
"search": "
|
|
2441
|
+
"search": "Here we use the field tagName of SDUINode to create an element with tag name sonic-input.\n",
|
|
1089
2442
|
"files": {
|
|
1090
|
-
"core/components/functional/
|
|
1091
|
-
"title": "
|
|
2443
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2444
|
+
"title": "SDUI",
|
|
1092
2445
|
"hashes": {
|
|
1093
|
-
"
|
|
2446
|
+
"tag-name": {
|
|
1094
2447
|
"count": 1,
|
|
1095
|
-
"title": "
|
|
2448
|
+
"title": "Tag name",
|
|
1096
2449
|
"type": "paragraph"
|
|
1097
2450
|
}
|
|
1098
2451
|
}
|
|
@@ -1100,14 +2453,14 @@
|
|
|
1100
2453
|
}
|
|
1101
2454
|
},
|
|
1102
2455
|
{
|
|
1103
|
-
"search": "
|
|
2456
|
+
"search": "A string key/value pair storing each attribute name/value of the HTML element created.\nAs no tag name is defined, a div element is created.\nHere we define the style attribute to create a tiny red square.\n",
|
|
1104
2457
|
"files": {
|
|
1105
|
-
"core/components/functional/
|
|
1106
|
-
"title": "
|
|
2458
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2459
|
+
"title": "SDUI",
|
|
1107
2460
|
"hashes": {
|
|
1108
|
-
"
|
|
2461
|
+
"attributes": {
|
|
1109
2462
|
"count": 1,
|
|
1110
|
-
"title": "
|
|
2463
|
+
"title": "Attributes",
|
|
1111
2464
|
"type": "paragraph"
|
|
1112
2465
|
}
|
|
1113
2466
|
}
|
|
@@ -1115,14 +2468,14 @@
|
|
|
1115
2468
|
}
|
|
1116
2469
|
},
|
|
1117
2470
|
{
|
|
1118
|
-
"search": "
|
|
2471
|
+
"search": "Children of the current node can be added using the field nodes recursively.\n",
|
|
1119
2472
|
"files": {
|
|
1120
|
-
"core/components/functional/
|
|
1121
|
-
"title": "
|
|
2473
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2474
|
+
"title": "SDUI",
|
|
1122
2475
|
"hashes": {
|
|
1123
|
-
"
|
|
2476
|
+
"nodes": {
|
|
1124
2477
|
"count": 1,
|
|
1125
|
-
"title": "
|
|
2478
|
+
"title": "Nodes",
|
|
1126
2479
|
"type": "paragraph"
|
|
1127
2480
|
}
|
|
1128
2481
|
}
|
|
@@ -1130,14 +2483,14 @@
|
|
|
1130
2483
|
}
|
|
1131
2484
|
},
|
|
1132
2485
|
{
|
|
1133
|
-
"search": "
|
|
2486
|
+
"search": "As no tag name is defined, a div element is created, and then we use innerHTML to add content to it.\n",
|
|
1134
2487
|
"files": {
|
|
1135
|
-
"core/components/functional/
|
|
1136
|
-
"title": "
|
|
2488
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2489
|
+
"title": "SDUI",
|
|
1137
2490
|
"hashes": {
|
|
1138
|
-
"
|
|
2491
|
+
"innerhtml": {
|
|
1139
2492
|
"count": 1,
|
|
1140
|
-
"title": "
|
|
2493
|
+
"title": "InnerHTML",
|
|
1141
2494
|
"type": "paragraph"
|
|
1142
2495
|
}
|
|
1143
2496
|
}
|
|
@@ -1145,14 +2498,14 @@
|
|
|
1145
2498
|
}
|
|
1146
2499
|
},
|
|
1147
2500
|
{
|
|
1148
|
-
"search": "
|
|
2501
|
+
"search": "Use them if you want to wrap the component with some HTML string.\n",
|
|
1149
2502
|
"files": {
|
|
1150
|
-
"core/components/functional/
|
|
1151
|
-
"title": "
|
|
2503
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2504
|
+
"title": "SDUI",
|
|
1152
2505
|
"hashes": {
|
|
1153
|
-
"
|
|
2506
|
+
"prefix-and-suffix": {
|
|
1154
2507
|
"count": 1,
|
|
1155
|
-
"title": "
|
|
2508
|
+
"title": "Prefix and suffix",
|
|
1156
2509
|
"type": "paragraph"
|
|
1157
2510
|
}
|
|
1158
2511
|
}
|
|
@@ -1160,29 +2513,29 @@
|
|
|
1160
2513
|
}
|
|
1161
2514
|
},
|
|
1162
2515
|
{
|
|
1163
|
-
"search": "
|
|
2516
|
+
"search": "The libraryKey of SDUINode is an identifier that points to an SDUINode description in the library to be used as a model for this node.\n",
|
|
1164
2517
|
"files": {
|
|
1165
|
-
"core/components/functional/
|
|
1166
|
-
"title": "
|
|
2518
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2519
|
+
"title": "SDUI",
|
|
1167
2520
|
"hashes": {
|
|
1168
|
-
"
|
|
2521
|
+
"library-key-and-contentelementselector": {
|
|
1169
2522
|
"count": 1,
|
|
1170
|
-
"title": "",
|
|
1171
|
-
"type": "
|
|
2523
|
+
"title": "Library key and contentElementSelector",
|
|
2524
|
+
"type": "paragraph"
|
|
1172
2525
|
}
|
|
1173
2526
|
}
|
|
1174
2527
|
}
|
|
1175
2528
|
}
|
|
1176
2529
|
},
|
|
1177
2530
|
{
|
|
1178
|
-
"search": "
|
|
2531
|
+
"search": "Note that the SDUI has a default library containing some basic component definitions useful for form declaration (see default-library.json).\n",
|
|
1179
2532
|
"files": {
|
|
1180
|
-
"core/components/functional/
|
|
1181
|
-
"title": "
|
|
2533
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2534
|
+
"title": "SDUI",
|
|
1182
2535
|
"hashes": {
|
|
1183
|
-
"
|
|
2536
|
+
"library-key-and-contentelementselector": {
|
|
1184
2537
|
"count": 1,
|
|
1185
|
-
"title": "",
|
|
2538
|
+
"title": "Library key and contentElementSelector",
|
|
1186
2539
|
"type": "paragraph"
|
|
1187
2540
|
}
|
|
1188
2541
|
}
|
|
@@ -1190,14 +2543,14 @@
|
|
|
1190
2543
|
}
|
|
1191
2544
|
},
|
|
1192
2545
|
{
|
|
1193
|
-
"search": "
|
|
2546
|
+
"search": "This example uses the library key submit which points to a sonic-submit containing a button also coming from the library.\n",
|
|
1194
2547
|
"files": {
|
|
1195
|
-
"core/components/functional/
|
|
1196
|
-
"title": "
|
|
2548
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2549
|
+
"title": "SDUI",
|
|
1197
2550
|
"hashes": {
|
|
1198
|
-
"
|
|
2551
|
+
"library-key-and-contentelementselector": {
|
|
1199
2552
|
"count": 1,
|
|
1200
|
-
"title": "",
|
|
2553
|
+
"title": "Library key and contentElementSelector",
|
|
1201
2554
|
"type": "paragraph"
|
|
1202
2555
|
}
|
|
1203
2556
|
}
|
|
@@ -1205,14 +2558,14 @@
|
|
|
1205
2558
|
}
|
|
1206
2559
|
},
|
|
1207
2560
|
{
|
|
1208
|
-
"search": "
|
|
2561
|
+
"search": "The element named button in the library is a sonic-button of type success containing a check icon as a prefix.\n",
|
|
1209
2562
|
"files": {
|
|
1210
|
-
"core/components/functional/
|
|
1211
|
-
"title": "
|
|
2563
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2564
|
+
"title": "SDUI",
|
|
1212
2565
|
"hashes": {
|
|
1213
|
-
"
|
|
2566
|
+
"library-key-and-contentelementselector": {
|
|
1214
2567
|
"count": 1,
|
|
1215
|
-
"title": "",
|
|
2568
|
+
"title": "Library key and contentElementSelector",
|
|
1216
2569
|
"type": "paragraph"
|
|
1217
2570
|
}
|
|
1218
2571
|
}
|
|
@@ -1220,14 +2573,14 @@
|
|
|
1220
2573
|
}
|
|
1221
2574
|
},
|
|
1222
2575
|
{
|
|
1223
|
-
"search": "
|
|
2576
|
+
"search": "Since the submit library element contains an attribute contentElementSelector with the value sonic-button, the "injected content" is put inside the button.\n",
|
|
1224
2577
|
"files": {
|
|
1225
|
-
"core/components/functional/
|
|
1226
|
-
"title": "
|
|
2578
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2579
|
+
"title": "SDUI",
|
|
1227
2580
|
"hashes": {
|
|
1228
|
-
"
|
|
2581
|
+
"library-key-and-contentelementselector": {
|
|
1229
2582
|
"count": 1,
|
|
1230
|
-
"title": "
|
|
2583
|
+
"title": "Library key and contentElementSelector",
|
|
1231
2584
|
"type": "paragraph"
|
|
1232
2585
|
}
|
|
1233
2586
|
}
|
|
@@ -1235,14 +2588,14 @@
|
|
|
1235
2588
|
}
|
|
1236
2589
|
},
|
|
1237
2590
|
{
|
|
1238
|
-
"search": "
|
|
2591
|
+
"search": "We used innerHTML for the sake of simplicity, but you can use nodes to add any complex content.\n",
|
|
1239
2592
|
"files": {
|
|
1240
|
-
"core/components/functional/
|
|
1241
|
-
"title": "
|
|
2593
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2594
|
+
"title": "SDUI",
|
|
1242
2595
|
"hashes": {
|
|
1243
|
-
"
|
|
2596
|
+
"library-key-and-contentelementselector": {
|
|
1244
2597
|
"count": 1,
|
|
1245
|
-
"title": "
|
|
2598
|
+
"title": "Library key and contentElementSelector",
|
|
1246
2599
|
"type": "paragraph"
|
|
1247
2600
|
}
|
|
1248
2601
|
}
|
|
@@ -1250,14 +2603,14 @@
|
|
|
1250
2603
|
}
|
|
1251
2604
|
},
|
|
1252
2605
|
{
|
|
1253
|
-
"search": "
|
|
2606
|
+
"search": "This special field lets you inject the content at any place in the HTML flow already set inside the parent SDUI component by using a CSS selector.\n",
|
|
1254
2607
|
"files": {
|
|
1255
|
-
"core/components/functional/
|
|
1256
|
-
"title": "
|
|
2608
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2609
|
+
"title": "SDUI",
|
|
1257
2610
|
"hashes": {
|
|
1258
|
-
"
|
|
2611
|
+
"parentelementselector": {
|
|
1259
2612
|
"count": 1,
|
|
1260
|
-
"title": "
|
|
2613
|
+
"title": "parentElementSelector",
|
|
1261
2614
|
"type": "paragraph"
|
|
1262
2615
|
}
|
|
1263
2616
|
}
|
|
@@ -1265,14 +2618,14 @@
|
|
|
1265
2618
|
}
|
|
1266
2619
|
},
|
|
1267
2620
|
{
|
|
1268
|
-
"search": "
|
|
2621
|
+
"search": "⚠️ Note that it doesn't work with top-level nodes.\n",
|
|
1269
2622
|
"files": {
|
|
1270
|
-
"core/components/functional/
|
|
1271
|
-
"title": "
|
|
2623
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2624
|
+
"title": "SDUI",
|
|
1272
2625
|
"hashes": {
|
|
1273
|
-
"
|
|
2626
|
+
"parentelementselector": {
|
|
1274
2627
|
"count": 1,
|
|
1275
|
-
"title": "
|
|
2628
|
+
"title": "parentElementSelector",
|
|
1276
2629
|
"type": "paragraph"
|
|
1277
2630
|
}
|
|
1278
2631
|
}
|
|
@@ -1280,14 +2633,14 @@
|
|
|
1280
2633
|
}
|
|
1281
2634
|
},
|
|
1282
2635
|
{
|
|
1283
|
-
"search": "
|
|
2636
|
+
"search": "The transformers let you transform the structure of the SDUI Descriptor into a new one before parsing and rendering it.\n",
|
|
1284
2637
|
"files": {
|
|
1285
|
-
"core/components/functional/
|
|
1286
|
-
"title": "
|
|
2638
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2639
|
+
"title": "SDUI",
|
|
1287
2640
|
"hashes": {
|
|
1288
|
-
"
|
|
2641
|
+
"transformers": {
|
|
1289
2642
|
"count": 1,
|
|
1290
|
-
"title": "
|
|
2643
|
+
"title": "Transformers:",
|
|
1291
2644
|
"type": "paragraph"
|
|
1292
2645
|
}
|
|
1293
2646
|
}
|
|
@@ -1295,14 +2648,14 @@
|
|
|
1295
2648
|
}
|
|
1296
2649
|
},
|
|
1297
2650
|
{
|
|
1298
|
-
"search": "
|
|
2651
|
+
"search": "To enable it, you must fill the transformation attribute of the component with a URL pointing to a Transform descriptor.\n",
|
|
1299
2652
|
"files": {
|
|
1300
|
-
"core/components/functional/
|
|
1301
|
-
"title": "
|
|
2653
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2654
|
+
"title": "SDUI",
|
|
1302
2655
|
"hashes": {
|
|
1303
|
-
"
|
|
2656
|
+
"transformers": {
|
|
1304
2657
|
"count": 1,
|
|
1305
|
-
"title": "
|
|
2658
|
+
"title": "Transformers:",
|
|
1306
2659
|
"type": "paragraph"
|
|
1307
2660
|
}
|
|
1308
2661
|
}
|
|
@@ -1310,14 +2663,14 @@
|
|
|
1310
2663
|
}
|
|
1311
2664
|
},
|
|
1312
2665
|
{
|
|
1313
|
-
"search": "
|
|
2666
|
+
"search": "Each key of the library will be merged with the current library in the SDUI Descriptor, by replacing or creating items library key by key.\n",
|
|
1314
2667
|
"files": {
|
|
1315
|
-
"core/components/functional/
|
|
1316
|
-
"title": "
|
|
2668
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2669
|
+
"title": "SDUI",
|
|
1317
2670
|
"hashes": {
|
|
1318
|
-
"
|
|
2671
|
+
"the-library": {
|
|
1319
2672
|
"count": 1,
|
|
1320
|
-
"title": "
|
|
2673
|
+
"title": "The library:",
|
|
1321
2674
|
"type": "paragraph"
|
|
1322
2675
|
}
|
|
1323
2676
|
}
|
|
@@ -1325,14 +2678,14 @@
|
|
|
1325
2678
|
}
|
|
1326
2679
|
},
|
|
1327
2680
|
{
|
|
1328
|
-
"search": "
|
|
2681
|
+
"search": "Each transform represents an action that will be done on the SDUI descriptor before the creation of the entire UI.\n",
|
|
1329
2682
|
"files": {
|
|
1330
|
-
"core/components/functional/
|
|
1331
|
-
"title": "
|
|
2683
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2684
|
+
"title": "SDUI",
|
|
1332
2685
|
"hashes": {
|
|
1333
|
-
"
|
|
2686
|
+
"the-transform-actions": {
|
|
1334
2687
|
"count": 1,
|
|
1335
|
-
"title": "
|
|
2688
|
+
"title": "The transform actions:",
|
|
1336
2689
|
"type": "paragraph"
|
|
1337
2690
|
}
|
|
1338
2691
|
}
|
|
@@ -1340,14 +2693,14 @@
|
|
|
1340
2693
|
}
|
|
1341
2694
|
},
|
|
1342
2695
|
{
|
|
1343
|
-
"search": "
|
|
2696
|
+
"search": "The action that will be done is a verb:\n",
|
|
1344
2697
|
"files": {
|
|
1345
|
-
"core/components/functional/
|
|
1346
|
-
"title": "
|
|
2698
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2699
|
+
"title": "SDUI",
|
|
1347
2700
|
"hashes": {
|
|
1348
|
-
"
|
|
2701
|
+
"the-transform-actions": {
|
|
1349
2702
|
"count": 1,
|
|
1350
|
-
"title": "
|
|
2703
|
+
"title": "The transform actions:",
|
|
1351
2704
|
"type": "paragraph"
|
|
1352
2705
|
}
|
|
1353
2706
|
}
|
|
@@ -1355,14 +2708,14 @@
|
|
|
1355
2708
|
}
|
|
1356
2709
|
},
|
|
1357
2710
|
{
|
|
1358
|
-
"search": "
|
|
2711
|
+
"search": "This is an HTML attribute to set on the component if needed. In this case, the component will not treat its props value directly as an SDUI descriptor. Internally, it will basically extract the SDUIDescriptor by doing something like this: const sduiDescriptor = this.props[this.sduikey].\n",
|
|
1359
2712
|
"files": {
|
|
1360
|
-
"core/components/functional/
|
|
1361
|
-
"title": "
|
|
2713
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2714
|
+
"title": "SDUI",
|
|
1362
2715
|
"hashes": {
|
|
1363
|
-
"
|
|
2716
|
+
"sduikey": {
|
|
1364
2717
|
"count": 1,
|
|
1365
|
-
"title": "
|
|
2718
|
+
"title": "sduiKey",
|
|
1366
2719
|
"type": "paragraph"
|
|
1367
2720
|
}
|
|
1368
2721
|
}
|
|
@@ -1370,29 +2723,29 @@
|
|
|
1370
2723
|
}
|
|
1371
2724
|
},
|
|
1372
2725
|
{
|
|
1373
|
-
"search": "
|
|
2726
|
+
"search": "This is an HTML attribute to set on the component if needed. In this case, the component will automatically create a sonic-toast-message-subscriber component. The data found in props[messageKey] will be treated as the data expected by the sonic-toast-message-subscriber. So, by respecting the format of data supported by this component, you will be able to show multiple toasts in the result of a request.\n",
|
|
1374
2727
|
"files": {
|
|
1375
2728
|
"core/components/functional/sdui/sdui.md": {
|
|
1376
2729
|
"title": "SDUI",
|
|
1377
2730
|
"hashes": {
|
|
1378
|
-
"
|
|
2731
|
+
"messagekey": {
|
|
1379
2732
|
"count": 1,
|
|
1380
|
-
"title": "",
|
|
1381
|
-
"type": "
|
|
2733
|
+
"title": "messageKey",
|
|
2734
|
+
"type": "paragraph"
|
|
1382
2735
|
}
|
|
1383
2736
|
}
|
|
1384
2737
|
}
|
|
1385
2738
|
}
|
|
1386
2739
|
},
|
|
1387
2740
|
{
|
|
1388
|
-
"search": "
|
|
2741
|
+
"search": "Example of JSON with messageKey=messages:\n\n",
|
|
1389
2742
|
"files": {
|
|
1390
2743
|
"core/components/functional/sdui/sdui.md": {
|
|
1391
2744
|
"title": "SDUI",
|
|
1392
2745
|
"hashes": {
|
|
1393
|
-
"
|
|
2746
|
+
"messagekey": {
|
|
1394
2747
|
"count": 1,
|
|
1395
|
-
"title": "
|
|
2748
|
+
"title": "messageKey",
|
|
1396
2749
|
"type": "paragraph"
|
|
1397
2750
|
}
|
|
1398
2751
|
}
|
|
@@ -1400,14 +2753,14 @@
|
|
|
1400
2753
|
}
|
|
1401
2754
|
},
|
|
1402
2755
|
{
|
|
1403
|
-
"search": "
|
|
2756
|
+
"search": "This is an HTML attribute to set on the component if needed. You can set a URL pointing to a JSON describing a library with the same structure as the library in the SDUIDescriptor. The component will simply override its library with the given one.\n",
|
|
1404
2757
|
"files": {
|
|
1405
2758
|
"core/components/functional/sdui/sdui.md": {
|
|
1406
2759
|
"title": "SDUI",
|
|
1407
2760
|
"hashes": {
|
|
1408
|
-
"
|
|
2761
|
+
"library": {
|
|
1409
2762
|
"count": 1,
|
|
1410
|
-
"title": "
|
|
2763
|
+
"title": "library",
|
|
1411
2764
|
"type": "paragraph"
|
|
1412
2765
|
}
|
|
1413
2766
|
}
|
|
@@ -1415,14 +2768,14 @@
|
|
|
1415
2768
|
}
|
|
1416
2769
|
},
|
|
1417
2770
|
{
|
|
1418
|
-
"search": "
|
|
2771
|
+
"search": "Here is a little playground to let you test some simple tricks.\n",
|
|
1419
2772
|
"files": {
|
|
1420
2773
|
"core/components/functional/sdui/sdui.md": {
|
|
1421
2774
|
"title": "SDUI",
|
|
1422
2775
|
"hashes": {
|
|
1423
|
-
"
|
|
2776
|
+
"playground": {
|
|
1424
2777
|
"count": 1,
|
|
1425
|
-
"title": "
|
|
2778
|
+
"title": "Playground",
|
|
1426
2779
|
"type": "paragraph"
|
|
1427
2780
|
}
|
|
1428
2781
|
}
|
|
@@ -1430,29 +2783,29 @@
|
|
|
1430
2783
|
}
|
|
1431
2784
|
},
|
|
1432
2785
|
{
|
|
1433
|
-
"search": "
|
|
2786
|
+
"search": "Shader",
|
|
1434
2787
|
"files": {
|
|
1435
|
-
"core/components/functional/
|
|
1436
|
-
"title": "
|
|
2788
|
+
"core/components/functional/shader/shader.md": {
|
|
2789
|
+
"title": "Shader",
|
|
1437
2790
|
"hashes": {
|
|
1438
|
-
"
|
|
2791
|
+
"shader": {
|
|
1439
2792
|
"count": 1,
|
|
1440
|
-
"title": "
|
|
1441
|
-
"type": "
|
|
2793
|
+
"title": "",
|
|
2794
|
+
"type": "page"
|
|
1442
2795
|
}
|
|
1443
2796
|
}
|
|
1444
2797
|
}
|
|
1445
2798
|
}
|
|
1446
2799
|
},
|
|
1447
2800
|
{
|
|
1448
|
-
"search": "
|
|
2801
|
+
"search": "sonic-shader — renderer WebGL2 compatible ShaderToy (pass Image + buffers A–D + Common).\n",
|
|
1449
2802
|
"files": {
|
|
1450
|
-
"core/components/functional/
|
|
1451
|
-
"title": "
|
|
2803
|
+
"core/components/functional/shader/shader.md": {
|
|
2804
|
+
"title": "Shader",
|
|
1452
2805
|
"hashes": {
|
|
1453
|
-
"
|
|
2806
|
+
"shader": {
|
|
1454
2807
|
"count": 1,
|
|
1455
|
-
"title": "
|
|
2808
|
+
"title": "",
|
|
1456
2809
|
"type": "paragraph"
|
|
1457
2810
|
}
|
|
1458
2811
|
}
|
|
@@ -1460,14 +2813,14 @@
|
|
|
1460
2813
|
}
|
|
1461
2814
|
},
|
|
1462
2815
|
{
|
|
1463
|
-
"search": "
|
|
2816
|
+
"search": "For WGSL / WebGPU (1 pass, same DP glue): sonic-webgpu.\n",
|
|
1464
2817
|
"files": {
|
|
1465
|
-
"core/components/functional/
|
|
1466
|
-
"title": "
|
|
2818
|
+
"core/components/functional/shader/shader.md": {
|
|
2819
|
+
"title": "Shader",
|
|
1467
2820
|
"hashes": {
|
|
1468
|
-
"
|
|
2821
|
+
"shader": {
|
|
1469
2822
|
"count": 1,
|
|
1470
|
-
"title": "
|
|
2823
|
+
"title": "",
|
|
1471
2824
|
"type": "paragraph"
|
|
1472
2825
|
}
|
|
1473
2826
|
}
|
|
@@ -1475,14 +2828,14 @@
|
|
|
1475
2828
|
}
|
|
1476
2829
|
},
|
|
1477
2830
|
{
|
|
1478
|
-
"search": "
|
|
2831
|
+
"search": "CDN (after the core): concorde-shader.bundle.js — see CDN addons.\n",
|
|
1479
2832
|
"files": {
|
|
1480
|
-
"core/components/functional/
|
|
1481
|
-
"title": "
|
|
2833
|
+
"core/components/functional/shader/shader.md": {
|
|
2834
|
+
"title": "Shader",
|
|
1482
2835
|
"hashes": {
|
|
1483
|
-
"
|
|
2836
|
+
"shader": {
|
|
1484
2837
|
"count": 1,
|
|
1485
|
-
"title": "
|
|
2838
|
+
"title": "",
|
|
1486
2839
|
"type": "paragraph"
|
|
1487
2840
|
}
|
|
1488
2841
|
}
|
|
@@ -1490,14 +2843,14 @@
|
|
|
1490
2843
|
}
|
|
1491
2844
|
},
|
|
1492
2845
|
{
|
|
1493
|
-
"search": "
|
|
2846
|
+
"search": "Uniforms supportés : iResolution, iTime, iTimeDelta, iFrame, iFrameRate, iMouse, iDate, iChannel0–3, iChannelResolution, iChannelTime, iSampleRate, uParam0–3.\n",
|
|
1494
2847
|
"files": {
|
|
1495
|
-
"core/components/functional/
|
|
1496
|
-
"title": "
|
|
2848
|
+
"core/components/functional/shader/shader.md": {
|
|
2849
|
+
"title": "Shader",
|
|
1497
2850
|
"hashes": {
|
|
1498
|
-
"
|
|
2851
|
+
"shader": {
|
|
1499
2852
|
"count": 1,
|
|
1500
|
-
"title": "
|
|
2853
|
+
"title": "",
|
|
1501
2854
|
"type": "paragraph"
|
|
1502
2855
|
}
|
|
1503
2856
|
}
|
|
@@ -1505,14 +2858,14 @@
|
|
|
1505
2858
|
}
|
|
1506
2859
|
},
|
|
1507
2860
|
{
|
|
1508
|
-
"search": "
|
|
2861
|
+
"search": "Textures channel0–3 : images, vidéos (.webm / .mp4 / …), ou éléments page via #id (<img>, <video>, <canvas>, sonic-3d / sonic-webgpu / sonic-shader).\n",
|
|
1509
2862
|
"files": {
|
|
1510
|
-
"core/components/functional/
|
|
1511
|
-
"title": "
|
|
2863
|
+
"core/components/functional/shader/shader.md": {
|
|
2864
|
+
"title": "Shader",
|
|
1512
2865
|
"hashes": {
|
|
1513
|
-
"
|
|
2866
|
+
"shader": {
|
|
1514
2867
|
"count": 1,
|
|
1515
|
-
"title": "
|
|
2868
|
+
"title": "",
|
|
1516
2869
|
"type": "paragraph"
|
|
1517
2870
|
}
|
|
1518
2871
|
}
|
|
@@ -1520,14 +2873,14 @@
|
|
|
1520
2873
|
}
|
|
1521
2874
|
},
|
|
1522
2875
|
{
|
|
1523
|
-
"search": "
|
|
2876
|
+
"search": "Buffer A simule une height-map d’ondes (ripple) ; Image réfracte la photo via le gradient — sans teinte. Glisser la souris pour faire des vagues.\n",
|
|
1524
2877
|
"files": {
|
|
1525
|
-
"core/components/functional/
|
|
1526
|
-
"title": "
|
|
2878
|
+
"core/components/functional/shader/shader.md": {
|
|
2879
|
+
"title": "Shader",
|
|
1527
2880
|
"hashes": {
|
|
1528
|
-
"
|
|
2881
|
+
"multipass-sur-une-photo": {
|
|
1529
2882
|
"count": 1,
|
|
1530
|
-
"title": "
|
|
2883
|
+
"title": "Multipass sur une photo",
|
|
1531
2884
|
"type": "paragraph"
|
|
1532
2885
|
}
|
|
1533
2886
|
}
|
|
@@ -1535,14 +2888,14 @@
|
|
|
1535
2888
|
}
|
|
1536
2889
|
},
|
|
1537
2890
|
{
|
|
1538
|
-
"search": "
|
|
2891
|
+
"search": "Photo + depth parallax (HF): Visual stack.\n",
|
|
1539
2892
|
"files": {
|
|
1540
|
-
"core/components/functional/
|
|
1541
|
-
"title": "
|
|
2893
|
+
"core/components/functional/shader/shader.md": {
|
|
2894
|
+
"title": "Shader",
|
|
1542
2895
|
"hashes": {
|
|
1543
|
-
"
|
|
2896
|
+
"multipass-sur-une-photo": {
|
|
1544
2897
|
"count": 1,
|
|
1545
|
-
"title": "
|
|
2898
|
+
"title": "Multipass sur une photo",
|
|
1546
2899
|
"type": "paragraph"
|
|
1547
2900
|
}
|
|
1548
2901
|
}
|
|
@@ -1550,14 +2903,14 @@
|
|
|
1550
2903
|
}
|
|
1551
2904
|
},
|
|
1552
2905
|
{
|
|
1553
|
-
"search": "
|
|
2906
|
+
"search": "Live 3D → shader (no JPEG): Visual stack.\n",
|
|
1554
2907
|
"files": {
|
|
1555
|
-
"core/components/functional/
|
|
1556
|
-
"title": "
|
|
2908
|
+
"core/components/functional/shader/shader.md": {
|
|
2909
|
+
"title": "Shader",
|
|
1557
2910
|
"hashes": {
|
|
1558
|
-
"
|
|
2911
|
+
"multipass-sur-une-photo": {
|
|
1559
2912
|
"count": 1,
|
|
1560
|
-
"title": "
|
|
2913
|
+
"title": "Multipass sur une photo",
|
|
1561
2914
|
"type": "paragraph"
|
|
1562
2915
|
}
|
|
1563
2916
|
}
|
|
@@ -1565,14 +2918,14 @@
|
|
|
1565
2918
|
}
|
|
1566
2919
|
},
|
|
1567
2920
|
{
|
|
1568
|
-
"search": "
|
|
2921
|
+
"search": "Règle : brancher des passes dans un sonic-shader (buffers A–D → Image), pas deux composants via dataProvider — sauf pont live #élément (copie canvas chaque frame).\n",
|
|
1569
2922
|
"files": {
|
|
1570
|
-
"core/components/functional/
|
|
1571
|
-
"title": "
|
|
2923
|
+
"core/components/functional/shader/shader.md": {
|
|
2924
|
+
"title": "Shader",
|
|
1572
2925
|
"hashes": {
|
|
1573
|
-
"
|
|
2926
|
+
"chaînage-deffets-officiel": {
|
|
1574
2927
|
"count": 1,
|
|
1575
|
-
"title": "
|
|
2928
|
+
"title": "Chaînage d’effets (officiel)",
|
|
1576
2929
|
"type": "paragraph"
|
|
1577
2930
|
}
|
|
1578
2931
|
}
|
|
@@ -1580,14 +2933,14 @@
|
|
|
1580
2933
|
}
|
|
1581
2934
|
},
|
|
1582
2935
|
{
|
|
1583
|
-
"search": "
|
|
2936
|
+
"search": "Les passes intermédiaires sont déjà offscreen (FBO). Pas besoin d’un second sonic-shader invisible pour du multipass interne.\n",
|
|
1584
2937
|
"files": {
|
|
1585
|
-
"core/components/functional/
|
|
1586
|
-
"title": "
|
|
2938
|
+
"core/components/functional/shader/shader.md": {
|
|
2939
|
+
"title": "Shader",
|
|
1587
2940
|
"hashes": {
|
|
1588
|
-
"
|
|
2941
|
+
"chaînage-deffets-officiel": {
|
|
1589
2942
|
"count": 1,
|
|
1590
|
-
"title": "
|
|
2943
|
+
"title": "Chaînage d’effets (officiel)",
|
|
1591
2944
|
"type": "paragraph"
|
|
1592
2945
|
}
|
|
1593
2946
|
}
|
|
@@ -1595,14 +2948,14 @@
|
|
|
1595
2948
|
}
|
|
1596
2949
|
},
|
|
1597
2950
|
{
|
|
1598
|
-
"search": "
|
|
2951
|
+
"search": "Deux instances séparées ne partagent pas leurs textures WebGL (contextes distincts). Le pont live #id copie le canvas source ; frame-out JPEG reste pour export / freeze.\nDémo pédagogique : Buffer A = Sobel → Image = overlay + param0.\n",
|
|
1599
2952
|
"files": {
|
|
1600
|
-
"core/components/functional/
|
|
1601
|
-
"title": "
|
|
2953
|
+
"core/components/functional/shader/shader.md": {
|
|
2954
|
+
"title": "Shader",
|
|
1602
2955
|
"hashes": {
|
|
1603
|
-
"
|
|
2956
|
+
"chaînage-deffets-officiel": {
|
|
1604
2957
|
"count": 1,
|
|
1605
|
-
"title": "
|
|
2958
|
+
"title": "Chaînage d’effets (officiel)",
|
|
1606
2959
|
"type": "paragraph"
|
|
1607
2960
|
}
|
|
1608
2961
|
}
|
|
@@ -1610,14 +2963,14 @@
|
|
|
1610
2963
|
}
|
|
1611
2964
|
},
|
|
1612
2965
|
{
|
|
1613
|
-
"search": "
|
|
2966
|
+
"search": "Exemple de câblage :\n",
|
|
1614
2967
|
"files": {
|
|
1615
|
-
"core/components/functional/
|
|
1616
|
-
"title": "
|
|
2968
|
+
"core/components/functional/shader/shader.md": {
|
|
2969
|
+
"title": "Shader",
|
|
1617
2970
|
"hashes": {
|
|
1618
|
-
"
|
|
2971
|
+
"chaînage-deffets-officiel": {
|
|
1619
2972
|
"count": 1,
|
|
1620
|
-
"title": "
|
|
2973
|
+
"title": "Chaînage d’effets (officiel)",
|
|
1621
2974
|
"type": "paragraph"
|
|
1622
2975
|
}
|
|
1623
2976
|
}
|
|
@@ -1625,14 +2978,14 @@
|
|
|
1625
2978
|
}
|
|
1626
2979
|
},
|
|
1627
2980
|
{
|
|
1628
|
-
"search": "
|
|
2981
|
+
"search": "Au survol, le composant anime un uParamN de 0 → 1 (et l’inverse au leave), avec easing hover-speed. Le shader lit ce param pour mixer l’effet on/off (zoom, aberration, ripple…). play-on-hover n’anime que pendant le hover / la transition.\n",
|
|
1629
2982
|
"files": {
|
|
1630
|
-
"core/components/functional/
|
|
1631
|
-
"title": "
|
|
2983
|
+
"core/components/functional/shader/shader.md": {
|
|
2984
|
+
"title": "Shader",
|
|
1632
2985
|
"hashes": {
|
|
1633
|
-
"
|
|
2986
|
+
"rollover--roll-out-hover-param": {
|
|
1634
2987
|
"count": 1,
|
|
1635
|
-
"title": "
|
|
2988
|
+
"title": "Rollover / roll-out (`hover-param`)",
|
|
1636
2989
|
"type": "paragraph"
|
|
1637
2990
|
}
|
|
1638
2991
|
}
|
|
@@ -1640,14 +2993,14 @@
|
|
|
1640
2993
|
}
|
|
1641
2994
|
},
|
|
1642
2995
|
{
|
|
1643
|
-
"search": "
|
|
2996
|
+
"search": "Type : ShaderHoverParam = 0 | 1 | 2 | 3 | "param0"…"param3" | "".\n",
|
|
1644
2997
|
"files": {
|
|
1645
|
-
"core/components/functional/
|
|
1646
|
-
"title": "
|
|
2998
|
+
"core/components/functional/shader/shader.md": {
|
|
2999
|
+
"title": "Shader",
|
|
1647
3000
|
"hashes": {
|
|
1648
|
-
"
|
|
3001
|
+
"rollover--roll-out-hover-param": {
|
|
1649
3002
|
"count": 1,
|
|
1650
|
-
"title": "
|
|
3003
|
+
"title": "Rollover / roll-out (`hover-param`)",
|
|
1651
3004
|
"type": "paragraph"
|
|
1652
3005
|
}
|
|
1653
3006
|
}
|
|
@@ -1655,14 +3008,14 @@
|
|
|
1655
3008
|
}
|
|
1656
3009
|
},
|
|
1657
3010
|
{
|
|
1658
|
-
"search": "
|
|
3011
|
+
"search": "dataProvider est bidirectionnel : param0… en entrée ; en sortie mouseX / mouseY / hovering / frame (+ param0… si out-data-provider est séparé, ou le slot hover-param seul si le DP est partagé avec le formulaire). Avec sample, lit la couleur sous le curseur → sampleR/G/B/A + sampleLuma (SonicShaderOutput). Event out (payload complet, y compris les params). Optionnel : out-data-provider pour séparer l’écriture.\n",
|
|
1659
3012
|
"files": {
|
|
1660
|
-
"core/components/functional/
|
|
1661
|
-
"title": "
|
|
3013
|
+
"core/components/functional/shader/shader.md": {
|
|
3014
|
+
"title": "Shader",
|
|
1662
3015
|
"hashes": {
|
|
1663
|
-
"
|
|
3016
|
+
"sortie--sampling-sample--dataprovider": {
|
|
1664
3017
|
"count": 1,
|
|
1665
|
-
"title": "
|
|
3018
|
+
"title": "Sortie / sampling (`sample` + dataProvider)",
|
|
1666
3019
|
"type": "paragraph"
|
|
1667
3020
|
}
|
|
1668
3021
|
}
|
|
@@ -1670,14 +3023,14 @@
|
|
|
1670
3023
|
}
|
|
1671
3024
|
},
|
|
1672
3025
|
{
|
|
1673
|
-
"search": "
|
|
3026
|
+
"search": "Publication paresseuse : rien n’est écrit (ni readPixels) tant qu’aucun champ méta/sample n’a de lecteur DP (@handle(frame) / @subscribe / sonic-value…) et qu’aucun listener out n’est branché. Un sonic-input name="param0" ne compte pas comme consommateur out (évite le write-back qui remettait les champs à 0). Dès qu’un vrai consommateur apparaît, les maj partent au rythme de out-interval. Avec sample, le readPixels suit le même gate.\n",
|
|
1674
3027
|
"files": {
|
|
1675
|
-
"core/components/functional/
|
|
1676
|
-
"title": "
|
|
3028
|
+
"core/components/functional/shader/shader.md": {
|
|
3029
|
+
"title": "Shader",
|
|
1677
3030
|
"hashes": {
|
|
1678
|
-
"
|
|
3031
|
+
"sortie--sampling-sample--dataprovider": {
|
|
1679
3032
|
"count": 1,
|
|
1680
|
-
"title": "
|
|
3033
|
+
"title": "Sortie / sampling (`sample` + dataProvider)",
|
|
1681
3034
|
"type": "paragraph"
|
|
1682
3035
|
}
|
|
1683
3036
|
}
|
|
@@ -1685,14 +3038,14 @@
|
|
|
1685
3038
|
}
|
|
1686
3039
|
},
|
|
1687
3040
|
{
|
|
1688
|
-
"search": "
|
|
3041
|
+
"search": "Pattern typique — écoute frame + lecture massive :\n",
|
|
1689
3042
|
"files": {
|
|
1690
|
-
"core/components/functional/
|
|
1691
|
-
"title": "
|
|
3043
|
+
"core/components/functional/shader/shader.md": {
|
|
3044
|
+
"title": "Shader",
|
|
1692
3045
|
"hashes": {
|
|
1693
|
-
"
|
|
3046
|
+
"sortie--sampling-sample--dataprovider": {
|
|
1694
3047
|
"count": 1,
|
|
1695
|
-
"title": "
|
|
3048
|
+
"title": "Sortie / sampling (`sample` + dataProvider)",
|
|
1696
3049
|
"type": "paragraph"
|
|
1697
3050
|
}
|
|
1698
3051
|
}
|
|
@@ -1700,14 +3053,14 @@
|
|
|
1700
3053
|
}
|
|
1701
3054
|
},
|
|
1702
3055
|
{
|
|
1703
|
-
"search": "
|
|
3056
|
+
"search": "A GPU pass writes a score mask (R channel) into a buffer; extract scans it, crops patches around peaks, and publishes scalars + blobUrl for downstream use.\n",
|
|
1704
3057
|
"files": {
|
|
1705
|
-
"core/components/functional/
|
|
1706
|
-
"title": "
|
|
3058
|
+
"core/components/functional/shader/shader.md": {
|
|
3059
|
+
"title": "Shader",
|
|
1707
3060
|
"hashes": {
|
|
1708
|
-
"
|
|
3061
|
+
"extraction-patches--singularities-extract": {
|
|
1709
3062
|
"count": 1,
|
|
1710
|
-
"title": "
|
|
3063
|
+
"title": "Extraction patches / singularities (`extract`)",
|
|
1711
3064
|
"type": "paragraph"
|
|
1712
3065
|
}
|
|
1713
3066
|
}
|
|
@@ -1715,14 +3068,14 @@
|
|
|
1715
3068
|
}
|
|
1716
3069
|
},
|
|
1717
3070
|
{
|
|
1718
|
-
"search": "
|
|
3071
|
+
"search": "detect scores: mask R channel (prefer a soft map, not hard-clipped), then renormalized to the best peak in the batch (1 = strongest). findPeaks sorts and keeps the top ones (NMS ≈ min(patch/3, 16) px).\n",
|
|
1719
3072
|
"files": {
|
|
1720
|
-
"core/components/functional/
|
|
1721
|
-
"title": "
|
|
3073
|
+
"core/components/functional/shader/shader.md": {
|
|
3074
|
+
"title": "Shader",
|
|
1722
3075
|
"hashes": {
|
|
1723
|
-
"
|
|
3076
|
+
"extraction-patches--singularities-extract": {
|
|
1724
3077
|
"count": 1,
|
|
1725
|
-
"title": "
|
|
3078
|
+
"title": "Extraction patches / singularities (`extract`)",
|
|
1726
3079
|
"type": "paragraph"
|
|
1727
3080
|
}
|
|
1728
3081
|
}
|
|
@@ -1730,14 +3083,14 @@
|
|
|
1730
3083
|
}
|
|
1731
3084
|
},
|
|
1732
3085
|
{
|
|
1733
|
-
"search": "
|
|
3086
|
+
"search": "Lazy: no readPixels without a DP reader / extract event listener.\n",
|
|
1734
3087
|
"files": {
|
|
1735
|
-
"core/components/functional/
|
|
1736
|
-
"title": "
|
|
3088
|
+
"core/components/functional/shader/shader.md": {
|
|
3089
|
+
"title": "Shader",
|
|
1737
3090
|
"hashes": {
|
|
1738
|
-
"
|
|
3091
|
+
"extraction-patches--singularities-extract": {
|
|
1739
3092
|
"count": 1,
|
|
1740
|
-
"title": "
|
|
3093
|
+
"title": "Extraction patches / singularities (`extract`)",
|
|
1741
3094
|
"type": "paragraph"
|
|
1742
3095
|
}
|
|
1743
3096
|
}
|
|
@@ -1745,14 +3098,14 @@
|
|
|
1745
3098
|
}
|
|
1746
3099
|
},
|
|
1747
3100
|
{
|
|
1748
|
-
"search": "
|
|
3101
|
+
"search": "Live Harris → patches → WebGPU: Visual stack.\n",
|
|
1749
3102
|
"files": {
|
|
1750
|
-
"core/components/functional/
|
|
1751
|
-
"title": "
|
|
3103
|
+
"core/components/functional/shader/shader.md": {
|
|
3104
|
+
"title": "Shader",
|
|
1752
3105
|
"hashes": {
|
|
1753
|
-
"
|
|
3106
|
+
"extraction-patches--singularities-extract": {
|
|
1754
3107
|
"count": 1,
|
|
1755
|
-
"title": "
|
|
3108
|
+
"title": "Extraction patches / singularities (`extract`)",
|
|
1756
3109
|
"type": "paragraph"
|
|
1757
3110
|
}
|
|
1758
3111
|
}
|
|
@@ -1760,14 +3113,14 @@
|
|
|
1760
3113
|
}
|
|
1761
3114
|
},
|
|
1762
3115
|
{
|
|
1763
|
-
"search": "
|
|
3116
|
+
"search": "Par défaut, les buffers A–D sont en RGBA8 (unsigned). Un tenseur Harris naïf (Ix*Ix, Iy*Iy, Ix*Iy) perd le signe de IxIy et sature les carrés → bords au lieu de coins.\n",
|
|
1764
3117
|
"files": {
|
|
1765
|
-
"core/components/functional/
|
|
1766
|
-
"title": "
|
|
3118
|
+
"core/components/functional/shader/shader.md": {
|
|
3119
|
+
"title": "Shader",
|
|
1767
3120
|
"hashes": {
|
|
1768
|
-
"
|
|
3121
|
+
"précision-des-buffers-buffer-format": {
|
|
1769
3122
|
"count": 1,
|
|
1770
|
-
"title": "
|
|
3123
|
+
"title": "Précision des buffers (`buffer-format`)",
|
|
1771
3124
|
"type": "paragraph"
|
|
1772
3125
|
}
|
|
1773
3126
|
}
|
|
@@ -1775,14 +3128,14 @@
|
|
|
1775
3128
|
}
|
|
1776
3129
|
},
|
|
1777
3130
|
{
|
|
1778
|
-
"search": "
|
|
3131
|
+
"search": "Repli auto en rgba8 si EXT_color_buffer_float est absent (console.warn une fois). L’attribut reflété active-buffer-format indique le format réellement utilisé. La passe Image reste le canvas RGBA8.\n",
|
|
1779
3132
|
"files": {
|
|
1780
|
-
"core/components/functional/
|
|
1781
|
-
"title": "
|
|
3133
|
+
"core/components/functional/shader/shader.md": {
|
|
3134
|
+
"title": "Shader",
|
|
1782
3135
|
"hashes": {
|
|
1783
|
-
"
|
|
3136
|
+
"précision-des-buffers-buffer-format": {
|
|
1784
3137
|
"count": 1,
|
|
1785
|
-
"title": "
|
|
3138
|
+
"title": "Précision des buffers (`buffer-format`)",
|
|
1786
3139
|
"type": "paragraph"
|
|
1787
3140
|
}
|
|
1788
3141
|
}
|
|
@@ -1790,14 +3143,14 @@
|
|
|
1790
3143
|
}
|
|
1791
3144
|
},
|
|
1792
3145
|
{
|
|
1793
|
-
"search": "
|
|
3146
|
+
"search": "Un shader qui garde un état via self (feedback frame précédente) n’est plus réinitialisé quand il sort de l’écran : avec release-offscreen="auto" (défaut), seuls le RAF et les vidéos sont mis en pause ; les FBO restent. Forcer release-offscreen (attribut booléen / true) restaure l’ancien comportement (libération hors viewport même avec self).\n",
|
|
1794
3147
|
"files": {
|
|
1795
|
-
"core/components/functional/
|
|
1796
|
-
"title": "
|
|
3148
|
+
"core/components/functional/shader/shader.md": {
|
|
3149
|
+
"title": "Shader",
|
|
1797
3150
|
"hashes": {
|
|
1798
|
-
"
|
|
3151
|
+
"état-et-visibilité": {
|
|
1799
3152
|
"count": 1,
|
|
1800
|
-
"title": "
|
|
3153
|
+
"title": "État et visibilité",
|
|
1801
3154
|
"type": "paragraph"
|
|
1802
3155
|
}
|
|
1803
3156
|
}
|
|
@@ -1805,14 +3158,14 @@
|
|
|
1805
3158
|
}
|
|
1806
3159
|
},
|
|
1807
3160
|
{
|
|
1808
|
-
"search": "
|
|
3161
|
+
"search": "Changer channel0…3 / *-ch* re-lie les textures sans recompiler ni vider les buffers.\n",
|
|
1809
3162
|
"files": {
|
|
1810
|
-
"core/components/functional/
|
|
1811
|
-
"title": "
|
|
3163
|
+
"core/components/functional/shader/shader.md": {
|
|
3164
|
+
"title": "Shader",
|
|
1812
3165
|
"hashes": {
|
|
1813
|
-
"
|
|
3166
|
+
"état-et-visibilité": {
|
|
1814
3167
|
"count": 1,
|
|
1815
|
-
"title": "
|
|
3168
|
+
"title": "État et visibilité",
|
|
1816
3169
|
"type": "paragraph"
|
|
1817
3170
|
}
|
|
1818
3171
|
}
|
|
@@ -1820,14 +3173,14 @@
|
|
|
1820
3173
|
}
|
|
1821
3174
|
},
|
|
1822
3175
|
{
|
|
1823
|
-
"search": "
|
|
3176
|
+
"search": "Assigne le GLSL via .image (et .bufferA, …) depuis JS / Lit.\n",
|
|
1824
3177
|
"files": {
|
|
1825
|
-
"core/components/functional/
|
|
1826
|
-
"title": "
|
|
3178
|
+
"core/components/functional/shader/shader.md": {
|
|
3179
|
+
"title": "Shader",
|
|
1827
3180
|
"hashes": {
|
|
1828
|
-
"
|
|
3181
|
+
"markup": {
|
|
1829
3182
|
"count": 1,
|
|
1830
|
-
"title": "
|
|
3183
|
+
"title": "Markup",
|
|
1831
3184
|
"type": "paragraph"
|
|
1832
3185
|
}
|
|
1833
3186
|
}
|
|
@@ -1835,14 +3188,14 @@
|
|
|
1835
3188
|
}
|
|
1836
3189
|
},
|
|
1837
3190
|
{
|
|
1838
|
-
"search": "
|
|
3191
|
+
"search": "error — compile / link / WebGL (detail.message, detail.pass, detail.infoLog).\n",
|
|
1839
3192
|
"files": {
|
|
1840
|
-
"core/components/functional/
|
|
1841
|
-
"title": "
|
|
3193
|
+
"core/components/functional/shader/shader.md": {
|
|
3194
|
+
"title": "Shader",
|
|
1842
3195
|
"hashes": {
|
|
1843
|
-
"
|
|
3196
|
+
"events": {
|
|
1844
3197
|
"count": 1,
|
|
1845
|
-
"title": "
|
|
3198
|
+
"title": "Events",
|
|
1846
3199
|
"type": "paragraph"
|
|
1847
3200
|
}
|
|
1848
3201
|
}
|
|
@@ -1850,14 +3203,14 @@
|
|
|
1850
3203
|
}
|
|
1851
3204
|
},
|
|
1852
3205
|
{
|
|
1853
|
-
"search": "
|
|
3206
|
+
"search": "out — snapshot SonicShaderOutput (throttlé par out-interval, seulement s’il y a un listener) : souris, params, samples.\n",
|
|
1854
3207
|
"files": {
|
|
1855
|
-
"core/components/functional/
|
|
1856
|
-
"title": "
|
|
3208
|
+
"core/components/functional/shader/shader.md": {
|
|
3209
|
+
"title": "Shader",
|
|
1857
3210
|
"hashes": {
|
|
1858
|
-
"
|
|
3211
|
+
"events": {
|
|
1859
3212
|
"count": 1,
|
|
1860
|
-
"title": "
|
|
3213
|
+
"title": "Events",
|
|
1861
3214
|
"type": "paragraph"
|
|
1862
3215
|
}
|
|
1863
3216
|
}
|
|
@@ -1865,14 +3218,14 @@
|
|
|
1865
3218
|
}
|
|
1866
3219
|
},
|
|
1867
3220
|
{
|
|
1868
|
-
"search": "
|
|
3221
|
+
"search": "extract — snapshot ShaderExtractOutput (throttlé, paresseux) : patches manuels + détectés.\n",
|
|
1869
3222
|
"files": {
|
|
1870
|
-
"core/components/functional/
|
|
1871
|
-
"title": "
|
|
3223
|
+
"core/components/functional/shader/shader.md": {
|
|
3224
|
+
"title": "Shader",
|
|
1872
3225
|
"hashes": {
|
|
1873
|
-
"
|
|
3226
|
+
"events": {
|
|
1874
3227
|
"count": 1,
|
|
1875
|
-
"title": "
|
|
3228
|
+
"title": "Events",
|
|
1876
3229
|
"type": "paragraph"
|
|
1877
3230
|
}
|
|
1878
3231
|
}
|
|
@@ -2302,7 +3655,142 @@
|
|
|
2302
3655
|
},
|
|
2303
3656
|
"args": {
|
|
2304
3657
|
"count": 1,
|
|
2305
|
-
"title": "Args",
|
|
3658
|
+
"title": "Args",
|
|
3659
|
+
"type": "paragraph"
|
|
3660
|
+
}
|
|
3661
|
+
}
|
|
3662
|
+
}
|
|
3663
|
+
}
|
|
3664
|
+
},
|
|
3665
|
+
{
|
|
3666
|
+
"search": "Permet de mapper un nom de propriété de donnée source vers une propriété du subscriber à la volée\n",
|
|
3667
|
+
"files": {
|
|
3668
|
+
"core/components/functional/subscriber/subscriber.md": {
|
|
3669
|
+
"title": "Subscriber",
|
|
3670
|
+
"hashes": {
|
|
3671
|
+
"propertymap": {
|
|
3672
|
+
"count": 1,
|
|
3673
|
+
"title": "PropertyMap",
|
|
3674
|
+
"type": "paragraph"
|
|
3675
|
+
}
|
|
3676
|
+
}
|
|
3677
|
+
}
|
|
3678
|
+
}
|
|
3679
|
+
},
|
|
3680
|
+
{
|
|
3681
|
+
"search": "On peut utiliser cette fonction pour lier un publisher spécifique au composant si besoin.\n",
|
|
3682
|
+
"files": {
|
|
3683
|
+
"core/components/functional/subscriber/subscriber.md": {
|
|
3684
|
+
"title": "Subscriber",
|
|
3685
|
+
"hashes": {
|
|
3686
|
+
"bindpublisher": {
|
|
3687
|
+
"count": 1,
|
|
3688
|
+
"title": "BindPublisher",
|
|
3689
|
+
"type": "paragraph"
|
|
3690
|
+
}
|
|
3691
|
+
}
|
|
3692
|
+
}
|
|
3693
|
+
}
|
|
3694
|
+
},
|
|
3695
|
+
{
|
|
3696
|
+
"search": "Par défaut on crée un shadow dom mais on peut demander à ne pas en avoir via cette propriété et un attribut associé.Cela se fait à l'initialisation uniquement et n'est pas modifiable lors de la vie du composant.\n",
|
|
3697
|
+
"files": {
|
|
3698
|
+
"core/components/functional/subscriber/subscriber.md": {
|
|
3699
|
+
"title": "Subscriber",
|
|
3700
|
+
"hashes": {
|
|
3701
|
+
"noshadowdom": {
|
|
3702
|
+
"count": 1,
|
|
3703
|
+
"title": "NoShadowDom",
|
|
3704
|
+
"type": "paragraph"
|
|
3705
|
+
}
|
|
3706
|
+
}
|
|
3707
|
+
}
|
|
3708
|
+
}
|
|
3709
|
+
},
|
|
3710
|
+
{
|
|
3711
|
+
"search": "styles ??title ??_props ??onAssign ??defferedDebug ??\n",
|
|
3712
|
+
"files": {
|
|
3713
|
+
"core/components/functional/subscriber/subscriber.md": {
|
|
3714
|
+
"title": "Subscriber",
|
|
3715
|
+
"hashes": {
|
|
3716
|
+
"other-attributes-gathered-from-subscriberstoriests": {
|
|
3717
|
+
"count": 1,
|
|
3718
|
+
"title": "Other attributes gathered from subscriber.stories.ts",
|
|
3719
|
+
"type": "paragraph"
|
|
3720
|
+
}
|
|
3721
|
+
}
|
|
3722
|
+
}
|
|
3723
|
+
}
|
|
3724
|
+
},
|
|
3725
|
+
{
|
|
3726
|
+
"search": "Value",
|
|
3727
|
+
"files": {
|
|
3728
|
+
"core/components/functional/value/value.md": {
|
|
3729
|
+
"title": "Value",
|
|
3730
|
+
"hashes": {
|
|
3731
|
+
"value": {
|
|
3732
|
+
"count": 1,
|
|
3733
|
+
"title": "",
|
|
3734
|
+
"type": "page"
|
|
3735
|
+
}
|
|
3736
|
+
}
|
|
3737
|
+
}
|
|
3738
|
+
}
|
|
3739
|
+
},
|
|
3740
|
+
{
|
|
3741
|
+
"search": "Simply shows a value from a data provider.\nYou can target sub data value using dot syntax.\nThe value reacts to changes.\n",
|
|
3742
|
+
"files": {
|
|
3743
|
+
"core/components/functional/value/value.md": {
|
|
3744
|
+
"title": "Value",
|
|
3745
|
+
"hashes": {
|
|
3746
|
+
"value": {
|
|
3747
|
+
"count": 1,
|
|
3748
|
+
"title": "",
|
|
3749
|
+
"type": "paragraph"
|
|
3750
|
+
}
|
|
3751
|
+
}
|
|
3752
|
+
}
|
|
3753
|
+
}
|
|
3754
|
+
},
|
|
3755
|
+
{
|
|
3756
|
+
"search": "WebGPU",
|
|
3757
|
+
"files": {
|
|
3758
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3759
|
+
"title": "WebGPU",
|
|
3760
|
+
"hashes": {
|
|
3761
|
+
"webgpu": {
|
|
3762
|
+
"count": 1,
|
|
3763
|
+
"title": "",
|
|
3764
|
+
"type": "page"
|
|
3765
|
+
}
|
|
3766
|
+
}
|
|
3767
|
+
}
|
|
3768
|
+
}
|
|
3769
|
+
},
|
|
3770
|
+
{
|
|
3771
|
+
"search": "sonic-webgpu — GPU compute / effects (companion to sonic-shader, not a clone).\n",
|
|
3772
|
+
"files": {
|
|
3773
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3774
|
+
"title": "WebGPU",
|
|
3775
|
+
"hashes": {
|
|
3776
|
+
"webgpu": {
|
|
3777
|
+
"count": 1,
|
|
3778
|
+
"title": "",
|
|
3779
|
+
"type": "paragraph"
|
|
3780
|
+
}
|
|
3781
|
+
}
|
|
3782
|
+
}
|
|
3783
|
+
}
|
|
3784
|
+
},
|
|
3785
|
+
{
|
|
3786
|
+
"search": "Opt-in import:\n",
|
|
3787
|
+
"files": {
|
|
3788
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3789
|
+
"title": "WebGPU",
|
|
3790
|
+
"hashes": {
|
|
3791
|
+
"webgpu": {
|
|
3792
|
+
"count": 1,
|
|
3793
|
+
"title": "",
|
|
2306
3794
|
"type": "paragraph"
|
|
2307
3795
|
}
|
|
2308
3796
|
}
|
|
@@ -2310,14 +3798,14 @@
|
|
|
2310
3798
|
}
|
|
2311
3799
|
},
|
|
2312
3800
|
{
|
|
2313
|
-
"search": "
|
|
3801
|
+
"search": "Harris → patches → WebGPU mosaic: Visual stack.\n",
|
|
2314
3802
|
"files": {
|
|
2315
|
-
"core/components/functional/
|
|
2316
|
-
"title": "
|
|
3803
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3804
|
+
"title": "WebGPU",
|
|
2317
3805
|
"hashes": {
|
|
2318
|
-
"
|
|
3806
|
+
"webgpu": {
|
|
2319
3807
|
"count": 1,
|
|
2320
|
-
"title": "
|
|
3808
|
+
"title": "",
|
|
2321
3809
|
"type": "paragraph"
|
|
2322
3810
|
}
|
|
2323
3811
|
}
|
|
@@ -2325,14 +3813,14 @@
|
|
|
2325
3813
|
}
|
|
2326
3814
|
},
|
|
2327
3815
|
{
|
|
2328
|
-
"search": "
|
|
3816
|
+
"search": "Simulation: param0 = speed, param1 = mouse attraction. WebGPU compute when available, otherwise CPU.\n",
|
|
2329
3817
|
"files": {
|
|
2330
|
-
"core/components/functional/
|
|
2331
|
-
"title": "
|
|
3818
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3819
|
+
"title": "WebGPU",
|
|
2332
3820
|
"hashes": {
|
|
2333
|
-
"
|
|
3821
|
+
"demo--particles-compute": {
|
|
2334
3822
|
"count": 1,
|
|
2335
|
-
"title": "
|
|
3823
|
+
"title": "Demo — particles (compute)",
|
|
2336
3824
|
"type": "paragraph"
|
|
2337
3825
|
}
|
|
2338
3826
|
}
|
|
@@ -2340,14 +3828,14 @@
|
|
|
2340
3828
|
}
|
|
2341
3829
|
},
|
|
2342
3830
|
{
|
|
2343
|
-
"search": "
|
|
3831
|
+
"search": "Comme sonic-shader : channel0="#plateau" copie le canvas source chaque frameSeq (copyExternalImageToTexture). La texture GPU est réutilisée tant que la taille ne change pas (pas de createTexture / rebuild bind group chaque frame).\n",
|
|
2344
3832
|
"files": {
|
|
2345
|
-
"core/components/functional/
|
|
2346
|
-
"title": "
|
|
3833
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3834
|
+
"title": "WebGPU",
|
|
2347
3835
|
"hashes": {
|
|
2348
|
-
"
|
|
3836
|
+
"live-bridge-id": {
|
|
2349
3837
|
"count": 1,
|
|
2350
|
-
"title": "
|
|
3838
|
+
"title": "Live bridge (`#id`)",
|
|
2351
3839
|
"type": "paragraph"
|
|
2352
3840
|
}
|
|
2353
3841
|
}
|
|
@@ -2355,14 +3843,14 @@
|
|
|
2355
3843
|
}
|
|
2356
3844
|
},
|
|
2357
3845
|
{
|
|
2358
|
-
"search": "
|
|
3846
|
+
"search": "Demo: Visual stack — 3D → WebGPU live.\n",
|
|
2359
3847
|
"files": {
|
|
2360
|
-
"core/components/functional/
|
|
2361
|
-
"title": "
|
|
3848
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3849
|
+
"title": "WebGPU",
|
|
2362
3850
|
"hashes": {
|
|
2363
|
-
"
|
|
3851
|
+
"live-bridge-id": {
|
|
2364
3852
|
"count": 1,
|
|
2365
|
-
"title": "
|
|
3853
|
+
"title": "Live bridge (`#id`)",
|
|
2366
3854
|
"type": "paragraph"
|
|
2367
3855
|
}
|
|
2368
3856
|
}
|
|
@@ -2370,29 +3858,29 @@
|
|
|
2370
3858
|
}
|
|
2371
3859
|
},
|
|
2372
3860
|
{
|
|
2373
|
-
"search": "
|
|
3861
|
+
"search": "Same MediaRef / DP bridge as the rest of the stack. Live textures entre composants : pont #id / { element } (copie canvas), pas de contexte WebGPU partagé avec sonic-shader.\n",
|
|
2374
3862
|
"files": {
|
|
2375
|
-
"core/components/functional/
|
|
2376
|
-
"title": "
|
|
3863
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3864
|
+
"title": "WebGPU",
|
|
2377
3865
|
"hashes": {
|
|
2378
|
-
"
|
|
3866
|
+
"chaining": {
|
|
2379
3867
|
"count": 1,
|
|
2380
|
-
"title": "",
|
|
2381
|
-
"type": "
|
|
3868
|
+
"title": "Chaining",
|
|
3869
|
+
"type": "paragraph"
|
|
2382
3870
|
}
|
|
2383
3871
|
}
|
|
2384
3872
|
}
|
|
2385
3873
|
}
|
|
2386
3874
|
},
|
|
2387
3875
|
{
|
|
2388
|
-
"search": "
|
|
3876
|
+
"search": "concorde-webgpu.bundle.js after the core.\n",
|
|
2389
3877
|
"files": {
|
|
2390
|
-
"core/components/functional/
|
|
2391
|
-
"title": "
|
|
3878
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3879
|
+
"title": "WebGPU",
|
|
2392
3880
|
"hashes": {
|
|
2393
|
-
"
|
|
3881
|
+
"cdn": {
|
|
2394
3882
|
"count": 1,
|
|
2395
|
-
"title": "",
|
|
3883
|
+
"title": "CDN",
|
|
2396
3884
|
"type": "paragraph"
|
|
2397
3885
|
}
|
|
2398
3886
|
}
|
|
@@ -3869,6 +5357,21 @@
|
|
|
3869
5357
|
}
|
|
3870
5358
|
}
|
|
3871
5359
|
},
|
|
5360
|
+
{
|
|
5361
|
+
"search": "Opt-in addons (HF / shader / WebGPU): Visual stack.\n",
|
|
5362
|
+
"files": {
|
|
5363
|
+
"docs/_core-concept/dataFlow.md": {
|
|
5364
|
+
"title": "Data flow",
|
|
5365
|
+
"hashes": {
|
|
5366
|
+
"quick-map": {
|
|
5367
|
+
"count": 1,
|
|
5368
|
+
"title": "Quick map",
|
|
5369
|
+
"type": "paragraph"
|
|
5370
|
+
}
|
|
5371
|
+
}
|
|
5372
|
+
}
|
|
5373
|
+
}
|
|
5374
|
+
},
|
|
3872
5375
|
{
|
|
3873
5376
|
"search": "Skill: concorde-get-set-dp in the package ai/ folder.\n",
|
|
3874
5377
|
"files": {
|
|
@@ -7759,6 +9262,96 @@
|
|
|
7759
9262
|
}
|
|
7760
9263
|
}
|
|
7761
9264
|
},
|
|
9265
|
+
{
|
|
9266
|
+
"search": "CDN addons",
|
|
9267
|
+
"files": {
|
|
9268
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
9269
|
+
"title": "CDN addons",
|
|
9270
|
+
"hashes": {
|
|
9271
|
+
"cdn-addons": {
|
|
9272
|
+
"count": 1,
|
|
9273
|
+
"title": "",
|
|
9274
|
+
"type": "page"
|
|
9275
|
+
}
|
|
9276
|
+
}
|
|
9277
|
+
}
|
|
9278
|
+
}
|
|
9279
|
+
},
|
|
9280
|
+
{
|
|
9281
|
+
"search": "Heavy opt-in features stay out of concorde-core.bundle.js. Load the core bundle first, then the addon you need.\n",
|
|
9282
|
+
"files": {
|
|
9283
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
9284
|
+
"title": "CDN addons",
|
|
9285
|
+
"hashes": {
|
|
9286
|
+
"cdn-addons": {
|
|
9287
|
+
"count": 1,
|
|
9288
|
+
"title": "",
|
|
9289
|
+
"type": "paragraph"
|
|
9290
|
+
}
|
|
9291
|
+
}
|
|
9292
|
+
}
|
|
9293
|
+
}
|
|
9294
|
+
},
|
|
9295
|
+
{
|
|
9296
|
+
"search": "npm: @supersoniks/concorde/bundle/3d, …/bundle/shader, …/bundle/webgpu, …/bundle/hugging-face-infer (IIFE). ESM twins: …/bundle/3d/es, etc.\n",
|
|
9297
|
+
"files": {
|
|
9298
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
9299
|
+
"title": "CDN addons",
|
|
9300
|
+
"hashes": {
|
|
9301
|
+
"cdn-addons": {
|
|
9302
|
+
"count": 1,
|
|
9303
|
+
"title": "",
|
|
9304
|
+
"type": "paragraph"
|
|
9305
|
+
}
|
|
9306
|
+
}
|
|
9307
|
+
}
|
|
9308
|
+
}
|
|
9309
|
+
},
|
|
9310
|
+
{
|
|
9311
|
+
"search": "Scripts in the descriptor are awaited before nodes are created. A failed loadJS throws (no UI parse without deps). Prefer the IIFE .bundle.js files. Descriptors (js[], markup, innerHTML) must be trusted.\n",
|
|
9312
|
+
"files": {
|
|
9313
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
9314
|
+
"title": "CDN addons",
|
|
9315
|
+
"hashes": {
|
|
9316
|
+
"sdui-js": {
|
|
9317
|
+
"count": 1,
|
|
9318
|
+
"title": "SDUI (`js[]`)",
|
|
9319
|
+
"type": "paragraph"
|
|
9320
|
+
}
|
|
9321
|
+
}
|
|
9322
|
+
}
|
|
9323
|
+
}
|
|
9324
|
+
},
|
|
9325
|
+
{
|
|
9326
|
+
"search": "The CE alone is not enough: configure runtime + allowlist once (page script or app entry). The IIFE exposes window.ConcordeHF.\n",
|
|
9327
|
+
"files": {
|
|
9328
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
9329
|
+
"title": "CDN addons",
|
|
9330
|
+
"hashes": {
|
|
9331
|
+
"hugging-face--minimal-bootstrap": {
|
|
9332
|
+
"count": 1,
|
|
9333
|
+
"title": "Hugging Face — minimal bootstrap",
|
|
9334
|
+
"type": "paragraph"
|
|
9335
|
+
}
|
|
9336
|
+
}
|
|
9337
|
+
}
|
|
9338
|
+
}
|
|
9339
|
+
},
|
|
9340
|
+
{
|
|
9341
|
+
"search": "Peer deps (npm, optional): three@0.180.0, @huggingface/transformers@4.3.0. Not needed when using the CDN IIFE addons (Three is inlined in concorde-3d; Transformers.js stays on its own CDN via configureHuggingFace).\n",
|
|
9342
|
+
"files": {
|
|
9343
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
9344
|
+
"title": "CDN addons",
|
|
9345
|
+
"hashes": {
|
|
9346
|
+
"hugging-face--minimal-bootstrap": {
|
|
9347
|
+
"count": 1,
|
|
9348
|
+
"title": "Hugging Face — minimal bootstrap",
|
|
9349
|
+
"type": "paragraph"
|
|
9350
|
+
}
|
|
9351
|
+
}
|
|
9352
|
+
}
|
|
9353
|
+
}
|
|
9354
|
+
},
|
|
7762
9355
|
{
|
|
7763
9356
|
"search": "Manual installation (Vite)",
|
|
7764
9357
|
"files": {
|
|
@@ -8285,7 +9878,7 @@
|
|
|
8285
9878
|
}
|
|
8286
9879
|
},
|
|
8287
9880
|
{
|
|
8288
|
-
"search": "In the case where it can be directly used in a page, it should also be globally referenced,
|
|
9881
|
+
"search": "In the case where it can be directly used in a page, it should also be globally referenced. Heavy / optional features (3d, shader, webgpu, hugging-face) use CDN addon bundles — see CDN addons — and must not be added to functional.ts / ui.ts.\n",
|
|
8289
9882
|
"files": {
|
|
8290
9883
|
"docs/_getting-started/create-a-component.md": {
|
|
8291
9884
|
"title": "Creating components",
|
|
@@ -10133,5 +11726,215 @@
|
|
|
10133
11726
|
}
|
|
10134
11727
|
}
|
|
10135
11728
|
}
|
|
11729
|
+
},
|
|
11730
|
+
{
|
|
11731
|
+
"search": "Visual stack",
|
|
11732
|
+
"files": {
|
|
11733
|
+
"docs/_misc/visual-stack.md": {
|
|
11734
|
+
"title": "Visual stack",
|
|
11735
|
+
"hashes": {
|
|
11736
|
+
"visual-stack": {
|
|
11737
|
+
"count": 1,
|
|
11738
|
+
"title": "",
|
|
11739
|
+
"type": "page"
|
|
11740
|
+
}
|
|
11741
|
+
}
|
|
11742
|
+
}
|
|
11743
|
+
}
|
|
11744
|
+
},
|
|
11745
|
+
{
|
|
11746
|
+
"search": "Examples of chaining opt-in addons (HF, shader, WebGPU, 3D). Outside the main “functional” flow.\n",
|
|
11747
|
+
"files": {
|
|
11748
|
+
"docs/_misc/visual-stack.md": {
|
|
11749
|
+
"title": "Visual stack",
|
|
11750
|
+
"hashes": {
|
|
11751
|
+
"visual-stack": {
|
|
11752
|
+
"count": 1,
|
|
11753
|
+
"title": "",
|
|
11754
|
+
"type": "paragraph"
|
|
11755
|
+
}
|
|
11756
|
+
}
|
|
11757
|
+
}
|
|
11758
|
+
}
|
|
11759
|
+
},
|
|
11760
|
+
{
|
|
11761
|
+
"search": "Photo → sonic-hugging-face-infer (depth) → sonic-shader (parallax) → extract → sonic-jsonata (stats / thresholds).\n",
|
|
11762
|
+
"files": {
|
|
11763
|
+
"docs/_misc/visual-stack.md": {
|
|
11764
|
+
"title": "Visual stack",
|
|
11765
|
+
"hashes": {
|
|
11766
|
+
"hf-depth--parallax": {
|
|
11767
|
+
"count": 1,
|
|
11768
|
+
"title": "HF depth → parallax",
|
|
11769
|
+
"type": "paragraph"
|
|
11770
|
+
}
|
|
11771
|
+
}
|
|
11772
|
+
}
|
|
11773
|
+
}
|
|
11774
|
+
},
|
|
11775
|
+
{
|
|
11776
|
+
"search": "Do not pipe texture channels through jsonata on every frame / slider: that forces rebuilds. JSONata is for scalar derivatives, not the media bus.\n",
|
|
11777
|
+
"files": {
|
|
11778
|
+
"docs/_misc/visual-stack.md": {
|
|
11779
|
+
"title": "Visual stack",
|
|
11780
|
+
"hashes": {
|
|
11781
|
+
"golden-rule": {
|
|
11782
|
+
"count": 1,
|
|
11783
|
+
"title": "Golden rule",
|
|
11784
|
+
"type": "paragraph"
|
|
11785
|
+
}
|
|
11786
|
+
}
|
|
11787
|
+
}
|
|
11788
|
+
}
|
|
11789
|
+
},
|
|
11790
|
+
{
|
|
11791
|
+
"search": "sonic-3d and sonic-shader keep separate WebGL contexts. For realtime post, point a channel at the 3D host with #id — the shader copies the canvas each frame (texImage2D), no JPEG.\n",
|
|
11792
|
+
"files": {
|
|
11793
|
+
"docs/_misc/visual-stack.md": {
|
|
11794
|
+
"title": "Visual stack",
|
|
11795
|
+
"hashes": {
|
|
11796
|
+
"3d--shader-live-gpu-bridge": {
|
|
11797
|
+
"count": 1,
|
|
11798
|
+
"title": "3D → shader live (GPU bridge)",
|
|
11799
|
+
"type": "paragraph"
|
|
11800
|
+
}
|
|
11801
|
+
}
|
|
11802
|
+
}
|
|
11803
|
+
}
|
|
11804
|
+
},
|
|
11805
|
+
{
|
|
11806
|
+
"search": "Also accepted: <img>, <video>, <canvas>, or another Concorde host that implements SonicFrameSource (getFrameCanvas + frameSeq). DP form: { element: "#plateau" } or { element: el }.\n",
|
|
11807
|
+
"files": {
|
|
11808
|
+
"docs/_misc/visual-stack.md": {
|
|
11809
|
+
"title": "Visual stack",
|
|
11810
|
+
"hashes": {
|
|
11811
|
+
"3d--shader-live-gpu-bridge": {
|
|
11812
|
+
"count": 1,
|
|
11813
|
+
"title": "3D → shader live (GPU bridge)",
|
|
11814
|
+
"type": "paragraph"
|
|
11815
|
+
}
|
|
11816
|
+
}
|
|
11817
|
+
}
|
|
11818
|
+
}
|
|
11819
|
+
},
|
|
11820
|
+
{
|
|
11821
|
+
"search": "frame-out (JPEG ObjectURL) remains for export / HF / freeze — not for live post.\n",
|
|
11822
|
+
"files": {
|
|
11823
|
+
"docs/_misc/visual-stack.md": {
|
|
11824
|
+
"title": "Visual stack",
|
|
11825
|
+
"hashes": {
|
|
11826
|
+
"3d--shader-live-gpu-bridge": {
|
|
11827
|
+
"count": 1,
|
|
11828
|
+
"title": "3D → shader live (GPU bridge)",
|
|
11829
|
+
"type": "paragraph"
|
|
11830
|
+
}
|
|
11831
|
+
}
|
|
11832
|
+
}
|
|
11833
|
+
}
|
|
11834
|
+
},
|
|
11835
|
+
{
|
|
11836
|
+
"search": "Same #id bridge as the shader: sonic-webgpu channel0="#plateau-gpu" copies the 3D canvas each frameSeq via copyExternalImageToTexture (persistent texture — no recreate when size is stable).\n",
|
|
11837
|
+
"files": {
|
|
11838
|
+
"docs/_misc/visual-stack.md": {
|
|
11839
|
+
"title": "Visual stack",
|
|
11840
|
+
"hashes": {
|
|
11841
|
+
"3d--webgpu-live": {
|
|
11842
|
+
"count": 1,
|
|
11843
|
+
"title": "3D → WebGPU live",
|
|
11844
|
+
"type": "paragraph"
|
|
11845
|
+
}
|
|
11846
|
+
}
|
|
11847
|
+
}
|
|
11848
|
+
}
|
|
11849
|
+
},
|
|
11850
|
+
{
|
|
11851
|
+
"search": "Scene → offscreen color + depth → GLSL passes (post-*) in the same WebGL context. Use post-image-ch1="depth" for edge / DoF-style effects without a second component.\n",
|
|
11852
|
+
"files": {
|
|
11853
|
+
"docs/_misc/visual-stack.md": {
|
|
11854
|
+
"title": "Visual stack",
|
|
11855
|
+
"hashes": {
|
|
11856
|
+
"post-fx--depth-in-sonic-3d": {
|
|
11857
|
+
"count": 1,
|
|
11858
|
+
"title": "Post FX + depth (in sonic-3d)",
|
|
11859
|
+
"type": "paragraph"
|
|
11860
|
+
}
|
|
11861
|
+
}
|
|
11862
|
+
}
|
|
11863
|
+
}
|
|
11864
|
+
},
|
|
11865
|
+
{
|
|
11866
|
+
"search": "sonic-shader detects corners (Harris, buffer-format="rgba16f" + NMS 5×5 / shape filter) and extracts patches → channel0…3 on sonic-webgpu (kernel="image"): GPU mosaic.\n",
|
|
11867
|
+
"files": {
|
|
11868
|
+
"docs/_misc/visual-stack.md": {
|
|
11869
|
+
"title": "Visual stack",
|
|
11870
|
+
"hashes": {
|
|
11871
|
+
"harris--patches--webgpu": {
|
|
11872
|
+
"count": 1,
|
|
11873
|
+
"title": "Harris → patches → WebGPU",
|
|
11874
|
+
"type": "paragraph"
|
|
11875
|
+
}
|
|
11876
|
+
}
|
|
11877
|
+
}
|
|
11878
|
+
}
|
|
11879
|
+
},
|
|
11880
|
+
{
|
|
11881
|
+
"search": "Use buffer-format="rgba16f" so signed IxIy / non-clamped Ix² survive the buffer (RGBA8 zeros negatives and saturates). See Shader — buffer precision.\n",
|
|
11882
|
+
"files": {
|
|
11883
|
+
"docs/_misc/visual-stack.md": {
|
|
11884
|
+
"title": "Visual stack",
|
|
11885
|
+
"hashes": {
|
|
11886
|
+
"harris--patches--webgpu": {
|
|
11887
|
+
"count": 1,
|
|
11888
|
+
"title": "Harris → patches → WebGPU",
|
|
11889
|
+
"type": "paragraph"
|
|
11890
|
+
}
|
|
11891
|
+
}
|
|
11892
|
+
}
|
|
11893
|
+
}
|
|
11894
|
+
},
|
|
11895
|
+
{
|
|
11896
|
+
"search": "Channel rebinds and release-offscreen="auto" (keep FBO state when a pass uses self) : Shader — état et visibilité.\n",
|
|
11897
|
+
"files": {
|
|
11898
|
+
"docs/_misc/visual-stack.md": {
|
|
11899
|
+
"title": "Visual stack",
|
|
11900
|
+
"hashes": {
|
|
11901
|
+
"harris--patches--webgpu": {
|
|
11902
|
+
"count": 1,
|
|
11903
|
+
"title": "Harris → patches → WebGPU",
|
|
11904
|
+
"type": "paragraph"
|
|
11905
|
+
}
|
|
11906
|
+
}
|
|
11907
|
+
}
|
|
11908
|
+
}
|
|
11909
|
+
},
|
|
11910
|
+
{
|
|
11911
|
+
"search": "sonic-3d live sources keep playing off-screen when a #id consumer is registered (or play-offscreen) — see 3D — bridging.\n",
|
|
11912
|
+
"files": {
|
|
11913
|
+
"docs/_misc/visual-stack.md": {
|
|
11914
|
+
"title": "Visual stack",
|
|
11915
|
+
"hashes": {
|
|
11916
|
+
"harris--patches--webgpu": {
|
|
11917
|
+
"count": 1,
|
|
11918
|
+
"title": "Harris → patches → WebGPU",
|
|
11919
|
+
"type": "paragraph"
|
|
11920
|
+
}
|
|
11921
|
+
}
|
|
11922
|
+
}
|
|
11923
|
+
}
|
|
11924
|
+
},
|
|
11925
|
+
{
|
|
11926
|
+
"search": "SonicMediaRef / SonicFrameSource / toMediaUrl / cloneMediaRef — @supersoniks/concorde/core/utils/mediaRef.\n",
|
|
11927
|
+
"files": {
|
|
11928
|
+
"docs/_misc/visual-stack.md": {
|
|
11929
|
+
"title": "Visual stack",
|
|
11930
|
+
"hashes": {
|
|
11931
|
+
"media-contract": {
|
|
11932
|
+
"count": 1,
|
|
11933
|
+
"title": "Media contract",
|
|
11934
|
+
"type": "paragraph"
|
|
11935
|
+
}
|
|
11936
|
+
}
|
|
11937
|
+
}
|
|
11938
|
+
}
|
|
10136
11939
|
}
|
|
10137
|
-
]
|
|
11940
|
+
]
|