@supersoniks/concorde 4.9.97-visual-stack.0 → 4.9.98-visual-stack.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-infos.json +1 -1
- package/concorde-3d.bundle.js +143 -143
- package/concorde-3d.es.js +1393 -1377
- package/concorde-core.bundle.js +1 -1
- package/concorde-core.es.js +1 -1
- package/concorde-hugging-face-infer.bundle.js +1 -1
- package/concorde-hugging-face-infer.es.js +1 -1
- package/concorde-shader.bundle.js +19 -19
- package/concorde-shader.es.js +2317 -2172
- package/concorde-webgpu.bundle.js +30 -30
- package/concorde-webgpu.es.js +2439 -2346
- package/dist/concorde-3d.bundle.js +143 -143
- package/dist/concorde-3d.es.js +1393 -1377
- package/dist/concorde-core.bundle.js +1 -1
- package/dist/concorde-core.es.js +1 -1
- package/dist/concorde-hugging-face-infer.bundle.js +1 -1
- package/dist/concorde-hugging-face-infer.es.js +1 -1
- package/dist/concorde-shader.bundle.js +19 -19
- package/dist/concorde-shader.es.js +2317 -2172
- package/dist/concorde-webgpu.bundle.js +30 -30
- package/dist/concorde-webgpu.es.js +2439 -2346
- package/dist/js/core/components/functional/3d/3d.js +11 -1
- package/dist/js/core/components/functional/3d/3d.js.map +1 -1
- package/dist/js/core/components/functional/3d/constants.js +2 -0
- package/dist/js/core/components/functional/3d/constants.js.map +1 -1
- package/dist/js/core/components/functional/3d/frame-source.js +22 -0
- package/dist/js/core/components/functional/3d/frame-source.js.map +1 -0
- package/dist/js/core/components/functional/3d/reload.js +3 -0
- package/dist/js/core/components/functional/3d/reload.js.map +1 -1
- package/dist/js/core/components/functional/shader/gl-runtime.js +152 -17
- package/dist/js/core/components/functional/shader/gl-runtime.js.map +1 -1
- package/dist/js/core/components/functional/shader/shader.js +55 -6
- package/dist/js/core/components/functional/shader/shader.js.map +1 -1
- package/dist/js/core/components/functional/shader/types.js.map +1 -1
- package/dist/js/core/components/functional/webgpu/webgpu.js +9 -0
- package/dist/js/core/components/functional/webgpu/webgpu.js.map +1 -1
- package/dist/js/core/utils/mediaRef.js +49 -0
- package/dist/js/core/utils/mediaRef.js.map +1 -1
- package/dist/types/core/components/functional/3d/3d.d.ts +7 -2
- package/dist/types/core/components/functional/3d/3d.d.ts.map +1 -1
- package/dist/types/core/components/functional/3d/constants.d.ts +1 -1
- package/dist/types/core/components/functional/3d/constants.d.ts.map +1 -1
- package/dist/types/core/components/functional/3d/frame-source.d.ts +23 -0
- package/dist/types/core/components/functional/3d/frame-source.d.ts.map +1 -0
- package/dist/types/core/components/functional/3d/reload.d.ts +3 -0
- package/dist/types/core/components/functional/3d/reload.d.ts.map +1 -1
- package/dist/types/core/components/functional/3d/types.d.ts +7 -0
- package/dist/types/core/components/functional/3d/types.d.ts.map +1 -1
- package/dist/types/core/components/functional/shader/gl-runtime.d.ts +20 -1
- package/dist/types/core/components/functional/shader/gl-runtime.d.ts.map +1 -1
- package/dist/types/core/components/functional/shader/shader.d.ts +14 -3
- package/dist/types/core/components/functional/shader/shader.d.ts.map +1 -1
- package/dist/types/core/components/functional/shader/types.d.ts +6 -0
- package/dist/types/core/components/functional/shader/types.d.ts.map +1 -1
- package/dist/types/core/components/functional/webgpu/webgpu.d.ts +4 -0
- package/dist/types/core/components/functional/webgpu/webgpu.d.ts.map +1 -1
- package/dist/types/core/utils/mediaRef.d.ts +19 -0
- package/dist/types/core/utils/mediaRef.d.ts.map +1 -1
- package/package.json +13 -1
- package/src/core/components/functional/3d/3d.md +12 -2
- package/src/core/components/functional/3d/3d.ts +12 -1
- package/src/core/components/functional/3d/constants.ts +2 -0
- package/src/core/components/functional/3d/frame-source.ts +30 -0
- package/src/core/components/functional/3d/reload.ts +6 -0
- package/src/core/components/functional/3d/types.ts +5 -0
- package/src/core/components/functional/shader/gl-runtime.ts +205 -24
- package/src/core/components/functional/shader/shader.md +10 -8
- package/src/core/components/functional/shader/shader.spec.ts +83 -3
- package/src/core/components/functional/shader/shader.ts +61 -6
- package/src/core/components/functional/shader/types.ts +3 -1
- package/src/core/components/functional/webgpu/webgpu.ts +9 -0
- package/src/core/utils/mediaRef.spec.ts +36 -0
- package/src/core/utils/mediaRef.ts +63 -0
- package/src/docs/_misc/visual-stack.md +18 -2
- package/src/docs/components/docs-demo-sources.ts +14 -0
- package/src/docs/docs.ts +1 -0
- package/src/docs/example/docs-3d-shader-live-demo.ts +98 -0
- package/src/docs/search/docs-search.json +2347 -877
- package/src/tsconfig.json +9 -0
- package/src/tsconfig.tsbuildinfo +1 -1
|
@@ -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,89 +85,49 @@
|
|
|
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
|
}
|
|
@@ -392,27 +202,52 @@
|
|
|
392
202
|
}
|
|
393
203
|
}
|
|
394
204
|
},
|
|
395
|
-
"core/components/functional/
|
|
396
|
-
"title": "
|
|
205
|
+
"core/components/functional/shader/shader.md": {
|
|
206
|
+
"title": "Shader",
|
|
397
207
|
"hashes": {
|
|
398
|
-
"
|
|
208
|
+
"multipass-sur-une-photo": {
|
|
399
209
|
"count": 1,
|
|
400
|
-
"title": "
|
|
210
|
+
"title": "Multipass sur une photo",
|
|
401
211
|
"type": "paragraph"
|
|
402
212
|
},
|
|
403
|
-
"
|
|
213
|
+
"chaînage-deffets-officiel": {
|
|
404
214
|
"count": 1,
|
|
405
|
-
"title": "
|
|
215
|
+
"title": "Chaînage d’effets (officiel)",
|
|
406
216
|
"type": "paragraph"
|
|
407
217
|
},
|
|
408
|
-
"
|
|
218
|
+
"rollover--roll-out-hover-param": {
|
|
409
219
|
"count": 1,
|
|
410
|
-
"title": "
|
|
220
|
+
"title": "Rollover / roll-out (`hover-param`)",
|
|
411
221
|
"type": "paragraph"
|
|
412
222
|
},
|
|
413
|
-
"
|
|
223
|
+
"sortie--sampling-sample--dataprovider": {
|
|
414
224
|
"count": 1,
|
|
415
|
-
"title": "
|
|
225
|
+
"title": "Sortie / sampling (`sample` + dataProvider)",
|
|
226
|
+
"type": "paragraph"
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
"core/components/functional/submit/submit.md": {
|
|
231
|
+
"title": "Submit",
|
|
232
|
+
"hashes": {
|
|
233
|
+
"form-and-result-handling": {
|
|
234
|
+
"count": 1,
|
|
235
|
+
"title": "Form and result handling",
|
|
236
|
+
"type": "paragraph"
|
|
237
|
+
},
|
|
238
|
+
"native-html-form": {
|
|
239
|
+
"count": 1,
|
|
240
|
+
"title": "Native HTML form",
|
|
241
|
+
"type": "paragraph"
|
|
242
|
+
},
|
|
243
|
+
"sendasformdata": {
|
|
244
|
+
"count": 1,
|
|
245
|
+
"title": "sendAsFormData",
|
|
246
|
+
"type": "paragraph"
|
|
247
|
+
},
|
|
248
|
+
"submit-result-key": {
|
|
249
|
+
"count": 1,
|
|
250
|
+
"title": "submit-result-key",
|
|
416
251
|
"type": "paragraph"
|
|
417
252
|
},
|
|
418
253
|
"cleareddataonsuccess": {
|
|
@@ -437,6 +272,16 @@
|
|
|
437
272
|
}
|
|
438
273
|
}
|
|
439
274
|
},
|
|
275
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
276
|
+
"title": "WebGPU",
|
|
277
|
+
"hashes": {
|
|
278
|
+
"demo--particles-compute": {
|
|
279
|
+
"count": 1,
|
|
280
|
+
"title": "Demo — particles (compute)",
|
|
281
|
+
"type": "paragraph"
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
},
|
|
440
285
|
"core/components/ui/form/checkbox/checkbox.md": {
|
|
441
286
|
"title": "Checkbox",
|
|
442
287
|
"hashes": {
|
|
@@ -462,112 +307,1347 @@
|
|
|
462
307
|
}
|
|
463
308
|
}
|
|
464
309
|
},
|
|
465
|
-
"core/components/ui/form/
|
|
466
|
-
"title": "
|
|
310
|
+
"core/components/ui/form/radio/radio.md": {
|
|
311
|
+
"title": "Radio",
|
|
312
|
+
"hashes": {
|
|
313
|
+
"example-of-use--blacklist--queue": {
|
|
314
|
+
"count": 1,
|
|
315
|
+
"title": "Example of use — blacklist + queue",
|
|
316
|
+
"type": "paragraph"
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
"core/components/ui/form/select/select.md": {
|
|
321
|
+
"title": "Select",
|
|
322
|
+
"hashes": {
|
|
323
|
+
"example-of-use--language-filter--queue": {
|
|
324
|
+
"count": 1,
|
|
325
|
+
"title": "Example of use — language filter + queue",
|
|
326
|
+
"type": "paragraph"
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
"core/components/ui/form/switch/switch.md": {
|
|
331
|
+
"title": "Switch",
|
|
332
|
+
"hashes": {
|
|
333
|
+
"example-of-use--blacklist--queue": {
|
|
334
|
+
"count": 1,
|
|
335
|
+
"title": "Example of use — blacklist + queue",
|
|
336
|
+
"type": "paragraph"
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
"core/components/ui/icon/icon.md": {
|
|
341
|
+
"title": "Icon",
|
|
342
|
+
"hashes": {
|
|
343
|
+
"custom": {
|
|
344
|
+
"count": 1,
|
|
345
|
+
"title": "Custom",
|
|
346
|
+
"type": "paragraph"
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
"core/components/ui/loader/loader.md": {
|
|
351
|
+
"title": "Loader",
|
|
352
|
+
"hashes": {
|
|
353
|
+
"fixed-mode": {
|
|
354
|
+
"count": 1,
|
|
355
|
+
"title": "Fixed mode",
|
|
356
|
+
"type": "paragraph"
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
"docs/_misc/api-configuration.md": {
|
|
361
|
+
"title": "API configuration",
|
|
467
362
|
"hashes": {
|
|
468
|
-
"
|
|
363
|
+
"bearer-token-static": {
|
|
364
|
+
"count": 1,
|
|
365
|
+
"title": "Bearer token (static)",
|
|
366
|
+
"type": "paragraph"
|
|
367
|
+
},
|
|
368
|
+
"tokenprovider--basic-auth": {
|
|
369
|
+
"count": 1,
|
|
370
|
+
"title": "tokenProvider + Basic auth",
|
|
371
|
+
"type": "paragraph"
|
|
372
|
+
},
|
|
373
|
+
"http-498--stale-token-refresh": {
|
|
469
374
|
"count": 1,
|
|
470
|
-
"title": "
|
|
375
|
+
"title": "HTTP 498 — stale token refresh",
|
|
471
376
|
"type": "paragraph"
|
|
472
377
|
},
|
|
473
|
-
"
|
|
378
|
+
"eventsapitoken": {
|
|
474
379
|
"count": 1,
|
|
475
|
-
"title": "
|
|
380
|
+
"title": "eventsApiToken",
|
|
476
381
|
"type": "paragraph"
|
|
477
382
|
},
|
|
478
|
-
"
|
|
383
|
+
"wording-api": {
|
|
479
384
|
"count": 1,
|
|
480
|
-
"title": "
|
|
385
|
+
"title": "Wording API",
|
|
481
386
|
"type": "paragraph"
|
|
482
387
|
},
|
|
483
|
-
"
|
|
388
|
+
"scoped-attributes-html--sonic-scope": {
|
|
484
389
|
"count": 1,
|
|
485
|
-
"title": "
|
|
390
|
+
"title": "Scoped attributes (HTML / sonic-scope)",
|
|
486
391
|
"type": "paragraph"
|
|
487
392
|
}
|
|
488
393
|
}
|
|
489
394
|
},
|
|
490
|
-
"
|
|
491
|
-
"title": "
|
|
395
|
+
"docs/_misc/visual-stack.md": {
|
|
396
|
+
"title": "Visual stack",
|
|
492
397
|
"hashes": {
|
|
493
|
-
"
|
|
398
|
+
"demo": {
|
|
494
399
|
"count": 1,
|
|
495
|
-
"title": "
|
|
400
|
+
"title": "Demo",
|
|
401
|
+
"type": "paragraph"
|
|
402
|
+
},
|
|
403
|
+
"3d--shader-live-gpu-bridge": {
|
|
404
|
+
"count": 1,
|
|
405
|
+
"title": "3D → shader live (GPU bridge)",
|
|
406
|
+
"type": "paragraph"
|
|
407
|
+
},
|
|
408
|
+
"harris--patches--webgpu": {
|
|
409
|
+
"count": 1,
|
|
410
|
+
"title": "Harris → patches → WebGPU",
|
|
496
411
|
"type": "paragraph"
|
|
497
412
|
}
|
|
498
413
|
}
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"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",
|
|
419
|
+
"files": {
|
|
420
|
+
"core/components/functional/3d/3d.md": {
|
|
421
|
+
"title": "3D",
|
|
502
422
|
"hashes": {
|
|
503
|
-
"
|
|
423
|
+
"form-auto-bind-formdataprovider": {
|
|
504
424
|
"count": 1,
|
|
505
|
-
"title": "
|
|
425
|
+
"title": "Form auto-bind (`formDataProvider`)",
|
|
506
426
|
"type": "paragraph"
|
|
507
427
|
}
|
|
508
428
|
}
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"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",
|
|
434
|
+
"files": {
|
|
435
|
+
"core/components/functional/3d/3d.md": {
|
|
436
|
+
"title": "3D",
|
|
512
437
|
"hashes": {
|
|
513
|
-
"
|
|
438
|
+
"form-auto-bind-formdataprovider": {
|
|
439
|
+
"count": 1,
|
|
440
|
+
"title": "Form auto-bind (`formDataProvider`)",
|
|
441
|
+
"type": "paragraph"
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
"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",
|
|
449
|
+
"files": {
|
|
450
|
+
"core/components/functional/3d/3d.md": {
|
|
451
|
+
"title": "3D",
|
|
452
|
+
"hashes": {
|
|
453
|
+
"form-auto-bind-formdataprovider": {
|
|
454
|
+
"count": 1,
|
|
455
|
+
"title": "Form auto-bind (`formDataProvider`)",
|
|
456
|
+
"type": "paragraph"
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
"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",
|
|
464
|
+
"files": {
|
|
465
|
+
"core/components/functional/3d/3d.md": {
|
|
466
|
+
"title": "3D",
|
|
467
|
+
"hashes": {
|
|
468
|
+
"sortie--dataprovider": {
|
|
469
|
+
"count": 1,
|
|
470
|
+
"title": "Sortie / dataProvider",
|
|
471
|
+
"type": "paragraph"
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"search": "Le viewer lit asset ou src depuis le DP — la source (fetch, upload, HF) n’est pas couplée.\n",
|
|
479
|
+
"files": {
|
|
480
|
+
"core/components/functional/3d/3d.md": {
|
|
481
|
+
"title": "3D",
|
|
482
|
+
"hashes": {
|
|
483
|
+
"asset-neutre-hf-plus-tard": {
|
|
484
|
+
"count": 1,
|
|
485
|
+
"title": "Asset neutre (HF plus tard)",
|
|
486
|
+
"type": "paragraph"
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"search": "No shared WebGL context between sonic-3d and sonic-shader.\n",
|
|
494
|
+
"files": {
|
|
495
|
+
"core/components/functional/3d/3d.md": {
|
|
496
|
+
"title": "3D",
|
|
497
|
+
"hashes": {
|
|
498
|
+
"shader-bridging": {
|
|
499
|
+
"count": 1,
|
|
500
|
+
"title": "Shader bridging",
|
|
501
|
+
"type": "paragraph"
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"search": "Demo: Visual stack — 3D → shader live.\n",
|
|
509
|
+
"files": {
|
|
510
|
+
"core/components/functional/3d/3d.md": {
|
|
511
|
+
"title": "3D",
|
|
512
|
+
"hashes": {
|
|
513
|
+
"shader-bridging": {
|
|
514
|
+
"count": 1,
|
|
515
|
+
"title": "Shader bridging",
|
|
516
|
+
"type": "paragraph"
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"search": "Date",
|
|
524
|
+
"files": {
|
|
525
|
+
"core/components/functional/date/date.md": {
|
|
526
|
+
"title": "Date",
|
|
527
|
+
"hashes": {
|
|
528
|
+
"date": {
|
|
529
|
+
"count": 2,
|
|
530
|
+
"title": "",
|
|
531
|
+
"type": "page"
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"search": "Nothing is displayed.\n",
|
|
539
|
+
"files": {
|
|
540
|
+
"core/components/functional/date/date.md": {
|
|
541
|
+
"title": "Date",
|
|
542
|
+
"hashes": {
|
|
543
|
+
"no-attribute": {
|
|
544
|
+
"count": 1,
|
|
545
|
+
"title": "No attribute",
|
|
546
|
+
"type": "paragraph"
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
"search": "Displays the current date.\n",
|
|
554
|
+
"files": {
|
|
555
|
+
"core/components/functional/date/date.md": {
|
|
556
|
+
"title": "Date",
|
|
557
|
+
"hashes": {
|
|
558
|
+
"now": {
|
|
559
|
+
"count": 1,
|
|
560
|
+
"title": "Now",
|
|
561
|
+
"type": "paragraph"
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"search": "Displays a date from a timestamp.\n",
|
|
569
|
+
"files": {
|
|
570
|
+
"core/components/functional/date/date.md": {
|
|
571
|
+
"title": "Date",
|
|
572
|
+
"hashes": {
|
|
573
|
+
"date": {
|
|
574
|
+
"count": 1,
|
|
575
|
+
"title": "",
|
|
576
|
+
"type": "paragraph"
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
"search": "Displays a date from a string.\n",
|
|
584
|
+
"files": {
|
|
585
|
+
"core/components/functional/date/date.md": {
|
|
586
|
+
"title": "Date",
|
|
587
|
+
"hashes": {
|
|
588
|
+
"date_string": {
|
|
589
|
+
"count": 1,
|
|
590
|
+
"title": "Date_string",
|
|
591
|
+
"type": "paragraph"
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
"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",
|
|
599
|
+
"files": {
|
|
600
|
+
"core/components/functional/date/date.md": {
|
|
601
|
+
"title": "Date",
|
|
602
|
+
"hashes": {
|
|
603
|
+
"start_date--end_date": {
|
|
604
|
+
"count": 1,
|
|
605
|
+
"title": "Start_date / end_date",
|
|
606
|
+
"type": "paragraph"
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
"search": "ISO 639-1 Language Codes\n",
|
|
614
|
+
"files": {
|
|
615
|
+
"core/components/functional/date/date.md": {
|
|
616
|
+
"title": "Date",
|
|
617
|
+
"hashes": {
|
|
618
|
+
"language": {
|
|
619
|
+
"count": 1,
|
|
620
|
+
"title": "Language",
|
|
621
|
+
"type": "paragraph"
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
"search": "For the list of supported timeZones, run Intl.supportedValuesOf('timeZone') in the console\n",
|
|
629
|
+
"files": {
|
|
630
|
+
"core/components/functional/date/date.md": {
|
|
631
|
+
"title": "Date",
|
|
632
|
+
"hashes": {
|
|
633
|
+
"time_zone": {
|
|
634
|
+
"count": 1,
|
|
635
|
+
"title": "Time_zone",
|
|
636
|
+
"type": "paragraph"
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"search": "Deprecated\n",
|
|
644
|
+
"files": {
|
|
645
|
+
"core/components/functional/date/date.md": {
|
|
646
|
+
"title": "Date",
|
|
647
|
+
"hashes": {
|
|
648
|
+
"renderif": {
|
|
649
|
+
"count": 1,
|
|
650
|
+
"title": ".renderIf",
|
|
651
|
+
"type": "paragraph"
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
},
|
|
655
|
+
"core/components/functional/fetch/fetch.md": {
|
|
656
|
+
"title": "Fetch",
|
|
657
|
+
"hashes": {
|
|
658
|
+
"headersdataprovider": {
|
|
659
|
+
"count": 1,
|
|
660
|
+
"title": "HeadersDataProvider",
|
|
661
|
+
"type": "paragraph"
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
"search": "Fetch",
|
|
669
|
+
"files": {
|
|
670
|
+
"core/components/functional/fetch/fetch.md": {
|
|
671
|
+
"title": "Fetch",
|
|
672
|
+
"hashes": {
|
|
673
|
+
"fetch": {
|
|
674
|
+
"count": 1,
|
|
675
|
+
"title": "",
|
|
676
|
+
"type": "page"
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
"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",
|
|
684
|
+
"files": {
|
|
685
|
+
"core/components/functional/fetch/fetch.md": {
|
|
686
|
+
"title": "Fetch",
|
|
687
|
+
"hashes": {
|
|
688
|
+
"fetch": {
|
|
689
|
+
"count": 1,
|
|
690
|
+
"title": "",
|
|
691
|
+
"type": "paragraph"
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
"search": "The sonic-fetch component requests and stores API data. It extends the Fetcher and Subscriber mixins.\n",
|
|
699
|
+
"files": {
|
|
700
|
+
"core/components/functional/fetch/fetch.md": {
|
|
701
|
+
"title": "Fetch",
|
|
702
|
+
"hashes": {
|
|
703
|
+
"fetch": {
|
|
704
|
+
"count": 1,
|
|
705
|
+
"title": "",
|
|
706
|
+
"type": "paragraph"
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
"search": "In order to work properly the sonic-fetch component needs at least the following attributes. \n",
|
|
714
|
+
"files": {
|
|
715
|
+
"core/components/functional/fetch/fetch.md": {
|
|
716
|
+
"title": "Fetch",
|
|
717
|
+
"hashes": {
|
|
718
|
+
"basic-usage": {
|
|
719
|
+
"count": 1,
|
|
720
|
+
"title": "Basic usage",
|
|
721
|
+
"type": "paragraph"
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"search": "If no endPoint is specified it will be filled by the dataProvider ID instead \n",
|
|
729
|
+
"files": {
|
|
730
|
+
"core/components/functional/fetch/fetch.md": {
|
|
731
|
+
"title": "Fetch",
|
|
732
|
+
"hashes": {
|
|
733
|
+
"dataprovider-as-an-endpoint": {
|
|
734
|
+
"count": 1,
|
|
735
|
+
"title": "DataProvider as an endPoint",
|
|
736
|
+
"type": "paragraph"
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
"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",
|
|
744
|
+
"files": {
|
|
745
|
+
"core/components/functional/fetch/fetch.md": {
|
|
746
|
+
"title": "Fetch",
|
|
747
|
+
"hashes": {
|
|
748
|
+
"key": {
|
|
749
|
+
"count": 1,
|
|
750
|
+
"title": "Key",
|
|
751
|
+
"type": "paragraph"
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
"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",
|
|
759
|
+
"files": {
|
|
760
|
+
"core/components/functional/fetch/fetch.md": {
|
|
761
|
+
"title": "Fetch",
|
|
762
|
+
"hashes": {
|
|
763
|
+
"key": {
|
|
764
|
+
"count": 1,
|
|
765
|
+
"title": "Key",
|
|
766
|
+
"type": "paragraph"
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
"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",
|
|
774
|
+
"files": {
|
|
775
|
+
"core/components/functional/fetch/fetch.md": {
|
|
776
|
+
"title": "Fetch",
|
|
777
|
+
"hashes": {
|
|
778
|
+
"text-mode": {
|
|
779
|
+
"count": 1,
|
|
780
|
+
"title": "Text mode",
|
|
781
|
+
"type": "paragraph"
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
"search": "The noLoader attribute disables display of the default loader\n",
|
|
789
|
+
"files": {
|
|
790
|
+
"core/components/functional/fetch/fetch.md": {
|
|
791
|
+
"title": "Fetch",
|
|
792
|
+
"hashes": {
|
|
793
|
+
"noloader": {
|
|
794
|
+
"count": 1,
|
|
795
|
+
"title": "NoLoader",
|
|
796
|
+
"type": "paragraph"
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
"search": "if",
|
|
804
|
+
"files": {
|
|
805
|
+
"core/components/functional/if/if.md": {
|
|
806
|
+
"title": "if",
|
|
807
|
+
"hashes": {
|
|
808
|
+
"if": {
|
|
809
|
+
"count": 1,
|
|
810
|
+
"title": "",
|
|
811
|
+
"type": "page"
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
},
|
|
817
|
+
{
|
|
818
|
+
"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",
|
|
819
|
+
"files": {
|
|
820
|
+
"core/components/functional/if/if.md": {
|
|
821
|
+
"title": "if",
|
|
822
|
+
"hashes": {
|
|
823
|
+
"if": {
|
|
824
|
+
"count": 1,
|
|
825
|
+
"title": "",
|
|
826
|
+
"type": "paragraph"
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
},
|
|
832
|
+
{
|
|
833
|
+
"search": "Plain HTML without Lit: HTML integration.\n",
|
|
834
|
+
"files": {
|
|
835
|
+
"core/components/functional/if/if.md": {
|
|
836
|
+
"title": "if",
|
|
837
|
+
"hashes": {
|
|
838
|
+
"if": {
|
|
839
|
+
"count": 1,
|
|
840
|
+
"title": "",
|
|
841
|
+
"type": "paragraph"
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
"search": "Hugging Face infer",
|
|
849
|
+
"files": {
|
|
850
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
851
|
+
"title": "Hugging Face infer",
|
|
852
|
+
"hashes": {
|
|
853
|
+
"hugging-face-infer": {
|
|
854
|
+
"count": 1,
|
|
855
|
+
"title": "",
|
|
856
|
+
"type": "page"
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
"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",
|
|
864
|
+
"files": {
|
|
865
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
866
|
+
"title": "Hugging Face infer",
|
|
867
|
+
"hashes": {
|
|
868
|
+
"hugging-face-infer": {
|
|
869
|
+
"count": 1,
|
|
870
|
+
"title": "",
|
|
871
|
+
"type": "paragraph"
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
"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",
|
|
879
|
+
"files": {
|
|
880
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
881
|
+
"title": "Hugging Face infer",
|
|
882
|
+
"hashes": {
|
|
883
|
+
"hugging-face-infer": {
|
|
884
|
+
"count": 1,
|
|
885
|
+
"title": "",
|
|
886
|
+
"type": "paragraph"
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
},
|
|
892
|
+
{
|
|
893
|
+
"search": "Each demo stays idle until you click Try. The model downloads only after consent.\n",
|
|
894
|
+
"files": {
|
|
895
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
896
|
+
"title": "Hugging Face infer",
|
|
897
|
+
"hashes": {
|
|
898
|
+
"examples": {
|
|
899
|
+
"count": 1,
|
|
900
|
+
"title": "Examples",
|
|
901
|
+
"type": "paragraph"
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
},
|
|
907
|
+
{
|
|
908
|
+
"search": "Image + depth / shader chains: Visual stack.\n",
|
|
909
|
+
"files": {
|
|
910
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
911
|
+
"title": "Hugging Face infer",
|
|
912
|
+
"hashes": {
|
|
913
|
+
"text--zero-shot-classification": {
|
|
914
|
+
"count": 1,
|
|
915
|
+
"title": "Text — `zero-shot-classification`",
|
|
916
|
+
"type": "paragraph"
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
},
|
|
922
|
+
{
|
|
923
|
+
"search": "Same component, different allowlist alias. Common patterns:\n",
|
|
924
|
+
"files": {
|
|
925
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
926
|
+
"title": "Hugging Face infer",
|
|
927
|
+
"hashes": {
|
|
928
|
+
"other-tasks-markup": {
|
|
929
|
+
"count": 1,
|
|
930
|
+
"title": "Other tasks (markup)",
|
|
931
|
+
"type": "paragraph"
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
},
|
|
937
|
+
{
|
|
938
|
+
"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",
|
|
939
|
+
"files": {
|
|
940
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
941
|
+
"title": "Hugging Face infer",
|
|
942
|
+
"hashes": {
|
|
943
|
+
"other-tasks-markup": {
|
|
944
|
+
"count": 1,
|
|
945
|
+
"title": "Other tasks (markup)",
|
|
946
|
+
"type": "paragraph"
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
},
|
|
952
|
+
{
|
|
953
|
+
"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",
|
|
954
|
+
"files": {
|
|
955
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
956
|
+
"title": "Hugging Face infer",
|
|
957
|
+
"hashes": {
|
|
958
|
+
"other-tasks-markup": {
|
|
959
|
+
"count": 1,
|
|
960
|
+
"title": "Other tasks (markup)",
|
|
961
|
+
"type": "paragraph"
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
},
|
|
967
|
+
{
|
|
968
|
+
"search": "Load concorde-hugging-face-infer.bundle.js after the core, then call ConcordeHF.configureHuggingFace(…) once. Details: CDN addons.\n",
|
|
969
|
+
"files": {
|
|
970
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
971
|
+
"title": "Hugging Face infer",
|
|
972
|
+
"hashes": {
|
|
973
|
+
"cdn-script--bootstrap": {
|
|
974
|
+
"count": 1,
|
|
975
|
+
"title": "CDN (script + bootstrap)",
|
|
976
|
+
"type": "paragraph"
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
"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",
|
|
984
|
+
"files": {
|
|
985
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
986
|
+
"title": "Hugging Face infer",
|
|
987
|
+
"hashes": {
|
|
988
|
+
"1-pin-and-host-the-runtime": {
|
|
989
|
+
"count": 1,
|
|
990
|
+
"title": "1. Pin and host the runtime",
|
|
991
|
+
"type": "paragraph"
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
"search": "The script prints size (sizeBytes) and license for you to verify.\n",
|
|
999
|
+
"files": {
|
|
1000
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1001
|
+
"title": "Hugging Face infer",
|
|
1002
|
+
"hashes": {
|
|
1003
|
+
"2-host-models-pinned-revision": {
|
|
1004
|
+
"count": 1,
|
|
1005
|
+
"title": "2. Host models (pinned revision)",
|
|
1006
|
+
"type": "paragraph"
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
},
|
|
1012
|
+
{
|
|
1013
|
+
"search": "Three ways to supply the runtime (runtime.source):\n",
|
|
1014
|
+
"files": {
|
|
1015
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1016
|
+
"title": "Hugging Face infer",
|
|
1017
|
+
"hashes": {
|
|
1018
|
+
"3-configure-once-at-startup": {
|
|
1019
|
+
"count": 1,
|
|
1020
|
+
"title": "3. Configure (once, at startup)",
|
|
1021
|
+
"type": "paragraph"
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
},
|
|
1027
|
+
{
|
|
1028
|
+
"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",
|
|
1029
|
+
"files": {
|
|
1030
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1031
|
+
"title": "Hugging Face infer",
|
|
1032
|
+
"hashes": {
|
|
1033
|
+
"markup": {
|
|
1034
|
+
"count": 1,
|
|
1035
|
+
"title": "Markup",
|
|
1036
|
+
"type": "paragraph"
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
"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",
|
|
1044
|
+
"files": {
|
|
1045
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1046
|
+
"title": "Hugging Face infer",
|
|
1047
|
+
"hashes": {
|
|
1048
|
+
"markup": {
|
|
1049
|
+
"count": 1,
|
|
1050
|
+
"title": "Markup",
|
|
1051
|
+
"type": "paragraph"
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
},
|
|
1057
|
+
{
|
|
1058
|
+
"search": "Ranking combines several inputs (events, vectors, query). With the TypeScript API:\n",
|
|
1059
|
+
"files": {
|
|
1060
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1061
|
+
"title": "Hugging Face infer",
|
|
1062
|
+
"hashes": {
|
|
1063
|
+
"markup": {
|
|
1064
|
+
"count": 1,
|
|
1065
|
+
"title": "Markup",
|
|
1066
|
+
"type": "paragraph"
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
},
|
|
1072
|
+
{
|
|
1073
|
+
"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",
|
|
1074
|
+
"files": {
|
|
1075
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1076
|
+
"title": "Hugging Face infer",
|
|
1077
|
+
"hashes": {
|
|
1078
|
+
"markup": {
|
|
1079
|
+
"count": 1,
|
|
1080
|
+
"title": "Markup",
|
|
1081
|
+
"type": "paragraph"
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
},
|
|
1087
|
+
{
|
|
1088
|
+
"search": "Methods: run(), loadModel(), accept(), decline().\n",
|
|
1089
|
+
"files": {
|
|
1090
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1091
|
+
"title": "Hugging Face infer",
|
|
1092
|
+
"hashes": {
|
|
1093
|
+
"attributes": {
|
|
1094
|
+
"count": 1,
|
|
1095
|
+
"title": "Attributes",
|
|
1096
|
+
"type": "paragraph"
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
},
|
|
1102
|
+
{
|
|
1103
|
+
"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",
|
|
1104
|
+
"files": {
|
|
1105
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1106
|
+
"title": "Hugging Face infer",
|
|
1107
|
+
"hashes": {
|
|
1108
|
+
"model-loading": {
|
|
1109
|
+
"count": 1,
|
|
1110
|
+
"title": "Model loading",
|
|
1111
|
+
"type": "paragraph"
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
},
|
|
1117
|
+
{
|
|
1118
|
+
"search": "Consent without JavaScript (SDUI):\n",
|
|
1119
|
+
"files": {
|
|
1120
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1121
|
+
"title": "Hugging Face infer",
|
|
1122
|
+
"hashes": {
|
|
1123
|
+
"model-loading": {
|
|
1124
|
+
"count": 1,
|
|
1125
|
+
"title": "Model loading",
|
|
1126
|
+
"type": "paragraph"
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
},
|
|
1132
|
+
{
|
|
1133
|
+
"search": "{outputProvider root}/_state_ → { status } (loading | ready | error | empty), like sonic-jsonata, for sonic-states.\n",
|
|
1134
|
+
"files": {
|
|
1135
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1136
|
+
"title": "Hugging Face infer",
|
|
1137
|
+
"hashes": {
|
|
1138
|
+
"states": {
|
|
1139
|
+
"count": 1,
|
|
1140
|
+
"title": "States",
|
|
1141
|
+
"type": "paragraph"
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
},
|
|
1147
|
+
{
|
|
1148
|
+
"search": "Detailed status on statusProvider:\n",
|
|
1149
|
+
"files": {
|
|
1150
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1151
|
+
"title": "Hugging Face infer",
|
|
1152
|
+
"hashes": {
|
|
1153
|
+
"states": {
|
|
1154
|
+
"count": 1,
|
|
1155
|
+
"title": "States",
|
|
1156
|
+
"type": "paragraph"
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
},
|
|
1162
|
+
{
|
|
1163
|
+
"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",
|
|
1164
|
+
"files": {
|
|
1165
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1166
|
+
"title": "Hugging Face infer",
|
|
1167
|
+
"hashes": {
|
|
1168
|
+
"webgpu-and-wasm": {
|
|
1169
|
+
"count": 1,
|
|
1170
|
+
"title": "WebGPU and WASM",
|
|
1171
|
+
"type": "paragraph"
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
},
|
|
1177
|
+
{
|
|
1178
|
+
"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",
|
|
1179
|
+
"files": {
|
|
1180
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1181
|
+
"title": "Hugging Face infer",
|
|
1182
|
+
"hashes": {
|
|
1183
|
+
"webgpu-and-wasm": {
|
|
1184
|
+
"count": 1,
|
|
1185
|
+
"title": "WebGPU and WASM",
|
|
1186
|
+
"type": "paragraph"
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
},
|
|
1192
|
+
{
|
|
1193
|
+
"search": "configureHuggingFace returns an API typed by the allowlist:\n",
|
|
1194
|
+
"files": {
|
|
1195
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1196
|
+
"title": "Hugging Face infer",
|
|
1197
|
+
"hashes": {
|
|
1198
|
+
"typescript": {
|
|
1199
|
+
"count": 1,
|
|
1200
|
+
"title": "TypeScript",
|
|
1201
|
+
"type": "paragraph"
|
|
1202
|
+
}
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
},
|
|
1207
|
+
{
|
|
1208
|
+
"search": "Cleanup: hf.clearModel(alias), hf.clearAll() (models, WASM, and results).\n",
|
|
1209
|
+
"files": {
|
|
1210
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1211
|
+
"title": "Hugging Face infer",
|
|
1212
|
+
"hashes": {
|
|
1213
|
+
"typescript": {
|
|
1214
|
+
"count": 1,
|
|
1215
|
+
"title": "TypeScript",
|
|
1216
|
+
"type": "paragraph"
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
}
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
"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",
|
|
1224
|
+
"files": {
|
|
1225
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1226
|
+
"title": "Hugging Face infer",
|
|
1227
|
+
"hashes": {
|
|
1228
|
+
"tasks-and-light-models": {
|
|
1229
|
+
"count": 1,
|
|
1230
|
+
"title": "Tasks and light models",
|
|
1231
|
+
"type": "paragraph"
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
},
|
|
1237
|
+
{
|
|
1238
|
+
"search": "Indicative sizes (quantized); verify with hf-vendor.mjs before allowlisting, including license:\n",
|
|
1239
|
+
"files": {
|
|
1240
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1241
|
+
"title": "Hugging Face infer",
|
|
1242
|
+
"hashes": {
|
|
1243
|
+
"tasks-and-light-models": {
|
|
1244
|
+
"count": 1,
|
|
1245
|
+
"title": "Tasks and light models",
|
|
1246
|
+
"type": "paragraph"
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
},
|
|
1252
|
+
{
|
|
1253
|
+
"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",
|
|
1254
|
+
"files": {
|
|
1255
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1256
|
+
"title": "Hugging Face infer",
|
|
1257
|
+
"hashes": {
|
|
1258
|
+
"tasks-and-light-models": {
|
|
1259
|
+
"count": 1,
|
|
1260
|
+
"title": "Tasks and light models",
|
|
1261
|
+
"type": "paragraph"
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
},
|
|
1267
|
+
{
|
|
1268
|
+
"search": "End-to-end (depth + shader / Harris) : Visual stack.\n",
|
|
1269
|
+
"files": {
|
|
1270
|
+
"core/components/functional/infer/hugging-face/hugging-face-infer.md": {
|
|
1271
|
+
"title": "Hugging Face infer",
|
|
1272
|
+
"hashes": {
|
|
1273
|
+
"tasks-and-light-models": {
|
|
1274
|
+
"count": 1,
|
|
1275
|
+
"title": "Tasks and light models",
|
|
1276
|
+
"type": "paragraph"
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
},
|
|
1282
|
+
{
|
|
1283
|
+
"search": "Jsonata",
|
|
1284
|
+
"files": {
|
|
1285
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1286
|
+
"title": "Jsonata",
|
|
1287
|
+
"hashes": {
|
|
1288
|
+
"jsonata": {
|
|
1289
|
+
"count": 1,
|
|
1290
|
+
"title": "",
|
|
1291
|
+
"type": "page"
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
}
|
|
1295
|
+
}
|
|
1296
|
+
},
|
|
1297
|
+
{
|
|
1298
|
+
"search": "sonic-jsonata : 1 input → expression → 1 output (readonly).\n",
|
|
1299
|
+
"files": {
|
|
1300
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1301
|
+
"title": "Jsonata",
|
|
1302
|
+
"hashes": {
|
|
1303
|
+
"jsonata": {
|
|
1304
|
+
"count": 1,
|
|
1305
|
+
"title": "",
|
|
1306
|
+
"type": "paragraph"
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
},
|
|
1312
|
+
{
|
|
1313
|
+
"search": "Unidirectional (fetch → compute → display), unlike sonic-mix.\n",
|
|
1314
|
+
"files": {
|
|
1315
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1316
|
+
"title": "Jsonata",
|
|
1317
|
+
"hashes": {
|
|
1318
|
+
"jsonata": {
|
|
1319
|
+
"count": 1,
|
|
1320
|
+
"title": "",
|
|
1321
|
+
"type": "paragraph"
|
|
1322
|
+
}
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
},
|
|
1327
|
+
{
|
|
1328
|
+
"search": "Offline : serviceURL="/docs-mock-api" — Local API demos.\n",
|
|
1329
|
+
"files": {
|
|
1330
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1331
|
+
"title": "Jsonata",
|
|
1332
|
+
"hashes": {
|
|
1333
|
+
"jsonata": {
|
|
1334
|
+
"count": 1,
|
|
1335
|
+
"title": "",
|
|
1336
|
+
"type": "paragraph"
|
|
1337
|
+
}
|
|
1338
|
+
}
|
|
1339
|
+
}
|
|
1340
|
+
}
|
|
1341
|
+
},
|
|
1342
|
+
{
|
|
1343
|
+
"search": "Change Top N → recalcul sans refetch.\n",
|
|
1344
|
+
"files": {
|
|
1345
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1346
|
+
"title": "Jsonata",
|
|
1347
|
+
"hashes": {
|
|
1348
|
+
"groupby--top-n": {
|
|
1349
|
+
"count": 1,
|
|
1350
|
+
"title": "Groupby + top N",
|
|
1351
|
+
"type": "paragraph"
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
},
|
|
1357
|
+
{
|
|
1358
|
+
"search": "Change Tax % → même idée.\n",
|
|
1359
|
+
"files": {
|
|
1360
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1361
|
+
"title": "Jsonata",
|
|
1362
|
+
"hashes": {
|
|
1363
|
+
"totaux-somme--taxe": {
|
|
1364
|
+
"count": 1,
|
|
1365
|
+
"title": "Totaux (somme + taxe)",
|
|
1366
|
+
"type": "paragraph"
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
},
|
|
1372
|
+
{
|
|
1373
|
+
"search": "$ucFirst · $currency · $percent · $date · $toChart(items, labelKey, valueKey, datasetLabel?) · $cosine · $rankBySimilarity · $mediaUrl(x) (string | {url} | {blobUrl})\n",
|
|
1374
|
+
"files": {
|
|
1375
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1376
|
+
"title": "Jsonata",
|
|
1377
|
+
"hashes": {
|
|
1378
|
+
"helpers": {
|
|
1379
|
+
"count": 1,
|
|
1380
|
+
"title": "Helpers",
|
|
1381
|
+
"type": "paragraph"
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
}
|
|
1386
|
+
},
|
|
1387
|
+
{
|
|
1388
|
+
"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",
|
|
1389
|
+
"files": {
|
|
1390
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1391
|
+
"title": "Jsonata",
|
|
1392
|
+
"hashes": {
|
|
1393
|
+
"helpers": {
|
|
1394
|
+
"count": 1,
|
|
1395
|
+
"title": "Helpers",
|
|
1396
|
+
"type": "paragraph"
|
|
1397
|
+
}
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1401
|
+
},
|
|
1402
|
+
{
|
|
1403
|
+
"search": "Pour du multi-entrées ou une fonction TS : primitive derive.\n",
|
|
1404
|
+
"files": {
|
|
1405
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1406
|
+
"title": "Jsonata",
|
|
1407
|
+
"hashes": {
|
|
1408
|
+
"markup": {
|
|
1409
|
+
"count": 1,
|
|
1410
|
+
"title": "Markup",
|
|
1411
|
+
"type": "paragraph"
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
},
|
|
1417
|
+
{
|
|
1418
|
+
"search": "Visual stack (3d → HF → jsonata → shader): Visual stack.\n",
|
|
1419
|
+
"files": {
|
|
1420
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1421
|
+
"title": "Jsonata",
|
|
1422
|
+
"hashes": {
|
|
1423
|
+
"markup": {
|
|
1424
|
+
"count": 1,
|
|
1425
|
+
"title": "Markup",
|
|
1426
|
+
"type": "paragraph"
|
|
1427
|
+
}
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
},
|
|
1432
|
+
{
|
|
1433
|
+
"search": "{output}/_state_ → { status, error? } (loading | ready | error | empty). Brancher avec sonic-states.\n",
|
|
1434
|
+
"files": {
|
|
1435
|
+
"core/components/functional/jsonata/jsonata.md": {
|
|
1436
|
+
"title": "Jsonata",
|
|
1437
|
+
"hashes": {
|
|
1438
|
+
"states": {
|
|
1439
|
+
"count": 1,
|
|
1440
|
+
"title": "States",
|
|
1441
|
+
"type": "paragraph"
|
|
1442
|
+
}
|
|
1443
|
+
}
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
},
|
|
1447
|
+
{
|
|
1448
|
+
"search": "List",
|
|
1449
|
+
"files": {
|
|
1450
|
+
"core/components/functional/list/list.md": {
|
|
1451
|
+
"title": "List",
|
|
1452
|
+
"hashes": {
|
|
1453
|
+
"list": {
|
|
1454
|
+
"count": 1,
|
|
1455
|
+
"title": "",
|
|
1456
|
+
"type": "page"
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
"search": "Try offline: serviceURL="/docs-mock-api" and dataProvider="api/users" with key="data" — see Local API demos. Recommended patterns: Data flow.\n",
|
|
1464
|
+
"files": {
|
|
1465
|
+
"core/components/functional/list/list.md": {
|
|
1466
|
+
"title": "List",
|
|
1467
|
+
"hashes": {
|
|
1468
|
+
"list": {
|
|
1469
|
+
"count": 1,
|
|
1470
|
+
"title": "",
|
|
1471
|
+
"type": "paragraph"
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
},
|
|
1477
|
+
{
|
|
1478
|
+
"search": "The sonic-list component renders one row per entry in props (array from fetch or set on the element).\n",
|
|
1479
|
+
"files": {
|
|
1480
|
+
"core/components/functional/list/list.md": {
|
|
1481
|
+
"title": "List",
|
|
1482
|
+
"hashes": {
|
|
1483
|
+
"list": {
|
|
1484
|
+
"count": 1,
|
|
1485
|
+
"title": "",
|
|
1486
|
+
"type": "paragraph"
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
"search": "List extends Subscriber and Fetcher:\n",
|
|
1494
|
+
"files": {
|
|
1495
|
+
"core/components/functional/list/list.md": {
|
|
1496
|
+
"title": "List",
|
|
1497
|
+
"hashes": {
|
|
1498
|
+
"list": {
|
|
1499
|
+
"count": 1,
|
|
1500
|
+
"title": "",
|
|
1501
|
+
"type": "paragraph"
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
}
|
|
1506
|
+
},
|
|
1507
|
+
{
|
|
1508
|
+
"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",
|
|
1509
|
+
"files": {
|
|
1510
|
+
"core/components/functional/list/list.md": {
|
|
1511
|
+
"title": "List",
|
|
1512
|
+
"hashes": {
|
|
1513
|
+
"row-renderer-items--recommended": {
|
|
1514
|
+
"count": 1,
|
|
1515
|
+
"title": "Row renderer (`items`) — recommended",
|
|
1516
|
+
"type": "paragraph"
|
|
1517
|
+
}
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
},
|
|
1522
|
+
{
|
|
1523
|
+
"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",
|
|
1524
|
+
"files": {
|
|
1525
|
+
"core/components/functional/list/list.md": {
|
|
1526
|
+
"title": "List",
|
|
1527
|
+
"hashes": {
|
|
1528
|
+
"row-renderer-items--recommended": {
|
|
1529
|
+
"count": 1,
|
|
1530
|
+
"title": "Row renderer (`items`) — recommended",
|
|
1531
|
+
"type": "paragraph"
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
}
|
|
1535
|
+
}
|
|
1536
|
+
},
|
|
1537
|
+
{
|
|
1538
|
+
"search": "Live demo + TypeScript source (one file, no Markdown copy):\n",
|
|
1539
|
+
"files": {
|
|
1540
|
+
"core/components/functional/list/list.md": {
|
|
1541
|
+
"title": "List",
|
|
1542
|
+
"hashes": {
|
|
1543
|
+
"row-renderer-items--recommended": {
|
|
1544
|
+
"count": 1,
|
|
1545
|
+
"title": "Row renderer (`items`) — recommended",
|
|
1546
|
+
"type": "paragraph"
|
|
1547
|
+
}
|
|
1548
|
+
}
|
|
1549
|
+
}
|
|
1550
|
+
}
|
|
1551
|
+
},
|
|
1552
|
+
{
|
|
1553
|
+
"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",
|
|
1554
|
+
"files": {
|
|
1555
|
+
"core/components/functional/list/list.md": {
|
|
1556
|
+
"title": "List",
|
|
1557
|
+
"hashes": {
|
|
1558
|
+
"row-renderer-items--recommended": {
|
|
1559
|
+
"count": 1,
|
|
1560
|
+
"title": "Row renderer (`items`) — recommended",
|
|
1561
|
+
"type": "paragraph"
|
|
1562
|
+
}
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1565
|
+
}
|
|
1566
|
+
},
|
|
1567
|
+
{
|
|
1568
|
+
"search": "Use metadata (even, odd, firstChild, …) or fields on each item (e.g. tpl with templateKey):\n",
|
|
1569
|
+
"files": {
|
|
1570
|
+
"core/components/functional/list/list.md": {
|
|
1571
|
+
"title": "List",
|
|
1572
|
+
"hashes": {
|
|
1573
|
+
"alternating-row-layouts": {
|
|
1574
|
+
"count": 1,
|
|
1575
|
+
"title": "Alternating row layouts",
|
|
1576
|
+
"type": "paragraph"
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
},
|
|
1582
|
+
{
|
|
1583
|
+
"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",
|
|
1584
|
+
"files": {
|
|
1585
|
+
"core/components/functional/list/list.md": {
|
|
1586
|
+
"title": "List",
|
|
1587
|
+
"hashes": {
|
|
1588
|
+
"html-template-children-integration-without-lit": {
|
|
1589
|
+
"count": 1,
|
|
1590
|
+
"title": "HTML `<template>` children (integration without Lit)",
|
|
1591
|
+
"type": "paragraph"
|
|
1592
|
+
}
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
}
|
|
1596
|
+
},
|
|
1597
|
+
{
|
|
1598
|
+
"search": "Each list row still gets dataProvider="[list]/list-item/[index]".\n",
|
|
1599
|
+
"files": {
|
|
1600
|
+
"core/components/functional/list/list.md": {
|
|
1601
|
+
"title": "List",
|
|
1602
|
+
"hashes": {
|
|
1603
|
+
"html-template-children-integration-without-lit": {
|
|
514
1604
|
"count": 1,
|
|
515
|
-
"title": "
|
|
1605
|
+
"title": "HTML `<template>` children (integration without Lit)",
|
|
516
1606
|
"type": "paragraph"
|
|
517
1607
|
}
|
|
518
1608
|
}
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
|
|
1609
|
+
}
|
|
1610
|
+
}
|
|
1611
|
+
},
|
|
1612
|
+
{
|
|
1613
|
+
"search": "Mix",
|
|
1614
|
+
"files": {
|
|
1615
|
+
"core/components/functional/mix/mix.md": {
|
|
1616
|
+
"title": "Mix",
|
|
522
1617
|
"hashes": {
|
|
523
|
-
"
|
|
1618
|
+
"mix": {
|
|
524
1619
|
"count": 1,
|
|
525
|
-
"title": "
|
|
526
|
-
"type": "
|
|
1620
|
+
"title": "",
|
|
1621
|
+
"type": "page"
|
|
527
1622
|
}
|
|
528
1623
|
}
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
|
|
1624
|
+
}
|
|
1625
|
+
}
|
|
1626
|
+
},
|
|
1627
|
+
{
|
|
1628
|
+
"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",
|
|
1629
|
+
"files": {
|
|
1630
|
+
"core/components/functional/mix/mix.md": {
|
|
1631
|
+
"title": "Mix",
|
|
532
1632
|
"hashes": {
|
|
533
|
-
"
|
|
1633
|
+
"mix": {
|
|
534
1634
|
"count": 1,
|
|
535
|
-
"title": "
|
|
1635
|
+
"title": "",
|
|
536
1636
|
"type": "paragraph"
|
|
537
1637
|
}
|
|
538
1638
|
}
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
|
|
1639
|
+
}
|
|
1640
|
+
}
|
|
1641
|
+
},
|
|
1642
|
+
{
|
|
1643
|
+
"search": "Dot notation is supported to extract a sub-part of the data.\n",
|
|
1644
|
+
"files": {
|
|
1645
|
+
"core/components/functional/mix/mix.md": {
|
|
1646
|
+
"title": "Mix",
|
|
542
1647
|
"hashes": {
|
|
543
|
-
"
|
|
544
|
-
"count": 1,
|
|
545
|
-
"title": "Bearer token (static)",
|
|
546
|
-
"type": "paragraph"
|
|
547
|
-
},
|
|
548
|
-
"tokenprovider--basic-auth": {
|
|
549
|
-
"count": 1,
|
|
550
|
-
"title": "tokenProvider + Basic auth",
|
|
551
|
-
"type": "paragraph"
|
|
552
|
-
},
|
|
553
|
-
"http-498--stale-token-refresh": {
|
|
554
|
-
"count": 1,
|
|
555
|
-
"title": "HTTP 498 — stale token refresh",
|
|
556
|
-
"type": "paragraph"
|
|
557
|
-
},
|
|
558
|
-
"eventsapitoken": {
|
|
559
|
-
"count": 1,
|
|
560
|
-
"title": "eventsApiToken",
|
|
561
|
-
"type": "paragraph"
|
|
562
|
-
},
|
|
563
|
-
"wording-api": {
|
|
564
|
-
"count": 1,
|
|
565
|
-
"title": "Wording API",
|
|
566
|
-
"type": "paragraph"
|
|
567
|
-
},
|
|
568
|
-
"scoped-attributes-html--sonic-scope": {
|
|
1648
|
+
"mix": {
|
|
569
1649
|
"count": 1,
|
|
570
|
-
"title": "
|
|
1650
|
+
"title": "",
|
|
571
1651
|
"type": "paragraph"
|
|
572
1652
|
}
|
|
573
1653
|
}
|
|
@@ -575,12 +1655,12 @@
|
|
|
575
1655
|
}
|
|
576
1656
|
},
|
|
577
1657
|
{
|
|
578
|
-
"search": "
|
|
1658
|
+
"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",
|
|
579
1659
|
"files": {
|
|
580
|
-
"core/components/functional/
|
|
581
|
-
"title": "
|
|
1660
|
+
"core/components/functional/mix/mix.md": {
|
|
1661
|
+
"title": "Mix",
|
|
582
1662
|
"hashes": {
|
|
583
|
-
"
|
|
1663
|
+
"mix": {
|
|
584
1664
|
"count": 1,
|
|
585
1665
|
"title": "",
|
|
586
1666
|
"type": "paragraph"
|
|
@@ -590,12 +1670,12 @@
|
|
|
590
1670
|
}
|
|
591
1671
|
},
|
|
592
1672
|
{
|
|
593
|
-
"search": "
|
|
1673
|
+
"search": "Queue",
|
|
594
1674
|
"files": {
|
|
595
|
-
"core/components/functional/
|
|
596
|
-
"title": "
|
|
1675
|
+
"core/components/functional/queue/queue.md": {
|
|
1676
|
+
"title": "Queue",
|
|
597
1677
|
"hashes": {
|
|
598
|
-
"
|
|
1678
|
+
"queue": {
|
|
599
1679
|
"count": 1,
|
|
600
1680
|
"title": "",
|
|
601
1681
|
"type": "page"
|
|
@@ -605,12 +1685,12 @@
|
|
|
605
1685
|
}
|
|
606
1686
|
},
|
|
607
1687
|
{
|
|
608
|
-
"search": "
|
|
1688
|
+
"search": "Try offline: serviceURL="/docs-mock-api" — see Local API demos. Row rendering: Data flow (.items property binding).\n",
|
|
609
1689
|
"files": {
|
|
610
|
-
"core/components/functional/
|
|
611
|
-
"title": "
|
|
1690
|
+
"core/components/functional/queue/queue.md": {
|
|
1691
|
+
"title": "Queue",
|
|
612
1692
|
"hashes": {
|
|
613
|
-
"
|
|
1693
|
+
"queue": {
|
|
614
1694
|
"count": 1,
|
|
615
1695
|
"title": "",
|
|
616
1696
|
"type": "paragraph"
|
|
@@ -620,12 +1700,12 @@
|
|
|
620
1700
|
}
|
|
621
1701
|
},
|
|
622
1702
|
{
|
|
623
|
-
"search": "
|
|
1703
|
+
"search": "sonic-queue loads data in batches. Each batch is an internal List with its own dataProvider (…/list-item/0, …/1, …).\n",
|
|
624
1704
|
"files": {
|
|
625
|
-
"core/components/functional/
|
|
626
|
-
"title": "
|
|
1705
|
+
"core/components/functional/queue/queue.md": {
|
|
1706
|
+
"title": "Queue",
|
|
627
1707
|
"hashes": {
|
|
628
|
-
"
|
|
1708
|
+
"queue": {
|
|
629
1709
|
"count": 1,
|
|
630
1710
|
"title": "",
|
|
631
1711
|
"type": "paragraph"
|
|
@@ -635,14 +1715,14 @@
|
|
|
635
1715
|
}
|
|
636
1716
|
},
|
|
637
1717
|
{
|
|
638
|
-
"search": "
|
|
1718
|
+
"search": "When the expression contains $offset and $limit, the queue:\n",
|
|
639
1719
|
"files": {
|
|
640
|
-
"core/components/functional/
|
|
641
|
-
"title": "
|
|
1720
|
+
"core/components/functional/queue/queue.md": {
|
|
1721
|
+
"title": "Queue",
|
|
642
1722
|
"hashes": {
|
|
643
|
-
"
|
|
1723
|
+
"lazy-load--offset-and-limit": {
|
|
644
1724
|
"count": 1,
|
|
645
|
-
"title": "",
|
|
1725
|
+
"title": "Lazy load — `$offset` and `$limit`",
|
|
646
1726
|
"type": "paragraph"
|
|
647
1727
|
}
|
|
648
1728
|
}
|
|
@@ -650,14 +1730,14 @@
|
|
|
650
1730
|
}
|
|
651
1731
|
},
|
|
652
1732
|
{
|
|
653
|
-
"search": "
|
|
1733
|
+
"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",
|
|
654
1734
|
"files": {
|
|
655
|
-
"core/components/functional/
|
|
656
|
-
"title": "
|
|
1735
|
+
"core/components/functional/queue/queue.md": {
|
|
1736
|
+
"title": "Queue",
|
|
657
1737
|
"hashes": {
|
|
658
|
-
"
|
|
1738
|
+
"lazy-load--offset-and-limit": {
|
|
659
1739
|
"count": 1,
|
|
660
|
-
"title": "
|
|
1740
|
+
"title": "Lazy load — `$offset` and `$limit`",
|
|
661
1741
|
"type": "paragraph"
|
|
662
1742
|
}
|
|
663
1743
|
}
|
|
@@ -665,14 +1745,14 @@
|
|
|
665
1745
|
}
|
|
666
1746
|
},
|
|
667
1747
|
{
|
|
668
|
-
"search": "
|
|
1748
|
+
"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",
|
|
669
1749
|
"files": {
|
|
670
|
-
"core/components/functional/
|
|
671
|
-
"title": "
|
|
1750
|
+
"core/components/functional/queue/queue.md": {
|
|
1751
|
+
"title": "Queue",
|
|
672
1752
|
"hashes": {
|
|
673
|
-
"
|
|
1753
|
+
"lazy-load--offset-and-limit": {
|
|
674
1754
|
"count": 1,
|
|
675
|
-
"title": "
|
|
1755
|
+
"title": "Lazy load — `$offset` and `$limit`",
|
|
676
1756
|
"type": "paragraph"
|
|
677
1757
|
}
|
|
678
1758
|
}
|
|
@@ -680,14 +1760,14 @@
|
|
|
680
1760
|
}
|
|
681
1761
|
},
|
|
682
1762
|
{
|
|
683
|
-
"search": "
|
|
1763
|
+
"search": "Try scrolling after load — batches of 4 users. Search e.g. George, Bluth, or zzz for empty results.\n",
|
|
684
1764
|
"files": {
|
|
685
|
-
"core/components/functional/
|
|
686
|
-
"title": "
|
|
1765
|
+
"core/components/functional/queue/queue.md": {
|
|
1766
|
+
"title": "Queue",
|
|
687
1767
|
"hashes": {
|
|
688
|
-
"
|
|
1768
|
+
"lazy-load--offset-and-limit": {
|
|
689
1769
|
"count": 1,
|
|
690
|
-
"title": "
|
|
1770
|
+
"title": "Lazy load — `$offset` and `$limit`",
|
|
691
1771
|
"type": "paragraph"
|
|
692
1772
|
}
|
|
693
1773
|
}
|
|
@@ -695,14 +1775,14 @@
|
|
|
695
1775
|
}
|
|
696
1776
|
},
|
|
697
1777
|
{
|
|
698
|
-
"search": "
|
|
1778
|
+
"search": "Without $offset in the expression, the queue behaves like a single list (one batch), e.g. geo communes below.\n",
|
|
699
1779
|
"files": {
|
|
700
|
-
"core/components/functional/
|
|
701
|
-
"title": "
|
|
1780
|
+
"core/components/functional/queue/queue.md": {
|
|
1781
|
+
"title": "Queue",
|
|
702
1782
|
"hashes": {
|
|
703
|
-
"
|
|
1783
|
+
"expression-example": {
|
|
704
1784
|
"count": 1,
|
|
705
|
-
"title": "
|
|
1785
|
+
"title": "Expression example",
|
|
706
1786
|
"type": "paragraph"
|
|
707
1787
|
}
|
|
708
1788
|
}
|
|
@@ -710,14 +1790,14 @@
|
|
|
710
1790
|
}
|
|
711
1791
|
},
|
|
712
1792
|
{
|
|
713
|
-
"search": "
|
|
1793
|
+
"search": "One search field (name="q") on formDataProvider="filter". The queue listens via dataFilterProvider="filter" and, on change:\n",
|
|
714
1794
|
"files": {
|
|
715
|
-
"core/components/functional/
|
|
716
|
-
"title": "
|
|
1795
|
+
"core/components/functional/queue/queue.md": {
|
|
1796
|
+
"title": "Queue",
|
|
717
1797
|
"hashes": {
|
|
718
|
-
"
|
|
1798
|
+
"filter--datafilterprovider--q": {
|
|
719
1799
|
"count": 1,
|
|
720
|
-
"title": "
|
|
1800
|
+
"title": "Filter — `dataFilterProvider` + `q`",
|
|
721
1801
|
"type": "paragraph"
|
|
722
1802
|
}
|
|
723
1803
|
}
|
|
@@ -725,14 +1805,14 @@
|
|
|
725
1805
|
}
|
|
726
1806
|
},
|
|
727
1807
|
{
|
|
728
|
-
"search": "
|
|
1808
|
+
"search": "Use filteredFields only when the form has extra fields that must not be sent to the API (e.g. filteredFields="rememberMe internalId").\n",
|
|
729
1809
|
"files": {
|
|
730
|
-
"core/components/functional/
|
|
731
|
-
"title": "
|
|
1810
|
+
"core/components/functional/queue/queue.md": {
|
|
1811
|
+
"title": "Queue",
|
|
732
1812
|
"hashes": {
|
|
733
|
-
"
|
|
1813
|
+
"filter--datafilterprovider--q": {
|
|
734
1814
|
"count": 1,
|
|
735
|
-
"title": "
|
|
1815
|
+
"title": "Filter — `dataFilterProvider` + `q`",
|
|
736
1816
|
"type": "paragraph"
|
|
737
1817
|
}
|
|
738
1818
|
}
|
|
@@ -740,29 +1820,29 @@
|
|
|
740
1820
|
}
|
|
741
1821
|
},
|
|
742
1822
|
{
|
|
743
|
-
"search": "
|
|
1823
|
+
"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",
|
|
744
1824
|
"files": {
|
|
745
|
-
"core/components/functional/
|
|
746
|
-
"title": "
|
|
1825
|
+
"core/components/functional/queue/queue.md": {
|
|
1826
|
+
"title": "Queue",
|
|
747
1827
|
"hashes": {
|
|
748
|
-
"
|
|
1828
|
+
"filter--datafilterprovider--q": {
|
|
749
1829
|
"count": 1,
|
|
750
|
-
"title": "",
|
|
751
|
-
"type": "
|
|
1830
|
+
"title": "Filter — `dataFilterProvider` + `q`",
|
|
1831
|
+
"type": "paragraph"
|
|
752
1832
|
}
|
|
753
1833
|
}
|
|
754
1834
|
}
|
|
755
1835
|
}
|
|
756
1836
|
},
|
|
757
1837
|
{
|
|
758
|
-
"search": "
|
|
1838
|
+
"search": "Geo communes: expression uses $limit only (no $offset) — one request, one batch.\n",
|
|
759
1839
|
"files": {
|
|
760
|
-
"core/components/functional/
|
|
761
|
-
"title": "
|
|
1840
|
+
"core/components/functional/queue/queue.md": {
|
|
1841
|
+
"title": "Queue",
|
|
762
1842
|
"hashes": {
|
|
763
|
-
"
|
|
1843
|
+
"simple-batch-no-lazy-scroll": {
|
|
764
1844
|
"count": 1,
|
|
765
|
-
"title": "",
|
|
1845
|
+
"title": "Simple batch (no lazy scroll)",
|
|
766
1846
|
"type": "paragraph"
|
|
767
1847
|
}
|
|
768
1848
|
}
|
|
@@ -770,14 +1850,14 @@
|
|
|
770
1850
|
}
|
|
771
1851
|
},
|
|
772
1852
|
{
|
|
773
|
-
"search": "
|
|
1853
|
+
"search": "Optional for hosts without Lit — see HTML integration.\n",
|
|
774
1854
|
"files": {
|
|
775
|
-
"core/components/functional/
|
|
776
|
-
"title": "
|
|
1855
|
+
"core/components/functional/queue/queue.md": {
|
|
1856
|
+
"title": "Queue",
|
|
777
1857
|
"hashes": {
|
|
778
|
-
"
|
|
1858
|
+
"html-template-children": {
|
|
779
1859
|
"count": 1,
|
|
780
|
-
"title": "",
|
|
1860
|
+
"title": "HTML `<template>` children",
|
|
781
1861
|
"type": "paragraph"
|
|
782
1862
|
}
|
|
783
1863
|
}
|
|
@@ -785,29 +1865,29 @@
|
|
|
785
1865
|
}
|
|
786
1866
|
},
|
|
787
1867
|
{
|
|
788
|
-
"search": "
|
|
1868
|
+
"search": "Router",
|
|
789
1869
|
"files": {
|
|
790
|
-
"core/components/functional/
|
|
791
|
-
"title": "
|
|
1870
|
+
"core/components/functional/router/router.md": {
|
|
1871
|
+
"title": "Router",
|
|
792
1872
|
"hashes": {
|
|
793
|
-
"
|
|
1873
|
+
"router": {
|
|
794
1874
|
"count": 1,
|
|
795
1875
|
"title": "",
|
|
796
|
-
"type": "
|
|
1876
|
+
"type": "page"
|
|
797
1877
|
}
|
|
798
1878
|
}
|
|
799
1879
|
}
|
|
800
1880
|
}
|
|
801
1881
|
},
|
|
802
1882
|
{
|
|
803
|
-
"search": "
|
|
1883
|
+
"search": "sonic-router watches document.location (pathname + hash) and renders the matching view.\n",
|
|
804
1884
|
"files": {
|
|
805
|
-
"core/components/functional/
|
|
806
|
-
"title": "
|
|
1885
|
+
"core/components/functional/router/router.md": {
|
|
1886
|
+
"title": "Router",
|
|
807
1887
|
"hashes": {
|
|
808
|
-
"
|
|
1888
|
+
"router": {
|
|
809
1889
|
"count": 1,
|
|
810
|
-
"title": "
|
|
1890
|
+
"title": "",
|
|
811
1891
|
"type": "paragraph"
|
|
812
1892
|
}
|
|
813
1893
|
}
|
|
@@ -815,14 +1895,14 @@
|
|
|
815
1895
|
}
|
|
816
1896
|
},
|
|
817
1897
|
{
|
|
818
|
-
"search": "
|
|
1898
|
+
"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",
|
|
819
1899
|
"files": {
|
|
820
|
-
"core/components/functional/
|
|
821
|
-
"title": "
|
|
1900
|
+
"core/components/functional/router/router.md": {
|
|
1901
|
+
"title": "Router",
|
|
822
1902
|
"hashes": {
|
|
823
|
-
"
|
|
1903
|
+
"router": {
|
|
824
1904
|
"count": 1,
|
|
825
|
-
"title": "
|
|
1905
|
+
"title": "",
|
|
826
1906
|
"type": "paragraph"
|
|
827
1907
|
}
|
|
828
1908
|
}
|
|
@@ -830,14 +1910,14 @@
|
|
|
830
1910
|
}
|
|
831
1911
|
},
|
|
832
1912
|
{
|
|
833
|
-
"search": "
|
|
1913
|
+
"search": "Legacy HTML <template data-route="…"> remains for hosts without Lit — HTML integration.\n",
|
|
834
1914
|
"files": {
|
|
835
|
-
"core/components/functional/
|
|
836
|
-
"title": "
|
|
1915
|
+
"core/components/functional/router/router.md": {
|
|
1916
|
+
"title": "Router",
|
|
837
1917
|
"hashes": {
|
|
838
|
-
"
|
|
1918
|
+
"router": {
|
|
839
1919
|
"count": 1,
|
|
840
|
-
"title": "
|
|
1920
|
+
"title": "",
|
|
841
1921
|
"type": "paragraph"
|
|
842
1922
|
}
|
|
843
1923
|
}
|
|
@@ -845,14 +1925,14 @@
|
|
|
845
1925
|
}
|
|
846
1926
|
},
|
|
847
1927
|
{
|
|
848
|
-
"search": "
|
|
1928
|
+
"search": "Route keys are matched against pathname + hash. A simple hash route #home matches when the location contains that segment.\n",
|
|
849
1929
|
"files": {
|
|
850
|
-
"core/components/functional/
|
|
851
|
-
"title": "
|
|
1930
|
+
"core/components/functional/router/router.md": {
|
|
1931
|
+
"title": "Router",
|
|
852
1932
|
"hashes": {
|
|
853
|
-
"
|
|
1933
|
+
"static-routes-no-parameters": {
|
|
854
1934
|
"count": 1,
|
|
855
|
-
"title": "
|
|
1935
|
+
"title": "Static routes (no parameters)",
|
|
856
1936
|
"type": "paragraph"
|
|
857
1937
|
}
|
|
858
1938
|
}
|
|
@@ -860,14 +1940,14 @@
|
|
|
860
1940
|
}
|
|
861
1941
|
},
|
|
862
1942
|
{
|
|
863
|
-
"search": "
|
|
1943
|
+
"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",
|
|
864
1944
|
"files": {
|
|
865
|
-
"core/components/functional/
|
|
866
|
-
"title": "
|
|
1945
|
+
"core/components/functional/router/router.md": {
|
|
1946
|
+
"title": "Router",
|
|
867
1947
|
"hashes": {
|
|
868
|
-
"
|
|
1948
|
+
"static-routes-no-parameters": {
|
|
869
1949
|
"count": 1,
|
|
870
|
-
"title": "
|
|
1950
|
+
"title": "Static routes (no parameters)",
|
|
871
1951
|
"type": "paragraph"
|
|
872
1952
|
}
|
|
873
1953
|
}
|
|
@@ -875,14 +1955,14 @@
|
|
|
875
1955
|
}
|
|
876
1956
|
},
|
|
877
1957
|
{
|
|
878
|
-
"search": "
|
|
1958
|
+
"search": "Two styles (see router.demo.ts and docs-router-params-demo):\n",
|
|
879
1959
|
"files": {
|
|
880
|
-
"core/components/functional/
|
|
881
|
-
"title": "
|
|
1960
|
+
"core/components/functional/router/router.md": {
|
|
1961
|
+
"title": "Router",
|
|
882
1962
|
"hashes": {
|
|
883
|
-
"
|
|
1963
|
+
"routes-with-parameters": {
|
|
884
1964
|
"count": 1,
|
|
885
|
-
"title": "
|
|
1965
|
+
"title": "Routes with parameters",
|
|
886
1966
|
"type": "paragraph"
|
|
887
1967
|
}
|
|
888
1968
|
}
|
|
@@ -890,14 +1970,14 @@
|
|
|
890
1970
|
}
|
|
891
1971
|
},
|
|
892
1972
|
{
|
|
893
|
-
"search": "
|
|
1973
|
+
"search": "Key uses :param segments. The render function receives an object { param: string }.\n",
|
|
894
1974
|
"files": {
|
|
895
|
-
"core/components/functional/
|
|
896
|
-
"title": "
|
|
1975
|
+
"core/components/functional/router/router.md": {
|
|
1976
|
+
"title": "Router",
|
|
897
1977
|
"hashes": {
|
|
898
|
-
"
|
|
1978
|
+
"url-pattern-name": {
|
|
899
1979
|
"count": 1,
|
|
900
|
-
"title": "
|
|
1980
|
+
"title": "Url-pattern (`:name`)",
|
|
901
1981
|
"type": "paragraph"
|
|
902
1982
|
}
|
|
903
1983
|
}
|
|
@@ -905,29 +1985,29 @@
|
|
|
905
1985
|
}
|
|
906
1986
|
},
|
|
907
1987
|
{
|
|
908
|
-
"search": "
|
|
1988
|
+
"search": "Key is a RegExp string with (\\d+) / (\\w+) groups. The render function receives an array of captured strings (in order).\n",
|
|
909
1989
|
"files": {
|
|
910
|
-
"core/components/functional/
|
|
911
|
-
"title": "
|
|
1990
|
+
"core/components/functional/router/router.md": {
|
|
1991
|
+
"title": "Router",
|
|
912
1992
|
"hashes": {
|
|
913
|
-
"
|
|
1993
|
+
"regexp-capturing-groups": {
|
|
914
1994
|
"count": 1,
|
|
915
|
-
"title": "",
|
|
916
|
-
"type": "
|
|
1995
|
+
"title": "RegExp (capturing groups)",
|
|
1996
|
+
"type": "paragraph"
|
|
917
1997
|
}
|
|
918
1998
|
}
|
|
919
1999
|
}
|
|
920
2000
|
}
|
|
921
2001
|
},
|
|
922
2002
|
{
|
|
923
|
-
"search": "
|
|
2003
|
+
"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",
|
|
924
2004
|
"files": {
|
|
925
|
-
"core/components/functional/
|
|
926
|
-
"title": "
|
|
2005
|
+
"core/components/functional/router/router.md": {
|
|
2006
|
+
"title": "Router",
|
|
927
2007
|
"hashes": {
|
|
928
|
-
"
|
|
2008
|
+
"regexp-capturing-groups": {
|
|
929
2009
|
"count": 1,
|
|
930
|
-
"title": "",
|
|
2010
|
+
"title": "RegExp (capturing groups)",
|
|
931
2011
|
"type": "paragraph"
|
|
932
2012
|
}
|
|
933
2013
|
}
|
|
@@ -935,14 +2015,14 @@
|
|
|
935
2015
|
}
|
|
936
2016
|
},
|
|
937
2017
|
{
|
|
938
|
-
"search": "
|
|
2018
|
+
"search": "Always use .routes=${…} in Lit templates: route handlers are functions and must be set as properties, not HTML attributes.\n",
|
|
939
2019
|
"files": {
|
|
940
|
-
"core/components/functional/
|
|
941
|
-
"title": "
|
|
2020
|
+
"core/components/functional/router/router.md": {
|
|
2021
|
+
"title": "Router",
|
|
942
2022
|
"hashes": {
|
|
943
|
-
"
|
|
2023
|
+
"routes-binding": {
|
|
944
2024
|
"count": 1,
|
|
945
|
-
"title": "",
|
|
2025
|
+
"title": "`.routes` binding",
|
|
946
2026
|
"type": "paragraph"
|
|
947
2027
|
}
|
|
948
2028
|
}
|
|
@@ -950,14 +2030,14 @@
|
|
|
950
2030
|
}
|
|
951
2031
|
},
|
|
952
2032
|
{
|
|
953
|
-
"search": "
|
|
2033
|
+
"search": "Separate component: redirect when data appears on a publisher (login steps, wizards). Not part of the .routes map.\n",
|
|
954
2034
|
"files": {
|
|
955
|
-
"core/components/functional/
|
|
956
|
-
"title": "
|
|
2035
|
+
"core/components/functional/router/router.md": {
|
|
2036
|
+
"title": "Router",
|
|
957
2037
|
"hashes": {
|
|
958
|
-
"
|
|
2038
|
+
"sonic-redirect": {
|
|
959
2039
|
"count": 1,
|
|
960
|
-
"title": "",
|
|
2040
|
+
"title": "`sonic-redirect`",
|
|
961
2041
|
"type": "paragraph"
|
|
962
2042
|
}
|
|
963
2043
|
}
|
|
@@ -965,29 +2045,29 @@
|
|
|
965
2045
|
}
|
|
966
2046
|
},
|
|
967
2047
|
{
|
|
968
|
-
"search": "
|
|
2048
|
+
"search": "Example: combine with .routes and submit for login / logout / profile steps.\n",
|
|
969
2049
|
"files": {
|
|
970
|
-
"core/components/functional/
|
|
971
|
-
"title": "
|
|
2050
|
+
"core/components/functional/router/router.md": {
|
|
2051
|
+
"title": "Router",
|
|
972
2052
|
"hashes": {
|
|
973
|
-
"
|
|
2053
|
+
"sonic-redirect": {
|
|
974
2054
|
"count": 1,
|
|
975
|
-
"title": "",
|
|
976
|
-
"type": "
|
|
2055
|
+
"title": "`sonic-redirect`",
|
|
2056
|
+
"type": "paragraph"
|
|
977
2057
|
}
|
|
978
2058
|
}
|
|
979
2059
|
}
|
|
980
2060
|
}
|
|
981
2061
|
},
|
|
982
2062
|
{
|
|
983
|
-
"search": "
|
|
2063
|
+
"search": "sonic-router-demo (router.demo.ts) — home, user profile (#user/:id/:slug), products RegExp, fallback 404.\n",
|
|
984
2064
|
"files": {
|
|
985
|
-
"core/components/functional/
|
|
986
|
-
"title": "
|
|
2065
|
+
"core/components/functional/router/router.md": {
|
|
2066
|
+
"title": "Router",
|
|
987
2067
|
"hashes": {
|
|
988
|
-
"
|
|
2068
|
+
"package-demo": {
|
|
989
2069
|
"count": 1,
|
|
990
|
-
"title": "",
|
|
2070
|
+
"title": "Package demo",
|
|
991
2071
|
"type": "paragraph"
|
|
992
2072
|
}
|
|
993
2073
|
}
|
|
@@ -995,29 +2075,29 @@
|
|
|
995
2075
|
}
|
|
996
2076
|
},
|
|
997
2077
|
{
|
|
998
|
-
"search": "
|
|
2078
|
+
"search": "SDUI",
|
|
999
2079
|
"files": {
|
|
1000
|
-
"core/components/functional/
|
|
1001
|
-
"title": "
|
|
2080
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2081
|
+
"title": "SDUI",
|
|
1002
2082
|
"hashes": {
|
|
1003
|
-
"
|
|
2083
|
+
"sdui": {
|
|
1004
2084
|
"count": 1,
|
|
1005
2085
|
"title": "",
|
|
1006
|
-
"type": "
|
|
2086
|
+
"type": "page"
|
|
1007
2087
|
}
|
|
1008
2088
|
}
|
|
1009
2089
|
}
|
|
1010
2090
|
}
|
|
1011
2091
|
},
|
|
1012
2092
|
{
|
|
1013
|
-
"search": "
|
|
2093
|
+
"search": "SDUI stands for Server Driven User Interfaces.\nBasically, it generates a user interface based on a JSON SDUI Descriptor.\n",
|
|
1014
2094
|
"files": {
|
|
1015
|
-
"core/components/functional/
|
|
1016
|
-
"title": "
|
|
2095
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2096
|
+
"title": "SDUI",
|
|
1017
2097
|
"hashes": {
|
|
1018
|
-
"
|
|
2098
|
+
"what-is-sdui": {
|
|
1019
2099
|
"count": 1,
|
|
1020
|
-
"title": "
|
|
2100
|
+
"title": "What is SDUI?",
|
|
1021
2101
|
"type": "paragraph"
|
|
1022
2102
|
}
|
|
1023
2103
|
}
|
|
@@ -1025,14 +2105,14 @@
|
|
|
1025
2105
|
}
|
|
1026
2106
|
},
|
|
1027
2107
|
{
|
|
1028
|
-
"search": "
|
|
2108
|
+
"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",
|
|
1029
2109
|
"files": {
|
|
1030
|
-
"core/components/functional/
|
|
1031
|
-
"title": "
|
|
2110
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2111
|
+
"title": "SDUI",
|
|
1032
2112
|
"hashes": {
|
|
1033
|
-
"
|
|
2113
|
+
"subscriber-extension": {
|
|
1034
2114
|
"count": 1,
|
|
1035
|
-
"title": "
|
|
2115
|
+
"title": "Subscriber extension:",
|
|
1036
2116
|
"type": "paragraph"
|
|
1037
2117
|
}
|
|
1038
2118
|
}
|
|
@@ -1040,14 +2120,14 @@
|
|
|
1040
2120
|
}
|
|
1041
2121
|
},
|
|
1042
2122
|
{
|
|
1043
|
-
"search": "
|
|
2123
|
+
"search": "SDUI extends the mixin Fetcher as Fetch and List.\n",
|
|
1044
2124
|
"files": {
|
|
1045
|
-
"core/components/functional/
|
|
1046
|
-
"title": "
|
|
2125
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2126
|
+
"title": "SDUI",
|
|
1047
2127
|
"hashes": {
|
|
1048
|
-
"
|
|
2128
|
+
"fetcher-extension": {
|
|
1049
2129
|
"count": 1,
|
|
1050
|
-
"title": "
|
|
2130
|
+
"title": "Fetcher extension:",
|
|
1051
2131
|
"type": "paragraph"
|
|
1052
2132
|
}
|
|
1053
2133
|
}
|
|
@@ -1055,14 +2135,14 @@
|
|
|
1055
2135
|
}
|
|
1056
2136
|
},
|
|
1057
2137
|
{
|
|
1058
|
-
"search": "
|
|
2138
|
+
"search": "In this case, it will parse the JSON coming from the request.\nThe JSON must comply with the SDUI descriptor format.\n",
|
|
1059
2139
|
"files": {
|
|
1060
|
-
"core/components/functional/
|
|
1061
|
-
"title": "
|
|
2140
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2141
|
+
"title": "SDUI",
|
|
1062
2142
|
"hashes": {
|
|
1063
|
-
"
|
|
2143
|
+
"fetcher-extension": {
|
|
1064
2144
|
"count": 1,
|
|
1065
|
-
"title": "
|
|
2145
|
+
"title": "Fetcher extension:",
|
|
1066
2146
|
"type": "paragraph"
|
|
1067
2147
|
}
|
|
1068
2148
|
}
|
|
@@ -1070,14 +2150,14 @@
|
|
|
1070
2150
|
}
|
|
1071
2151
|
},
|
|
1072
2152
|
{
|
|
1073
|
-
"search": "
|
|
2153
|
+
"search": "As a fetcher, invalidating the publisher or updating the endpoint will trigger a new fetch and update accordingly.\n",
|
|
1074
2154
|
"files": {
|
|
1075
|
-
"core/components/functional/
|
|
1076
|
-
"title": "
|
|
2155
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2156
|
+
"title": "SDUI",
|
|
1077
2157
|
"hashes": {
|
|
1078
|
-
"
|
|
2158
|
+
"fetcher-extension": {
|
|
1079
2159
|
"count": 1,
|
|
1080
|
-
"title": "
|
|
2160
|
+
"title": "Fetcher extension:",
|
|
1081
2161
|
"type": "paragraph"
|
|
1082
2162
|
}
|
|
1083
2163
|
}
|
|
@@ -1085,14 +2165,14 @@
|
|
|
1085
2165
|
}
|
|
1086
2166
|
},
|
|
1087
2167
|
{
|
|
1088
|
-
"search": "
|
|
2168
|
+
"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",
|
|
1089
2169
|
"files": {
|
|
1090
|
-
"core/components/functional/
|
|
1091
|
-
"title": "
|
|
2170
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2171
|
+
"title": "SDUI",
|
|
1092
2172
|
"hashes": {
|
|
1093
|
-
"
|
|
2173
|
+
"rendering": {
|
|
1094
2174
|
"count": 1,
|
|
1095
|
-
"title": "
|
|
2175
|
+
"title": "Rendering:",
|
|
1096
2176
|
"type": "paragraph"
|
|
1097
2177
|
}
|
|
1098
2178
|
}
|
|
@@ -1100,14 +2180,14 @@
|
|
|
1100
2180
|
}
|
|
1101
2181
|
},
|
|
1102
2182
|
{
|
|
1103
|
-
"search": "
|
|
2183
|
+
"search": "An SDUINode represents an HTMLElement.\n",
|
|
1104
2184
|
"files": {
|
|
1105
|
-
"core/components/functional/
|
|
1106
|
-
"title": "
|
|
2185
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2186
|
+
"title": "SDUI",
|
|
1107
2187
|
"hashes": {
|
|
1108
|
-
"
|
|
2188
|
+
"descriptor": {
|
|
1109
2189
|
"count": 1,
|
|
1110
|
-
"title": "
|
|
2190
|
+
"title": "Descriptor",
|
|
1111
2191
|
"type": "paragraph"
|
|
1112
2192
|
}
|
|
1113
2193
|
}
|
|
@@ -1115,14 +2195,14 @@
|
|
|
1115
2195
|
}
|
|
1116
2196
|
},
|
|
1117
2197
|
{
|
|
1118
|
-
"search": "
|
|
2198
|
+
"search": "TypeScript definition:\n",
|
|
1119
2199
|
"files": {
|
|
1120
|
-
"core/components/functional/
|
|
1121
|
-
"title": "
|
|
2200
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2201
|
+
"title": "SDUI",
|
|
1122
2202
|
"hashes": {
|
|
1123
|
-
"
|
|
2203
|
+
"descriptor": {
|
|
1124
2204
|
"count": 1,
|
|
1125
|
-
"title": "
|
|
2205
|
+
"title": "Descriptor",
|
|
1126
2206
|
"type": "paragraph"
|
|
1127
2207
|
}
|
|
1128
2208
|
}
|
|
@@ -1130,14 +2210,14 @@
|
|
|
1130
2210
|
}
|
|
1131
2211
|
},
|
|
1132
2212
|
{
|
|
1133
|
-
"search": "
|
|
2213
|
+
"search": "Summary of properties:\n",
|
|
1134
2214
|
"files": {
|
|
1135
|
-
"core/components/functional/
|
|
1136
|
-
"title": "
|
|
2215
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2216
|
+
"title": "SDUI",
|
|
1137
2217
|
"hashes": {
|
|
1138
|
-
"
|
|
2218
|
+
"descriptor": {
|
|
1139
2219
|
"count": 1,
|
|
1140
|
-
"title": "
|
|
2220
|
+
"title": "Descriptor",
|
|
1141
2221
|
"type": "paragraph"
|
|
1142
2222
|
}
|
|
1143
2223
|
}
|
|
@@ -1145,14 +2225,14 @@
|
|
|
1145
2225
|
}
|
|
1146
2226
|
},
|
|
1147
2227
|
{
|
|
1148
|
-
"search": "
|
|
2228
|
+
"search": "Use it if you prefer to define your node entirely using an HTML string.\n",
|
|
1149
2229
|
"files": {
|
|
1150
|
-
"core/components/functional/
|
|
1151
|
-
"title": "
|
|
2230
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2231
|
+
"title": "SDUI",
|
|
1152
2232
|
"hashes": {
|
|
1153
|
-
"
|
|
2233
|
+
"markup": {
|
|
1154
2234
|
"count": 1,
|
|
1155
|
-
"title": "
|
|
2235
|
+
"title": "Markup",
|
|
1156
2236
|
"type": "paragraph"
|
|
1157
2237
|
}
|
|
1158
2238
|
}
|
|
@@ -1160,29 +2240,29 @@
|
|
|
1160
2240
|
}
|
|
1161
2241
|
},
|
|
1162
2242
|
{
|
|
1163
|
-
"search": "
|
|
2243
|
+
"search": "Here we use the field tagName of SDUINode to create an element with tag name sonic-input.\n",
|
|
1164
2244
|
"files": {
|
|
1165
|
-
"core/components/functional/
|
|
1166
|
-
"title": "
|
|
2245
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2246
|
+
"title": "SDUI",
|
|
1167
2247
|
"hashes": {
|
|
1168
|
-
"
|
|
2248
|
+
"tag-name": {
|
|
1169
2249
|
"count": 1,
|
|
1170
|
-
"title": "",
|
|
1171
|
-
"type": "
|
|
2250
|
+
"title": "Tag name",
|
|
2251
|
+
"type": "paragraph"
|
|
1172
2252
|
}
|
|
1173
2253
|
}
|
|
1174
2254
|
}
|
|
1175
2255
|
}
|
|
1176
2256
|
},
|
|
1177
2257
|
{
|
|
1178
|
-
"search": "
|
|
2258
|
+
"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",
|
|
1179
2259
|
"files": {
|
|
1180
|
-
"core/components/functional/
|
|
1181
|
-
"title": "
|
|
2260
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2261
|
+
"title": "SDUI",
|
|
1182
2262
|
"hashes": {
|
|
1183
|
-
"
|
|
2263
|
+
"attributes": {
|
|
1184
2264
|
"count": 1,
|
|
1185
|
-
"title": "",
|
|
2265
|
+
"title": "Attributes",
|
|
1186
2266
|
"type": "paragraph"
|
|
1187
2267
|
}
|
|
1188
2268
|
}
|
|
@@ -1190,14 +2270,14 @@
|
|
|
1190
2270
|
}
|
|
1191
2271
|
},
|
|
1192
2272
|
{
|
|
1193
|
-
"search": "
|
|
2273
|
+
"search": "Children of the current node can be added using the field nodes recursively.\n",
|
|
1194
2274
|
"files": {
|
|
1195
|
-
"core/components/functional/
|
|
1196
|
-
"title": "
|
|
2275
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2276
|
+
"title": "SDUI",
|
|
1197
2277
|
"hashes": {
|
|
1198
|
-
"
|
|
2278
|
+
"nodes": {
|
|
1199
2279
|
"count": 1,
|
|
1200
|
-
"title": "",
|
|
2280
|
+
"title": "Nodes",
|
|
1201
2281
|
"type": "paragraph"
|
|
1202
2282
|
}
|
|
1203
2283
|
}
|
|
@@ -1205,14 +2285,14 @@
|
|
|
1205
2285
|
}
|
|
1206
2286
|
},
|
|
1207
2287
|
{
|
|
1208
|
-
"search": "
|
|
2288
|
+
"search": "As no tag name is defined, a div element is created, and then we use innerHTML to add content to it.\n",
|
|
1209
2289
|
"files": {
|
|
1210
|
-
"core/components/functional/
|
|
1211
|
-
"title": "
|
|
2290
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2291
|
+
"title": "SDUI",
|
|
1212
2292
|
"hashes": {
|
|
1213
|
-
"
|
|
2293
|
+
"innerhtml": {
|
|
1214
2294
|
"count": 1,
|
|
1215
|
-
"title": "",
|
|
2295
|
+
"title": "InnerHTML",
|
|
1216
2296
|
"type": "paragraph"
|
|
1217
2297
|
}
|
|
1218
2298
|
}
|
|
@@ -1220,14 +2300,14 @@
|
|
|
1220
2300
|
}
|
|
1221
2301
|
},
|
|
1222
2302
|
{
|
|
1223
|
-
"search": "
|
|
2303
|
+
"search": "Use them if you want to wrap the component with some HTML string.\n",
|
|
1224
2304
|
"files": {
|
|
1225
|
-
"core/components/functional/
|
|
1226
|
-
"title": "
|
|
2305
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2306
|
+
"title": "SDUI",
|
|
1227
2307
|
"hashes": {
|
|
1228
|
-
"
|
|
2308
|
+
"prefix-and-suffix": {
|
|
1229
2309
|
"count": 1,
|
|
1230
|
-
"title": "
|
|
2310
|
+
"title": "Prefix and suffix",
|
|
1231
2311
|
"type": "paragraph"
|
|
1232
2312
|
}
|
|
1233
2313
|
}
|
|
@@ -1235,14 +2315,14 @@
|
|
|
1235
2315
|
}
|
|
1236
2316
|
},
|
|
1237
2317
|
{
|
|
1238
|
-
"search": "
|
|
2318
|
+
"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",
|
|
1239
2319
|
"files": {
|
|
1240
|
-
"core/components/functional/
|
|
1241
|
-
"title": "
|
|
2320
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2321
|
+
"title": "SDUI",
|
|
1242
2322
|
"hashes": {
|
|
1243
|
-
"
|
|
2323
|
+
"library-key-and-contentelementselector": {
|
|
1244
2324
|
"count": 1,
|
|
1245
|
-
"title": "
|
|
2325
|
+
"title": "Library key and contentElementSelector",
|
|
1246
2326
|
"type": "paragraph"
|
|
1247
2327
|
}
|
|
1248
2328
|
}
|
|
@@ -1250,14 +2330,14 @@
|
|
|
1250
2330
|
}
|
|
1251
2331
|
},
|
|
1252
2332
|
{
|
|
1253
|
-
"search": "
|
|
2333
|
+
"search": "Note that the SDUI has a default library containing some basic component definitions useful for form declaration (see default-library.json).\n",
|
|
1254
2334
|
"files": {
|
|
1255
|
-
"core/components/functional/
|
|
1256
|
-
"title": "
|
|
2335
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2336
|
+
"title": "SDUI",
|
|
1257
2337
|
"hashes": {
|
|
1258
|
-
"
|
|
2338
|
+
"library-key-and-contentelementselector": {
|
|
1259
2339
|
"count": 1,
|
|
1260
|
-
"title": "
|
|
2340
|
+
"title": "Library key and contentElementSelector",
|
|
1261
2341
|
"type": "paragraph"
|
|
1262
2342
|
}
|
|
1263
2343
|
}
|
|
@@ -1265,14 +2345,14 @@
|
|
|
1265
2345
|
}
|
|
1266
2346
|
},
|
|
1267
2347
|
{
|
|
1268
|
-
"search": "
|
|
2348
|
+
"search": "This example uses the library key submit which points to a sonic-submit containing a button also coming from the library.\n",
|
|
1269
2349
|
"files": {
|
|
1270
|
-
"core/components/functional/
|
|
1271
|
-
"title": "
|
|
2350
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2351
|
+
"title": "SDUI",
|
|
1272
2352
|
"hashes": {
|
|
1273
|
-
"
|
|
2353
|
+
"library-key-and-contentelementselector": {
|
|
1274
2354
|
"count": 1,
|
|
1275
|
-
"title": "
|
|
2355
|
+
"title": "Library key and contentElementSelector",
|
|
1276
2356
|
"type": "paragraph"
|
|
1277
2357
|
}
|
|
1278
2358
|
}
|
|
@@ -1280,14 +2360,14 @@
|
|
|
1280
2360
|
}
|
|
1281
2361
|
},
|
|
1282
2362
|
{
|
|
1283
|
-
"search": "
|
|
2363
|
+
"search": "The element named button in the library is a sonic-button of type success containing a check icon as a prefix.\n",
|
|
1284
2364
|
"files": {
|
|
1285
|
-
"core/components/functional/
|
|
1286
|
-
"title": "
|
|
2365
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2366
|
+
"title": "SDUI",
|
|
1287
2367
|
"hashes": {
|
|
1288
|
-
"
|
|
2368
|
+
"library-key-and-contentelementselector": {
|
|
1289
2369
|
"count": 1,
|
|
1290
|
-
"title": "
|
|
2370
|
+
"title": "Library key and contentElementSelector",
|
|
1291
2371
|
"type": "paragraph"
|
|
1292
2372
|
}
|
|
1293
2373
|
}
|
|
@@ -1295,14 +2375,14 @@
|
|
|
1295
2375
|
}
|
|
1296
2376
|
},
|
|
1297
2377
|
{
|
|
1298
|
-
"search": "
|
|
2378
|
+
"search": "Since the submit library element contains an attribute contentElementSelector with the value sonic-button, the "injected content" is put inside the button.\n",
|
|
1299
2379
|
"files": {
|
|
1300
|
-
"core/components/functional/
|
|
1301
|
-
"title": "
|
|
2380
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2381
|
+
"title": "SDUI",
|
|
1302
2382
|
"hashes": {
|
|
1303
|
-
"
|
|
2383
|
+
"library-key-and-contentelementselector": {
|
|
1304
2384
|
"count": 1,
|
|
1305
|
-
"title": "
|
|
2385
|
+
"title": "Library key and contentElementSelector",
|
|
1306
2386
|
"type": "paragraph"
|
|
1307
2387
|
}
|
|
1308
2388
|
}
|
|
@@ -1310,14 +2390,14 @@
|
|
|
1310
2390
|
}
|
|
1311
2391
|
},
|
|
1312
2392
|
{
|
|
1313
|
-
"search": "
|
|
2393
|
+
"search": "We used innerHTML for the sake of simplicity, but you can use nodes to add any complex content.\n",
|
|
1314
2394
|
"files": {
|
|
1315
|
-
"core/components/functional/
|
|
1316
|
-
"title": "
|
|
2395
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2396
|
+
"title": "SDUI",
|
|
1317
2397
|
"hashes": {
|
|
1318
|
-
"
|
|
2398
|
+
"library-key-and-contentelementselector": {
|
|
1319
2399
|
"count": 1,
|
|
1320
|
-
"title": "
|
|
2400
|
+
"title": "Library key and contentElementSelector",
|
|
1321
2401
|
"type": "paragraph"
|
|
1322
2402
|
}
|
|
1323
2403
|
}
|
|
@@ -1325,14 +2405,14 @@
|
|
|
1325
2405
|
}
|
|
1326
2406
|
},
|
|
1327
2407
|
{
|
|
1328
|
-
"search": "
|
|
2408
|
+
"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",
|
|
1329
2409
|
"files": {
|
|
1330
|
-
"core/components/functional/
|
|
1331
|
-
"title": "
|
|
2410
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2411
|
+
"title": "SDUI",
|
|
1332
2412
|
"hashes": {
|
|
1333
|
-
"
|
|
2413
|
+
"parentelementselector": {
|
|
1334
2414
|
"count": 1,
|
|
1335
|
-
"title": "
|
|
2415
|
+
"title": "parentElementSelector",
|
|
1336
2416
|
"type": "paragraph"
|
|
1337
2417
|
}
|
|
1338
2418
|
}
|
|
@@ -1340,14 +2420,14 @@
|
|
|
1340
2420
|
}
|
|
1341
2421
|
},
|
|
1342
2422
|
{
|
|
1343
|
-
"search": "
|
|
2423
|
+
"search": "⚠️ Note that it doesn't work with top-level nodes.\n",
|
|
1344
2424
|
"files": {
|
|
1345
|
-
"core/components/functional/
|
|
1346
|
-
"title": "
|
|
2425
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2426
|
+
"title": "SDUI",
|
|
1347
2427
|
"hashes": {
|
|
1348
|
-
"
|
|
2428
|
+
"parentelementselector": {
|
|
1349
2429
|
"count": 1,
|
|
1350
|
-
"title": "
|
|
2430
|
+
"title": "parentElementSelector",
|
|
1351
2431
|
"type": "paragraph"
|
|
1352
2432
|
}
|
|
1353
2433
|
}
|
|
@@ -1355,14 +2435,14 @@
|
|
|
1355
2435
|
}
|
|
1356
2436
|
},
|
|
1357
2437
|
{
|
|
1358
|
-
"search": "
|
|
2438
|
+
"search": "The transformers let you transform the structure of the SDUI Descriptor into a new one before parsing and rendering it.\n",
|
|
1359
2439
|
"files": {
|
|
1360
|
-
"core/components/functional/
|
|
1361
|
-
"title": "
|
|
2440
|
+
"core/components/functional/sdui/sdui.md": {
|
|
2441
|
+
"title": "SDUI",
|
|
1362
2442
|
"hashes": {
|
|
1363
|
-
"
|
|
2443
|
+
"transformers": {
|
|
1364
2444
|
"count": 1,
|
|
1365
|
-
"title": "
|
|
2445
|
+
"title": "Transformers:",
|
|
1366
2446
|
"type": "paragraph"
|
|
1367
2447
|
}
|
|
1368
2448
|
}
|
|
@@ -1370,29 +2450,29 @@
|
|
|
1370
2450
|
}
|
|
1371
2451
|
},
|
|
1372
2452
|
{
|
|
1373
|
-
"search": "
|
|
2453
|
+
"search": "To enable it, you must fill the transformation attribute of the component with a URL pointing to a Transform descriptor.\n",
|
|
1374
2454
|
"files": {
|
|
1375
2455
|
"core/components/functional/sdui/sdui.md": {
|
|
1376
2456
|
"title": "SDUI",
|
|
1377
2457
|
"hashes": {
|
|
1378
|
-
"
|
|
2458
|
+
"transformers": {
|
|
1379
2459
|
"count": 1,
|
|
1380
|
-
"title": "",
|
|
1381
|
-
"type": "
|
|
2460
|
+
"title": "Transformers:",
|
|
2461
|
+
"type": "paragraph"
|
|
1382
2462
|
}
|
|
1383
2463
|
}
|
|
1384
2464
|
}
|
|
1385
2465
|
}
|
|
1386
2466
|
},
|
|
1387
2467
|
{
|
|
1388
|
-
"search": "
|
|
2468
|
+
"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",
|
|
1389
2469
|
"files": {
|
|
1390
2470
|
"core/components/functional/sdui/sdui.md": {
|
|
1391
2471
|
"title": "SDUI",
|
|
1392
2472
|
"hashes": {
|
|
1393
|
-
"
|
|
2473
|
+
"the-library": {
|
|
1394
2474
|
"count": 1,
|
|
1395
|
-
"title": "
|
|
2475
|
+
"title": "The library:",
|
|
1396
2476
|
"type": "paragraph"
|
|
1397
2477
|
}
|
|
1398
2478
|
}
|
|
@@ -1400,14 +2480,14 @@
|
|
|
1400
2480
|
}
|
|
1401
2481
|
},
|
|
1402
2482
|
{
|
|
1403
|
-
"search": "
|
|
2483
|
+
"search": "Each transform represents an action that will be done on the SDUI descriptor before the creation of the entire UI.\n",
|
|
1404
2484
|
"files": {
|
|
1405
2485
|
"core/components/functional/sdui/sdui.md": {
|
|
1406
2486
|
"title": "SDUI",
|
|
1407
2487
|
"hashes": {
|
|
1408
|
-
"
|
|
2488
|
+
"the-transform-actions": {
|
|
1409
2489
|
"count": 1,
|
|
1410
|
-
"title": "
|
|
2490
|
+
"title": "The transform actions:",
|
|
1411
2491
|
"type": "paragraph"
|
|
1412
2492
|
}
|
|
1413
2493
|
}
|
|
@@ -1415,14 +2495,14 @@
|
|
|
1415
2495
|
}
|
|
1416
2496
|
},
|
|
1417
2497
|
{
|
|
1418
|
-
"search": "
|
|
2498
|
+
"search": "The action that will be done is a verb:\n",
|
|
1419
2499
|
"files": {
|
|
1420
2500
|
"core/components/functional/sdui/sdui.md": {
|
|
1421
2501
|
"title": "SDUI",
|
|
1422
2502
|
"hashes": {
|
|
1423
|
-
"
|
|
2503
|
+
"the-transform-actions": {
|
|
1424
2504
|
"count": 1,
|
|
1425
|
-
"title": "
|
|
2505
|
+
"title": "The transform actions:",
|
|
1426
2506
|
"type": "paragraph"
|
|
1427
2507
|
}
|
|
1428
2508
|
}
|
|
@@ -1430,14 +2510,14 @@
|
|
|
1430
2510
|
}
|
|
1431
2511
|
},
|
|
1432
2512
|
{
|
|
1433
|
-
"search": "In this case,
|
|
2513
|
+
"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",
|
|
1434
2514
|
"files": {
|
|
1435
2515
|
"core/components/functional/sdui/sdui.md": {
|
|
1436
2516
|
"title": "SDUI",
|
|
1437
2517
|
"hashes": {
|
|
1438
|
-
"
|
|
2518
|
+
"sduikey": {
|
|
1439
2519
|
"count": 1,
|
|
1440
|
-
"title": "
|
|
2520
|
+
"title": "sduiKey",
|
|
1441
2521
|
"type": "paragraph"
|
|
1442
2522
|
}
|
|
1443
2523
|
}
|
|
@@ -1445,14 +2525,14 @@
|
|
|
1445
2525
|
}
|
|
1446
2526
|
},
|
|
1447
2527
|
{
|
|
1448
|
-
"search": "
|
|
2528
|
+
"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",
|
|
1449
2529
|
"files": {
|
|
1450
2530
|
"core/components/functional/sdui/sdui.md": {
|
|
1451
2531
|
"title": "SDUI",
|
|
1452
2532
|
"hashes": {
|
|
1453
|
-
"
|
|
2533
|
+
"messagekey": {
|
|
1454
2534
|
"count": 1,
|
|
1455
|
-
"title": "
|
|
2535
|
+
"title": "messageKey",
|
|
1456
2536
|
"type": "paragraph"
|
|
1457
2537
|
}
|
|
1458
2538
|
}
|
|
@@ -1460,14 +2540,14 @@
|
|
|
1460
2540
|
}
|
|
1461
2541
|
},
|
|
1462
2542
|
{
|
|
1463
|
-
"search": "
|
|
2543
|
+
"search": "Example of JSON with messageKey=messages:\n\n",
|
|
1464
2544
|
"files": {
|
|
1465
2545
|
"core/components/functional/sdui/sdui.md": {
|
|
1466
2546
|
"title": "SDUI",
|
|
1467
2547
|
"hashes": {
|
|
1468
|
-
"
|
|
2548
|
+
"messagekey": {
|
|
1469
2549
|
"count": 1,
|
|
1470
|
-
"title": "
|
|
2550
|
+
"title": "messageKey",
|
|
1471
2551
|
"type": "paragraph"
|
|
1472
2552
|
}
|
|
1473
2553
|
}
|
|
@@ -1475,14 +2555,14 @@
|
|
|
1475
2555
|
}
|
|
1476
2556
|
},
|
|
1477
2557
|
{
|
|
1478
|
-
"search": "
|
|
2558
|
+
"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",
|
|
1479
2559
|
"files": {
|
|
1480
2560
|
"core/components/functional/sdui/sdui.md": {
|
|
1481
2561
|
"title": "SDUI",
|
|
1482
2562
|
"hashes": {
|
|
1483
|
-
"
|
|
2563
|
+
"library": {
|
|
1484
2564
|
"count": 1,
|
|
1485
|
-
"title": "
|
|
2565
|
+
"title": "library",
|
|
1486
2566
|
"type": "paragraph"
|
|
1487
2567
|
}
|
|
1488
2568
|
}
|
|
@@ -1490,14 +2570,14 @@
|
|
|
1490
2570
|
}
|
|
1491
2571
|
},
|
|
1492
2572
|
{
|
|
1493
|
-
"search": "
|
|
2573
|
+
"search": "Here is a little playground to let you test some simple tricks.\n",
|
|
1494
2574
|
"files": {
|
|
1495
2575
|
"core/components/functional/sdui/sdui.md": {
|
|
1496
2576
|
"title": "SDUI",
|
|
1497
2577
|
"hashes": {
|
|
1498
|
-
"
|
|
2578
|
+
"playground": {
|
|
1499
2579
|
"count": 1,
|
|
1500
|
-
"title": "
|
|
2580
|
+
"title": "Playground",
|
|
1501
2581
|
"type": "paragraph"
|
|
1502
2582
|
}
|
|
1503
2583
|
}
|
|
@@ -1505,14 +2585,29 @@
|
|
|
1505
2585
|
}
|
|
1506
2586
|
},
|
|
1507
2587
|
{
|
|
1508
|
-
"search": "
|
|
2588
|
+
"search": "Shader",
|
|
1509
2589
|
"files": {
|
|
1510
|
-
"core/components/functional/
|
|
1511
|
-
"title": "
|
|
2590
|
+
"core/components/functional/shader/shader.md": {
|
|
2591
|
+
"title": "Shader",
|
|
1512
2592
|
"hashes": {
|
|
1513
|
-
"
|
|
2593
|
+
"shader": {
|
|
1514
2594
|
"count": 1,
|
|
1515
|
-
"title": "
|
|
2595
|
+
"title": "",
|
|
2596
|
+
"type": "page"
|
|
2597
|
+
}
|
|
2598
|
+
}
|
|
2599
|
+
}
|
|
2600
|
+
}
|
|
2601
|
+
},
|
|
2602
|
+
{
|
|
2603
|
+
"search": "sonic-shader — renderer WebGL2 compatible ShaderToy (pass Image + buffers A–D + Common).\n",
|
|
2604
|
+
"files": {
|
|
2605
|
+
"core/components/functional/shader/shader.md": {
|
|
2606
|
+
"title": "Shader",
|
|
2607
|
+
"hashes": {
|
|
2608
|
+
"shader": {
|
|
2609
|
+
"count": 1,
|
|
2610
|
+
"title": "",
|
|
1516
2611
|
"type": "paragraph"
|
|
1517
2612
|
}
|
|
1518
2613
|
}
|
|
@@ -1520,14 +2615,14 @@
|
|
|
1520
2615
|
}
|
|
1521
2616
|
},
|
|
1522
2617
|
{
|
|
1523
|
-
"search": "
|
|
2618
|
+
"search": "For WGSL / WebGPU (1 pass, same DP glue): sonic-webgpu.\n",
|
|
1524
2619
|
"files": {
|
|
1525
|
-
"core/components/functional/
|
|
1526
|
-
"title": "
|
|
2620
|
+
"core/components/functional/shader/shader.md": {
|
|
2621
|
+
"title": "Shader",
|
|
1527
2622
|
"hashes": {
|
|
1528
|
-
"
|
|
2623
|
+
"shader": {
|
|
1529
2624
|
"count": 1,
|
|
1530
|
-
"title": "
|
|
2625
|
+
"title": "",
|
|
1531
2626
|
"type": "paragraph"
|
|
1532
2627
|
}
|
|
1533
2628
|
}
|
|
@@ -1535,14 +2630,14 @@
|
|
|
1535
2630
|
}
|
|
1536
2631
|
},
|
|
1537
2632
|
{
|
|
1538
|
-
"search": "
|
|
2633
|
+
"search": "CDN (after the core): concorde-shader.bundle.js — see CDN addons.\n",
|
|
1539
2634
|
"files": {
|
|
1540
|
-
"core/components/functional/
|
|
1541
|
-
"title": "
|
|
2635
|
+
"core/components/functional/shader/shader.md": {
|
|
2636
|
+
"title": "Shader",
|
|
1542
2637
|
"hashes": {
|
|
1543
|
-
"
|
|
2638
|
+
"shader": {
|
|
1544
2639
|
"count": 1,
|
|
1545
|
-
"title": "
|
|
2640
|
+
"title": "",
|
|
1546
2641
|
"type": "paragraph"
|
|
1547
2642
|
}
|
|
1548
2643
|
}
|
|
@@ -1550,14 +2645,14 @@
|
|
|
1550
2645
|
}
|
|
1551
2646
|
},
|
|
1552
2647
|
{
|
|
1553
|
-
"search": "
|
|
2648
|
+
"search": "Uniforms supportés : iResolution, iTime, iTimeDelta, iFrame, iFrameRate, iMouse, iDate, iChannel0–3, iChannelResolution, iChannelTime, iSampleRate, uParam0–3.\n",
|
|
1554
2649
|
"files": {
|
|
1555
|
-
"core/components/functional/
|
|
1556
|
-
"title": "
|
|
2650
|
+
"core/components/functional/shader/shader.md": {
|
|
2651
|
+
"title": "Shader",
|
|
1557
2652
|
"hashes": {
|
|
1558
|
-
"
|
|
2653
|
+
"shader": {
|
|
1559
2654
|
"count": 1,
|
|
1560
|
-
"title": "
|
|
2655
|
+
"title": "",
|
|
1561
2656
|
"type": "paragraph"
|
|
1562
2657
|
}
|
|
1563
2658
|
}
|
|
@@ -1565,14 +2660,14 @@
|
|
|
1565
2660
|
}
|
|
1566
2661
|
},
|
|
1567
2662
|
{
|
|
1568
|
-
"search": "
|
|
2663
|
+
"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",
|
|
1569
2664
|
"files": {
|
|
1570
|
-
"core/components/functional/
|
|
1571
|
-
"title": "
|
|
2665
|
+
"core/components/functional/shader/shader.md": {
|
|
2666
|
+
"title": "Shader",
|
|
1572
2667
|
"hashes": {
|
|
1573
|
-
"
|
|
2668
|
+
"shader": {
|
|
1574
2669
|
"count": 1,
|
|
1575
|
-
"title": "
|
|
2670
|
+
"title": "",
|
|
1576
2671
|
"type": "paragraph"
|
|
1577
2672
|
}
|
|
1578
2673
|
}
|
|
@@ -1580,14 +2675,14 @@
|
|
|
1580
2675
|
}
|
|
1581
2676
|
},
|
|
1582
2677
|
{
|
|
1583
|
-
"search": "
|
|
2678
|
+
"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",
|
|
1584
2679
|
"files": {
|
|
1585
|
-
"core/components/functional/
|
|
1586
|
-
"title": "
|
|
2680
|
+
"core/components/functional/shader/shader.md": {
|
|
2681
|
+
"title": "Shader",
|
|
1587
2682
|
"hashes": {
|
|
1588
|
-
"
|
|
2683
|
+
"multipass-sur-une-photo": {
|
|
1589
2684
|
"count": 1,
|
|
1590
|
-
"title": "
|
|
2685
|
+
"title": "Multipass sur une photo",
|
|
1591
2686
|
"type": "paragraph"
|
|
1592
2687
|
}
|
|
1593
2688
|
}
|
|
@@ -1595,14 +2690,14 @@
|
|
|
1595
2690
|
}
|
|
1596
2691
|
},
|
|
1597
2692
|
{
|
|
1598
|
-
"search": "
|
|
2693
|
+
"search": "Photo + depth parallax (HF): Visual stack.\n",
|
|
1599
2694
|
"files": {
|
|
1600
|
-
"core/components/functional/
|
|
1601
|
-
"title": "
|
|
2695
|
+
"core/components/functional/shader/shader.md": {
|
|
2696
|
+
"title": "Shader",
|
|
1602
2697
|
"hashes": {
|
|
1603
|
-
"
|
|
2698
|
+
"multipass-sur-une-photo": {
|
|
1604
2699
|
"count": 1,
|
|
1605
|
-
"title": "
|
|
2700
|
+
"title": "Multipass sur une photo",
|
|
1606
2701
|
"type": "paragraph"
|
|
1607
2702
|
}
|
|
1608
2703
|
}
|
|
@@ -1610,14 +2705,14 @@
|
|
|
1610
2705
|
}
|
|
1611
2706
|
},
|
|
1612
2707
|
{
|
|
1613
|
-
"search": "
|
|
2708
|
+
"search": "Live 3D → shader (no JPEG): Visual stack.\n",
|
|
1614
2709
|
"files": {
|
|
1615
|
-
"core/components/functional/
|
|
1616
|
-
"title": "
|
|
2710
|
+
"core/components/functional/shader/shader.md": {
|
|
2711
|
+
"title": "Shader",
|
|
1617
2712
|
"hashes": {
|
|
1618
|
-
"
|
|
2713
|
+
"multipass-sur-une-photo": {
|
|
1619
2714
|
"count": 1,
|
|
1620
|
-
"title": "
|
|
2715
|
+
"title": "Multipass sur une photo",
|
|
1621
2716
|
"type": "paragraph"
|
|
1622
2717
|
}
|
|
1623
2718
|
}
|
|
@@ -1625,14 +2720,14 @@
|
|
|
1625
2720
|
}
|
|
1626
2721
|
},
|
|
1627
2722
|
{
|
|
1628
|
-
"search": "
|
|
2723
|
+
"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",
|
|
1629
2724
|
"files": {
|
|
1630
|
-
"core/components/functional/
|
|
1631
|
-
"title": "
|
|
2725
|
+
"core/components/functional/shader/shader.md": {
|
|
2726
|
+
"title": "Shader",
|
|
1632
2727
|
"hashes": {
|
|
1633
|
-
"
|
|
2728
|
+
"chaînage-deffets-officiel": {
|
|
1634
2729
|
"count": 1,
|
|
1635
|
-
"title": "
|
|
2730
|
+
"title": "Chaînage d’effets (officiel)",
|
|
1636
2731
|
"type": "paragraph"
|
|
1637
2732
|
}
|
|
1638
2733
|
}
|
|
@@ -1640,14 +2735,14 @@
|
|
|
1640
2735
|
}
|
|
1641
2736
|
},
|
|
1642
2737
|
{
|
|
1643
|
-
"search": "
|
|
2738
|
+
"search": "Les passes intermédiaires sont déjà offscreen (FBO). Pas besoin d’un second sonic-shader invisible pour du multipass interne.\n",
|
|
1644
2739
|
"files": {
|
|
1645
|
-
"core/components/functional/
|
|
1646
|
-
"title": "
|
|
2740
|
+
"core/components/functional/shader/shader.md": {
|
|
2741
|
+
"title": "Shader",
|
|
1647
2742
|
"hashes": {
|
|
1648
|
-
"
|
|
2743
|
+
"chaînage-deffets-officiel": {
|
|
1649
2744
|
"count": 1,
|
|
1650
|
-
"title": "
|
|
2745
|
+
"title": "Chaînage d’effets (officiel)",
|
|
1651
2746
|
"type": "paragraph"
|
|
1652
2747
|
}
|
|
1653
2748
|
}
|
|
@@ -1655,14 +2750,14 @@
|
|
|
1655
2750
|
}
|
|
1656
2751
|
},
|
|
1657
2752
|
{
|
|
1658
|
-
"search": "
|
|
2753
|
+
"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",
|
|
1659
2754
|
"files": {
|
|
1660
|
-
"core/components/functional/
|
|
1661
|
-
"title": "
|
|
2755
|
+
"core/components/functional/shader/shader.md": {
|
|
2756
|
+
"title": "Shader",
|
|
1662
2757
|
"hashes": {
|
|
1663
|
-
"
|
|
2758
|
+
"chaînage-deffets-officiel": {
|
|
1664
2759
|
"count": 1,
|
|
1665
|
-
"title": "
|
|
2760
|
+
"title": "Chaînage d’effets (officiel)",
|
|
1666
2761
|
"type": "paragraph"
|
|
1667
2762
|
}
|
|
1668
2763
|
}
|
|
@@ -1670,14 +2765,14 @@
|
|
|
1670
2765
|
}
|
|
1671
2766
|
},
|
|
1672
2767
|
{
|
|
1673
|
-
"search": "
|
|
2768
|
+
"search": "Exemple de câblage :\n",
|
|
1674
2769
|
"files": {
|
|
1675
|
-
"core/components/functional/
|
|
1676
|
-
"title": "
|
|
2770
|
+
"core/components/functional/shader/shader.md": {
|
|
2771
|
+
"title": "Shader",
|
|
1677
2772
|
"hashes": {
|
|
1678
|
-
"
|
|
2773
|
+
"chaînage-deffets-officiel": {
|
|
1679
2774
|
"count": 1,
|
|
1680
|
-
"title": "
|
|
2775
|
+
"title": "Chaînage d’effets (officiel)",
|
|
1681
2776
|
"type": "paragraph"
|
|
1682
2777
|
}
|
|
1683
2778
|
}
|
|
@@ -1685,14 +2780,14 @@
|
|
|
1685
2780
|
}
|
|
1686
2781
|
},
|
|
1687
2782
|
{
|
|
1688
|
-
"search": "
|
|
2783
|
+
"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",
|
|
1689
2784
|
"files": {
|
|
1690
|
-
"core/components/functional/
|
|
1691
|
-
"title": "
|
|
2785
|
+
"core/components/functional/shader/shader.md": {
|
|
2786
|
+
"title": "Shader",
|
|
1692
2787
|
"hashes": {
|
|
1693
|
-
"
|
|
2788
|
+
"rollover--roll-out-hover-param": {
|
|
1694
2789
|
"count": 1,
|
|
1695
|
-
"title": "
|
|
2790
|
+
"title": "Rollover / roll-out (`hover-param`)",
|
|
1696
2791
|
"type": "paragraph"
|
|
1697
2792
|
}
|
|
1698
2793
|
}
|
|
@@ -1700,14 +2795,14 @@
|
|
|
1700
2795
|
}
|
|
1701
2796
|
},
|
|
1702
2797
|
{
|
|
1703
|
-
"search": "
|
|
2798
|
+
"search": "Type : ShaderHoverParam = 0 | 1 | 2 | 3 | "param0"…"param3" | "".\n",
|
|
1704
2799
|
"files": {
|
|
1705
|
-
"core/components/functional/
|
|
1706
|
-
"title": "
|
|
2800
|
+
"core/components/functional/shader/shader.md": {
|
|
2801
|
+
"title": "Shader",
|
|
1707
2802
|
"hashes": {
|
|
1708
|
-
"
|
|
2803
|
+
"rollover--roll-out-hover-param": {
|
|
1709
2804
|
"count": 1,
|
|
1710
|
-
"title": "
|
|
2805
|
+
"title": "Rollover / roll-out (`hover-param`)",
|
|
1711
2806
|
"type": "paragraph"
|
|
1712
2807
|
}
|
|
1713
2808
|
}
|
|
@@ -1715,14 +2810,14 @@
|
|
|
1715
2810
|
}
|
|
1716
2811
|
},
|
|
1717
2812
|
{
|
|
1718
|
-
"search": "
|
|
2813
|
+
"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",
|
|
1719
2814
|
"files": {
|
|
1720
|
-
"core/components/functional/
|
|
1721
|
-
"title": "
|
|
2815
|
+
"core/components/functional/shader/shader.md": {
|
|
2816
|
+
"title": "Shader",
|
|
1722
2817
|
"hashes": {
|
|
1723
|
-
"
|
|
2818
|
+
"sortie--sampling-sample--dataprovider": {
|
|
1724
2819
|
"count": 1,
|
|
1725
|
-
"title": "
|
|
2820
|
+
"title": "Sortie / sampling (`sample` + dataProvider)",
|
|
1726
2821
|
"type": "paragraph"
|
|
1727
2822
|
}
|
|
1728
2823
|
}
|
|
@@ -1730,14 +2825,14 @@
|
|
|
1730
2825
|
}
|
|
1731
2826
|
},
|
|
1732
2827
|
{
|
|
1733
|
-
"search": "
|
|
2828
|
+
"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",
|
|
1734
2829
|
"files": {
|
|
1735
|
-
"core/components/functional/
|
|
1736
|
-
"title": "
|
|
2830
|
+
"core/components/functional/shader/shader.md": {
|
|
2831
|
+
"title": "Shader",
|
|
1737
2832
|
"hashes": {
|
|
1738
|
-
"
|
|
2833
|
+
"sortie--sampling-sample--dataprovider": {
|
|
1739
2834
|
"count": 1,
|
|
1740
|
-
"title": "
|
|
2835
|
+
"title": "Sortie / sampling (`sample` + dataProvider)",
|
|
1741
2836
|
"type": "paragraph"
|
|
1742
2837
|
}
|
|
1743
2838
|
}
|
|
@@ -1745,14 +2840,14 @@
|
|
|
1745
2840
|
}
|
|
1746
2841
|
},
|
|
1747
2842
|
{
|
|
1748
|
-
"search": "
|
|
2843
|
+
"search": "Pattern typique — écoute frame + lecture massive :\n",
|
|
1749
2844
|
"files": {
|
|
1750
|
-
"core/components/functional/
|
|
1751
|
-
"title": "
|
|
2845
|
+
"core/components/functional/shader/shader.md": {
|
|
2846
|
+
"title": "Shader",
|
|
1752
2847
|
"hashes": {
|
|
1753
|
-
"
|
|
2848
|
+
"sortie--sampling-sample--dataprovider": {
|
|
1754
2849
|
"count": 1,
|
|
1755
|
-
"title": "
|
|
2850
|
+
"title": "Sortie / sampling (`sample` + dataProvider)",
|
|
1756
2851
|
"type": "paragraph"
|
|
1757
2852
|
}
|
|
1758
2853
|
}
|
|
@@ -1760,14 +2855,14 @@
|
|
|
1760
2855
|
}
|
|
1761
2856
|
},
|
|
1762
2857
|
{
|
|
1763
|
-
"search": "
|
|
2858
|
+
"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",
|
|
1764
2859
|
"files": {
|
|
1765
|
-
"core/components/functional/
|
|
1766
|
-
"title": "
|
|
2860
|
+
"core/components/functional/shader/shader.md": {
|
|
2861
|
+
"title": "Shader",
|
|
1767
2862
|
"hashes": {
|
|
1768
|
-
"
|
|
2863
|
+
"extraction-patches--singularities-extract": {
|
|
1769
2864
|
"count": 1,
|
|
1770
|
-
"title": "
|
|
2865
|
+
"title": "Extraction patches / singularities (`extract`)",
|
|
1771
2866
|
"type": "paragraph"
|
|
1772
2867
|
}
|
|
1773
2868
|
}
|
|
@@ -1775,14 +2870,14 @@
|
|
|
1775
2870
|
}
|
|
1776
2871
|
},
|
|
1777
2872
|
{
|
|
1778
|
-
"search": "
|
|
2873
|
+
"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",
|
|
1779
2874
|
"files": {
|
|
1780
|
-
"core/components/functional/
|
|
1781
|
-
"title": "
|
|
2875
|
+
"core/components/functional/shader/shader.md": {
|
|
2876
|
+
"title": "Shader",
|
|
1782
2877
|
"hashes": {
|
|
1783
|
-
"
|
|
2878
|
+
"extraction-patches--singularities-extract": {
|
|
1784
2879
|
"count": 1,
|
|
1785
|
-
"title": "
|
|
2880
|
+
"title": "Extraction patches / singularities (`extract`)",
|
|
1786
2881
|
"type": "paragraph"
|
|
1787
2882
|
}
|
|
1788
2883
|
}
|
|
@@ -1790,14 +2885,14 @@
|
|
|
1790
2885
|
}
|
|
1791
2886
|
},
|
|
1792
2887
|
{
|
|
1793
|
-
"search": "
|
|
2888
|
+
"search": "Lazy: no readPixels without a DP reader / extract event listener.\n",
|
|
1794
2889
|
"files": {
|
|
1795
|
-
"core/components/functional/
|
|
1796
|
-
"title": "
|
|
2890
|
+
"core/components/functional/shader/shader.md": {
|
|
2891
|
+
"title": "Shader",
|
|
1797
2892
|
"hashes": {
|
|
1798
|
-
"
|
|
2893
|
+
"extraction-patches--singularities-extract": {
|
|
1799
2894
|
"count": 1,
|
|
1800
|
-
"title": "
|
|
2895
|
+
"title": "Extraction patches / singularities (`extract`)",
|
|
1801
2896
|
"type": "paragraph"
|
|
1802
2897
|
}
|
|
1803
2898
|
}
|
|
@@ -1805,14 +2900,14 @@
|
|
|
1805
2900
|
}
|
|
1806
2901
|
},
|
|
1807
2902
|
{
|
|
1808
|
-
"search": "
|
|
2903
|
+
"search": "Live Harris → patches → WebGPU: Visual stack.\n",
|
|
1809
2904
|
"files": {
|
|
1810
|
-
"core/components/functional/
|
|
1811
|
-
"title": "
|
|
2905
|
+
"core/components/functional/shader/shader.md": {
|
|
2906
|
+
"title": "Shader",
|
|
1812
2907
|
"hashes": {
|
|
1813
|
-
"
|
|
2908
|
+
"extraction-patches--singularities-extract": {
|
|
1814
2909
|
"count": 1,
|
|
1815
|
-
"title": "
|
|
2910
|
+
"title": "Extraction patches / singularities (`extract`)",
|
|
1816
2911
|
"type": "paragraph"
|
|
1817
2912
|
}
|
|
1818
2913
|
}
|
|
@@ -1820,14 +2915,14 @@
|
|
|
1820
2915
|
}
|
|
1821
2916
|
},
|
|
1822
2917
|
{
|
|
1823
|
-
"search": "
|
|
2918
|
+
"search": "Assigne le GLSL via .image (et .bufferA, …) depuis JS / Lit.\n",
|
|
1824
2919
|
"files": {
|
|
1825
|
-
"core/components/functional/
|
|
1826
|
-
"title": "
|
|
2920
|
+
"core/components/functional/shader/shader.md": {
|
|
2921
|
+
"title": "Shader",
|
|
1827
2922
|
"hashes": {
|
|
1828
|
-
"
|
|
2923
|
+
"markup": {
|
|
1829
2924
|
"count": 1,
|
|
1830
|
-
"title": "
|
|
2925
|
+
"title": "Markup",
|
|
1831
2926
|
"type": "paragraph"
|
|
1832
2927
|
}
|
|
1833
2928
|
}
|
|
@@ -1835,14 +2930,14 @@
|
|
|
1835
2930
|
}
|
|
1836
2931
|
},
|
|
1837
2932
|
{
|
|
1838
|
-
"search": "
|
|
2933
|
+
"search": "error — compile / link / WebGL (detail.message, detail.pass, detail.infoLog).\n",
|
|
1839
2934
|
"files": {
|
|
1840
|
-
"core/components/functional/
|
|
1841
|
-
"title": "
|
|
2935
|
+
"core/components/functional/shader/shader.md": {
|
|
2936
|
+
"title": "Shader",
|
|
1842
2937
|
"hashes": {
|
|
1843
|
-
"
|
|
2938
|
+
"events": {
|
|
1844
2939
|
"count": 1,
|
|
1845
|
-
"title": "
|
|
2940
|
+
"title": "Events",
|
|
1846
2941
|
"type": "paragraph"
|
|
1847
2942
|
}
|
|
1848
2943
|
}
|
|
@@ -1850,14 +2945,14 @@
|
|
|
1850
2945
|
}
|
|
1851
2946
|
},
|
|
1852
2947
|
{
|
|
1853
|
-
"search": "
|
|
2948
|
+
"search": "out — snapshot SonicShaderOutput (throttlé par out-interval, seulement s’il y a un listener) : souris, params, samples.\n",
|
|
1854
2949
|
"files": {
|
|
1855
|
-
"core/components/functional/
|
|
1856
|
-
"title": "
|
|
2950
|
+
"core/components/functional/shader/shader.md": {
|
|
2951
|
+
"title": "Shader",
|
|
1857
2952
|
"hashes": {
|
|
1858
|
-
"
|
|
2953
|
+
"events": {
|
|
1859
2954
|
"count": 1,
|
|
1860
|
-
"title": "
|
|
2955
|
+
"title": "Events",
|
|
1861
2956
|
"type": "paragraph"
|
|
1862
2957
|
}
|
|
1863
2958
|
}
|
|
@@ -1865,14 +2960,14 @@
|
|
|
1865
2960
|
}
|
|
1866
2961
|
},
|
|
1867
2962
|
{
|
|
1868
|
-
"search": "
|
|
2963
|
+
"search": "extract — snapshot ShaderExtractOutput (throttlé, paresseux) : patches manuels + détectés.\n",
|
|
1869
2964
|
"files": {
|
|
1870
|
-
"core/components/functional/
|
|
1871
|
-
"title": "
|
|
2965
|
+
"core/components/functional/shader/shader.md": {
|
|
2966
|
+
"title": "Shader",
|
|
1872
2967
|
"hashes": {
|
|
1873
|
-
"
|
|
2968
|
+
"events": {
|
|
1874
2969
|
"count": 1,
|
|
1875
|
-
"title": "
|
|
2970
|
+
"title": "Events",
|
|
1876
2971
|
"type": "paragraph"
|
|
1877
2972
|
}
|
|
1878
2973
|
}
|
|
@@ -2399,6 +3494,111 @@
|
|
|
2399
3494
|
}
|
|
2400
3495
|
}
|
|
2401
3496
|
},
|
|
3497
|
+
{
|
|
3498
|
+
"search": "WebGPU",
|
|
3499
|
+
"files": {
|
|
3500
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3501
|
+
"title": "WebGPU",
|
|
3502
|
+
"hashes": {
|
|
3503
|
+
"webgpu": {
|
|
3504
|
+
"count": 1,
|
|
3505
|
+
"title": "",
|
|
3506
|
+
"type": "page"
|
|
3507
|
+
}
|
|
3508
|
+
}
|
|
3509
|
+
}
|
|
3510
|
+
}
|
|
3511
|
+
},
|
|
3512
|
+
{
|
|
3513
|
+
"search": "sonic-webgpu — GPU compute / effects (companion to sonic-shader, not a clone).\n",
|
|
3514
|
+
"files": {
|
|
3515
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3516
|
+
"title": "WebGPU",
|
|
3517
|
+
"hashes": {
|
|
3518
|
+
"webgpu": {
|
|
3519
|
+
"count": 1,
|
|
3520
|
+
"title": "",
|
|
3521
|
+
"type": "paragraph"
|
|
3522
|
+
}
|
|
3523
|
+
}
|
|
3524
|
+
}
|
|
3525
|
+
}
|
|
3526
|
+
},
|
|
3527
|
+
{
|
|
3528
|
+
"search": "Opt-in import:\n",
|
|
3529
|
+
"files": {
|
|
3530
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3531
|
+
"title": "WebGPU",
|
|
3532
|
+
"hashes": {
|
|
3533
|
+
"webgpu": {
|
|
3534
|
+
"count": 1,
|
|
3535
|
+
"title": "",
|
|
3536
|
+
"type": "paragraph"
|
|
3537
|
+
}
|
|
3538
|
+
}
|
|
3539
|
+
}
|
|
3540
|
+
}
|
|
3541
|
+
},
|
|
3542
|
+
{
|
|
3543
|
+
"search": "Harris → patches → WebGPU mosaic: Visual stack.\n",
|
|
3544
|
+
"files": {
|
|
3545
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3546
|
+
"title": "WebGPU",
|
|
3547
|
+
"hashes": {
|
|
3548
|
+
"webgpu": {
|
|
3549
|
+
"count": 1,
|
|
3550
|
+
"title": "",
|
|
3551
|
+
"type": "paragraph"
|
|
3552
|
+
}
|
|
3553
|
+
}
|
|
3554
|
+
}
|
|
3555
|
+
}
|
|
3556
|
+
},
|
|
3557
|
+
{
|
|
3558
|
+
"search": "Simulation: param0 = speed, param1 = mouse attraction. WebGPU compute when available, otherwise CPU.\n",
|
|
3559
|
+
"files": {
|
|
3560
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3561
|
+
"title": "WebGPU",
|
|
3562
|
+
"hashes": {
|
|
3563
|
+
"demo--particles-compute": {
|
|
3564
|
+
"count": 1,
|
|
3565
|
+
"title": "Demo — particles (compute)",
|
|
3566
|
+
"type": "paragraph"
|
|
3567
|
+
}
|
|
3568
|
+
}
|
|
3569
|
+
}
|
|
3570
|
+
}
|
|
3571
|
+
},
|
|
3572
|
+
{
|
|
3573
|
+
"search": "Same MediaRef / DP bridge as the rest of the stack. No live texture bus with sonic-shader (separate contexts).\n",
|
|
3574
|
+
"files": {
|
|
3575
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3576
|
+
"title": "WebGPU",
|
|
3577
|
+
"hashes": {
|
|
3578
|
+
"chaining": {
|
|
3579
|
+
"count": 1,
|
|
3580
|
+
"title": "Chaining",
|
|
3581
|
+
"type": "paragraph"
|
|
3582
|
+
}
|
|
3583
|
+
}
|
|
3584
|
+
}
|
|
3585
|
+
}
|
|
3586
|
+
},
|
|
3587
|
+
{
|
|
3588
|
+
"search": "concorde-webgpu.bundle.js after the core.\n",
|
|
3589
|
+
"files": {
|
|
3590
|
+
"core/components/functional/webgpu/webgpu.md": {
|
|
3591
|
+
"title": "WebGPU",
|
|
3592
|
+
"hashes": {
|
|
3593
|
+
"cdn": {
|
|
3594
|
+
"count": 1,
|
|
3595
|
+
"title": "CDN",
|
|
3596
|
+
"type": "paragraph"
|
|
3597
|
+
}
|
|
3598
|
+
}
|
|
3599
|
+
}
|
|
3600
|
+
}
|
|
3601
|
+
},
|
|
2402
3602
|
{
|
|
2403
3603
|
"search": "Alert",
|
|
2404
3604
|
"files": {
|
|
@@ -2432,10 +3632,160 @@
|
|
|
2432
3632
|
{
|
|
2433
3633
|
"search": "Button",
|
|
2434
3634
|
"files": {
|
|
2435
|
-
"core/components/ui/button/button.md": {
|
|
2436
|
-
"title": "Button",
|
|
3635
|
+
"core/components/ui/button/button.md": {
|
|
3636
|
+
"title": "Button",
|
|
3637
|
+
"hashes": {
|
|
3638
|
+
"button": {
|
|
3639
|
+
"count": 1,
|
|
3640
|
+
"title": "",
|
|
3641
|
+
"type": "page"
|
|
3642
|
+
}
|
|
3643
|
+
}
|
|
3644
|
+
}
|
|
3645
|
+
}
|
|
3646
|
+
},
|
|
3647
|
+
{
|
|
3648
|
+
"search": "The length of the button depends on the size of its content\n\n",
|
|
3649
|
+
"files": {
|
|
3650
|
+
"core/components/ui/button/button.md": {
|
|
3651
|
+
"title": "Button",
|
|
3652
|
+
"hashes": {
|
|
3653
|
+
"loading": {
|
|
3654
|
+
"count": 1,
|
|
3655
|
+
"title": "Loading",
|
|
3656
|
+
"type": "paragraph"
|
|
3657
|
+
}
|
|
3658
|
+
}
|
|
3659
|
+
}
|
|
3660
|
+
}
|
|
3661
|
+
},
|
|
3662
|
+
{
|
|
3663
|
+
"search": "Captcha",
|
|
3664
|
+
"files": {
|
|
3665
|
+
"core/components/ui/captcha/captcha.md": {
|
|
3666
|
+
"title": "Captcha",
|
|
3667
|
+
"hashes": {
|
|
3668
|
+
"captcha": {
|
|
3669
|
+
"count": 1,
|
|
3670
|
+
"title": "",
|
|
3671
|
+
"type": "page"
|
|
3672
|
+
}
|
|
3673
|
+
}
|
|
3674
|
+
}
|
|
3675
|
+
}
|
|
3676
|
+
},
|
|
3677
|
+
{
|
|
3678
|
+
"search": "Card",
|
|
3679
|
+
"files": {
|
|
3680
|
+
"core/components/ui/card/card.md": {
|
|
3681
|
+
"title": "Card",
|
|
3682
|
+
"hashes": {
|
|
3683
|
+
"card": {
|
|
3684
|
+
"count": 1,
|
|
3685
|
+
"title": "",
|
|
3686
|
+
"type": "page"
|
|
3687
|
+
}
|
|
3688
|
+
}
|
|
3689
|
+
}
|
|
3690
|
+
}
|
|
3691
|
+
},
|
|
3692
|
+
{
|
|
3693
|
+
"search": "Divider",
|
|
3694
|
+
"files": {
|
|
3695
|
+
"core/components/ui/divider/divider.md": {
|
|
3696
|
+
"title": "Divider",
|
|
3697
|
+
"hashes": {
|
|
3698
|
+
"divider": {
|
|
3699
|
+
"count": 1,
|
|
3700
|
+
"title": "",
|
|
3701
|
+
"type": "page"
|
|
3702
|
+
}
|
|
3703
|
+
}
|
|
3704
|
+
}
|
|
3705
|
+
}
|
|
3706
|
+
},
|
|
3707
|
+
{
|
|
3708
|
+
"search": "Checkbox",
|
|
3709
|
+
"files": {
|
|
3710
|
+
"core/components/ui/form/checkbox/checkbox.md": {
|
|
3711
|
+
"title": "Checkbox",
|
|
3712
|
+
"hashes": {
|
|
3713
|
+
"checkbox": {
|
|
3714
|
+
"count": 1,
|
|
3715
|
+
"title": "",
|
|
3716
|
+
"type": "page"
|
|
3717
|
+
}
|
|
3718
|
+
}
|
|
3719
|
+
}
|
|
3720
|
+
}
|
|
3721
|
+
},
|
|
3722
|
+
{
|
|
3723
|
+
"search": "Checked blacklistFlags values are sent to the mock API (?blacklistFlags=racist,sexist,…), which excludes jokes whose flags match (see filterDocsJokes in src/docs/mock-api/fixtures.ts).\n",
|
|
3724
|
+
"files": {
|
|
3725
|
+
"core/components/ui/form/checkbox/checkbox.md": {
|
|
3726
|
+
"title": "Checkbox",
|
|
3727
|
+
"hashes": {
|
|
3728
|
+
"example-of-use--blacklist--queue": {
|
|
3729
|
+
"count": 1,
|
|
3730
|
+
"title": "Example of use — blacklist + queue",
|
|
3731
|
+
"type": "paragraph"
|
|
3732
|
+
}
|
|
3733
|
+
}
|
|
3734
|
+
}
|
|
3735
|
+
}
|
|
3736
|
+
},
|
|
3737
|
+
{
|
|
3738
|
+
"search": "Fieldset",
|
|
3739
|
+
"files": {
|
|
3740
|
+
"core/components/ui/form/fieldset/fieldset.md": {
|
|
3741
|
+
"title": "Fieldset",
|
|
3742
|
+
"hashes": {
|
|
3743
|
+
"fieldset": {
|
|
3744
|
+
"count": 1,
|
|
3745
|
+
"title": "",
|
|
3746
|
+
"type": "page"
|
|
3747
|
+
}
|
|
3748
|
+
}
|
|
3749
|
+
}
|
|
3750
|
+
}
|
|
3751
|
+
},
|
|
3752
|
+
{
|
|
3753
|
+
"search": "Form-actions",
|
|
3754
|
+
"files": {
|
|
3755
|
+
"core/components/ui/form/form-actions/form-actions.md": {
|
|
3756
|
+
"title": "Form-actions",
|
|
3757
|
+
"hashes": {
|
|
3758
|
+
"form-actions": {
|
|
3759
|
+
"count": 1,
|
|
3760
|
+
"title": "",
|
|
3761
|
+
"type": "page"
|
|
3762
|
+
}
|
|
3763
|
+
}
|
|
3764
|
+
}
|
|
3765
|
+
}
|
|
3766
|
+
},
|
|
3767
|
+
{
|
|
3768
|
+
"search": "Form-layout",
|
|
3769
|
+
"files": {
|
|
3770
|
+
"core/components/ui/form/form-layout/form-layout.md": {
|
|
3771
|
+
"title": "Form-layout",
|
|
3772
|
+
"hashes": {
|
|
3773
|
+
"form-layout": {
|
|
3774
|
+
"count": 1,
|
|
3775
|
+
"title": "",
|
|
3776
|
+
"type": "page"
|
|
3777
|
+
}
|
|
3778
|
+
}
|
|
3779
|
+
}
|
|
3780
|
+
}
|
|
3781
|
+
},
|
|
3782
|
+
{
|
|
3783
|
+
"search": "Input",
|
|
3784
|
+
"files": {
|
|
3785
|
+
"core/components/ui/form/input/input.md": {
|
|
3786
|
+
"title": "Input",
|
|
2437
3787
|
"hashes": {
|
|
2438
|
-
"
|
|
3788
|
+
"input": {
|
|
2439
3789
|
"count": 1,
|
|
2440
3790
|
"title": "",
|
|
2441
3791
|
"type": "page"
|
|
@@ -2445,14 +3795,14 @@
|
|
|
2445
3795
|
}
|
|
2446
3796
|
},
|
|
2447
3797
|
{
|
|
2448
|
-
"search": "
|
|
3798
|
+
"search": "Liste des types\n",
|
|
2449
3799
|
"files": {
|
|
2450
|
-
"core/components/ui/
|
|
2451
|
-
"title": "
|
|
3800
|
+
"core/components/ui/form/input/input.md": {
|
|
3801
|
+
"title": "Input",
|
|
2452
3802
|
"hashes": {
|
|
2453
|
-
"
|
|
3803
|
+
"type": {
|
|
2454
3804
|
"count": 1,
|
|
2455
|
-
"title": "
|
|
3805
|
+
"title": "Type",
|
|
2456
3806
|
"type": "paragraph"
|
|
2457
3807
|
}
|
|
2458
3808
|
}
|
|
@@ -2460,27 +3810,27 @@
|
|
|
2460
3810
|
}
|
|
2461
3811
|
},
|
|
2462
3812
|
{
|
|
2463
|
-
"search": "
|
|
3813
|
+
"search": "Filter with formDataProvider + name="contains" (mock API: substring on joke text). Caption and rows via Lit (@subscribe, .items on sonic-queue):\n",
|
|
2464
3814
|
"files": {
|
|
2465
|
-
"core/components/ui/
|
|
2466
|
-
"title": "
|
|
3815
|
+
"core/components/ui/form/input/input.md": {
|
|
3816
|
+
"title": "Input",
|
|
2467
3817
|
"hashes": {
|
|
2468
|
-
"
|
|
3818
|
+
"example-of-use--search--queue": {
|
|
2469
3819
|
"count": 1,
|
|
2470
|
-
"title": "",
|
|
2471
|
-
"type": "
|
|
3820
|
+
"title": "Example of use — search + queue",
|
|
3821
|
+
"type": "paragraph"
|
|
2472
3822
|
}
|
|
2473
3823
|
}
|
|
2474
3824
|
}
|
|
2475
3825
|
}
|
|
2476
3826
|
},
|
|
2477
3827
|
{
|
|
2478
|
-
"search": "
|
|
3828
|
+
"search": "Input-autocomplete",
|
|
2479
3829
|
"files": {
|
|
2480
|
-
"core/components/ui/
|
|
2481
|
-
"title": "
|
|
3830
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3831
|
+
"title": "Input-autocomplete",
|
|
2482
3832
|
"hashes": {
|
|
2483
|
-
"
|
|
3833
|
+
"input-autocomplete": {
|
|
2484
3834
|
"count": 1,
|
|
2485
3835
|
"title": "",
|
|
2486
3836
|
"type": "page"
|
|
@@ -2490,44 +3840,44 @@
|
|
|
2490
3840
|
}
|
|
2491
3841
|
},
|
|
2492
3842
|
{
|
|
2493
|
-
"search": "
|
|
3843
|
+
"search": "The input-autocomplete component brings input and queue together in order to create a suggest behavior. This is why this component is partially configured as a form input and as a queue.\n",
|
|
2494
3844
|
"files": {
|
|
2495
|
-
"core/components/ui/
|
|
2496
|
-
"title": "
|
|
3845
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3846
|
+
"title": "Input-autocomplete",
|
|
2497
3847
|
"hashes": {
|
|
2498
|
-
"
|
|
3848
|
+
"input-autocomplete": {
|
|
2499
3849
|
"count": 1,
|
|
2500
3850
|
"title": "",
|
|
2501
|
-
"type": "
|
|
3851
|
+
"type": "paragraph"
|
|
2502
3852
|
}
|
|
2503
3853
|
}
|
|
2504
3854
|
}
|
|
2505
3855
|
}
|
|
2506
3856
|
},
|
|
2507
3857
|
{
|
|
2508
|
-
"search": "
|
|
3858
|
+
"search": "Please note that only basic text input params and methods are implemented at this time. You should also be sure to understand the behavior of a queue in order to take full advantage of the input-autocomplete component.\n",
|
|
2509
3859
|
"files": {
|
|
2510
|
-
"core/components/ui/form/
|
|
2511
|
-
"title": "
|
|
3860
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3861
|
+
"title": "Input-autocomplete",
|
|
2512
3862
|
"hashes": {
|
|
2513
|
-
"
|
|
3863
|
+
"input-autocomplete": {
|
|
2514
3864
|
"count": 1,
|
|
2515
3865
|
"title": "",
|
|
2516
|
-
"type": "
|
|
3866
|
+
"type": "paragraph"
|
|
2517
3867
|
}
|
|
2518
3868
|
}
|
|
2519
3869
|
}
|
|
2520
3870
|
}
|
|
2521
3871
|
},
|
|
2522
3872
|
{
|
|
2523
|
-
"search": "
|
|
3873
|
+
"search": "Here are some of the features of the input-autocomplete component:\n",
|
|
2524
3874
|
"files": {
|
|
2525
|
-
"core/components/ui/form/
|
|
2526
|
-
"title": "
|
|
3875
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3876
|
+
"title": "Input-autocomplete",
|
|
2527
3877
|
"hashes": {
|
|
2528
|
-
"
|
|
3878
|
+
"input-autocomplete": {
|
|
2529
3879
|
"count": 1,
|
|
2530
|
-
"title": "
|
|
3880
|
+
"title": "",
|
|
2531
3881
|
"type": "paragraph"
|
|
2532
3882
|
}
|
|
2533
3883
|
}
|
|
@@ -2535,74 +3885,74 @@
|
|
|
2535
3885
|
}
|
|
2536
3886
|
},
|
|
2537
3887
|
{
|
|
2538
|
-
"search": "
|
|
3888
|
+
"search": "Doc examples below use HTML binding on suggestion rows. The Lit equivalent uses an items callback with the row object (see docs-queue-geo-demo in src/docs/example/docs-queue-demos.ts). Embedding without Lit: HTML integration.\n",
|
|
2539
3889
|
"files": {
|
|
2540
|
-
"core/components/ui/form/
|
|
2541
|
-
"title": "
|
|
3890
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3891
|
+
"title": "Input-autocomplete",
|
|
2542
3892
|
"hashes": {
|
|
2543
|
-
"
|
|
3893
|
+
"input-autocomplete": {
|
|
2544
3894
|
"count": 1,
|
|
2545
3895
|
"title": "",
|
|
2546
|
-
"type": "
|
|
3896
|
+
"type": "paragraph"
|
|
2547
3897
|
}
|
|
2548
3898
|
}
|
|
2549
3899
|
}
|
|
2550
3900
|
}
|
|
2551
3901
|
},
|
|
2552
3902
|
{
|
|
2553
|
-
"search": "
|
|
3903
|
+
"search": "If you are looking for a component to provide a suggest behavior, the input-autocomplete component is a good option. \n",
|
|
2554
3904
|
"files": {
|
|
2555
|
-
"core/components/ui/form/
|
|
2556
|
-
"title": "
|
|
3905
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3906
|
+
"title": "Input-autocomplete",
|
|
2557
3907
|
"hashes": {
|
|
2558
|
-
"
|
|
3908
|
+
"input-autocomplete": {
|
|
2559
3909
|
"count": 1,
|
|
2560
3910
|
"title": "",
|
|
2561
|
-
"type": "
|
|
3911
|
+
"type": "paragraph"
|
|
2562
3912
|
}
|
|
2563
3913
|
}
|
|
2564
3914
|
}
|
|
2565
3915
|
}
|
|
2566
3916
|
},
|
|
2567
3917
|
{
|
|
2568
|
-
"search": "
|
|
3918
|
+
"search": "In this example, the input will use its name as the search parameter when calling the service responsible for autocompletion.\n",
|
|
2569
3919
|
"files": {
|
|
2570
|
-
"core/components/ui/form/
|
|
2571
|
-
"title": "
|
|
3920
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3921
|
+
"title": "Input-autocomplete",
|
|
2572
3922
|
"hashes": {
|
|
2573
|
-
"
|
|
3923
|
+
"simple-example": {
|
|
2574
3924
|
"count": 1,
|
|
2575
|
-
"title": "",
|
|
2576
|
-
"type": "
|
|
3925
|
+
"title": "Simple Example",
|
|
3926
|
+
"type": "paragraph"
|
|
2577
3927
|
}
|
|
2578
3928
|
}
|
|
2579
3929
|
}
|
|
2580
3930
|
}
|
|
2581
3931
|
},
|
|
2582
3932
|
{
|
|
2583
|
-
"search": "
|
|
3933
|
+
"search": "The template is used to render the list items of results.\nThe list items are responsible for making a selection.\n",
|
|
2584
3934
|
"files": {
|
|
2585
|
-
"core/components/ui/form/input/input.md": {
|
|
2586
|
-
"title": "Input",
|
|
3935
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3936
|
+
"title": "Input-autocomplete",
|
|
2587
3937
|
"hashes": {
|
|
2588
|
-
"
|
|
3938
|
+
"simple-example": {
|
|
2589
3939
|
"count": 1,
|
|
2590
|
-
"title": "",
|
|
2591
|
-
"type": "
|
|
3940
|
+
"title": "Simple Example",
|
|
3941
|
+
"type": "paragraph"
|
|
2592
3942
|
}
|
|
2593
3943
|
}
|
|
2594
3944
|
}
|
|
2595
3945
|
}
|
|
2596
3946
|
},
|
|
2597
3947
|
{
|
|
2598
|
-
"search": "
|
|
3948
|
+
"search": "This time, we added buttons with the same name as the input while keeping the same data provider.\nThe result is that when you select an item, the input takes the value of the selected item, completing the classic suggest behavior.\n",
|
|
2599
3949
|
"files": {
|
|
2600
|
-
"core/components/ui/form/input/input.md": {
|
|
2601
|
-
"title": "Input",
|
|
3950
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3951
|
+
"title": "Input-autocomplete",
|
|
2602
3952
|
"hashes": {
|
|
2603
|
-
"
|
|
3953
|
+
"simple-example": {
|
|
2604
3954
|
"count": 1,
|
|
2605
|
-
"title": "
|
|
3955
|
+
"title": "Simple Example",
|
|
2606
3956
|
"type": "paragraph"
|
|
2607
3957
|
}
|
|
2608
3958
|
}
|
|
@@ -2610,14 +3960,14 @@
|
|
|
2610
3960
|
}
|
|
2611
3961
|
},
|
|
2612
3962
|
{
|
|
2613
|
-
"search": "
|
|
3963
|
+
"search": "In this example, the search parameter is separated from the name of the input. This means that the input will use the name "nom" as the search parameter, but the form data provider will be filled with the data named "siren" from the selected list item.\n",
|
|
2614
3964
|
"files": {
|
|
2615
|
-
"core/components/ui/form/input/input.md": {
|
|
2616
|
-
"title": "Input",
|
|
3965
|
+
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
3966
|
+
"title": "Input-autocomplete",
|
|
2617
3967
|
"hashes": {
|
|
2618
|
-
"
|
|
3968
|
+
"value-different-from-search-parameter": {
|
|
2619
3969
|
"count": 1,
|
|
2620
|
-
"title": "
|
|
3970
|
+
"title": "Value different from search parameter",
|
|
2621
3971
|
"type": "paragraph"
|
|
2622
3972
|
}
|
|
2623
3973
|
}
|
|
@@ -2625,29 +3975,29 @@
|
|
|
2625
3975
|
}
|
|
2626
3976
|
},
|
|
2627
3977
|
{
|
|
2628
|
-
"search": "
|
|
3978
|
+
"search": "To do this, we need to use the searchParam attribute on the input element. This attribute specifies the name of the search parameter that will be used.\n",
|
|
2629
3979
|
"files": {
|
|
2630
3980
|
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
2631
3981
|
"title": "Input-autocomplete",
|
|
2632
3982
|
"hashes": {
|
|
2633
|
-
"
|
|
3983
|
+
"value-different-from-search-parameter": {
|
|
2634
3984
|
"count": 1,
|
|
2635
|
-
"title": "",
|
|
2636
|
-
"type": "
|
|
3985
|
+
"title": "Value different from search parameter",
|
|
3986
|
+
"type": "paragraph"
|
|
2637
3987
|
}
|
|
2638
3988
|
}
|
|
2639
3989
|
}
|
|
2640
3990
|
}
|
|
2641
3991
|
},
|
|
2642
3992
|
{
|
|
2643
|
-
"search": "
|
|
3993
|
+
"search": "We also need to use the name and value attribute on the list items. This attribute specifies the value of the data provider that will be used for the selected list item.\n",
|
|
2644
3994
|
"files": {
|
|
2645
3995
|
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
2646
3996
|
"title": "Input-autocomplete",
|
|
2647
3997
|
"hashes": {
|
|
2648
|
-
"
|
|
3998
|
+
"value-different-from-search-parameter": {
|
|
2649
3999
|
"count": 1,
|
|
2650
|
-
"title": "",
|
|
4000
|
+
"title": "Value different from search parameter",
|
|
2651
4001
|
"type": "paragraph"
|
|
2652
4002
|
}
|
|
2653
4003
|
}
|
|
@@ -2655,14 +4005,14 @@
|
|
|
2655
4005
|
}
|
|
2656
4006
|
},
|
|
2657
4007
|
{
|
|
2658
|
-
"search": "
|
|
4008
|
+
"search": "By using these attributes, we can separate the search parameter from the name of the input and still fill the form data provider with the data from the selected list item.\n",
|
|
2659
4009
|
"files": {
|
|
2660
4010
|
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
2661
4011
|
"title": "Input-autocomplete",
|
|
2662
4012
|
"hashes": {
|
|
2663
|
-
"
|
|
4013
|
+
"value-different-from-search-parameter": {
|
|
2664
4014
|
"count": 1,
|
|
2665
|
-
"title": "",
|
|
4015
|
+
"title": "Value different from search parameter",
|
|
2666
4016
|
"type": "paragraph"
|
|
2667
4017
|
}
|
|
2668
4018
|
}
|
|
@@ -2670,14 +4020,14 @@
|
|
|
2670
4020
|
}
|
|
2671
4021
|
},
|
|
2672
4022
|
{
|
|
2673
|
-
"search": "
|
|
4023
|
+
"search": "This example is the same as the previous one, except that the select attribute is used. This attribute changes the look and feel of the component slightly.\n",
|
|
2674
4024
|
"files": {
|
|
2675
4025
|
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
2676
4026
|
"title": "Input-autocomplete",
|
|
2677
4027
|
"hashes": {
|
|
2678
|
-
"
|
|
4028
|
+
"select-autocomplete--value-different-from-search-parameter": {
|
|
2679
4029
|
"count": 1,
|
|
2680
|
-
"title": "
|
|
4030
|
+
"title": "Select autocomplete / value different from search parameter",
|
|
2681
4031
|
"type": "paragraph"
|
|
2682
4032
|
}
|
|
2683
4033
|
}
|
|
@@ -2685,14 +4035,14 @@
|
|
|
2685
4035
|
}
|
|
2686
4036
|
},
|
|
2687
4037
|
{
|
|
2688
|
-
"search": "
|
|
4038
|
+
"search": "Now the text is less free because, you must select either something from the list given by the service, or nothing else.\n",
|
|
2689
4039
|
"files": {
|
|
2690
4040
|
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
2691
4041
|
"title": "Input-autocomplete",
|
|
2692
4042
|
"hashes": {
|
|
2693
|
-
"
|
|
4043
|
+
"select-autocomplete--value-different-from-search-parameter": {
|
|
2694
4044
|
"count": 1,
|
|
2695
|
-
"title": "
|
|
4045
|
+
"title": "Select autocomplete / value different from search parameter",
|
|
2696
4046
|
"type": "paragraph"
|
|
2697
4047
|
}
|
|
2698
4048
|
}
|
|
@@ -2700,14 +4050,14 @@
|
|
|
2700
4050
|
}
|
|
2701
4051
|
},
|
|
2702
4052
|
{
|
|
2703
|
-
"search": "
|
|
4053
|
+
"search": "The following code shows how to use the select attribute in an autocomplete input:\n",
|
|
2704
4054
|
"files": {
|
|
2705
4055
|
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
2706
4056
|
"title": "Input-autocomplete",
|
|
2707
4057
|
"hashes": {
|
|
2708
|
-
"
|
|
4058
|
+
"select-autocomplete--value-different-from-search-parameter": {
|
|
2709
4059
|
"count": 1,
|
|
2710
|
-
"title": "
|
|
4060
|
+
"title": "Select autocomplete / value different from search parameter",
|
|
2711
4061
|
"type": "paragraph"
|
|
2712
4062
|
}
|
|
2713
4063
|
}
|
|
@@ -2715,14 +4065,14 @@
|
|
|
2715
4065
|
}
|
|
2716
4066
|
},
|
|
2717
4067
|
{
|
|
2718
|
-
"search": "data-keyboard-nav
|
|
4068
|
+
"search": "At the moment you can enable keyboard up/down by adding an attribut "data-keyboard-nav" on the component and its listItems\n",
|
|
2719
4069
|
"files": {
|
|
2720
4070
|
"core/components/ui/form/input-autocomplete/input-autocomplete.md": {
|
|
2721
4071
|
"title": "Input-autocomplete",
|
|
2722
4072
|
"hashes": {
|
|
2723
|
-
"navigation
|
|
4073
|
+
"keyboard-navigation": {
|
|
2724
4074
|
"count": 1,
|
|
2725
|
-
"title": "
|
|
4075
|
+
"title": "keyboard navigation",
|
|
2726
4076
|
"type": "paragraph"
|
|
2727
4077
|
}
|
|
2728
4078
|
}
|
|
@@ -3239,6 +4589,21 @@
|
|
|
3239
4589
|
}
|
|
3240
4590
|
}
|
|
3241
4591
|
},
|
|
4592
|
+
{
|
|
4593
|
+
"search": "Opt-in addons (HF / shader / WebGPU): Visual stack.\n",
|
|
4594
|
+
"files": {
|
|
4595
|
+
"docs/_core-concept/dataFlow.md": {
|
|
4596
|
+
"title": "Data flow",
|
|
4597
|
+
"hashes": {
|
|
4598
|
+
"quick-map": {
|
|
4599
|
+
"count": 1,
|
|
4600
|
+
"title": "Quick map",
|
|
4601
|
+
"type": "paragraph"
|
|
4602
|
+
}
|
|
4603
|
+
}
|
|
4604
|
+
}
|
|
4605
|
+
}
|
|
4606
|
+
},
|
|
3242
4607
|
{
|
|
3243
4608
|
"search": "Skill: concorde-get-set-dp in the package ai/ folder.\n",
|
|
3244
4609
|
"files": {
|
|
@@ -7129,6 +8494,96 @@
|
|
|
7129
8494
|
}
|
|
7130
8495
|
}
|
|
7131
8496
|
},
|
|
8497
|
+
{
|
|
8498
|
+
"search": "CDN addons",
|
|
8499
|
+
"files": {
|
|
8500
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
8501
|
+
"title": "CDN addons",
|
|
8502
|
+
"hashes": {
|
|
8503
|
+
"cdn-addons": {
|
|
8504
|
+
"count": 1,
|
|
8505
|
+
"title": "",
|
|
8506
|
+
"type": "page"
|
|
8507
|
+
}
|
|
8508
|
+
}
|
|
8509
|
+
}
|
|
8510
|
+
}
|
|
8511
|
+
},
|
|
8512
|
+
{
|
|
8513
|
+
"search": "Heavy opt-in features stay out of concorde-core.bundle.js. Load the core bundle first, then the addon you need.\n",
|
|
8514
|
+
"files": {
|
|
8515
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
8516
|
+
"title": "CDN addons",
|
|
8517
|
+
"hashes": {
|
|
8518
|
+
"cdn-addons": {
|
|
8519
|
+
"count": 1,
|
|
8520
|
+
"title": "",
|
|
8521
|
+
"type": "paragraph"
|
|
8522
|
+
}
|
|
8523
|
+
}
|
|
8524
|
+
}
|
|
8525
|
+
}
|
|
8526
|
+
},
|
|
8527
|
+
{
|
|
8528
|
+
"search": "npm: @supersoniks/concorde/bundle/3d, …/bundle/shader, …/bundle/webgpu, …/bundle/hugging-face-infer (IIFE). ESM twins: …/bundle/3d/es, etc.\n",
|
|
8529
|
+
"files": {
|
|
8530
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
8531
|
+
"title": "CDN addons",
|
|
8532
|
+
"hashes": {
|
|
8533
|
+
"cdn-addons": {
|
|
8534
|
+
"count": 1,
|
|
8535
|
+
"title": "",
|
|
8536
|
+
"type": "paragraph"
|
|
8537
|
+
}
|
|
8538
|
+
}
|
|
8539
|
+
}
|
|
8540
|
+
}
|
|
8541
|
+
},
|
|
8542
|
+
{
|
|
8543
|
+
"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",
|
|
8544
|
+
"files": {
|
|
8545
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
8546
|
+
"title": "CDN addons",
|
|
8547
|
+
"hashes": {
|
|
8548
|
+
"sdui-js": {
|
|
8549
|
+
"count": 1,
|
|
8550
|
+
"title": "SDUI (`js[]`)",
|
|
8551
|
+
"type": "paragraph"
|
|
8552
|
+
}
|
|
8553
|
+
}
|
|
8554
|
+
}
|
|
8555
|
+
}
|
|
8556
|
+
},
|
|
8557
|
+
{
|
|
8558
|
+
"search": "The CE alone is not enough: configure runtime + allowlist once (page script or app entry). The IIFE exposes window.ConcordeHF.\n",
|
|
8559
|
+
"files": {
|
|
8560
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
8561
|
+
"title": "CDN addons",
|
|
8562
|
+
"hashes": {
|
|
8563
|
+
"hugging-face--minimal-bootstrap": {
|
|
8564
|
+
"count": 1,
|
|
8565
|
+
"title": "Hugging Face — minimal bootstrap",
|
|
8566
|
+
"type": "paragraph"
|
|
8567
|
+
}
|
|
8568
|
+
}
|
|
8569
|
+
}
|
|
8570
|
+
}
|
|
8571
|
+
},
|
|
8572
|
+
{
|
|
8573
|
+
"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",
|
|
8574
|
+
"files": {
|
|
8575
|
+
"docs/_getting-started/cdn-addons.md": {
|
|
8576
|
+
"title": "CDN addons",
|
|
8577
|
+
"hashes": {
|
|
8578
|
+
"hugging-face--minimal-bootstrap": {
|
|
8579
|
+
"count": 1,
|
|
8580
|
+
"title": "Hugging Face — minimal bootstrap",
|
|
8581
|
+
"type": "paragraph"
|
|
8582
|
+
}
|
|
8583
|
+
}
|
|
8584
|
+
}
|
|
8585
|
+
}
|
|
8586
|
+
},
|
|
7132
8587
|
{
|
|
7133
8588
|
"search": "Manual installation (Vite)",
|
|
7134
8589
|
"files": {
|
|
@@ -7655,7 +9110,7 @@
|
|
|
7655
9110
|
}
|
|
7656
9111
|
},
|
|
7657
9112
|
{
|
|
7658
|
-
"search": "In the case where it can be directly used in a page, it should also be globally referenced,
|
|
9113
|
+
"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",
|
|
7659
9114
|
"files": {
|
|
7660
9115
|
"docs/_getting-started/create-a-component.md": {
|
|
7661
9116
|
"title": "Creating components",
|
|
@@ -9325,12 +10780,12 @@
|
|
|
9325
10780
|
}
|
|
9326
10781
|
},
|
|
9327
10782
|
{
|
|
9328
|
-
"search": "
|
|
10783
|
+
"search": "HTML integration (no Lit)",
|
|
9329
10784
|
"files": {
|
|
9330
|
-
"docs/_misc/
|
|
9331
|
-
"title": "
|
|
10785
|
+
"docs/_misc/html-integration.md": {
|
|
10786
|
+
"title": "HTML integration (no Lit)",
|
|
9332
10787
|
"hashes": {
|
|
9333
|
-
"
|
|
10788
|
+
"html-integration-no-lit": {
|
|
9334
10789
|
"count": 1,
|
|
9335
10790
|
"title": "",
|
|
9336
10791
|
"type": "page"
|
|
@@ -9340,12 +10795,12 @@
|
|
|
9340
10795
|
}
|
|
9341
10796
|
},
|
|
9342
10797
|
{
|
|
9343
|
-
"search": "
|
|
10798
|
+
"search": "Some hosts (legacy PHP pages, static HTML) embed Concorde components without a Lit build step. They can use HTML attributes such as data-bind, dataProvider, and formDataProvider on tags directly in the page.\n",
|
|
9344
10799
|
"files": {
|
|
9345
|
-
"docs/_misc/
|
|
9346
|
-
"title": "
|
|
10800
|
+
"docs/_misc/html-integration.md": {
|
|
10801
|
+
"title": "HTML integration (no Lit)",
|
|
9347
10802
|
"hashes": {
|
|
9348
|
-
"
|
|
10803
|
+
"html-integration-no-lit": {
|
|
9349
10804
|
"count": 1,
|
|
9350
10805
|
"title": "",
|
|
9351
10806
|
"type": "paragraph"
|
|
@@ -9355,14 +10810,14 @@
|
|
|
9355
10810
|
}
|
|
9356
10811
|
},
|
|
9357
10812
|
{
|
|
9358
|
-
"search": "
|
|
10813
|
+
"search": "That style is not what we demonstrate in this doc site: live examples are Lit components under src/docs/example/, registered once and reused from Markdown via tags like <docs-joke-search-demo>.\n",
|
|
9359
10814
|
"files": {
|
|
9360
|
-
"docs/_misc/
|
|
9361
|
-
"title": "
|
|
10815
|
+
"docs/_misc/html-integration.md": {
|
|
10816
|
+
"title": "HTML integration (no Lit)",
|
|
9362
10817
|
"hashes": {
|
|
9363
|
-
"
|
|
10818
|
+
"html-integration-no-lit": {
|
|
9364
10819
|
"count": 1,
|
|
9365
|
-
"title": "
|
|
10820
|
+
"title": "",
|
|
9366
10821
|
"type": "paragraph"
|
|
9367
10822
|
}
|
|
9368
10823
|
}
|
|
@@ -9370,14 +10825,14 @@
|
|
|
9370
10825
|
}
|
|
9371
10826
|
},
|
|
9372
10827
|
{
|
|
9373
|
-
"search": "
|
|
10828
|
+
"search": "New application code in TypeScript should use @subscribe, formDataProvider + name, and Lit templates — not HTML data-bind.\n",
|
|
9374
10829
|
"files": {
|
|
9375
|
-
"docs/_misc/
|
|
9376
|
-
"title": "
|
|
10830
|
+
"docs/_misc/html-integration.md": {
|
|
10831
|
+
"title": "HTML integration (no Lit)",
|
|
9377
10832
|
"hashes": {
|
|
9378
|
-
"
|
|
10833
|
+
"html-integration-no-lit": {
|
|
9379
10834
|
"count": 1,
|
|
9380
|
-
"title": "
|
|
10835
|
+
"title": "",
|
|
9381
10836
|
"type": "paragraph"
|
|
9382
10837
|
}
|
|
9383
10838
|
}
|
|
@@ -9385,14 +10840,29 @@
|
|
|
9385
10840
|
}
|
|
9386
10841
|
},
|
|
9387
10842
|
{
|
|
9388
|
-
"search": "
|
|
10843
|
+
"search": "Visual stack",
|
|
10844
|
+
"files": {
|
|
10845
|
+
"docs/_misc/visual-stack.md": {
|
|
10846
|
+
"title": "Visual stack",
|
|
10847
|
+
"hashes": {
|
|
10848
|
+
"visual-stack": {
|
|
10849
|
+
"count": 1,
|
|
10850
|
+
"title": "",
|
|
10851
|
+
"type": "page"
|
|
10852
|
+
}
|
|
10853
|
+
}
|
|
10854
|
+
}
|
|
10855
|
+
}
|
|
10856
|
+
},
|
|
10857
|
+
{
|
|
10858
|
+
"search": "Examples of chaining opt-in addons (HF, shader, WebGPU, 3D). Outside the main “functional” flow.\n",
|
|
9389
10859
|
"files": {
|
|
9390
|
-
"docs/_misc/
|
|
9391
|
-
"title": "
|
|
10860
|
+
"docs/_misc/visual-stack.md": {
|
|
10861
|
+
"title": "Visual stack",
|
|
9392
10862
|
"hashes": {
|
|
9393
|
-
"
|
|
10863
|
+
"visual-stack": {
|
|
9394
10864
|
"count": 1,
|
|
9395
|
-
"title": "
|
|
10865
|
+
"title": "",
|
|
9396
10866
|
"type": "paragraph"
|
|
9397
10867
|
}
|
|
9398
10868
|
}
|
|
@@ -9400,14 +10870,14 @@
|
|
|
9400
10870
|
}
|
|
9401
10871
|
},
|
|
9402
10872
|
{
|
|
9403
|
-
"search": "
|
|
10873
|
+
"search": "Photo → sonic-hugging-face-infer (depth) → sonic-shader (parallax) → extract → sonic-jsonata (stats / thresholds).\n",
|
|
9404
10874
|
"files": {
|
|
9405
|
-
"docs/_misc/
|
|
9406
|
-
"title": "
|
|
10875
|
+
"docs/_misc/visual-stack.md": {
|
|
10876
|
+
"title": "Visual stack",
|
|
9407
10877
|
"hashes": {
|
|
9408
|
-
"
|
|
10878
|
+
"hf-depth--parallax": {
|
|
9409
10879
|
"count": 1,
|
|
9410
|
-
"title": "
|
|
10880
|
+
"title": "HF depth → parallax",
|
|
9411
10881
|
"type": "paragraph"
|
|
9412
10882
|
}
|
|
9413
10883
|
}
|
|
@@ -9415,14 +10885,14 @@
|
|
|
9415
10885
|
}
|
|
9416
10886
|
},
|
|
9417
10887
|
{
|
|
9418
|
-
"search": "
|
|
10888
|
+
"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",
|
|
9419
10889
|
"files": {
|
|
9420
|
-
"docs/_misc/
|
|
9421
|
-
"title": "
|
|
10890
|
+
"docs/_misc/visual-stack.md": {
|
|
10891
|
+
"title": "Visual stack",
|
|
9422
10892
|
"hashes": {
|
|
9423
|
-
"
|
|
10893
|
+
"golden-rule": {
|
|
9424
10894
|
"count": 1,
|
|
9425
|
-
"title": "
|
|
10895
|
+
"title": "Golden rule",
|
|
9426
10896
|
"type": "paragraph"
|
|
9427
10897
|
}
|
|
9428
10898
|
}
|
|
@@ -9430,29 +10900,29 @@
|
|
|
9430
10900
|
}
|
|
9431
10901
|
},
|
|
9432
10902
|
{
|
|
9433
|
-
"search": "
|
|
10903
|
+
"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",
|
|
9434
10904
|
"files": {
|
|
9435
|
-
"docs/_misc/
|
|
9436
|
-
"title": "
|
|
10905
|
+
"docs/_misc/visual-stack.md": {
|
|
10906
|
+
"title": "Visual stack",
|
|
9437
10907
|
"hashes": {
|
|
9438
|
-
"
|
|
10908
|
+
"3d--shader-live-gpu-bridge": {
|
|
9439
10909
|
"count": 1,
|
|
9440
|
-
"title": "",
|
|
9441
|
-
"type": "
|
|
10910
|
+
"title": "3D → shader live (GPU bridge)",
|
|
10911
|
+
"type": "paragraph"
|
|
9442
10912
|
}
|
|
9443
10913
|
}
|
|
9444
10914
|
}
|
|
9445
10915
|
}
|
|
9446
10916
|
},
|
|
9447
10917
|
{
|
|
9448
|
-
"search": "
|
|
10918
|
+
"search": "Also accepted: <img>, <video>, <canvas>, or another Concorde host that implements SonicFrameSource (getFrameCanvas + frameSeq). DP form: { element: "#plateau" } or { element: el }.\n",
|
|
9449
10919
|
"files": {
|
|
9450
|
-
"docs/_misc/
|
|
9451
|
-
"title": "
|
|
10920
|
+
"docs/_misc/visual-stack.md": {
|
|
10921
|
+
"title": "Visual stack",
|
|
9452
10922
|
"hashes": {
|
|
9453
|
-
"
|
|
10923
|
+
"3d--shader-live-gpu-bridge": {
|
|
9454
10924
|
"count": 1,
|
|
9455
|
-
"title": "",
|
|
10925
|
+
"title": "3D → shader live (GPU bridge)",
|
|
9456
10926
|
"type": "paragraph"
|
|
9457
10927
|
}
|
|
9458
10928
|
}
|
|
@@ -9460,14 +10930,14 @@
|
|
|
9460
10930
|
}
|
|
9461
10931
|
},
|
|
9462
10932
|
{
|
|
9463
|
-
"search": "
|
|
10933
|
+
"search": "frame-out (JPEG ObjectURL) remains for export / HF / freeze — not for live post.\n",
|
|
9464
10934
|
"files": {
|
|
9465
|
-
"docs/_misc/
|
|
9466
|
-
"title": "
|
|
10935
|
+
"docs/_misc/visual-stack.md": {
|
|
10936
|
+
"title": "Visual stack",
|
|
9467
10937
|
"hashes": {
|
|
9468
|
-
"
|
|
10938
|
+
"3d--shader-live-gpu-bridge": {
|
|
9469
10939
|
"count": 1,
|
|
9470
|
-
"title": "",
|
|
10940
|
+
"title": "3D → shader live (GPU bridge)",
|
|
9471
10941
|
"type": "paragraph"
|
|
9472
10942
|
}
|
|
9473
10943
|
}
|
|
@@ -9475,14 +10945,14 @@
|
|
|
9475
10945
|
}
|
|
9476
10946
|
},
|
|
9477
10947
|
{
|
|
9478
|
-
"search": "
|
|
10948
|
+
"search": "sonic-shader detects corners (Harris) and extracts patches → channel0…3 on sonic-webgpu (kernel="image"): GPU mosaic.\n",
|
|
9479
10949
|
"files": {
|
|
9480
|
-
"docs/_misc/
|
|
9481
|
-
"title": "
|
|
10950
|
+
"docs/_misc/visual-stack.md": {
|
|
10951
|
+
"title": "Visual stack",
|
|
9482
10952
|
"hashes": {
|
|
9483
|
-
"
|
|
10953
|
+
"harris--patches--webgpu": {
|
|
9484
10954
|
"count": 1,
|
|
9485
|
-
"title": "",
|
|
10955
|
+
"title": "Harris → patches → WebGPU",
|
|
9486
10956
|
"type": "paragraph"
|
|
9487
10957
|
}
|
|
9488
10958
|
}
|
|
@@ -9490,14 +10960,14 @@
|
|
|
9490
10960
|
}
|
|
9491
10961
|
},
|
|
9492
10962
|
{
|
|
9493
|
-
"search": "
|
|
10963
|
+
"search": "SonicMediaRef / SonicFrameSource / toMediaUrl / cloneMediaRef — @supersoniks/concorde/core/utils/mediaRef.\n",
|
|
9494
10964
|
"files": {
|
|
9495
|
-
"docs/_misc/
|
|
9496
|
-
"title": "
|
|
10965
|
+
"docs/_misc/visual-stack.md": {
|
|
10966
|
+
"title": "Visual stack",
|
|
9497
10967
|
"hashes": {
|
|
9498
|
-
"
|
|
10968
|
+
"media-contract": {
|
|
9499
10969
|
"count": 1,
|
|
9500
|
-
"title": "",
|
|
10970
|
+
"title": "Media contract",
|
|
9501
10971
|
"type": "paragraph"
|
|
9502
10972
|
}
|
|
9503
10973
|
}
|