@simai-studio/view 1.1.0 → 1.3.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.
Files changed (74) hide show
  1. package/README.md +5 -5
  2. package/dist/package-receipt.json +322 -81
  3. package/dist/set.json +35 -2
  4. package/dist/smart/rule.js +94 -0
  5. package/dist/smart/rule.js.gz +0 -0
  6. package/dist/smart/view/component.json +1 -1
  7. package/dist/smart/view/component.json.gz +0 -0
  8. package/dist/smart/view/js/view.js +1 -1
  9. package/dist/smart/view/js/view.js.gz +0 -0
  10. package/dist/smart/view/js/view.min.js +1 -1
  11. package/dist/smart/view/js/view.min.js.gz +0 -0
  12. package/dist/smart/view/smart.manifest.json +1 -1
  13. package/dist/smart/view/smart.manifest.json.gz +0 -0
  14. package/dist/smart/view/static/default/open-record.html +1 -1
  15. package/dist/smart/view/static/default/open-record.html.gz +0 -0
  16. package/dist/smart/view/static/default/reference.html +1 -1
  17. package/dist/smart/view/static/default/reference.html.gz +0 -0
  18. package/dist/smart/view-flow/component.json +620 -0
  19. package/dist/smart/view-flow/component.json.gz +0 -0
  20. package/dist/smart/view-flow/css/view-flow.css +570 -0
  21. package/dist/smart/view-flow/css/view-flow.css.gz +0 -0
  22. package/dist/smart/view-flow/css/view-flow.min.css +3 -0
  23. package/dist/smart/view-flow/css/view-flow.min.css.gz +0 -0
  24. package/dist/smart/view-flow/examples.json +452 -0
  25. package/dist/smart/view-flow/examples.json.gz +0 -0
  26. package/dist/smart/view-flow/js/view-flow.js +7406 -0
  27. package/dist/smart/view-flow/js/view-flow.js.gz +0 -0
  28. package/dist/smart/view-flow/js/view-flow.min.js +749 -0
  29. package/dist/smart/view-flow/js/view-flow.min.js.gz +0 -0
  30. package/dist/smart/view-flow/lang/en.json +24 -0
  31. package/dist/smart/view-flow/lang/en.json.gz +0 -0
  32. package/dist/smart/view-flow/lang/ru.json +24 -0
  33. package/dist/smart/view-flow/lang/ru.json.gz +0 -0
  34. package/dist/smart/view-flow/probe.json +149 -0
  35. package/dist/smart/view-flow/probe.json.gz +0 -0
  36. package/dist/smart/view-flow/smart.manifest.json +486 -0
  37. package/dist/smart/view-flow/smart.manifest.json.gz +0 -0
  38. package/dist/smart/view-flow/static/default/answered.html +57 -0
  39. package/dist/smart/view-flow/static/default/answered.html.gz +0 -0
  40. package/dist/smart/view-flow/static/default/ask.html +146 -0
  41. package/dist/smart/view-flow/static/default/ask.html.gz +0 -0
  42. package/dist/smart/view-flow/static/default/expired.html +16 -0
  43. package/dist/smart/view-flow/static/default/expired.html.gz +0 -0
  44. package/dist/smart/view-flow/static/default/groups.html +44 -0
  45. package/dist/smart/view-flow/static/default/groups.html.gz +0 -0
  46. package/dist/smart/view-flow/static/default/reference.html +72 -0
  47. package/dist/smart/view-flow/static/default/reference.html.gz +0 -0
  48. package/dist/smart/view-flow/static/default/untitled.html +41 -0
  49. package/dist/smart/view-flow/static/default/untitled.html.gz +0 -0
  50. package/dist/smart/view-flow/static/sheets.json +443 -0
  51. package/dist/smart/view-flow/static/sheets.json.gz +0 -0
  52. package/dist/smart/view-flow/template/default.css +180 -0
  53. package/dist/smart/view-flow/template/default.css.gz +0 -0
  54. package/dist/smart/view-flow/template/default.js +136 -0
  55. package/dist/smart/view-flow/template/default.js.gz +0 -0
  56. package/dist/smart/view-properties/component.json +8 -1
  57. package/dist/smart/view-properties/component.json.gz +0 -0
  58. package/dist/smart/view-properties/css/view-properties.css +367 -0
  59. package/dist/smart/view-properties/css/view-properties.css.gz +0 -0
  60. package/dist/smart/view-properties/css/view-properties.min.css +1 -0
  61. package/dist/smart/view-properties/css/view-properties.min.css.gz +0 -0
  62. package/dist/smart/view-properties/js/view-properties.js +1755 -169
  63. package/dist/smart/view-properties/js/view-properties.js.gz +0 -0
  64. package/dist/smart/view-properties/js/view-properties.min.js +491 -378
  65. package/dist/smart/view-properties/js/view-properties.min.js.gz +0 -0
  66. package/dist/smart/view-properties/smart.manifest.json +38 -3
  67. package/dist/smart/view-properties/smart.manifest.json.gz +0 -0
  68. package/dist/smart/view-properties/template/default.js +1 -77
  69. package/dist/smart/view-properties/template/default.js.gz +0 -0
  70. package/dist/smart/view-table/js/view-table.js +2 -0
  71. package/dist/smart/view-table/js/view-table.js.gz +0 -0
  72. package/dist/smart/view-table/js/view-table.min.js +2 -0
  73. package/dist/smart/view-table/js/view-table.min.js.gz +0 -0
  74. package/package.json +1 -1
@@ -0,0 +1,620 @@
1
+ {
2
+ "$comment": "sf-view-flow, standard simai.smart-component 1.4 (vocabulary 1.1.5): properties as a block in a flow. Design: ui-view docs/design/sf-view-flow.md. The confirm surface (SIMAI Framework helpers/confirm-surface.js) gives the states, the expiry, the answer and expired events and the actions open, answer, confirm and cancel; the field values are sf-view-properties' js/field-value.js over the Framework field renderers.",
3
+ "id": "smart.view-flow",
4
+ "tag": "sf-view-flow",
5
+ "version": "1.1.0",
6
+ "kind": "leaf",
7
+ "family": "record",
8
+ "settings": {
9
+ "mode": {
10
+ "type": "enum",
11
+ "values": [
12
+ "view",
13
+ "edit"
14
+ ],
15
+ "default": "view",
16
+ "summary": "view: the fields shown, read-only, with no foot. edit: the fields as controls and the answers at the foot (Send, Cancel); after the answer they are shown again, read-only."
17
+ },
18
+ "heading": {
19
+ "type": "string",
20
+ "default": "",
21
+ "summary": "The header line; also the block's accessible name. Without one the block is named «Properties»."
22
+ },
23
+ "heading-level": {
24
+ "type": "enum",
25
+ "values": [
26
+ "2",
27
+ "3",
28
+ "4",
29
+ "5",
30
+ "6"
31
+ ],
32
+ "default": "3",
33
+ "summary": "The heading's level where the block is placed."
34
+ },
35
+ "fields": {
36
+ "type": "list",
37
+ "default": [],
38
+ "of": {
39
+ "key": "string",
40
+ "label": {
41
+ "type": "string",
42
+ "optional": true
43
+ },
44
+ "propertyType": "string",
45
+ "value": {
46
+ "type": "any",
47
+ "nullable": true,
48
+ "optional": true
49
+ },
50
+ "required": {
51
+ "type": "boolean",
52
+ "optional": true
53
+ },
54
+ "readonly": {
55
+ "type": "boolean",
56
+ "optional": true
57
+ },
58
+ "width": {
59
+ "type": "string",
60
+ "optional": true
61
+ },
62
+ "hint": {
63
+ "type": "string",
64
+ "optional": true
65
+ },
66
+ "when": {
67
+ "type": "object",
68
+ "optional": true
69
+ }
70
+ },
71
+ "x-markup": "the attribute takes the same list as JSON (markup, the Studio); the property wins",
72
+ "summary": "The field descriptors, sf-view-properties' shape (key, label, propertyType, value, required, readonly, width, hint, options, when ...). JSON in markup; a property set from script wins."
73
+ },
74
+ "groups": {
75
+ "type": "list",
76
+ "default": [],
77
+ "of": {
78
+ "key": "string",
79
+ "label": {
80
+ "type": "string",
81
+ "optional": true
82
+ },
83
+ "collapsible": {
84
+ "type": "boolean",
85
+ "optional": true
86
+ },
87
+ "collapsed": {
88
+ "type": "boolean",
89
+ "optional": true
90
+ },
91
+ "fields": "list"
92
+ },
93
+ "x-markup": "the attribute takes the same list as JSON; the property wins",
94
+ "summary": "Named groups of field descriptors, each optionally collapsible (collapsible, collapsed). Wins over fields when both are given."
95
+ },
96
+ "state": {
97
+ "type": "enum",
98
+ "values": [
99
+ "open",
100
+ "pending",
101
+ "accepted",
102
+ "declined",
103
+ "expired"
104
+ ],
105
+ "default": "open",
106
+ "summary": "Where the answer is (edit mode). open: the controls and the answers. pending: an answer is on its way (set by a press). accepted: the values sent, read-only. declined, expired: only the outcome."
107
+ },
108
+ "expires-at": {
109
+ "type": "date",
110
+ "optional": true,
111
+ "summary": "ISO 8601. Past it an open block reads as expired and says so once with sf-view-flow-expired."
112
+ },
113
+ "block-id": {
114
+ "type": "id",
115
+ "default": "",
116
+ "summary": "The host's name for the block, carried back in every event."
117
+ },
118
+ "disabled": {
119
+ "type": "boolean",
120
+ "default": false,
121
+ "summary": "The controls and the answers are shown and cannot be used (an answer is on its way elsewhere in the flow)."
122
+ },
123
+ "size": {
124
+ "type": "enum",
125
+ "values": [
126
+ "1",
127
+ "1/2"
128
+ ],
129
+ "default": "1/2",
130
+ "summary": "The block's size: its text, labels and controls. 1/2 sits in a message."
131
+ },
132
+ "cancelable": {
133
+ "type": "boolean",
134
+ "default": true,
135
+ "summary": "Whether Cancel is offered beside Send."
136
+ },
137
+ "submit-text": {
138
+ "type": "string",
139
+ "default-from": "runtime.submit-text",
140
+ "summary": "The sending answer; empty is Send in the page's language."
141
+ },
142
+ "cancel-text": {
143
+ "type": "string",
144
+ "default-from": "runtime.cancel-text",
145
+ "summary": "The cancelling answer; empty is Cancel in the page's language."
146
+ },
147
+ "empty-text": {
148
+ "type": "string",
149
+ "default-from": "runtime.empty-text",
150
+ "summary": "What an empty value reads as."
151
+ },
152
+ "required-text": {
153
+ "type": "string",
154
+ "default-from": "runtime.required-text",
155
+ "summary": "Said under a required field left empty when Send is pressed."
156
+ },
157
+ "invalid-text": {
158
+ "type": "string",
159
+ "default-from": "runtime.invalid-text",
160
+ "summary": "The status line when Send was stopped by the fields."
161
+ }
162
+ },
163
+ "values": {},
164
+ "events": {
165
+ "answer": {
166
+ "carries": {
167
+ "id": {
168
+ "type": "id",
169
+ "summary": "block-id"
170
+ },
171
+ "accepted": "boolean",
172
+ "values": {
173
+ "type": "object",
174
+ "optional": true,
175
+ "summary": "With accepted true: every shown, editable field's value by key."
176
+ }
177
+ },
178
+ "cancelable": true,
179
+ "summary": "The person answered (vocabulary answer): Send with the values, or Cancel. Cancel the event to keep the block open."
180
+ },
181
+ "expired": {
182
+ "carries": {
183
+ "id": {
184
+ "type": "id",
185
+ "summary": "block-id"
186
+ }
187
+ },
188
+ "own-verb": true,
189
+ "summary": "An open block passed expires-at; said once per time."
190
+ },
191
+ "open": {
192
+ "carries": {
193
+ "id": {
194
+ "type": "id",
195
+ "summary": "block-id"
196
+ },
197
+ "field": "string",
198
+ "value": "object"
199
+ },
200
+ "summary": "A reference value (a record, a user) was pressed, vocabulary open: {id, field, value}. Following it is the host's."
201
+ }
202
+ },
203
+ "actions": {
204
+ "open": {
205
+ "x-outcomes": [
206
+ "applied",
207
+ "refused"
208
+ ],
209
+ "summary": "Puts the question again (state open); asked by an assembly it answers {accepted, reason, value} when the person answers or the time runs out.",
210
+ "x-returns": {
211
+ "type": "object",
212
+ "description": "{outcome: applied} or {outcome: refused, reason}"
213
+ }
214
+ },
215
+ "answer": {
216
+ "with": {
217
+ "accepted": "boolean"
218
+ },
219
+ "emits": "answer",
220
+ "x-outcomes": [
221
+ "applied",
222
+ "refused"
223
+ ],
224
+ "summary": "Answer as the person would: accepted true sends (after the block's own check of the fields), false cancels. Refused invalid, closed, disabled or prevented.",
225
+ "x-returns": {
226
+ "type": "object",
227
+ "description": "{outcome: applied} or {outcome: refused, reason}"
228
+ }
229
+ },
230
+ "confirm": {
231
+ "x-outcomes": [
232
+ "applied",
233
+ "refused"
234
+ ],
235
+ "summary": "Send; data-sf-action=\"<id>.confirm\".",
236
+ "x-returns": {
237
+ "type": "object",
238
+ "description": "{outcome: applied} or {outcome: refused, reason}"
239
+ }
240
+ },
241
+ "cancel": {
242
+ "x-outcomes": [
243
+ "applied",
244
+ "refused"
245
+ ],
246
+ "summary": "Cancel; data-sf-action=\"<id>.cancel\".",
247
+ "x-returns": {
248
+ "type": "object",
249
+ "description": "{outcome: applied} or {outcome: refused, reason}"
250
+ }
251
+ },
252
+ "settle": {
253
+ "with": {
254
+ "result": "object"
255
+ },
256
+ "x-outcomes": [
257
+ "applied",
258
+ "refused"
259
+ ],
260
+ "summary": "The host's answer to an answer, in the record port's words: {answer: applied, values?} shows the values sent, read-only; {answer: refused, errors?, message?} reopens the block with each error under its field; reason closed or expired closes it.",
261
+ "x-returns": {
262
+ "type": "object",
263
+ "description": "{outcome: applied} or {outcome: refused, reason}"
264
+ }
265
+ }
266
+ },
267
+ "slots": {
268
+ "description": {}
269
+ },
270
+ "layer": {
271
+ "kind": "surface",
272
+ "locks-page": false,
273
+ "traps-focus": false
274
+ },
275
+ "side-effects": [],
276
+ "keyboard": {
277
+ "host": {
278
+ "Tab": "reach",
279
+ "Enter": "select",
280
+ "Space": "select"
281
+ }
282
+ },
283
+ "relations": [
284
+ {
285
+ "name": "icons"
286
+ },
287
+ {
288
+ "name": "cl-icon",
289
+ "$comment": [
290
+ "The status glyph and a collapsible group's chevron are sf-icon; a tag the",
291
+ "block renders is a tag it fetches."
292
+ ]
293
+ },
294
+ {
295
+ "name": "cl-button",
296
+ "$comment": [
297
+ "Send and Cancel."
298
+ ]
299
+ },
300
+ {
301
+ "name": "cl-avatar",
302
+ "$comment": [
303
+ "Below: what the Framework field renderers draw for a value shown or edited,",
304
+ "as sf-view-properties fetches them. The block draws every field through",
305
+ "the renderer set (view-properties/js/field-value.js), so a tag the set",
306
+ "emits is a tag the block fetches."
307
+ ]
308
+ },
309
+ {
310
+ "name": "cl-badge"
311
+ },
312
+ {
313
+ "name": "cl-tag"
314
+ },
315
+ {
316
+ "name": "cl-reference-link"
317
+ },
318
+ {
319
+ "name": "cl-progress-scale"
320
+ },
321
+ {
322
+ "name": "cl-file-preview"
323
+ },
324
+ {
325
+ "name": "cl-input-color"
326
+ },
327
+ {
328
+ "name": "cl-input-country"
329
+ },
330
+ {
331
+ "name": "cl-help-mark",
332
+ "$comment": [
333
+ "A field's hint beside its label."
334
+ ]
335
+ },
336
+ {
337
+ "name": "cl-list-item"
338
+ },
339
+ {
340
+ "name": "cl-spinner"
341
+ },
342
+ {
343
+ "name": "cl-slider-range",
344
+ "lazy": true
345
+ },
346
+ {
347
+ "name": "cl-input",
348
+ "$comment": [
349
+ "Below, not lazy: the controls a block asking for fields draws at once.",
350
+ "Fetched later, a control drawn by the block stays empty until its code",
351
+ "comes and every field below it moves down (first-paint gate at 390 px,",
352
+ "2026-11-06); a block in a flow mostly asks, so they come with it."
353
+ ]
354
+ },
355
+ {
356
+ "name": "cl-input-textarea"
357
+ },
358
+ {
359
+ "name": "cl-dropdown"
360
+ },
361
+ {
362
+ "name": "cl-input-date"
363
+ },
364
+ {
365
+ "name": "cl-switch"
366
+ },
367
+ {
368
+ "name": "cl-checkbox"
369
+ },
370
+ {
371
+ "name": "cl-button-group",
372
+ "lazy": true
373
+ },
374
+ {
375
+ "name": "cl-input-quantity",
376
+ "$comment": [
377
+ "A number with variant stepper."
378
+ ]
379
+ },
380
+ {
381
+ "name": "cl-input-rich",
382
+ "lazy": true,
383
+ "$comment": [
384
+ "An html field edited."
385
+ ]
386
+ },
387
+ {
388
+ "name": "cl-input-image",
389
+ "lazy": true,
390
+ "$comment": [
391
+ "A single image shown or replaced."
392
+ ]
393
+ },
394
+ {
395
+ "name": "cl-button-icon",
396
+ "lazy": true,
397
+ "$comment": [
398
+ "A password field's show/hide."
399
+ ]
400
+ }
401
+ ],
402
+ "templates": {
403
+ "default": {
404
+ "file": "js/templates/default.js",
405
+ "$comment": "The Lit template in JavaScript (§5.2)."
406
+ }
407
+ },
408
+ "styles": "js/templates/default.css",
409
+ "examples": "examples.json",
410
+ "docs": "docs.md",
411
+ "lang": "lang/",
412
+ "accessibility": {
413
+ "role": "region",
414
+ "name": {
415
+ "from": [
416
+ "heading",
417
+ "runtime.block-label"
418
+ ]
419
+ },
420
+ "keys": {
421
+ "Tab": "reach",
422
+ "Enter": "select",
423
+ "Space": "select"
424
+ },
425
+ "x-keys": "Enter and Space press the focused answer (two native buttons) or a collapsible group's toggle; the controls keep their own keys. No implicit Enter-submits."
426
+ },
427
+ "host-states": {
428
+ "data-state": "string"
429
+ },
430
+ "css-variables": {
431
+ "--sf-view-flow-radius": {
432
+ "type": "length",
433
+ "state": "default"
434
+ },
435
+ "--sf-view-flow-inset": {
436
+ "type": "length",
437
+ "state": "default"
438
+ },
439
+ "--sf-view-flow-gap": {
440
+ "type": "length",
441
+ "state": "default"
442
+ },
443
+ "--sf-view-flow-background-color": {
444
+ "type": "color",
445
+ "state": "default"
446
+ },
447
+ "--sf-view-flow-border-color": {
448
+ "type": "color",
449
+ "state": "default"
450
+ }
451
+ },
452
+ "x-summary": "A few properties as a block in a flow (a chat message, a feed, any stream): shows a record's fields, or asks for a few and sends them, then keeps the answer read-only. Fields are sf-view-properties' descriptors drawn by the Framework field renderers; a press is an event, the host answers with settle.",
453
+ "x-words": [
454
+ "submit-text",
455
+ "cancel-text",
456
+ "empty-text",
457
+ "required-text",
458
+ "invalid-text"
459
+ ],
460
+ "x-decisions": [
461
+ "shape: a leaf. It draws its fields through the Framework field renderers (view-properties/js/field-value.js, shared with sf-view-properties), its answers as sf-button and its glyphs as sf-icon.",
462
+ "reuse: the confirm surface of SIMAI Framework (helpers/confirm-surface.js) is the state machine, the expiry timer, the answer and expired events and the actions open, answer, confirm, cancel; the conditions are sf-view-properties' js/conditions.js; dates the host does not format read through sf-view-table's js/format-value.js. Nothing is copied.",
463
+ "names: mode view|edit is sf-view-properties' mode (its two values a block can have without a port); state, expires-at, disabled, heading, heading-level are sf-confirm-change's; block-id is the question's name as change-id and confirm-id are.",
464
+ "events: answer {id, accepted, values} (vocabulary answer; values only with accepted true: every shown, editable field, the whole answer); expired {id} (a fact, own verb); open {id, field, value} for a reference pressed.",
465
+ "the host's answer: settle {answer, errors, message, values} in the record port's words; or the state attribute set directly.",
466
+ "layer: a surface drawn in place, neither locking the page nor trapping focus; no side effects, no network.",
467
+ "a11y-name: the heading when there is one, else the runtime word block-label («Данные»); the description slot is a description, never the name."
468
+ ],
469
+ "x-rule": {
470
+ "$comment": [
471
+ "The block draws its answers as sf-button, its glyphs as sf-icon, and every",
472
+ "field through the Framework field renderers: the relations are those, as",
473
+ "sf-view-properties fetches them, less what only the record component draws",
474
+ "(the drawer, the tree, the arranging, the related lists)."
475
+ ]
476
+ },
477
+ "x-registry": {
478
+ "capabilities": [
479
+ "field-renderers",
480
+ "confirmation",
481
+ "expiry",
482
+ "live-announcement"
483
+ ],
484
+ "persistence": {
485
+ "mode": "none",
486
+ "source_of_truth": "host",
487
+ "network_owner": "host",
488
+ "revision_field": null
489
+ },
490
+ "readiness": {
491
+ "level": "host-required",
492
+ "required_checks": [
493
+ "manifest",
494
+ "loader-rule",
495
+ "view-flow-contract",
496
+ "view-flow-browser"
497
+ ]
498
+ },
499
+ "tags": [
500
+ "record",
501
+ "properties",
502
+ "form",
503
+ "chat",
504
+ "feed"
505
+ ],
506
+ "contracts": {
507
+ "field": {
508
+ "const": "The field descriptor of simai.property-view-port (sf-view-properties): key, label, propertyType, value, required, readonly, width (half|full), hint, placeholder, options, min, max, step, unit, variant, multiple, mask, when."
509
+ },
510
+ "answers": {
511
+ "const": "Send checks the required fields and the controls' own entries, moves the block to pending and dispatches sf-view-flow-answer {id, accepted: true, values} (cancelable; a cancelled event reopens it). Cancel dispatches {id, accepted: false}. The host answers with settle({answer: applied|refused, errors, message, values}) or sets state."
512
+ },
513
+ "slots": {
514
+ "type": "object",
515
+ "properties": {
516
+ "description": {
517
+ "type": "string",
518
+ "description": "A line under the heading."
519
+ }
520
+ }
521
+ }
522
+ },
523
+ "state": {
524
+ "machines": {
525
+ "answer": [
526
+ "open",
527
+ "pending",
528
+ "accepted",
529
+ "declined",
530
+ "expired"
531
+ ]
532
+ },
533
+ "visual_states": [
534
+ "default",
535
+ "loading",
536
+ "success",
537
+ "error",
538
+ "disabled"
539
+ ]
540
+ },
541
+ "artifacts": {
542
+ "fixtures": [],
543
+ "scenarios": []
544
+ },
545
+ "ownership": {
546
+ "source": "simai/ui-view",
547
+ "data": "host",
548
+ "effects": "host",
549
+ "forbidden_client_responsibilities": [
550
+ "saving the values",
551
+ "validating beyond required fields and the controls' own entries",
552
+ "access decisions"
553
+ ]
554
+ },
555
+ "security": {
556
+ "permissions_owner": "host",
557
+ "untrusted_inputs": [
558
+ "heading, labels and values (drawn by the field renderers as text)"
559
+ ],
560
+ "network_policy": "deny"
561
+ },
562
+ "presentation": {
563
+ "themes": [
564
+ "light",
565
+ "dark"
566
+ ],
567
+ "locales": [
568
+ "en",
569
+ "ru"
570
+ ],
571
+ "responsive": [
572
+ "desktop",
573
+ "mobile"
574
+ ],
575
+ "skeleton": {
576
+ "shape": "none",
577
+ "while_loading": "none"
578
+ }
579
+ },
580
+ "ai_guidance": {
581
+ "use_when": "Use sf-view-flow for a few properties inside a flow: an assistant's answer showing a record, or asking the person to fill in a few fields and send them. For a record on a page or in a panel use sf-view-properties.",
582
+ "do_not": [
583
+ "Do not save in the element; answer the answer event and call settle",
584
+ "Do not leave the block pending: settle it, or set state",
585
+ "Do not send markup in labels or values"
586
+ ],
587
+ "required_reads": [
588
+ "inputs",
589
+ "contracts",
590
+ "events",
591
+ "accessibility"
592
+ ],
593
+ "minimal_example": "<sf-view-flow mode=\"edit\" heading=\"Командировка\" block-id=\"b1\" fields='[{\"key\":\"city\",\"label\":\"Город\",\"propertyType\":\"string\",\"required\":true}]'></sf-view-flow>",
594
+ "owner_commands": [
595
+ "node scripts/test.mjs",
596
+ "node scripts/run-browser-probes.mjs <free> <set build>"
597
+ ]
598
+ },
599
+ "accessibility": {
600
+ "accessible_name": "internal",
601
+ "focus": "A section named by its heading (role=heading at heading-level). The status line is a polite live region, present before it speaks; when the answers go, focus moves to it; when Send is stopped or refused, to the first field in error."
602
+ },
603
+ "compatibility": {
604
+ "migrations": [
605
+ {
606
+ "from": "1.0.0",
607
+ "to": "1.1.0",
608
+ "changes": [
609
+ "The block draws the property types money, percent, items, compound and ru.requisites with the record card's controls (view-properties js/set-fields.js, through the shared field value). Nothing changes for a host that sends none of them."
610
+ ]
611
+ }
612
+ ]
613
+ },
614
+ "inputs": {
615
+ "template": {
616
+ "const": "default"
617
+ }
618
+ }
619
+ }
620
+ }