@praxisui/list 9.0.0-beta.71 → 9.0.0-beta.73

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-11T00:12:06.404Z",
3
+ "generatedAt": "2026-07-12T01:34:40.567Z",
4
4
  "packageName": "@praxisui/list",
5
- "packageVersion": "9.0.0-beta.71",
5
+ "packageVersion": "9.0.0-beta.73",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 1,
@@ -14,54 +14,65 @@
14
14
  {
15
15
  "name": "config",
16
16
  "type": "PraxisListConfig",
17
- "required": false
17
+ "required": false,
18
+ "description": "Configuração da lista (fonte de dados, layout, seleção, templates, ações)"
18
19
  },
19
20
  {
20
21
  "name": "listId",
21
22
  "type": "string",
22
- "required": false
23
+ "required": false,
24
+ "description": "Identificador da lista (obrigatório para persistência)"
23
25
  },
24
26
  {
25
27
  "name": "componentInstanceId",
26
28
  "type": "string",
27
- "required": false
29
+ "required": false,
30
+ "description": "Identificador opcional para múltiplas instâncias na mesma rota"
28
31
  },
29
32
  {
30
33
  "name": "configPersistenceStrategy",
31
34
  "type": "'local-first' | 'input-first'",
32
- "required": false
35
+ "required": false,
36
+ "description": "Define se a configuração local persistida ou a configuração recebida por input tem precedência na hidratação.",
37
+ "default": "local-first"
33
38
  },
34
39
  {
35
40
  "name": "queryContext",
36
41
  "type": "PraxisDataQueryContext | null",
37
- "required": false
42
+ "required": false,
43
+ "description": "Contexto runtime declarativo para filtros, ordenação e paginação sem persistir na configuração autorada."
38
44
  },
39
45
  {
40
46
  "name": "form",
41
47
  "type": "FormGroup",
42
- "required": false
48
+ "required": false,
49
+ "description": "FormGroup opcional quando integrado a formulários"
43
50
  },
44
51
  {
45
52
  "name": "enableCustomization",
46
53
  "type": "boolean",
47
- "required": false
54
+ "required": false,
55
+ "description": "Input canônico para habilitar customização runtime, editor e AI assistant"
48
56
  }
49
57
  ],
50
58
  "outputs": [
51
59
  {
52
60
  "name": "itemClick",
53
61
  "type": "ListItemEvent",
54
- "required": false
62
+ "required": false,
63
+ "description": "Clique em item"
55
64
  },
56
65
  {
57
66
  "name": "actionClick",
58
67
  "type": "ListActionEvent",
59
- "required": false
68
+ "required": false,
69
+ "description": "Clique em ação de item"
60
70
  },
61
71
  {
62
72
  "name": "selectionChange",
63
73
  "type": "ListSelectionEvent",
64
- "required": false
74
+ "required": false,
75
+ "description": "Mudança de seleção"
65
76
  }
66
77
  ],
67
78
  "configSchemaId": null,
@@ -76,6 +87,126 @@
76
87
  "configurable"
77
88
  ],
78
89
  "lib": "@praxisui/list",
90
+ "actions": [
91
+ {
92
+ "id": "item-click",
93
+ "label": "Clique no item",
94
+ "icon": "touch_app",
95
+ "description": "Emite evento ao clicar em um item da lista",
96
+ "emit": "itemClick",
97
+ "payloadSchema": {
98
+ "type": "object",
99
+ "properties": {
100
+ "item": {
101
+ "type": "object",
102
+ "description": "Item selecionado"
103
+ },
104
+ "index": {
105
+ "type": "number",
106
+ "description": "Índice do item"
107
+ },
108
+ "section": {
109
+ "type": "string",
110
+ "description": "Seção (quando agrupado)"
111
+ }
112
+ },
113
+ "required": [
114
+ "item",
115
+ "index"
116
+ ],
117
+ "example": {
118
+ "item": {},
119
+ "index": 0
120
+ }
121
+ },
122
+ "scope": "any"
123
+ },
124
+ {
125
+ "id": "item-action",
126
+ "label": "Ação do item",
127
+ "icon": "bolt",
128
+ "description": "Emite evento ao acionar uma ação configurada no item",
129
+ "emit": "actionClick",
130
+ "payloadSchema": {
131
+ "type": "object",
132
+ "properties": {
133
+ "actionId": {
134
+ "type": "string",
135
+ "description": "ID da ação"
136
+ },
137
+ "item": {
138
+ "type": "object",
139
+ "description": "Item de referência"
140
+ },
141
+ "index": {
142
+ "type": "number",
143
+ "description": "Índice do item"
144
+ }
145
+ },
146
+ "required": [
147
+ "actionId",
148
+ "item",
149
+ "index"
150
+ ],
151
+ "example": {
152
+ "actionId": "edit",
153
+ "item": {},
154
+ "index": 0
155
+ }
156
+ },
157
+ "scope": "context"
158
+ },
159
+ {
160
+ "id": "selection-change",
161
+ "label": "Seleção alterada",
162
+ "icon": "checklist",
163
+ "description": "Emite evento ao mudar a seleção",
164
+ "emit": "selectionChange",
165
+ "payloadSchema": {
166
+ "type": "object",
167
+ "properties": {
168
+ "mode": {
169
+ "type": "string",
170
+ "description": "Modo de seleção"
171
+ },
172
+ "value": {
173
+ "type": "object",
174
+ "description": "Valor selecionado"
175
+ },
176
+ "items": {
177
+ "type": "array",
178
+ "description": "Itens selecionados"
179
+ },
180
+ "ids": {
181
+ "type": "array",
182
+ "description": "IDs selecionados"
183
+ }
184
+ },
185
+ "required": [
186
+ "mode",
187
+ "value",
188
+ "items"
189
+ ],
190
+ "example": {
191
+ "mode": "single",
192
+ "value": {},
193
+ "items": [],
194
+ "ids": [
195
+ 1
196
+ ]
197
+ }
198
+ },
199
+ "scope": "any"
200
+ }
201
+ ],
202
+ "configEditor": {
203
+ "component": "[ref:PraxisListWidgetConfigEditor]",
204
+ "title": "Configure list"
205
+ },
206
+ "authoringManifestRef": {
207
+ "componentId": "praxis-list",
208
+ "source": "PRAXIS_LIST_AUTHORING_MANIFEST"
209
+ },
79
210
  "source": "projects/praxis-list/src/lib/praxis-list.metadata.ts",
80
211
  "exportName": "PRAXIS_LIST_COMPONENT_METADATA",
81
212
  "componentCapabilities": [
@@ -6535,7 +6666,7 @@
6535
6666
  "chunkIndex": 0,
6536
6667
  "chunkKind": "summary",
6537
6668
  "content": "Component ID: praxis-list\nSelector: praxis-list\nFriendly Name: Praxis List\nDescription: Lista com suporte a seleção (single/multiple), agrupamento e templates.\nLib/Package: @praxisui/list\nTags: widget, list, lista, selection, configurable\nInputs:\n - config (PraxisListConfig)\n - listId (string)\n - componentInstanceId (string)\n - configPersistenceStrategy ('local-first' | 'input-first')\n - queryContext (PraxisDataQueryContext | null)\n - form (FormGroup)\n - enableCustomization (boolean)\nOutputs:\n - itemClick (ListItemEvent)\n - actionClick (ListActionEvent)\n - selectionChange (ListSelectionEvent)\n",
6538
- "sourcePointer": "praxis-ui-angular/projects/praxis-list/src/lib/praxis-list.metadata.ts",
6669
+ "sourcePointer": "projects/praxis-list/src/lib/praxis-list.metadata.ts",
6539
6670
  "contentHash": "2517f19d442043072650cb9fa6a34568726535c778f0a4bbbc93d0b01b5df08a",
6540
6671
  "sourceKind": "component_definition",
6541
6672
  "sourceId": "praxis-list",
@@ -6545,7 +6676,7 @@
6545
6676
  "chunkIndex": 1,
6546
6677
  "chunkKind": "capabilities",
6547
6678
  "content": "Component Capabilities:\n - Path: id\n Category: meta\n Kind: string\n Description: List id (used by persistence and editor).\n - Path: dataSource\n Category: data\n Kind: object\n Description: Local or remote data source.\n - Path: dataSource.data\n Category: data\n Kind: array\n Description: Local data array.\n - Path: dataSource.resourcePath\n Category: data\n Kind: string\n Description: Remote resource path for GenericCrudService.\n - Path: dataSource.query\n Category: data\n Kind: object\n Description: Initial query sent to /filter.\n - Path: dataSource.sort\n Category: data\n Kind: array\n Description: Initial sort array (ex.: [\"name,asc\"]).\n - Path: dataSource.sort[]\n Category: data\n Kind: string\n Description: Single sort entry (field,dir).\n - Path: layout\n Category: layout\n Kind: object\n Description: Layout settings.\n - Path: layout.variant\n Category: layout\n Kind: enum\n Description: Layout variant.\n - Path: layout.density\n Category: layout\n Kind: enum\n Description: Layout density.\n - Path: layout.itemSpacing\n Category: layout\n Kind: enum\n Description: Spacing between rendered items.\n - Path: layout.lines\n Category: layout\n Kind: enum\n Description: Number of visible lines.\n - Path: layout.dividers\n Category: layout\n Kind: enum\n Description: Dividers between items.\n - Path: layout.model\n Category: layout\n Kind: enum\n Description: Visual model for items.\n - Path: layout.groupBy\n Category: layout\n Kind: string\n Description: Field name for grouping.\n - Path: layout.stickySectionHeader\n Category: layout\n Kind: boolean\n Description: Sticky section header.\n - Path: layout.virtualScroll\n Category: layout\n Kind: boolean\n Description: Enable virtual scroll (when supported).\n - Path: layout.pageSize\n Category: layout\n Kind: number\n Description: Remote page size.\n - Path: layout.rowLayout\n Category: layout\n Kind: object\n Description: Row layout grid/flex configuration for list variant.\n - Path: layout.rowLayout.type\n Category: layout\n Kind: enum\n Description: Row layout rendering type.\n - Path: layout.rowLayout.columns\n Category: layout\n Kind: array\n Description: Stable row layout columns.\n - Path: layout.rowLayout.columns[].slot\n Category: layout\n Kind: enum\n Description: Runtime-supported row layout slot.\n - Path: layout.rowLayout.columns[].width\n Category: layout\n Kind: string\n Description: CSS width for a row layout column.\n - Path: layout.rowLayout.columns[].minWidth\n Category: layout\n Kind: string\n Description: Minimum CSS width for a row layout column.\n - Path: layout.rowLayout.columns[].maxWidth\n Category: layout\n Kind: string\n Description: Maximum CSS width for a row layout column.\n - Path: layout.rowLayout.columns[].align\n Category: layout\n Kind: enum\n Description: Column content alignment.\n - Path: layout.rowLayout.columns[].justify\n Category: layout\n Kind: enum\n Description: Column grid justification.\n - Path: layout.rowLayout.columns[].class\n Category: layout\n Kind: string\n Description: CSS class for a row layout column.\n - Path: layout.rowLayout.columns[].style\n Category: layout\n Kind: string\n Description: Inline style for a row layout column.\n - Path: layout.rowLayout.gap\n Category: layout\n Kind: string\n Description: Gap between row layout columns.\n - Path: layout.rowLayout.align\n Category: layout\n Kind: enum\n Description: Vertical alignment for the row layout.\n - Path: layout.rowLayout.itemAlignY\n Category: layout\n Kind: enum\n Description: Alias for row vertical alignment.\n - Path: layout.rowLayout.class\n Category: layout\n Kind: string\n Description: CSS class for row layout content.\n - Path: layout.rowLayout.style\n Category: layout\n Kind: string\n Description: Inline style for row layout content.\n - Path: skin\n Category: skin\n Kind: object\n Description: Skin settings.\n - Path: skin.type\n Category: skin\n Kind: enum\n Description: Skin type.\n - Path: skin.gradient\n Category: skin\n Kind: object\n Description: Gradient options.\n - Path: skin.gradient.from\n Category: skin\n Kind: string\n Description: Gradient start color.\n - Path: skin.gradient.to\n Category: skin\n Kind: string\n Description: Gradient end color.\n - Path: skin.gradient.angle\n Category: skin\n Kind: number\n Description: Gradient angle in degrees.\n - Path: skin.radius\n Category: skin\n Kind: string\n Description: Border radius.\n - Path: skin.shadow\n Category: skin\n Kind: string\n Description: Box shadow.\n - Path: skin.border\n Category: skin\n Kind: string\n Description: Border style.\n - Path: skin.backdropBlur\n Category: skin\n Kind: string\n Description: Backdrop blur (glass).\n - Path: skin.class\n Category: skin\n Kind: string\n Description: Custom CSS class.\n - Path: skin.inlineStyle\n Category: skin\n Kind: string\n Description: Inline CSS (sanitized).\n - Path: selection\n Category: selection\n Kind: object\n Description: Selection settings.\n - Path: selection.mode\n Category: selection\n Kind: enum\n Description: Selection mode.\n - Path: selection.formControlName\n Category: selection\n Kind: string\n Description: FormControl name for binding.\n - Path: selection.formControlPath\n Category: selection\n Kind: string\n Description: FormControl path for binding.\n - Path: selection.compareBy\n Category: selection\n Kind: string\n Description: Field used to compare selections.\n - Path: selection.return\n Category: selection\n Kind: enum\n Description: Selection return payload.\n - Path: export\n Category: export\n Kind: object\n Description: Collection export configuration.\n - Path: export.enabled\n Category: export\n Kind: boolean\n Description: Show export actions for the list.\n - Path: export.formats\n Category: export\n Kind: array\n Description: Allowed export formats.\n - Path: export.formats[]\n Category: export\n Kind: enum\n Description: Single export format.\n - Path: export.general.scope\n Category: export\n Kind: enum\n Description: Collection export scope.\n - Path: export.general.includeHeaders\n Category: export\n Kind: boolean\n Description: Include header row for tabular exports.\n - Path: export.general.maxRows\n Category: export\n Kind: number\n Description: Maximum rows to include in local export.\n - Path: export.general.defaultFileName\n Category: export\n Kind: string\n Description: Default export file name.\n - Path: export.general.includeFields\n Category: export\n Kind: array\n Description: Field paths to include, or \"all\" for inferred object keys.\n - Path: export.general.applyFormatting\n Category: export\n Kind: boolean\n Description: Apply configured field formatting when available.\n - Path: interaction\n Category: interaction\n Kind: object\n Description: Expandable row interaction settings.\n - Path: interaction.expandable\n Category: interaction\n Kind: boolean\n Description: Enable inline row expansion.\n - Path: interaction.expandTrigger\n Category: interaction\n Kind: enum\n Description: How expansion is triggered.\n - Path: interaction.expandMode\n Category: interaction\n Kind: enum\n Description: Whether one or many rows may be expanded.\n - Path: interaction.expandPlacement\n Category: interaction\n Kind: enum\n Description: Where the expansion control is rendered.\n - Path: templating\n Category: templating\n Kind: object\n Description: Templating settings.\n - Path: templating.metaPlacement\n Category: templating\n Kind: enum\n Description: Meta placement in list variant.\n - Path: templating.metaPrefixIcon\n Category: templating\n Kind: string\n Description: Prefix icon for meta.\n - Path: templating.statusPosition\n Category: templating\n Kind: enum\n Description: Status position in cards/tiles.\n - Path: templating.chipColorMap\n Category: templating\n Kind: object\n Description: Map value -> chip color.\n - Path: templating.chipLabelMap\n Category: templating\n Kind: object\n Description: Map value -> label.\n - Path: templating.iconColorMap\n Category: templating\n Kind: object\n Description: Map value/icon -> color.\n - Path: templating.features\n Category: templating\n Kind: array\n Description: Extra feature line entries.\n - Path: templating.features[].icon\n Category: templating\n Kind: string\n Description: Feature icon.\n - Path: templating.features[].expr\n Category: templating\n Kind: expression\n Description: Templating expression for feature label; not Json Logic.\n - Path: templating.features[].class\n Category: templating\n Kind: string\n Description: Feature CSS class.\n - Path: templating.features[].style\n Category: templating\n Kind: string\n Description: Feature inline CSS.\n - Path: templating.featuresVisible\n Category: templating\n Kind: boolean\n Description: Show features line.\n - Path: templating.featuresMode\n Category: templating\n Kind: enum\n Description: Features render mode.\n - Path: templating.skeleton\n Category: templating\n Kind: object\n Description: Skeleton loading config.\n - Path: templating.skeleton.count\n Category: templating\n Kind: number\n Description: Skeleton items count.\n - Path: actions\n Category: actions\n Kind: array\n Description: Item actions array.\n - Path: actions[]\n Category: actions\n Kind: object\n Description: Single item action entry.\n - Path: actions[].id\n Category: actions\n Kind: string\n Description: Action id.\n - Path: actions[].icon\n Category: actions\n Kind: string\n Description: Action icon.\n - Path: actions[].label\n Category: actions\n Kind: string\n Description: Action label.\n - Path: actions[].color\n Category: actions\n Kind: string\n Description: Action color.\n - Path: actions[].kind\n Category: actions\n Kind: enum\n Description: Action render kind.\n - Path: actions[].buttonVariant\n Category: actions\n Kind: enum\n Description: Action button variant.\n - Path: actions[].showIf\n Category: actions\n Kind: expression\n Description: Json Logic visibility condition for the current row.\n - Path: actions[].globalAction.[actionId]\n Category: actions\n Kind: string\n Description: Canonical global app action id (ex.: \"toast.success\" ou \"navigation.openRoute\").\n - Path: actions[].globalAction.payload\n Category: actions\n Kind: object\n Description: Structured payload for the global app action (JSON/template), including internal route payloads resolved from item context.\n - Path: actions[].globalAction.payloadExpr\n Category: actions\n Kind: expression\n Description: Advanced payload expression for the global app action when structured payload is not authored.\n - Path: actions[].emitLocal\n Category: actions\n Kind: boolean\n Description: Emit local actionClick even when globalAction is set.\n - Path: actions[].showLoading\n Category: actions\n Kind: boolean\n Description: Show loading state while a global action executes.\n - Path: actions[].placement\n Category: actions\n Kind: enum\n Description: Action placement in row layout actions or trailing slot.\n - Path: actions[].confirmation\n Category: actions\n Kind: object\n Description: Confirmation prompt before executing the action.\n - Path: actions[].confirmation.title\n Category: actions\n Kind: string\n Description: Confirmation title.\n - Path: actions[].confirmation.message\n Category: actions\n Kind: string\n Description: Confirmation message.\n - Path: actions[].confirmation.type\n Category: actions\n Kind: enum\n Description: Confirmation severity.\n - Path: rules\n Category: rules\n Kind: object\n Description: Conditional list item styling and slot override rules.\n - Path: rules.itemStyles\n Category: rules\n Kind: array\n Description: Conditional item style rules.\n - Path: rules.itemStyles[].id\n Category: rules\n Kind: string\n Description: Stable item style rule id.\n - Path: rules.itemStyles[].condition\n Category: rules\n Kind: expression\n Description: Json Logic condition in row context.\n - Path: rules.itemStyles[].class\n Category: rules\n Kind: string\n Description: CSS class applied when the rule matches.\n - Path: rules.itemStyles[].style\n Category: rules\n Kind: string\n Description: Inline style applied when the rule matches.\n - Path: rules.itemStyles[].border\n Category: rules\n Kind: string\n Description: Border style override applied when the rule matches.\n - Path: rules.itemStyles[].background\n Category: rules\n Kind: string\n Description: Background style override applied when the rule matches.\n - Path: rules.itemStyles[].effects\n Category: rules\n Kind: array\n Description: Canonical conditional effect array aligned with PraxisRuntimeConditionalEffectRule<ListItemStyleEffect>.\n - Path: rules.itemStyles[].effects[].kind\n Category: rules\n Kind: enum\n Description: Discriminator for list item style effects.\n - Path: rules.slotOverrides\n Category: rules\n Kind: array\n Description: Conditional slot template override rules.\n - Path: rules.slotOverrides[].id\n Category: rules\n Kind: string\n Description: Stable slot override rule id.\n - Path: rules.slotOverrides[].slot\n Category: rules\n Kind: enum\n Description: Templating slot affected by the override.\n - Path: rules.slotOverrides[].condition\n Category: rules\n Kind: expression\n Description: Json Logic condition in row context.\n - Path: rules.slotOverrides[].template\n Category: rules\n Kind: object\n Description: Template override applied when the rule matches.\n - Path: rules.slotOverrides[].class\n Category: rules\n Kind: string\n Description: CSS class appended when the rule matches.\n - Path: rules.slotOverrides[].style\n Category: rules\n Kind: string\n Description: Inline style appended when the rule matches.\n - Path: rules.slotOverrides[].hide\n Category: rules\n Kind: boolean\n Description: Hide the slot when the rule matches.\n - Path: rules.slotOverrides[].effects\n Category: rules\n Kind: array\n Description: Canonical conditional effect array aligned with PraxisRuntimeConditionalEffectRule<ListSlotOverrideEffect>.\n - Path: rules.slotOverrides[].effects[].kind\n Category: rules\n Kind: enum\n Description: Discriminator for list slot override effects.\n - Path: expansion\n Category: expansion\n Kind: object\n Description: Inline expansion sections and remote detail contract.\n - Path: expansion.sections\n Category: expansion\n Kind: array\n Description: Expansion detail sections.\n - Path: expansion.sections[].id\n Category: expansion\n Kind: string\n Description: Stable expansion section id.\n - Path: expansion.sections[].title\n Category: expansion\n Kind: string\n Description: Expansion section title.\n - Path: expansion.sections[].type\n Category: expansion\n Kind: enum\n Description: Expansion section renderer type.\n - Path: expansion.sections[].itemsExpr\n Category: expansion\n Kind: expression\n Description: Expression used to resolve section items from the row.\n - Path: expansion.sections[].document\n Category: expansion\n Kind: object\n Description: Canonical RichContentDocument rendered when type=rich-content.\n - Path: expansion.sections[].documentExpr\n Category: expansion\n Kind: expression\n Description: Expression resolving to a RichContentDocument for type=rich-content.\n - Path: expansion.sections[].emptyLabel\n Category: expansion\n Kind: string\n Description: Empty label for an expansion section.\n - Path: expansion.sections[].metadata\n Category: expansion\n Kind: object\n Description: Metadata rendering options for metadata expansion sections.\n - Path: expansion.sections[].component\n Category: expansion\n Kind: object\n Description: Runtime component rendering options for component expansion sections.\n - Path: expansion.sections[].class\n Category: expansion\n Kind: string\n Description: CSS class for an expansion section.\n - Path: expansion.sections[].style\n Category: expansion\n Kind: string\n Description: Inline style for an expansion section.\n - Path: expansion.sections[].showIf\n Category: expansion\n Kind: expression\n Description: Json Logic visibility condition for an expansion section.\n - Path: expansion.dataSource\n Category: expansion\n Kind: object\n Description: Expansion detail data source.\n - Path: expansion.dataSource.mode\n Category: expansion\n Kind: enum\n Description: Expansion data source mode.\n - Path: expansion.dataSource.resource\n Category: expansion\n Kind: object\n Description: Canonical resource descriptor for expansion details.\n - Path: expansion.dataSource.resource.kind\n Category: expansion\n Kind: string\n Description: Canonical expansion resource kind.\n - Path: expansion.dataSource.resource.id\n Category: expansion\n Kind: string\n Description: Canonical expansion resource id.\n - Path: expansion.dataSource.resource.version\n Category: expansion\n Kind: string\n Description: Canonical expansion resource version.\n - Path: expansion.dataSource.resourcePath\n Category: expansion\n Kind: object\n Description: Dynamic resource path descriptor for expansion details.\n - Path: expansion.dataSource.resourcePath.path\n Category: expansion\n Kind: string\n Description: Expression-backed remote path for expansion details.\n - Path: expansion.dataSource.resourcePath.method\n Category: expansion\n Kind: enum\n Description: HTTP method for dynamic expansion resource path.\n - Path: expansion.dataSource.resourcePath.paramsMap\n Category: expansion\n Kind: object\n Description: Parameter map for dynamic expansion resource path.\n - Path: expansion.dataSource.resourceAllowList\n Category: expansion\n Kind: array\n Description: Allowlist for dynamic expansion resource paths.\n - Path: expansion.dataSource.fallbackMode\n Category: expansion\n Kind: enum\n Description: Fallback mode for expansion detail loading.\n - Path: expansion.dataSource.cache\n Category: expansion\n Kind: object\n Description: Expansion detail cache configuration.\n - Path: expansion.dataSource.cache.enabled\n Category: expansion\n Kind: boolean\n Description: Enable expansion detail cache.\n - Path: expansion.dataSource.cancelOnCollapse\n Category: expansion\n Kind: boolean\n Description: Cancel expansion detail loading when a row collapses.\n - Path: expansion.schemaContract\n Category: expansion\n Kind: object\n Description: Fail-closed schema contract for remote expansion details.\n - Path: expansion.schemaContract.kind\n Category: expansion\n Kind: string\n Description: Expansion schema contract kind.\n - Path: expansion.schemaContract.version\n Category: expansion\n Kind: string\n Description: Expansion schema contract version.\n - Path: expansion.schemaContract.allowedNodes\n Category: expansion\n Kind: array\n Description: Allowed remote expansion node types.\n - Path: expansion.schemaContract.maxSections\n Category: expansion\n Kind: number\n Description: Maximum number of remote expansion sections.\n - Path: expansion.schemaContract.maxItemsPerSection\n Category: expansion\n Kind: number\n Description: Maximum number of items per remote expansion section.\n - Path: expansion.schemaContract.requireSectionIds\n Category: expansion\n Kind: boolean\n Description: Require explicit ids for remote expansion sections.\n - Path: expansion.rendering\n Category: expansion\n Kind: object\n Description: Expansion shell rendering configuration.\n - Path: expansion.rendering.shell\n Category: expansion\n Kind: enum\n Description: Expansion shell attachment mode.\n - Path: expansion.rendering.columns\n Category: expansion\n Kind: enum\n Description: Expansion detail column count.\n - Path: expansion.rendering.gap\n Category: expansion\n Kind: string\n Description: Gap between expansion sections.\n - Path: expansion.rendering.padding\n Category: expansion\n Kind: string\n Description: Padding inside the expansion shell.\n - Path: expansion.rendering.class\n Category: expansion\n Kind: string\n Description: CSS class for the expansion shell.\n - Path: expansion.rendering.style\n Category: expansion\n Kind: string\n Description: Inline style for the expansion shell.\n - Path: expansion.rendering.loadingTemplate\n Category: expansion\n Kind: object\n Description: Template rendered while expansion detail loads.\n - Path: expansion.rendering.errorTemplate\n Category: expansion\n Kind: object\n Description: Template rendered when expansion detail loading fails.\n - Path: ui\n Category: ui\n Kind: object\n Description: Lightweight toolbar UI.\n - Path: ui.showSearch\n Category: ui\n Kind: boolean\n Description: Show search input.\n - Path: ui.searchField\n Category: ui\n Kind: string\n Description: Search field.\n - Path: ui.searchPlaceholder\n Category: ui\n Kind: string\n Description: Search placeholder.\n - Path: ui.showSort\n Category: ui\n Kind: boolean\n Description: Show sort selector.\n - Path: ui.sortOptions\n Category: ui\n Kind: array\n Description: Sort options (string or {label,value}).\n - Path: ui.sortOptions[].label\n Category: ui\n Kind: string\n Description: Sort option label.\n - Path: ui.sortOptions[].value\n Category: ui\n Kind: string\n Description: Sort option value.\n - Path: ui.showRange\n Category: ui\n Kind: boolean\n Description: Show range in footer.\n - Path: i18n\n Category: i18n\n Kind: object\n Description: i18n map.\n - Path: i18n.locale\n Category: i18n\n Kind: string\n Description: Locale (ex.: pt-BR).\n - Path: i18n.currency\n Category: i18n\n Kind: string\n Description: Currency code (ex.: BRL).\n - Path: i18n.localization\n Category: i18n\n Kind: object\n Description: Core localization defaults reused by list template pipes.\n - Path: a11y\n Category: a11y\n Kind: object\n Description: Accessibility settings.\n - Path: a11y.ariaLabel\n Category: a11y\n Kind: string\n Description: aria-label for container.\n - Path: a11y.ariaLabelledBy\n Category: a11y\n Kind: string\n Description: aria-labelledby for container.\n - Path: a11y.highContrast\n Category: a11y\n Kind: boolean\n Description: High contrast mode.\n - Path: a11y.reduceMotion\n Category: a11y\n Kind: boolean\n Description: Reduce motion.\n - Path: events\n Category: events\n Kind: object\n Description: Event mappings.\n - Path: events.itemClick\n Category: events\n Kind: string\n Description: Mapped itemClick event name.\n - Path: events.actionClick\n Category: events\n Kind: string\n Description: Mapped actionClick event name.\n - Path: events.selectionChange\n Category: events\n Kind: string\n Description: Mapped selectionChange event name.\n - Path: events.exportAction\n Category: events\n Kind: string\n Description: Mapped exportAction event name.\n - Path: events.loaded\n Category: events\n Kind: string\n Description: Mapped loaded event name.\nCapability Notes:\n - Template expressions support only ${item.path} and simple pipes: bool/date/map/number.\n - Taxonomia editorial: templating.*.expr continua no dominio de template; conditions booleanas de acoes, rules e expansion usam Json Logic canonico.\n - actions[].showIf uses Json Logic, for example {\"==\":[{\"var\":\"row.status\"},\"done\"]}.\n - Arrays should be merged by id/expr to avoid replacing existing items.\n - dataSource.data overrides resourcePath when provided.\n - layout.variant supports list, cards and tiles.\n - Colors accept theme tokens (primary/accent/warn), M3 tokens (var(--md-sys-color-*)), or custom CSS colors.\n",
6548
- "sourcePointer": "praxis-ui-angular/projects/praxis-list/src/lib/ai/list-ai-capabilities.ts",
6679
+ "sourcePointer": "projects/praxis-list/src/lib/ai/list-ai-capabilities.ts",
6549
6680
  "contentHash": "651c497f94e271b7c037645bd306b9b8a1a9c8dffb59bde6b447ca7f52015bf5",
6550
6681
  "sourceKind": "component_definition",
6551
6682
  "sourceId": "praxis-list",
@@ -6555,7 +6686,7 @@
6555
6686
  "chunkIndex": 2,
6556
6687
  "chunkKind": "authoring_manifest",
6557
6688
  "content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-list\",\n \"ownerPackage\": \"@praxisui/list\",\n \"configSchemaId\": \"PraxisListConfig\",\n \"manifestVersion\": \"1.1.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"config\",\n \"type\": \"PraxisListConfig\",\n \"description\": \"Canonical list configuration.\"\n },\n {\n \"name\": \"listId\",\n \"type\": \"string\",\n \"description\": \"Stable list id used by persistence.\"\n },\n {\n \"name\": \"enableCustomization\",\n \"type\": \"boolean\",\n \"description\": \"Enables runtime authoring surfaces.\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"itemTemplate\",\n \"resolver\": \"list-template-slot\",\n \"description\": \"Template slot under templating.*.\"\n },\n {\n \"kind\": \"primaryText\",\n \"resolver\": \"templating-primary\",\n \"description\": \"Primary text template.\"\n },\n {\n \"kind\": \"secondaryText\",\n \"resolver\": \"templating-secondary\",\n \"description\": \"Secondary text template.\"\n },\n {\n \"kind\": \"avatar\",\n \"resolver\": \"templating-leading\",\n \"description\": \"Leading/avatar template.\"\n },\n {\n \"kind\": \"badge\",\n \"resolver\": \"templating-trailing-chip\",\n \"description\": \"Trailing badge/status template.\"\n },\n {\n \"kind\": \"itemAction\",\n \"resolver\": \"actions-by-id\",\n \"description\": \"Item action resolved by actions[].id.\"\n },\n {\n \"kind\": \"emptyState\",\n \"resolver\": \"templating-empty-state\",\n \"description\": \"Empty state template.\"\n },\n {\n \"kind\": \"selection\",\n \"resolver\": \"selection-config\",\n \"description\": \"Selection configuration.\"\n },\n {\n \"kind\": \"layout\",\n \"resolver\": \"layout-config\",\n \"description\": \"Layout configuration.\"\n },\n {\n \"kind\": \"rowLayout\",\n \"resolver\": \"row-layout-config\",\n \"description\": \"Row layout grid/flex columns and placement slots.\"\n },\n {\n \"kind\": \"dataBinding\",\n \"resolver\": \"data-source-config\",\n \"description\": \"Local or remote data source binding.\"\n },\n {\n \"kind\": \"interaction\",\n \"resolver\": \"interaction-config\",\n \"description\": \"Expandable row interaction configuration.\"\n },\n {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"description\": \"Inline expansion sections, data source and rendering configuration.\"\n },\n {\n \"kind\": \"rules\",\n \"resolver\": \"rules-config\",\n \"description\": \"Item style rules and slot override rules.\"\n },\n {\n \"kind\": \"meta\",\n \"resolver\": \"list-root-config\",\n \"description\": \"Root list metadata such as id.\"\n },\n {\n \"kind\": \"skin\",\n \"resolver\": \"skin-config\",\n \"description\": \"Visual skin configuration.\"\n },\n {\n \"kind\": \"toolbarUi\",\n \"resolver\": \"ui-config\",\n \"description\": \"Search, sort and footer UI configuration.\"\n },\n {\n \"kind\": \"export\",\n \"resolver\": \"export-config\",\n \"description\": \"Collection export configuration.\"\n },\n {\n \"kind\": \"localization\",\n \"resolver\": \"i18n-config\",\n \"description\": \"Locale and currency configuration.\"\n },\n {\n \"kind\": \"accessibility\",\n \"resolver\": \"a11y-config\",\n \"description\": \"Accessibility configuration.\"\n },\n {\n \"kind\": \"eventMapping\",\n \"resolver\": \"events-config\",\n \"description\": \"Declarative event name mappings.\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"list.id.set\",\n \"title\": \"Set list id\",\n \"scope\": \"meta\",\n \"targetKind\": \"meta\",\n \"target\": {\n \"kind\": \"meta\",\n \"resolver\": \"list-root-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"id\"\n }\n ],\n \"validators\": [\n \"list-id-stable\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"id\"\n ],\n \"submissionImpact\": \"config-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"item.primaryText.set\",\n \"title\": \"Set primary item text\",\n \"scope\": \"itemTemplate\",\n \"targetKind\": \"primaryText\",\n \"target\": {\n \"kind\": \"primaryText\",\n \"resolver\": \"templating-primary\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"expr\"\n ],\n \"properties\": {\n \"type\": {\n \"enum\": [\n \"text\",\n \"icon\",\n \"image\",\n \"chip\",\n \"rating\",\n \"currency\",\n \"date\",\n \"html\",\n \"slot\",\n \"metric\",\n \"compose\",\n \"component\"\n ]\n },\n \"expr\": {\n \"type\": \"string\"\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"filled\",\n \"outlined\"\n ]\n },\n \"imageAlt\": {\n \"type\": \"string\"\n },\n \"props\": {\n \"type\": \"object\",\n \"properties\": {\n \"rating\": {\n \"type\": \"object\",\n \"properties\": {\n \"max\": {\n \"type\": \"number\"\n },\n \"size\": {\n \"type\": \"number\"\n },\n \"color\": {\n \"type\": \"string\"\n }\n }\n },\n \"metric\": {\n \"type\": \"object\",\n \"properties\": {\n \"label\": {\n \"type\": \"string\"\n },\n \"valueExpr\": {\n \"type\": \"string\"\n },\n \"caption\": {\n \"type\": \"string\"\n },\n \"subcaption\": {\n \"type\": \"string\"\n },\n \"captionPosition\": {\n \"enum\": [\n \"below-value\",\n \"below-progress\"\n ]\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"iconExpr\": {\n \"type\": \"string\"\n },\n \"tone\": {\n \"type\": \"string\"\n },\n \"toneExpr\": {\n \"type\": \"string\"\n },\n \"layout\": {\n \"enum\": [\n \"value-only\",\n \"value+caption\",\n \"icon+value+caption\",\n \"stacked-center\"\n ]\n },\n \"align\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\"\n ]\n },\n \"progress\": {\n \"type\": \"object\",\n \"properties\": {\n \"valueExpr\": {\n \"type\": \"string\"\n },\n \"max\": {\n \"type\": \"number\"\n },\n \"mode\": {\n \"enum\": [\n \"determinate\",\n \"indeterminate\"\n ]\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"colorExpr\": {\n \"type\": \"string\"\n },\n \"trackColor\": {\n \"type\": \"string\"\n }\n }\n },\n \"valueClass\": {\n \"type\": \"string\"\n },\n \"valueStyle\": {\n \"type\": \"string\"\n },\n \"showBar\": {\n \"type\": \"boolean\"\n },\n \"barValueExpr\": {\n \"type\": \"string\"\n },\n \"barColor\": {\n \"type\": \"string\"\n },\n \"barVariant\": {\n \"enum\": [\n \"determinate\",\n \"indeterminate\"\n ]\n },\n \"legendExpr\": {\n \"type\": \"string\"\n },\n \"iconPosition\": {\n \"enum\": [\n \"left\",\n \"right\",\n \"top\"\n ]\n },\n \"iconColorExpr\": {\n \"type\": \"string\"\n }\n }\n },\n \"compose\": {\n \"type\": \"object\",\n \"properties\": {\n \"items\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"nodes\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"direction\": {\n \"enum\": [\n \"row\",\n \"column\"\n ]\n },\n \"orientation\": {\n \"enum\": [\n \"horizontal\",\n \"vertical\"\n ]\n },\n \"align\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\"\n ]\n },\n \"gap\": {\n \"type\": \"string\"\n },\n \"wrap\": {\n \"type\": \"boolean\"\n },\n \"separator\": {\n \"type\": \"string\"\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n }\n }\n },\n \"component\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"inputs\": {\n \"type\": \"object\"\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"badge\": {\n \"type\": \"object\",\n \"properties\": {\n \"expr\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"filled\",\n \"outlined\"\n ]\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"templating.primary\"\n }\n ],\n \"validators\": [\n \"bound-field-exists\",\n \"template-expression-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"templating.primary\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"item.secondaryText.set\",\n \"title\": \"Set secondary item text\",\n \"scope\": \"itemTemplate\",\n \"targetKind\": \"secondaryText\",\n \"target\": {\n \"kind\": \"secondaryText\",\n \"resolver\": \"templating-secondary\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"templating.secondary\"\n }\n ],\n \"validators\": [\n \"bound-field-exists\",\n \"template-expression-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"templating.secondary\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"item.avatar.configure\",\n \"title\": \"Configure item avatar\",\n \"scope\": \"itemTemplate\",\n \"targetKind\": \"avatar\",\n \"target\": {\n \"kind\": \"avatar\",\n \"resolver\": \"templating-leading\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"required\": [\n \"type\"\n ]\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"templating.leading\"\n }\n ],\n \"validators\": [\n \"bound-field-exists\",\n \"template-expression-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"templating.leading\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"item.badge.configure\",\n \"title\": \"Configure item badge\",\n \"scope\": \"itemTemplate\",\n \"targetKind\": \"badge\",\n \"target\": {\n \"kind\": \"badge\",\n \"resolver\": \"templating-trailing-chip\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"expr\"\n ],\n \"properties\": {\n \"expr\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"filled\",\n \"outlined\"\n ]\n },\n \"statusPosition\": {\n \"enum\": [\n \"inline\",\n \"top-right\"\n ]\n },\n \"labelMap\": {\n \"type\": \"object\"\n },\n \"colorMap\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"templating.trailing\"\n },\n {\n \"kind\": \"set-value\",\n \"path\": \"templating.statusPosition\"\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"templating.chipLabelMap\"\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"templating.chipColorMap\"\n }\n ],\n \"validators\": [\n \"bound-field-exists\",\n \"template-expression-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"templating.trailing\",\n \"templating.statusPosition\",\n \"templating.chipLabelMap\",\n \"templating.chipColorMap\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"template.slot.set\",\n \"title\": \"Set any list template slot\",\n \"scope\": \"templating\",\n \"targetKind\": \"itemTemplate\",\n \"target\": {\n \"kind\": \"itemTemplate\",\n \"resolver\": \"list-template-slot\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"slot\",\n \"template\"\n ],\n \"properties\": {\n \"slot\": {\n \"enum\": [\n \"leading\",\n \"primary\",\n \"secondary\",\n \"meta\",\n \"trailing\",\n \"identity\",\n \"balance\",\n \"limit\",\n \"risk\",\n \"alerts\",\n \"owner\",\n \"sectionHeader\",\n \"emptyState\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"list-template-slot-set\",\n \"handlerContract\": {\n \"reads\": [\n \"templating\"\n ],\n \"writes\": [\n \"templating.leading\",\n \"templating.primary\",\n \"templating.secondary\",\n \"templating.meta\",\n \"templating.trailing\",\n \"templating.identity\",\n \"templating.balance\",\n \"templating.limit\",\n \"templating.risk\",\n \"templating.alerts\",\n \"templating.owner\",\n \"templating.sectionHeader\",\n \"templating.emptyState\"\n ],\n \"identityKeys\": [\n \"slot\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"slot\",\n \"template\"\n ],\n \"properties\": {\n \"slot\": {}\n }\n },\n \"failureModes\": [\n \"unsupported-template-slot\",\n \"invalid-template-expression\",\n \"ambiguous-template-slot\"\n ],\n \"description\": \"Writes the requested template into one supported templating slot; slot is the stable identity, not array position.\"\n }\n }\n ],\n \"validators\": [\n \"template-slot-supported\",\n \"bound-field-exists\",\n \"template-expression-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"templating.leading\",\n \"templating.primary\",\n \"templating.secondary\",\n \"templating.meta\",\n \"templating.trailing\",\n \"templating.identity\",\n \"templating.balance\",\n \"templating.limit\",\n \"templating.risk\",\n \"templating.alerts\",\n \"templating.owner\",\n \"templating.sectionHeader\",\n \"templating.emptyState\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"item.action.add\",\n \"title\": \"Add item action\",\n \"scope\": \"itemAction\",\n \"targetKind\": \"itemAction\",\n \"target\": {\n \"kind\": \"itemAction\",\n \"resolver\": \"actions-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"label\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"kind\": {\n \"enum\": [\n \"icon\",\n \"button\"\n ]\n },\n \"buttonVariant\": {\n \"enum\": [\n \"stroked\",\n \"raised\",\n \"flat\"\n ]\n },\n \"showIf\": {\n \"type\": \"object\"\n },\n \"globalAction\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"actionId\": {\n \"type\": \"string\"\n },\n \"payload\": {\n \"type\": \"object\"\n },\n \"payloadExpr\": {\n \"type\": \"string\"\n },\n \"meta\": {\n \"type\": \"object\"\n }\n }\n },\n \"emitLocal\": {\n \"type\": \"boolean\"\n },\n \"showLoading\": {\n \"type\": \"boolean\"\n },\n \"placement\": {\n \"enum\": [\n \"actions\",\n \"trailing\"\n ]\n },\n \"confirmation\": {\n \"type\": \"object\",\n \"properties\": {\n \"title\": {\n \"type\": \"string\"\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\n \"danger\",\n \"warning\",\n \"info\"\n ]\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"actions[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"action-id-stable\",\n \"json-logic-valid\",\n \"global-action-ref-valid\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"actions[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"item.action.update\",\n \"title\": \"Update item action\",\n \"scope\": \"itemAction\",\n \"targetKind\": \"itemAction\",\n \"target\": {\n \"kind\": \"itemAction\",\n \"resolver\": \"actions-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"required\": [\n \"id\"\n ]\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"actions[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"action-exists\",\n \"action-id-stable\",\n \"json-logic-valid\",\n \"global-action-ref-valid\",\n \"declared-only-runtime-warning\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"actions\",\n \"actions[].id\",\n \"actions[].icon\",\n \"actions[].label\",\n \"actions[].color\",\n \"actions[].kind\",\n \"actions[].buttonVariant\",\n \"actions[].showIf\",\n \"actions[].globalAction.[actionId]\",\n \"actions[].globalAction.payload\",\n \"actions[].globalAction.payloadExpr\",\n \"actions[].emitLocal\",\n \"actions[].showLoading\",\n \"actions[].placement\",\n \"actions[].confirmation\",\n \"actions[].confirmation.title\",\n \"actions[].confirmation.message\",\n \"actions[].confirmation.type\"\n ],\n \"submissionImpact\": \"config-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"item.action.remove\",\n \"title\": \"Remove item action\",\n \"scope\": \"itemAction\",\n \"targetKind\": \"itemAction\",\n \"target\": {\n \"kind\": \"itemAction\",\n \"resolver\": \"actions-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"remove-by-key\",\n \"path\": \"actions[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"action-exists\",\n \"destructive-removal-confirmation\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"actions[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"selection.mode.set\",\n \"title\": \"Set selection mode\",\n \"scope\": \"selection\",\n \"targetKind\": \"selection\",\n \"target\": {\n \"kind\": \"selection\",\n \"resolver\": \"selection-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"mode\"\n ],\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"none\",\n \"single\",\n \"multiple\"\n ]\n },\n \"compareBy\": {\n \"type\": \"string\"\n },\n \"return\": {\n \"enum\": [\n \"value\",\n \"item\",\n \"id\"\n ]\n },\n \"formControlName\": {\n \"type\": \"string\"\n },\n \"formControlPath\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"selection\"\n }\n ],\n \"validators\": [\n \"selection-mode-supported\",\n \"bound-field-exists\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"selection\",\n \"selection.mode\",\n \"selection.formControlName\",\n \"selection.formControlPath\",\n \"selection.compareBy\",\n \"selection.return\"\n ],\n \"submissionImpact\": \"affects-submission\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"interaction.expansion.configure\",\n \"title\": \"Configure expandable row interaction\",\n \"scope\": \"interaction\",\n \"targetKind\": \"interaction\",\n \"target\": {\n \"kind\": \"interaction\",\n \"resolver\": \"interaction-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"expandable\": {\n \"type\": \"boolean\"\n },\n \"expandTrigger\": {\n \"enum\": [\n \"row\",\n \"icon\",\n \"row+icon\"\n ]\n },\n \"expandMode\": {\n \"enum\": [\n \"single\",\n \"multiple\"\n ]\n },\n \"expandPlacement\": {\n \"enum\": [\n \"expand\",\n \"trailing\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"interaction\"\n }\n ],\n \"validators\": [\n \"interaction-value-supported\",\n \"row-layout-placement-reachable\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"interaction\",\n \"interaction.expandable\",\n \"interaction.expandTrigger\",\n \"interaction.expandMode\",\n \"interaction.expandPlacement\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"layout.density.set\",\n \"title\": \"Set list density\",\n \"scope\": \"layout\",\n \"targetKind\": \"layout\",\n \"target\": {\n \"kind\": \"layout\",\n \"resolver\": \"layout-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"density\": {\n \"enum\": [\n \"default\",\n \"comfortable\",\n \"compact\"\n ]\n },\n \"variant\": {\n \"enum\": [\n \"list\",\n \"cards\",\n \"tiles\"\n ]\n },\n \"itemSpacing\": {\n \"enum\": [\n \"none\",\n \"tight\",\n \"default\",\n \"relaxed\"\n ]\n },\n \"lines\": {\n \"enum\": [\n 1,\n 2,\n 3\n ]\n },\n \"dividers\": {\n \"enum\": [\n \"none\",\n \"between\",\n \"all\"\n ]\n },\n \"model\": {\n \"enum\": [\n \"standard\",\n \"media\",\n \"hotel\"\n ]\n },\n \"groupBy\": {\n \"type\": \"string\"\n },\n \"stickySectionHeader\": {\n \"type\": \"boolean\"\n },\n \"virtualScroll\": {\n \"type\": \"boolean\"\n },\n \"pageSize\": {\n \"type\": \"number\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"layout\"\n }\n ],\n \"validators\": [\n \"layout-value-supported\",\n \"bound-field-exists\",\n \"declared-only-runtime-warning\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"layout\",\n \"layout.variant\",\n \"layout.density\",\n \"layout.itemSpacing\",\n \"layout.lines\",\n \"layout.dividers\",\n \"layout.model\",\n \"layout.groupBy\",\n \"layout.stickySectionHeader\",\n \"layout.virtualScroll\",\n \"layout.pageSize\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"layout.rowLayout.configure\",\n \"title\": \"Configure list row layout\",\n \"scope\": \"rowLayout\",\n \"targetKind\": \"rowLayout\",\n \"target\": {\n \"kind\": \"rowLayout\",\n \"resolver\": \"row-layout-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"enum\": [\n \"grid\",\n \"flex\"\n ]\n },\n \"columns\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"slot\"\n ],\n \"properties\": {\n \"slot\": {\n \"enum\": [\n null,\n \"actions\",\n \"expand\"\n ]\n },\n \"width\": {\n \"type\": \"string\"\n },\n \"minWidth\": {\n \"type\": \"string\"\n },\n \"maxWidth\": {\n \"type\": \"string\"\n },\n \"align\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\"\n ]\n },\n \"justify\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\",\n \"stretch\"\n ]\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"gap\": {\n \"type\": \"string\"\n },\n \"align\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\",\n \"stretch\"\n ]\n },\n \"itemAlignY\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\",\n \"stretch\"\n ]\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"layout.rowLayout\"\n }\n ],\n \"validators\": [\n \"row-layout-supported\",\n \"row-layout-placement-reachable\",\n \"style-value-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"layout.rowLayout\",\n \"layout.rowLayout.type\",\n \"layout.rowLayout.columns\",\n \"layout.rowLayout.columns[].slot\",\n \"layout.rowLayout.columns[].width\",\n \"layout.rowLayout.columns[].minWidth\",\n \"layout.rowLayout.columns[].maxWidth\",\n \"layout.rowLayout.columns[].align\",\n \"layout.rowLayout.columns[].justify\",\n \"layout.rowLayout.columns[].class\",\n \"layout.rowLayout.columns[].style\",\n \"layout.rowLayout.gap\",\n \"layout.rowLayout.align\",\n \"layout.rowLayout.itemAlignY\",\n \"layout.rowLayout.class\",\n \"layout.rowLayout.style\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"skin.configure\",\n \"title\": \"Configure list skin\",\n \"scope\": \"skin\",\n \"targetKind\": \"skin\",\n \"target\": {\n \"kind\": \"skin\",\n \"resolver\": \"skin-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"enum\": [\n \"pill-soft\",\n \"gradient-tile\",\n \"glass\",\n \"elevated\",\n \"outline\",\n \"flat\",\n \"neumorphism\",\n \"custom\"\n ]\n },\n \"gradient\": {\n \"type\": \"object\",\n \"properties\": {\n \"from\": {\n \"type\": \"string\"\n },\n \"to\": {\n \"type\": \"string\"\n },\n \"angle\": {\n \"type\": \"number\"\n }\n }\n },\n \"radius\": {\n \"type\": \"string\"\n },\n \"shadow\": {\n \"type\": \"string\"\n },\n \"border\": {\n \"type\": \"string\"\n },\n \"backdropBlur\": {\n \"type\": \"string\"\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"inlineStyle\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"skin\"\n }\n ],\n \"validators\": [\n \"skin-value-supported\",\n \"style-value-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"skin\",\n \"skin.type\",\n \"skin.gradient\",\n \"skin.gradient.from\",\n \"skin.gradient.to\",\n \"skin.gradient.angle\",\n \"skin.radius\",\n \"skin.shadow\",\n \"skin.border\",\n \"skin.backdropBlur\",\n \"skin.class\",\n \"skin.inlineStyle\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"templating.display.configure\",\n \"title\": \"Configure list template display options\",\n \"scope\": \"templating\",\n \"targetKind\": \"itemTemplate\",\n \"target\": {\n \"kind\": \"itemTemplate\",\n \"resolver\": \"templating-display-options\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"metaPlacement\": {\n \"enum\": [\n \"side\",\n \"line\"\n ]\n },\n \"metaPrefixIcon\": {\n \"type\": \"string\"\n },\n \"statusPosition\": {\n \"enum\": [\n \"inline\",\n \"top-right\"\n ]\n },\n \"chipColorMap\": {\n \"type\": \"object\"\n },\n \"chipLabelMap\": {\n \"type\": \"object\"\n },\n \"iconColorMap\": {\n \"type\": \"object\"\n },\n \"featuresVisible\": {\n \"type\": \"boolean\"\n },\n \"featuresMode\": {\n \"enum\": [\n \"icons+labels\",\n \"icons-only\",\n \"labels-only\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"templating\"\n }\n ],\n \"validators\": [\n \"template-display-supported\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"templating\",\n \"templating.metaPlacement\",\n \"templating.metaPrefixIcon\",\n \"templating.statusPosition\",\n \"templating.chipColorMap\",\n \"templating.chipLabelMap\",\n \"templating.iconColorMap\",\n \"templating.featuresVisible\",\n \"templating.featuresMode\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"templating.features.set\",\n \"title\": \"Set list feature line\",\n \"scope\": \"templating\",\n \"targetKind\": \"itemTemplate\",\n \"target\": {\n \"kind\": \"itemTemplate\",\n \"resolver\": \"templating-features\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"features\"\n ],\n \"properties\": {\n \"features\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"expr\"\n ],\n \"properties\": {\n \"icon\": {\n \"type\": \"string\"\n },\n \"expr\": {\n \"type\": \"string\"\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"templating.features\"\n }\n ],\n \"validators\": [\n \"bound-field-exists\",\n \"template-expression-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"templating.features\",\n \"templating.features[].icon\",\n \"templating.features[].expr\",\n \"templating.features[].class\",\n \"templating.features[].style\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"templating.skeleton.configure\",\n \"title\": \"Configure list skeleton\",\n \"scope\": \"templating\",\n \"targetKind\": \"itemTemplate\",\n \"target\": {\n \"kind\": \"itemTemplate\",\n \"resolver\": \"templating-skeleton\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"count\"\n ],\n \"properties\": {\n \"count\": {\n \"type\": \"number\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"templating.skeleton\"\n }\n ],\n \"validators\": [\n \"skeleton-value-supported\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"templating.skeleton\",\n \"templating.skeleton.count\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"rules.itemStyle.upsert\",\n \"title\": \"Upsert item style rule\",\n \"scope\": \"rules\",\n \"targetKind\": \"rules\",\n \"target\": {\n \"kind\": \"rules\",\n \"resolver\": \"rules-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"condition\": {\n \"type\": \"object\"\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n },\n \"border\": {\n \"type\": \"string\"\n },\n \"background\": {\n \"type\": \"string\"\n },\n \"effects\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"item-style\"\n ]\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n },\n \"border\": {\n \"type\": \"string\"\n },\n \"background\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"rules.itemStyles[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"rule-id-stable\",\n \"json-logic-valid\",\n \"style-value-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"rules\",\n \"rules.itemStyles\",\n \"rules.itemStyles[].id\",\n \"rules.itemStyles[].condition\",\n \"rules.itemStyles[].class\",\n \"rules.itemStyles[].style\",\n \"rules.itemStyles[].border\",\n \"rules.itemStyles[].background\",\n \"rules.itemStyles[].effects\",\n \"rules.itemStyles[].effects[].kind\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"rules.slotOverride.upsert\",\n \"title\": \"Upsert slot override rule\",\n \"scope\": \"rules\",\n \"targetKind\": \"rules\",\n \"target\": {\n \"kind\": \"rules\",\n \"resolver\": \"rules-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"slot\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"slot\": {},\n \"condition\": {\n \"type\": \"object\"\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n },\n \"hide\": {\n \"type\": \"boolean\"\n },\n \"effects\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"slot-override\"\n ]\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n },\n \"hide\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"rules.slotOverrides[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"rule-id-stable\",\n \"template-slot-supported\",\n \"json-logic-valid\",\n \"template-expression-safe\",\n \"style-value-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"rules\",\n \"rules.slotOverrides\",\n \"rules.slotOverrides[].id\",\n \"rules.slotOverrides[].slot\",\n \"rules.slotOverrides[].condition\",\n \"rules.slotOverrides[].template\",\n \"rules.slotOverrides[].class\",\n \"rules.slotOverrides[].style\",\n \"rules.slotOverrides[].hide\",\n \"rules.slotOverrides[].effects\",\n \"rules.slotOverrides[].effects[].kind\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"emptyState.set\",\n \"title\": \"Set empty state\",\n \"scope\": \"itemTemplate\",\n \"targetKind\": \"emptyState\",\n \"target\": {\n \"kind\": \"emptyState\",\n \"resolver\": \"templating-empty-state\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"templating.emptyState\"\n }\n ],\n \"validators\": [\n \"template-expression-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"templating.emptyState\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"expansion.configure\",\n \"title\": \"Configure list expansion\",\n \"scope\": \"expansion\",\n \"targetKind\": \"expansion\",\n \"target\": {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"sections\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"type\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\n \"info-list\",\n \"chip-list\",\n \"timeline\",\n \"key-value\",\n \"metadata\",\n \"component\",\n \"rich-content\"\n ]\n },\n \"itemsExpr\": {\n \"type\": \"string\"\n },\n \"document\": {\n \"type\": \"object\"\n },\n \"documentExpr\": {\n \"type\": \"string\"\n },\n \"emptyLabel\": {\n \"type\": \"string\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"properties\": {\n \"orientation\": {\n \"enum\": [\n \"horizontal\",\n \"vertical\"\n ]\n },\n \"columns\": {\n \"enum\": [\n 1,\n 2,\n 3\n ]\n },\n \"gap\": {\n \"type\": \"string\"\n },\n \"keyClass\": {\n \"type\": \"string\"\n },\n \"valueClass\": {\n \"type\": \"string\"\n },\n \"keyStyle\": {\n \"type\": \"string\"\n },\n \"valueStyle\": {\n \"type\": \"string\"\n }\n }\n },\n \"component\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"inputs\": {\n \"type\": \"object\"\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n }\n }\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n },\n \"showIf\": {\n \"type\": \"object\"\n }\n }\n }\n },\n \"dataSource\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"inline\",\n \"resource\",\n \"resourcePath\"\n ]\n },\n \"resource\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\"\n },\n \"id\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\"\n }\n }\n },\n \"resourcePath\": {\n \"type\": \"object\",\n \"properties\": {\n \"path\": {\n \"type\": \"string\"\n },\n \"method\": {\n \"enum\": [\n \"GET\",\n \"POST\"\n ]\n },\n \"paramsMap\": {\n \"type\": \"object\"\n }\n }\n },\n \"resourceAllowList\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"fallbackMode\": {\n \"enum\": [\n \"none\",\n \"inline\",\n \"resource\"\n ]\n },\n \"cache\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"cancelOnCollapse\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"schemaContract\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"praxis.detail.schema\"\n ]\n },\n \"version\": {\n \"type\": \"string\"\n },\n \"allowedNodes\": {\n \"type\": \"array\",\n \"items\": {\n \"enum\": [\n \"info-list\",\n \"chip-list\",\n \"timeline\",\n \"key-value\",\n \"metadata\",\n \"component\",\n \"rich-content\"\n ]\n }\n },\n \"maxSections\": {\n \"type\": \"number\"\n },\n \"maxItemsPerSection\": {\n \"type\": \"number\"\n },\n \"requireSectionIds\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"rendering\": {\n \"type\": \"object\",\n \"properties\": {\n \"shell\": {\n \"enum\": [\n \"attached\",\n \"detached\",\n \"modal\"\n ]\n },\n \"columns\": {\n \"enum\": [\n 1,\n 2,\n 3\n ]\n },\n \"gap\": {\n \"type\": \"string\"\n },\n \"padding\": {\n \"type\": \"string\"\n },\n \"class\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"expansion\"\n }\n ],\n \"validators\": [\n \"expansion-section-id-stable\",\n \"expansion-value-supported\",\n \"json-logic-valid\",\n \"template-expression-safe\",\n \"remote-resource-binding-safe\",\n \"style-value-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"expansion\",\n \"expansion.sections\",\n \"expansion.sections[].id\",\n \"expansion.sections[].title\",\n \"expansion.sections[].type\",\n \"expansion.sections[].itemsExpr\",\n \"expansion.sections[].document\",\n \"expansion.sections[].documentExpr\",\n \"expansion.sections[].emptyLabel\",\n \"expansion.sections[].metadata\",\n \"expansion.sections[].component\",\n \"expansion.sections[].class\",\n \"expansion.sections[].style\",\n \"expansion.sections[].showIf\",\n \"expansion.dataSource\",\n \"expansion.dataSource.mode\",\n \"expansion.dataSource.resource\",\n \"expansion.dataSource.resource.kind\",\n \"expansion.dataSource.resource.id\",\n \"expansion.dataSource.resource.version\",\n \"expansion.dataSource.resourcePath\",\n \"expansion.dataSource.resourcePath.path\",\n \"expansion.dataSource.resourcePath.method\",\n \"expansion.dataSource.resourcePath.paramsMap\",\n \"expansion.dataSource.resourceAllowList\",\n \"expansion.dataSource.fallbackMode\",\n \"expansion.dataSource.cache\",\n \"expansion.dataSource.cache.enabled\",\n \"expansion.dataSource.cancelOnCollapse\",\n \"expansion.schemaContract\",\n \"expansion.schemaContract.kind\",\n \"expansion.schemaContract.version\",\n \"expansion.schemaContract.allowedNodes\",\n \"expansion.schemaContract.maxSections\",\n \"expansion.schemaContract.maxItemsPerSection\",\n \"expansion.schemaContract.requireSectionIds\",\n \"expansion.rendering\",\n \"expansion.rendering.shell\",\n \"expansion.rendering.columns\",\n \"expansion.rendering.gap\",\n \"expansion.rendering.padding\",\n \"expansion.rendering.class\",\n \"expansion.rendering.style\",\n \"expansion.rendering.loadingTemplate\",\n \"expansion.rendering.errorTemplate\"\n ],\n \"submissionImpact\": \"affects-remote-binding\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"data.resource.bind\",\n \"title\": \"Bind remote resource\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"dataBinding\",\n \"target\": {\n \"kind\": \"dataBinding\",\n \"resolver\": \"data-source-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"resourcePath\"\n ],\n \"properties\": {\n \"resourcePath\": {\n \"type\": \"string\"\n },\n \"query\": {\n \"type\": \"object\"\n },\n \"sort\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"clearLocalData\": {\n \"type\": \"boolean\",\n \"default\": true\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"dataSource\"\n }\n ],\n \"validators\": [\n \"remote-resource-binding-safe\",\n \"local-remote-precedence-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"dataSource.resourcePath\",\n \"dataSource.query\",\n \"dataSource.sort\",\n \"dataSource.data\"\n ],\n \"submissionImpact\": \"affects-remote-binding\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"data.local.set\",\n \"title\": \"Set local list data\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"dataBinding\",\n \"target\": {\n \"kind\": \"dataBinding\",\n \"resolver\": \"data-source-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"data\"\n ],\n \"properties\": {\n \"data\": {\n \"type\": \"array\"\n },\n \"clearResourcePath\": {\n \"type\": \"boolean\",\n \"default\": false\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"dataSource\"\n }\n ],\n \"validators\": [\n \"local-data-array-safe\",\n \"local-remote-precedence-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"dataSource\",\n \"dataSource.data\",\n \"dataSource.resourcePath\"\n ],\n \"submissionImpact\": \"config-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"data.query.set\",\n \"title\": \"Set remote list query\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"dataBinding\",\n \"target\": {\n \"kind\": \"dataBinding\",\n \"resolver\": \"data-source-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"query\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"dataSource.query\"\n }\n ],\n \"validators\": [\n \"query-value-supported\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"dataSource.query\"\n ],\n \"submissionImpact\": \"config-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"data.sort.set\",\n \"title\": \"Set remote list sort\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"dataBinding\",\n \"target\": {\n \"kind\": \"dataBinding\",\n \"resolver\": \"data-source-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"sort\"\n ],\n \"properties\": {\n \"sort\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"dataSource.sort\"\n }\n ],\n \"validators\": [\n \"sort-entry-supported\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"dataSource.sort\",\n \"dataSource.sort[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"export.configure\",\n \"title\": \"Configure list collection export\",\n \"scope\": \"export\",\n \"targetKind\": \"export\",\n \"target\": {\n \"kind\": \"export\",\n \"resolver\": \"export-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"formats\": {\n \"type\": \"array\",\n \"items\": {\n \"enum\": [\n \"csv\",\n \"json\",\n \"excel\",\n \"pdf\",\n \"print\"\n ]\n }\n },\n \"general\": {\n \"type\": \"object\",\n \"properties\": {\n \"scope\": {\n \"enum\": [\n \"auto\",\n \"selected\",\n \"filtered\",\n \"currentPage\",\n \"all\"\n ]\n },\n \"includeHeaders\": {\n \"type\": \"boolean\"\n },\n \"maxRows\": {\n \"type\": \"number\"\n },\n \"defaultFileName\": {\n \"type\": \"string\"\n },\n \"includeFields\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"all\"\n ]\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n ]\n },\n \"applyFormatting\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"export\"\n }\n ],\n \"validators\": [\n \"export-value-supported\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"export\",\n \"export.enabled\",\n \"export.formats\",\n \"export.formats[]\",\n \"export.general.scope\",\n \"export.general.includeHeaders\",\n \"export.general.maxRows\",\n \"export.general.defaultFileName\",\n \"export.general.includeFields\",\n \"export.general.applyFormatting\"\n ],\n \"submissionImpact\": \"config-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"ui.toolbar.configure\",\n \"title\": \"Configure list toolbar UI\",\n \"scope\": \"toolbarUi\",\n \"targetKind\": \"toolbarUi\",\n \"target\": {\n \"kind\": \"toolbarUi\",\n \"resolver\": \"ui-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"showSearch\": {\n \"type\": \"boolean\"\n },\n \"searchField\": {\n \"type\": \"string\"\n },\n \"searchPlaceholder\": {\n \"type\": \"string\"\n },\n \"showSort\": {\n \"type\": \"boolean\"\n },\n \"sortOptions\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"required\": [\n \"label\",\n \"value\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": \"string\"\n },\n \"value\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"showRange\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"ui\"\n }\n ],\n \"validators\": [\n \"bound-field-exists\",\n \"sort-entry-supported\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"ui\",\n \"ui.showSearch\",\n \"ui.searchField\",\n \"ui.searchPlaceholder\",\n \"ui.showSort\",\n \"ui.sortOptions\",\n \"ui.sortOptions[].label\",\n \"ui.sortOptions[].value\",\n \"ui.showRange\"\n ],\n \"submissionImpact\": \"config-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"i18n.configure\",\n \"title\": \"Configure list localization\",\n \"scope\": \"localization\",\n \"targetKind\": \"localization\",\n \"target\": {\n \"kind\": \"localization\",\n \"resolver\": \"i18n-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"locale\": {\n \"type\": \"string\"\n },\n \"currency\": {\n \"type\": \"string\"\n },\n \"localization\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"i18n\"\n }\n ],\n \"validators\": [\n \"i18n-value-supported\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"i18n\",\n \"i18n.locale\",\n \"i18n.currency\",\n \"i18n.localization\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"a11y.configure\",\n \"title\": \"Configure list accessibility\",\n \"scope\": \"accessibility\",\n \"targetKind\": \"accessibility\",\n \"target\": {\n \"kind\": \"accessibility\",\n \"resolver\": \"a11y-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"ariaLabel\": {\n \"type\": \"string\"\n },\n \"ariaLabelledBy\": {\n \"type\": \"string\"\n },\n \"highContrast\": {\n \"type\": \"boolean\"\n },\n \"reduceMotion\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"a11y\"\n }\n ],\n \"validators\": [\n \"a11y-value-supported\",\n \"declared-only-runtime-warning\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"a11y\",\n \"a11y.ariaLabel\",\n \"a11y.ariaLabelledBy\",\n \"a11y.highContrast\",\n \"a11y.reduceMotion\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"events.map\",\n \"title\": \"Configure declarative event mappings\",\n \"scope\": \"eventMapping\",\n \"targetKind\": \"eventMapping\",\n \"target\": {\n \"kind\": \"eventMapping\",\n \"resolver\": \"events-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"itemClick\": {\n \"type\": \"string\"\n },\n \"actionClick\": {\n \"type\": \"string\"\n },\n \"selectionChange\": {\n \"type\": \"string\"\n },\n \"exportAction\": {\n \"type\": \"string\"\n },\n \"loaded\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"events\"\n }\n ],\n \"validators\": [\n \"event-name-supported\",\n \"declared-only-runtime-warning\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"events\",\n \"events.itemClick\",\n \"events.actionClick\",\n \"events.selectionChange\",\n \"events.exportAction\",\n \"events.loaded\"\n ],\n \"submissionImpact\": \"config-only\",\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"preconditions\": [\n \"config-initialized\"\n ]\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"list-id-stable\",\n \"level\": \"error\",\n \"code\": \"PL000\",\n \"description\": \"List id must remain stable for persistence and editor reopen flows.\"\n },\n {\n \"validatorId\": \"bound-field-exists\",\n \"level\": \"error\",\n \"code\": \"PL001\",\n \"description\": \"Bound template and selection fields must exist in local data or schema context when available.\"\n },\n {\n \"validatorId\": \"template-expression-safe\",\n \"level\": \"error\",\n \"code\": \"PL002\",\n \"description\": \"Template expressions must use supported ${item.path} syntax and allowed pipes.\"\n },\n {\n \"validatorId\": \"action-id-stable\",\n \"level\": \"error\",\n \"code\": \"PL003\",\n \"description\": \"Item actions must declare stable unique ids.\"\n },\n {\n \"validatorId\": \"action-exists\",\n \"level\": \"error\",\n \"code\": \"PL004\",\n \"description\": \"Target action id must exist before update or removal.\"\n },\n {\n \"validatorId\": \"destructive-removal-confirmation\",\n \"level\": \"error\",\n \"code\": \"PL005\",\n \"description\": \"Destructive action removal requires explicit confirmation.\"\n },\n {\n \"validatorId\": \"remote-resource-binding-safe\",\n \"level\": \"error\",\n \"code\": \"PL006\",\n \"description\": \"Remote resource binding must use canonical resource metadata and safe resourcePath values.\"\n },\n {\n \"validatorId\": \"local-remote-precedence-safe\",\n \"level\": \"warning\",\n \"code\": \"PL007\",\n \"description\": \"When binding resourcePath, tools must account for dataSource.data taking precedence over remote data.\"\n },\n {\n \"validatorId\": \"selection-mode-supported\",\n \"level\": \"error\",\n \"code\": \"PL008\",\n \"description\": \"Selection mode and return policy must match the runtime enum.\"\n },\n {\n \"validatorId\": \"layout-value-supported\",\n \"level\": \"error\",\n \"code\": \"PL009\",\n \"description\": \"Layout density and related enum values must match PraxisListConfig.\"\n },\n {\n \"validatorId\": \"json-logic-valid\",\n \"level\": \"error\",\n \"code\": \"PL010\",\n \"description\": \"Action visibility conditions must be serializable Json Logic.\"\n },\n {\n \"validatorId\": \"global-action-ref-valid\",\n \"level\": \"warning\",\n \"code\": \"PL011\",\n \"description\": \"Structured globalAction refs must use a registered action id when registry context is available.\"\n },\n {\n \"validatorId\": \"editor-round-trip-preserve\",\n \"level\": \"error\",\n \"code\": \"PL012\",\n \"description\": \"The list config editor and JSON editor must preserve the saved shape without drift.\"\n },\n {\n \"validatorId\": \"template-slot-supported\",\n \"level\": \"error\",\n \"code\": \"PL013\",\n \"description\": \"Template slot names must be one of the runtime-supported catalog slots.\"\n },\n {\n \"validatorId\": \"skin-value-supported\",\n \"level\": \"error\",\n \"code\": \"PL014\",\n \"description\": \"Skin values must match the runtime-supported skin contract.\"\n },\n {\n \"validatorId\": \"style-value-safe\",\n \"level\": \"warning\",\n \"code\": \"PL015\",\n \"description\": \"Inline styles and classes must be safe for the host sanitization policy.\"\n },\n {\n \"validatorId\": \"template-display-supported\",\n \"level\": \"error\",\n \"code\": \"PL016\",\n \"description\": \"Template display options must match the runtime enum contract.\"\n },\n {\n \"validatorId\": \"skeleton-value-supported\",\n \"level\": \"error\",\n \"code\": \"PL017\",\n \"description\": \"Skeleton counts must be numeric and non-negative.\"\n },\n {\n \"validatorId\": \"local-data-array-safe\",\n \"level\": \"error\",\n \"code\": \"PL018\",\n \"description\": \"Local list data must be an array and must not hide an intended remote binding accidentally.\"\n },\n {\n \"validatorId\": \"sort-entry-supported\",\n \"level\": \"error\",\n \"code\": \"PL019\",\n \"description\": \"Sort entries must use the canonical field,direction format or labeled sort option shape.\"\n },\n {\n \"validatorId\": \"query-value-supported\",\n \"level\": \"error\",\n \"code\": \"PL031\",\n \"description\": \"Remote list query must be a serializable object compatible with the resource filter contract.\"\n },\n {\n \"validatorId\": \"i18n-value-supported\",\n \"level\": \"warning\",\n \"code\": \"PL020\",\n \"description\": \"Locale and currency values should be valid BCP 47 / ISO currency values when host validation is available.\"\n },\n {\n \"validatorId\": \"a11y-value-supported\",\n \"level\": \"error\",\n \"code\": \"PL021\",\n \"description\": \"Accessibility labels must be non-empty when provided.\"\n },\n {\n \"validatorId\": \"export-value-supported\",\n \"level\": \"error\",\n \"code\": \"PL030\",\n \"description\": \"Export formats and scopes must match the shared collection export contract.\"\n },\n {\n \"validatorId\": \"event-name-supported\",\n \"level\": \"warning\",\n \"code\": \"PL022\",\n \"description\": \"Declarative event names must be stable host event identifiers.\"\n },\n {\n \"validatorId\": \"declared-only-runtime-warning\",\n \"level\": \"warning\",\n \"code\": \"PL023\",\n \"description\": \"Fields documented as declared-only may round-trip through config/editor without changing current runtime behavior.\"\n },\n {\n \"validatorId\": \"row-layout-supported\",\n \"level\": \"error\",\n \"code\": \"PL024\",\n \"description\": \"Row layout columns must use supported slots and enum values.\"\n },\n {\n \"validatorId\": \"row-layout-placement-reachable\",\n \"level\": \"warning\",\n \"code\": \"PL025\",\n \"description\": \"Action and expansion placements must be reachable from the active row layout.\"\n },\n {\n \"validatorId\": \"interaction-value-supported\",\n \"level\": \"error\",\n \"code\": \"PL026\",\n \"description\": \"Interaction expansion values must match the runtime enum contract.\"\n },\n {\n \"validatorId\": \"rule-id-stable\",\n \"level\": \"error\",\n \"code\": \"PL027\",\n \"description\": \"List style and slot override rules must declare stable unique ids.\"\n },\n {\n \"validatorId\": \"expansion-section-id-stable\",\n \"level\": \"error\",\n \"code\": \"PL028\",\n \"description\": \"Expansion sections must declare stable unique ids.\"\n },\n {\n \"validatorId\": \"expansion-value-supported\",\n \"level\": \"error\",\n \"code\": \"PL029\",\n \"description\": \"Expansion section, data source, schema contract and rendering values must match the runtime contract.\"\n }\n ],\n \"roundTripRequirements\": [\n \"List editor must preserve templating.primary, templating.secondary, templating.leading, templating.trailing and templating.emptyState.\",\n \"Actions must round-trip by actions[].id rather than array index.\",\n \"Rules must round-trip by rules.itemStyles[].id and rules.slotOverrides[].id rather than array index.\",\n \"Expansion sections must round-trip by expansion.sections[].id rather than array index.\",\n \"Row layout must preserve executive slots identity, balance, limit, risk, alerts, owner, actions and expand.\",\n \"Export configuration must preserve the shared collection export scope and format contract.\",\n \"dataSource.data precedence over dataSource.resourcePath must remain explicit when binding remote resources.\"\n ],\n \"examples\": [\n {\n \"id\": \"set-list-id\",\n \"request\": \"Set the stable list id to employees-list.\",\n \"operationId\": \"list.id.set\",\n \"params\": {\n \"id\": \"employees-list\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"bind-title-subtitle-fields\",\n \"request\": \"Use name as title and department as subtitle.\",\n \"operationId\": \"item.primaryText.set\",\n \"params\": {\n \"type\": \"text\",\n \"expr\": \"${item.name}\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"bind-secondary-field\",\n \"request\": \"Show department below the title.\",\n \"operationId\": \"item.secondaryText.set\",\n \"params\": {\n \"type\": \"text\",\n \"expr\": \"${item.department}\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-avatar-image\",\n \"request\": \"Use photoUrl as the item avatar.\",\n \"operationId\": \"item.avatar.configure\",\n \"params\": {\n \"type\": \"image\",\n \"expr\": \"${item.photoUrl}\",\n \"imageAlt\": \"Employee photo\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-template-slot\",\n \"request\": \"Set the meta slot to show the employee score.\",\n \"operationId\": \"template.slot.set\",\n \"params\": {\n \"slot\": \"meta\",\n \"template\": {\n \"type\": \"metric\",\n \"expr\": \"${item.score}\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-item-action\",\n \"request\": \"Add an edit action to every item.\",\n \"operationId\": \"item.action.add\",\n \"params\": {\n \"id\": \"edit\",\n \"label\": \"Edit\",\n \"icon\": \"edit\",\n \"kind\": \"icon\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"update-item-action-placement\",\n \"request\": \"Move the edit action into the dedicated actions column and show loading.\",\n \"operationId\": \"item.action.update\",\n \"params\": {\n \"id\": \"edit\",\n \"placement\": \"actions\",\n \"showLoading\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-navigation-open-route-action\",\n \"request\": \"Add an item action that opens the guide route with the selected employee id.\",\n \"operationId\": \"item.action.add\",\n \"params\": {\n \"id\": \"open-guide-route\",\n \"label\": \"Abrir Guia\",\n \"icon\": \"travel_explore\",\n \"kind\": \"button\",\n \"buttonVariant\": \"stroked\",\n \"globalAction\": {\n \"actionId\": \"navigation.openRoute\",\n \"payload\": {\n \"path\": \"/components-showcase/surface-open-guide\",\n \"query\": {\n \"funcionarioId\": \"${item.id}\"\n },\n \"state\": {\n \"funcionarioId\": \"${item.id}\",\n \"source\": \"surface-open-list-demo\"\n }\n }\n },\n \"emitLocal\": false,\n \"showLoading\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"remove-item-action-with-confirmation\",\n \"request\": \"Remove the edit action after confirmation.\",\n \"operationId\": \"item.action.remove\",\n \"params\": {\n \"id\": \"edit\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-badge-from-status\",\n \"request\": \"Show a status badge in the item corner.\",\n \"operationId\": \"item.badge.configure\",\n \"params\": {\n \"expr\": \"${item.status}\",\n \"statusPosition\": \"top-right\",\n \"color\": \"primary\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"switch-selection-mode\",\n \"request\": \"Allow selecting multiple employees by id.\",\n \"operationId\": \"selection.mode.set\",\n \"params\": {\n \"mode\": \"multiple\",\n \"compareBy\": \"id\",\n \"return\": \"id\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-compact-density\",\n \"request\": \"Make the list compact.\",\n \"operationId\": \"layout.density.set\",\n \"params\": {\n \"density\": \"compact\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-missing-field-binding\",\n \"request\": \"Use missingField as the list title.\",\n \"operationId\": \"item.primaryText.set\",\n \"params\": {\n \"type\": \"text\",\n \"expr\": \"${item.missingField}\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"configure-list-skin\",\n \"request\": \"Use an elevated card skin with rounded corners.\",\n \"operationId\": \"skin.configure\",\n \"params\": {\n \"type\": \"elevated\",\n \"radius\": \"8px\",\n \"shadow\": \"var(--mat-sys-level2)\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-list-toolbar\",\n \"request\": \"Show search by name and sort by created date.\",\n \"operationId\": \"ui.toolbar.configure\",\n \"params\": {\n \"showSearch\": true,\n \"searchField\": \"name\",\n \"showSort\": true,\n \"sortOptions\": [\n {\n \"label\": \"Newest\",\n \"value\": \"createdAt,desc\"\n }\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-accessibility-label\",\n \"request\": \"Set an accessible label for the customer list.\",\n \"operationId\": \"a11y.configure\",\n \"params\": {\n \"ariaLabel\": \"Customer list\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-list-export\",\n \"request\": \"Enable CSV export for selected list rows.\",\n \"operationId\": \"export.configure\",\n \"params\": {\n \"enabled\": true,\n \"formats\": [\n \"csv\"\n ],\n \"general\": {\n \"scope\": \"selected\",\n \"includeFields\": [\n \"id\",\n \"name\"\n ]\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"map-declarative-events\",\n \"request\": \"Map selection changes to the customerSelectionChanged event name.\",\n \"operationId\": \"events.map\",\n \"params\": {\n \"selectionChange\": \"customerSelectionChanged\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-template-display\",\n \"request\": \"Move status chips to the top right and hide feature labels.\",\n \"operationId\": \"templating.display.configure\",\n \"params\": {\n \"statusPosition\": \"top-right\",\n \"featuresMode\": \"icons-only\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-feature-line\",\n \"request\": \"Show the amenities feature line.\",\n \"operationId\": \"templating.features.set\",\n \"params\": {\n \"features\": [\n {\n \"icon\": \"wifi\",\n \"expr\": \"${item.hasWifi}\"\n }\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-skeleton-count\",\n \"request\": \"Render six skeleton rows while loading.\",\n \"operationId\": \"templating.skeleton.configure\",\n \"params\": {\n \"count\": 6\n },\n \"isPositive\": true\n },\n {\n \"id\": \"override-risk-slot\",\n \"request\": \"Show a warning icon in the risk slot for high-risk rows.\",\n \"operationId\": \"rules.slotOverride.upsert\",\n \"params\": {\n \"id\": \"high-risk-icon\",\n \"slot\": \"risk\",\n \"condition\": {\n \"==\": [\n {\n \"var\": \"row.risk\"\n },\n \"high\"\n ]\n },\n \"template\": {\n \"type\": \"icon\",\n \"expr\": \"warning\",\n \"color\": \"warn\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-empty-state\",\n \"request\": \"Show an empty employee message.\",\n \"operationId\": \"emptyState.set\",\n \"params\": {\n \"type\": \"text\",\n \"expr\": \"No employees found\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"bind-remote-resource\",\n \"request\": \"Bind the list to the employees resource.\",\n \"operationId\": \"data.resource.bind\",\n \"params\": {\n \"resourcePath\": \"employees\",\n \"sort\": [\n \"name,asc\"\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-local-data\",\n \"request\": \"Use a local employee array for the list.\",\n \"operationId\": \"data.local.set\",\n \"params\": {\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Ana\"\n }\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-remote-query\",\n \"request\": \"Filter remote employees by active status.\",\n \"operationId\": \"data.query.set\",\n \"params\": {\n \"query\": {\n \"status\": \"active\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-remote-sort\",\n \"request\": \"Sort remote employees by name ascending.\",\n \"operationId\": \"data.sort.set\",\n \"params\": {\n \"sort\": [\n \"name,asc\"\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-list-i18n\",\n \"request\": \"Use Brazilian Portuguese and BRL defaults.\",\n \"operationId\": \"i18n.configure\",\n \"params\": {\n \"locale\": \"pt-BR\",\n \"currency\": \"BRL\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-row-layout-executive-slots\",\n \"request\": \"Use an executive row with identity, balance and actions columns.\",\n \"operationId\": \"layout.rowLayout.configure\",\n \"params\": {\n \"type\": \"grid\",\n \"columns\": [\n {\n \"slot\": \"identity\",\n \"width\": \"280px\"\n },\n {\n \"slot\": \"balance\",\n \"width\": \"1fr\"\n },\n {\n \"slot\": \"actions\",\n \"width\": \"auto\"\n }\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-inline-expansion\",\n \"request\": \"Allow expanding one row at a time using the expand icon.\",\n \"operationId\": \"interaction.expansion.configure\",\n \"params\": {\n \"expandable\": true,\n \"expandTrigger\": \"icon\",\n \"expandMode\": \"single\",\n \"expandPlacement\": \"expand\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-expansion-section\",\n \"request\": \"Add a detail expansion section backed by item details.\",\n \"operationId\": \"expansion.configure\",\n \"params\": {\n \"sections\": [\n {\n \"id\": \"details\",\n \"type\": \"metadata\",\n \"title\": \"Details\",\n \"itemsExpr\": \"${item.details}\"\n }\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"style-high-risk-items\",\n \"request\": \"Highlight rows where risk is high.\",\n \"operationId\": \"rules.itemStyle.upsert\",\n \"params\": {\n \"id\": \"high-risk\",\n \"condition\": {\n \"==\": [\n {\n \"var\": \"row.risk\"\n },\n \"high\"\n ]\n },\n \"class\": \"risk-high\"\n },\n \"isPositive\": true\n }\n ]\n}",
6558
- "sourcePointer": "praxis-ui-angular/projects/praxis-list/src/lib/ai/praxis-list-authoring-manifest.ts",
6689
+ "sourcePointer": "projects/praxis-list/src/lib/ai/praxis-list-authoring-manifest.ts",
6559
6690
  "contentHash": "fcd4cb002824327558928f93e2a38e9f5a323d7800b891189fde766e1179840a",
6560
6691
  "sourceKind": "component_definition",
6561
6692
  "sourceId": "praxis-list",
@@ -6565,7 +6696,7 @@
6565
6696
  "chunkIndex": 3,
6566
6697
  "chunkKind": "context_pack",
6567
6698
  "content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"hints\": [\n \"Use actions[].id and templating.features[].expr as merge keys; avoid array indexes.\",\n \"Template expressions support only ${item.path} with simple pipes (bool/date/map/number).\",\n \"dataSource.data overrides resourcePath; prefer one or the other for clarity.\",\n \"layout.lines expects numeric values (1, 2, 3).\",\n \"DOC: Widget purpose: list/cards with selection, grouping, and templating.\",\n \"DOC: Host inputs: config (required) and listId (required); form is optional; enableCustomization is the canonical customization input.\",\n \"DOC: Minimal data source: dataSource.data (inline) or dataSource.resourcePath (API).\",\n \"DOC: Minimal rendering: set templating.primary.expr (label) or templating.secondary.expr.\"\n ],\n \"optionsByPath\": {\n \"layout.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"list\",\n \"label\": \"List\"\n },\n {\n \"value\": \"cards\",\n \"label\": \"Cards\"\n },\n {\n \"value\": \"tiles\",\n \"label\": \"Tiles\"\n }\n ]\n },\n \"layout.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"default\",\n \"label\": \"Default\"\n },\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n }\n ]\n },\n \"layout.itemSpacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"none\",\n \"label\": \"None\"\n },\n {\n \"value\": \"tight\",\n \"label\": \"Tight\"\n },\n {\n \"value\": \"default\",\n \"label\": \"Default\"\n },\n {\n \"value\": \"relaxed\",\n \"label\": \"Relaxed\"\n }\n ]\n },\n \"layout.lines\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": 1,\n \"label\": \"1 line\"\n },\n {\n \"value\": 2,\n \"label\": \"2 lines\"\n },\n {\n \"value\": 3,\n \"label\": \"3 lines\"\n }\n ]\n },\n \"layout.dividers\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"none\",\n \"label\": \"None\"\n },\n {\n \"value\": \"between\",\n \"label\": \"Between\"\n },\n {\n \"value\": \"all\",\n \"label\": \"All\"\n }\n ]\n },\n \"layout.model\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"standard\",\n \"label\": \"Standard\"\n },\n {\n \"value\": \"media\",\n \"label\": \"Media\"\n },\n {\n \"value\": \"hotel\",\n \"label\": \"Hotel\"\n }\n ]\n },\n \"selection.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"none\",\n \"label\": \"None\"\n },\n {\n \"value\": \"single\",\n \"label\": \"Single\"\n },\n {\n \"value\": \"multiple\",\n \"label\": \"Multiple\"\n }\n ]\n },\n \"selection.return\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"value\",\n \"label\": \"Value\"\n },\n {\n \"value\": \"item\",\n \"label\": \"Item\"\n },\n {\n \"value\": \"id\",\n \"label\": \"Id\"\n }\n ]\n },\n \"skin.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"pill-soft\",\n \"label\": \"Pill soft\"\n },\n {\n \"value\": \"gradient-tile\",\n \"label\": \"Gradient tile\"\n },\n {\n \"value\": \"glass\",\n \"label\": \"Glass\"\n },\n {\n \"value\": \"elevated\",\n \"label\": \"Elevated\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"neumorphism\",\n \"label\": \"Neumorphism\"\n },\n {\n \"value\": \"custom\",\n \"label\": \"Custom\"\n }\n ]\n },\n \"templating.leading.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n },\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"slot\",\n \"label\": \"Slot\"\n }\n ]\n },\n \"templating.primary.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n }\n ]\n },\n \"templating.secondary.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n }\n ]\n },\n \"templating.meta.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n },\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"slot\",\n \"label\": \"Slot\"\n }\n ]\n },\n \"templating.trailing.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n },\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"slot\",\n \"label\": \"Slot\"\n }\n ]\n },\n \"templating.sectionHeader.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n },\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"slot\",\n \"label\": \"Slot\"\n }\n ]\n },\n \"templating.emptyState.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n },\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"slot\",\n \"label\": \"Slot\"\n }\n ]\n },\n \"templating.leading.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n }\n ]\n },\n \"templating.primary.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n }\n ]\n },\n \"templating.secondary.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n }\n ]\n },\n \"templating.meta.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n }\n ]\n },\n \"templating.trailing.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n }\n ]\n },\n \"templating.sectionHeader.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n }\n ]\n },\n \"templating.emptyState.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n }\n ]\n },\n \"templating.metaPlacement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"side\",\n \"label\": \"Side\"\n },\n {\n \"value\": \"line\",\n \"label\": \"Line\"\n }\n ]\n },\n \"templating.statusPosition\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n },\n {\n \"value\": \"top-right\",\n \"label\": \"Top right\"\n }\n ]\n },\n \"templating.meta.props.rating.max\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": 5,\n \"label\": \"5 estrelas\"\n },\n {\n \"value\": 10,\n \"label\": \"10 pontos\"\n }\n ]\n },\n \"templating.meta.props.rating.size\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": 12,\n \"label\": \"Compacto\"\n },\n {\n \"value\": 16,\n \"label\": \"Padrão\"\n },\n {\n \"value\": 20,\n \"label\": \"Destaque\"\n }\n ]\n },\n \"templating.meta.props.rating.color\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"var(--md-sys-color-tertiary)\",\n \"label\": \"M3 Tertiary\"\n }\n ]\n },\n \"templating.featuresMode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icons+labels\",\n \"label\": \"Icons + labels\"\n },\n {\n \"value\": \"icons-only\",\n \"label\": \"Icons only\"\n },\n {\n \"value\": \"labels-only\",\n \"label\": \"Labels only\"\n }\n ]\n },\n \"actions[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n }\n ]\n },\n \"actions[].buttonVariant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n }\n ]\n },\n \"actions[].globalAction.[actionId]\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"toast.success\",\n \"label\": \"Toast success\"\n },\n {\n \"value\": \"toast.error\",\n \"label\": \"Toast error\"\n },\n {\n \"value\": \"dialog.alert\",\n \"label\": \"Dialog alert\"\n },\n {\n \"value\": \"dialog.open\",\n \"label\": \"Dialog open\"\n },\n {\n \"value\": \"navigation.openExternal\",\n \"label\": \"Open external URL\"\n },\n {\n \"value\": \"navigation.openRoute\",\n \"label\": \"Open internal route\"\n },\n {\n \"value\": \"api.post\",\n \"label\": \"API POST\"\n },\n {\n \"value\": \"api.patch\",\n \"label\": \"API PATCH\"\n }\n ]\n },\n \"actions[].globalAction.payloadExpr\": {\n \"mode\": \"expression\"\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"dataSource.resourcePath.set\",\n \"intentExamples\": [\n \"resource\",\n \"endpoint\",\n \"api\",\n \"path\"\n ],\n \"patchTemplate\": {\n \"dataSource\": {\n \"resourcePath\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"dataSource.sort.set\",\n \"intentExamples\": [\n \"sort\",\n \"order\",\n \"ordenar\"\n ],\n \"patchTemplate\": {\n \"dataSource\": {\n \"sort\": [\n \"{{value}}\"\n ]\n }\n }\n },\n {\n \"id\": \"layout.variant.set\",\n \"intentExamples\": [\n \"layout\",\n \"variant\",\n \"list\",\n \"cards\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"variant\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"layout.variant.set.tiles\",\n \"intentExamples\": [\n \"tiles\",\n \"grid\",\n \"cards grid\",\n \"catalog\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"variant\": \"tiles\"\n }\n }\n },\n {\n \"id\": \"layout.variant.set.list\",\n \"intentExamples\": [\n \"list\",\n \"lista\",\n \"linha\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"variant\": \"list\"\n }\n }\n },\n {\n \"id\": \"layout.variant.set.cards\",\n \"intentExamples\": [\n \"cards\",\n \"card\",\n \"cartões\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"variant\": \"cards\"\n }\n }\n },\n {\n \"id\": \"layout.density.set\",\n \"intentExamples\": [\n \"density\",\n \"compact\",\n \"comfortable\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"density\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"layout.density.compact\",\n \"intentExamples\": [\n \"compact\",\n \"dense\",\n \"mais itens\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"density\": \"compact\"\n }\n }\n },\n {\n \"id\": \"layout.density.comfortable\",\n \"intentExamples\": [\n \"comfortable\",\n \"confortável\",\n \"mais espaço\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"density\": \"comfortable\"\n }\n }\n },\n {\n \"id\": \"layout.lines.set.1\",\n \"intentExamples\": [\n \"lines\",\n \"1 line\",\n \"one line\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"lines\": 1\n }\n }\n },\n {\n \"id\": \"layout.lines.set.2\",\n \"intentExamples\": [\n \"lines\",\n \"2 lines\",\n \"two lines\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"lines\": 2\n }\n }\n },\n {\n \"id\": \"layout.lines.set.3\",\n \"intentExamples\": [\n \"lines\",\n \"3 lines\",\n \"three lines\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"lines\": 3\n }\n }\n },\n {\n \"id\": \"layout.dividers.none\",\n \"intentExamples\": [\n \"no dividers\",\n \"sem divisores\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"dividers\": \"none\"\n }\n }\n },\n {\n \"id\": \"layout.dividers.between\",\n \"intentExamples\": [\n \"dividers\",\n \"separadores\",\n \"entre itens\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"dividers\": \"between\"\n }\n }\n },\n {\n \"id\": \"layout.dividers.set\",\n \"intentExamples\": [\n \"divider\",\n \"dividers\",\n \"separators\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"dividers\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"layout.model.set\",\n \"intentExamples\": [\n \"model\",\n \"card style\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"model\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"layout.groupBy.set\",\n \"intentExamples\": [\n \"group\",\n \"group by\",\n \"section\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"groupBy\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"layout.groupBy.department\",\n \"intentExamples\": [\n \"department\",\n \"setor\",\n \"área\",\n \"group by department\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"groupBy\": \"department\",\n \"stickySectionHeader\": true\n },\n \"templating\": {\n \"sectionHeader\": {\n \"type\": \"chip\",\n \"expr\": \"${item.key}\",\n \"color\": \"primary\"\n }\n }\n }\n },\n {\n \"id\": \"layout.groupBy.status\",\n \"intentExamples\": [\n \"status group\",\n \"group by status\",\n \"agrupado por status\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"groupBy\": \"status\",\n \"stickySectionHeader\": true\n },\n \"templating\": {\n \"sectionHeader\": {\n \"type\": \"text\",\n \"expr\": \"${item.key}\"\n }\n }\n }\n },\n {\n \"id\": \"layout.groupBy.category\",\n \"intentExamples\": [\n \"category\",\n \"categoria\",\n \"group by category\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"groupBy\": \"category\",\n \"stickySectionHeader\": true\n },\n \"templating\": {\n \"sectionHeader\": {\n \"type\": \"chip\",\n \"expr\": \"${item.key}\",\n \"color\": \"accent\"\n }\n }\n }\n },\n {\n \"id\": \"layout.groupBy.date\",\n \"intentExamples\": [\n \"date group\",\n \"group by date\",\n \"agrupado por data\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"groupBy\": \"date\",\n \"stickySectionHeader\": true\n },\n \"templating\": {\n \"sectionHeader\": {\n \"type\": \"text\",\n \"expr\": \"${item.key|date:pt-BR:short}\"\n }\n }\n }\n },\n {\n \"id\": \"layout.stickyHeader.enable\",\n \"intentExamples\": [\n \"sticky\",\n \"section header\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"stickySectionHeader\": true\n }\n }\n },\n {\n \"id\": \"layout.stickyHeader.disable\",\n \"intentExamples\": [\n \"sticky\",\n \"section header\",\n \"disable\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"stickySectionHeader\": false\n }\n }\n },\n {\n \"id\": \"layout.pageSize.set.10\",\n \"intentExamples\": [\n \"page size\",\n \"pagination\",\n \"10\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"pageSize\": 10\n }\n }\n },\n {\n \"id\": \"layout.pageSize.set.20\",\n \"intentExamples\": [\n \"page size\",\n \"pagination\",\n \"20\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"pageSize\": 20\n }\n }\n },\n {\n \"id\": \"layout.pageSize.set.50\",\n \"intentExamples\": [\n \"page size\",\n \"pagination\",\n \"50\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"pageSize\": 50\n }\n }\n },\n {\n \"id\": \"selection.mode.set\",\n \"intentExamples\": [\n \"selection\",\n \"select\",\n \"multi\",\n \"single\"\n ],\n \"patchTemplate\": {\n \"selection\": {\n \"mode\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"selection.mode.single\",\n \"intentExamples\": [\n \"single select\",\n \"seleção única\"\n ],\n \"patchTemplate\": {\n \"selection\": {\n \"mode\": \"single\",\n \"return\": \"value\"\n }\n }\n },\n {\n \"id\": \"selection.mode.multiple\",\n \"intentExamples\": [\n \"multi select\",\n \"seleção múltipla\"\n ],\n \"patchTemplate\": {\n \"selection\": {\n \"mode\": \"multiple\",\n \"return\": \"id\"\n }\n }\n },\n {\n \"id\": \"selection.compareBy.set\",\n \"intentExamples\": [\n \"compare\",\n \"key\",\n \"identity\"\n ],\n \"patchTemplate\": {\n \"selection\": {\n \"compareBy\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"selection.return.set\",\n \"intentExamples\": [\n \"return\",\n \"payload\",\n \"selection output\"\n ],\n \"patchTemplate\": {\n \"selection\": {\n \"return\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"skin.type.set\",\n \"intentExamples\": [\n \"skin\",\n \"theme\",\n \"style\"\n ],\n \"patchTemplate\": {\n \"skin\": {\n \"type\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"skin.glass\",\n \"intentExamples\": [\n \"glass\",\n \"vidro\",\n \"blur\"\n ],\n \"patchTemplate\": {\n \"skin\": {\n \"type\": \"glass\",\n \"backdropBlur\": \"12px\",\n \"border\": \"1px solid var(--md-sys-color-outline-variant)\"\n }\n }\n },\n {\n \"id\": \"skin.gradient.tile\",\n \"intentExamples\": [\n \"gradient\",\n \"tile\",\n \"degradê\"\n ],\n \"patchTemplate\": {\n \"skin\": {\n \"type\": \"gradient-tile\",\n \"gradient\": {\n \"from\": \"var(--md-sys-color-primary)\",\n \"to\": \"var(--md-sys-color-tertiary)\",\n \"angle\": 135\n }\n }\n }\n },\n {\n \"id\": \"templating.primary.set\",\n \"intentExamples\": [\n \"primary\",\n \"title\",\n \"main text\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"primary\": {\n \"type\": \"{{params.type}}\",\n \"expr\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"templating.secondary.set\",\n \"intentExamples\": [\n \"secondary\",\n \"subtitle\",\n \"detail text\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"secondary\": {\n \"type\": \"{{params.type}}\",\n \"expr\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"templating.meta.set\",\n \"intentExamples\": [\n \"meta\",\n \"side text\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"meta\": {\n \"type\": \"{{params.type}}\",\n \"expr\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"templating.meta.rating.set\",\n \"intentExamples\": [\n \"rating\",\n \"stars\",\n \"nota\",\n \"score\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"meta\": {\n \"type\": \"rating\",\n \"expr\": \"${item.rating}\",\n \"props\": {\n \"rating\": {\n \"max\": 5,\n \"size\": 16,\n \"color\": \"primary\"\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"templating.meta.currency.set\",\n \"intentExamples\": [\n \"price\",\n \"preço\",\n \"valor\",\n \"currency\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"meta\": {\n \"type\": \"currency\",\n \"expr\": \"${item.price}|BRL:pt-BR\"\n }\n }\n }\n },\n {\n \"id\": \"templating.trailing.status.chip\",\n \"intentExamples\": [\n \"status chip\",\n \"badge\",\n \"estado\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"trailing\": {\n \"type\": \"chip\",\n \"expr\": \"${item.status}\",\n \"color\": \"primary\"\n },\n \"statusPosition\": \"top-right\"\n }\n }\n },\n {\n \"id\": \"templating.trailing.status.icon\",\n \"intentExamples\": [\n \"status icon\",\n \"icone status\",\n \"state icon\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"trailing\": {\n \"type\": \"icon\",\n \"expr\": \"${item.status|map:OK=check_circle,ALERTA=warning,ERRO=error}\"\n },\n \"statusPosition\": \"top-right\"\n }\n }\n },\n {\n \"id\": \"templating.trailing.currency\",\n \"intentExamples\": [\n \"trailing price\",\n \"valor à direita\",\n \"preço à direita\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"trailing\": {\n \"type\": \"currency\",\n \"expr\": \"${item.price}|BRL:pt-BR\"\n }\n }\n }\n },\n {\n \"id\": \"templating.leading.avatar.image\",\n \"intentExamples\": [\n \"avatar\",\n \"foto\",\n \"imagem principal\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"leading\": {\n \"type\": \"image\",\n \"expr\": \"${item.imageUrl}\",\n \"imageAlt\": \"Imagem\"\n }\n }\n }\n },\n {\n \"id\": \"templating.leading.avatar.icon\",\n \"intentExamples\": [\n \"avatar icon\",\n \"icone pessoa\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"leading\": {\n \"type\": \"icon\",\n \"expr\": \"person\",\n \"color\": \"primary\"\n }\n }\n }\n },\n {\n \"id\": \"templating.features.add.wifi\",\n \"intentExamples\": [\n \"wifi\",\n \"amenities\",\n \"features\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"features\": [\n {\n \"icon\": \"wifi\",\n \"expr\": \"${item.hasWifi}\"\n }\n ]\n }\n }\n },\n {\n \"id\": \"templating.features.mode.icons-only\",\n \"intentExamples\": [\n \"icons only\",\n \"somente ícones\",\n \"icons\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"featuresMode\": \"icons-only\"\n }\n }\n },\n {\n \"id\": \"templating.features.mode.labels-only\",\n \"intentExamples\": [\n \"labels only\",\n \"somente texto\",\n \"labels\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"featuresMode\": \"labels-only\"\n }\n }\n },\n {\n \"id\": \"templating.features.mode.icons-labels\",\n \"intentExamples\": [\n \"icons + labels\",\n \"ícones e texto\",\n \"icons labels\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"featuresMode\": \"icons+labels\"\n }\n }\n },\n {\n \"id\": \"templating.meta.placement.side\",\n \"intentExamples\": [\n \"meta side\",\n \"meta lateral\",\n \"meta direita\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"metaPlacement\": \"side\"\n }\n }\n },\n {\n \"id\": \"templating.meta.placement.line\",\n \"intentExamples\": [\n \"meta line\",\n \"meta abaixo\",\n \"meta na linha\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"metaPlacement\": \"line\"\n }\n }\n },\n {\n \"id\": \"layout.lines.compact\",\n \"intentExamples\": [\n \"1 line\",\n \"uma linha\",\n \"compact\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"lines\": 1\n }\n }\n },\n {\n \"id\": \"layout.lines.standard\",\n \"intentExamples\": [\n \"2 lines\",\n \"duas linhas\",\n \"standard\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"lines\": 2\n }\n }\n },\n {\n \"id\": \"layout.lines.rich\",\n \"intentExamples\": [\n \"3 lines\",\n \"três linhas\",\n \"rich\"\n ],\n \"patchTemplate\": {\n \"layout\": {\n \"lines\": 3\n }\n }\n },\n {\n \"id\": \"ui.search.enable\",\n \"intentExamples\": [\n \"search\",\n \"buscar\",\n \"pesquisa\"\n ],\n \"patchTemplate\": {\n \"ui\": {\n \"showSearch\": true,\n \"searchField\": \"name\",\n \"searchPlaceholder\": \"Buscar\"\n }\n }\n },\n {\n \"id\": \"ui.sort.enable\",\n \"intentExamples\": [\n \"sort\",\n \"ordenar\",\n \"order\"\n ],\n \"patchTemplate\": {\n \"ui\": {\n \"showSort\": true,\n \"sortOptions\": [\n \"name,asc\",\n \"name,desc\"\n ]\n }\n }\n },\n {\n \"id\": \"ui.range.enable\",\n \"intentExamples\": [\n \"range\",\n \"faixa\",\n \"x-y\"\n ],\n \"patchTemplate\": {\n \"ui\": {\n \"showRange\": true\n }\n }\n },\n {\n \"id\": \"actions.add.edit\",\n \"intentExamples\": [\n \"edit action\",\n \"editar\",\n \"ação editar\"\n ],\n \"patchTemplate\": {\n \"actions\": [\n {\n \"id\": \"edit\",\n \"icon\": \"edit\",\n \"label\": \"Editar\"\n }\n ]\n }\n },\n {\n \"id\": \"actions.add.delete\",\n \"intentExamples\": [\n \"delete action\",\n \"remover\",\n \"excluir\"\n ],\n \"patchTemplate\": {\n \"actions\": [\n {\n \"id\": \"delete\",\n \"icon\": \"delete\",\n \"label\": \"Excluir\",\n \"color\": \"warn\"\n }\n ]\n }\n },\n {\n \"id\": \"actions.add.details.button\",\n \"intentExamples\": [\n \"details button\",\n \"detalhes\",\n \"ver mais\"\n ],\n \"patchTemplate\": {\n \"actions\": [\n {\n \"id\": \"details\",\n \"kind\": \"button\",\n \"buttonVariant\": \"stroked\",\n \"label\": \"Detalhes\"\n }\n ]\n }\n },\n {\n \"id\": \"templating.trailing.set\",\n \"intentExamples\": [\n \"trailing\",\n \"end\",\n \"right\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"trailing\": {\n \"type\": \"{{params.type}}\",\n \"expr\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"templating.features.add\",\n \"intentExamples\": [\n \"features\",\n \"amenities\",\n \"icons\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"features\": [\n {\n \"icon\": \"{{params.icon}}\",\n \"expr\": \"{{value}}\"\n }\n ]\n }\n }\n },\n {\n \"id\": \"templating.features.enable\",\n \"intentExamples\": [\n \"features\",\n \"show features\",\n \"enable features\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"featuresVisible\": true\n }\n }\n },\n {\n \"id\": \"templating.features.disable\",\n \"intentExamples\": [\n \"features\",\n \"hide features\",\n \"disable features\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"featuresVisible\": false\n }\n }\n },\n {\n \"id\": \"templating.metaPlacement.set\",\n \"intentExamples\": [\n \"meta placement\",\n \"meta position\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"metaPlacement\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"templating.statusPosition.set\",\n \"intentExamples\": [\n \"status position\",\n \"badge position\"\n ],\n \"patchTemplate\": {\n \"templating\": {\n \"statusPosition\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"action.add\",\n \"intentExamples\": [\n \"add action\",\n \"action\",\n \"button\",\n \"icon action\"\n ],\n \"safetyNotes\": \"showIf deve ser objeto Json Logic quando informado. O placeholder textual e apenas molde de prompt; nao gere DSL textual nem publique string como contrato.\",\n \"patchTemplate\": {\n \"actions\": [\n {\n \"id\": \"{{target}}\",\n \"icon\": \"{{params.icon}}\",\n \"label\": \"{{value}}\",\n \"kind\": \"{{params.kind}}\",\n \"buttonVariant\": \"{{params.buttonVariant}}\",\n \"showIf\": \"{{params.showIf}}\"\n }\n ]\n }\n },\n {\n \"id\": \"action.label.set\",\n \"intentExamples\": [\n \"action label\",\n \"rename action\"\n ],\n \"patchTemplate\": {\n \"actions\": [\n {\n \"id\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"action.icon.set\",\n \"intentExamples\": [\n \"action icon\",\n \"icon\"\n ],\n \"patchTemplate\": {\n \"actions\": [\n {\n \"id\": \"{{target}}\",\n \"icon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"action.kind.set\",\n \"intentExamples\": [\n \"action kind\",\n \"button\",\n \"icon\"\n ],\n \"patchTemplate\": {\n \"actions\": [\n {\n \"id\": \"{{target}}\",\n \"kind\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"action.showIf.set\",\n \"intentExamples\": [\n \"visible when\",\n \"show if\",\n \"condition\"\n ],\n \"safetyNotes\": \"Forneca showIf como objeto Json Logic no contexto row, por exemplo {\\\"==\\\": [{\\\"var\\\": \\\"row.status\\\"}, \\\"done\\\"]}; nao use DSL textual.\",\n \"patchTemplate\": {\n \"actions\": [\n {\n \"id\": \"{{target}}\",\n \"showIf\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"ui.search.enable\",\n \"intentExamples\": [\n \"search\",\n \"enable search\",\n \"show search\"\n ],\n \"patchTemplate\": {\n \"ui\": {\n \"showSearch\": true\n }\n }\n },\n {\n \"id\": \"ui.search.disable\",\n \"intentExamples\": [\n \"search\",\n \"disable search\",\n \"hide search\"\n ],\n \"patchTemplate\": {\n \"ui\": {\n \"showSearch\": false\n }\n }\n },\n {\n \"id\": \"ui.searchField.set\",\n \"intentExamples\": [\n \"search field\",\n \"search by\"\n ],\n \"patchTemplate\": {\n \"ui\": {\n \"searchField\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"ui.sort.enable\",\n \"intentExamples\": [\n \"sort\",\n \"enable sort\",\n \"show sort\"\n ],\n \"patchTemplate\": {\n \"ui\": {\n \"showSort\": true\n }\n }\n },\n {\n \"id\": \"ui.sort.disable\",\n \"intentExamples\": [\n \"sort\",\n \"disable sort\",\n \"hide sort\"\n ],\n \"patchTemplate\": {\n \"ui\": {\n \"showSort\": false\n }\n }\n }\n ],\n \"fieldResolvers\": {\n \"actions[]\": [\n \"id\",\n \"label\"\n ],\n \"dataSource.resourcePath\": [],\n \"layout.groupBy\": [],\n \"ui.searchField\": [],\n \"selection.compareBy\": []\n }\n }\n}",
6568
- "sourcePointer": "praxis-ui-angular/projects/praxis-list/src/lib/ai/list-context-pack.ts",
6699
+ "sourcePointer": "projects/praxis-list/src/lib/ai/list-context-pack.ts",
6569
6700
  "contentHash": "8bdb741f84aababb9314db8b1b56377a1cccfc14b97dd664bf604e63a8532e7d",
6570
6701
  "sourceKind": "component_definition",
6571
6702
  "sourceId": "praxis-list",
@@ -6575,7 +6706,7 @@
6575
6706
  "chunkIndex": 4,
6576
6707
  "chunkKind": "recipe",
6577
6708
  "content": "{\n \"_comment\": \"Variacao cards + skin para o Praxis List (PraxisListConfig).\",\n \"templateMeta\": {\n \"registryKey\": \"praxis-list\",\n \"variantId\": \"cards\",\n \"useWhen\": \"List layout in cards mode with visual skin.\",\n \"examplePrompts\": [\n \"create a card list layout\",\n \"use cards view for the list\"\n ]\n },\n \"config\": {\n \"dataSource\": {\n \"resourcePath\": \"api/products\",\n \"query\": { \"status\": \"active\" },\n \"sort\": [\"updatedAt,desc\"]\n },\n \"layout\": {\n \"variant\": \"cards\",\n \"density\": \"compact\",\n \"lines\": 2,\n \"model\": \"media\",\n \"pageSize\": 12\n },\n \"skin\": {\n \"type\": \"glass\",\n \"radius\": \"16px\",\n \"backdropBlur\": \"10px\"\n },\n \"templating\": {\n \"leading\": { \"type\": \"image\", \"expr\": \"${item.coverUrl}\", \"imageAlt\": \"Capa\" },\n \"primary\": { \"type\": \"text\", \"expr\": \"${item.name}\" },\n \"secondary\": { \"type\": \"text\", \"expr\": \"${item.category}\" },\n \"meta\": { \"type\": \"date\", \"expr\": \"${item.updatedAt}|pt-BR:short\" },\n \"metaPlacement\": \"line\",\n \"metaPrefixIcon\": \"schedule\",\n \"trailing\": { \"type\": \"icon\", \"expr\": \"${item.status|map:active=check_circle,inactive=cancel,pending=hourglass_top}\" },\n \"statusPosition\": \"top-right\",\n \"iconColorMap\": {\n \"active\": \"primary\",\n \"inactive\": \"warn\",\n \"pending\": \"accent\"\n },\n \"features\": [\n { \"icon\": \"star\", \"expr\": \"Nota: ${item.rating|number:pt-BR}\" },\n { \"icon\": \"sell\", \"expr\": \"Preco: ${item.price|number:pt-BR}\" }\n ],\n \"featuresMode\": \"icons+labels\",\n \"emptyState\": { \"type\": \"text\", \"expr\": \"Nenhum produto encontrado\" },\n \"skeleton\": { \"count\": 6 }\n },\n \"actions\": [\n { \"id\": \"open\", \"label\": \"Abrir\", \"icon\": \"open_in_new\", \"kind\": \"button\", \"buttonVariant\": \"stroked\" },\n { \"id\": \"favorite\", \"label\": \"Favoritar\", \"icon\": \"favorite\", \"color\": \"accent\", \"kind\": \"icon\" }\n ],\n \"ui\": {\n \"showSearch\": true,\n \"searchField\": \"name\",\n \"searchPlaceholder\": \"Buscar produto\",\n \"showSort\": true,\n \"sortOptions\": [\n { \"label\": \"Recentes\", \"value\": \"updatedAt,desc\" },\n { \"label\": \"Preco (maior)\", \"value\": \"price,desc\" },\n { \"label\": \"Preco (menor)\", \"value\": \"price,asc\" }\n ],\n \"showRange\": true\n },\n \"i18n\": {\n \"locale\": \"pt-BR\",\n \"currency\": \"BRL\"\n },\n \"a11y\": {\n \"ariaLabel\": \"Lista de produtos em cards\"\n }\n }\n}\n",
6578
- "sourcePointer": "praxis-ui-angular/examples/ai-recipes/praxis-list-cards.json",
6709
+ "sourcePointer": "examples/ai-recipes/praxis-list-cards.json",
6579
6710
  "contentHash": "d0f64987a1c7373412933144f5f237ec26dce4c269c4a2ac58c78901dcfb7689",
6580
6711
  "sourceKind": "component_definition",
6581
6712
  "sourceId": "praxis-list",
@@ -6585,7 +6716,7 @@
6585
6716
  "chunkIndex": 5,
6586
6717
  "chunkKind": "recipe",
6587
6718
  "content": "{\n \"_comment\": \"Receita completa de configuração para o Praxis List baseada no PraxisListConfig real, com features + metaPlacement.\",\n \"templateMeta\": {\n \"registryKey\": \"praxis-list\",\n \"variantId\": \"base\",\n \"useWhen\": \"Base list configuration.\",\n \"examplePrompts\": [\n \"create a list with selection\",\n \"configure list layout and item templates\"\n ]\n },\n \"config\": {\n \"dataSource\": {\n \"resourcePath\": \"api/products\",\n \"sort\": [\"name,asc\"]\n },\n \"selection\": {\n \"mode\": \"multiple\",\n \"compareBy\": \"id\",\n \"return\": \"id\"\n },\n \"layout\": {\n \"variant\": \"list\",\n \"density\": \"comfortable\",\n \"lines\": 3,\n \"dividers\": \"between\",\n \"pageSize\": 20\n },\n \"templating\": {\n \"leading\": { \"type\": \"icon\", \"expr\": \"inventory_2\" },\n \"primary\": { \"type\": \"text\", \"expr\": \"${item.name}\" },\n \"secondary\": { \"type\": \"text\", \"expr\": \"${item.category}\" },\n \"meta\": { \"type\": \"date\", \"expr\": \"${item.updatedAt}|pt-BR:short\" },\n \"metaPlacement\": \"line\",\n \"metaPrefixIcon\": \"schedule\",\n \"trailing\": { \"type\": \"chip\", \"expr\": \"${item.status}\" },\n \"chipColorMap\": {\n \"active\": \"primary\",\n \"inactive\": \"warn\"\n },\n \"chipLabelMap\": {\n \"active\": \"Ativo\",\n \"inactive\": \"Inativo\"\n },\n \"features\": [\n { \"icon\": \"inventory_2\", \"expr\": \"Estoque: ${item.stock|number:pt-BR}\" },\n { \"icon\": \"local_shipping\", \"expr\": \"${item.shipping|map:free=Frete grátis,paid=Frete pago}\" }\n ],\n \"featuresVisible\": true,\n \"featuresMode\": \"icons+labels\",\n \"emptyState\": { \"type\": \"text\", \"expr\": \"Nenhum produto encontrado\" }\n },\n \"actions\": [\n { \"id\": \"edit\", \"label\": \"Editar\", \"icon\": \"edit\" },\n { \"id\": \"delete\", \"label\": \"Excluir\", \"icon\": \"delete\", \"color\": \"warn\" }\n ],\n \"ui\": {\n \"showSearch\": true,\n \"searchField\": \"name\",\n \"searchPlaceholder\": \"Buscar produto\",\n \"showSort\": true,\n \"sortOptions\": [\n { \"label\": \"Nome (A-Z)\", \"value\": \"name,asc\" },\n { \"label\": \"Nome (Z-A)\", \"value\": \"name,desc\" },\n { \"label\": \"Mais caros\", \"value\": \"price,desc\" }\n ],\n \"showRange\": true\n },\n \"i18n\": {\n \"locale\": \"pt-BR\",\n \"currency\": \"BRL\"\n },\n \"a11y\": {\n \"ariaLabel\": \"Lista de produtos\"\n }\n }\n}\n",
6588
- "sourcePointer": "praxis-ui-angular/examples/ai-recipes/praxis-list.json",
6719
+ "sourcePointer": "examples/ai-recipes/praxis-list.json",
6589
6720
  "contentHash": "7f58a26594c13b7b00d3b096e340e4b0abdf335579aea672b4c7650dc1d87d64",
6590
6721
  "sourceKind": "component_definition",
6591
6722
  "sourceId": "praxis-list",
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@praxisui/list",
3
- "version": "9.0.0-beta.71",
3
+ "version": "9.0.0-beta.73",
4
4
  "description": "List components and helpers for Praxis UI.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
8
  "@angular/material": "^21.0.0",
9
- "@praxisui/dynamic-fields": "^9.0.0-beta.71",
9
+ "@praxisui/dynamic-fields": "^9.0.0-beta.73",
10
10
  "rxjs": ">=7 <9",
11
11
  "@angular/forms": "^21.0.0",
12
12
  "@angular/router": "^21.0.0",
13
- "@praxisui/ai": "^9.0.0-beta.71",
14
- "@praxisui/core": "^9.0.0-beta.71",
15
- "@praxisui/rich-content": "^9.0.0-beta.71",
16
- "@praxisui/settings-panel": "^9.0.0-beta.71"
13
+ "@praxisui/ai": "^9.0.0-beta.73",
14
+ "@praxisui/core": "^9.0.0-beta.73",
15
+ "@praxisui/rich-content": "^9.0.0-beta.73",
16
+ "@praxisui/settings-panel": "^9.0.0-beta.73"
17
17
  },
18
18
  "dependencies": {
19
19
  "tslib": "^2.3.0",