@praxisui/table-rule-builder 9.0.0-beta.2 → 9.0.0-beta.21
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.
|
@@ -0,0 +1,1653 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"generatedAt": "2026-06-25T18:12:49.520Z",
|
|
4
|
+
"packageName": "@praxisui/table-rule-builder",
|
|
5
|
+
"packageVersion": "9.0.0-beta.21",
|
|
6
|
+
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
|
+
"sourceRegistryVersion": "1.0.0",
|
|
8
|
+
"componentCount": 1,
|
|
9
|
+
"components": {
|
|
10
|
+
"praxis-table-rule-builder": {
|
|
11
|
+
"id": "praxis-table-rule-builder",
|
|
12
|
+
"description": "Editor for table rule effects and conditional styling.",
|
|
13
|
+
"category": "table",
|
|
14
|
+
"inputs": [
|
|
15
|
+
{
|
|
16
|
+
"name": "scope",
|
|
17
|
+
"type": "RuleScope",
|
|
18
|
+
"required": false
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "value",
|
|
22
|
+
"type": "RuleEffectDefinition | undefined",
|
|
23
|
+
"required": false
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"outputs": [
|
|
27
|
+
{
|
|
28
|
+
"name": "valueChange",
|
|
29
|
+
"type": "RuleEffectDefinition",
|
|
30
|
+
"required": false
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "apply",
|
|
34
|
+
"type": "void",
|
|
35
|
+
"required": false
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "reset",
|
|
39
|
+
"type": "void",
|
|
40
|
+
"required": false
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"configSchemaId": null,
|
|
44
|
+
"selector": "praxis-rule-effects-panel",
|
|
45
|
+
"friendlyName": "Praxis Table Rule Builder",
|
|
46
|
+
"tags": [
|
|
47
|
+
"widget",
|
|
48
|
+
"rules",
|
|
49
|
+
"table",
|
|
50
|
+
"configurable"
|
|
51
|
+
],
|
|
52
|
+
"lib": "@praxisui/table-rule-builder",
|
|
53
|
+
"source": "projects/praxis-table-rule-builder/src/lib/praxis-table-rule-builder.metadata.ts",
|
|
54
|
+
"exportName": "PRAXIS_TABLE_RULE_BUILDER_COMPONENT_METADATA",
|
|
55
|
+
"componentContext": {
|
|
56
|
+
"version": "v1",
|
|
57
|
+
"optionsByPath": {
|
|
58
|
+
"scope": {
|
|
59
|
+
"mode": "enum",
|
|
60
|
+
"options": [
|
|
61
|
+
{
|
|
62
|
+
"value": "cell",
|
|
63
|
+
"label": "Cell"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"value": "row",
|
|
67
|
+
"label": "Row"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"value": "column",
|
|
71
|
+
"label": "Column"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"value": "table",
|
|
75
|
+
"label": "Table"
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
"estilo.transform": {
|
|
80
|
+
"mode": "enum",
|
|
81
|
+
"options": [
|
|
82
|
+
{
|
|
83
|
+
"value": "uppercase",
|
|
84
|
+
"label": "Uppercase"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"value": "lowercase",
|
|
88
|
+
"label": "Lowercase"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"value": "capitalize",
|
|
92
|
+
"label": "Capitalize"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
"layout.border": {
|
|
97
|
+
"mode": "enum",
|
|
98
|
+
"options": [
|
|
99
|
+
{
|
|
100
|
+
"value": "none",
|
|
101
|
+
"label": "None"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"value": "left",
|
|
105
|
+
"label": "Left"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"value": "right",
|
|
109
|
+
"label": "Right"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"value": "top",
|
|
113
|
+
"label": "Top"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"value": "bottom",
|
|
117
|
+
"label": "Bottom"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"value": "all",
|
|
121
|
+
"label": "All"
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"layout.align": {
|
|
126
|
+
"mode": "enum",
|
|
127
|
+
"options": [
|
|
128
|
+
{
|
|
129
|
+
"value": "start",
|
|
130
|
+
"label": "Start"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"value": "center",
|
|
134
|
+
"label": "Center"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"value": "end",
|
|
138
|
+
"label": "End"
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
"iconBadge.iconPos": {
|
|
143
|
+
"mode": "enum",
|
|
144
|
+
"options": [
|
|
145
|
+
{
|
|
146
|
+
"value": "before",
|
|
147
|
+
"label": "Before"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"value": "after",
|
|
151
|
+
"label": "After"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"value": "overlay",
|
|
155
|
+
"label": "Overlay"
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
},
|
|
159
|
+
"iconBadge.badgeStyle": {
|
|
160
|
+
"mode": "enum",
|
|
161
|
+
"options": [
|
|
162
|
+
{
|
|
163
|
+
"value": "solid",
|
|
164
|
+
"label": "Solid"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"value": "soft",
|
|
168
|
+
"label": "Soft"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"value": "outline",
|
|
172
|
+
"label": "Outline"
|
|
173
|
+
}
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
"animation.type": {
|
|
177
|
+
"mode": "enum",
|
|
178
|
+
"options": [
|
|
179
|
+
{
|
|
180
|
+
"value": "pulse",
|
|
181
|
+
"label": "Pulse"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"value": "blink",
|
|
185
|
+
"label": "Blink"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"value": "grow",
|
|
189
|
+
"label": "Grow"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"value": "fade",
|
|
193
|
+
"label": "Fade"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"value": "slide-in",
|
|
197
|
+
"label": "Slide in"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"value": "border-pulse",
|
|
201
|
+
"label": "Border pulse"
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
"animation.preset": {
|
|
206
|
+
"mode": "enum",
|
|
207
|
+
"options": [
|
|
208
|
+
null,
|
|
209
|
+
null
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
"animation.trigger": {
|
|
213
|
+
"mode": "enum",
|
|
214
|
+
"options": [
|
|
215
|
+
{
|
|
216
|
+
"value": "onChange",
|
|
217
|
+
"label": "On change"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"value": "onAppear",
|
|
221
|
+
"label": "On appear"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"value": "onHover",
|
|
225
|
+
"label": "On hover"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"value": "onConditionEnter",
|
|
229
|
+
"label": "On condition enter"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"value": "onConditionExit",
|
|
233
|
+
"label": "On condition exit"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"value": "onDataRefresh",
|
|
237
|
+
"label": "On data refresh"
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
|
+
},
|
|
241
|
+
"animation.repeat": {
|
|
242
|
+
"mode": "enum",
|
|
243
|
+
"options": [
|
|
244
|
+
{
|
|
245
|
+
"value": "once",
|
|
246
|
+
"label": "Once"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"value": "loop",
|
|
250
|
+
"label": "Loop"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"value": "infinite",
|
|
254
|
+
"label": "Infinite"
|
|
255
|
+
}
|
|
256
|
+
]
|
|
257
|
+
},
|
|
258
|
+
"animation.intensity": {
|
|
259
|
+
"mode": "enum",
|
|
260
|
+
"options": [
|
|
261
|
+
{
|
|
262
|
+
"value": "subtle",
|
|
263
|
+
"label": "Subtle"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"value": "normal",
|
|
267
|
+
"label": "Normal"
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"value": "strong",
|
|
271
|
+
"label": "Strong"
|
|
272
|
+
}
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
"tooltip.position": {
|
|
276
|
+
"mode": "enum",
|
|
277
|
+
"options": [
|
|
278
|
+
{
|
|
279
|
+
"value": "top",
|
|
280
|
+
"label": "Top"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"value": "right",
|
|
284
|
+
"label": "Right"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"value": "bottom",
|
|
288
|
+
"label": "Bottom"
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"value": "left",
|
|
292
|
+
"label": "Left"
|
|
293
|
+
}
|
|
294
|
+
]
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
"actionCatalog": [
|
|
298
|
+
{
|
|
299
|
+
"id": "scope.set",
|
|
300
|
+
"intentExamples": [
|
|
301
|
+
"scope",
|
|
302
|
+
"apply to row",
|
|
303
|
+
"apply to column"
|
|
304
|
+
],
|
|
305
|
+
"patchTemplate": {
|
|
306
|
+
"scope": "{{value}}"
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"id": "description.set",
|
|
311
|
+
"intentExamples": [
|
|
312
|
+
"description",
|
|
313
|
+
"effect description"
|
|
314
|
+
],
|
|
315
|
+
"patchTemplate": {
|
|
316
|
+
"description": "{{value}}"
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"id": "estilo.color.set",
|
|
321
|
+
"intentExamples": [
|
|
322
|
+
"text color",
|
|
323
|
+
"font color"
|
|
324
|
+
],
|
|
325
|
+
"patchTemplate": {
|
|
326
|
+
"estilo": {
|
|
327
|
+
"color": "{{value}}"
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"id": "estilo.bgColor.set",
|
|
333
|
+
"intentExamples": [
|
|
334
|
+
"background color",
|
|
335
|
+
"bg color"
|
|
336
|
+
],
|
|
337
|
+
"patchTemplate": {
|
|
338
|
+
"estilo": {
|
|
339
|
+
"bgColor": "{{value}}"
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"id": "estilo.bold.enable",
|
|
345
|
+
"intentExamples": [
|
|
346
|
+
"bold",
|
|
347
|
+
"negrito"
|
|
348
|
+
],
|
|
349
|
+
"patchTemplate": {
|
|
350
|
+
"estilo": {
|
|
351
|
+
"bold": true
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"id": "estilo.bold.disable",
|
|
357
|
+
"intentExamples": [
|
|
358
|
+
"no bold",
|
|
359
|
+
"remove bold"
|
|
360
|
+
],
|
|
361
|
+
"patchTemplate": {
|
|
362
|
+
"estilo": {
|
|
363
|
+
"bold": false
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"id": "iconBadge.icon.set",
|
|
369
|
+
"intentExamples": [
|
|
370
|
+
"icon",
|
|
371
|
+
"badge icon"
|
|
372
|
+
],
|
|
373
|
+
"patchTemplate": {
|
|
374
|
+
"iconBadge": {
|
|
375
|
+
"icon": "{{value}}"
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"id": "iconBadge.badgeText.set",
|
|
381
|
+
"intentExamples": [
|
|
382
|
+
"badge text",
|
|
383
|
+
"badge label"
|
|
384
|
+
],
|
|
385
|
+
"patchTemplate": {
|
|
386
|
+
"iconBadge": {
|
|
387
|
+
"badgeText": "{{value}}"
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"id": "tooltip.text.set",
|
|
393
|
+
"intentExamples": [
|
|
394
|
+
"tooltip",
|
|
395
|
+
"hint",
|
|
396
|
+
"hover text"
|
|
397
|
+
],
|
|
398
|
+
"patchTemplate": {
|
|
399
|
+
"tooltip": {
|
|
400
|
+
"text": "{{value}}"
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"id": "animation.type.set",
|
|
406
|
+
"intentExamples": [
|
|
407
|
+
"animation",
|
|
408
|
+
"effect animation"
|
|
409
|
+
],
|
|
410
|
+
"patchTemplate": {
|
|
411
|
+
"animation": {
|
|
412
|
+
"type": "{{value}}"
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
],
|
|
417
|
+
"fieldResolvers": {},
|
|
418
|
+
"hints": [
|
|
419
|
+
"Effects apply to the current scope (cell/row/column/table).",
|
|
420
|
+
"Use only safe CSS values for colors and styles."
|
|
421
|
+
]
|
|
422
|
+
},
|
|
423
|
+
"authoringManifest": {
|
|
424
|
+
"schemaVersion": "1.0.0",
|
|
425
|
+
"componentId": "praxis-table-rule-builder",
|
|
426
|
+
"ownerPackage": "@praxisui/table-rule-builder",
|
|
427
|
+
"configSchemaId": "RuleEffectDefinition",
|
|
428
|
+
"manifestVersion": "1.0.0",
|
|
429
|
+
"runtimeInputs": [
|
|
430
|
+
{
|
|
431
|
+
"name": "scope",
|
|
432
|
+
"type": "RuleScope",
|
|
433
|
+
"description": "Effect scope: cell, row, column or table."
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
"name": "value",
|
|
437
|
+
"type": "RuleEffectDefinition | undefined",
|
|
438
|
+
"description": "Initial effect definition hydrated into the panel form."
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"name": "valueChange",
|
|
442
|
+
"type": "RuleEffectDefinition",
|
|
443
|
+
"description": "Debounced normalized effect payload emitted by the editor."
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"name": "apply",
|
|
447
|
+
"type": "void",
|
|
448
|
+
"description": "Emitted when the user applies the current effect payload."
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"name": "reset",
|
|
452
|
+
"type": "void",
|
|
453
|
+
"description": "Emitted when the user resets the panel form."
|
|
454
|
+
}
|
|
455
|
+
],
|
|
456
|
+
"editableTargets": [
|
|
457
|
+
{
|
|
458
|
+
"kind": "rule",
|
|
459
|
+
"resolver": "table-rule-by-stable-id",
|
|
460
|
+
"description": "Table conditional rule entry keyed by stable rule id before it is passed to praxis-table."
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
"kind": "condition",
|
|
464
|
+
"resolver": "table-rule-condition-by-rule-id",
|
|
465
|
+
"description": "Structured condition payload evaluated against table row/column context."
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"kind": "effect",
|
|
469
|
+
"resolver": "rule-effect-by-rule-and-effect-id",
|
|
470
|
+
"description": "Visual effect payload inside a rule, mapped to RuleEffectDefinition."
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
"kind": "preset",
|
|
474
|
+
"resolver": "default-effect-preset-by-key",
|
|
475
|
+
"description": "Built-in semantic effect preset from DEFAULT_EFFECT_PRESETS."
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"kind": "animation",
|
|
479
|
+
"resolver": "rule-animation-by-rule-and-effect-id",
|
|
480
|
+
"description": "Animation preset, alias or override resolved through animation-presets."
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
"kind": "tableDelegation",
|
|
484
|
+
"resolver": "praxis-table-authoring-operation",
|
|
485
|
+
"description": "Explicit delegation boundary for table-owned configuration changes."
|
|
486
|
+
}
|
|
487
|
+
],
|
|
488
|
+
"operations": [
|
|
489
|
+
{
|
|
490
|
+
"operationId": "rule.add",
|
|
491
|
+
"title": "Add table visual rule",
|
|
492
|
+
"scope": "rule",
|
|
493
|
+
"targetKind": "rule",
|
|
494
|
+
"target": {
|
|
495
|
+
"kind": "rule",
|
|
496
|
+
"resolver": "table-rule-by-stable-id",
|
|
497
|
+
"ambiguityPolicy": "fail",
|
|
498
|
+
"required": true
|
|
499
|
+
},
|
|
500
|
+
"inputSchema": {
|
|
501
|
+
"type": "object",
|
|
502
|
+
"required": [
|
|
503
|
+
"ruleId",
|
|
504
|
+
"scope"
|
|
505
|
+
],
|
|
506
|
+
"properties": {
|
|
507
|
+
"ruleId": {
|
|
508
|
+
"type": "string"
|
|
509
|
+
},
|
|
510
|
+
"scope": {
|
|
511
|
+
"enum": [
|
|
512
|
+
"cell",
|
|
513
|
+
"row",
|
|
514
|
+
"column",
|
|
515
|
+
"table"
|
|
516
|
+
]
|
|
517
|
+
},
|
|
518
|
+
"columnKey": {
|
|
519
|
+
"type": "string"
|
|
520
|
+
},
|
|
521
|
+
"condition": {
|
|
522
|
+
"type": "object"
|
|
523
|
+
},
|
|
524
|
+
"effect": {
|
|
525
|
+
"type": "object"
|
|
526
|
+
},
|
|
527
|
+
"insertAfterRuleId": {
|
|
528
|
+
"type": "string"
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
},
|
|
532
|
+
"effects": [
|
|
533
|
+
{
|
|
534
|
+
"kind": "compile-domain-patch",
|
|
535
|
+
"handler": "table-rule-builder-rule-add",
|
|
536
|
+
"handlerContract": {
|
|
537
|
+
"reads": [
|
|
538
|
+
"RuleEffectsPanelComponent.scope",
|
|
539
|
+
"RuleEffectDefinition",
|
|
540
|
+
"praxis-table rowConditionalRenderers",
|
|
541
|
+
"praxis-table columns[].conditionalRenderers"
|
|
542
|
+
],
|
|
543
|
+
"writes": [
|
|
544
|
+
"delegatedAuthoringOperations",
|
|
545
|
+
"RuleEffectDefinition"
|
|
546
|
+
],
|
|
547
|
+
"identityKeys": [
|
|
548
|
+
"ruleId"
|
|
549
|
+
],
|
|
550
|
+
"failureModes": [
|
|
551
|
+
"duplicate-rule-id",
|
|
552
|
+
"unsupported-scope",
|
|
553
|
+
"column-not-found",
|
|
554
|
+
"condition-invalid",
|
|
555
|
+
"effect-registry-miss"
|
|
556
|
+
],
|
|
557
|
+
"description": "Creates a stable table visual rule and keeps table-owned renderer placement delegated to praxis-table."
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
],
|
|
561
|
+
"validators": [
|
|
562
|
+
"rule-id-unique",
|
|
563
|
+
"scope-supported",
|
|
564
|
+
"condition-table-context-valid",
|
|
565
|
+
"effect-registry-supported",
|
|
566
|
+
"table-owned-config-delegated"
|
|
567
|
+
],
|
|
568
|
+
"affectedPaths": [
|
|
569
|
+
"delegatedAuthoringOperations",
|
|
570
|
+
"RuleEffectDefinition"
|
|
571
|
+
],
|
|
572
|
+
"submissionImpact": "config-only",
|
|
573
|
+
"preconditions": [
|
|
574
|
+
"rule-effects-panel-loaded",
|
|
575
|
+
"table-authoring-context-known"
|
|
576
|
+
],
|
|
577
|
+
"destructive": false,
|
|
578
|
+
"requiresConfirmation": false
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"operationId": "rule.remove",
|
|
582
|
+
"title": "Remove table visual rule",
|
|
583
|
+
"scope": "rule",
|
|
584
|
+
"targetKind": "rule",
|
|
585
|
+
"target": {
|
|
586
|
+
"kind": "rule",
|
|
587
|
+
"resolver": "table-rule-by-stable-id",
|
|
588
|
+
"ambiguityPolicy": "fail",
|
|
589
|
+
"required": true
|
|
590
|
+
},
|
|
591
|
+
"inputSchema": {
|
|
592
|
+
"type": "object",
|
|
593
|
+
"required": [
|
|
594
|
+
"ruleId"
|
|
595
|
+
],
|
|
596
|
+
"properties": {
|
|
597
|
+
"ruleId": {
|
|
598
|
+
"type": "string"
|
|
599
|
+
},
|
|
600
|
+
"removeEffects": {
|
|
601
|
+
"type": "boolean"
|
|
602
|
+
},
|
|
603
|
+
"preserveCondition": {
|
|
604
|
+
"type": "boolean"
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
},
|
|
608
|
+
"effects": [
|
|
609
|
+
{
|
|
610
|
+
"kind": "compile-domain-patch",
|
|
611
|
+
"handler": "table-rule-builder-rule-remove",
|
|
612
|
+
"handlerContract": {
|
|
613
|
+
"reads": [
|
|
614
|
+
"ruleEffects.rules",
|
|
615
|
+
"ruleEffects.rules[].effect",
|
|
616
|
+
"ruleEffects.rules[].condition"
|
|
617
|
+
],
|
|
618
|
+
"writes": [
|
|
619
|
+
"delegatedAuthoringOperations"
|
|
620
|
+
],
|
|
621
|
+
"identityKeys": [
|
|
622
|
+
"ruleId"
|
|
623
|
+
],
|
|
624
|
+
"failureModes": [
|
|
625
|
+
"rule-not-found",
|
|
626
|
+
"destructive-removal-not-confirmed",
|
|
627
|
+
"orphaned-table-renderer",
|
|
628
|
+
"condition-preserve-not-supported"
|
|
629
|
+
],
|
|
630
|
+
"description": "Removes a governed visual rule by id with confirmation because conditions and effects can be lost."
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
],
|
|
634
|
+
"destructive": true,
|
|
635
|
+
"requiresConfirmation": true,
|
|
636
|
+
"validators": [
|
|
637
|
+
"rule-exists",
|
|
638
|
+
"destructive-removal-confirmed",
|
|
639
|
+
"table-renderer-references-clean",
|
|
640
|
+
"table-owned-config-delegated"
|
|
641
|
+
],
|
|
642
|
+
"affectedPaths": [
|
|
643
|
+
"delegatedAuthoringOperations"
|
|
644
|
+
],
|
|
645
|
+
"submissionImpact": "config-only",
|
|
646
|
+
"preconditions": [
|
|
647
|
+
"rule-effects-panel-loaded",
|
|
648
|
+
"explicit-confirmation-provided"
|
|
649
|
+
]
|
|
650
|
+
},
|
|
651
|
+
{
|
|
652
|
+
"operationId": "condition.set",
|
|
653
|
+
"title": "Set table rule condition",
|
|
654
|
+
"scope": "rule",
|
|
655
|
+
"targetKind": "condition",
|
|
656
|
+
"target": {
|
|
657
|
+
"kind": "condition",
|
|
658
|
+
"resolver": "table-rule-condition-by-rule-id",
|
|
659
|
+
"ambiguityPolicy": "fail",
|
|
660
|
+
"required": true
|
|
661
|
+
},
|
|
662
|
+
"inputSchema": {
|
|
663
|
+
"type": "object",
|
|
664
|
+
"required": [
|
|
665
|
+
"ruleId",
|
|
666
|
+
"condition"
|
|
667
|
+
],
|
|
668
|
+
"properties": {
|
|
669
|
+
"ruleId": {
|
|
670
|
+
"type": "string"
|
|
671
|
+
},
|
|
672
|
+
"condition": {
|
|
673
|
+
"type": "object"
|
|
674
|
+
},
|
|
675
|
+
"scope": {
|
|
676
|
+
"enum": [
|
|
677
|
+
"cell",
|
|
678
|
+
"row",
|
|
679
|
+
"column",
|
|
680
|
+
"table"
|
|
681
|
+
]
|
|
682
|
+
},
|
|
683
|
+
"columnKey": {
|
|
684
|
+
"type": "string"
|
|
685
|
+
},
|
|
686
|
+
"mode": {
|
|
687
|
+
"enum": [
|
|
688
|
+
"replace",
|
|
689
|
+
"merge"
|
|
690
|
+
]
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
},
|
|
694
|
+
"effects": [
|
|
695
|
+
{
|
|
696
|
+
"kind": "compile-domain-patch",
|
|
697
|
+
"handler": "table-rule-builder-condition-set",
|
|
698
|
+
"handlerContract": {
|
|
699
|
+
"reads": [
|
|
700
|
+
"ruleEffects.rules",
|
|
701
|
+
"praxis-table dataSource fields",
|
|
702
|
+
"praxis-table columns"
|
|
703
|
+
],
|
|
704
|
+
"writes": [
|
|
705
|
+
"delegatedAuthoringOperations"
|
|
706
|
+
],
|
|
707
|
+
"identityKeys": [
|
|
708
|
+
"ruleId"
|
|
709
|
+
],
|
|
710
|
+
"failureModes": [
|
|
711
|
+
"rule-not-found",
|
|
712
|
+
"condition-invalid",
|
|
713
|
+
"field-not-in-table-context",
|
|
714
|
+
"column-not-found"
|
|
715
|
+
],
|
|
716
|
+
"description": "Applies a structured table row/column condition without creating a parallel table DSL."
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
],
|
|
720
|
+
"validators": [
|
|
721
|
+
"rule-exists",
|
|
722
|
+
"condition-table-context-valid",
|
|
723
|
+
"condition-fields-known",
|
|
724
|
+
"condition-operators-supported"
|
|
725
|
+
],
|
|
726
|
+
"affectedPaths": [
|
|
727
|
+
"delegatedAuthoringOperations"
|
|
728
|
+
],
|
|
729
|
+
"submissionImpact": "config-only",
|
|
730
|
+
"preconditions": [
|
|
731
|
+
"rule-effects-panel-loaded",
|
|
732
|
+
"table-authoring-context-known"
|
|
733
|
+
],
|
|
734
|
+
"destructive": false,
|
|
735
|
+
"requiresConfirmation": false
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
"operationId": "effect.add",
|
|
739
|
+
"title": "Add visual effect to rule",
|
|
740
|
+
"scope": "skin",
|
|
741
|
+
"targetKind": "effect",
|
|
742
|
+
"target": {
|
|
743
|
+
"kind": "effect",
|
|
744
|
+
"resolver": "rule-effect-by-rule-and-effect-id",
|
|
745
|
+
"ambiguityPolicy": "fail",
|
|
746
|
+
"required": true
|
|
747
|
+
},
|
|
748
|
+
"inputSchema": {
|
|
749
|
+
"type": "object",
|
|
750
|
+
"required": [
|
|
751
|
+
"ruleId",
|
|
752
|
+
"effectId",
|
|
753
|
+
"effectType"
|
|
754
|
+
],
|
|
755
|
+
"properties": {
|
|
756
|
+
"ruleId": {
|
|
757
|
+
"type": "string"
|
|
758
|
+
},
|
|
759
|
+
"effectId": {
|
|
760
|
+
"type": "string"
|
|
761
|
+
},
|
|
762
|
+
"effectType": {
|
|
763
|
+
"enum": [
|
|
764
|
+
"estilo",
|
|
765
|
+
"layout",
|
|
766
|
+
"icone",
|
|
767
|
+
"fundo",
|
|
768
|
+
"animacao",
|
|
769
|
+
"tooltip"
|
|
770
|
+
]
|
|
771
|
+
},
|
|
772
|
+
"payload": {
|
|
773
|
+
"type": "object"
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
},
|
|
777
|
+
"effects": [
|
|
778
|
+
{
|
|
779
|
+
"kind": "compile-domain-patch",
|
|
780
|
+
"handler": "table-rule-builder-effect-add",
|
|
781
|
+
"handlerContract": {
|
|
782
|
+
"reads": [
|
|
783
|
+
"EffectRegistryService.list",
|
|
784
|
+
"RuleEffectDefinition",
|
|
785
|
+
"toCellClassAndStyle"
|
|
786
|
+
],
|
|
787
|
+
"writes": [
|
|
788
|
+
"RuleEffectDefinition"
|
|
789
|
+
],
|
|
790
|
+
"identityKeys": [
|
|
791
|
+
"ruleId",
|
|
792
|
+
"effectId"
|
|
793
|
+
],
|
|
794
|
+
"failureModes": [
|
|
795
|
+
"rule-not-found",
|
|
796
|
+
"duplicate-effect-id",
|
|
797
|
+
"unsupported-effect-type",
|
|
798
|
+
"unsafe-style-value"
|
|
799
|
+
],
|
|
800
|
+
"description": "Adds a governed visual effect whose type is backed by the effect registry and RuleEffectDefinition."
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
],
|
|
804
|
+
"validators": [
|
|
805
|
+
"rule-exists",
|
|
806
|
+
"effect-id-unique",
|
|
807
|
+
"effect-registry-supported",
|
|
808
|
+
"style-values-safe",
|
|
809
|
+
"preview-class-not-persisted"
|
|
810
|
+
],
|
|
811
|
+
"affectedPaths": [
|
|
812
|
+
"RuleEffectDefinition"
|
|
813
|
+
],
|
|
814
|
+
"submissionImpact": "visual-only",
|
|
815
|
+
"preconditions": [
|
|
816
|
+
"rule-effects-panel-loaded",
|
|
817
|
+
"effect-registry-initialized"
|
|
818
|
+
],
|
|
819
|
+
"destructive": false,
|
|
820
|
+
"requiresConfirmation": false
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
"operationId": "effect.update",
|
|
824
|
+
"title": "Update visual effect payload",
|
|
825
|
+
"scope": "skin",
|
|
826
|
+
"targetKind": "effect",
|
|
827
|
+
"target": {
|
|
828
|
+
"kind": "effect",
|
|
829
|
+
"resolver": "rule-effect-by-rule-and-effect-id",
|
|
830
|
+
"ambiguityPolicy": "fail",
|
|
831
|
+
"required": true
|
|
832
|
+
},
|
|
833
|
+
"inputSchema": {
|
|
834
|
+
"type": "object",
|
|
835
|
+
"required": [
|
|
836
|
+
"ruleId",
|
|
837
|
+
"effectId",
|
|
838
|
+
"payload"
|
|
839
|
+
],
|
|
840
|
+
"properties": {
|
|
841
|
+
"ruleId": {
|
|
842
|
+
"type": "string"
|
|
843
|
+
},
|
|
844
|
+
"effectId": {
|
|
845
|
+
"type": "string"
|
|
846
|
+
},
|
|
847
|
+
"payload": {
|
|
848
|
+
"type": "object"
|
|
849
|
+
},
|
|
850
|
+
"mode": {
|
|
851
|
+
"enum": [
|
|
852
|
+
"replace",
|
|
853
|
+
"merge"
|
|
854
|
+
]
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
},
|
|
858
|
+
"effects": [
|
|
859
|
+
{
|
|
860
|
+
"kind": "compile-domain-patch",
|
|
861
|
+
"handler": "table-rule-builder-effect-update",
|
|
862
|
+
"handlerContract": {
|
|
863
|
+
"reads": [
|
|
864
|
+
"ruleEffects.rules[].effect",
|
|
865
|
+
"EffectRegistryService.list",
|
|
866
|
+
"toCellClassAndStyle"
|
|
867
|
+
],
|
|
868
|
+
"writes": [
|
|
869
|
+
"RuleEffectDefinition"
|
|
870
|
+
],
|
|
871
|
+
"identityKeys": [
|
|
872
|
+
"ruleId",
|
|
873
|
+
"effectId"
|
|
874
|
+
],
|
|
875
|
+
"failureModes": [
|
|
876
|
+
"rule-not-found",
|
|
877
|
+
"effect-not-found",
|
|
878
|
+
"unsupported-effect-type",
|
|
879
|
+
"unsafe-style-value"
|
|
880
|
+
],
|
|
881
|
+
"description": "Updates a visual effect payload while preserving its stable effect id and registry-backed type."
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
],
|
|
885
|
+
"validators": [
|
|
886
|
+
"rule-exists",
|
|
887
|
+
"effect-exists",
|
|
888
|
+
"effect-registry-supported",
|
|
889
|
+
"style-values-safe",
|
|
890
|
+
"runtime-effect-compilable"
|
|
891
|
+
],
|
|
892
|
+
"affectedPaths": [
|
|
893
|
+
"RuleEffectDefinition"
|
|
894
|
+
],
|
|
895
|
+
"submissionImpact": "visual-only",
|
|
896
|
+
"preconditions": [
|
|
897
|
+
"rule-effects-panel-loaded",
|
|
898
|
+
"effect-registry-initialized"
|
|
899
|
+
],
|
|
900
|
+
"destructive": false,
|
|
901
|
+
"requiresConfirmation": false
|
|
902
|
+
},
|
|
903
|
+
{
|
|
904
|
+
"operationId": "effect.remove",
|
|
905
|
+
"title": "Remove visual effect from rule",
|
|
906
|
+
"scope": "skin",
|
|
907
|
+
"targetKind": "effect",
|
|
908
|
+
"target": {
|
|
909
|
+
"kind": "effect",
|
|
910
|
+
"resolver": "rule-effect-by-rule-and-effect-id",
|
|
911
|
+
"ambiguityPolicy": "fail",
|
|
912
|
+
"required": true
|
|
913
|
+
},
|
|
914
|
+
"inputSchema": {
|
|
915
|
+
"type": "object",
|
|
916
|
+
"required": [
|
|
917
|
+
"ruleId",
|
|
918
|
+
"effectId"
|
|
919
|
+
],
|
|
920
|
+
"properties": {
|
|
921
|
+
"ruleId": {
|
|
922
|
+
"type": "string"
|
|
923
|
+
},
|
|
924
|
+
"effectId": {
|
|
925
|
+
"type": "string"
|
|
926
|
+
},
|
|
927
|
+
"removeEmptyRule": {
|
|
928
|
+
"type": "boolean"
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
},
|
|
932
|
+
"effects": [
|
|
933
|
+
{
|
|
934
|
+
"kind": "compile-domain-patch",
|
|
935
|
+
"handler": "table-rule-builder-effect-remove",
|
|
936
|
+
"handlerContract": {
|
|
937
|
+
"reads": [
|
|
938
|
+
"ruleEffects.rules",
|
|
939
|
+
"ruleEffects.rules[].effect"
|
|
940
|
+
],
|
|
941
|
+
"writes": [
|
|
942
|
+
"RuleEffectDefinition",
|
|
943
|
+
"delegatedAuthoringOperations"
|
|
944
|
+
],
|
|
945
|
+
"identityKeys": [
|
|
946
|
+
"ruleId",
|
|
947
|
+
"effectId"
|
|
948
|
+
],
|
|
949
|
+
"failureModes": [
|
|
950
|
+
"rule-not-found",
|
|
951
|
+
"effect-not-found",
|
|
952
|
+
"destructive-removal-not-confirmed",
|
|
953
|
+
"empty-rule-created"
|
|
954
|
+
],
|
|
955
|
+
"description": "Removes one visual effect and optionally removes the empty rule, requiring confirmation for destructive cleanup."
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
],
|
|
959
|
+
"destructive": true,
|
|
960
|
+
"requiresConfirmation": true,
|
|
961
|
+
"validators": [
|
|
962
|
+
"rule-exists",
|
|
963
|
+
"effect-exists",
|
|
964
|
+
"destructive-removal-confirmed",
|
|
965
|
+
"empty-rule-policy-valid"
|
|
966
|
+
],
|
|
967
|
+
"affectedPaths": [
|
|
968
|
+
"RuleEffectDefinition",
|
|
969
|
+
"delegatedAuthoringOperations"
|
|
970
|
+
],
|
|
971
|
+
"submissionImpact": "visual-only",
|
|
972
|
+
"preconditions": [
|
|
973
|
+
"rule-effects-panel-loaded",
|
|
974
|
+
"explicit-confirmation-provided"
|
|
975
|
+
]
|
|
976
|
+
},
|
|
977
|
+
{
|
|
978
|
+
"operationId": "preset.apply",
|
|
979
|
+
"title": "Apply semantic effect preset",
|
|
980
|
+
"scope": "skin",
|
|
981
|
+
"targetKind": "preset",
|
|
982
|
+
"target": {
|
|
983
|
+
"kind": "preset",
|
|
984
|
+
"resolver": "default-effect-preset-by-key",
|
|
985
|
+
"ambiguityPolicy": "fail",
|
|
986
|
+
"required": true
|
|
987
|
+
},
|
|
988
|
+
"inputSchema": {
|
|
989
|
+
"type": "object",
|
|
990
|
+
"required": [
|
|
991
|
+
"ruleId",
|
|
992
|
+
"presetKey"
|
|
993
|
+
],
|
|
994
|
+
"properties": {
|
|
995
|
+
"ruleId": {
|
|
996
|
+
"type": "string"
|
|
997
|
+
},
|
|
998
|
+
"presetKey": {
|
|
999
|
+
"enum": [
|
|
1000
|
+
"aprovado",
|
|
1001
|
+
"alerta",
|
|
1002
|
+
"erro",
|
|
1003
|
+
"info"
|
|
1004
|
+
]
|
|
1005
|
+
},
|
|
1006
|
+
"scope": {
|
|
1007
|
+
"enum": [
|
|
1008
|
+
"cell",
|
|
1009
|
+
"row",
|
|
1010
|
+
"column",
|
|
1011
|
+
"table"
|
|
1012
|
+
]
|
|
1013
|
+
},
|
|
1014
|
+
"mergeWithExisting": {
|
|
1015
|
+
"type": "boolean"
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
},
|
|
1019
|
+
"effects": [
|
|
1020
|
+
{
|
|
1021
|
+
"kind": "compile-domain-patch",
|
|
1022
|
+
"handler": "table-rule-builder-preset-apply",
|
|
1023
|
+
"handlerContract": {
|
|
1024
|
+
"reads": [
|
|
1025
|
+
"DEFAULT_EFFECT_PRESETS",
|
|
1026
|
+
"RuleEffectsPanelComponent.applyPreset",
|
|
1027
|
+
"RuleEffectDefinition"
|
|
1028
|
+
],
|
|
1029
|
+
"writes": [
|
|
1030
|
+
"RuleEffectDefinition",
|
|
1031
|
+
"RuleEffectsPanelComponent.effectsForm",
|
|
1032
|
+
"valueChange"
|
|
1033
|
+
],
|
|
1034
|
+
"identityKeys": [
|
|
1035
|
+
"ruleId",
|
|
1036
|
+
"presetKey"
|
|
1037
|
+
],
|
|
1038
|
+
"failureModes": [
|
|
1039
|
+
"rule-not-found",
|
|
1040
|
+
"preset-not-found",
|
|
1041
|
+
"scope-override-invalid",
|
|
1042
|
+
"preset-effect-not-compilable"
|
|
1043
|
+
],
|
|
1044
|
+
"description": "Applies a built-in semantic preset and normalizes its scope through the rule effects panel."
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
],
|
|
1048
|
+
"validators": [
|
|
1049
|
+
"rule-exists",
|
|
1050
|
+
"preset-key-known",
|
|
1051
|
+
"preset-effect-compilable",
|
|
1052
|
+
"scope-supported"
|
|
1053
|
+
],
|
|
1054
|
+
"affectedPaths": [
|
|
1055
|
+
"RuleEffectDefinition",
|
|
1056
|
+
"RuleEffectsPanelComponent.effectsForm",
|
|
1057
|
+
"valueChange"
|
|
1058
|
+
],
|
|
1059
|
+
"submissionImpact": "visual-only",
|
|
1060
|
+
"preconditions": [
|
|
1061
|
+
"rule-effects-panel-loaded",
|
|
1062
|
+
"default-presets-loaded"
|
|
1063
|
+
],
|
|
1064
|
+
"destructive": false,
|
|
1065
|
+
"requiresConfirmation": false
|
|
1066
|
+
},
|
|
1067
|
+
{
|
|
1068
|
+
"operationId": "animation.set",
|
|
1069
|
+
"title": "Set rule animation",
|
|
1070
|
+
"scope": "skin",
|
|
1071
|
+
"targetKind": "animation",
|
|
1072
|
+
"target": {
|
|
1073
|
+
"kind": "animation",
|
|
1074
|
+
"resolver": "rule-animation-by-rule-and-effect-id",
|
|
1075
|
+
"ambiguityPolicy": "fail",
|
|
1076
|
+
"required": true
|
|
1077
|
+
},
|
|
1078
|
+
"inputSchema": {
|
|
1079
|
+
"type": "object",
|
|
1080
|
+
"required": [
|
|
1081
|
+
"ruleId",
|
|
1082
|
+
"animation"
|
|
1083
|
+
],
|
|
1084
|
+
"properties": {
|
|
1085
|
+
"ruleId": {
|
|
1086
|
+
"type": "string"
|
|
1087
|
+
},
|
|
1088
|
+
"effectId": {
|
|
1089
|
+
"type": "string"
|
|
1090
|
+
},
|
|
1091
|
+
"animation": {
|
|
1092
|
+
"type": "object",
|
|
1093
|
+
"properties": {
|
|
1094
|
+
"enabled": {
|
|
1095
|
+
"type": "boolean"
|
|
1096
|
+
},
|
|
1097
|
+
"preset": {
|
|
1098
|
+
"enum": [
|
|
1099
|
+
"info-soft",
|
|
1100
|
+
"success-confirm",
|
|
1101
|
+
"warning-attention",
|
|
1102
|
+
"critical-alert",
|
|
1103
|
+
"audit-review",
|
|
1104
|
+
"sync-pending",
|
|
1105
|
+
"sla-warning",
|
|
1106
|
+
"sla-breach",
|
|
1107
|
+
"risk-elevated",
|
|
1108
|
+
"risk-critical",
|
|
1109
|
+
"audit-warning",
|
|
1110
|
+
"sync-warning"
|
|
1111
|
+
]
|
|
1112
|
+
},
|
|
1113
|
+
"type": {
|
|
1114
|
+
"enum": [
|
|
1115
|
+
"pulse",
|
|
1116
|
+
"blink",
|
|
1117
|
+
"grow",
|
|
1118
|
+
"fade",
|
|
1119
|
+
"slide-in",
|
|
1120
|
+
"border-pulse"
|
|
1121
|
+
]
|
|
1122
|
+
},
|
|
1123
|
+
"trigger": {
|
|
1124
|
+
"enum": [
|
|
1125
|
+
"onChange",
|
|
1126
|
+
"onAppear",
|
|
1127
|
+
"onHover",
|
|
1128
|
+
"onConditionEnter",
|
|
1129
|
+
"onConditionExit",
|
|
1130
|
+
"onDataRefresh"
|
|
1131
|
+
]
|
|
1132
|
+
},
|
|
1133
|
+
"repeat": {},
|
|
1134
|
+
"durationMs": {
|
|
1135
|
+
"type": "number"
|
|
1136
|
+
},
|
|
1137
|
+
"delayMs": {
|
|
1138
|
+
"type": "number"
|
|
1139
|
+
},
|
|
1140
|
+
"intensity": {
|
|
1141
|
+
"enum": [
|
|
1142
|
+
"subtle",
|
|
1143
|
+
"normal",
|
|
1144
|
+
"strong"
|
|
1145
|
+
]
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
},
|
|
1151
|
+
"effects": [
|
|
1152
|
+
{
|
|
1153
|
+
"kind": "compile-domain-patch",
|
|
1154
|
+
"handler": "table-rule-builder-animation-set",
|
|
1155
|
+
"handlerContract": {
|
|
1156
|
+
"reads": [
|
|
1157
|
+
"RULE_ANIMATION_PRESETS",
|
|
1158
|
+
"RULE_ANIMATION_PRESET_ALIASES",
|
|
1159
|
+
"resolveRuleAnimationConfig",
|
|
1160
|
+
"RuleEffectDefinition.animation"
|
|
1161
|
+
],
|
|
1162
|
+
"writes": [
|
|
1163
|
+
"RuleEffectDefinition.animation",
|
|
1164
|
+
"RuleEffectsPanelComponent.effectsForm.animation",
|
|
1165
|
+
"valueChange"
|
|
1166
|
+
],
|
|
1167
|
+
"identityKeys": [
|
|
1168
|
+
"ruleId",
|
|
1169
|
+
"effectId"
|
|
1170
|
+
],
|
|
1171
|
+
"failureModes": [
|
|
1172
|
+
"rule-not-found",
|
|
1173
|
+
"effect-not-found",
|
|
1174
|
+
"animation-preset-unknown",
|
|
1175
|
+
"animation-override-invalid",
|
|
1176
|
+
"reduced-motion-policy-violated"
|
|
1177
|
+
],
|
|
1178
|
+
"description": "Sets a semantic animation preset or override that resolves fail-closed through the animation preset catalog."
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
],
|
|
1182
|
+
"validators": [
|
|
1183
|
+
"rule-exists",
|
|
1184
|
+
"animation-preset-known",
|
|
1185
|
+
"animation-alias-known",
|
|
1186
|
+
"animation-override-valid",
|
|
1187
|
+
"animation-runtime-supported"
|
|
1188
|
+
],
|
|
1189
|
+
"affectedPaths": [
|
|
1190
|
+
"RuleEffectDefinition.animation",
|
|
1191
|
+
"RuleEffectsPanelComponent.effectsForm.animation",
|
|
1192
|
+
"valueChange"
|
|
1193
|
+
],
|
|
1194
|
+
"submissionImpact": "visual-only",
|
|
1195
|
+
"preconditions": [
|
|
1196
|
+
"rule-effects-panel-loaded",
|
|
1197
|
+
"animation-presets-loaded"
|
|
1198
|
+
],
|
|
1199
|
+
"destructive": false,
|
|
1200
|
+
"requiresConfirmation": false
|
|
1201
|
+
},
|
|
1202
|
+
{
|
|
1203
|
+
"operationId": "tableIntegration.delegate",
|
|
1204
|
+
"title": "Delegate table-owned configuration",
|
|
1205
|
+
"scope": "global",
|
|
1206
|
+
"targetKind": "tableDelegation",
|
|
1207
|
+
"target": {
|
|
1208
|
+
"kind": "tableDelegation",
|
|
1209
|
+
"resolver": "praxis-table-authoring-operation",
|
|
1210
|
+
"ambiguityPolicy": "fail",
|
|
1211
|
+
"required": false
|
|
1212
|
+
},
|
|
1213
|
+
"inputSchema": {
|
|
1214
|
+
"type": "object",
|
|
1215
|
+
"required": [
|
|
1216
|
+
"tableOperationId",
|
|
1217
|
+
"reason"
|
|
1218
|
+
],
|
|
1219
|
+
"properties": {
|
|
1220
|
+
"tableOperationId": {
|
|
1221
|
+
"type": "string"
|
|
1222
|
+
},
|
|
1223
|
+
"reason": {
|
|
1224
|
+
"type": "string"
|
|
1225
|
+
},
|
|
1226
|
+
"tableTarget": {
|
|
1227
|
+
"type": "object"
|
|
1228
|
+
},
|
|
1229
|
+
"tableParams": {
|
|
1230
|
+
"type": "object"
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
},
|
|
1234
|
+
"effects": [
|
|
1235
|
+
{
|
|
1236
|
+
"kind": "compile-domain-patch",
|
|
1237
|
+
"handler": "table-rule-builder-table-delegate",
|
|
1238
|
+
"handlerContract": {
|
|
1239
|
+
"reads": [
|
|
1240
|
+
"PRAXIS_TABLE_AUTHORING_MANIFEST",
|
|
1241
|
+
"TableConfigV2",
|
|
1242
|
+
"tableOperationId"
|
|
1243
|
+
],
|
|
1244
|
+
"writes": [
|
|
1245
|
+
"delegatedAuthoringOperations"
|
|
1246
|
+
],
|
|
1247
|
+
"identityKeys": [
|
|
1248
|
+
"tableOperationId"
|
|
1249
|
+
],
|
|
1250
|
+
"failureModes": [
|
|
1251
|
+
"table-operation-not-found",
|
|
1252
|
+
"table-target-invalid",
|
|
1253
|
+
"attempted-local-table-config-write"
|
|
1254
|
+
],
|
|
1255
|
+
"description": "Records that table-owned config such as renderer placement, columns, ordering or data binding must route through praxis-table."
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
],
|
|
1259
|
+
"validators": [
|
|
1260
|
+
"table-manifest-operation-known",
|
|
1261
|
+
"table-target-valid",
|
|
1262
|
+
"no-local-table-config-write",
|
|
1263
|
+
"table-owned-config-delegated"
|
|
1264
|
+
],
|
|
1265
|
+
"affectedPaths": [
|
|
1266
|
+
"delegatedAuthoringOperations"
|
|
1267
|
+
],
|
|
1268
|
+
"submissionImpact": "none",
|
|
1269
|
+
"preconditions": [
|
|
1270
|
+
"praxis-table-manifest-available"
|
|
1271
|
+
],
|
|
1272
|
+
"destructive": false,
|
|
1273
|
+
"requiresConfirmation": false
|
|
1274
|
+
}
|
|
1275
|
+
],
|
|
1276
|
+
"validators": [
|
|
1277
|
+
{
|
|
1278
|
+
"validatorId": "rule-id-unique",
|
|
1279
|
+
"level": "error",
|
|
1280
|
+
"code": "TABLE_RULE_ID_UNIQUE",
|
|
1281
|
+
"description": "Rule ids must be unique and stable."
|
|
1282
|
+
},
|
|
1283
|
+
{
|
|
1284
|
+
"validatorId": "scope-supported",
|
|
1285
|
+
"level": "error",
|
|
1286
|
+
"code": "TABLE_RULE_SCOPE_SUPPORTED",
|
|
1287
|
+
"description": "Rule scope must be one of cell, row, column or table."
|
|
1288
|
+
},
|
|
1289
|
+
{
|
|
1290
|
+
"validatorId": "condition-table-context-valid",
|
|
1291
|
+
"level": "error",
|
|
1292
|
+
"code": "TABLE_RULE_CONDITION_CONTEXT_VALID",
|
|
1293
|
+
"description": "Conditions must reference valid table row or column context."
|
|
1294
|
+
},
|
|
1295
|
+
{
|
|
1296
|
+
"validatorId": "effect-registry-supported",
|
|
1297
|
+
"level": "error",
|
|
1298
|
+
"code": "TABLE_RULE_EFFECT_REGISTRY_SUPPORTED",
|
|
1299
|
+
"description": "Effects must be backed by EffectRegistryService editor categories."
|
|
1300
|
+
},
|
|
1301
|
+
{
|
|
1302
|
+
"validatorId": "table-owned-config-delegated",
|
|
1303
|
+
"level": "error",
|
|
1304
|
+
"code": "TABLE_RULE_TABLE_CONFIG_DELEGATED",
|
|
1305
|
+
"description": "Table-owned configuration changes must delegate to praxis-table."
|
|
1306
|
+
},
|
|
1307
|
+
{
|
|
1308
|
+
"validatorId": "rule-exists",
|
|
1309
|
+
"level": "error",
|
|
1310
|
+
"code": "TABLE_RULE_EXISTS",
|
|
1311
|
+
"description": "The targeted rule must exist."
|
|
1312
|
+
},
|
|
1313
|
+
{
|
|
1314
|
+
"validatorId": "destructive-removal-confirmed",
|
|
1315
|
+
"level": "error",
|
|
1316
|
+
"code": "TABLE_RULE_DESTRUCTIVE_CONFIRMED",
|
|
1317
|
+
"description": "Destructive rule or effect removal requires explicit confirmation."
|
|
1318
|
+
},
|
|
1319
|
+
{
|
|
1320
|
+
"validatorId": "table-renderer-references-clean",
|
|
1321
|
+
"level": "error",
|
|
1322
|
+
"code": "TABLE_RULE_RENDERER_REFERENCES_CLEAN",
|
|
1323
|
+
"description": "Removing a rule must not leave stale table renderer references."
|
|
1324
|
+
},
|
|
1325
|
+
{
|
|
1326
|
+
"validatorId": "condition-fields-known",
|
|
1327
|
+
"level": "error",
|
|
1328
|
+
"code": "TABLE_RULE_CONDITION_FIELDS_KNOWN",
|
|
1329
|
+
"description": "Condition fields must exist in table row data or column metadata."
|
|
1330
|
+
},
|
|
1331
|
+
{
|
|
1332
|
+
"validatorId": "condition-operators-supported",
|
|
1333
|
+
"level": "error",
|
|
1334
|
+
"code": "TABLE_RULE_CONDITION_OPERATORS_SUPPORTED",
|
|
1335
|
+
"description": "Condition operators must be supported by table rule semantics."
|
|
1336
|
+
},
|
|
1337
|
+
{
|
|
1338
|
+
"validatorId": "effect-id-unique",
|
|
1339
|
+
"level": "error",
|
|
1340
|
+
"code": "TABLE_RULE_EFFECT_ID_UNIQUE",
|
|
1341
|
+
"description": "Effect ids must be unique within a rule."
|
|
1342
|
+
},
|
|
1343
|
+
{
|
|
1344
|
+
"validatorId": "style-values-safe",
|
|
1345
|
+
"level": "error",
|
|
1346
|
+
"code": "TABLE_RULE_STYLE_VALUES_SAFE",
|
|
1347
|
+
"description": "CSS class and style values must be safe for runtime rendering."
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
"validatorId": "preview-class-not-persisted",
|
|
1351
|
+
"level": "error",
|
|
1352
|
+
"code": "TABLE_RULE_PREVIEW_CLASS_NOT_PERSISTED",
|
|
1353
|
+
"description": "Preview-only animation classes must not leak into persisted payload mapping."
|
|
1354
|
+
},
|
|
1355
|
+
{
|
|
1356
|
+
"validatorId": "effect-exists",
|
|
1357
|
+
"level": "error",
|
|
1358
|
+
"code": "TABLE_RULE_EFFECT_EXISTS",
|
|
1359
|
+
"description": "The targeted effect must exist."
|
|
1360
|
+
},
|
|
1361
|
+
{
|
|
1362
|
+
"validatorId": "runtime-effect-compilable",
|
|
1363
|
+
"level": "error",
|
|
1364
|
+
"code": "TABLE_RULE_RUNTIME_EFFECT_COMPILABLE",
|
|
1365
|
+
"description": "Effect payload must compile through toCellClassAndStyle or table renderer semantics."
|
|
1366
|
+
},
|
|
1367
|
+
{
|
|
1368
|
+
"validatorId": "empty-rule-policy-valid",
|
|
1369
|
+
"level": "warning",
|
|
1370
|
+
"code": "TABLE_RULE_EMPTY_RULE_POLICY_VALID",
|
|
1371
|
+
"description": "Removing the last effect must follow the requested empty-rule policy."
|
|
1372
|
+
},
|
|
1373
|
+
{
|
|
1374
|
+
"validatorId": "preset-key-known",
|
|
1375
|
+
"level": "error",
|
|
1376
|
+
"code": "TABLE_RULE_PRESET_KEY_KNOWN",
|
|
1377
|
+
"description": "Preset key must exist in DEFAULT_EFFECT_PRESETS."
|
|
1378
|
+
},
|
|
1379
|
+
{
|
|
1380
|
+
"validatorId": "preset-effect-compilable",
|
|
1381
|
+
"level": "error",
|
|
1382
|
+
"code": "TABLE_RULE_PRESET_EFFECT_COMPILABLE",
|
|
1383
|
+
"description": "Preset payload must compile to RuleEffectDefinition."
|
|
1384
|
+
},
|
|
1385
|
+
{
|
|
1386
|
+
"validatorId": "animation-preset-known",
|
|
1387
|
+
"level": "error",
|
|
1388
|
+
"code": "TABLE_RULE_ANIMATION_PRESET_KNOWN",
|
|
1389
|
+
"description": "Animation preset must be canonical or explicitly aliased."
|
|
1390
|
+
},
|
|
1391
|
+
{
|
|
1392
|
+
"validatorId": "animation-alias-known",
|
|
1393
|
+
"level": "error",
|
|
1394
|
+
"code": "TABLE_RULE_ANIMATION_ALIAS_KNOWN",
|
|
1395
|
+
"description": "Animation aliases must resolve to canonical presets."
|
|
1396
|
+
},
|
|
1397
|
+
{
|
|
1398
|
+
"validatorId": "animation-override-valid",
|
|
1399
|
+
"level": "error",
|
|
1400
|
+
"code": "TABLE_RULE_ANIMATION_OVERRIDE_VALID",
|
|
1401
|
+
"description": "Animation overrides must normalize to supported type, trigger, repeat and intensity values."
|
|
1402
|
+
},
|
|
1403
|
+
{
|
|
1404
|
+
"validatorId": "animation-runtime-supported",
|
|
1405
|
+
"level": "error",
|
|
1406
|
+
"code": "TABLE_RULE_ANIMATION_RUNTIME_SUPPORTED",
|
|
1407
|
+
"description": "Animation payload must be supported by row and column conditional renderers."
|
|
1408
|
+
},
|
|
1409
|
+
{
|
|
1410
|
+
"validatorId": "table-manifest-operation-known",
|
|
1411
|
+
"level": "error",
|
|
1412
|
+
"code": "TABLE_RULE_TABLE_OPERATION_KNOWN",
|
|
1413
|
+
"description": "Delegated table operation must exist in the praxis-table authoring manifest."
|
|
1414
|
+
},
|
|
1415
|
+
{
|
|
1416
|
+
"validatorId": "table-target-valid",
|
|
1417
|
+
"level": "error",
|
|
1418
|
+
"code": "TABLE_RULE_TABLE_TARGET_VALID",
|
|
1419
|
+
"description": "Delegated table target must be resolvable by praxis-table."
|
|
1420
|
+
},
|
|
1421
|
+
{
|
|
1422
|
+
"validatorId": "no-local-table-config-write",
|
|
1423
|
+
"level": "error",
|
|
1424
|
+
"code": "TABLE_RULE_NO_LOCAL_TABLE_CONFIG_WRITE",
|
|
1425
|
+
"description": "Rule builder operations must not write TableConfig directly."
|
|
1426
|
+
}
|
|
1427
|
+
],
|
|
1428
|
+
"roundTripRequirements": [
|
|
1429
|
+
"RuleEffectDefinition is the local source of truth for the effects panel.",
|
|
1430
|
+
"Rules that affect rowConditionalRenderers or columns[].conditionalRenderers must delegate table-owned placement to praxis-table.",
|
|
1431
|
+
"Rule and effect identity must use stable ruleId/effectId keys; array indexes are not canonical identities.",
|
|
1432
|
+
"Animation presets and aliases must resolve through RULE_ANIMATION_PRESETS and RULE_ANIMATION_PRESET_ALIASES before persistence.",
|
|
1433
|
+
"Preview-only animation classes must be omitted from persisted table payload mapping by using includeAnimationPreview: false.",
|
|
1434
|
+
"Preset application must preserve the selected scope and emit a normalized RuleEffectDefinition through valueChange."
|
|
1435
|
+
],
|
|
1436
|
+
"examples": [
|
|
1437
|
+
{
|
|
1438
|
+
"id": "table-rule-add-row-warning",
|
|
1439
|
+
"request": "Add a row warning rule for overdue invoices.",
|
|
1440
|
+
"operationId": "rule.add",
|
|
1441
|
+
"target": "rule:overdue-warning",
|
|
1442
|
+
"params": {
|
|
1443
|
+
"ruleId": "overdue-warning",
|
|
1444
|
+
"scope": "row",
|
|
1445
|
+
"condition": {
|
|
1446
|
+
"field": "dueDate",
|
|
1447
|
+
"operator": "beforeToday"
|
|
1448
|
+
},
|
|
1449
|
+
"effect": {
|
|
1450
|
+
"background": {
|
|
1451
|
+
"color": "rgba(255,193,7,0.12)"
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
},
|
|
1455
|
+
"isPositive": true
|
|
1456
|
+
},
|
|
1457
|
+
{
|
|
1458
|
+
"id": "table-rule-remove-obsolete",
|
|
1459
|
+
"request": "Remove the obsolete archived row rule.",
|
|
1460
|
+
"operationId": "rule.remove",
|
|
1461
|
+
"target": "rule:archived-obsolete",
|
|
1462
|
+
"params": {
|
|
1463
|
+
"ruleId": "archived-obsolete",
|
|
1464
|
+
"removeEffects": true
|
|
1465
|
+
},
|
|
1466
|
+
"isPositive": true
|
|
1467
|
+
},
|
|
1468
|
+
{
|
|
1469
|
+
"id": "table-rule-condition-status-error",
|
|
1470
|
+
"request": "Make the rule apply when status is error.",
|
|
1471
|
+
"operationId": "condition.set",
|
|
1472
|
+
"target": "condition:status-error",
|
|
1473
|
+
"params": {
|
|
1474
|
+
"ruleId": "status-error",
|
|
1475
|
+
"condition": {
|
|
1476
|
+
"field": "status",
|
|
1477
|
+
"operator": "equals",
|
|
1478
|
+
"value": "error"
|
|
1479
|
+
}
|
|
1480
|
+
},
|
|
1481
|
+
"isPositive": true
|
|
1482
|
+
},
|
|
1483
|
+
{
|
|
1484
|
+
"id": "table-rule-add-badge-effect",
|
|
1485
|
+
"request": "Add a warning badge to the status rule.",
|
|
1486
|
+
"operationId": "effect.add",
|
|
1487
|
+
"target": "effect:status-warning/badge",
|
|
1488
|
+
"params": {
|
|
1489
|
+
"ruleId": "status-warning",
|
|
1490
|
+
"effectId": "badge",
|
|
1491
|
+
"effectType": "icone",
|
|
1492
|
+
"payload": {
|
|
1493
|
+
"icon": "warning",
|
|
1494
|
+
"badgeText": "Attention"
|
|
1495
|
+
}
|
|
1496
|
+
},
|
|
1497
|
+
"isPositive": true
|
|
1498
|
+
},
|
|
1499
|
+
{
|
|
1500
|
+
"id": "table-rule-update-background",
|
|
1501
|
+
"request": "Change the risk rule background color.",
|
|
1502
|
+
"operationId": "effect.update",
|
|
1503
|
+
"target": "effect:risk/background",
|
|
1504
|
+
"params": {
|
|
1505
|
+
"ruleId": "risk",
|
|
1506
|
+
"effectId": "background",
|
|
1507
|
+
"payload": {
|
|
1508
|
+
"background": {
|
|
1509
|
+
"color": "rgba(239,83,80,0.10)"
|
|
1510
|
+
}
|
|
1511
|
+
},
|
|
1512
|
+
"mode": "merge"
|
|
1513
|
+
},
|
|
1514
|
+
"isPositive": true
|
|
1515
|
+
},
|
|
1516
|
+
{
|
|
1517
|
+
"id": "table-rule-remove-tooltip",
|
|
1518
|
+
"request": "Remove the tooltip effect from the audit rule.",
|
|
1519
|
+
"operationId": "effect.remove",
|
|
1520
|
+
"target": "effect:audit/tooltip",
|
|
1521
|
+
"params": {
|
|
1522
|
+
"ruleId": "audit",
|
|
1523
|
+
"effectId": "tooltip"
|
|
1524
|
+
},
|
|
1525
|
+
"isPositive": true
|
|
1526
|
+
},
|
|
1527
|
+
{
|
|
1528
|
+
"id": "table-rule-apply-alerta",
|
|
1529
|
+
"request": "Use the alerta preset on the SLA rule.",
|
|
1530
|
+
"operationId": "preset.apply",
|
|
1531
|
+
"target": "preset:alerta",
|
|
1532
|
+
"params": {
|
|
1533
|
+
"ruleId": "sla",
|
|
1534
|
+
"presetKey": "alerta",
|
|
1535
|
+
"scope": "row",
|
|
1536
|
+
"mergeWithExisting": true
|
|
1537
|
+
},
|
|
1538
|
+
"isPositive": true
|
|
1539
|
+
},
|
|
1540
|
+
{
|
|
1541
|
+
"id": "table-rule-animation-critical",
|
|
1542
|
+
"request": "Make the SLA breach animation critical.",
|
|
1543
|
+
"operationId": "animation.set",
|
|
1544
|
+
"target": "animation:sla-breach",
|
|
1545
|
+
"params": {
|
|
1546
|
+
"ruleId": "sla-breach",
|
|
1547
|
+
"effectId": "animation",
|
|
1548
|
+
"animation": {
|
|
1549
|
+
"preset": "critical-alert"
|
|
1550
|
+
}
|
|
1551
|
+
},
|
|
1552
|
+
"isPositive": true
|
|
1553
|
+
},
|
|
1554
|
+
{
|
|
1555
|
+
"id": "table-rule-delegate-column-renderer",
|
|
1556
|
+
"request": "Move this effect to the status column renderer.",
|
|
1557
|
+
"operationId": "tableIntegration.delegate",
|
|
1558
|
+
"target": "praxis-table:column-renderer",
|
|
1559
|
+
"params": {
|
|
1560
|
+
"tableOperationId": "column.conditionalRenderer.set",
|
|
1561
|
+
"reason": "column renderer placement is owned by praxis-table",
|
|
1562
|
+
"tableTarget": {
|
|
1563
|
+
"columnKey": "status"
|
|
1564
|
+
}
|
|
1565
|
+
},
|
|
1566
|
+
"isPositive": true
|
|
1567
|
+
},
|
|
1568
|
+
{
|
|
1569
|
+
"id": "table-rule-reject-direct-table-column",
|
|
1570
|
+
"request": "Add a new table column from the rule builder.",
|
|
1571
|
+
"operationId": "tableIntegration.delegate",
|
|
1572
|
+
"target": "praxis-table:column.add",
|
|
1573
|
+
"params": {
|
|
1574
|
+
"tableOperationId": "column.add",
|
|
1575
|
+
"reason": "column authoring belongs to praxis-table"
|
|
1576
|
+
},
|
|
1577
|
+
"isPositive": false
|
|
1578
|
+
},
|
|
1579
|
+
{
|
|
1580
|
+
"id": "table-rule-reject-unknown-effect",
|
|
1581
|
+
"request": "Add a sparkle shader effect to rows.",
|
|
1582
|
+
"operationId": "effect.add",
|
|
1583
|
+
"target": "effect:sparkle",
|
|
1584
|
+
"params": {
|
|
1585
|
+
"ruleId": "risk",
|
|
1586
|
+
"effectId": "sparkle",
|
|
1587
|
+
"effectType": "shader",
|
|
1588
|
+
"payload": {}
|
|
1589
|
+
},
|
|
1590
|
+
"isPositive": false
|
|
1591
|
+
},
|
|
1592
|
+
{
|
|
1593
|
+
"id": "table-rule-reject-unknown-animation",
|
|
1594
|
+
"request": "Use the earthquake animation preset.",
|
|
1595
|
+
"operationId": "animation.set",
|
|
1596
|
+
"target": "animation:earthquake",
|
|
1597
|
+
"params": {
|
|
1598
|
+
"ruleId": "risk",
|
|
1599
|
+
"effectId": "animation",
|
|
1600
|
+
"animation": {
|
|
1601
|
+
"preset": "earthquake"
|
|
1602
|
+
}
|
|
1603
|
+
},
|
|
1604
|
+
"isPositive": false
|
|
1605
|
+
}
|
|
1606
|
+
]
|
|
1607
|
+
},
|
|
1608
|
+
"chunks": [
|
|
1609
|
+
{
|
|
1610
|
+
"chunkIndex": 0,
|
|
1611
|
+
"chunkKind": "summary",
|
|
1612
|
+
"content": "Component ID: praxis-table-rule-builder\nSelector: praxis-rule-effects-panel\nFriendly Name: Praxis Table Rule Builder\nDescription: Editor for table rule effects and conditional styling.\nCategory: table\nLib/Package: @praxisui/table-rule-builder\nTags: widget, rules, table, configurable\nInputs:\n - scope (RuleScope)\n - value (RuleEffectDefinition | undefined)\nOutputs:\n - valueChange (RuleEffectDefinition)\n - apply (void)\n - reset (void)\n",
|
|
1613
|
+
"sourcePointer": "praxis-ui-angular/projects/praxis-table-rule-builder/src/lib/praxis-table-rule-builder.metadata.ts",
|
|
1614
|
+
"contentHash": "13002ec9e7ea773bbe61a53501fc9210d84df5d4b9954b1f1dac95a92f03390c",
|
|
1615
|
+
"sourceKind": "component_definition",
|
|
1616
|
+
"sourceId": "praxis-table-rule-builder",
|
|
1617
|
+
"corpusVersion": "1.0.0"
|
|
1618
|
+
},
|
|
1619
|
+
{
|
|
1620
|
+
"chunkIndex": 1,
|
|
1621
|
+
"chunkKind": "authoring_manifest",
|
|
1622
|
+
"content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-table-rule-builder\",\n \"ownerPackage\": \"@praxisui/table-rule-builder\",\n \"configSchemaId\": \"RuleEffectDefinition\",\n \"manifestVersion\": \"1.0.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"scope\",\n \"type\": \"RuleScope\",\n \"description\": \"Effect scope: cell, row, column or table.\"\n },\n {\n \"name\": \"value\",\n \"type\": \"RuleEffectDefinition | undefined\",\n \"description\": \"Initial effect definition hydrated into the panel form.\"\n },\n {\n \"name\": \"valueChange\",\n \"type\": \"RuleEffectDefinition\",\n \"description\": \"Debounced normalized effect payload emitted by the editor.\"\n },\n {\n \"name\": \"apply\",\n \"type\": \"void\",\n \"description\": \"Emitted when the user applies the current effect payload.\"\n },\n {\n \"name\": \"reset\",\n \"type\": \"void\",\n \"description\": \"Emitted when the user resets the panel form.\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"rule\",\n \"resolver\": \"table-rule-by-stable-id\",\n \"description\": \"Table conditional rule entry keyed by stable rule id before it is passed to praxis-table.\"\n },\n {\n \"kind\": \"condition\",\n \"resolver\": \"table-rule-condition-by-rule-id\",\n \"description\": \"Structured condition payload evaluated against table row/column context.\"\n },\n {\n \"kind\": \"effect\",\n \"resolver\": \"rule-effect-by-rule-and-effect-id\",\n \"description\": \"Visual effect payload inside a rule, mapped to RuleEffectDefinition.\"\n },\n {\n \"kind\": \"preset\",\n \"resolver\": \"default-effect-preset-by-key\",\n \"description\": \"Built-in semantic effect preset from DEFAULT_EFFECT_PRESETS.\"\n },\n {\n \"kind\": \"animation\",\n \"resolver\": \"rule-animation-by-rule-and-effect-id\",\n \"description\": \"Animation preset, alias or override resolved through animation-presets.\"\n },\n {\n \"kind\": \"tableDelegation\",\n \"resolver\": \"praxis-table-authoring-operation\",\n \"description\": \"Explicit delegation boundary for table-owned configuration changes.\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"rule.add\",\n \"title\": \"Add table visual rule\",\n \"scope\": \"rule\",\n \"targetKind\": \"rule\",\n \"target\": {\n \"kind\": \"rule\",\n \"resolver\": \"table-rule-by-stable-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ruleId\",\n \"scope\"\n ],\n \"properties\": {\n \"ruleId\": {\n \"type\": \"string\"\n },\n \"scope\": {\n \"enum\": [\n \"cell\",\n \"row\",\n \"column\",\n \"table\"\n ]\n },\n \"columnKey\": {\n \"type\": \"string\"\n },\n \"condition\": {\n \"type\": \"object\"\n },\n \"effect\": {\n \"type\": \"object\"\n },\n \"insertAfterRuleId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"table-rule-builder-rule-add\",\n \"handlerContract\": {\n \"reads\": [\n \"RuleEffectsPanelComponent.scope\",\n \"RuleEffectDefinition\",\n \"praxis-table rowConditionalRenderers\",\n \"praxis-table columns[].conditionalRenderers\"\n ],\n \"writes\": [\n \"delegatedAuthoringOperations\",\n \"RuleEffectDefinition\"\n ],\n \"identityKeys\": [\n \"ruleId\"\n ],\n \"failureModes\": [\n \"duplicate-rule-id\",\n \"unsupported-scope\",\n \"column-not-found\",\n \"condition-invalid\",\n \"effect-registry-miss\"\n ],\n \"description\": \"Creates a stable table visual rule and keeps table-owned renderer placement delegated to praxis-table.\"\n }\n }\n ],\n \"validators\": [\n \"rule-id-unique\",\n \"scope-supported\",\n \"condition-table-context-valid\",\n \"effect-registry-supported\",\n \"table-owned-config-delegated\"\n ],\n \"affectedPaths\": [\n \"delegatedAuthoringOperations\",\n \"RuleEffectDefinition\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"rule-effects-panel-loaded\",\n \"table-authoring-context-known\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"rule.remove\",\n \"title\": \"Remove table visual rule\",\n \"scope\": \"rule\",\n \"targetKind\": \"rule\",\n \"target\": {\n \"kind\": \"rule\",\n \"resolver\": \"table-rule-by-stable-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ruleId\"\n ],\n \"properties\": {\n \"ruleId\": {\n \"type\": \"string\"\n },\n \"removeEffects\": {\n \"type\": \"boolean\"\n },\n \"preserveCondition\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"table-rule-builder-rule-remove\",\n \"handlerContract\": {\n \"reads\": [\n \"ruleEffects.rules\",\n \"ruleEffects.rules[].effect\",\n \"ruleEffects.rules[].condition\"\n ],\n \"writes\": [\n \"delegatedAuthoringOperations\"\n ],\n \"identityKeys\": [\n \"ruleId\"\n ],\n \"failureModes\": [\n \"rule-not-found\",\n \"destructive-removal-not-confirmed\",\n \"orphaned-table-renderer\",\n \"condition-preserve-not-supported\"\n ],\n \"description\": \"Removes a governed visual rule by id with confirmation because conditions and effects can be lost.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"rule-exists\",\n \"destructive-removal-confirmed\",\n \"table-renderer-references-clean\",\n \"table-owned-config-delegated\"\n ],\n \"affectedPaths\": [\n \"delegatedAuthoringOperations\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"rule-effects-panel-loaded\",\n \"explicit-confirmation-provided\"\n ]\n },\n {\n \"operationId\": \"condition.set\",\n \"title\": \"Set table rule condition\",\n \"scope\": \"rule\",\n \"targetKind\": \"condition\",\n \"target\": {\n \"kind\": \"condition\",\n \"resolver\": \"table-rule-condition-by-rule-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ruleId\",\n \"condition\"\n ],\n \"properties\": {\n \"ruleId\": {\n \"type\": \"string\"\n },\n \"condition\": {\n \"type\": \"object\"\n },\n \"scope\": {\n \"enum\": [\n \"cell\",\n \"row\",\n \"column\",\n \"table\"\n ]\n },\n \"columnKey\": {\n \"type\": \"string\"\n },\n \"mode\": {\n \"enum\": [\n \"replace\",\n \"merge\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"table-rule-builder-condition-set\",\n \"handlerContract\": {\n \"reads\": [\n \"ruleEffects.rules\",\n \"praxis-table dataSource fields\",\n \"praxis-table columns\"\n ],\n \"writes\": [\n \"delegatedAuthoringOperations\"\n ],\n \"identityKeys\": [\n \"ruleId\"\n ],\n \"failureModes\": [\n \"rule-not-found\",\n \"condition-invalid\",\n \"field-not-in-table-context\",\n \"column-not-found\"\n ],\n \"description\": \"Applies a structured table row/column condition without creating a parallel table DSL.\"\n }\n }\n ],\n \"validators\": [\n \"rule-exists\",\n \"condition-table-context-valid\",\n \"condition-fields-known\",\n \"condition-operators-supported\"\n ],\n \"affectedPaths\": [\n \"delegatedAuthoringOperations\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"rule-effects-panel-loaded\",\n \"table-authoring-context-known\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"effect.add\",\n \"title\": \"Add visual effect to rule\",\n \"scope\": \"skin\",\n \"targetKind\": \"effect\",\n \"target\": {\n \"kind\": \"effect\",\n \"resolver\": \"rule-effect-by-rule-and-effect-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ruleId\",\n \"effectId\",\n \"effectType\"\n ],\n \"properties\": {\n \"ruleId\": {\n \"type\": \"string\"\n },\n \"effectId\": {\n \"type\": \"string\"\n },\n \"effectType\": {\n \"enum\": [\n \"estilo\",\n \"layout\",\n \"icone\",\n \"fundo\",\n \"animacao\",\n \"tooltip\"\n ]\n },\n \"payload\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"table-rule-builder-effect-add\",\n \"handlerContract\": {\n \"reads\": [\n \"EffectRegistryService.list\",\n \"RuleEffectDefinition\",\n \"toCellClassAndStyle\"\n ],\n \"writes\": [\n \"RuleEffectDefinition\"\n ],\n \"identityKeys\": [\n \"ruleId\",\n \"effectId\"\n ],\n \"failureModes\": [\n \"rule-not-found\",\n \"duplicate-effect-id\",\n \"unsupported-effect-type\",\n \"unsafe-style-value\"\n ],\n \"description\": \"Adds a governed visual effect whose type is backed by the effect registry and RuleEffectDefinition.\"\n }\n }\n ],\n \"validators\": [\n \"rule-exists\",\n \"effect-id-unique\",\n \"effect-registry-supported\",\n \"style-values-safe\",\n \"preview-class-not-persisted\"\n ],\n \"affectedPaths\": [\n \"RuleEffectDefinition\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"rule-effects-panel-loaded\",\n \"effect-registry-initialized\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"effect.update\",\n \"title\": \"Update visual effect payload\",\n \"scope\": \"skin\",\n \"targetKind\": \"effect\",\n \"target\": {\n \"kind\": \"effect\",\n \"resolver\": \"rule-effect-by-rule-and-effect-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ruleId\",\n \"effectId\",\n \"payload\"\n ],\n \"properties\": {\n \"ruleId\": {\n \"type\": \"string\"\n },\n \"effectId\": {\n \"type\": \"string\"\n },\n \"payload\": {\n \"type\": \"object\"\n },\n \"mode\": {\n \"enum\": [\n \"replace\",\n \"merge\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"table-rule-builder-effect-update\",\n \"handlerContract\": {\n \"reads\": [\n \"ruleEffects.rules[].effect\",\n \"EffectRegistryService.list\",\n \"toCellClassAndStyle\"\n ],\n \"writes\": [\n \"RuleEffectDefinition\"\n ],\n \"identityKeys\": [\n \"ruleId\",\n \"effectId\"\n ],\n \"failureModes\": [\n \"rule-not-found\",\n \"effect-not-found\",\n \"unsupported-effect-type\",\n \"unsafe-style-value\"\n ],\n \"description\": \"Updates a visual effect payload while preserving its stable effect id and registry-backed type.\"\n }\n }\n ],\n \"validators\": [\n \"rule-exists\",\n \"effect-exists\",\n \"effect-registry-supported\",\n \"style-values-safe\",\n \"runtime-effect-compilable\"\n ],\n \"affectedPaths\": [\n \"RuleEffectDefinition\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"rule-effects-panel-loaded\",\n \"effect-registry-initialized\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"effect.remove\",\n \"title\": \"Remove visual effect from rule\",\n \"scope\": \"skin\",\n \"targetKind\": \"effect\",\n \"target\": {\n \"kind\": \"effect\",\n \"resolver\": \"rule-effect-by-rule-and-effect-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ruleId\",\n \"effectId\"\n ],\n \"properties\": {\n \"ruleId\": {\n \"type\": \"string\"\n },\n \"effectId\": {\n \"type\": \"string\"\n },\n \"removeEmptyRule\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"table-rule-builder-effect-remove\",\n \"handlerContract\": {\n \"reads\": [\n \"ruleEffects.rules\",\n \"ruleEffects.rules[].effect\"\n ],\n \"writes\": [\n \"RuleEffectDefinition\",\n \"delegatedAuthoringOperations\"\n ],\n \"identityKeys\": [\n \"ruleId\",\n \"effectId\"\n ],\n \"failureModes\": [\n \"rule-not-found\",\n \"effect-not-found\",\n \"destructive-removal-not-confirmed\",\n \"empty-rule-created\"\n ],\n \"description\": \"Removes one visual effect and optionally removes the empty rule, requiring confirmation for destructive cleanup.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"rule-exists\",\n \"effect-exists\",\n \"destructive-removal-confirmed\",\n \"empty-rule-policy-valid\"\n ],\n \"affectedPaths\": [\n \"RuleEffectDefinition\",\n \"delegatedAuthoringOperations\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"rule-effects-panel-loaded\",\n \"explicit-confirmation-provided\"\n ]\n },\n {\n \"operationId\": \"preset.apply\",\n \"title\": \"Apply semantic effect preset\",\n \"scope\": \"skin\",\n \"targetKind\": \"preset\",\n \"target\": {\n \"kind\": \"preset\",\n \"resolver\": \"default-effect-preset-by-key\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ruleId\",\n \"presetKey\"\n ],\n \"properties\": {\n \"ruleId\": {\n \"type\": \"string\"\n },\n \"presetKey\": {\n \"enum\": [\n \"aprovado\",\n \"alerta\",\n \"erro\",\n \"info\"\n ]\n },\n \"scope\": {\n \"enum\": [\n \"cell\",\n \"row\",\n \"column\",\n \"table\"\n ]\n },\n \"mergeWithExisting\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"table-rule-builder-preset-apply\",\n \"handlerContract\": {\n \"reads\": [\n \"DEFAULT_EFFECT_PRESETS\",\n \"RuleEffectsPanelComponent.applyPreset\",\n \"RuleEffectDefinition\"\n ],\n \"writes\": [\n \"RuleEffectDefinition\",\n \"RuleEffectsPanelComponent.effectsForm\",\n \"valueChange\"\n ],\n \"identityKeys\": [\n \"ruleId\",\n \"presetKey\"\n ],\n \"failureModes\": [\n \"rule-not-found\",\n \"preset-not-found\",\n \"scope-override-invalid\",\n \"preset-effect-not-compilable\"\n ],\n \"description\": \"Applies a built-in semantic preset and normalizes its scope through the rule effects panel.\"\n }\n }\n ],\n \"validators\": [\n \"rule-exists\",\n \"preset-key-known\",\n \"preset-effect-compilable\",\n \"scope-supported\"\n ],\n \"affectedPaths\": [\n \"RuleEffectDefinition\",\n \"RuleEffectsPanelComponent.effectsForm\",\n \"valueChange\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"rule-effects-panel-loaded\",\n \"default-presets-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"animation.set\",\n \"title\": \"Set rule animation\",\n \"scope\": \"skin\",\n \"targetKind\": \"animation\",\n \"target\": {\n \"kind\": \"animation\",\n \"resolver\": \"rule-animation-by-rule-and-effect-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ruleId\",\n \"animation\"\n ],\n \"properties\": {\n \"ruleId\": {\n \"type\": \"string\"\n },\n \"effectId\": {\n \"type\": \"string\"\n },\n \"animation\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"preset\": {\n \"enum\": [\n \"info-soft\",\n \"success-confirm\",\n \"warning-attention\",\n \"critical-alert\",\n \"audit-review\",\n \"sync-pending\",\n \"sla-warning\",\n \"sla-breach\",\n \"risk-elevated\",\n \"risk-critical\",\n \"audit-warning\",\n \"sync-warning\"\n ]\n },\n \"type\": {\n \"enum\": [\n \"pulse\",\n \"blink\",\n \"grow\",\n \"fade\",\n \"slide-in\",\n \"border-pulse\"\n ]\n },\n \"trigger\": {\n \"enum\": [\n \"onChange\",\n \"onAppear\",\n \"onHover\",\n \"onConditionEnter\",\n \"onConditionExit\",\n \"onDataRefresh\"\n ]\n },\n \"repeat\": {},\n \"durationMs\": {\n \"type\": \"number\"\n },\n \"delayMs\": {\n \"type\": \"number\"\n },\n \"intensity\": {\n \"enum\": [\n \"subtle\",\n \"normal\",\n \"strong\"\n ]\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"table-rule-builder-animation-set\",\n \"handlerContract\": {\n \"reads\": [\n \"RULE_ANIMATION_PRESETS\",\n \"RULE_ANIMATION_PRESET_ALIASES\",\n \"resolveRuleAnimationConfig\",\n \"RuleEffectDefinition.animation\"\n ],\n \"writes\": [\n \"RuleEffectDefinition.animation\",\n \"RuleEffectsPanelComponent.effectsForm.animation\",\n \"valueChange\"\n ],\n \"identityKeys\": [\n \"ruleId\",\n \"effectId\"\n ],\n \"failureModes\": [\n \"rule-not-found\",\n \"effect-not-found\",\n \"animation-preset-unknown\",\n \"animation-override-invalid\",\n \"reduced-motion-policy-violated\"\n ],\n \"description\": \"Sets a semantic animation preset or override that resolves fail-closed through the animation preset catalog.\"\n }\n }\n ],\n \"validators\": [\n \"rule-exists\",\n \"animation-preset-known\",\n \"animation-alias-known\",\n \"animation-override-valid\",\n \"animation-runtime-supported\"\n ],\n \"affectedPaths\": [\n \"RuleEffectDefinition.animation\",\n \"RuleEffectsPanelComponent.effectsForm.animation\",\n \"valueChange\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"rule-effects-panel-loaded\",\n \"animation-presets-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"tableIntegration.delegate\",\n \"title\": \"Delegate table-owned configuration\",\n \"scope\": \"global\",\n \"targetKind\": \"tableDelegation\",\n \"target\": {\n \"kind\": \"tableDelegation\",\n \"resolver\": \"praxis-table-authoring-operation\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"tableOperationId\",\n \"reason\"\n ],\n \"properties\": {\n \"tableOperationId\": {\n \"type\": \"string\"\n },\n \"reason\": {\n \"type\": \"string\"\n },\n \"tableTarget\": {\n \"type\": \"object\"\n },\n \"tableParams\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"table-rule-builder-table-delegate\",\n \"handlerContract\": {\n \"reads\": [\n \"PRAXIS_TABLE_AUTHORING_MANIFEST\",\n \"TableConfigV2\",\n \"tableOperationId\"\n ],\n \"writes\": [\n \"delegatedAuthoringOperations\"\n ],\n \"identityKeys\": [\n \"tableOperationId\"\n ],\n \"failureModes\": [\n \"table-operation-not-found\",\n \"table-target-invalid\",\n \"attempted-local-table-config-write\"\n ],\n \"description\": \"Records that table-owned config such as renderer placement, columns, ordering or data binding must route through praxis-table.\"\n }\n }\n ],\n \"validators\": [\n \"table-manifest-operation-known\",\n \"table-target-valid\",\n \"no-local-table-config-write\",\n \"table-owned-config-delegated\"\n ],\n \"affectedPaths\": [\n \"delegatedAuthoringOperations\"\n ],\n \"submissionImpact\": \"none\",\n \"preconditions\": [\n \"praxis-table-manifest-available\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"rule-id-unique\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_ID_UNIQUE\",\n \"description\": \"Rule ids must be unique and stable.\"\n },\n {\n \"validatorId\": \"scope-supported\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_SCOPE_SUPPORTED\",\n \"description\": \"Rule scope must be one of cell, row, column or table.\"\n },\n {\n \"validatorId\": \"condition-table-context-valid\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_CONDITION_CONTEXT_VALID\",\n \"description\": \"Conditions must reference valid table row or column context.\"\n },\n {\n \"validatorId\": \"effect-registry-supported\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_EFFECT_REGISTRY_SUPPORTED\",\n \"description\": \"Effects must be backed by EffectRegistryService editor categories.\"\n },\n {\n \"validatorId\": \"table-owned-config-delegated\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_TABLE_CONFIG_DELEGATED\",\n \"description\": \"Table-owned configuration changes must delegate to praxis-table.\"\n },\n {\n \"validatorId\": \"rule-exists\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_EXISTS\",\n \"description\": \"The targeted rule must exist.\"\n },\n {\n \"validatorId\": \"destructive-removal-confirmed\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_DESTRUCTIVE_CONFIRMED\",\n \"description\": \"Destructive rule or effect removal requires explicit confirmation.\"\n },\n {\n \"validatorId\": \"table-renderer-references-clean\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_RENDERER_REFERENCES_CLEAN\",\n \"description\": \"Removing a rule must not leave stale table renderer references.\"\n },\n {\n \"validatorId\": \"condition-fields-known\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_CONDITION_FIELDS_KNOWN\",\n \"description\": \"Condition fields must exist in table row data or column metadata.\"\n },\n {\n \"validatorId\": \"condition-operators-supported\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_CONDITION_OPERATORS_SUPPORTED\",\n \"description\": \"Condition operators must be supported by table rule semantics.\"\n },\n {\n \"validatorId\": \"effect-id-unique\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_EFFECT_ID_UNIQUE\",\n \"description\": \"Effect ids must be unique within a rule.\"\n },\n {\n \"validatorId\": \"style-values-safe\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_STYLE_VALUES_SAFE\",\n \"description\": \"CSS class and style values must be safe for runtime rendering.\"\n },\n {\n \"validatorId\": \"preview-class-not-persisted\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_PREVIEW_CLASS_NOT_PERSISTED\",\n \"description\": \"Preview-only animation classes must not leak into persisted payload mapping.\"\n },\n {\n \"validatorId\": \"effect-exists\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_EFFECT_EXISTS\",\n \"description\": \"The targeted effect must exist.\"\n },\n {\n \"validatorId\": \"runtime-effect-compilable\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_RUNTIME_EFFECT_COMPILABLE\",\n \"description\": \"Effect payload must compile through toCellClassAndStyle or table renderer semantics.\"\n },\n {\n \"validatorId\": \"empty-rule-policy-valid\",\n \"level\": \"warning\",\n \"code\": \"TABLE_RULE_EMPTY_RULE_POLICY_VALID\",\n \"description\": \"Removing the last effect must follow the requested empty-rule policy.\"\n },\n {\n \"validatorId\": \"preset-key-known\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_PRESET_KEY_KNOWN\",\n \"description\": \"Preset key must exist in DEFAULT_EFFECT_PRESETS.\"\n },\n {\n \"validatorId\": \"preset-effect-compilable\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_PRESET_EFFECT_COMPILABLE\",\n \"description\": \"Preset payload must compile to RuleEffectDefinition.\"\n },\n {\n \"validatorId\": \"animation-preset-known\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_ANIMATION_PRESET_KNOWN\",\n \"description\": \"Animation preset must be canonical or explicitly aliased.\"\n },\n {\n \"validatorId\": \"animation-alias-known\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_ANIMATION_ALIAS_KNOWN\",\n \"description\": \"Animation aliases must resolve to canonical presets.\"\n },\n {\n \"validatorId\": \"animation-override-valid\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_ANIMATION_OVERRIDE_VALID\",\n \"description\": \"Animation overrides must normalize to supported type, trigger, repeat and intensity values.\"\n },\n {\n \"validatorId\": \"animation-runtime-supported\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_ANIMATION_RUNTIME_SUPPORTED\",\n \"description\": \"Animation payload must be supported by row and column conditional renderers.\"\n },\n {\n \"validatorId\": \"table-manifest-operation-known\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_TABLE_OPERATION_KNOWN\",\n \"description\": \"Delegated table operation must exist in the praxis-table authoring manifest.\"\n },\n {\n \"validatorId\": \"table-target-valid\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_TABLE_TARGET_VALID\",\n \"description\": \"Delegated table target must be resolvable by praxis-table.\"\n },\n {\n \"validatorId\": \"no-local-table-config-write\",\n \"level\": \"error\",\n \"code\": \"TABLE_RULE_NO_LOCAL_TABLE_CONFIG_WRITE\",\n \"description\": \"Rule builder operations must not write TableConfig directly.\"\n }\n ],\n \"roundTripRequirements\": [\n \"RuleEffectDefinition is the local source of truth for the effects panel.\",\n \"Rules that affect rowConditionalRenderers or columns[].conditionalRenderers must delegate table-owned placement to praxis-table.\",\n \"Rule and effect identity must use stable ruleId/effectId keys; array indexes are not canonical identities.\",\n \"Animation presets and aliases must resolve through RULE_ANIMATION_PRESETS and RULE_ANIMATION_PRESET_ALIASES before persistence.\",\n \"Preview-only animation classes must be omitted from persisted table payload mapping by using includeAnimationPreview: false.\",\n \"Preset application must preserve the selected scope and emit a normalized RuleEffectDefinition through valueChange.\"\n ],\n \"examples\": [\n {\n \"id\": \"table-rule-add-row-warning\",\n \"request\": \"Add a row warning rule for overdue invoices.\",\n \"operationId\": \"rule.add\",\n \"target\": \"rule:overdue-warning\",\n \"params\": {\n \"ruleId\": \"overdue-warning\",\n \"scope\": \"row\",\n \"condition\": {\n \"field\": \"dueDate\",\n \"operator\": \"beforeToday\"\n },\n \"effect\": {\n \"background\": {\n \"color\": \"rgba(255,193,7,0.12)\"\n }\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"table-rule-remove-obsolete\",\n \"request\": \"Remove the obsolete archived row rule.\",\n \"operationId\": \"rule.remove\",\n \"target\": \"rule:archived-obsolete\",\n \"params\": {\n \"ruleId\": \"archived-obsolete\",\n \"removeEffects\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"table-rule-condition-status-error\",\n \"request\": \"Make the rule apply when status is error.\",\n \"operationId\": \"condition.set\",\n \"target\": \"condition:status-error\",\n \"params\": {\n \"ruleId\": \"status-error\",\n \"condition\": {\n \"field\": \"status\",\n \"operator\": \"equals\",\n \"value\": \"error\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"table-rule-add-badge-effect\",\n \"request\": \"Add a warning badge to the status rule.\",\n \"operationId\": \"effect.add\",\n \"target\": \"effect:status-warning/badge\",\n \"params\": {\n \"ruleId\": \"status-warning\",\n \"effectId\": \"badge\",\n \"effectType\": \"icone\",\n \"payload\": {\n \"icon\": \"warning\",\n \"badgeText\": \"Attention\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"table-rule-update-background\",\n \"request\": \"Change the risk rule background color.\",\n \"operationId\": \"effect.update\",\n \"target\": \"effect:risk/background\",\n \"params\": {\n \"ruleId\": \"risk\",\n \"effectId\": \"background\",\n \"payload\": {\n \"background\": {\n \"color\": \"rgba(239,83,80,0.10)\"\n }\n },\n \"mode\": \"merge\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"table-rule-remove-tooltip\",\n \"request\": \"Remove the tooltip effect from the audit rule.\",\n \"operationId\": \"effect.remove\",\n \"target\": \"effect:audit/tooltip\",\n \"params\": {\n \"ruleId\": \"audit\",\n \"effectId\": \"tooltip\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"table-rule-apply-alerta\",\n \"request\": \"Use the alerta preset on the SLA rule.\",\n \"operationId\": \"preset.apply\",\n \"target\": \"preset:alerta\",\n \"params\": {\n \"ruleId\": \"sla\",\n \"presetKey\": \"alerta\",\n \"scope\": \"row\",\n \"mergeWithExisting\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"table-rule-animation-critical\",\n \"request\": \"Make the SLA breach animation critical.\",\n \"operationId\": \"animation.set\",\n \"target\": \"animation:sla-breach\",\n \"params\": {\n \"ruleId\": \"sla-breach\",\n \"effectId\": \"animation\",\n \"animation\": {\n \"preset\": \"critical-alert\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"table-rule-delegate-column-renderer\",\n \"request\": \"Move this effect to the status column renderer.\",\n \"operationId\": \"tableIntegration.delegate\",\n \"target\": \"praxis-table:column-renderer\",\n \"params\": {\n \"tableOperationId\": \"column.conditionalRenderer.set\",\n \"reason\": \"column renderer placement is owned by praxis-table\",\n \"tableTarget\": {\n \"columnKey\": \"status\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"table-rule-reject-direct-table-column\",\n \"request\": \"Add a new table column from the rule builder.\",\n \"operationId\": \"tableIntegration.delegate\",\n \"target\": \"praxis-table:column.add\",\n \"params\": {\n \"tableOperationId\": \"column.add\",\n \"reason\": \"column authoring belongs to praxis-table\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"table-rule-reject-unknown-effect\",\n \"request\": \"Add a sparkle shader effect to rows.\",\n \"operationId\": \"effect.add\",\n \"target\": \"effect:sparkle\",\n \"params\": {\n \"ruleId\": \"risk\",\n \"effectId\": \"sparkle\",\n \"effectType\": \"shader\",\n \"payload\": {}\n },\n \"isPositive\": false\n },\n {\n \"id\": \"table-rule-reject-unknown-animation\",\n \"request\": \"Use the earthquake animation preset.\",\n \"operationId\": \"animation.set\",\n \"target\": \"animation:earthquake\",\n \"params\": {\n \"ruleId\": \"risk\",\n \"effectId\": \"animation\",\n \"animation\": {\n \"preset\": \"earthquake\"\n }\n },\n \"isPositive\": false\n }\n ]\n}",
|
|
1623
|
+
"sourcePointer": "praxis-ui-angular/projects/praxis-table-rule-builder/src/lib/ai/praxis-table-rule-builder-authoring-manifest.ts",
|
|
1624
|
+
"contentHash": "f7ca1fc32c2fd6345fa6a5fc182cf697527700c542fc114df6ee4ddd38bd6e6d",
|
|
1625
|
+
"sourceKind": "component_definition",
|
|
1626
|
+
"sourceId": "praxis-table-rule-builder",
|
|
1627
|
+
"corpusVersion": "1.0.0"
|
|
1628
|
+
},
|
|
1629
|
+
{
|
|
1630
|
+
"chunkIndex": 2,
|
|
1631
|
+
"chunkKind": "context_pack",
|
|
1632
|
+
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"scope\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"cell\",\n \"label\": \"Cell\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"table\",\n \"label\": \"Table\"\n }\n ]\n },\n \"estilo.transform\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"uppercase\",\n \"label\": \"Uppercase\"\n },\n {\n \"value\": \"lowercase\",\n \"label\": \"Lowercase\"\n },\n {\n \"value\": \"capitalize\",\n \"label\": \"Capitalize\"\n }\n ]\n },\n \"layout.border\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"none\",\n \"label\": \"None\"\n },\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n },\n {\n \"value\": \"bottom\",\n \"label\": \"Bottom\"\n },\n {\n \"value\": \"all\",\n \"label\": \"All\"\n }\n ]\n },\n \"layout.align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n }\n ]\n },\n \"iconBadge.iconPos\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"before\",\n \"label\": \"Before\"\n },\n {\n \"value\": \"after\",\n \"label\": \"After\"\n },\n {\n \"value\": \"overlay\",\n \"label\": \"Overlay\"\n }\n ]\n },\n \"iconBadge.badgeStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"solid\",\n \"label\": \"Solid\"\n },\n {\n \"value\": \"soft\",\n \"label\": \"Soft\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"animation.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"pulse\",\n \"label\": \"Pulse\"\n },\n {\n \"value\": \"blink\",\n \"label\": \"Blink\"\n },\n {\n \"value\": \"grow\",\n \"label\": \"Grow\"\n },\n {\n \"value\": \"fade\",\n \"label\": \"Fade\"\n },\n {\n \"value\": \"slide-in\",\n \"label\": \"Slide in\"\n },\n {\n \"value\": \"border-pulse\",\n \"label\": \"Border pulse\"\n }\n ]\n },\n \"animation.preset\": {\n \"mode\": \"enum\",\n \"options\": [\n null,\n null\n ]\n },\n \"animation.trigger\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"onChange\",\n \"label\": \"On change\"\n },\n {\n \"value\": \"onAppear\",\n \"label\": \"On appear\"\n },\n {\n \"value\": \"onHover\",\n \"label\": \"On hover\"\n },\n {\n \"value\": \"onConditionEnter\",\n \"label\": \"On condition enter\"\n },\n {\n \"value\": \"onConditionExit\",\n \"label\": \"On condition exit\"\n },\n {\n \"value\": \"onDataRefresh\",\n \"label\": \"On data refresh\"\n }\n ]\n },\n \"animation.repeat\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"once\",\n \"label\": \"Once\"\n },\n {\n \"value\": \"loop\",\n \"label\": \"Loop\"\n },\n {\n \"value\": \"infinite\",\n \"label\": \"Infinite\"\n }\n ]\n },\n \"animation.intensity\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"subtle\",\n \"label\": \"Subtle\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"strong\",\n \"label\": \"Strong\"\n }\n ]\n },\n \"tooltip.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"bottom\",\n \"label\": \"Bottom\"\n },\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"scope.set\",\n \"intentExamples\": [\n \"scope\",\n \"apply to row\",\n \"apply to column\"\n ],\n \"patchTemplate\": {\n \"scope\": \"{{value}}\"\n }\n },\n {\n \"id\": \"description.set\",\n \"intentExamples\": [\n \"description\",\n \"effect description\"\n ],\n \"patchTemplate\": {\n \"description\": \"{{value}}\"\n }\n },\n {\n \"id\": \"estilo.color.set\",\n \"intentExamples\": [\n \"text color\",\n \"font color\"\n ],\n \"patchTemplate\": {\n \"estilo\": {\n \"color\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"estilo.bgColor.set\",\n \"intentExamples\": [\n \"background color\",\n \"bg color\"\n ],\n \"patchTemplate\": {\n \"estilo\": {\n \"bgColor\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"estilo.bold.enable\",\n \"intentExamples\": [\n \"bold\",\n \"negrito\"\n ],\n \"patchTemplate\": {\n \"estilo\": {\n \"bold\": true\n }\n }\n },\n {\n \"id\": \"estilo.bold.disable\",\n \"intentExamples\": [\n \"no bold\",\n \"remove bold\"\n ],\n \"patchTemplate\": {\n \"estilo\": {\n \"bold\": false\n }\n }\n },\n {\n \"id\": \"iconBadge.icon.set\",\n \"intentExamples\": [\n \"icon\",\n \"badge icon\"\n ],\n \"patchTemplate\": {\n \"iconBadge\": {\n \"icon\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"iconBadge.badgeText.set\",\n \"intentExamples\": [\n \"badge text\",\n \"badge label\"\n ],\n \"patchTemplate\": {\n \"iconBadge\": {\n \"badgeText\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"tooltip.text.set\",\n \"intentExamples\": [\n \"tooltip\",\n \"hint\",\n \"hover text\"\n ],\n \"patchTemplate\": {\n \"tooltip\": {\n \"text\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"animation.type.set\",\n \"intentExamples\": [\n \"animation\",\n \"effect animation\"\n ],\n \"patchTemplate\": {\n \"animation\": {\n \"type\": \"{{value}}\"\n }\n }\n }\n ],\n \"fieldResolvers\": {},\n \"hints\": [\n \"Effects apply to the current scope (cell/row/column/table).\",\n \"Use only safe CSS values for colors and styles.\"\n ]\n }\n}",
|
|
1633
|
+
"sourcePointer": "praxis-ui-angular/projects/praxis-table-rule-builder/src/lib/praxis-table-rule-builder.metadata.ts",
|
|
1634
|
+
"contentHash": "76bfecac917d583f747a41b27ddc1bda80bb47cff46469990925c0d91d2a2ddc",
|
|
1635
|
+
"sourceKind": "component_definition",
|
|
1636
|
+
"sourceId": "praxis-table-rule-builder",
|
|
1637
|
+
"corpusVersion": "1.0.0"
|
|
1638
|
+
},
|
|
1639
|
+
{
|
|
1640
|
+
"chunkIndex": 3,
|
|
1641
|
+
"chunkKind": "recipe",
|
|
1642
|
+
"content": "{\n \"_comment\": \"Receita para o Construtor de Regras de Tabela (Table Rule Builder).\",\n \"templateMeta\": {\n \"registryKey\": \"praxis-table-rule-builder\",\n \"variantId\": \"base\",\n \"useWhen\": \"Base table rule builder configuration.\",\n \"examplePrompts\": [\n \"create table rule effects\",\n \"add conditional styling rules\"\n ]\n },\n \"rules\": [\n {\n \"id\": \"rule-high-value\",\n \"name\": \"Destaque Valor Alto\",\n \"conditions\": [\n { \"field\": \"amount\", \"operator\": \"greaterThan\", \"value\": 1000 }\n ],\n \"target\": \"row\",\n \"effects\": [\n {\n \"type\": \"style\",\n \"style\": { \"fontWeight\": \"bold\", \"backgroundColor\": \"#e3f2fd\" }\n },\n {\n \"type\": \"icon-badge\",\n \"icon\": \"star\",\n \"color\": \"primary\",\n \"tooltip\": \"Cliente VIP\"\n }\n ],\n \"safety\": {\n \"sanitized\": true\n }\n },\n {\n \"id\": \"rule-overdue\",\n \"name\": \"Alerta Atraso\",\n \"conditions\": [\n { \"field\": \"daysOverdue\", \"operator\": \"greaterThan\", \"value\": 0 }\n ],\n \"target\": \"cell\",\n \"targetField\": \"dueDate\",\n \"effects\": [\n {\n \"type\": \"style\",\n \"style\": { \"color\": \"red\" }\n },\n {\n \"type\": \"tooltip\",\n \"text\": \"Pagamento em atraso!\"\n },\n {\n \"type\": \"animation\",\n \"animation\": \"pulse\"\n }\n ]\n }\n ],\n \"preview\": {\n \"enabled\": true,\n \"context\": { \"amount\": 1200, \"daysOverdue\": 5 }\n }\n}\n",
|
|
1643
|
+
"sourcePointer": "praxis-ui-angular/examples/ai-recipes/table-rules-editor.json",
|
|
1644
|
+
"contentHash": "f834557452a959dab3fcd309091818c3a62e346700a53c92ab1fffbae97cc27d",
|
|
1645
|
+
"sourceKind": "component_definition",
|
|
1646
|
+
"sourceId": "praxis-table-rule-builder",
|
|
1647
|
+
"corpusVersion": "1.0.0"
|
|
1648
|
+
}
|
|
1649
|
+
]
|
|
1650
|
+
}
|
|
1651
|
+
},
|
|
1652
|
+
"note": "Package-scoped Praxis component registry for source-free agent discovery. Use the canonical ingestion registry for cross-package aggregate analysis."
|
|
1653
|
+
}
|