@simai-studio/view 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +183 -0
- package/README.md +75 -2
- package/dist/package-receipt.json +971 -0
- package/dist/set.json +141 -0
- package/dist/smart/rule.js +278 -0
- package/dist/smart/rule.js.gz +0 -0
- package/dist/smart/view/aliases.json +129 -0
- package/dist/smart/view/aliases.json.gz +0 -0
- package/dist/smart/view/component.json +1620 -0
- package/dist/smart/view/component.json.gz +0 -0
- package/dist/smart/view/css/view.css +208 -0
- package/dist/smart/view/css/view.css.gz +0 -0
- package/dist/smart/view/css/view.min.css +2 -0
- package/dist/smart/view/css/view.min.css.gz +0 -0
- package/dist/smart/view/examples.json +668 -0
- package/dist/smart/view/examples.json.gz +0 -0
- package/dist/smart/view/js/view.js +3938 -0
- package/dist/smart/view/js/view.js.gz +0 -0
- package/dist/smart/view/js/view.min.js +1 -0
- package/dist/smart/view/js/view.min.js.gz +0 -0
- package/dist/smart/view/lang/en.json +61 -0
- package/dist/smart/view/lang/en.json.gz +0 -0
- package/dist/smart/view/lang/ru.json +61 -0
- package/dist/smart/view/lang/ru.json.gz +0 -0
- package/dist/smart/view/probe.json +165 -0
- package/dist/smart/view/probe.json.gz +0 -0
- package/dist/smart/view/smart.manifest.json +1570 -0
- package/dist/smart/view/smart.manifest.json.gz +0 -0
- package/dist/smart/view/static/default/embedded.html +96 -0
- package/dist/smart/view/static/default/embedded.html.gz +0 -0
- package/dist/smart/view/static/default/open-record.html +247 -0
- package/dist/smart/view/static/default/open-record.html.gz +0 -0
- package/dist/smart/view/static/default/reference.html +247 -0
- package/dist/smart/view/static/default/reference.html.gz +0 -0
- package/dist/smart/view/static/sheets.json +282 -0
- package/dist/smart/view/static/sheets.json.gz +0 -0
- package/dist/smart/view-properties/aliases.json +174 -0
- package/dist/smart/view-properties/aliases.json.gz +0 -0
- package/dist/smart/view-properties/component.json +1898 -0
- package/dist/smart/view-properties/component.json.gz +0 -0
- package/dist/smart/view-properties/css/view-properties.css +1153 -0
- package/dist/smart/view-properties/css/view-properties.css.gz +0 -0
- package/dist/smart/view-properties/css/view-properties.min.css +2 -0
- package/dist/smart/view-properties/css/view-properties.min.css.gz +0 -0
- package/dist/smart/view-properties/examples.json +841 -0
- package/dist/smart/view-properties/examples.json.gz +0 -0
- package/dist/smart/view-properties/js/view-properties.js +10416 -0
- package/dist/smart/view-properties/js/view-properties.js.gz +0 -0
- package/dist/smart/view-properties/js/view-properties.min.js +1421 -0
- package/dist/smart/view-properties/js/view-properties.min.js.gz +0 -0
- package/dist/smart/view-properties/lang/en.json +96 -0
- package/dist/smart/view-properties/lang/en.json.gz +0 -0
- package/dist/smart/view-properties/lang/ru.json +96 -0
- package/dist/smart/view-properties/lang/ru.json.gz +0 -0
- package/dist/smart/view-properties/probe.json +188 -0
- package/dist/smart/view-properties/probe.json.gz +0 -0
- package/dist/smart/view-properties/skeleton.html +13 -0
- package/dist/smart/view-properties/skeleton.html.gz +0 -0
- package/dist/smart/view-properties/smart.manifest.json +1590 -0
- package/dist/smart/view-properties/smart.manifest.json.gz +0 -0
- package/dist/smart/view-properties/static/default/full.html +2 -0
- package/dist/smart/view-properties/static/default/full.html.gz +0 -0
- package/dist/smart/view-properties/static/default/panel-closed.html +4 -0
- package/dist/smart/view-properties/static/default/panel-closed.html.gz +0 -0
- package/dist/smart/view-properties/static/default/panel.html +4 -0
- package/dist/smart/view-properties/static/default/panel.html.gz +0 -0
- package/dist/smart/view-properties/static/default/reference.html +2 -0
- package/dist/smart/view-properties/static/default/reference.html.gz +0 -0
- package/dist/smart/view-properties/static/sheets.json +426 -0
- package/dist/smart/view-properties/static/sheets.json.gz +0 -0
- package/dist/smart/view-properties/template/default.css +989 -0
- package/dist/smart/view-properties/template/default.css.gz +0 -0
- package/dist/smart/view-properties/template/default.js +1660 -0
- package/dist/smart/view-properties/template/default.js.gz +0 -0
- package/dist/smart/view-table/aliases.json +448 -0
- package/dist/smart/view-table/aliases.json.gz +0 -0
- package/dist/smart/view-table/component.json +2738 -0
- package/dist/smart/view-table/component.json.gz +0 -0
- package/dist/smart/view-table/css/view-table.css +3658 -0
- package/dist/smart/view-table/css/view-table.css.gz +0 -0
- package/dist/smart/view-table/css/view-table.min.css +2 -0
- package/dist/smart/view-table/css/view-table.min.css.gz +0 -0
- package/dist/smart/view-table/examples.json +499 -0
- package/dist/smart/view-table/examples.json.gz +0 -0
- package/dist/smart/view-table/js/view-table.js +13879 -0
- package/dist/smart/view-table/js/view-table.js.gz +0 -0
- package/dist/smart/view-table/js/view-table.min.js +1440 -0
- package/dist/smart/view-table/js/view-table.min.js.gz +0 -0
- package/dist/smart/view-table/lang/en.json +132 -0
- package/dist/smart/view-table/lang/en.json.gz +0 -0
- package/dist/smart/view-table/lang/ru.json +132 -0
- package/dist/smart/view-table/lang/ru.json.gz +0 -0
- package/dist/smart/view-table/probe.json +275 -0
- package/dist/smart/view-table/probe.json.gz +0 -0
- package/dist/smart/view-table/smart.manifest.json +2524 -0
- package/dist/smart/view-table/smart.manifest.json.gz +0 -0
- package/dist/smart/view-table/static/default/current.html +141 -0
- package/dist/smart/view-table/static/default/current.html.gz +0 -0
- package/dist/smart/view-table/static/default/current.skeleton.html +141 -0
- package/dist/smart/view-table/static/default/current.skeleton.html.gz +0 -0
- package/dist/smart/view-table/static/default/empty.html +149 -0
- package/dist/smart/view-table/static/default/empty.html.gz +0 -0
- package/dist/smart/view-table/static/default/loading.html +180 -0
- package/dist/smart/view-table/static/default/loading.html.gz +0 -0
- package/dist/smart/view-table/static/default/many.html +180 -0
- package/dist/smart/view-table/static/default/many.html.gz +0 -0
- package/dist/smart/view-table/static/default/reference.html +136 -0
- package/dist/smart/view-table/static/default/reference.html.gz +0 -0
- package/dist/smart/view-table/static/default/reference.skeleton.html +136 -0
- package/dist/smart/view-table/static/default/reference.skeleton.html.gz +0 -0
- package/dist/smart/view-table/static/default/typed-cells.html +229 -0
- package/dist/smart/view-table/static/default/typed-cells.html.gz +0 -0
- package/dist/smart/view-table/static/default/typed-cells.skeleton.html +229 -0
- package/dist/smart/view-table/static/default/typed-cells.skeleton.html.gz +0 -0
- package/dist/smart/view-table/static/sheets.json +480 -0
- package/dist/smart/view-table/static/sheets.json.gz +0 -0
- package/dist/smart/view-table/studio.fixture.json +17 -0
- package/dist/smart/view-table/studio.fixture.json.gz +0 -0
- package/dist/smart/view-table/studio.scenario.json +30 -0
- package/dist/smart/view-table/studio.scenario.json.gz +0 -0
- package/dist/smart/view-table/template/default.css +1301 -0
- package/dist/smart/view-table/template/default.css.gz +0 -0
- package/dist/smart/view-table/template/default.js +1215 -0
- package/dist/smart/view-table/template/default.js.gz +0 -0
- package/dist/smart/view-table/template/link-cell-contract.js +48 -0
- package/dist/smart/view-table/template/link-cell-contract.js.gz +0 -0
- package/package.json +29 -4
|
@@ -0,0 +1,2738 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "sf-table from its component.json (standard simai.smart-component 1.3.8, vocabulary 1.1.5), migrated from ui-control control/smart-architecture/migration/out/table (convert-1.3.8.mjs over ui-pro 9cbe061); every x-todo decided in x-decisions.",
|
|
3
|
+
"id": "smart.view-table",
|
|
4
|
+
"tag": "sf-view-table",
|
|
5
|
+
"version": "1.14.0",
|
|
6
|
+
"kind": "leaf",
|
|
7
|
+
"family": "table",
|
|
8
|
+
"settings": {
|
|
9
|
+
"selectable": {
|
|
10
|
+
"type": "boolean",
|
|
11
|
+
"default": true
|
|
12
|
+
},
|
|
13
|
+
"settings": {
|
|
14
|
+
"type": "boolean",
|
|
15
|
+
"default": true
|
|
16
|
+
},
|
|
17
|
+
"actions": {
|
|
18
|
+
"type": "boolean",
|
|
19
|
+
"default": true
|
|
20
|
+
},
|
|
21
|
+
"row-actions": {
|
|
22
|
+
"type": "boolean",
|
|
23
|
+
"default": true
|
|
24
|
+
},
|
|
25
|
+
"creatable": {
|
|
26
|
+
"type": "boolean",
|
|
27
|
+
"default": true,
|
|
28
|
+
"summary": "The create button and its menu of kinds, inside actions. A data view turns it off for a host on port 1.10.0 that does not announce create-record."
|
|
29
|
+
},
|
|
30
|
+
"filter-templates": {
|
|
31
|
+
"type": "boolean",
|
|
32
|
+
"default": true,
|
|
33
|
+
"summary": "The button that saves the filter as a template. A data view turns it off when the host keeps no saved views."
|
|
34
|
+
},
|
|
35
|
+
"settings-menu": {
|
|
36
|
+
"type": "boolean",
|
|
37
|
+
"default": true,
|
|
38
|
+
"summary": "The gear in the head of the settings column, which opens the column settings. Off, the column still carries each row's menu. A data view turns it off for a host on port 1.10.0 that does not announce personal-column-settings."
|
|
39
|
+
},
|
|
40
|
+
"pagin": {
|
|
41
|
+
"type": "boolean",
|
|
42
|
+
"default": false
|
|
43
|
+
},
|
|
44
|
+
"filter-text": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"default-from": "runtime.filter-text"
|
|
47
|
+
},
|
|
48
|
+
"clear-text": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"default-from": "runtime.clear-text"
|
|
51
|
+
},
|
|
52
|
+
"search-placeholder": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"default-from": "runtime.search-placeholder"
|
|
55
|
+
},
|
|
56
|
+
"create-text": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"default-from": "runtime.create-text"
|
|
59
|
+
},
|
|
60
|
+
"pagination-total": {
|
|
61
|
+
"type": "number",
|
|
62
|
+
"default": 10,
|
|
63
|
+
"integer": true,
|
|
64
|
+
"min": 0
|
|
65
|
+
},
|
|
66
|
+
"pagination-page-size": {
|
|
67
|
+
"type": "number",
|
|
68
|
+
"default": 10,
|
|
69
|
+
"integer": true,
|
|
70
|
+
"min": 1,
|
|
71
|
+
"max": 100
|
|
72
|
+
},
|
|
73
|
+
"page-sizes": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"default": "10,20,30,40"
|
|
76
|
+
},
|
|
77
|
+
"context-menu-columns": {
|
|
78
|
+
"type": "number",
|
|
79
|
+
"default": 1,
|
|
80
|
+
"summary": "How many columns the settings menu splits its items into. One until a host asks for more: the read was bare for the whole life of this input, so neither its declared default nor a value a host passed ever reached the menu.",
|
|
81
|
+
"integer": true,
|
|
82
|
+
"min": 1,
|
|
83
|
+
"max": 4
|
|
84
|
+
},
|
|
85
|
+
"remember-widths": {
|
|
86
|
+
"type": "boolean",
|
|
87
|
+
"default": false,
|
|
88
|
+
"summary": "Remember the column widths as a view preference (SF.Preferences, under preferences-key or table-settings-key) for a table no host keeps settings for; a double click on a column's edge forgets that column's width."
|
|
89
|
+
},
|
|
90
|
+
"table-settings-key": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"default": "",
|
|
93
|
+
"summary": "Which stored settings this table uses. Empty means the element's own id, and then its instance id, so each table on a page keeps its own. A real default here would make every table share one key and overwrite the others."
|
|
94
|
+
},
|
|
95
|
+
"data-state": {
|
|
96
|
+
"type": "enum",
|
|
97
|
+
"values": [
|
|
98
|
+
"auto",
|
|
99
|
+
"loading",
|
|
100
|
+
"ready",
|
|
101
|
+
"populated",
|
|
102
|
+
"empty",
|
|
103
|
+
"error"
|
|
104
|
+
],
|
|
105
|
+
"default": "auto",
|
|
106
|
+
"x-alias": {
|
|
107
|
+
"populated": "ready"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"loading-text": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"default-from": "runtime.loading-text"
|
|
113
|
+
},
|
|
114
|
+
"empty-text": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"default-from": "runtime.empty-text"
|
|
117
|
+
},
|
|
118
|
+
"empty-description": {
|
|
119
|
+
"type": "string"
|
|
120
|
+
},
|
|
121
|
+
"error-text": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"default-from": "runtime.error-text"
|
|
124
|
+
},
|
|
125
|
+
"retry-text": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"default-from": "runtime.retry-text"
|
|
128
|
+
},
|
|
129
|
+
"toolbar": {
|
|
130
|
+
"type": "boolean",
|
|
131
|
+
"default": true,
|
|
132
|
+
"summary": "Show the built-in toolbar; a composite can provide its own toolbar slot."
|
|
133
|
+
},
|
|
134
|
+
"pin-column-label": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"default-from": "runtime.pin-column-label",
|
|
137
|
+
"summary": "Accessible name and tooltip of the control that pins a column."
|
|
138
|
+
},
|
|
139
|
+
"unpin-column-label": {
|
|
140
|
+
"type": "string",
|
|
141
|
+
"default-from": "runtime.unpin-column-label",
|
|
142
|
+
"summary": "Accessible name and tooltip of the control that unpins a column."
|
|
143
|
+
},
|
|
144
|
+
"column-move-label": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"default-from": "runtime.column-move-label",
|
|
147
|
+
"summary": "Accessible name of the handle that moves a column in the settings list; the column label is appended to it."
|
|
148
|
+
},
|
|
149
|
+
"column-search-placeholder": {
|
|
150
|
+
"type": "string",
|
|
151
|
+
"default-from": "runtime.column-search-placeholder",
|
|
152
|
+
"summary": "Placeholder and accessible name of the search field above the column settings list."
|
|
153
|
+
},
|
|
154
|
+
"column-search-empty-text": {
|
|
155
|
+
"type": "string",
|
|
156
|
+
"default-from": "runtime.column-search-empty-text",
|
|
157
|
+
"summary": "Shown in place of the column settings list when the search matches no field."
|
|
158
|
+
},
|
|
159
|
+
"vertical-scroll": {
|
|
160
|
+
"type": "enum",
|
|
161
|
+
"values": [
|
|
162
|
+
"self",
|
|
163
|
+
"page"
|
|
164
|
+
],
|
|
165
|
+
"default": "self",
|
|
166
|
+
"summary": "Whether the table scrolls within itself or lets the page scroll. Declared as a string with two values; the manifest previously said boolean true, which was wrong in both the type and the default."
|
|
167
|
+
},
|
|
168
|
+
"filter-apply-text": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"default-from": "runtime.filter-apply-text",
|
|
171
|
+
"summary": "Label of the filter window’s commit button; the number of conditions a press would change is appended to it while a draft is pending."
|
|
172
|
+
},
|
|
173
|
+
"layout": {
|
|
174
|
+
"type": "enum",
|
|
175
|
+
"values": [
|
|
176
|
+
"auto",
|
|
177
|
+
"table",
|
|
178
|
+
"list"
|
|
179
|
+
],
|
|
180
|
+
"default": "table",
|
|
181
|
+
"summary": "How the records are drawn: a table, a compact list of records, or auto -- a table while the table's container is at least list-below pixels wide, the list below that. sf-view asks for auto on a page's list."
|
|
182
|
+
},
|
|
183
|
+
"list-below": {
|
|
184
|
+
"type": "number",
|
|
185
|
+
"default": 600,
|
|
186
|
+
"summary": "The container width, in pixels, below which layout auto draws the compact list."
|
|
187
|
+
},
|
|
188
|
+
"list-fields": {
|
|
189
|
+
"type": "number",
|
|
190
|
+
"default": 3,
|
|
191
|
+
"summary": "How many fields a record shows under its title in the compact list, chosen by the columns' priority."
|
|
192
|
+
},
|
|
193
|
+
"size": {
|
|
194
|
+
"type": "enum",
|
|
195
|
+
"values": [
|
|
196
|
+
"1/2",
|
|
197
|
+
"1"
|
|
198
|
+
],
|
|
199
|
+
"default": "1",
|
|
200
|
+
"summary": "The step of the size ladder the table's controls and rows take: 1, or the dense 1/2 -- 32px controls, 14/20 text, rows of the step's height. A size of 1 written on an element the table draws becomes the table's."
|
|
201
|
+
},
|
|
202
|
+
"preferences-key": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"default": "",
|
|
205
|
+
"summary": "The key this table's arrangement -- order, visibility, pinning, widths -- is kept under as a view preference (SF.Preferences, sf-table/<key>); a data view passes its own. Without it table-settings-key is used, and without either nothing is kept."
|
|
206
|
+
},
|
|
207
|
+
"row-actions-visible": {
|
|
208
|
+
"type": "enum",
|
|
209
|
+
"values": [
|
|
210
|
+
"hover",
|
|
211
|
+
"always"
|
|
212
|
+
],
|
|
213
|
+
"default": "hover",
|
|
214
|
+
"summary": "Where a row's action buttons are drawn: in the row under the pointer, with the focus or current (hover, the default), or in every row (always)."
|
|
215
|
+
},
|
|
216
|
+
"drag-rows": {
|
|
217
|
+
"type": "boolean",
|
|
218
|
+
"default": false,
|
|
219
|
+
"summary": "Rows may be dragged out of the list as records (application/x-sf-records+json): the row's record, or every selected record when it is one of them."
|
|
220
|
+
},
|
|
221
|
+
"row-reorder": {
|
|
222
|
+
"type": "boolean",
|
|
223
|
+
"default": false,
|
|
224
|
+
"summary": "Rows can be put in another order by dragging them inside the list; a drop emits sf-table-rows-reorder {ids, before, order}. A data view sets it when the host offers row-reorder."
|
|
225
|
+
},
|
|
226
|
+
"inline-edit": {
|
|
227
|
+
"type": "boolean",
|
|
228
|
+
"default": false,
|
|
229
|
+
"summary": "A boolean cell the record names in `editable` is a checkbox; pressing it emits sf-table-cell-set {id, key, value, revision} and the cell waits for the host. A data view sets it when the host offers inline-edit."
|
|
230
|
+
},
|
|
231
|
+
"active-filter-fields": {
|
|
232
|
+
"type": "list",
|
|
233
|
+
"entries": {
|
|
234
|
+
"key": "id"
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
"bulk-actions": {
|
|
238
|
+
"type": "list"
|
|
239
|
+
},
|
|
240
|
+
"columns": {
|
|
241
|
+
"type": "list",
|
|
242
|
+
"of": {
|
|
243
|
+
"key": "string",
|
|
244
|
+
"label": "string"
|
|
245
|
+
},
|
|
246
|
+
"x-shape": "columns[].key and columns[].label are the package's (ui-pro 9cbe061 table/smart.manifest.json item_contract.package_owned); width, order, visibility and pinning are a person's column settings; constant columns in a manifest give only the key, the label lives in lang roles.<role>.columns.<key> (standard 1.3.8 §11.3)"
|
|
247
|
+
},
|
|
248
|
+
"create-items": {
|
|
249
|
+
"type": "list"
|
|
250
|
+
},
|
|
251
|
+
"filter-fields": {
|
|
252
|
+
"type": "list"
|
|
253
|
+
},
|
|
254
|
+
"rows": {
|
|
255
|
+
"type": "list",
|
|
256
|
+
"entries": {
|
|
257
|
+
"key": "id",
|
|
258
|
+
"changes": "revision"
|
|
259
|
+
},
|
|
260
|
+
"of": {
|
|
261
|
+
"id": "id",
|
|
262
|
+
"revision": {
|
|
263
|
+
"type": "string",
|
|
264
|
+
"optional": true
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
"x-shape": "one entry per row: its id, its revision, and one field per column key; the vocabulary's items (§2.1), written by the host or the data view"
|
|
268
|
+
},
|
|
269
|
+
"table-data": {
|
|
270
|
+
"type": "object"
|
|
271
|
+
},
|
|
272
|
+
"table-settings": {
|
|
273
|
+
"type": "object"
|
|
274
|
+
},
|
|
275
|
+
"templates": {
|
|
276
|
+
"type": "list"
|
|
277
|
+
},
|
|
278
|
+
"toolbar-actions": {
|
|
279
|
+
"type": "list"
|
|
280
|
+
},
|
|
281
|
+
"sort": {
|
|
282
|
+
"type": "list",
|
|
283
|
+
"of": {
|
|
284
|
+
"key": "string",
|
|
285
|
+
"direction": {
|
|
286
|
+
"type": "enum",
|
|
287
|
+
"values": [
|
|
288
|
+
"asc",
|
|
289
|
+
"desc"
|
|
290
|
+
]
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
"controlled": true,
|
|
294
|
+
"x-shape": "vocabulary 1.1.5 §2.1 sort: [{key, direction}], the host's echo; a person's click is the event sort-change"
|
|
295
|
+
},
|
|
296
|
+
"current": {
|
|
297
|
+
"type": "string",
|
|
298
|
+
"default": "",
|
|
299
|
+
"x-shape": "the id of the row the page has open; the row carries aria-current",
|
|
300
|
+
"summary": "The id of the row the page has open: that row carries aria-current and data-current. Writing it marks the row; it does not focus it and sends no event (component.json settings.current)."
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"values": {
|
|
304
|
+
"selected": {
|
|
305
|
+
"type": "id",
|
|
306
|
+
"optional": true,
|
|
307
|
+
"summary": "the current row's id"
|
|
308
|
+
},
|
|
309
|
+
"selection": {
|
|
310
|
+
"type": "list",
|
|
311
|
+
"default": [],
|
|
312
|
+
"summary": "the marked rows' ids, in row order"
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
"events": {
|
|
316
|
+
"select": {
|
|
317
|
+
"carries": {
|
|
318
|
+
"ids": "list"
|
|
319
|
+
},
|
|
320
|
+
"summary": "The marked rows changed, vocabulary §5 select {ids}: once per change of the explicit selection, clearing included. The old name sf-port-output follows once with its old detail until 2026-12-01 (aliases.json)."
|
|
321
|
+
},
|
|
322
|
+
"apply": {
|
|
323
|
+
"carries": {
|
|
324
|
+
"action": "string",
|
|
325
|
+
"scope": {
|
|
326
|
+
"type": "enum",
|
|
327
|
+
"values": [
|
|
328
|
+
"entry",
|
|
329
|
+
"selection",
|
|
330
|
+
"filter"
|
|
331
|
+
]
|
|
332
|
+
},
|
|
333
|
+
"ids": "list",
|
|
334
|
+
"revisions": {
|
|
335
|
+
"type": "object",
|
|
336
|
+
"optional": true
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
"summary": "A row's or the selection's action, vocabulary §5 apply: {action, scope: entry | selection, ids, revisions}. The host decides; emission is not success. The old name sf-table-action-intent follows once with its old detail until 2026-12-01 (aliases.json)."
|
|
340
|
+
},
|
|
341
|
+
"save": {
|
|
342
|
+
"carries": {
|
|
343
|
+
"kind": {
|
|
344
|
+
"type": "enum",
|
|
345
|
+
"values": [
|
|
346
|
+
"columns"
|
|
347
|
+
]
|
|
348
|
+
},
|
|
349
|
+
"reason": "string",
|
|
350
|
+
"column-settings": {
|
|
351
|
+
"type": "object",
|
|
352
|
+
"summary": "The column settings now in force (order, widths, pinned, hidden)."
|
|
353
|
+
},
|
|
354
|
+
"table-settings-key": {
|
|
355
|
+
"type": "string",
|
|
356
|
+
"summary": "The table's settings key."
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
"summary": "The person's column settings, vocabulary §5 save {kind: columns, reason, columnSettings, tableSettingsKey}. The old name sf-table-column-settings-change follows once with its old detail until 2026-12-01 (aliases.json)."
|
|
360
|
+
},
|
|
361
|
+
"column-settings-reset": {
|
|
362
|
+
"carries": {
|
|
363
|
+
"target": {
|
|
364
|
+
"type": "enum",
|
|
365
|
+
"values": [
|
|
366
|
+
"personal"
|
|
367
|
+
],
|
|
368
|
+
"summary": "The layer to reset. The table only resets the person's own layer."
|
|
369
|
+
},
|
|
370
|
+
"table-settings-key": {
|
|
371
|
+
"type": "string",
|
|
372
|
+
"nullable": true,
|
|
373
|
+
"summary": "The table's settings key, or null when it has none."
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
"own-verb": true,
|
|
377
|
+
"summary": "The person asked for the default columns back. The table drops its own stored arrangement and names no defaults: the host (or a data view) resets the person's layer and answers with its defaults."
|
|
378
|
+
},
|
|
379
|
+
"create": {
|
|
380
|
+
"carries": {
|
|
381
|
+
"item": {
|
|
382
|
+
"type": "string",
|
|
383
|
+
"nullable": true,
|
|
384
|
+
"optional": true
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
"summary": "The create button or one of its kinds, vocabulary §5 create {item}. The old name sf-table-create-intent follows once with its old detail until 2026-12-01 (aliases.json)."
|
|
388
|
+
},
|
|
389
|
+
"filter-change": {
|
|
390
|
+
"carries": {
|
|
391
|
+
"template-key": {
|
|
392
|
+
"type": "string",
|
|
393
|
+
"summary": "The selected template's key, or an empty string."
|
|
394
|
+
},
|
|
395
|
+
"template-label": {
|
|
396
|
+
"type": "string",
|
|
397
|
+
"summary": "The selected template's label, or an empty string."
|
|
398
|
+
},
|
|
399
|
+
"values": {
|
|
400
|
+
"type": "object",
|
|
401
|
+
"summary": "The filter values now in force, keyed by filter field."
|
|
402
|
+
},
|
|
403
|
+
"tags": {
|
|
404
|
+
"type": "object",
|
|
405
|
+
"summary": "The active filter chips, keyed by filter field."
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
"own-verb": true,
|
|
409
|
+
"summary": "Request a host-side query after the active filter changes: Apply in the filter window, a chip removed, or the filter cleared. A data view turns it into query.change with filters from values. The detail is the table's getFilterPayload(): the selected template's own data fields spread first, then these four.",
|
|
410
|
+
"x-detail": "also the selected template's data"
|
|
411
|
+
},
|
|
412
|
+
"query": {
|
|
413
|
+
"carries": {
|
|
414
|
+
"reason": "string",
|
|
415
|
+
"context": "object",
|
|
416
|
+
"sequence": {
|
|
417
|
+
"type": "number",
|
|
418
|
+
"integer": true
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
"summary": "A context query of the composition input port, vocabulary §5.1 query {reason, context, sequence}. The old name sf-table-query-intent follows once with its old detail until 2026-12-01 (aliases.json)."
|
|
422
|
+
},
|
|
423
|
+
"refresh": {
|
|
424
|
+
"carries": {},
|
|
425
|
+
"summary": "The retry button of a failed list, vocabulary §5 refresh. The old name sf-table-retry follows once with its old detail until 2026-12-01 (aliases.json)."
|
|
426
|
+
},
|
|
427
|
+
"search-change": {
|
|
428
|
+
"carries": {
|
|
429
|
+
"search": "string"
|
|
430
|
+
},
|
|
431
|
+
"own-verb": true,
|
|
432
|
+
"summary": "Request a host-side query after the debounced search value changes."
|
|
433
|
+
},
|
|
434
|
+
"sort-change": {
|
|
435
|
+
"carries": {
|
|
436
|
+
"key": {
|
|
437
|
+
"type": "string",
|
|
438
|
+
"schema": {
|
|
439
|
+
"minLength": 1
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
"direction": {
|
|
443
|
+
"type": "enum",
|
|
444
|
+
"values": [
|
|
445
|
+
"asc",
|
|
446
|
+
"desc",
|
|
447
|
+
null
|
|
448
|
+
],
|
|
449
|
+
"nullable": true
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
"own-verb": true,
|
|
453
|
+
"summary": "The user activated a sortable header. Direction cycles asc, desc, null (unsorted). Intent only: the table marks the header but does not reorder rows; the host reorders or reloads."
|
|
454
|
+
},
|
|
455
|
+
"template-delete": {
|
|
456
|
+
"carries": {
|
|
457
|
+
"key": {
|
|
458
|
+
"type": "string",
|
|
459
|
+
"schema": {
|
|
460
|
+
"minLength": 1
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
"own-verb": true,
|
|
465
|
+
"summary": "The user deleted saved templates on the Templates tab and pressed Apply. Intent only: the host removes the saved view. One event per deleted template."
|
|
466
|
+
},
|
|
467
|
+
"template-save": {
|
|
468
|
+
"carries": {},
|
|
469
|
+
"own-verb": true,
|
|
470
|
+
"summary": "Request persistence of one or more filter templates (order, pin, delete, default, selected flags or data). Loading a saved view is reported by sf-table-template-select."
|
|
471
|
+
},
|
|
472
|
+
"template-select": {
|
|
473
|
+
"carries": {
|
|
474
|
+
"key": {
|
|
475
|
+
"type": "string",
|
|
476
|
+
"schema": {
|
|
477
|
+
"minLength": 1
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
"own-verb": true,
|
|
482
|
+
"summary": "The user applied a different saved template on the Templates tab. Intent only: the host loads that saved view."
|
|
483
|
+
},
|
|
484
|
+
"toolbar-action": {
|
|
485
|
+
"carries": {
|
|
486
|
+
"action": "string",
|
|
487
|
+
"href": {
|
|
488
|
+
"type": "string",
|
|
489
|
+
"nullable": true,
|
|
490
|
+
"optional": true
|
|
491
|
+
}
|
|
492
|
+
},
|
|
493
|
+
"cancelable": true,
|
|
494
|
+
"own-verb": true,
|
|
495
|
+
"summary": "The user chose one of the view's own actions from the toolbar menu. Intent only, and cancelable: the component follows an item's same-site href unless the host takes the navigation over with preventDefault."
|
|
496
|
+
},
|
|
497
|
+
"reference-open": {
|
|
498
|
+
"carries": {
|
|
499
|
+
"field": "string",
|
|
500
|
+
"value": "object",
|
|
501
|
+
"href": "string"
|
|
502
|
+
},
|
|
503
|
+
"cancelable": true,
|
|
504
|
+
"own-verb": true,
|
|
505
|
+
"x-detail": "also recordId, the row's id"
|
|
506
|
+
},
|
|
507
|
+
"expand": {
|
|
508
|
+
"carries": {
|
|
509
|
+
"id": "id",
|
|
510
|
+
"expanded": {
|
|
511
|
+
"type": "boolean",
|
|
512
|
+
"optional": true
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
"summary": "A tree row opened or closed, vocabulary §5 expand {id, expanded}. The old name sf-table-tree-toggle follows once with its old detail until 2026-12-01 (aliases.json)."
|
|
516
|
+
},
|
|
517
|
+
"load-more": {
|
|
518
|
+
"carries": {
|
|
519
|
+
"direction": {
|
|
520
|
+
"type": "enum",
|
|
521
|
+
"values": [
|
|
522
|
+
"after"
|
|
523
|
+
]
|
|
524
|
+
},
|
|
525
|
+
"parent": {
|
|
526
|
+
"type": "id",
|
|
527
|
+
"nullable": true
|
|
528
|
+
},
|
|
529
|
+
"cursor": {
|
|
530
|
+
"type": "string",
|
|
531
|
+
"nullable": true
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
"summary": "The next page of a tree level, vocabulary §5 load-more {direction: after, parent, cursor}. The old name sf-table-tree-more follows once with its old detail until 2026-12-01 (aliases.json)."
|
|
535
|
+
},
|
|
536
|
+
"rows-drag": {
|
|
537
|
+
"carries": {
|
|
538
|
+
"ids": {
|
|
539
|
+
"type": "list",
|
|
540
|
+
"summary": "The ids dragged: every selected id when the dragged row is selected, otherwise that row's id alone.",
|
|
541
|
+
"schema": {
|
|
542
|
+
"items": {
|
|
543
|
+
"type": "string"
|
|
544
|
+
},
|
|
545
|
+
"minItems": 1
|
|
546
|
+
}
|
|
547
|
+
},
|
|
548
|
+
"source": {
|
|
549
|
+
"type": "string",
|
|
550
|
+
"nullable": true,
|
|
551
|
+
"summary": "Where the rows come from: the table's preferences-key, table-settings-key or id, or null."
|
|
552
|
+
}
|
|
553
|
+
},
|
|
554
|
+
"own-verb": true,
|
|
555
|
+
"summary": "Rows began to be dragged out of a list with drag-rows, for a drop target such as a tree; the same {ids, source} rides in the drag data as application/x-sf-records+json."
|
|
556
|
+
},
|
|
557
|
+
"move": {
|
|
558
|
+
"carries": {
|
|
559
|
+
"ids": "list",
|
|
560
|
+
"before": {
|
|
561
|
+
"type": "id",
|
|
562
|
+
"nullable": true
|
|
563
|
+
},
|
|
564
|
+
"order": "list"
|
|
565
|
+
},
|
|
566
|
+
"summary": "Rows put in another order, vocabulary §5 move {ids, before, order}. The old name sf-table-rows-reorder follows once with its old detail until 2026-12-01 (aliases.json)."
|
|
567
|
+
},
|
|
568
|
+
"cell-set": {
|
|
569
|
+
"carries": {
|
|
570
|
+
"id": "object",
|
|
571
|
+
"key": "string",
|
|
572
|
+
"value": "object",
|
|
573
|
+
"revision": "object"
|
|
574
|
+
},
|
|
575
|
+
"own-verb": true,
|
|
576
|
+
"summary": "A checkable cell was pressed: the record, the field, the new value and the record's revision."
|
|
577
|
+
},
|
|
578
|
+
"view-change": {
|
|
579
|
+
"carries": {
|
|
580
|
+
"view": "object",
|
|
581
|
+
"everywhere": "boolean"
|
|
582
|
+
},
|
|
583
|
+
"own-verb": true
|
|
584
|
+
},
|
|
585
|
+
"window": {
|
|
586
|
+
"carries": {
|
|
587
|
+
"first": {
|
|
588
|
+
"type": "number",
|
|
589
|
+
"integer": true
|
|
590
|
+
},
|
|
591
|
+
"last": {
|
|
592
|
+
"type": "number",
|
|
593
|
+
"integer": true
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
"own-verb": true,
|
|
597
|
+
"summary": "The rows drawn of a long list changed (standard 1.3.8 §18.4): {first, last}, row indexes in the list."
|
|
598
|
+
}
|
|
599
|
+
},
|
|
600
|
+
"actions": {
|
|
601
|
+
"add-rows": {
|
|
602
|
+
"with": {
|
|
603
|
+
"rows": "list"
|
|
604
|
+
},
|
|
605
|
+
"summary": "Append another backend page for show-more mode."
|
|
606
|
+
},
|
|
607
|
+
"apply-query-result": {
|
|
608
|
+
"with": {
|
|
609
|
+
"sequence": {
|
|
610
|
+
"type": "number",
|
|
611
|
+
"integer": true,
|
|
612
|
+
"schema": {
|
|
613
|
+
"minimum": 1
|
|
614
|
+
}
|
|
615
|
+
},
|
|
616
|
+
"rows": "list"
|
|
617
|
+
},
|
|
618
|
+
"summary": "Apply rows answering the newest pending context query. Returns false and changes nothing for a stale, repeated or unknown sequence.",
|
|
619
|
+
"x-returns": {
|
|
620
|
+
"type": "boolean"
|
|
621
|
+
}
|
|
622
|
+
},
|
|
623
|
+
"clear-selection": {
|
|
624
|
+
"summary": "Clear the explicit selection of this instance; emits the selection port once when it changes."
|
|
625
|
+
},
|
|
626
|
+
"request-action-intent": {
|
|
627
|
+
"with": {
|
|
628
|
+
"action-id": {
|
|
629
|
+
"type": "string",
|
|
630
|
+
"schema": {
|
|
631
|
+
"minLength": 1
|
|
632
|
+
}
|
|
633
|
+
},
|
|
634
|
+
"record-ids": {
|
|
635
|
+
"type": "list",
|
|
636
|
+
"schema": {
|
|
637
|
+
"items": {
|
|
638
|
+
"type": [
|
|
639
|
+
"string",
|
|
640
|
+
"integer"
|
|
641
|
+
],
|
|
642
|
+
"minLength": 1
|
|
643
|
+
},
|
|
644
|
+
"minItems": 1
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
},
|
|
648
|
+
"emits": "apply",
|
|
649
|
+
"summary": "Emit a typed row or bulk action request; the host owns execution and authorization. Invalid arguments throw TypeError before emission."
|
|
650
|
+
},
|
|
651
|
+
"request-create-intent": {
|
|
652
|
+
"with": {
|
|
653
|
+
"item-id": {
|
|
654
|
+
"type": "string",
|
|
655
|
+
"optional": true,
|
|
656
|
+
"nullable": true
|
|
657
|
+
}
|
|
658
|
+
},
|
|
659
|
+
"emits": "create",
|
|
660
|
+
"summary": "Emit sf-table-create-intent for the main button (null) or a declared create item id."
|
|
661
|
+
},
|
|
662
|
+
"request-retry": {
|
|
663
|
+
"emits": "refresh",
|
|
664
|
+
"summary": "Emit a retry intent after a failed data request."
|
|
665
|
+
},
|
|
666
|
+
"set-sort": {
|
|
667
|
+
"with": {
|
|
668
|
+
"key": {
|
|
669
|
+
"type": "string",
|
|
670
|
+
"nullable": true
|
|
671
|
+
},
|
|
672
|
+
"direction": {
|
|
673
|
+
"type": "enum",
|
|
674
|
+
"values": [
|
|
675
|
+
"asc",
|
|
676
|
+
"desc"
|
|
677
|
+
],
|
|
678
|
+
"nullable": true
|
|
679
|
+
}
|
|
680
|
+
},
|
|
681
|
+
"summary": "Show the host's current sort on the headers without emitting an event; (null, null) clears it."
|
|
682
|
+
},
|
|
683
|
+
"toggle-tree-row": {
|
|
684
|
+
"with": {
|
|
685
|
+
"row": "object"
|
|
686
|
+
},
|
|
687
|
+
"emits": "expand",
|
|
688
|
+
"summary": "Say that a tree row was opened or closed (sf-table-tree-toggle).",
|
|
689
|
+
"x-returns": {
|
|
690
|
+
"type": "object",
|
|
691
|
+
"description": "The element."
|
|
692
|
+
}
|
|
693
|
+
},
|
|
694
|
+
"request-tree-more": {
|
|
695
|
+
"with": {
|
|
696
|
+
"row": "object"
|
|
697
|
+
},
|
|
698
|
+
"emits": "load-more",
|
|
699
|
+
"summary": "Ask for the next page of a tree level (sf-table-tree-more).",
|
|
700
|
+
"x-returns": {
|
|
701
|
+
"type": "object",
|
|
702
|
+
"description": "The element."
|
|
703
|
+
}
|
|
704
|
+
},
|
|
705
|
+
"focus-row": {
|
|
706
|
+
"with": {
|
|
707
|
+
"id": "id"
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
},
|
|
711
|
+
"selection": "many",
|
|
712
|
+
"window": true,
|
|
713
|
+
"side-effects": [
|
|
714
|
+
"network"
|
|
715
|
+
],
|
|
716
|
+
"keyboard": {
|
|
717
|
+
"host": {
|
|
718
|
+
"Tab": "reach",
|
|
719
|
+
"Shift+Tab": "reach",
|
|
720
|
+
"Escape": "close"
|
|
721
|
+
},
|
|
722
|
+
"row": {
|
|
723
|
+
"ArrowDown": "focus:next",
|
|
724
|
+
"ArrowUp": "focus:prev",
|
|
725
|
+
"Home": "focus:first",
|
|
726
|
+
"End": "focus:last",
|
|
727
|
+
"Enter": "open",
|
|
728
|
+
"Space": "toggle:selected"
|
|
729
|
+
}
|
|
730
|
+
},
|
|
731
|
+
"port": {
|
|
732
|
+
"id": "simai.dataview-port",
|
|
733
|
+
"version": "1.0.0",
|
|
734
|
+
"contract": "src/core/contracts/ports/simai.dataview-port/1.0.0/port.json"
|
|
735
|
+
},
|
|
736
|
+
"relations": [
|
|
737
|
+
{
|
|
738
|
+
"name": "cl-checkbox"
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
"name": "cl-reference-link",
|
|
742
|
+
"$comment": [
|
|
743
|
+
"The cells drawn with another Smart element come with the table, not",
|
|
744
|
+
"after the rows: a reference (sf-reference-link), a file",
|
|
745
|
+
"(sf-file-preview) and a colour (sf-input-color, in a cell as well as in a",
|
|
746
|
+
"card). Fetched lazily, each upgraded some 600 ms after the rows had",
|
|
747
|
+
"drawn and moved the row (stand 24: CLS 0.0145 at 1280 when the data",
|
|
748
|
+
"arrived)."
|
|
749
|
+
]
|
|
750
|
+
},
|
|
751
|
+
{
|
|
752
|
+
"name": "cl-file-preview"
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
"name": "cl-input-color"
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
"name": "cl-input-country",
|
|
759
|
+
"lazy": true,
|
|
760
|
+
"$comment": [
|
|
761
|
+
"A string whose variant is a phone draws sf-input-country. The rule fence",
|
|
762
|
+
"reads a component's own templates, and this element comes from the shared",
|
|
763
|
+
"renderer set instead -- so nothing would have caught its absence until a",
|
|
764
|
+
"page showed an element that never upgraded."
|
|
765
|
+
]
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
"name": "cl-button"
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
"name": "cl-button-icon"
|
|
772
|
+
},
|
|
773
|
+
{
|
|
774
|
+
"name": "icons"
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
"name": "cl-input"
|
|
778
|
+
},
|
|
779
|
+
{
|
|
780
|
+
"name": "cl-tag"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"name": "cl-pagination"
|
|
784
|
+
},
|
|
785
|
+
{
|
|
786
|
+
"name": "cl-spinner"
|
|
787
|
+
},
|
|
788
|
+
{
|
|
789
|
+
"name": "cl-empty-state",
|
|
790
|
+
"$comment": [
|
|
791
|
+
"A table without rows says why in sf-empty-state (owner, 2026-10-14)."
|
|
792
|
+
]
|
|
793
|
+
},
|
|
794
|
+
{
|
|
795
|
+
"name": "cl-input-date",
|
|
796
|
+
"lazy": true
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
"name": "cl-dropdown"
|
|
800
|
+
},
|
|
801
|
+
{
|
|
802
|
+
"name": "cl-tabs",
|
|
803
|
+
"lazy": true,
|
|
804
|
+
"$comment": [
|
|
805
|
+
"The gear's tabs, «Поля» and «Вид» (owner, 2026-10-14)."
|
|
806
|
+
]
|
|
807
|
+
},
|
|
808
|
+
{
|
|
809
|
+
"name": "cl-menu-context",
|
|
810
|
+
"lazy": true
|
|
811
|
+
},
|
|
812
|
+
{
|
|
813
|
+
"name": "cl-sortable",
|
|
814
|
+
"lazy": true,
|
|
815
|
+
"$comment": [
|
|
816
|
+
"The windows' lists are reordered with sf-sortable (owner, 2026-10-13)."
|
|
817
|
+
]
|
|
818
|
+
},
|
|
819
|
+
{
|
|
820
|
+
"name": "cl-radio",
|
|
821
|
+
"lazy": true,
|
|
822
|
+
"$comment": [
|
|
823
|
+
"The filter window's templates are a radio list: a page with nothing else",
|
|
824
|
+
"using sf-radio drew its rows empty (owner, 2026-10-14)."
|
|
825
|
+
]
|
|
826
|
+
},
|
|
827
|
+
{
|
|
828
|
+
"name": "cl-resizer",
|
|
829
|
+
"lazy": true,
|
|
830
|
+
"$comment": [
|
|
831
|
+
"A column's edge is the Framework's resize gesture (owner, 2026-10-14)."
|
|
832
|
+
]
|
|
833
|
+
},
|
|
834
|
+
{
|
|
835
|
+
"name": "cl-avatar"
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
"name": "cl-badge"
|
|
839
|
+
},
|
|
840
|
+
{
|
|
841
|
+
"name": "cl-list-item"
|
|
842
|
+
},
|
|
843
|
+
{
|
|
844
|
+
"name": "cl-modal",
|
|
845
|
+
"lazy": true
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
"name": "cl-slider-range",
|
|
849
|
+
"lazy": true
|
|
850
|
+
}
|
|
851
|
+
],
|
|
852
|
+
"templates": {
|
|
853
|
+
"default": {
|
|
854
|
+
"file": "js/templates/default.js",
|
|
855
|
+
"$comment": "The Lit template in JavaScript, the migration form of §5.2 (§16)."
|
|
856
|
+
}
|
|
857
|
+
},
|
|
858
|
+
"presentation": {
|
|
859
|
+
"skeleton": {
|
|
860
|
+
"$comment": "The rows arrive after the first paint (the data view, or the host, sets them): the derived skeleton (static/default/<example>.skeleton.html) holds their box until they do, and the element keeps it until rows are set (standard 1.3.8 §5.4). Derived rather than skeleton.html: a row is a cell per column, and the template syntax repeats one level (first-paint-skeleton.mjs).",
|
|
861
|
+
"late": [
|
|
862
|
+
"rows"
|
|
863
|
+
]
|
|
864
|
+
}
|
|
865
|
+
},
|
|
866
|
+
"styles": "js/templates/default.css",
|
|
867
|
+
"examples": "examples.json",
|
|
868
|
+
"docs": "docs/docs.md",
|
|
869
|
+
"lang": "lang/",
|
|
870
|
+
"accessibility": {
|
|
871
|
+
"role": "grid",
|
|
872
|
+
"name": {
|
|
873
|
+
"from": [
|
|
874
|
+
"aria-label"
|
|
875
|
+
]
|
|
876
|
+
},
|
|
877
|
+
"keys": {
|
|
878
|
+
"Tab": "reach",
|
|
879
|
+
"Escape": "close",
|
|
880
|
+
"ArrowDown": "focus:next",
|
|
881
|
+
"ArrowUp": "focus:prev",
|
|
882
|
+
"Home": "focus:first",
|
|
883
|
+
"End": "focus:last",
|
|
884
|
+
"Enter": "open",
|
|
885
|
+
"Space": "toggle:selected"
|
|
886
|
+
},
|
|
887
|
+
"announces": {}
|
|
888
|
+
},
|
|
889
|
+
"host-states": {
|
|
890
|
+
"data-sf-view-stripes": "boolean",
|
|
891
|
+
"data-sf-page-scroll": "boolean"
|
|
892
|
+
},
|
|
893
|
+
"css-variables": {
|
|
894
|
+
"--sf-table-row-block-size-1/2": {
|
|
895
|
+
"type": "length",
|
|
896
|
+
"state": "default",
|
|
897
|
+
"x-summary": "published on :root, set by the sheet, read by a page: a one-line row at the step, size 1/2 (docs.md, the list's box)"
|
|
898
|
+
},
|
|
899
|
+
"--sf-table-row-block-size-1": {
|
|
900
|
+
"type": "length",
|
|
901
|
+
"state": "default",
|
|
902
|
+
"x-summary": "published on :root, set by the sheet, read by a page: a one-line row at the step, size 1 (docs.md, the list's box)"
|
|
903
|
+
},
|
|
904
|
+
"--sf-table-row-2-lines-block-size-1/2": {
|
|
905
|
+
"type": "length",
|
|
906
|
+
"state": "default",
|
|
907
|
+
"x-summary": "published on :root, set by the sheet, read by a page: a row whose text takes two lines, size 1/2 (docs.md, the list's box)"
|
|
908
|
+
},
|
|
909
|
+
"--sf-table-row-2-lines-block-size-1": {
|
|
910
|
+
"type": "length",
|
|
911
|
+
"state": "default",
|
|
912
|
+
"x-summary": "published on :root, set by the sheet, read by a page: a row whose text takes two lines, size 1 (docs.md, the list's box)"
|
|
913
|
+
},
|
|
914
|
+
"--sf-table-head-block-size-1/2": {
|
|
915
|
+
"type": "length",
|
|
916
|
+
"state": "default",
|
|
917
|
+
"x-summary": "published on :root, set by the sheet, read by a page: the head row, size 1/2 (docs.md, the list's box)"
|
|
918
|
+
},
|
|
919
|
+
"--sf-table-head-block-size-1": {
|
|
920
|
+
"type": "length",
|
|
921
|
+
"state": "default",
|
|
922
|
+
"x-summary": "published on :root, set by the sheet, read by a page: the head row, size 1 (docs.md, the list's box)"
|
|
923
|
+
},
|
|
924
|
+
"--sf-table-toolbar-block-size-1/2": {
|
|
925
|
+
"type": "length",
|
|
926
|
+
"state": "default",
|
|
927
|
+
"x-summary": "published on :root, set by the sheet, read by a page: the toolbar on one line, size 1/2 (docs.md, the list's box)"
|
|
928
|
+
},
|
|
929
|
+
"--sf-table-toolbar-block-size-1": {
|
|
930
|
+
"type": "length",
|
|
931
|
+
"state": "default",
|
|
932
|
+
"x-summary": "published on :root, set by the sheet, read by a page: the toolbar on one line, size 1 (docs.md, the list's box)"
|
|
933
|
+
},
|
|
934
|
+
"--sf-table-toolbar-gap": {
|
|
935
|
+
"type": "length",
|
|
936
|
+
"state": "default",
|
|
937
|
+
"x-summary": "published on :root, set by the sheet, read by a page: the gap between the toolbar and the head (docs.md, the list's box)"
|
|
938
|
+
},
|
|
939
|
+
"--sf-table-head--background-color": {
|
|
940
|
+
"type": "color",
|
|
941
|
+
"state": "default"
|
|
942
|
+
},
|
|
943
|
+
"--sf-table-row--background-color": {
|
|
944
|
+
"type": "color",
|
|
945
|
+
"state": "default"
|
|
946
|
+
},
|
|
947
|
+
"--sf-table--cell-spacing": {
|
|
948
|
+
"type": "length",
|
|
949
|
+
"state": "default"
|
|
950
|
+
},
|
|
951
|
+
"--sf-table-cell--line-clamp": {
|
|
952
|
+
"type": "number",
|
|
953
|
+
"state": "default"
|
|
954
|
+
},
|
|
955
|
+
"--sf-table-context-menu--z-index": {
|
|
956
|
+
"type": "number",
|
|
957
|
+
"state": "open"
|
|
958
|
+
},
|
|
959
|
+
"--sf-table-context-menu--max-width": {
|
|
960
|
+
"type": "length",
|
|
961
|
+
"state": "open"
|
|
962
|
+
}
|
|
963
|
+
},
|
|
964
|
+
"aliases": {
|
|
965
|
+
"$comment": "Dated aliases of sf-view-table for the shim (core/js/aliases.js, standard §16 item 20, vocabulary §9). mode: same-detail (the shim sends the new and the old name), detail-adds (the old name gets the larger new detail), split (the old detail from the element's adapter, sfAliasAdapters), host-attribute (no shim).",
|
|
966
|
+
"since": "2026-10-27",
|
|
967
|
+
"remove-after": "2026-12-01",
|
|
968
|
+
"rows": [
|
|
969
|
+
{
|
|
970
|
+
"from": "aria-label",
|
|
971
|
+
"to": null,
|
|
972
|
+
"kind": "attribute",
|
|
973
|
+
"mode": "host-attribute",
|
|
974
|
+
"section": "§3.1, §4.8",
|
|
975
|
+
"note": "stays a host attribute, read for the accessible name; no shim"
|
|
976
|
+
},
|
|
977
|
+
{
|
|
978
|
+
"from": "sf-table-action-intent",
|
|
979
|
+
"to": "sf-table-apply",
|
|
980
|
+
"kind": "event",
|
|
981
|
+
"mode": "split",
|
|
982
|
+
"cancelable": false,
|
|
983
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
984
|
+
"note": "vocabulary §5 apply {action, scope, ids, revisions}; the old detail {action_id, record_ids} is made by the element's adapter (vocabulary §9: sf-table-action-intent → sf-table-apply)",
|
|
985
|
+
"summary": "Request one host-resolved row or bulk operation. Event source is the owning table instance; emission is not operation success."
|
|
986
|
+
},
|
|
987
|
+
{
|
|
988
|
+
"from": "sf-table-create-intent",
|
|
989
|
+
"to": "sf-table-create",
|
|
990
|
+
"kind": "event",
|
|
991
|
+
"mode": "same-detail",
|
|
992
|
+
"cancelable": false,
|
|
993
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
994
|
+
"note": "vocabulary §5 create; the detail {item} is unchanged",
|
|
995
|
+
"summary": "The user pressed the create button (item null) or chose an item from its menu (item id). Intent only: the host opens its create form."
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
"from": "sf-port-output",
|
|
999
|
+
"to": "sf-table-select",
|
|
1000
|
+
"kind": "event",
|
|
1001
|
+
"mode": "split",
|
|
1002
|
+
"cancelable": false,
|
|
1003
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1004
|
+
"note": "vocabulary §5 select {ids}; the composition port's old detail {port: selection, value} is made by the element's adapter",
|
|
1005
|
+
"summary": "Composition port output. The table emits port selection (record-ids.v1) once per change of its explicit selection, including clearing; a common sf-composition-scope routes it."
|
|
1006
|
+
},
|
|
1007
|
+
{
|
|
1008
|
+
"from": "sf-table-query-intent",
|
|
1009
|
+
"to": "sf-table-query",
|
|
1010
|
+
"kind": "event",
|
|
1011
|
+
"mode": "same-detail",
|
|
1012
|
+
"cancelable": false,
|
|
1013
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1014
|
+
"note": "vocabulary §5.1: sf-table-query-intent → sf-table-query; the detail {reason, context, sequence} is unchanged",
|
|
1015
|
+
"summary": "Request a host-side query after the context input port changed. The host resolves the relation and access, then answers with applyQueryResult(sequence, rows); older sequences are ignored."
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
"from": "sf-table-retry",
|
|
1019
|
+
"to": "sf-table-refresh",
|
|
1020
|
+
"kind": "event",
|
|
1021
|
+
"mode": "same-detail",
|
|
1022
|
+
"cancelable": false,
|
|
1023
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1024
|
+
"note": "vocabulary §5 refresh (table-retry)",
|
|
1025
|
+
"summary": "Request another host-side load after the error state."
|
|
1026
|
+
},
|
|
1027
|
+
{
|
|
1028
|
+
"from": "sf-table-tree-toggle",
|
|
1029
|
+
"to": "sf-table-expand",
|
|
1030
|
+
"kind": "event",
|
|
1031
|
+
"mode": "same-detail",
|
|
1032
|
+
"cancelable": false,
|
|
1033
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1034
|
+
"note": "vocabulary §5 expand; the detail {id, expanded} is unchanged",
|
|
1035
|
+
"summary": "The person opened or closed a tree row. The data view answers it; the table only says which row and whether it was open."
|
|
1036
|
+
},
|
|
1037
|
+
{
|
|
1038
|
+
"from": "sf-table-tree-more",
|
|
1039
|
+
"to": "sf-table-load-more",
|
|
1040
|
+
"kind": "event",
|
|
1041
|
+
"mode": "detail-adds",
|
|
1042
|
+
"cancelable": false,
|
|
1043
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1044
|
+
"note": "vocabulary §5 load-more; the new detail adds direction: after to {parent, cursor}",
|
|
1045
|
+
"summary": "The person asked for the next page of one tree level."
|
|
1046
|
+
},
|
|
1047
|
+
{
|
|
1048
|
+
"from": "sf-table-rows-reorder",
|
|
1049
|
+
"to": "sf-table-move",
|
|
1050
|
+
"kind": "event",
|
|
1051
|
+
"mode": "same-detail",
|
|
1052
|
+
"cancelable": false,
|
|
1053
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1054
|
+
"note": "vocabulary §5 move; the detail {ids, before, order} is unchanged",
|
|
1055
|
+
"summary": "Rows were dragged into another order inside the list: the ids that moved, the row they now stand before (null: the end) and the whole order shown."
|
|
1056
|
+
},
|
|
1057
|
+
{
|
|
1058
|
+
"from": "sf-table-column-settings-change",
|
|
1059
|
+
"to": "sf-table-save",
|
|
1060
|
+
"kind": "event",
|
|
1061
|
+
"mode": "detail-adds",
|
|
1062
|
+
"cancelable": false,
|
|
1063
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1064
|
+
"note": "vocabulary §5 save {kind: columns}; the new detail adds kind to {reason, columnSettings, tableSettingsKey}",
|
|
1065
|
+
"when": {
|
|
1066
|
+
"kind": "columns"
|
|
1067
|
+
},
|
|
1068
|
+
"summary": "Request persistence of a column preference delta after resize, reorder or visibility changes."
|
|
1069
|
+
},
|
|
1070
|
+
{
|
|
1071
|
+
"from": "sf-table:column-settings-change",
|
|
1072
|
+
"to": "sf-table-save",
|
|
1073
|
+
"kind": "event",
|
|
1074
|
+
"mode": "detail-adds",
|
|
1075
|
+
"cancelable": false,
|
|
1076
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1077
|
+
"note": "vocabulary §5.1: sf-table:column-settings-change → sf-table-save {kind: columns}; a colon name (§8)",
|
|
1078
|
+
"when": {
|
|
1079
|
+
"kind": "columns"
|
|
1080
|
+
}
|
|
1081
|
+
},
|
|
1082
|
+
{
|
|
1083
|
+
"from": "onColumnSettingsChange",
|
|
1084
|
+
"to": "sf-table-save",
|
|
1085
|
+
"kind": "event",
|
|
1086
|
+
"mode": "detail-adds",
|
|
1087
|
+
"cancelable": false,
|
|
1088
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1089
|
+
"note": "a camelCase name outside §8 (simai/ui-pro#1); ui-admin listens to it (src/main.ts, src/smart-component-catalog.ts)",
|
|
1090
|
+
"when": {
|
|
1091
|
+
"kind": "columns"
|
|
1092
|
+
}
|
|
1093
|
+
},
|
|
1094
|
+
{
|
|
1095
|
+
"from": "onSearchEnd",
|
|
1096
|
+
"to": "sf-table-search-change",
|
|
1097
|
+
"kind": "event",
|
|
1098
|
+
"mode": "split",
|
|
1099
|
+
"cancelable": false,
|
|
1100
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1101
|
+
"note": "a camelCase name outside §8 (simai/ui-pro#1); its detail was the search text itself, made by the element's adapter; ui-admin listens to it (src/main.ts, src/smart-component-catalog.ts)"
|
|
1102
|
+
},
|
|
1103
|
+
{
|
|
1104
|
+
"from": "onTemplateSave",
|
|
1105
|
+
"to": "sf-table-template-save",
|
|
1106
|
+
"kind": "event",
|
|
1107
|
+
"mode": "same-detail",
|
|
1108
|
+
"cancelable": false,
|
|
1109
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1110
|
+
"note": "a camelCase name outside §8 (simai/ui-pro#1); ui-admin listens to it"
|
|
1111
|
+
},
|
|
1112
|
+
{
|
|
1113
|
+
"from": "onFilterUpdate",
|
|
1114
|
+
"to": "sf-table-filter-change",
|
|
1115
|
+
"kind": "event",
|
|
1116
|
+
"mode": "same-detail",
|
|
1117
|
+
"cancelable": false,
|
|
1118
|
+
"section": "§8, §16 item 20, vocabulary §9",
|
|
1119
|
+
"note": "a camelCase name outside §8 (simai/ui-pro#1); ui-admin listens to it"
|
|
1120
|
+
},
|
|
1121
|
+
{
|
|
1122
|
+
"from": "sf-table",
|
|
1123
|
+
"to": "sf-view-table",
|
|
1124
|
+
"kind": "tag",
|
|
1125
|
+
"since": "2026-11-03",
|
|
1126
|
+
"remove_after": "2027-01-01",
|
|
1127
|
+
"since-version": "1.14.0",
|
|
1128
|
+
"section": "rename plan R2 (ui-control RENAME-PLAN-2026-11-03), naming decision 2026-11-02",
|
|
1129
|
+
"note": "the element is sf-view-table; sf-table is a subclass defined beside it until the date"
|
|
1130
|
+
},
|
|
1131
|
+
{
|
|
1132
|
+
"from": "sf-table-select",
|
|
1133
|
+
"to": "sf-view-table-select",
|
|
1134
|
+
"kind": "event",
|
|
1135
|
+
"since": "2026-11-03",
|
|
1136
|
+
"remove_after": "2027-01-01",
|
|
1137
|
+
"mode": "same-detail",
|
|
1138
|
+
"section": "§8",
|
|
1139
|
+
"note": "the event name carries the tag"
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
"from": "sf-table-apply",
|
|
1143
|
+
"to": "sf-view-table-apply",
|
|
1144
|
+
"kind": "event",
|
|
1145
|
+
"since": "2026-11-03",
|
|
1146
|
+
"remove_after": "2027-01-01",
|
|
1147
|
+
"mode": "same-detail",
|
|
1148
|
+
"section": "§8",
|
|
1149
|
+
"note": "the event name carries the tag"
|
|
1150
|
+
},
|
|
1151
|
+
{
|
|
1152
|
+
"from": "sf-table-save",
|
|
1153
|
+
"to": "sf-view-table-save",
|
|
1154
|
+
"kind": "event",
|
|
1155
|
+
"since": "2026-11-03",
|
|
1156
|
+
"remove_after": "2027-01-01",
|
|
1157
|
+
"mode": "same-detail",
|
|
1158
|
+
"section": "§8",
|
|
1159
|
+
"note": "the event name carries the tag"
|
|
1160
|
+
},
|
|
1161
|
+
{
|
|
1162
|
+
"from": "sf-table-column-settings-reset",
|
|
1163
|
+
"to": "sf-view-table-column-settings-reset",
|
|
1164
|
+
"kind": "event",
|
|
1165
|
+
"since": "2026-11-03",
|
|
1166
|
+
"remove_after": "2027-01-01",
|
|
1167
|
+
"mode": "same-detail",
|
|
1168
|
+
"section": "§8",
|
|
1169
|
+
"note": "the event name carries the tag"
|
|
1170
|
+
},
|
|
1171
|
+
{
|
|
1172
|
+
"from": "sf-table-create",
|
|
1173
|
+
"to": "sf-view-table-create",
|
|
1174
|
+
"kind": "event",
|
|
1175
|
+
"since": "2026-11-03",
|
|
1176
|
+
"remove_after": "2027-01-01",
|
|
1177
|
+
"mode": "same-detail",
|
|
1178
|
+
"section": "§8",
|
|
1179
|
+
"note": "the event name carries the tag"
|
|
1180
|
+
},
|
|
1181
|
+
{
|
|
1182
|
+
"from": "sf-table-filter-change",
|
|
1183
|
+
"to": "sf-view-table-filter-change",
|
|
1184
|
+
"kind": "event",
|
|
1185
|
+
"since": "2026-11-03",
|
|
1186
|
+
"remove_after": "2027-01-01",
|
|
1187
|
+
"mode": "same-detail",
|
|
1188
|
+
"section": "§8",
|
|
1189
|
+
"note": "the event name carries the tag"
|
|
1190
|
+
},
|
|
1191
|
+
{
|
|
1192
|
+
"from": "sf-table-query",
|
|
1193
|
+
"to": "sf-view-table-query",
|
|
1194
|
+
"kind": "event",
|
|
1195
|
+
"since": "2026-11-03",
|
|
1196
|
+
"remove_after": "2027-01-01",
|
|
1197
|
+
"mode": "same-detail",
|
|
1198
|
+
"section": "§8",
|
|
1199
|
+
"note": "the event name carries the tag"
|
|
1200
|
+
},
|
|
1201
|
+
{
|
|
1202
|
+
"from": "sf-table-refresh",
|
|
1203
|
+
"to": "sf-view-table-refresh",
|
|
1204
|
+
"kind": "event",
|
|
1205
|
+
"since": "2026-11-03",
|
|
1206
|
+
"remove_after": "2027-01-01",
|
|
1207
|
+
"mode": "same-detail",
|
|
1208
|
+
"section": "§8",
|
|
1209
|
+
"note": "the event name carries the tag"
|
|
1210
|
+
},
|
|
1211
|
+
{
|
|
1212
|
+
"from": "sf-table-search-change",
|
|
1213
|
+
"to": "sf-view-table-search-change",
|
|
1214
|
+
"kind": "event",
|
|
1215
|
+
"since": "2026-11-03",
|
|
1216
|
+
"remove_after": "2027-01-01",
|
|
1217
|
+
"mode": "same-detail",
|
|
1218
|
+
"section": "§8",
|
|
1219
|
+
"note": "the event name carries the tag"
|
|
1220
|
+
},
|
|
1221
|
+
{
|
|
1222
|
+
"from": "sf-table-sort-change",
|
|
1223
|
+
"to": "sf-view-table-sort-change",
|
|
1224
|
+
"kind": "event",
|
|
1225
|
+
"since": "2026-11-03",
|
|
1226
|
+
"remove_after": "2027-01-01",
|
|
1227
|
+
"mode": "same-detail",
|
|
1228
|
+
"section": "§8",
|
|
1229
|
+
"note": "the event name carries the tag"
|
|
1230
|
+
},
|
|
1231
|
+
{
|
|
1232
|
+
"from": "sf-table-template-delete",
|
|
1233
|
+
"to": "sf-view-table-template-delete",
|
|
1234
|
+
"kind": "event",
|
|
1235
|
+
"since": "2026-11-03",
|
|
1236
|
+
"remove_after": "2027-01-01",
|
|
1237
|
+
"mode": "same-detail",
|
|
1238
|
+
"section": "§8",
|
|
1239
|
+
"note": "the event name carries the tag"
|
|
1240
|
+
},
|
|
1241
|
+
{
|
|
1242
|
+
"from": "sf-table-template-save",
|
|
1243
|
+
"to": "sf-view-table-template-save",
|
|
1244
|
+
"kind": "event",
|
|
1245
|
+
"since": "2026-11-03",
|
|
1246
|
+
"remove_after": "2027-01-01",
|
|
1247
|
+
"mode": "same-detail",
|
|
1248
|
+
"section": "§8",
|
|
1249
|
+
"note": "the event name carries the tag"
|
|
1250
|
+
},
|
|
1251
|
+
{
|
|
1252
|
+
"from": "sf-table-template-select",
|
|
1253
|
+
"to": "sf-view-table-template-select",
|
|
1254
|
+
"kind": "event",
|
|
1255
|
+
"since": "2026-11-03",
|
|
1256
|
+
"remove_after": "2027-01-01",
|
|
1257
|
+
"mode": "same-detail",
|
|
1258
|
+
"section": "§8",
|
|
1259
|
+
"note": "the event name carries the tag"
|
|
1260
|
+
},
|
|
1261
|
+
{
|
|
1262
|
+
"from": "sf-table-toolbar-action",
|
|
1263
|
+
"to": "sf-view-table-toolbar-action",
|
|
1264
|
+
"kind": "event",
|
|
1265
|
+
"since": "2026-11-03",
|
|
1266
|
+
"remove_after": "2027-01-01",
|
|
1267
|
+
"mode": "same-detail",
|
|
1268
|
+
"section": "§8",
|
|
1269
|
+
"note": "the event name carries the tag"
|
|
1270
|
+
},
|
|
1271
|
+
{
|
|
1272
|
+
"from": "sf-table-reference-open",
|
|
1273
|
+
"to": "sf-view-table-reference-open",
|
|
1274
|
+
"kind": "event",
|
|
1275
|
+
"since": "2026-11-03",
|
|
1276
|
+
"remove_after": "2027-01-01",
|
|
1277
|
+
"mode": "same-detail",
|
|
1278
|
+
"section": "§8",
|
|
1279
|
+
"note": "the event name carries the tag"
|
|
1280
|
+
},
|
|
1281
|
+
{
|
|
1282
|
+
"from": "sf-table-expand",
|
|
1283
|
+
"to": "sf-view-table-expand",
|
|
1284
|
+
"kind": "event",
|
|
1285
|
+
"since": "2026-11-03",
|
|
1286
|
+
"remove_after": "2027-01-01",
|
|
1287
|
+
"mode": "same-detail",
|
|
1288
|
+
"section": "§8",
|
|
1289
|
+
"note": "the event name carries the tag"
|
|
1290
|
+
},
|
|
1291
|
+
{
|
|
1292
|
+
"from": "sf-table-load-more",
|
|
1293
|
+
"to": "sf-view-table-load-more",
|
|
1294
|
+
"kind": "event",
|
|
1295
|
+
"since": "2026-11-03",
|
|
1296
|
+
"remove_after": "2027-01-01",
|
|
1297
|
+
"mode": "same-detail",
|
|
1298
|
+
"section": "§8",
|
|
1299
|
+
"note": "the event name carries the tag"
|
|
1300
|
+
},
|
|
1301
|
+
{
|
|
1302
|
+
"from": "sf-table-rows-drag",
|
|
1303
|
+
"to": "sf-view-table-rows-drag",
|
|
1304
|
+
"kind": "event",
|
|
1305
|
+
"since": "2026-11-03",
|
|
1306
|
+
"remove_after": "2027-01-01",
|
|
1307
|
+
"mode": "same-detail",
|
|
1308
|
+
"section": "§8",
|
|
1309
|
+
"note": "the event name carries the tag"
|
|
1310
|
+
},
|
|
1311
|
+
{
|
|
1312
|
+
"from": "sf-table-move",
|
|
1313
|
+
"to": "sf-view-table-move",
|
|
1314
|
+
"kind": "event",
|
|
1315
|
+
"since": "2026-11-03",
|
|
1316
|
+
"remove_after": "2027-01-01",
|
|
1317
|
+
"mode": "same-detail",
|
|
1318
|
+
"section": "§8",
|
|
1319
|
+
"note": "the event name carries the tag"
|
|
1320
|
+
},
|
|
1321
|
+
{
|
|
1322
|
+
"from": "sf-table-cell-set",
|
|
1323
|
+
"to": "sf-view-table-cell-set",
|
|
1324
|
+
"kind": "event",
|
|
1325
|
+
"since": "2026-11-03",
|
|
1326
|
+
"remove_after": "2027-01-01",
|
|
1327
|
+
"mode": "same-detail",
|
|
1328
|
+
"section": "§8",
|
|
1329
|
+
"note": "the event name carries the tag"
|
|
1330
|
+
},
|
|
1331
|
+
{
|
|
1332
|
+
"from": "sf-table-view-change",
|
|
1333
|
+
"to": "sf-view-table-view-change",
|
|
1334
|
+
"kind": "event",
|
|
1335
|
+
"since": "2026-11-03",
|
|
1336
|
+
"remove_after": "2027-01-01",
|
|
1337
|
+
"mode": "same-detail",
|
|
1338
|
+
"section": "§8",
|
|
1339
|
+
"note": "the event name carries the tag"
|
|
1340
|
+
},
|
|
1341
|
+
{
|
|
1342
|
+
"from": "sf-table-window",
|
|
1343
|
+
"to": "sf-view-table-window",
|
|
1344
|
+
"kind": "event",
|
|
1345
|
+
"since": "2026-11-03",
|
|
1346
|
+
"remove_after": "2027-01-01",
|
|
1347
|
+
"mode": "same-detail",
|
|
1348
|
+
"section": "§8",
|
|
1349
|
+
"note": "the event name carries the tag"
|
|
1350
|
+
}
|
|
1351
|
+
]
|
|
1352
|
+
},
|
|
1353
|
+
"x-summary": "Complete server-backed collection view with search, filters, table preferences, row and bulk actions, and pagination.",
|
|
1354
|
+
"x-source": {
|
|
1355
|
+
"package": "ui-pro",
|
|
1356
|
+
"folder": "view-table",
|
|
1357
|
+
"manifest": "simai/ui-pro@9cbe061 components/src/smart/table/smart.manifest.json",
|
|
1358
|
+
"converted": "control/smart-architecture/stands/17-ports-migration/out/table.component.json"
|
|
1359
|
+
},
|
|
1360
|
+
"x-words": [
|
|
1361
|
+
"filter-text",
|
|
1362
|
+
"clear-text",
|
|
1363
|
+
"search-placeholder",
|
|
1364
|
+
"create-text",
|
|
1365
|
+
"loading-text",
|
|
1366
|
+
"empty-text",
|
|
1367
|
+
"error-text",
|
|
1368
|
+
"retry-text",
|
|
1369
|
+
"pin-column-label",
|
|
1370
|
+
"unpin-column-label",
|
|
1371
|
+
"column-move-label",
|
|
1372
|
+
"column-search-placeholder",
|
|
1373
|
+
"column-search-empty-text",
|
|
1374
|
+
"filter-apply-text"
|
|
1375
|
+
],
|
|
1376
|
+
"x-port": {
|
|
1377
|
+
"sha256": "208db0e9709639c46f25830cac255f35d7d8c50ea4dfb1c578adc0055798c46e",
|
|
1378
|
+
"supports": [
|
|
1379
|
+
"1.0.0"
|
|
1380
|
+
]
|
|
1381
|
+
},
|
|
1382
|
+
"x-renamed": [
|
|
1383
|
+
"settings.aria-label: a host attribute, read by the base, never a setting (§3.1)",
|
|
1384
|
+
"events.sf-port-output → port-output (the DOM name without sf-<tag>-)",
|
|
1385
|
+
"events.sf-table-action → apply (vocabulary §5 apply)",
|
|
1386
|
+
"events.sf-table-column-settings-change → save (vocabulary §5.1)",
|
|
1387
|
+
"events.column-settings-reset: 1 carried field(s) held the element, not data (§8)",
|
|
1388
|
+
"events.sf-table-column-settings-reset → column-settings-reset (the DOM name without sf-<tag>-)",
|
|
1389
|
+
"events.sf-table-create → create (vocabulary §5 create)",
|
|
1390
|
+
"events.sf-table-filter-change → filter-change (the DOM name without sf-<tag>-)",
|
|
1391
|
+
"events.sf-table-query → query (vocabulary §5.1)",
|
|
1392
|
+
"events.sf-table-retry → refresh (vocabulary §5 refresh)",
|
|
1393
|
+
"events.sf-table-search-change → search-change (the DOM name without sf-<tag>-)",
|
|
1394
|
+
"events.sf-table-sort-change → sort-change (the DOM name without sf-<tag>-)",
|
|
1395
|
+
"events.sf-table-template-delete → template-delete (the DOM name without sf-<tag>-)",
|
|
1396
|
+
"events.sf-table-template-save → template-save (the DOM name without sf-<tag>-)",
|
|
1397
|
+
"events.sf-table-template-select → template-select (the DOM name without sf-<tag>-)",
|
|
1398
|
+
"events.sf-table-toolbar-action → toolbar-action (the DOM name without sf-<tag>-)",
|
|
1399
|
+
"events.sf-table-tree-toggle → expand (vocabulary §5 expand)",
|
|
1400
|
+
"events.sf-table-tree-more → load-more (vocabulary §5 load-more)",
|
|
1401
|
+
"events.sf-table-rows-drag → rows-drag (the DOM name without sf-<tag>-)",
|
|
1402
|
+
"events.sf-table-rows-reorder → move (vocabulary §5 move)",
|
|
1403
|
+
"events.sf-table-cell-set → cell-set (the DOM name without sf-<tag>-)",
|
|
1404
|
+
"settings.filter-text: its default words move to lang/en.json runtime.filter-text (§11, §16 item 44)",
|
|
1405
|
+
"settings.clear-text: its default words move to lang/en.json runtime.clear-text (§11, §16 item 44)",
|
|
1406
|
+
"settings.search-placeholder: its default words move to lang/en.json runtime.search-placeholder (§11, §16 item 44)",
|
|
1407
|
+
"settings.create-text: its default words move to lang/en.json runtime.create-text (§11, §16 item 44)",
|
|
1408
|
+
"settings.loading-text: its default words move to lang/en.json runtime.loading-text (§11, §16 item 44)",
|
|
1409
|
+
"settings.empty-text: its default words move to lang/en.json runtime.empty-text (§11, §16 item 44)",
|
|
1410
|
+
"settings.error-text: its default words move to lang/en.json runtime.error-text (§11, §16 item 44)",
|
|
1411
|
+
"settings.retry-text: its default words move to lang/en.json runtime.retry-text (§11, §16 item 44)",
|
|
1412
|
+
"settings.pin-column-label: its default words move to lang/en.json runtime.pin-column-label (§11, §16 item 44)",
|
|
1413
|
+
"settings.unpin-column-label: its default words move to lang/en.json runtime.unpin-column-label (§11, §16 item 44)",
|
|
1414
|
+
"settings.column-move-label: its default words move to lang/en.json runtime.column-move-label (§11, §16 item 44)",
|
|
1415
|
+
"settings.column-search-placeholder: its default words move to lang/en.json runtime.column-search-placeholder (§11, §16 item 44)",
|
|
1416
|
+
"settings.column-search-empty-text: its default words move to lang/en.json runtime.column-search-empty-text (§11, §16 item 44)",
|
|
1417
|
+
"settings.filter-apply-text: its default words move to lang/en.json runtime.filter-apply-text (§11, §16 item 44)"
|
|
1418
|
+
],
|
|
1419
|
+
"x-decisions": {
|
|
1420
|
+
"shape": "leaf, with reasons (§7, the smaller mechanism). Its toolbar, filter, column settings and row menus are controls of its own state with no rule between them, and §18.4 asks the opposite of parts for its cells: a cell that only shows a value is class markup, a Smart element only while edited. Its rows are entries (§18), not roles. Stand 24 placed a table of this interface as a leaf inside the record browser; nothing it measured needs the table to be an assembly.",
|
|
1421
|
+
"version": "1.9.0 → 1.10.0, a minor while the old event names hold dated aliases (§4.10); the major when they expire on 2026-12-01.",
|
|
1422
|
+
"events": "named by vocabulary 1.1.5: select {ids} (was sf-port-output {port, value}), apply {action, scope, ids, revisions} (was sf-table-action-intent {action_id, record_ids}), save {kind: columns, …} (was sf-table-column-settings-change, sf-table:column-settings-change, onColumnSettingsChange), create (was -create-intent), query (was -query-intent), refresh (was -retry), expand (was -tree-toggle), load-more (was -tree-more), move (was -rows-reorder). Each old name follows once through aliases.json, split rows through sfAliasAdapters with their old detail, and is noted in SF.deprecations when a listener reads it. The alias table's sf-table-action-intent → sf-table-apply is taken (vocabulary §9); the converter's sf-port-output → sf-table-port-output is not: the selection is the vocabulary's select.",
|
|
1423
|
+
"own-verb-words": "search-change, sort-change, filter-change, template-save, template-select, template-delete, column-settings-reset, toolbar-action, reference-open, rows-drag, cell-set, view-change and window keep their DOM names and are verbs of the table alone; their words are lang events.<verb>.label.",
|
|
1424
|
+
"camelCase-events": "simai/ui-pro#1: onSearchEnd, onTemplateSave, onFilterUpdate and onColumnSettingsChange are no longer sent by the table; they are dated aliases of search-change, template-save, filter-change and save (ui-admin src/main.ts and src/smart-component-catalog.ts listen to them until 2026-12-01). search-change carries {search} now (§8: detail is an object); onSearchEnd keeps the bare text through its adapter.",
|
|
1425
|
+
"column-settings": "simai/ui-pro#1: getColumnSettings() merges the host's and the person's settings once per change of either and answers from the memo while drawing; the system columns and the column a box is named by are read once per list, not per row.",
|
|
1426
|
+
"window": "§18.4, simai/ui-pro#2: window: true. From 300 rows (quality profile 1.3.6-1 window_from_entries) the table draws the rows in view and 20 more on each side, between two spacer rows of the rest's height; aria-rowcount and aria-rowindex keep the whole count. The range follows any scroll box and the page, and is reported as the fact window {first, last}. The arrows, Home and End move between all rows, drawing an undrawn one first. One changed row (updateRowByKey) is drawn again in place and measures no width.",
|
|
1427
|
+
"cells": "§18.4: a cell that only shows a value is class markup: the row's box is the checkbox's class markup over a native input, the row menu the icon button's class markup over a native button, a value a span. A row's template is composed once per arrangement of its cells, so a drawn row holds no Lit marker per cell: 27 nodes a row where it held 108. Host components, typed values, links, trees and editable cells keep the full renderer.",
|
|
1428
|
+
"item-shape": "rows is the vocabulary's items: {id, revision, <column key>…} with entries {key: id, changes: revision}; columns names key and label; sort is [{key, direction}] (vocabulary 1.1.5 §2.1), the host's echo, controlled. The other list settings (bulk-actions, create-items, filter-fields, active-filter-fields, templates, toolbar-actions, table-data, table-settings) are the properties their set-<name> helpers always wrote (x-todo setter).",
|
|
1429
|
+
"settings-not-taken": "items, message, search, filters, views and saved-view of the converter's x-target are not added: the data view holds the query and the host's words, and rows already is the list. A table placed by an assembly binds rows, columns, sort and current.",
|
|
1430
|
+
"carries": "a carried field is one the detail holds under that very name (SF.Assembly checks it at load and on every event, §4.10); camelCase fields beside them are named in x-detail.",
|
|
1431
|
+
"state": "the data state is the setting data-state with the vocabulary's ready (populated read as its alias, gate 26); the value state is not declared, because the Smart base's public state is its render store until §16.7 renames it.",
|
|
1432
|
+
"reserved-name": "sfPortInput stays the composition router's entry and is not part of this interface (§3.1: no sf names).",
|
|
1433
|
+
"actions": "the actions answer outcomes and take their parameters as one object or positionally (§4.4); focus-row {id} is new. tree-column-key, a reader, is not an action. setters stay helpers.",
|
|
1434
|
+
"persistence": "the person's column settings and view are kept by the host (save) and, without one, in SF.Preferences under preferences-key or table-settings-key; nothing is a persisted key of an assembly (§7.5).",
|
|
1435
|
+
"key-effects": "the host: Tab reaches the table, Escape closes its open menu; a row: ArrowDown, ArrowUp, Home, End move the focus, Enter opens the record, Space marks the row.",
|
|
1436
|
+
"a11y": "role grid named by aria-label; a windowed table keeps aria-rowcount and each row's aria-rowindex; the open row carries aria-current.",
|
|
1437
|
+
"template": "templates.default names the Lit template js/templates/default.js, the migration form §5.2 allows; the first paint is the static snapshot, and the skeleton is derived from it (presentation.skeleton.late rows).",
|
|
1438
|
+
"css-variables": "the six public variables the sheet already reads; per-state colours of a selected and a current row are a later look pass (§6).",
|
|
1439
|
+
"examples": "examples.json from studio.fixture.json plus loading, empty, current and many; probe.json drives the window, the box, apply, the keys, the search alias, current and one changed row (gate 16, gate 17).",
|
|
1440
|
+
"side-effects": "network: a filter field whose options come from an endpoint is read page by page with fetch (same origin, the field's own URL, aborted with the menu); nothing else leaves the page.",
|
|
1441
|
+
"docs": "docs/docs.md, where the folder keeps it.",
|
|
1442
|
+
"loader-ensure": "version 1.13.5: the windows' portal is read by the Loader as the page (SF.Loader.watch, core.runtime 1.19.0), so the lazy elements a window draws need no list by name; the window's elements, sf-resizer, sf-sortable and the row menu's sf-context-menu are asked for through SF.Loader.ensure, not ensureSmartElementLoaded or a race of whenDefined against 3 s of its own (reuse audit 2026-11-02, finding 4). Needs core.runtime >= 1.19.0: over an older Loader the calls are no-ops and the table falls back as before where it checks customElements.get.",
|
|
1443
|
+
"framework-tag-renames": "version 1.13.6: the Framework elements it draws, finds and listens to are named by their new tags (Smart component naming of 2026-11-02, sf-[set]-<block>): the row and column menus are sf-menu-context (its sf-menu-context-* events), the icon buttons sf-button-icon, the typed cells and editors sf-input-color, sf-input-country, sf-input-date and sf-slider-range; a component type that names a former tag (a host's {type: 'icon-button'}) draws the element under its current tag (canonicalTag of the Smart base). The rule relations and the registry ids follow (cl-<new>, smart.<new>; the package reference pro.package.json of the pair). The former tags stay dated aliases of the Framework until 2027-01-01; public CSS variables and classes keep their names. No visible change. Needs the SIMAI Framework pair with the tag renames (core.runtime 1.21.0).",
|
|
1444
|
+
"tag-rename": "version 1.14.0: the tag is sf-view-table (naming decision 2026-11-02: sf-[set]-<block>[-<variant>]; rename plan R2); the folder view-table, the id smart.view-table and the bundle cl-view-table follow it. sf-table stays a dated alias until 2027-01-01: a subclass the Smart base defines beside the new tag, listed in the package rule, in sheets as :is(sf-view-table, sf-table), its events named after the tag followed by their former names (ui-source change journal tag-sf-table-to-sf-view-table, path-smart-table-to-view-table)."
|
|
1445
|
+
},
|
|
1446
|
+
"x-registry": {
|
|
1447
|
+
"kind": "composite",
|
|
1448
|
+
"capabilities": [
|
|
1449
|
+
"data-view",
|
|
1450
|
+
"search",
|
|
1451
|
+
"filtering",
|
|
1452
|
+
"sorting",
|
|
1453
|
+
"selection",
|
|
1454
|
+
"preferences",
|
|
1455
|
+
"pagination",
|
|
1456
|
+
"responsive"
|
|
1457
|
+
],
|
|
1458
|
+
"persistence": {
|
|
1459
|
+
"mode": "external-host",
|
|
1460
|
+
"source_of_truth": "host",
|
|
1461
|
+
"network_owner": "host",
|
|
1462
|
+
"revision_field": "base_revision",
|
|
1463
|
+
"view_preference": {
|
|
1464
|
+
"key": "sf-table/<preferences-key>",
|
|
1465
|
+
"general_key": "sf-table/*",
|
|
1466
|
+
"v": 1,
|
|
1467
|
+
"fields": {
|
|
1468
|
+
"columnSettings": {
|
|
1469
|
+
"type": "object",
|
|
1470
|
+
"description": "The person's column arrangement, per column key: visible (boolean), width (CSS length), order (number), pinned (start or end). Merged onto the host's column settings, so a column it does not name keeps the host's.",
|
|
1471
|
+
"seed": true,
|
|
1472
|
+
"written_by": [
|
|
1473
|
+
"sf-view-table"
|
|
1474
|
+
],
|
|
1475
|
+
"schema": {
|
|
1476
|
+
"type": "object",
|
|
1477
|
+
"additionalProperties": {
|
|
1478
|
+
"type": "object",
|
|
1479
|
+
"properties": {
|
|
1480
|
+
"visible": {
|
|
1481
|
+
"type": "boolean"
|
|
1482
|
+
},
|
|
1483
|
+
"width": {
|
|
1484
|
+
"type": "string"
|
|
1485
|
+
},
|
|
1486
|
+
"order": {
|
|
1487
|
+
"type": "number"
|
|
1488
|
+
},
|
|
1489
|
+
"pinned": {
|
|
1490
|
+
"enum": [
|
|
1491
|
+
"start",
|
|
1492
|
+
"end",
|
|
1493
|
+
null
|
|
1494
|
+
]
|
|
1495
|
+
}
|
|
1496
|
+
}
|
|
1497
|
+
}
|
|
1498
|
+
}
|
|
1499
|
+
},
|
|
1500
|
+
"widths": {
|
|
1501
|
+
"type": "object",
|
|
1502
|
+
"description": "Column widths the person dragged, per column key, as \"<N>px\". Kept also without a preferences-key when the table has remember-widths (then under the table's own key).",
|
|
1503
|
+
"seed": true,
|
|
1504
|
+
"written_by": [
|
|
1505
|
+
"sf-view-table"
|
|
1506
|
+
],
|
|
1507
|
+
"schema": {
|
|
1508
|
+
"type": "object",
|
|
1509
|
+
"additionalProperties": {
|
|
1510
|
+
"type": "string"
|
|
1511
|
+
}
|
|
1512
|
+
}
|
|
1513
|
+
},
|
|
1514
|
+
"view": {
|
|
1515
|
+
"type": "object",
|
|
1516
|
+
"description": "The table's look: density (compact, normal, spacious), stripes, lines, singleLine, stickyHead. Under sf-table/* it is the person's look for every table, read under this table's own.",
|
|
1517
|
+
"seed": true,
|
|
1518
|
+
"written_by": [
|
|
1519
|
+
"sf-view-table"
|
|
1520
|
+
],
|
|
1521
|
+
"schema": {
|
|
1522
|
+
"type": "object",
|
|
1523
|
+
"properties": {
|
|
1524
|
+
"density": {
|
|
1525
|
+
"enum": [
|
|
1526
|
+
"compact",
|
|
1527
|
+
"normal",
|
|
1528
|
+
"spacious"
|
|
1529
|
+
]
|
|
1530
|
+
},
|
|
1531
|
+
"stripes": {
|
|
1532
|
+
"type": "boolean"
|
|
1533
|
+
},
|
|
1534
|
+
"lines": {
|
|
1535
|
+
"type": "boolean"
|
|
1536
|
+
},
|
|
1537
|
+
"singleLine": {
|
|
1538
|
+
"type": "boolean"
|
|
1539
|
+
},
|
|
1540
|
+
"stickyHead": {
|
|
1541
|
+
"type": "boolean"
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
},
|
|
1546
|
+
"sort": {
|
|
1547
|
+
"type": "array",
|
|
1548
|
+
"description": "The sort the person chose: [{key, direction}]. Written and read by the data view the table is in, so the first query comes in this order.",
|
|
1549
|
+
"seed": true,
|
|
1550
|
+
"written_by": [
|
|
1551
|
+
"sf-view"
|
|
1552
|
+
],
|
|
1553
|
+
"schema": {
|
|
1554
|
+
"type": "array",
|
|
1555
|
+
"items": {
|
|
1556
|
+
"type": "object",
|
|
1557
|
+
"required": [
|
|
1558
|
+
"key",
|
|
1559
|
+
"direction"
|
|
1560
|
+
],
|
|
1561
|
+
"properties": {
|
|
1562
|
+
"key": {
|
|
1563
|
+
"type": "string"
|
|
1564
|
+
},
|
|
1565
|
+
"direction": {
|
|
1566
|
+
"enum": [
|
|
1567
|
+
"asc",
|
|
1568
|
+
"desc"
|
|
1569
|
+
]
|
|
1570
|
+
}
|
|
1571
|
+
}
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
},
|
|
1575
|
+
"pageSize": {
|
|
1576
|
+
"type": "integer",
|
|
1577
|
+
"description": "The page size the person chose. Written and read by the data view, so the first query asks for it.",
|
|
1578
|
+
"seed": true,
|
|
1579
|
+
"written_by": [
|
|
1580
|
+
"sf-view"
|
|
1581
|
+
]
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1584
|
+
}
|
|
1585
|
+
},
|
|
1586
|
+
"adapter": {
|
|
1587
|
+
"kind": "owner",
|
|
1588
|
+
"protocol": "simai.smart-studio-adapter.v1",
|
|
1589
|
+
"module": null
|
|
1590
|
+
},
|
|
1591
|
+
"readiness": {
|
|
1592
|
+
"level": "host-required",
|
|
1593
|
+
"required_checks": [
|
|
1594
|
+
"manifest",
|
|
1595
|
+
"fixture",
|
|
1596
|
+
"runtime-upgrade",
|
|
1597
|
+
"scenario-smoke",
|
|
1598
|
+
"host-query-bridge"
|
|
1599
|
+
]
|
|
1600
|
+
},
|
|
1601
|
+
"tags": [
|
|
1602
|
+
"admin",
|
|
1603
|
+
"collection",
|
|
1604
|
+
"data",
|
|
1605
|
+
"filter",
|
|
1606
|
+
"table"
|
|
1607
|
+
],
|
|
1608
|
+
"composition-declarative": {
|
|
1609
|
+
"standard": "simai.composition.document.v1",
|
|
1610
|
+
"type": "smart.view-table",
|
|
1611
|
+
"mode": "leaf",
|
|
1612
|
+
"profiles": [
|
|
1613
|
+
"ui-layout"
|
|
1614
|
+
],
|
|
1615
|
+
"props": [
|
|
1616
|
+
"aria-label",
|
|
1617
|
+
"table-settings-key",
|
|
1618
|
+
"selectable",
|
|
1619
|
+
"toolbar",
|
|
1620
|
+
"settings",
|
|
1621
|
+
"actions",
|
|
1622
|
+
"row-actions",
|
|
1623
|
+
"pagin",
|
|
1624
|
+
"pagination-total",
|
|
1625
|
+
"pagination-page-size",
|
|
1626
|
+
"page-sizes",
|
|
1627
|
+
"filter-text",
|
|
1628
|
+
"clear-text",
|
|
1629
|
+
"search-placeholder",
|
|
1630
|
+
"create-text",
|
|
1631
|
+
"loading-text",
|
|
1632
|
+
"empty-text",
|
|
1633
|
+
"empty-description",
|
|
1634
|
+
"error-text",
|
|
1635
|
+
"retry-text",
|
|
1636
|
+
"context-menu-columns",
|
|
1637
|
+
"data-state"
|
|
1638
|
+
],
|
|
1639
|
+
"data": {
|
|
1640
|
+
"columns": {
|
|
1641
|
+
"contract": "columns"
|
|
1642
|
+
},
|
|
1643
|
+
"rows": {
|
|
1644
|
+
"contract": "rows"
|
|
1645
|
+
}
|
|
1646
|
+
},
|
|
1647
|
+
"events": [
|
|
1648
|
+
"sf-view-table-search-change",
|
|
1649
|
+
"sf-view-table-filter-change",
|
|
1650
|
+
"sf-view-table-sort-change",
|
|
1651
|
+
"sf-table-create-intent",
|
|
1652
|
+
"sf-view-table-template-save",
|
|
1653
|
+
"sf-view-table-template-select",
|
|
1654
|
+
"sf-view-table-template-delete",
|
|
1655
|
+
"sf-table-column-settings-change",
|
|
1656
|
+
"sf-table-action-intent",
|
|
1657
|
+
"sf-table-query-intent",
|
|
1658
|
+
"sf-table-retry",
|
|
1659
|
+
"sf-view-table-toolbar-action"
|
|
1660
|
+
],
|
|
1661
|
+
"persistence": {
|
|
1662
|
+
"settings_key_prop": "table-settings-key",
|
|
1663
|
+
"revision_prop": null
|
|
1664
|
+
},
|
|
1665
|
+
"presentation": {
|
|
1666
|
+
"views": [
|
|
1667
|
+
"default"
|
|
1668
|
+
],
|
|
1669
|
+
"presets": [],
|
|
1670
|
+
"modifiers": []
|
|
1671
|
+
},
|
|
1672
|
+
"slots": {},
|
|
1673
|
+
"renderer": {
|
|
1674
|
+
"kind": "custom-element",
|
|
1675
|
+
"name": "sf-view-table"
|
|
1676
|
+
},
|
|
1677
|
+
"assets": [
|
|
1678
|
+
"smart/view-table"
|
|
1679
|
+
],
|
|
1680
|
+
"host_port": {
|
|
1681
|
+
"port": "simai.dataview-port",
|
|
1682
|
+
"version": "1.0.0",
|
|
1683
|
+
"path": "src/core/contracts/ports/simai.dataview-port/1.0.0/port.json",
|
|
1684
|
+
"sha256": "208db0e9709639c46f25830cac255f35d7d8c50ea4dfb1c578adc0055798c46e",
|
|
1685
|
+
"supported_versions": [
|
|
1686
|
+
"1.0.0"
|
|
1687
|
+
]
|
|
1688
|
+
}
|
|
1689
|
+
},
|
|
1690
|
+
"item_contract": {
|
|
1691
|
+
"stable_id_attribute": "row.id",
|
|
1692
|
+
"package_owned": [
|
|
1693
|
+
"columns[].key",
|
|
1694
|
+
"columns[].label",
|
|
1695
|
+
"filter_fields[].key",
|
|
1696
|
+
"filter_fields[].operators",
|
|
1697
|
+
"actions[].id"
|
|
1698
|
+
],
|
|
1699
|
+
"preference_fields": [
|
|
1700
|
+
"column_settings.*.order",
|
|
1701
|
+
"column_settings.*.width",
|
|
1702
|
+
"column_settings.*.visible",
|
|
1703
|
+
"column_settings.*.pinned",
|
|
1704
|
+
"query.page_size"
|
|
1705
|
+
],
|
|
1706
|
+
"supports": [
|
|
1707
|
+
"structured-cells",
|
|
1708
|
+
"row-selection",
|
|
1709
|
+
"bulk-selection",
|
|
1710
|
+
"column-resize",
|
|
1711
|
+
"column-reorder",
|
|
1712
|
+
"column-visibility",
|
|
1713
|
+
"filter-templates",
|
|
1714
|
+
"row-actions"
|
|
1715
|
+
]
|
|
1716
|
+
},
|
|
1717
|
+
"contracts": {
|
|
1718
|
+
"query_intent": {
|
|
1719
|
+
"type": "object",
|
|
1720
|
+
"required": [
|
|
1721
|
+
"search",
|
|
1722
|
+
"filters",
|
|
1723
|
+
"sort",
|
|
1724
|
+
"page",
|
|
1725
|
+
"page_size"
|
|
1726
|
+
],
|
|
1727
|
+
"properties": {
|
|
1728
|
+
"search": {
|
|
1729
|
+
"type": "string"
|
|
1730
|
+
},
|
|
1731
|
+
"filters": {
|
|
1732
|
+
"type": "object"
|
|
1733
|
+
},
|
|
1734
|
+
"sort": {
|
|
1735
|
+
"type": "array"
|
|
1736
|
+
},
|
|
1737
|
+
"page": {
|
|
1738
|
+
"type": "integer",
|
|
1739
|
+
"minimum": 1
|
|
1740
|
+
},
|
|
1741
|
+
"page_size": {
|
|
1742
|
+
"type": "integer",
|
|
1743
|
+
"minimum": 1,
|
|
1744
|
+
"maximum": 100
|
|
1745
|
+
}
|
|
1746
|
+
},
|
|
1747
|
+
"additionalProperties": false
|
|
1748
|
+
},
|
|
1749
|
+
"column_settings": {
|
|
1750
|
+
"type": "object",
|
|
1751
|
+
"additionalProperties": {
|
|
1752
|
+
"type": "object",
|
|
1753
|
+
"properties": {
|
|
1754
|
+
"order": {
|
|
1755
|
+
"type": "number"
|
|
1756
|
+
},
|
|
1757
|
+
"width": {
|
|
1758
|
+
"type": "string"
|
|
1759
|
+
},
|
|
1760
|
+
"visible": {
|
|
1761
|
+
"type": "boolean"
|
|
1762
|
+
},
|
|
1763
|
+
"pinned": {
|
|
1764
|
+
"type": "boolean"
|
|
1765
|
+
}
|
|
1766
|
+
},
|
|
1767
|
+
"additionalProperties": false
|
|
1768
|
+
}
|
|
1769
|
+
},
|
|
1770
|
+
"action_intent": {
|
|
1771
|
+
"type": "object",
|
|
1772
|
+
"required": [
|
|
1773
|
+
"action_id",
|
|
1774
|
+
"record_ids"
|
|
1775
|
+
],
|
|
1776
|
+
"properties": {
|
|
1777
|
+
"action_id": {
|
|
1778
|
+
"type": "string",
|
|
1779
|
+
"minLength": 1
|
|
1780
|
+
},
|
|
1781
|
+
"record_ids": {
|
|
1782
|
+
"type": "array",
|
|
1783
|
+
"items": {
|
|
1784
|
+
"type": [
|
|
1785
|
+
"string",
|
|
1786
|
+
"integer"
|
|
1787
|
+
],
|
|
1788
|
+
"minLength": 1
|
|
1789
|
+
},
|
|
1790
|
+
"minItems": 1
|
|
1791
|
+
}
|
|
1792
|
+
},
|
|
1793
|
+
"additionalProperties": false
|
|
1794
|
+
},
|
|
1795
|
+
"query_context": {
|
|
1796
|
+
"type": "object",
|
|
1797
|
+
"required": [
|
|
1798
|
+
"record_ids"
|
|
1799
|
+
],
|
|
1800
|
+
"properties": {
|
|
1801
|
+
"record_ids": {
|
|
1802
|
+
"type": "array",
|
|
1803
|
+
"maxItems": 1000,
|
|
1804
|
+
"uniqueItems": true,
|
|
1805
|
+
"items": {
|
|
1806
|
+
"type": [
|
|
1807
|
+
"string",
|
|
1808
|
+
"integer"
|
|
1809
|
+
],
|
|
1810
|
+
"minLength": 1,
|
|
1811
|
+
"maxLength": 256
|
|
1812
|
+
}
|
|
1813
|
+
}
|
|
1814
|
+
},
|
|
1815
|
+
"additionalProperties": false
|
|
1816
|
+
},
|
|
1817
|
+
"composition_ports": {
|
|
1818
|
+
"manifest": "simai.composition.port-manifest.v1",
|
|
1819
|
+
"element": "sf-view-table",
|
|
1820
|
+
"version": "1.0.0",
|
|
1821
|
+
"outputs": {
|
|
1822
|
+
"selection": "record-ids.v1"
|
|
1823
|
+
},
|
|
1824
|
+
"inputs": {
|
|
1825
|
+
"context": "record-ids.v1"
|
|
1826
|
+
}
|
|
1827
|
+
},
|
|
1828
|
+
"columns": {
|
|
1829
|
+
"type": "array",
|
|
1830
|
+
"items": {
|
|
1831
|
+
"type": "object",
|
|
1832
|
+
"required": [
|
|
1833
|
+
"key"
|
|
1834
|
+
],
|
|
1835
|
+
"additionalProperties": false,
|
|
1836
|
+
"properties": {
|
|
1837
|
+
"key": {
|
|
1838
|
+
"type": "string",
|
|
1839
|
+
"minLength": 1
|
|
1840
|
+
},
|
|
1841
|
+
"label": {
|
|
1842
|
+
"type": "string"
|
|
1843
|
+
},
|
|
1844
|
+
"visible": {
|
|
1845
|
+
"type": "boolean"
|
|
1846
|
+
},
|
|
1847
|
+
"order": {
|
|
1848
|
+
"type": [
|
|
1849
|
+
"number",
|
|
1850
|
+
"string",
|
|
1851
|
+
"null"
|
|
1852
|
+
]
|
|
1853
|
+
},
|
|
1854
|
+
"width": {
|
|
1855
|
+
"type": [
|
|
1856
|
+
"string",
|
|
1857
|
+
"number",
|
|
1858
|
+
"null"
|
|
1859
|
+
]
|
|
1860
|
+
},
|
|
1861
|
+
"colWidth": {
|
|
1862
|
+
"type": [
|
|
1863
|
+
"string",
|
|
1864
|
+
"number",
|
|
1865
|
+
"null"
|
|
1866
|
+
]
|
|
1867
|
+
},
|
|
1868
|
+
"size": {
|
|
1869
|
+
"type": [
|
|
1870
|
+
"string",
|
|
1871
|
+
"number",
|
|
1872
|
+
"null"
|
|
1873
|
+
]
|
|
1874
|
+
},
|
|
1875
|
+
"minWidth": {
|
|
1876
|
+
"type": [
|
|
1877
|
+
"string",
|
|
1878
|
+
"number",
|
|
1879
|
+
"null"
|
|
1880
|
+
]
|
|
1881
|
+
},
|
|
1882
|
+
"maxWidth": {
|
|
1883
|
+
"type": [
|
|
1884
|
+
"string",
|
|
1885
|
+
"number",
|
|
1886
|
+
"null"
|
|
1887
|
+
]
|
|
1888
|
+
},
|
|
1889
|
+
"sortable": {
|
|
1890
|
+
"type": "boolean"
|
|
1891
|
+
},
|
|
1892
|
+
"resizable": {
|
|
1893
|
+
"type": "boolean"
|
|
1894
|
+
},
|
|
1895
|
+
"draggable": {
|
|
1896
|
+
"type": "boolean"
|
|
1897
|
+
},
|
|
1898
|
+
"renderer": {
|
|
1899
|
+
"enum": [
|
|
1900
|
+
"link"
|
|
1901
|
+
]
|
|
1902
|
+
},
|
|
1903
|
+
"system": {
|
|
1904
|
+
"type": "boolean"
|
|
1905
|
+
},
|
|
1906
|
+
"component": {
|
|
1907
|
+
"type": "object"
|
|
1908
|
+
},
|
|
1909
|
+
"rowComponent": {
|
|
1910
|
+
"type": "object"
|
|
1911
|
+
}
|
|
1912
|
+
}
|
|
1913
|
+
}
|
|
1914
|
+
},
|
|
1915
|
+
"rows": {
|
|
1916
|
+
"type": "array",
|
|
1917
|
+
"items": {
|
|
1918
|
+
"type": "object",
|
|
1919
|
+
"required": [
|
|
1920
|
+
"id"
|
|
1921
|
+
],
|
|
1922
|
+
"properties": {
|
|
1923
|
+
"id": {
|
|
1924
|
+
"type": [
|
|
1925
|
+
"string",
|
|
1926
|
+
"integer"
|
|
1927
|
+
]
|
|
1928
|
+
}
|
|
1929
|
+
},
|
|
1930
|
+
"additionalProperties": true
|
|
1931
|
+
}
|
|
1932
|
+
}
|
|
1933
|
+
},
|
|
1934
|
+
"state": {
|
|
1935
|
+
"machines": {
|
|
1936
|
+
"data": [
|
|
1937
|
+
"idle",
|
|
1938
|
+
"loading",
|
|
1939
|
+
"populated",
|
|
1940
|
+
"empty",
|
|
1941
|
+
"error"
|
|
1942
|
+
],
|
|
1943
|
+
"query": [
|
|
1944
|
+
"clean",
|
|
1945
|
+
"searching",
|
|
1946
|
+
"filtered",
|
|
1947
|
+
"sorting",
|
|
1948
|
+
"paging"
|
|
1949
|
+
],
|
|
1950
|
+
"preferences": [
|
|
1951
|
+
"idle",
|
|
1952
|
+
"editing",
|
|
1953
|
+
"saving",
|
|
1954
|
+
"success",
|
|
1955
|
+
"error",
|
|
1956
|
+
"conflict"
|
|
1957
|
+
]
|
|
1958
|
+
},
|
|
1959
|
+
"visual_states": [
|
|
1960
|
+
"default",
|
|
1961
|
+
"loading",
|
|
1962
|
+
"empty",
|
|
1963
|
+
"error",
|
|
1964
|
+
"selected",
|
|
1965
|
+
"active",
|
|
1966
|
+
"open"
|
|
1967
|
+
]
|
|
1968
|
+
},
|
|
1969
|
+
"backend": {
|
|
1970
|
+
"adapters": [
|
|
1971
|
+
"larena:ui.dataview"
|
|
1972
|
+
],
|
|
1973
|
+
"integration_examples": {
|
|
1974
|
+
"larena_php": "Smart::renderView('dataview.table', ['props' => ['title' => $title], 'children' => $resolvedChildren]);",
|
|
1975
|
+
"event_bridge": "Normalize SF runtime events to Data View intents, validate them in larena/dataview, then return a fresh access-filtered projection."
|
|
1976
|
+
}
|
|
1977
|
+
},
|
|
1978
|
+
"ownership": {
|
|
1979
|
+
"source": "simai/ui-admin",
|
|
1980
|
+
"data": "host",
|
|
1981
|
+
"effects": "host",
|
|
1982
|
+
"forbidden_client_responsibilities": [
|
|
1983
|
+
"query authorization",
|
|
1984
|
+
"field/operator invention",
|
|
1985
|
+
"record access decisions",
|
|
1986
|
+
"domain mutations",
|
|
1987
|
+
"cross-user preference selection",
|
|
1988
|
+
"HTTP endpoint invention"
|
|
1989
|
+
]
|
|
1990
|
+
},
|
|
1991
|
+
"security": {
|
|
1992
|
+
"permissions_owner": "host",
|
|
1993
|
+
"untrusted_inputs": [
|
|
1994
|
+
"Reject unknown columns, filters, sorts and action IDs",
|
|
1995
|
+
"Treat every row and structured cell as untrusted render data",
|
|
1996
|
+
"Never accept record ownership or access flags from the browser"
|
|
1997
|
+
],
|
|
1998
|
+
"network_policy": "host-only"
|
|
1999
|
+
},
|
|
2000
|
+
"presentation": {
|
|
2001
|
+
"skeleton": {
|
|
2002
|
+
"shape": "rows",
|
|
2003
|
+
"while_loading": "template"
|
|
2004
|
+
},
|
|
2005
|
+
"themes": [
|
|
2006
|
+
"light",
|
|
2007
|
+
"dark"
|
|
2008
|
+
],
|
|
2009
|
+
"locales": [
|
|
2010
|
+
"en",
|
|
2011
|
+
"ru"
|
|
2012
|
+
],
|
|
2013
|
+
"responsive": [
|
|
2014
|
+
"desktop-wide",
|
|
2015
|
+
"desktop-local-scroll",
|
|
2016
|
+
"mobile-stacked-toolbar",
|
|
2017
|
+
"mobile-horizontal-table-scroll",
|
|
2018
|
+
"viewport-bounded-overlays"
|
|
2019
|
+
]
|
|
2020
|
+
},
|
|
2021
|
+
"ai_guidance": {
|
|
2022
|
+
"use_when": "Use the whole Data View for an admin collection that needs server search, filters, table preferences, actions or pagination.",
|
|
2023
|
+
"do_not": [
|
|
2024
|
+
"Do not rebuild the toolbar, table and pagination from unrelated primitives",
|
|
2025
|
+
"Do not let the browser own query or access semantics",
|
|
2026
|
+
"Do not send arbitrary field, operator, route or action identifiers to the backend"
|
|
2027
|
+
],
|
|
2028
|
+
"required_reads": [
|
|
2029
|
+
"contracts",
|
|
2030
|
+
"events",
|
|
2031
|
+
"persistence",
|
|
2032
|
+
"ownership",
|
|
2033
|
+
"backend",
|
|
2034
|
+
"scenarios"
|
|
2035
|
+
],
|
|
2036
|
+
"minimal_example": "<sf-view-table aria-label=\"Записи\" table-settings-key=\"package.records\"></sf-view-table>",
|
|
2037
|
+
"owner_commands": [
|
|
2038
|
+
"node scripts/test.mjs",
|
|
2039
|
+
"node scripts/run-browser-probes.mjs <free output> <package output>"
|
|
2040
|
+
]
|
|
2041
|
+
},
|
|
2042
|
+
"accessibility": {
|
|
2043
|
+
"accessible_name": "required",
|
|
2044
|
+
"keyboard": [
|
|
2045
|
+
"Tab",
|
|
2046
|
+
"Shift+Tab",
|
|
2047
|
+
"Enter",
|
|
2048
|
+
"Space",
|
|
2049
|
+
"Escape",
|
|
2050
|
+
"Arrow keys",
|
|
2051
|
+
"ArrowLeft and ArrowRight resize a focused resizable column"
|
|
2052
|
+
],
|
|
2053
|
+
"focus": "Every icon-only action and contextual surface has an accessible name. Per-instance overlays stay inside the visual viewport, close on Escape and restore focus to their trigger. Column resize keeps focus on its native button."
|
|
2054
|
+
},
|
|
2055
|
+
"compatibility": {
|
|
2056
|
+
"aliases": [
|
|
2057
|
+
"smart.table"
|
|
2058
|
+
],
|
|
2059
|
+
"migrations": [
|
|
2060
|
+
{
|
|
2061
|
+
"from": "1.0.0",
|
|
2062
|
+
"to": "1.1.0",
|
|
2063
|
+
"changes": [
|
|
2064
|
+
"Add sf-table-action-intent and requestActionIntent for row, context and bulk operations.",
|
|
2065
|
+
"Replace the placeholder View modal with a host-resolved intent; preserve explicit trusted callback overrides.",
|
|
2066
|
+
"Selection preserves complete typed IDs; bulk controls use the current-result selection only."
|
|
2067
|
+
]
|
|
2068
|
+
},
|
|
2069
|
+
{
|
|
2070
|
+
"from": "1.1.0",
|
|
2071
|
+
"to": "1.2.0",
|
|
2072
|
+
"changes": [
|
|
2073
|
+
"Publish Composition ports: output selection and input context, both record-ids.v1.",
|
|
2074
|
+
"Add sf-table-query-intent, applyQueryResult (latest result wins), getQueryContext and clearSelection.",
|
|
2075
|
+
"Emit sf-port-output once per explicit selection change; no endpoint, action or query text is emitted.",
|
|
2076
|
+
"After remount, a table whose context query was left unanswered requests the same context once with a new sequence."
|
|
2077
|
+
]
|
|
2078
|
+
},
|
|
2079
|
+
{
|
|
2080
|
+
"from": "1.2.0",
|
|
2081
|
+
"to": "1.3.0",
|
|
2082
|
+
"changes": [
|
|
2083
|
+
"Add sf-table-create-intent: the create button emits {item: null}; setCreateItems adds an arrow menu whose items emit {item: id}. Without items the arrow is not rendered.",
|
|
2084
|
+
"Add sf-table-template-select {key} when Apply on the Templates tab changes the selected template; sf-table-template-save is unchanged.",
|
|
2085
|
+
"Columns with sortable: true render a header button with aria-sort and emit sf-table-sort-change {key, direction}; setSort and getSort mirror the host's sort. Rows are never reordered by the table.",
|
|
2086
|
+
"Filter fields with filter.optionRenderer 'badge' render options as tonal sf-badge labels coloured by option.color (a badge scheme or a hex colour) with optional option.icon.",
|
|
2087
|
+
"The actions column is a system column: not resizable or draggable and no longer frozen into column settings.",
|
|
2088
|
+
"Fix: dropping a dragged column no longer duplicates header and body cells; ending a column drag or pointer resize does not sort.",
|
|
2089
|
+
"Context menus are anchored to their opener with SF.Position: they flip and shift at the viewport edge and follow the opener on scroll; the filter chip menu opens under the chip instead of the viewport corner."
|
|
2090
|
+
]
|
|
2091
|
+
},
|
|
2092
|
+
{
|
|
2093
|
+
"from": "1.3.0",
|
|
2094
|
+
"to": "1.4.0",
|
|
2095
|
+
"changes": [
|
|
2096
|
+
"Filter chips are keyboard operable: each chip label is a button (sf-tag interactive) beside its remove action; Enter or Space opens the chip menu, anchored to the chip, and Escape returns focus to the chip.",
|
|
2097
|
+
"The built-in record modal ignores modal:after-close events of nested modals now that modal events bubble."
|
|
2098
|
+
]
|
|
2099
|
+
},
|
|
2100
|
+
{
|
|
2101
|
+
"from": "1.4.0",
|
|
2102
|
+
"to": "1.5.0",
|
|
2103
|
+
"changes": [
|
|
2104
|
+
"The manifest moves to smart-component-manifest v2: persistence, ownership, security, accessibility and state use the v2 shape, and adapter, artifacts and readiness are declared.",
|
|
2105
|
+
"The five conformance scenarios left the manifest (v2 keeps scenarios in artifacts) and are documented in docs/smart-table-guide.md; studio.fixture.json and studio.scenario.json are the declared artifacts.",
|
|
2106
|
+
"No runtime behaviour changes."
|
|
2107
|
+
]
|
|
2108
|
+
},
|
|
2109
|
+
{
|
|
2110
|
+
"from": "1.5.0",
|
|
2111
|
+
"to": "1.6.0",
|
|
2112
|
+
"changes": [
|
|
2113
|
+
"Add sf-table-template-delete {key}: deleting a saved template on the Templates tab is its own intent, one event per template; sf-table-template-save keeps reporting the other flags.",
|
|
2114
|
+
"Instance isolation: the column resize handles carry per-instance ids (<instance>--column-resizer--<column>), the portal records data-sf-instance, and a table without table-settings-key and without an id falls back to its own instance id instead of the shared key \"users\".",
|
|
2115
|
+
"The region declares its resolved data state: data-state and aria-busy are set on the sf-view-table region, not only on tbody."
|
|
2116
|
+
]
|
|
2117
|
+
},
|
|
2118
|
+
{
|
|
2119
|
+
"from": "1.6.0",
|
|
2120
|
+
"to": "1.7.0",
|
|
2121
|
+
"changes": [
|
|
2122
|
+
"Declare the data view as a composition type (smart.view-table): the projection now carries the intents it raises, the data it accepts and where its settings key lives, instead of dropping them.",
|
|
2123
|
+
"Add the columns and rows contracts: closed column descriptions and rows with a stable id. They are the data half of the type and the base of the future host port.",
|
|
2124
|
+
"No runtime behaviour changes."
|
|
2125
|
+
]
|
|
2126
|
+
},
|
|
2127
|
+
{
|
|
2128
|
+
"from": "1.7.0",
|
|
2129
|
+
"to": "1.8.0",
|
|
2130
|
+
"changes": [
|
|
2131
|
+
"Add responsive priority/min_width/sticky projection for declared columns; existing columns keep their previous order and scroll behavior.",
|
|
2132
|
+
"Add toolbar=false for a parent composite that supplies a toolbar slot."
|
|
2133
|
+
]
|
|
2134
|
+
},
|
|
2135
|
+
{
|
|
2136
|
+
"from": "1.8.0",
|
|
2137
|
+
"to": "1.9.0",
|
|
2138
|
+
"changes": [
|
|
2139
|
+
"Add row-actions: row-actions=\"false\" hides the row action column while actions keeps the create button, for hosts whose row menu is the only entry to a row's actions."
|
|
2140
|
+
]
|
|
2141
|
+
},
|
|
2142
|
+
{
|
|
2143
|
+
"from": "1.9.0",
|
|
2144
|
+
"to": "1.9.1",
|
|
2145
|
+
"changes": [
|
|
2146
|
+
"Follows SIMAI Framework release ui-92b4661762ca (standard 1.3.8 display groups A and B): the Loader relations and the composition name the renamed bundles and registry ids (cl-button, cl-icon-button, cl-input, cl-tag, cl-badge; smart.button, smart.icon-button, smart.input, smart.tag, smart.badge).",
|
|
2147
|
+
"The empty brick takes heading and the filter's avatars heading, the names sf-empty-state and sf-avatar read since 1.3.8. No public attribute, property or event of sf-view-table changes."
|
|
2148
|
+
]
|
|
2149
|
+
},
|
|
2150
|
+
{
|
|
2151
|
+
"from": "1.9.1",
|
|
2152
|
+
"to": "1.10.0",
|
|
2153
|
+
"changes": [
|
|
2154
|
+
"From component.json (standard simai.smart-component 1.3.8): events by the vocabulary's verbs -- sf-table-apply, -select, -save, -create, -query, -refresh, -expand, -load-more, -move -- with the old names as dated aliases until 2026-12-01 (aliases.json); onSearchEnd, onTemplateSave, onFilterUpdate, onColumnSettingsChange and sf-table:column-settings-change follow once each, noted in SF.deprecations.",
|
|
2155
|
+
"Many entries (§18.4, simai/ui-pro#2): from 300 rows only the rows in view and a margin are drawn, reported as sf-table-window {first, last}; a plain cell is class markup; one changed row is redrawn in place.",
|
|
2156
|
+
"The data state ready, populated its alias; current marks the open row (aria-current); actions answer outcomes."
|
|
2157
|
+
]
|
|
2158
|
+
},
|
|
2159
|
+
{
|
|
2160
|
+
"from": "1.13.4",
|
|
2161
|
+
"to": "1.13.5",
|
|
2162
|
+
"changes": [
|
|
2163
|
+
"The windows' portal is watched by the Loader (SF.Loader.watch) and lazy elements are asked for through SF.Loader.ensure; needs core.runtime >= 1.19.0. Nothing to change for a host on a pair from core.runtime 1.19.0 on."
|
|
2164
|
+
]
|
|
2165
|
+
},
|
|
2166
|
+
{
|
|
2167
|
+
"from": "1.13.5",
|
|
2168
|
+
"to": "1.13.6",
|
|
2169
|
+
"changes": [
|
|
2170
|
+
"Draws and finds the renamed Framework elements by their new tags (the row and column menus are sf-menu-context (its sf-menu-context-* events), the icon buttons sf-button-icon, the typed cells and editors sf-input-color, sf-input-country, sf-input-date and sf-slider-range; a component type that names a former tag (a host's {type: 'icon-button'}) draws the element under its current tag (canonicalTag of the Smart base)); the rule relations name cl-<new>. Needs the SIMAI Framework pair with the tag renames (core.runtime 1.21.0). No visible change. Nothing to change for a host on that pair; a host that writes the former tags keeps working until 2027-01-01."
|
|
2171
|
+
]
|
|
2172
|
+
},
|
|
2173
|
+
{
|
|
2174
|
+
"from": "1.13.6",
|
|
2175
|
+
"to": "1.14.0",
|
|
2176
|
+
"changes": [
|
|
2177
|
+
"The tag is sf-view-table (rename plan R2, naming decision 2026-11-02: sf-[set]-<block>); the folder view-table, the id smart.view-table and the bundle cl-view-table follow it (were table, smart.data-view, cl-table). sf-table stays a dated alias until 2027-01-01: old markup upgrades as this element, the Loader forwards cl-table, and every event fires under its former name as well, with the same detail. Public CSS variables and classes keep their names. Needs the SIMAI Framework pair whose package reference lists the former tag (core.runtime 1.22.0). Nothing to change for a host until 2027-01-01; new markup writes sf-view-table."
|
|
2178
|
+
]
|
|
2179
|
+
}
|
|
2180
|
+
]
|
|
2181
|
+
},
|
|
2182
|
+
"alias-events": {
|
|
2183
|
+
"sf-port-output": {
|
|
2184
|
+
"summary": "Composition port output. The table emits port selection (record-ids.v1) once per change of its explicit selection, including clearing; a common sf-composition-scope routes it.",
|
|
2185
|
+
"payload": {
|
|
2186
|
+
"type": "object",
|
|
2187
|
+
"required": [
|
|
2188
|
+
"port",
|
|
2189
|
+
"value"
|
|
2190
|
+
],
|
|
2191
|
+
"properties": {
|
|
2192
|
+
"port": {
|
|
2193
|
+
"const": "selection"
|
|
2194
|
+
},
|
|
2195
|
+
"value": {
|
|
2196
|
+
"type": "array",
|
|
2197
|
+
"maxItems": 1000,
|
|
2198
|
+
"uniqueItems": true,
|
|
2199
|
+
"items": {
|
|
2200
|
+
"type": [
|
|
2201
|
+
"string",
|
|
2202
|
+
"integer"
|
|
2203
|
+
],
|
|
2204
|
+
"minLength": 1,
|
|
2205
|
+
"maxLength": 256
|
|
2206
|
+
}
|
|
2207
|
+
}
|
|
2208
|
+
},
|
|
2209
|
+
"additionalProperties": false
|
|
2210
|
+
}
|
|
2211
|
+
},
|
|
2212
|
+
"sf-table-action-intent": {
|
|
2213
|
+
"summary": "Request one host-resolved row or bulk operation. Event source is the owning table instance; emission is not operation success.",
|
|
2214
|
+
"payload": {
|
|
2215
|
+
"type": "object",
|
|
2216
|
+
"required": [
|
|
2217
|
+
"action_id",
|
|
2218
|
+
"record_ids"
|
|
2219
|
+
],
|
|
2220
|
+
"properties": {
|
|
2221
|
+
"action_id": {
|
|
2222
|
+
"type": "string",
|
|
2223
|
+
"minLength": 1
|
|
2224
|
+
},
|
|
2225
|
+
"record_ids": {
|
|
2226
|
+
"type": "array",
|
|
2227
|
+
"items": {
|
|
2228
|
+
"type": [
|
|
2229
|
+
"string",
|
|
2230
|
+
"integer"
|
|
2231
|
+
],
|
|
2232
|
+
"minLength": 1
|
|
2233
|
+
},
|
|
2234
|
+
"minItems": 1
|
|
2235
|
+
}
|
|
2236
|
+
},
|
|
2237
|
+
"additionalProperties": false
|
|
2238
|
+
}
|
|
2239
|
+
},
|
|
2240
|
+
"sf-table-column-settings-change": {
|
|
2241
|
+
"summary": "Request persistence of a column preference delta after resize, reorder or visibility changes.",
|
|
2242
|
+
"payload": {
|
|
2243
|
+
"type": "object",
|
|
2244
|
+
"required": [
|
|
2245
|
+
"reason",
|
|
2246
|
+
"tableSettingsKey",
|
|
2247
|
+
"columnSettings"
|
|
2248
|
+
],
|
|
2249
|
+
"properties": {
|
|
2250
|
+
"reason": {
|
|
2251
|
+
"type": "string"
|
|
2252
|
+
},
|
|
2253
|
+
"tableSettingsKey": {
|
|
2254
|
+
"type": "string"
|
|
2255
|
+
},
|
|
2256
|
+
"columnSettings": {
|
|
2257
|
+
"$ref": "#/contracts/column_settings"
|
|
2258
|
+
}
|
|
2259
|
+
}
|
|
2260
|
+
}
|
|
2261
|
+
},
|
|
2262
|
+
"sf-table-create-intent": {
|
|
2263
|
+
"summary": "The user pressed the create button (item null) or chose an item from its menu (item id). Intent only: the host opens its create form.",
|
|
2264
|
+
"payload": {
|
|
2265
|
+
"type": "object",
|
|
2266
|
+
"required": [
|
|
2267
|
+
"item"
|
|
2268
|
+
],
|
|
2269
|
+
"properties": {
|
|
2270
|
+
"item": {
|
|
2271
|
+
"type": [
|
|
2272
|
+
"string",
|
|
2273
|
+
"null"
|
|
2274
|
+
]
|
|
2275
|
+
}
|
|
2276
|
+
},
|
|
2277
|
+
"additionalProperties": false
|
|
2278
|
+
}
|
|
2279
|
+
},
|
|
2280
|
+
"sf-table-query-intent": {
|
|
2281
|
+
"summary": "Request a host-side query after the context input port changed. The host resolves the relation and access, then answers with applyQueryResult(sequence, rows); older sequences are ignored.",
|
|
2282
|
+
"payload": {
|
|
2283
|
+
"type": "object",
|
|
2284
|
+
"required": [
|
|
2285
|
+
"reason",
|
|
2286
|
+
"context",
|
|
2287
|
+
"sequence"
|
|
2288
|
+
],
|
|
2289
|
+
"properties": {
|
|
2290
|
+
"reason": {
|
|
2291
|
+
"const": "context"
|
|
2292
|
+
},
|
|
2293
|
+
"context": {
|
|
2294
|
+
"$ref": "#/contracts/query_context"
|
|
2295
|
+
},
|
|
2296
|
+
"sequence": {
|
|
2297
|
+
"type": "integer",
|
|
2298
|
+
"minimum": 1
|
|
2299
|
+
}
|
|
2300
|
+
},
|
|
2301
|
+
"additionalProperties": false
|
|
2302
|
+
}
|
|
2303
|
+
},
|
|
2304
|
+
"sf-table-retry": {
|
|
2305
|
+
"summary": "Request another host-side load after the error state.",
|
|
2306
|
+
"payload": {
|
|
2307
|
+
"type": "null"
|
|
2308
|
+
}
|
|
2309
|
+
},
|
|
2310
|
+
"sf-table-tree-toggle": {
|
|
2311
|
+
"summary": "The person opened or closed a tree row. The data view answers it; the table only says which row and whether it was open.",
|
|
2312
|
+
"payload": {
|
|
2313
|
+
"type": "object",
|
|
2314
|
+
"additionalProperties": false,
|
|
2315
|
+
"properties": {
|
|
2316
|
+
"id": {
|
|
2317
|
+
"type": [
|
|
2318
|
+
"string",
|
|
2319
|
+
"integer"
|
|
2320
|
+
]
|
|
2321
|
+
},
|
|
2322
|
+
"expanded": {
|
|
2323
|
+
"type": "boolean"
|
|
2324
|
+
}
|
|
2325
|
+
}
|
|
2326
|
+
}
|
|
2327
|
+
},
|
|
2328
|
+
"sf-table-tree-more": {
|
|
2329
|
+
"summary": "The person asked for the next page of one tree level.",
|
|
2330
|
+
"payload": {
|
|
2331
|
+
"type": "object",
|
|
2332
|
+
"additionalProperties": false,
|
|
2333
|
+
"properties": {
|
|
2334
|
+
"parent": {
|
|
2335
|
+
"type": [
|
|
2336
|
+
"string",
|
|
2337
|
+
"integer",
|
|
2338
|
+
"null"
|
|
2339
|
+
]
|
|
2340
|
+
},
|
|
2341
|
+
"cursor": {
|
|
2342
|
+
"type": [
|
|
2343
|
+
"string",
|
|
2344
|
+
"null"
|
|
2345
|
+
]
|
|
2346
|
+
}
|
|
2347
|
+
}
|
|
2348
|
+
}
|
|
2349
|
+
},
|
|
2350
|
+
"sf-table-rows-reorder": {
|
|
2351
|
+
"summary": "Rows were dragged into another order inside the list: the ids that moved, the row they now stand before (null: the end) and the whole order shown.",
|
|
2352
|
+
"payload": {
|
|
2353
|
+
"type": "object",
|
|
2354
|
+
"properties": {
|
|
2355
|
+
"ids": {
|
|
2356
|
+
"type": "array"
|
|
2357
|
+
},
|
|
2358
|
+
"before": {},
|
|
2359
|
+
"order": {
|
|
2360
|
+
"type": "array"
|
|
2361
|
+
}
|
|
2362
|
+
}
|
|
2363
|
+
}
|
|
2364
|
+
}
|
|
2365
|
+
},
|
|
2366
|
+
"methods": {
|
|
2367
|
+
"getActiveFilterFieldKeys": {
|
|
2368
|
+
"summary": "Which filter fields the filter is showing, in the host's field order.",
|
|
2369
|
+
"arguments": [],
|
|
2370
|
+
"returns": {
|
|
2371
|
+
"type": "array"
|
|
2372
|
+
}
|
|
2373
|
+
},
|
|
2374
|
+
"getColumnSettings": {
|
|
2375
|
+
"summary": "Read the current column-preference delta.",
|
|
2376
|
+
"arguments": [],
|
|
2377
|
+
"returns": {
|
|
2378
|
+
"type": "object"
|
|
2379
|
+
}
|
|
2380
|
+
},
|
|
2381
|
+
"getFilterPayload": {
|
|
2382
|
+
"summary": "Read the current filter draft for host-side query validation.",
|
|
2383
|
+
"arguments": [],
|
|
2384
|
+
"returns": {
|
|
2385
|
+
"type": "object"
|
|
2386
|
+
}
|
|
2387
|
+
},
|
|
2388
|
+
"getInstanceId": {
|
|
2389
|
+
"summary": "Identity of this instance: the author's id when there is one, an own counter otherwise. Ids, the settings key fallback and the portal derive from it.",
|
|
2390
|
+
"arguments": [],
|
|
2391
|
+
"returns": {
|
|
2392
|
+
"type": "string"
|
|
2393
|
+
}
|
|
2394
|
+
},
|
|
2395
|
+
"getQueryContext": {
|
|
2396
|
+
"summary": "Read the immutable context last received through the context input port, or null.",
|
|
2397
|
+
"arguments": [],
|
|
2398
|
+
"returns": {
|
|
2399
|
+
"type": [
|
|
2400
|
+
"object",
|
|
2401
|
+
"null"
|
|
2402
|
+
]
|
|
2403
|
+
}
|
|
2404
|
+
},
|
|
2405
|
+
"getSelectedRecordIds": {
|
|
2406
|
+
"summary": "Read the typed record identities selected in this table result, without DOM parsing.",
|
|
2407
|
+
"arguments": [],
|
|
2408
|
+
"returns": {
|
|
2409
|
+
"type": "array",
|
|
2410
|
+
"items": {
|
|
2411
|
+
"type": [
|
|
2412
|
+
"string",
|
|
2413
|
+
"integer"
|
|
2414
|
+
]
|
|
2415
|
+
}
|
|
2416
|
+
}
|
|
2417
|
+
},
|
|
2418
|
+
"getSort": {
|
|
2419
|
+
"summary": "Read the sort shown on the headers.",
|
|
2420
|
+
"arguments": [],
|
|
2421
|
+
"returns": {
|
|
2422
|
+
"type": "object"
|
|
2423
|
+
}
|
|
2424
|
+
},
|
|
2425
|
+
"getToolbarActions": {
|
|
2426
|
+
"summary": "The toolbar actions as declared, copied.",
|
|
2427
|
+
"arguments": [],
|
|
2428
|
+
"returns": {
|
|
2429
|
+
"type": "array"
|
|
2430
|
+
}
|
|
2431
|
+
},
|
|
2432
|
+
"requestContextQuery": {
|
|
2433
|
+
"summary": "Internal to the context port: emit sf-table-query-intent for the current context with a new pending sequence.",
|
|
2434
|
+
"arguments": [
|
|
2435
|
+
{
|
|
2436
|
+
"name": "sequence",
|
|
2437
|
+
"schema": {
|
|
2438
|
+
"type": "integer",
|
|
2439
|
+
"minimum": 1
|
|
2440
|
+
}
|
|
2441
|
+
}
|
|
2442
|
+
],
|
|
2443
|
+
"returns": {
|
|
2444
|
+
"type": "object"
|
|
2445
|
+
}
|
|
2446
|
+
},
|
|
2447
|
+
"setActiveFilterFields": {
|
|
2448
|
+
"summary": "Show exactly these filter fields in the selected filter template. Used when a saved view is opened: settings.filter_fields names the fields it was showing.",
|
|
2449
|
+
"arguments": [
|
|
2450
|
+
{
|
|
2451
|
+
"name": "keys",
|
|
2452
|
+
"schema": {
|
|
2453
|
+
"type": "array",
|
|
2454
|
+
"items": {
|
|
2455
|
+
"type": "string"
|
|
2456
|
+
}
|
|
2457
|
+
}
|
|
2458
|
+
}
|
|
2459
|
+
],
|
|
2460
|
+
"returns": {
|
|
2461
|
+
"type": "object"
|
|
2462
|
+
}
|
|
2463
|
+
},
|
|
2464
|
+
"setBulkActions": {
|
|
2465
|
+
"summary": "Register labeled opaque actions for the current selection. Empty selection disables their controls.",
|
|
2466
|
+
"arguments": [
|
|
2467
|
+
{
|
|
2468
|
+
"name": "actions",
|
|
2469
|
+
"schema": {
|
|
2470
|
+
"type": "array",
|
|
2471
|
+
"items": {
|
|
2472
|
+
"type": "object",
|
|
2473
|
+
"required": [
|
|
2474
|
+
"id",
|
|
2475
|
+
"name"
|
|
2476
|
+
],
|
|
2477
|
+
"properties": {
|
|
2478
|
+
"id": {
|
|
2479
|
+
"type": "string",
|
|
2480
|
+
"minLength": 1
|
|
2481
|
+
},
|
|
2482
|
+
"name": {
|
|
2483
|
+
"type": "string",
|
|
2484
|
+
"minLength": 1
|
|
2485
|
+
}
|
|
2486
|
+
},
|
|
2487
|
+
"additionalProperties": false
|
|
2488
|
+
}
|
|
2489
|
+
}
|
|
2490
|
+
}
|
|
2491
|
+
],
|
|
2492
|
+
"returns": {
|
|
2493
|
+
"type": "object"
|
|
2494
|
+
}
|
|
2495
|
+
},
|
|
2496
|
+
"setColumns": {
|
|
2497
|
+
"summary": "Replace canonical backend-provided columns.",
|
|
2498
|
+
"arguments": [
|
|
2499
|
+
{
|
|
2500
|
+
"name": "columns",
|
|
2501
|
+
"schema": {
|
|
2502
|
+
"type": "array"
|
|
2503
|
+
}
|
|
2504
|
+
}
|
|
2505
|
+
],
|
|
2506
|
+
"returns": {
|
|
2507
|
+
"type": "object"
|
|
2508
|
+
}
|
|
2509
|
+
},
|
|
2510
|
+
"setCreateItems": {
|
|
2511
|
+
"summary": "Set the create split-button menu items ({id, name} only). Without items the create button has no arrow.",
|
|
2512
|
+
"arguments": [
|
|
2513
|
+
{
|
|
2514
|
+
"name": "items",
|
|
2515
|
+
"schema": {
|
|
2516
|
+
"type": "array",
|
|
2517
|
+
"items": {
|
|
2518
|
+
"type": "object",
|
|
2519
|
+
"required": [
|
|
2520
|
+
"id",
|
|
2521
|
+
"name"
|
|
2522
|
+
],
|
|
2523
|
+
"properties": {
|
|
2524
|
+
"id": {
|
|
2525
|
+
"type": "string",
|
|
2526
|
+
"minLength": 1
|
|
2527
|
+
},
|
|
2528
|
+
"name": {
|
|
2529
|
+
"type": "string",
|
|
2530
|
+
"minLength": 1
|
|
2531
|
+
}
|
|
2532
|
+
},
|
|
2533
|
+
"additionalProperties": false
|
|
2534
|
+
}
|
|
2535
|
+
}
|
|
2536
|
+
}
|
|
2537
|
+
],
|
|
2538
|
+
"returns": {
|
|
2539
|
+
"type": "object"
|
|
2540
|
+
}
|
|
2541
|
+
},
|
|
2542
|
+
"setDataState": {
|
|
2543
|
+
"summary": "Switch between automatic, loading, populated, empty and error presentation states.",
|
|
2544
|
+
"arguments": [
|
|
2545
|
+
{
|
|
2546
|
+
"name": "state",
|
|
2547
|
+
"schema": {
|
|
2548
|
+
"type": "string",
|
|
2549
|
+
"enum": [
|
|
2550
|
+
"auto",
|
|
2551
|
+
"loading",
|
|
2552
|
+
"populated",
|
|
2553
|
+
"empty",
|
|
2554
|
+
"error"
|
|
2555
|
+
]
|
|
2556
|
+
}
|
|
2557
|
+
}
|
|
2558
|
+
],
|
|
2559
|
+
"returns": {
|
|
2560
|
+
"type": "object"
|
|
2561
|
+
}
|
|
2562
|
+
},
|
|
2563
|
+
"setFilterFields": {
|
|
2564
|
+
"summary": "Register backend-allowlisted filter fields and controls.",
|
|
2565
|
+
"arguments": [
|
|
2566
|
+
{
|
|
2567
|
+
"name": "fields",
|
|
2568
|
+
"schema": {
|
|
2569
|
+
"type": "array"
|
|
2570
|
+
}
|
|
2571
|
+
}
|
|
2572
|
+
],
|
|
2573
|
+
"returns": {
|
|
2574
|
+
"type": "object"
|
|
2575
|
+
}
|
|
2576
|
+
},
|
|
2577
|
+
"setRows": {
|
|
2578
|
+
"summary": "Replace the current backend result rows.",
|
|
2579
|
+
"arguments": [
|
|
2580
|
+
{
|
|
2581
|
+
"name": "rows",
|
|
2582
|
+
"schema": {
|
|
2583
|
+
"type": "array"
|
|
2584
|
+
}
|
|
2585
|
+
}
|
|
2586
|
+
],
|
|
2587
|
+
"returns": {
|
|
2588
|
+
"type": "object"
|
|
2589
|
+
}
|
|
2590
|
+
},
|
|
2591
|
+
"setTableData": {
|
|
2592
|
+
"summary": "Patch columns, rows or related table state supplied by the host.",
|
|
2593
|
+
"arguments": [
|
|
2594
|
+
{
|
|
2595
|
+
"name": "patch",
|
|
2596
|
+
"schema": {
|
|
2597
|
+
"type": "object"
|
|
2598
|
+
}
|
|
2599
|
+
}
|
|
2600
|
+
],
|
|
2601
|
+
"returns": {
|
|
2602
|
+
"type": "object"
|
|
2603
|
+
}
|
|
2604
|
+
},
|
|
2605
|
+
"setTableSettings": {
|
|
2606
|
+
"summary": "Apply a column-preference delta without emitting a save request.",
|
|
2607
|
+
"arguments": [
|
|
2608
|
+
{
|
|
2609
|
+
"name": "settings",
|
|
2610
|
+
"schema": {
|
|
2611
|
+
"type": "object"
|
|
2612
|
+
}
|
|
2613
|
+
}
|
|
2614
|
+
],
|
|
2615
|
+
"returns": {
|
|
2616
|
+
"type": "object"
|
|
2617
|
+
}
|
|
2618
|
+
},
|
|
2619
|
+
"setTemplates": {
|
|
2620
|
+
"summary": "Apply saved filter/view templates.",
|
|
2621
|
+
"arguments": [
|
|
2622
|
+
{
|
|
2623
|
+
"name": "templates",
|
|
2624
|
+
"schema": {
|
|
2625
|
+
"type": "array"
|
|
2626
|
+
}
|
|
2627
|
+
}
|
|
2628
|
+
],
|
|
2629
|
+
"returns": {
|
|
2630
|
+
"type": "object"
|
|
2631
|
+
}
|
|
2632
|
+
},
|
|
2633
|
+
"setToolbarActions": {
|
|
2634
|
+
"summary": "Declare the view's own actions for the toolbar menu: {id, label, icon?, href?}. An href must name this same site. Without actions the control is not rendered.",
|
|
2635
|
+
"arguments": [
|
|
2636
|
+
{
|
|
2637
|
+
"name": "items",
|
|
2638
|
+
"schema": {
|
|
2639
|
+
"type": "array",
|
|
2640
|
+
"items": {
|
|
2641
|
+
"type": "object"
|
|
2642
|
+
}
|
|
2643
|
+
}
|
|
2644
|
+
}
|
|
2645
|
+
],
|
|
2646
|
+
"returns": {
|
|
2647
|
+
"type": "object"
|
|
2648
|
+
}
|
|
2649
|
+
},
|
|
2650
|
+
"sfPortInput": {
|
|
2651
|
+
"summary": "Composition input port entry used by sf-composition-scope. Accepts only the declared context port with record-ids.v1; invalid ports or values throw TypeError before any state change.",
|
|
2652
|
+
"arguments": [
|
|
2653
|
+
{
|
|
2654
|
+
"name": "port",
|
|
2655
|
+
"schema": {
|
|
2656
|
+
"const": "context"
|
|
2657
|
+
}
|
|
2658
|
+
},
|
|
2659
|
+
{
|
|
2660
|
+
"name": "value",
|
|
2661
|
+
"schema": {
|
|
2662
|
+
"type": "array",
|
|
2663
|
+
"maxItems": 1000,
|
|
2664
|
+
"uniqueItems": true,
|
|
2665
|
+
"items": {
|
|
2666
|
+
"type": [
|
|
2667
|
+
"string",
|
|
2668
|
+
"integer"
|
|
2669
|
+
],
|
|
2670
|
+
"minLength": 1,
|
|
2671
|
+
"maxLength": 256
|
|
2672
|
+
}
|
|
2673
|
+
}
|
|
2674
|
+
},
|
|
2675
|
+
{
|
|
2676
|
+
"name": "meta",
|
|
2677
|
+
"schema": {
|
|
2678
|
+
"type": "object"
|
|
2679
|
+
}
|
|
2680
|
+
}
|
|
2681
|
+
],
|
|
2682
|
+
"returns": {
|
|
2683
|
+
"type": "null"
|
|
2684
|
+
}
|
|
2685
|
+
},
|
|
2686
|
+
"isTree": {
|
|
2687
|
+
"summary": "Whether the rows are a tree: some row carries __tree, written by the data view from the host's levels.",
|
|
2688
|
+
"arguments": [],
|
|
2689
|
+
"returns": {
|
|
2690
|
+
"type": "boolean"
|
|
2691
|
+
}
|
|
2692
|
+
},
|
|
2693
|
+
"treeColumnKey": {
|
|
2694
|
+
"summary": "The column a tree hangs from: the title column, or the first data column.",
|
|
2695
|
+
"arguments": [
|
|
2696
|
+
{
|
|
2697
|
+
"name": "columns",
|
|
2698
|
+
"type": "array",
|
|
2699
|
+
"required": false
|
|
2700
|
+
}
|
|
2701
|
+
],
|
|
2702
|
+
"returns": {
|
|
2703
|
+
"type": [
|
|
2704
|
+
"string",
|
|
2705
|
+
"null"
|
|
2706
|
+
]
|
|
2707
|
+
}
|
|
2708
|
+
}
|
|
2709
|
+
},
|
|
2710
|
+
"inputs": {
|
|
2711
|
+
"template": {
|
|
2712
|
+
"const": "default"
|
|
2713
|
+
},
|
|
2714
|
+
"aria-label": {
|
|
2715
|
+
"minLength": 1,
|
|
2716
|
+
"default": "Data table",
|
|
2717
|
+
"description": "The table's accessible name. Read it from the props context and never from the element: `aria-label` is reflected by the platform, so element.ariaLabel returns null with no attribute set and shadows what the component resolves. Whether an English default belongs in a family whose other fourteen text inputs default to Russian is the owner's open question about the Framework's default language."
|
|
2718
|
+
},
|
|
2719
|
+
"table-settings-key": {
|
|
2720
|
+
"minLength": 1
|
|
2721
|
+
}
|
|
2722
|
+
},
|
|
2723
|
+
"inputs-required": [
|
|
2724
|
+
"aria-label",
|
|
2725
|
+
"table-settings-key"
|
|
2726
|
+
],
|
|
2727
|
+
"event-fields": {
|
|
2728
|
+
"sf-table-template-save": {
|
|
2729
|
+
"payload": {
|
|
2730
|
+
"type": [
|
|
2731
|
+
"object",
|
|
2732
|
+
"array"
|
|
2733
|
+
]
|
|
2734
|
+
}
|
|
2735
|
+
}
|
|
2736
|
+
}
|
|
2737
|
+
}
|
|
2738
|
+
}
|