@praxisui/settings-panel 9.0.0-beta.86 → 9.0.0-beta.88

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-22T03:01:56.888Z",
3
+ "generatedAt": "2026-07-23T02:50:28.389Z",
4
4
  "packageName": "@praxisui/settings-panel",
5
- "packageVersion": "9.0.0-beta.86",
5
+ "packageVersion": "9.0.0-beta.88",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 1,
@@ -421,6 +421,37 @@
421
421
  "config.id",
422
422
  "persistSizeKey"
423
423
  ],
424
+ "inputSchema": {
425
+ "type": "object",
426
+ "minProperties": 1,
427
+ "properties": {
428
+ "width": {
429
+ "oneOf": [
430
+ {
431
+ "type": "string"
432
+ },
433
+ {
434
+ "type": "number"
435
+ }
436
+ ]
437
+ },
438
+ "minWidth": {
439
+ "type": "string"
440
+ },
441
+ "maxWidth": {
442
+ "type": "string"
443
+ },
444
+ "resizable": {
445
+ "type": "boolean"
446
+ },
447
+ "persistSizeKey": {
448
+ "type": "string"
449
+ },
450
+ "expanded": {
451
+ "type": "boolean"
452
+ }
453
+ }
454
+ },
424
455
  "failureModes": [
425
456
  "invalid-css-size",
426
457
  "min-width-greater-than-max-width",
@@ -500,6 +531,27 @@
500
531
  "config.id",
501
532
  "provider.getSettingsValue"
502
533
  ],
534
+ "inputSchema": {
535
+ "type": "object",
536
+ "minProperties": 1,
537
+ "properties": {
538
+ "requireDirty": {
539
+ "type": "boolean"
540
+ },
541
+ "requireValid": {
542
+ "type": "boolean"
543
+ },
544
+ "blockWhileBusy": {
545
+ "type": "boolean"
546
+ },
547
+ "useProviderHook": {
548
+ "type": "boolean"
549
+ },
550
+ "closeAfterSave": {
551
+ "type": "boolean"
552
+ }
553
+ }
554
+ },
503
555
  "failureModes": [
504
556
  "provider-missing-get-settings-value",
505
557
  "apply-while-invalid",
@@ -540,6 +592,27 @@
540
592
  "ambiguityPolicy": "fail",
541
593
  "required": false
542
594
  },
595
+ "inputSchema": {
596
+ "type": "object",
597
+ "minProperties": 1,
598
+ "properties": {
599
+ "requireDirty": {
600
+ "type": "boolean"
601
+ },
602
+ "requireValid": {
603
+ "type": "boolean"
604
+ },
605
+ "blockWhileBusy": {
606
+ "type": "boolean"
607
+ },
608
+ "useProviderHook": {
609
+ "type": "boolean"
610
+ },
611
+ "closeAfterSave": {
612
+ "type": "boolean"
613
+ }
614
+ }
615
+ },
543
616
  "effects": [
544
617
  {
545
618
  "kind": "compile-domain-patch",
@@ -560,6 +633,27 @@
560
633
  "config.id",
561
634
  "provider.onSave"
562
635
  ],
636
+ "inputSchema": {
637
+ "type": "object",
638
+ "minProperties": 1,
639
+ "properties": {
640
+ "requireDirty": {
641
+ "type": "boolean"
642
+ },
643
+ "requireValid": {
644
+ "type": "boolean"
645
+ },
646
+ "blockWhileBusy": {
647
+ "type": "boolean"
648
+ },
649
+ "useProviderHook": {
650
+ "type": "boolean"
651
+ },
652
+ "closeAfterSave": {
653
+ "type": "boolean"
654
+ }
655
+ }
656
+ },
563
657
  "failureModes": [
564
658
  "save-while-invalid",
565
659
  "save-while-busy",
@@ -732,6 +826,28 @@
732
826
  "componentId",
733
827
  "configManifestComponentId"
734
828
  ],
829
+ "inputSchema": {
830
+ "type": "object",
831
+ "required": [
832
+ "componentId"
833
+ ],
834
+ "properties": {
835
+ "componentId": {
836
+ "type": "string"
837
+ },
838
+ "inputs": {
839
+ "type": "object"
840
+ },
841
+ "configManifestComponentId": {
842
+ "type": "string"
843
+ },
844
+ "editorContract": {
845
+ "enum": [
846
+ "SettingsValueProvider"
847
+ ]
848
+ }
849
+ }
850
+ },
735
851
  "failureModes": [
736
852
  "editor-component-not-registered",
737
853
  "settings-value-provider-missing",
@@ -1111,6 +1227,86 @@
1111
1227
  {
1112
1228
  "chunkIndex": 2,
1113
1229
  "chunkKind": "authoring_manifest",
1230
+ "content": "{\"operationId\":\"panel.shell.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure panel shell identity Effects: merge-object.\",\"scope\":\"global\",\"target\":{\"kind\":\"panelShell\",\"resolver\":\"settings-panel-config-root\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"id\",\"title\",\"titleIcon\"],\"semanticTerms\":[\"id\",\"title\",\"titleIcon\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"config.id\",\"config.title\",\"config.titleIcon\"],\"validators\":[{\"validatorId\":\"panel-id-stable\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_ID_STABLE\",\"description\":\"Panel id must remain stable for replacement, persistence and diagnostics.\"},{\"validatorId\":\"title-i18n-compatible\",\"level\":\"warning\",\"code\":\"SETTINGS_PANEL_TITLE_I18N_COMPATIBLE\",\"description\":\"Authoring chrome text must remain compatible with the settings panel i18n namespace.\"},{\"validatorId\":\"settings-panel-round-trip\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_ROUND_TRIP\",\"description\":\"Open, edit, apply, save, reset and reopen must preserve the shell protocol without mutating consumer config semantics.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
1231
+ "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1232
+ "contentHash": "89428a8556b36f13de7e1ab4aa488d313313d5bac3897048acf726dac5f9ed66",
1233
+ "sourceKind": "component_definition",
1234
+ "sourceId": "praxis-settings-panel",
1235
+ "corpusVersion": "1.0.0"
1236
+ },
1237
+ {
1238
+ "chunkIndex": 3,
1239
+ "chunkKind": "authoring_manifest",
1240
+ "content": "{\"operationId\":\"panel.openMode.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set panel open mode Effects: merge-object. Open this settings panel expanded.\",\"scope\":\"global\",\"target\":{\"kind\":\"openMode\",\"resolver\":\"settings-panel-open-mode\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"expanded\",\"replacementPolicy\"],\"semanticTerms\":[\"expanded\",\"replacementPolicy\",\"consult-current-editor\",\"reject-when-dirty\",\"force-close-disallowed\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"config.expanded\"],\"validators\":[{\"validatorId\":\"replacement-mediates-before-close\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_REPLACEMENT_MEDIATES_CLOSE\",\"description\":\"Opening a replacement panel must consult the current editor onBeforeClose before closing.\"},{\"validatorId\":\"settings-panel-round-trip\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_ROUND_TRIP\",\"description\":\"Open, edit, apply, save, reset and reopen must preserve the shell protocol without mutating consumer config semantics.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"start-expanded\",\"request\":\"Open this settings panel expanded.\",\"operationId\":\"panel.openMode.set\",\"params\":{\"expanded\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
1241
+ "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1242
+ "contentHash": "14ea4ece5b05c8c1418a1ef80723f34b9677c5d9a5c011cf42d67234d23fc031",
1243
+ "sourceKind": "component_definition",
1244
+ "sourceId": "praxis-settings-panel",
1245
+ "corpusVersion": "1.0.0"
1246
+ },
1247
+ {
1248
+ "chunkIndex": 4,
1249
+ "chunkKind": "authoring_manifest",
1250
+ "content": "{\"operationId\":\"panel.size.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set panel size and resize policy Effects: compile-domain-patch. Make the settings drawer resizable between 420px and 960px.\",\"scope\":\"layout\",\"target\":{\"kind\":\"panelSize\",\"resolver\":\"settings-panel-size-and-resize\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"width\",\"minWidth\",\"maxWidth\",\"resizable\",\"persistSizeKey\",\"expanded\"],\"semanticTerms\":[\"width\",\"minWidth\",\"maxWidth\",\"resizable\",\"persistSizeKey\",\"expanded\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"config.minWidth\",\"config.maxWidth\",\"config.resizable\",\"config.persistSizeKey\",\"runtime.width\"],\"validators\":[{\"validatorId\":\"panel-size-safe\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_SIZE_SAFE\",\"description\":\"Panel sizes must be finite numbers or safe CSS size strings.\"},{\"validatorId\":\"panel-min-max-consistent\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_MIN_MAX_CONSISTENT\",\"description\":\"Minimum width must not exceed maximum width.\"},{\"validatorId\":\"resize-persistence-explicit\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_RESIZE_PERSISTENCE_EXPLICIT\",\"description\":\"Persisted resize must use a stable persistSizeKey or be explicitly transient.\"},{\"validatorId\":\"settings-panel-round-trip\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_ROUND_TRIP\",\"description\":\"Open, edit, apply, save, reset and reopen must preserve the shell protocol without mutating consumer config semantics.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-resizable-width\",\"request\":\"Make the settings drawer resizable between 420px and 960px.\",\"operationId\":\"panel.size.set\",\"params\":{\"resizable\":true,\"minWidth\":\"420px\",\"maxWidth\":\"960px\",\"persistSizeKey\":\"settings-panel:orders\"},\"isPositive\":true}],\"negativeExamples\":[]}",
1251
+ "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1252
+ "contentHash": "1f82d6984412e6bb8397657fcbde973779ebb810478279c1f45e0e0d57f21983",
1253
+ "sourceKind": "component_definition",
1254
+ "sourceId": "praxis-settings-panel",
1255
+ "corpusVersion": "1.0.0"
1256
+ },
1257
+ {
1258
+ "chunkIndex": 5,
1259
+ "chunkKind": "authoring_manifest",
1260
+ "content": "{\"operationId\":\"panel.applyBehavior.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set apply behavior Effects: compile-domain-patch. Apply the editor change without saving or closing.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"applyBehavior\",\"resolver\":\"settings-value-provider-apply-contract\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"requireDirty\",\"requireValid\",\"blockWhileBusy\",\"useProviderHook\",\"closeAfterSave\"],\"semanticTerms\":[\"requireDirty\",\"requireValid\",\"blockWhileBusy\",\"useProviderHook\",\"closeAfterSave\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"provider.isDirty$\",\"provider.isValid$\",\"provider.isBusy$\",\"ref.applied$\"],\"validators\":[{\"validatorId\":\"apply-requires-provider-value\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_APPLY_REQUIRES_PROVIDER_VALUE\",\"description\":\"Apply must obtain payloads from SettingsValueProvider.getSettingsValue().\"},{\"validatorId\":\"dirty-valid-busy-gates-preserved\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_STATE_GATES_PRESERVED\",\"description\":\"Apply and Save remain gated by dirty, valid and busy state.\"},{\"validatorId\":\"apply-does-not-close-panel\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_APPLY_DOES_NOT_CLOSE\",\"description\":\"Apply emits preview payloads without closing the panel.\"},{\"validatorId\":\"settings-panel-round-trip\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_ROUND_TRIP\",\"description\":\"Open, edit, apply, save, reset and reopen must preserve the shell protocol without mutating consumer config semantics.\"}],\"preconditions\":[\"settings-value-provider-attached\"],\"submissionImpact\":\"none\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"apply-preview\",\"request\":\"Apply the editor change without saving or closing.\",\"operationId\":\"panel.applyBehavior.set\",\"params\":{\"requireDirty\":true,\"requireValid\":true,\"blockWhileBusy\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
1261
+ "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1262
+ "contentHash": "85cb6bfebc2f996189efa526f433cb53a93d047bc83e7d4b7f6b21f948fae9ea",
1263
+ "sourceKind": "component_definition",
1264
+ "sourceId": "praxis-settings-panel",
1265
+ "corpusVersion": "1.0.0"
1266
+ },
1267
+ {
1268
+ "chunkIndex": 6,
1269
+ "chunkKind": "authoring_manifest",
1270
+ "content": "{\"operationId\":\"panel.saveBehavior.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set save behavior Effects: compile-domain-patch. Save this editor value and close the panel.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"saveBehavior\",\"resolver\":\"settings-value-provider-save-contract\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"requireDirty\",\"requireValid\",\"blockWhileBusy\",\"useProviderHook\",\"closeAfterSave\"],\"semanticTerms\":[\"requireDirty\",\"requireValid\",\"blockWhileBusy\",\"useProviderHook\",\"closeAfterSave\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"provider.onSave\",\"provider.getSettingsValue\",\"ref.saved$\",\"ref.closed$\"],\"validators\":[{\"validatorId\":\"save-prefers-provider-hook\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_SAVE_PREFERS_PROVIDER_HOOK\",\"description\":\"Save must call onSave when provided before falling back to getSettingsValue().\"},{\"validatorId\":\"save-fallback-value-preserved\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_SAVE_FALLBACK_PRESERVED\",\"description\":\"Save fallback must preserve getSettingsValue payload semantics.\"},{\"validatorId\":\"save-closes-with-save-reason\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_SAVE_CLOSE_REASON\",\"description\":\"Successful save must emit saved$ and close with reason save.\"},{\"validatorId\":\"dirty-valid-busy-gates-preserved\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_STATE_GATES_PRESERVED\",\"description\":\"Apply and Save remain gated by dirty, valid and busy state.\"}],\"preconditions\":[\"settings-value-provider-attached\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"save-and-close\",\"request\":\"Save this editor value and close the panel.\",\"operationId\":\"panel.saveBehavior.set\",\"params\":{\"requireDirty\":true,\"requireValid\":true,\"blockWhileBusy\":true,\"useProviderHook\":true,\"closeAfterSave\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
1271
+ "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1272
+ "contentHash": "2f27aa3b25dcf4709e5000cb26ee7c77ea0f1319ee101e7bf7c60485ba1f916a",
1273
+ "sourceKind": "component_definition",
1274
+ "sourceId": "praxis-settings-panel",
1275
+ "corpusVersion": "1.0.0"
1276
+ },
1277
+ {
1278
+ "chunkIndex": 7,
1279
+ "chunkKind": "authoring_manifest",
1280
+ "content": "{\"operationId\":\"panel.resetBehavior.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set reset behavior Effects: compile-domain-patch. Reset this editor to its original value. Reset the editor immediately without confirmation.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"resetBehavior\",\"resolver\":\"settings-value-provider-reset-contract\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"requireConfirmation\",\"callProviderReset\",\"emitResetEvent\",\"clearSavedStatus\"],\"semanticTerms\":[\"requireConfirmation\",\"callProviderReset\",\"emitResetEvent\",\"clearSavedStatus\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"provider.reset\",\"ref.reset$\",\"panel.lastSavedAt\"],\"validators\":[{\"validatorId\":\"reset-requires-confirmation\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_RESET_REQUIRES_CONFIRMATION\",\"description\":\"Reset is destructive and must remain confirmed before provider reset is called.\"},{\"validatorId\":\"reset-calls-provider-reset\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_RESET_CALLS_PROVIDER\",\"description\":\"Reset must call the hosted provider reset hook when present.\"},{\"validatorId\":\"reset-event-emitted\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_RESET_EVENT_EMITTED\",\"description\":\"Reset must emit SettingsPanelRef.reset$ so hosts can coordinate state.\"},{\"validatorId\":\"settings-panel-round-trip\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_ROUND_TRIP\",\"description\":\"Open, edit, apply, save, reset and reopen must preserve the shell protocol without mutating consumer config semantics.\"}],\"preconditions\":[\"settings-value-provider-attached\",\"confirmation-collected\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"reset-to-original\",\"request\":\"Reset this editor to its original value.\",\"operationId\":\"panel.resetBehavior.set\",\"params\":{\"requireConfirmation\":true,\"callProviderReset\":true,\"emitResetEvent\":true},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-reset-without-confirmation\",\"request\":\"Reset the editor immediately without confirmation.\",\"operationId\":\"panel.resetBehavior.set\",\"params\":{\"requireConfirmation\":false,\"callProviderReset\":true},\"isPositive\":false}]}",
1281
+ "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1282
+ "contentHash": "56f022761bfe31e2068521ad5b3fe9c3ec36d07f6ee4a2d7b00b8daf340eb0f6",
1283
+ "sourceKind": "component_definition",
1284
+ "sourceId": "praxis-settings-panel",
1285
+ "corpusVersion": "1.0.0"
1286
+ },
1287
+ {
1288
+ "chunkIndex": 8,
1289
+ "chunkKind": "authoring_manifest",
1290
+ "content": "{\"operationId\":\"editor.host.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure hosted editor Effects: compile-domain-patch. Open the table settings editor in the settings panel. Use settings-panel to rename a table column directly. Host a component that has no dirty, valid, busy or getSettingsValue contract.\",\"scope\":\"templating\",\"target\":{\"kind\":\"editorHost\",\"resolver\":\"settings-panel-editor-host\",\"required\":true},\"inputContract\":{\"required\":[\"componentId\"],\"properties\":[\"componentId\",\"inputs\",\"configManifestComponentId\",\"editorContract\"],\"semanticTerms\":[\"componentId\",\"inputs\",\"configManifestComponentId\",\"editorContract\",\"SettingsValueProvider\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"config.content.component\",\"config.content.inputs\",\"delegatedConsumerPatch\"],\"validators\":[{\"validatorId\":\"editor-component-registered\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_EDITOR_REGISTERED\",\"description\":\"Hosted editor component must resolve from governed component metadata or host registration.\"},{\"validatorId\":\"settings-value-provider-contract-present\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_PROVIDER_CONTRACT_PRESENT\",\"description\":\"Hosted authoring editors must implement SettingsValueProvider state and value contract.\"},{\"validatorId\":\"consumer-config-delegated\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_CONSUMER_CONFIG_DELEGATED\",\"description\":\"Consumer-specific config operations must delegate to the owning component manifest.\"},{\"validatorId\":\"editor-inputs-serializable\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_EDITOR_INPUTS_SERIALIZABLE\",\"description\":\"Persisted editor host inputs must be serializable safe values.\"}],\"preconditions\":[\"component-metadata-resolved\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"open-component-editor\",\"request\":\"Open the table settings editor in the settings panel.\",\"operationId\":\"editor.host.configure\",\"params\":{\"componentId\":\"praxis-table\",\"inputs\":{\"tableId\":\"orders\"},\"configManifestComponentId\":\"praxis-table\",\"editorContract\":\"SettingsValueProvider\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-table-column-direct-edit\",\"request\":\"Use settings-panel to rename a table column directly.\",\"operationId\":\"editor.host.configure\",\"params\":{\"componentId\":\"praxis-settings-panel\",\"inputs\":{\"columns\":[{\"field\":\"name\",\"label\":\"Name\"}]}},\"isPositive\":false},{\"id\":\"reject-missing-provider\",\"request\":\"Host a component that has no dirty, valid, busy or getSettingsValue contract.\",\"operationId\":\"editor.host.configure\",\"params\":{\"componentId\":\"plain-info-card\"},\"isPositive\":false}]}",
1291
+ "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1292
+ "contentHash": "c8d462760a6bd9a86f89e0856c2395b58dc314f8a10f8571168ba02cf20add9e",
1293
+ "sourceKind": "component_definition",
1294
+ "sourceId": "praxis-settings-panel",
1295
+ "corpusVersion": "1.0.0"
1296
+ },
1297
+ {
1298
+ "chunkIndex": 9,
1299
+ "chunkKind": "authoring_manifest",
1300
+ "content": "{\"operationId\":\"diagnostics.visibility.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set panel diagnostics visibility Effects: merge-object. Show why Apply and Save are disabled while the editor is busy.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"diagnostics\",\"resolver\":\"settings-panel-state-diagnostics\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"showStatusMessage\",\"showDisabledReason\",\"showBusyState\",\"exposeValidationState\"],\"semanticTerms\":[\"showStatusMessage\",\"showDisabledReason\",\"showBusyState\",\"exposeValidationState\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"config.diagnostics.showStatusMessage\",\"config.diagnostics.showDisabledReason\",\"config.diagnostics.showBusyState\",\"config.diagnostics.exposeValidationState\",\"panel.statusMessage\",\"panel.disabledReason\",\"panel.isDirty\",\"panel.isValid\",\"panel.isBusy\"],\"validators\":[{\"validatorId\":\"diagnostics-follow-provider-state\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_DIAGNOSTICS_PROVIDER_STATE\",\"description\":\"Diagnostics must reflect provider dirty, valid and busy state.\"},{\"validatorId\":\"diagnostics-i18n-compatible\",\"level\":\"warning\",\"code\":\"SETTINGS_PANEL_DIAGNOSTICS_I18N_COMPATIBLE\",\"description\":\"Diagnostics copy must use the settings panel i18n namespace.\"},{\"validatorId\":\"busy-valid-dirty-visible-when-needed\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_STATE_VISIBLE\",\"description\":\"Busy, invalid and dirty states must remain visible or explain disabled actions.\"},{\"validatorId\":\"settings-panel-round-trip\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_ROUND_TRIP\",\"description\":\"Open, edit, apply, save, reset and reopen must preserve the shell protocol without mutating consumer config semantics.\"}],\"preconditions\":[\"settings-value-provider-attached\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"show-busy-diagnostics\",\"request\":\"Show why Apply and Save are disabled while the editor is busy.\",\"operationId\":\"diagnostics.visibility.set\",\"params\":{\"showStatusMessage\":true,\"showDisabledReason\":true,\"showBusyState\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
1301
+ "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1302
+ "contentHash": "e9c483a80b2b71a732fdcd0d958aeae41f71ba63a46e2ae1f752ac299ee7d6c0",
1303
+ "sourceKind": "component_definition",
1304
+ "sourceId": "praxis-settings-panel",
1305
+ "corpusVersion": "1.0.0"
1306
+ },
1307
+ {
1308
+ "chunkIndex": 10,
1309
+ "chunkKind": "authoring_manifest",
1114
1310
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"identity\"}",
1115
1311
  "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1116
1312
  "contentHash": "8d76070d6c2614cc589bf54fab458fb43613f9edc2b8d3dc2d7e6cadf26530f7",
@@ -1119,7 +1315,7 @@
1119
1315
  "corpusVersion": "1.0.0"
1120
1316
  },
1121
1317
  {
1122
- "chunkIndex": 3,
1318
+ "chunkIndex": 11,
1123
1319
  "chunkKind": "authoring_manifest",
1124
1320
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"config\",\"type\":\"SettingsPanelConfig\",\"description\":\"Canonical settings panel shell config passed to SettingsPanelService.open.\"},{\"name\":\"config.diagnostics\",\"type\":\"SettingsPanelDiagnosticsConfig\",\"description\":\"Optional shell diagnostics visibility config for status, disabled reason, busy state and validation state.\"},{\"name\":\"content.component\",\"type\":\"Type<SettingsValueProvider>\",\"description\":\"Standalone editor component hosted inside the authoring shell.\"},{\"name\":\"content.inputs\",\"type\":\"Record<string, unknown>\",\"description\":\"Initial editor inputs owned by the consumer component manifest.\"},{\"name\":\"ref\",\"type\":\"SettingsPanelRef\",\"description\":\"Panel ref that emits applied, saved, reset, closed and sizeChanged events.\"},{\"name\":\"provider\",\"type\":\"SettingsValueProvider\",\"description\":\"Editor protocol for dirty, valid, busy, getSettingsValue, onSave, reset and close hooks.\"}]}",
1125
1321
  "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
@@ -1129,7 +1325,7 @@
1129
1325
  "corpusVersion": "1.0.0"
1130
1326
  },
1131
1327
  {
1132
- "chunkIndex": 4,
1328
+ "chunkIndex": 12,
1133
1329
  "chunkKind": "authoring_manifest",
1134
1330
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"panelShell\",\"resolver\":\"settings-panel-config-root\",\"description\":\"Top-level shell identity and title fields owned by SettingsPanelConfig.\"},{\"kind\":\"openMode\",\"resolver\":\"settings-panel-open-mode\",\"description\":\"Initial expanded state, replacement mediation and close behavior for an authoring panel.\"},{\"kind\":\"panelSize\",\"resolver\":\"settings-panel-size-and-resize\",\"description\":\"Width, min/max width, resize enablement and persisted size key.\"},{\"kind\":\"applyBehavior\",\"resolver\":\"settings-value-provider-apply-contract\",\"description\":\"Apply availability and payload emission through getSettingsValue().\"},{\"kind\":\"saveBehavior\",\"resolver\":\"settings-value-provider-save-contract\",\"description\":\"Save availability, onSave fallback and close-after-save behavior.\"},{\"kind\":\"resetBehavior\",\"resolver\":\"settings-value-provider-reset-contract\",\"description\":\"Reset confirmation, provider reset hook and reset event emission.\"},{\"kind\":\"editorHost\",\"resolver\":\"settings-panel-editor-host\",\"description\":\"Hosted editor component and serializable input envelope.\"},{\"kind\":\"diagnostics\",\"resolver\":\"settings-panel-state-diagnostics\",\"description\":\"Dirty, valid, busy, disabled reason and status message visibility.\"}]}",
1135
1331
  "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
@@ -1139,27 +1335,27 @@
1139
1335
  "corpusVersion": "1.0.0"
1140
1336
  },
1141
1337
  {
1142
- "chunkIndex": 5,
1338
+ "chunkIndex": 13,
1143
1339
  "chunkKind": "authoring_manifest",
1144
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"panel.shell.configure\",\"title\":\"Configure panel shell identity\",\"scope\":\"global\",\"targetKind\":\"panelShell\",\"target\":{\"kind\":\"panelShell\",\"resolver\":\"settings-panel-config-root\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"id\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"titleIcon\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"config\"}],\"validators\":[\"panel-id-stable\",\"title-i18n-compatible\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"config.id\",\"config.title\",\"config.titleIcon\"],\"submissionImpact\":\"config-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"panel.openMode.set\",\"title\":\"Set panel open mode\",\"scope\":\"global\",\"targetKind\":\"openMode\",\"target\":{\"kind\":\"openMode\",\"resolver\":\"settings-panel-open-mode\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"expanded\":{\"type\":\"boolean\"},\"replacementPolicy\":{\"enum\":[\"consult-current-editor\",\"reject-when-dirty\",\"force-close-disallowed\"]}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"config\"}],\"validators\":[\"replacement-mediates-before-close\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"config.expanded\"],\"submissionImpact\":\"config-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"panel.size.set\",\"title\":\"Set panel size and resize policy\",\"scope\":\"layout\",\"targetKind\":\"panelSize\",\"target\":{\"kind\":\"panelSize\",\"resolver\":\"settings-panel-size-and-resize\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"width\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"number\"}]},\"minWidth\":{\"type\":\"string\"},\"maxWidth\":{\"type\":\"string\"},\"resizable\":{\"type\":\"boolean\"},\"persistSizeKey\":{\"type\":\"string\"},\"expanded\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-size-set\",\"handlerContract\":{\"reads\":[\"SettingsPanelConfig\",\"SettingsPanelRef.sizeChanged$\",\"persistSizeKey\"],\"writes\":[\"config.minWidth\",\"config.maxWidth\",\"config.resizable\",\"config.persistSizeKey\",\"runtime.size\"],\"identityKeys\":[\"config.id\",\"persistSizeKey\"],\"failureModes\":[\"invalid-css-size\",\"min-width-greater-than-max-width\",\"persist-size-key-missing-for-persistence\"],\"description\":\"Applies shell size configuration and open-panel width changes through SettingsPanelRef.updateSize without changing hosted editor config semantics.\"}}],\"validators\":[\"panel-size-safe\",\"panel-min-max-consistent\",\"resize-persistence-explicit\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"config.minWidth\",\"config.maxWidth\",\"config.resizable\",\"config.persistSizeKey\",\"runtime.width\"],\"submissionImpact\":\"visual-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"panel.applyBehavior.set\",\"title\":\"Set apply behavior\",\"scope\":\"interaction\",\"targetKind\":\"applyBehavior\",\"target\":{\"kind\":\"applyBehavior\",\"resolver\":\"settings-value-provider-apply-contract\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"requireDirty\":{\"type\":\"boolean\"},\"requireValid\":{\"type\":\"boolean\"},\"blockWhileBusy\":{\"type\":\"boolean\"},\"useProviderHook\":{\"type\":\"boolean\"},\"closeAfterSave\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-apply-behavior-set\",\"handlerContract\":{\"reads\":[\"SettingsValueProvider.isDirty$\",\"SettingsValueProvider.isValid$\",\"SettingsValueProvider.isBusy$\",\"SettingsValueProvider.getSettingsValue\"],\"writes\":[\"SettingsPanelRef.applied$\"],\"identityKeys\":[\"config.id\",\"provider.getSettingsValue\"],\"failureModes\":[\"provider-missing-get-settings-value\",\"apply-while-invalid\",\"apply-while-busy\",\"apply-without-dirty-state\"],\"description\":\"Keeps Apply gated by dirty, valid and busy state and emits the provider value through SettingsPanelRef.applied$.\"}}],\"validators\":[\"apply-requires-provider-value\",\"dirty-valid-busy-gates-preserved\",\"apply-does-not-close-panel\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"provider.isDirty$\",\"provider.isValid$\",\"provider.isBusy$\",\"ref.applied$\"],\"submissionImpact\":\"none\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"settings-value-provider-attached\"]},{\"operationId\":\"panel.saveBehavior.set\",\"title\":\"Set save behavior\",\"scope\":\"interaction\",\"targetKind\":\"saveBehavior\",\"target\":{\"kind\":\"saveBehavior\",\"resolver\":\"settings-value-provider-save-contract\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-save-behavior-set\",\"handlerContract\":{\"reads\":[\"SettingsValueProvider.onSave\",\"SettingsValueProvider.getSettingsValue\",\"SettingsValueProvider.isDirty$\",\"SettingsValueProvider.isValid$\",\"SettingsValueProvider.isBusy$\"],\"writes\":[\"SettingsPanelRef.saved$\",\"SettingsPanelRef.closed$\"],\"identityKeys\":[\"config.id\",\"provider.onSave\"],\"failureModes\":[\"save-while-invalid\",\"save-while-busy\",\"save-result-undefined\",\"provider-save-rejected\"],\"description\":\"Keeps Save gated by dirty, valid and busy state, prefers onSave when present, falls back to getSettingsValue and closes with reason save.\"}}],\"validators\":[\"save-prefers-provider-hook\",\"save-fallback-value-preserved\",\"save-closes-with-save-reason\",\"dirty-valid-busy-gates-preserved\"],\"affectedPaths\":[\"provider.onSave\",\"provider.getSettingsValue\",\"ref.saved$\",\"ref.closed$\"],\"submissionImpact\":\"config-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"settings-value-provider-attached\"]},{\"operationId\":\"panel.resetBehavior.set\",\"title\":\"Set reset behavior\",\"scope\":\"interaction\",\"targetKind\":\"resetBehavior\",\"target\":{\"kind\":\"resetBehavior\",\"resolver\":\"settings-value-provider-reset-contract\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"requireConfirmation\":{\"type\":\"boolean\"},\"callProviderReset\":{\"type\":\"boolean\"},\"emitResetEvent\":{\"type\":\"boolean\"},\"clearSavedStatus\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-reset-behavior-set\",\"handlerContract\":{\"reads\":[\"SettingsValueProvider.reset\",\"SettingsPanelRef.reset$\",\"ConfirmDialogComponent\"],\"writes\":[\"provider.reset()\",\"SettingsPanelRef.reset$\",\"panel.lastSavedAt\"],\"identityKeys\":[\"config.id\",\"provider.reset\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"requireConfirmation\":{\"type\":\"boolean\"},\"callProviderReset\":{\"type\":\"boolean\"},\"emitResetEvent\":{\"type\":\"boolean\"}}},\"failureModes\":[\"reset-confirmation-missing\",\"provider-reset-failed\",\"reset-event-not-emitted\"],\"description\":\"Preserves Reset as a confirmed shell action that calls the provider reset hook and emits SettingsPanelRef.reset$.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"reset-requires-confirmation\",\"reset-calls-provider-reset\",\"reset-event-emitted\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"provider.reset\",\"ref.reset$\",\"panel.lastSavedAt\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"settings-value-provider-attached\",\"confirmation-collected\"]}]}",
1340
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"panel.shell.configure\",\"title\":\"Configure panel shell identity\",\"scope\":\"global\",\"targetKind\":\"panelShell\",\"target\":{\"kind\":\"panelShell\",\"resolver\":\"settings-panel-config-root\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"id\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"titleIcon\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"config\"}],\"validators\":[\"panel-id-stable\",\"title-i18n-compatible\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"config.id\",\"config.title\",\"config.titleIcon\"],\"submissionImpact\":\"config-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"panel.openMode.set\",\"title\":\"Set panel open mode\",\"scope\":\"global\",\"targetKind\":\"openMode\",\"target\":{\"kind\":\"openMode\",\"resolver\":\"settings-panel-open-mode\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"expanded\":{\"type\":\"boolean\"},\"replacementPolicy\":{\"enum\":[\"consult-current-editor\",\"reject-when-dirty\",\"force-close-disallowed\"]}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"config\"}],\"validators\":[\"replacement-mediates-before-close\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"config.expanded\"],\"submissionImpact\":\"config-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"panel.size.set\",\"title\":\"Set panel size and resize policy\",\"scope\":\"layout\",\"targetKind\":\"panelSize\",\"target\":{\"kind\":\"panelSize\",\"resolver\":\"settings-panel-size-and-resize\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"width\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"number\"}]},\"minWidth\":{\"type\":\"string\"},\"maxWidth\":{\"type\":\"string\"},\"resizable\":{\"type\":\"boolean\"},\"persistSizeKey\":{\"type\":\"string\"},\"expanded\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-size-set\",\"handlerContract\":{\"reads\":[\"SettingsPanelConfig\",\"SettingsPanelRef.sizeChanged$\",\"persistSizeKey\"],\"writes\":[\"config.minWidth\",\"config.maxWidth\",\"config.resizable\",\"config.persistSizeKey\",\"runtime.size\"],\"identityKeys\":[\"config.id\",\"persistSizeKey\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"width\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"number\"}]},\"minWidth\":{\"type\":\"string\"},\"maxWidth\":{\"type\":\"string\"},\"resizable\":{\"type\":\"boolean\"},\"persistSizeKey\":{\"type\":\"string\"},\"expanded\":{\"type\":\"boolean\"}}},\"failureModes\":[\"invalid-css-size\",\"min-width-greater-than-max-width\",\"persist-size-key-missing-for-persistence\"],\"description\":\"Applies shell size configuration and open-panel width changes through SettingsPanelRef.updateSize without changing hosted editor config semantics.\"}}],\"validators\":[\"panel-size-safe\",\"panel-min-max-consistent\",\"resize-persistence-explicit\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"config.minWidth\",\"config.maxWidth\",\"config.resizable\",\"config.persistSizeKey\",\"runtime.width\"],\"submissionImpact\":\"visual-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"panel.applyBehavior.set\",\"title\":\"Set apply behavior\",\"scope\":\"interaction\",\"targetKind\":\"applyBehavior\",\"target\":{\"kind\":\"applyBehavior\",\"resolver\":\"settings-value-provider-apply-contract\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"requireDirty\":{\"type\":\"boolean\"},\"requireValid\":{\"type\":\"boolean\"},\"blockWhileBusy\":{\"type\":\"boolean\"},\"useProviderHook\":{\"type\":\"boolean\"},\"closeAfterSave\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-apply-behavior-set\",\"handlerContract\":{\"reads\":[\"SettingsValueProvider.isDirty$\",\"SettingsValueProvider.isValid$\",\"SettingsValueProvider.isBusy$\",\"SettingsValueProvider.getSettingsValue\"],\"writes\":[\"SettingsPanelRef.applied$\"],\"identityKeys\":[\"config.id\",\"provider.getSettingsValue\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"requireDirty\":{\"type\":\"boolean\"},\"requireValid\":{\"type\":\"boolean\"},\"blockWhileBusy\":{\"type\":\"boolean\"},\"useProviderHook\":{\"type\":\"boolean\"},\"closeAfterSave\":{\"type\":\"boolean\"}}},\"failureModes\":[\"provider-missing-get-settings-value\",\"apply-while-invalid\",\"apply-while-busy\",\"apply-without-dirty-state\"],\"description\":\"Keeps Apply gated by dirty, valid and busy state and emits the provider value through SettingsPanelRef.applied$.\"}}],\"validators\":[\"apply-requires-provider-value\",\"dirty-valid-busy-gates-preserved\",\"apply-does-not-close-panel\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"provider.isDirty$\",\"provider.isValid$\",\"provider.isBusy$\",\"ref.applied$\"],\"submissionImpact\":\"none\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"settings-value-provider-attached\"]},{\"operationId\":\"panel.saveBehavior.set\",\"title\":\"Set save behavior\",\"scope\":\"interaction\",\"targetKind\":\"saveBehavior\",\"target\":{\"kind\":\"saveBehavior\",\"resolver\":\"settings-value-provider-save-contract\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"requireDirty\":{\"type\":\"boolean\"},\"requireValid\":{\"type\":\"boolean\"},\"blockWhileBusy\":{\"type\":\"boolean\"},\"useProviderHook\":{\"type\":\"boolean\"},\"closeAfterSave\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-save-behavior-set\",\"handlerContract\":{\"reads\":[\"SettingsValueProvider.onSave\",\"SettingsValueProvider.getSettingsValue\",\"SettingsValueProvider.isDirty$\",\"SettingsValueProvider.isValid$\",\"SettingsValueProvider.isBusy$\"],\"writes\":[\"SettingsPanelRef.saved$\",\"SettingsPanelRef.closed$\"],\"identityKeys\":[\"config.id\",\"provider.onSave\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"requireDirty\":{\"type\":\"boolean\"},\"requireValid\":{\"type\":\"boolean\"},\"blockWhileBusy\":{\"type\":\"boolean\"},\"useProviderHook\":{\"type\":\"boolean\"},\"closeAfterSave\":{\"type\":\"boolean\"}}},\"failureModes\":[\"save-while-invalid\",\"save-while-busy\",\"save-result-undefined\",\"provider-save-rejected\"],\"description\":\"Keeps Save gated by dirty, valid and busy state, prefers onSave when present, falls back to getSettingsValue and closes with reason save.\"}}],\"validators\":[\"save-prefers-provider-hook\",\"save-fallback-value-preserved\",\"save-closes-with-save-reason\",\"dirty-valid-busy-gates-preserved\"],\"affectedPaths\":[\"provider.onSave\",\"provider.getSettingsValue\",\"ref.saved$\",\"ref.closed$\"],\"submissionImpact\":\"config-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"settings-value-provider-attached\"]}]}",
1145
1341
  "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1146
- "contentHash": "ee4c7ed352ddcb239c54921fac0567128d69d667735f16ab287194fd3f8651c0",
1342
+ "contentHash": "b16d2abba10705e7236125187ec34c513cd21e375a06c94464c2cbb689f4a25b",
1147
1343
  "sourceKind": "component_definition",
1148
1344
  "sourceId": "praxis-settings-panel",
1149
1345
  "corpusVersion": "1.0.0"
1150
1346
  },
1151
1347
  {
1152
- "chunkIndex": 6,
1348
+ "chunkIndex": 14,
1153
1349
  "chunkKind": "authoring_manifest",
1154
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"editor.host.configure\",\"title\":\"Configure hosted editor\",\"scope\":\"templating\",\"targetKind\":\"editorHost\",\"target\":{\"kind\":\"editorHost\",\"resolver\":\"settings-panel-editor-host\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"componentId\"],\"properties\":{\"componentId\":{\"type\":\"string\"},\"inputs\":{\"type\":\"object\"},\"configManifestComponentId\":{\"type\":\"string\"},\"editorContract\":{\"enum\":[\"SettingsValueProvider\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-editor-host-configure\",\"handlerContract\":{\"reads\":[\"ComponentMetadataRegistry\",\"SettingsPanelConfig.content\",\"SettingsValueProvider\",\"component.authoringManifest\"],\"writes\":[\"config.content.component\",\"config.content.inputs\",\"delegatedConsumerPatch\"],\"identityKeys\":[\"componentId\",\"configManifestComponentId\"],\"failureModes\":[\"editor-component-not-registered\",\"settings-value-provider-missing\",\"consumer-manifest-required\",\"consumer-config-boundary-violation\"],\"description\":\"Configures the hosted editor component and input envelope while delegating consumer-specific config edits to the owning component manifest.\"}}],\"validators\":[\"editor-component-registered\",\"settings-value-provider-contract-present\",\"consumer-config-delegated\",\"editor-inputs-serializable\"],\"affectedPaths\":[\"config.content.component\",\"config.content.inputs\",\"delegatedConsumerPatch\"],\"submissionImpact\":\"config-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"component-metadata-resolved\"]},{\"operationId\":\"diagnostics.visibility.set\",\"title\":\"Set panel diagnostics visibility\",\"scope\":\"interaction\",\"targetKind\":\"diagnostics\",\"target\":{\"kind\":\"diagnostics\",\"resolver\":\"settings-panel-state-diagnostics\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"showStatusMessage\":{\"type\":\"boolean\"},\"showDisabledReason\":{\"type\":\"boolean\"},\"showBusyState\":{\"type\":\"boolean\"},\"exposeValidationState\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"config.diagnostics\"}],\"validators\":[\"diagnostics-follow-provider-state\",\"diagnostics-i18n-compatible\",\"busy-valid-dirty-visible-when-needed\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"config.diagnostics.showStatusMessage\",\"config.diagnostics.showDisabledReason\",\"config.diagnostics.showBusyState\",\"config.diagnostics.exposeValidationState\",\"panel.statusMessage\",\"panel.disabledReason\",\"panel.isDirty\",\"panel.isValid\",\"panel.isBusy\"],\"submissionImpact\":\"visual-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"settings-value-provider-attached\"]}]}",
1350
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"panel.resetBehavior.set\",\"title\":\"Set reset behavior\",\"scope\":\"interaction\",\"targetKind\":\"resetBehavior\",\"target\":{\"kind\":\"resetBehavior\",\"resolver\":\"settings-value-provider-reset-contract\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"requireConfirmation\":{\"type\":\"boolean\"},\"callProviderReset\":{\"type\":\"boolean\"},\"emitResetEvent\":{\"type\":\"boolean\"},\"clearSavedStatus\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-reset-behavior-set\",\"handlerContract\":{\"reads\":[\"SettingsValueProvider.reset\",\"SettingsPanelRef.reset$\",\"ConfirmDialogComponent\"],\"writes\":[\"provider.reset()\",\"SettingsPanelRef.reset$\",\"panel.lastSavedAt\"],\"identityKeys\":[\"config.id\",\"provider.reset\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"requireConfirmation\":{\"type\":\"boolean\"},\"callProviderReset\":{\"type\":\"boolean\"},\"emitResetEvent\":{\"type\":\"boolean\"}}},\"failureModes\":[\"reset-confirmation-missing\",\"provider-reset-failed\",\"reset-event-not-emitted\"],\"description\":\"Preserves Reset as a confirmed shell action that calls the provider reset hook and emits SettingsPanelRef.reset$.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"reset-requires-confirmation\",\"reset-calls-provider-reset\",\"reset-event-emitted\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"provider.reset\",\"ref.reset$\",\"panel.lastSavedAt\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"settings-value-provider-attached\",\"confirmation-collected\"]},{\"operationId\":\"editor.host.configure\",\"title\":\"Configure hosted editor\",\"scope\":\"templating\",\"targetKind\":\"editorHost\",\"target\":{\"kind\":\"editorHost\",\"resolver\":\"settings-panel-editor-host\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"componentId\"],\"properties\":{\"componentId\":{\"type\":\"string\"},\"inputs\":{\"type\":\"object\"},\"configManifestComponentId\":{\"type\":\"string\"},\"editorContract\":{\"enum\":[\"SettingsValueProvider\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"settings-panel-editor-host-configure\",\"handlerContract\":{\"reads\":[\"ComponentMetadataRegistry\",\"SettingsPanelConfig.content\",\"SettingsValueProvider\",\"component.authoringManifest\"],\"writes\":[\"config.content.component\",\"config.content.inputs\",\"delegatedConsumerPatch\"],\"identityKeys\":[\"componentId\",\"configManifestComponentId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"componentId\"],\"properties\":{\"componentId\":{\"type\":\"string\"},\"inputs\":{\"type\":\"object\"},\"configManifestComponentId\":{\"type\":\"string\"},\"editorContract\":{\"enum\":[\"SettingsValueProvider\"]}}},\"failureModes\":[\"editor-component-not-registered\",\"settings-value-provider-missing\",\"consumer-manifest-required\",\"consumer-config-boundary-violation\"],\"description\":\"Configures the hosted editor component and input envelope while delegating consumer-specific config edits to the owning component manifest.\"}}],\"validators\":[\"editor-component-registered\",\"settings-value-provider-contract-present\",\"consumer-config-delegated\",\"editor-inputs-serializable\"],\"affectedPaths\":[\"config.content.component\",\"config.content.inputs\",\"delegatedConsumerPatch\"],\"submissionImpact\":\"config-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"component-metadata-resolved\"]},{\"operationId\":\"diagnostics.visibility.set\",\"title\":\"Set panel diagnostics visibility\",\"scope\":\"interaction\",\"targetKind\":\"diagnostics\",\"target\":{\"kind\":\"diagnostics\",\"resolver\":\"settings-panel-state-diagnostics\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"showStatusMessage\":{\"type\":\"boolean\"},\"showDisabledReason\":{\"type\":\"boolean\"},\"showBusyState\":{\"type\":\"boolean\"},\"exposeValidationState\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"config.diagnostics\"}],\"validators\":[\"diagnostics-follow-provider-state\",\"diagnostics-i18n-compatible\",\"busy-valid-dirty-visible-when-needed\",\"settings-panel-round-trip\"],\"affectedPaths\":[\"config.diagnostics.showStatusMessage\",\"config.diagnostics.showDisabledReason\",\"config.diagnostics.showBusyState\",\"config.diagnostics.exposeValidationState\",\"panel.statusMessage\",\"panel.disabledReason\",\"panel.isDirty\",\"panel.isValid\",\"panel.isBusy\"],\"submissionImpact\":\"visual-only\",\"destructive\":false,\"requiresConfirmation\":false,\"preconditions\":[\"settings-value-provider-attached\"]}]}",
1155
1351
  "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
1156
- "contentHash": "c534b9d1ec8ec9a74f58304927418eedcaa4c3391e45cfd547e54fdbf8e70211",
1352
+ "contentHash": "f241c2fdcbb24c343dd55e42191c1edfd147dceff22135635d4321a07027e133",
1157
1353
  "sourceKind": "component_definition",
1158
1354
  "sourceId": "praxis-settings-panel",
1159
1355
  "corpusVersion": "1.0.0"
1160
1356
  },
1161
1357
  {
1162
- "chunkIndex": 7,
1358
+ "chunkIndex": 15,
1163
1359
  "chunkKind": "authoring_manifest",
1164
1360
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"panel-id-stable\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_ID_STABLE\",\"description\":\"Panel id must remain stable for replacement, persistence and diagnostics.\"},{\"validatorId\":\"replacement-mediates-before-close\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_REPLACEMENT_MEDIATES_CLOSE\",\"description\":\"Opening a replacement panel must consult the current editor onBeforeClose before closing.\"},{\"validatorId\":\"title-i18n-compatible\",\"level\":\"warning\",\"code\":\"SETTINGS_PANEL_TITLE_I18N_COMPATIBLE\",\"description\":\"Authoring chrome text must remain compatible with the settings panel i18n namespace.\"},{\"validatorId\":\"panel-size-safe\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_SIZE_SAFE\",\"description\":\"Panel sizes must be finite numbers or safe CSS size strings.\"},{\"validatorId\":\"panel-min-max-consistent\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_MIN_MAX_CONSISTENT\",\"description\":\"Minimum width must not exceed maximum width.\"},{\"validatorId\":\"resize-persistence-explicit\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_RESIZE_PERSISTENCE_EXPLICIT\",\"description\":\"Persisted resize must use a stable persistSizeKey or be explicitly transient.\"},{\"validatorId\":\"apply-requires-provider-value\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_APPLY_REQUIRES_PROVIDER_VALUE\",\"description\":\"Apply must obtain payloads from SettingsValueProvider.getSettingsValue().\"},{\"validatorId\":\"apply-does-not-close-panel\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_APPLY_DOES_NOT_CLOSE\",\"description\":\"Apply emits preview payloads without closing the panel.\"},{\"validatorId\":\"dirty-valid-busy-gates-preserved\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_STATE_GATES_PRESERVED\",\"description\":\"Apply and Save remain gated by dirty, valid and busy state.\"},{\"validatorId\":\"save-prefers-provider-hook\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_SAVE_PREFERS_PROVIDER_HOOK\",\"description\":\"Save must call onSave when provided before falling back to getSettingsValue().\"},{\"validatorId\":\"save-fallback-value-preserved\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_SAVE_FALLBACK_PRESERVED\",\"description\":\"Save fallback must preserve getSettingsValue payload semantics.\"},{\"validatorId\":\"save-closes-with-save-reason\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_SAVE_CLOSE_REASON\",\"description\":\"Successful save must emit saved$ and close with reason save.\"},{\"validatorId\":\"reset-requires-confirmation\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_RESET_REQUIRES_CONFIRMATION\",\"description\":\"Reset is destructive and must remain confirmed before provider reset is called.\"},{\"validatorId\":\"reset-calls-provider-reset\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_RESET_CALLS_PROVIDER\",\"description\":\"Reset must call the hosted provider reset hook when present.\"},{\"validatorId\":\"reset-event-emitted\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_RESET_EVENT_EMITTED\",\"description\":\"Reset must emit SettingsPanelRef.reset$ so hosts can coordinate state.\"},{\"validatorId\":\"editor-component-registered\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_EDITOR_REGISTERED\",\"description\":\"Hosted editor component must resolve from governed component metadata or host registration.\"},{\"validatorId\":\"settings-value-provider-contract-present\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_PROVIDER_CONTRACT_PRESENT\",\"description\":\"Hosted authoring editors must implement SettingsValueProvider state and value contract.\"},{\"validatorId\":\"consumer-config-delegated\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_CONSUMER_CONFIG_DELEGATED\",\"description\":\"Consumer-specific config operations must delegate to the owning component manifest.\"},{\"validatorId\":\"editor-inputs-serializable\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_EDITOR_INPUTS_SERIALIZABLE\",\"description\":\"Persisted editor host inputs must be serializable safe values.\"},{\"validatorId\":\"diagnostics-follow-provider-state\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_DIAGNOSTICS_PROVIDER_STATE\",\"description\":\"Diagnostics must reflect provider dirty, valid and busy state.\"},{\"validatorId\":\"diagnostics-i18n-compatible\",\"level\":\"warning\",\"code\":\"SETTINGS_PANEL_DIAGNOSTICS_I18N_COMPATIBLE\",\"description\":\"Diagnostics copy must use the settings panel i18n namespace.\"},{\"validatorId\":\"busy-valid-dirty-visible-when-needed\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_STATE_VISIBLE\",\"description\":\"Busy, invalid and dirty states must remain visible or explain disabled actions.\"},{\"validatorId\":\"settings-panel-round-trip\",\"level\":\"error\",\"code\":\"SETTINGS_PANEL_ROUND_TRIP\",\"description\":\"Open, edit, apply, save, reset and reopen must preserve the shell protocol without mutating consumer config semantics.\"}]}",
1165
1361
  "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
@@ -1169,7 +1365,7 @@
1169
1365
  "corpusVersion": "1.0.0"
1170
1366
  },
1171
1367
  {
1172
- "chunkIndex": 8,
1368
+ "chunkIndex": 16,
1173
1369
  "chunkKind": "authoring_manifest",
1174
1370
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"SettingsPanelConfig owns only shell fields: identity, title, size, resize persistence and hosted editor envelope.\",\"SettingsValueProvider owns apply/save/reset payload extraction, while consumer config semantics stay delegated to the owning component manifest.\",\"Apply must emit applied$ without closing; Save must emit saved$ and close with reason save; Reset must be confirmed and emit reset$.\",\"Busy, dirty and valid state must gate Apply and Save consistently and remain visible through diagnostics.\",\"Opening a replacement panel must pass through the current editor onBeforeClose and dirty-discard mediation.\"]}",
1175
1371
  "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
@@ -1179,7 +1375,7 @@
1179
1375
  "corpusVersion": "1.0.0"
1180
1376
  },
1181
1377
  {
1182
- "chunkIndex": 9,
1378
+ "chunkIndex": 17,
1183
1379
  "chunkKind": "authoring_manifest",
1184
1380
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-settings-panel\",\"ownerPackage\":\"@praxisui/settings-panel\",\"configSchemaId\":\"SettingsPanelConfig\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"open-component-editor\",\"request\":\"Open the table settings editor in the settings panel.\",\"operationId\":\"editor.host.configure\",\"params\":{\"componentId\":\"praxis-table\",\"inputs\":{\"tableId\":\"orders\"},\"configManifestComponentId\":\"praxis-table\",\"editorContract\":\"SettingsValueProvider\"},\"isPositive\":true},{\"id\":\"start-expanded\",\"request\":\"Open this settings panel expanded.\",\"operationId\":\"panel.openMode.set\",\"params\":{\"expanded\":true},\"isPositive\":true},{\"id\":\"set-resizable-width\",\"request\":\"Make the settings drawer resizable between 420px and 960px.\",\"operationId\":\"panel.size.set\",\"params\":{\"resizable\":true,\"minWidth\":\"420px\",\"maxWidth\":\"960px\",\"persistSizeKey\":\"settings-panel:orders\"},\"isPositive\":true},{\"id\":\"apply-preview\",\"request\":\"Apply the editor change without saving or closing.\",\"operationId\":\"panel.applyBehavior.set\",\"params\":{\"requireDirty\":true,\"requireValid\":true,\"blockWhileBusy\":true},\"isPositive\":true},{\"id\":\"save-and-close\",\"request\":\"Save this editor value and close the panel.\",\"operationId\":\"panel.saveBehavior.set\",\"params\":{\"requireDirty\":true,\"requireValid\":true,\"blockWhileBusy\":true,\"useProviderHook\":true,\"closeAfterSave\":true},\"isPositive\":true},{\"id\":\"reset-to-original\",\"request\":\"Reset this editor to its original value.\",\"operationId\":\"panel.resetBehavior.set\",\"params\":{\"requireConfirmation\":true,\"callProviderReset\":true,\"emitResetEvent\":true},\"isPositive\":true},{\"id\":\"show-busy-diagnostics\",\"request\":\"Show why Apply and Save are disabled while the editor is busy.\",\"operationId\":\"diagnostics.visibility.set\",\"params\":{\"showStatusMessage\":true,\"showDisabledReason\":true,\"showBusyState\":true},\"isPositive\":true},{\"id\":\"reject-table-column-direct-edit\",\"request\":\"Use settings-panel to rename a table column directly.\",\"operationId\":\"editor.host.configure\",\"params\":{\"componentId\":\"praxis-settings-panel\",\"inputs\":{\"columns\":[{\"field\":\"name\",\"label\":\"Name\"}]}},\"isPositive\":false},{\"id\":\"reject-missing-provider\",\"request\":\"Host a component that has no dirty, valid, busy or getSettingsValue contract.\",\"operationId\":\"editor.host.configure\",\"params\":{\"componentId\":\"plain-info-card\"},\"isPositive\":false},{\"id\":\"reject-reset-without-confirmation\",\"request\":\"Reset the editor immediately without confirmation.\",\"operationId\":\"panel.resetBehavior.set\",\"params\":{\"requireConfirmation\":false,\"callProviderReset\":true},\"isPositive\":false}]}",
1185
1381
  "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/praxis-settings-panel-authoring-manifest.ts",
@@ -1189,7 +1385,7 @@
1189
1385
  "corpusVersion": "1.0.0"
1190
1386
  },
1191
1387
  {
1192
- "chunkIndex": 10,
1388
+ "chunkIndex": 18,
1193
1389
  "chunkKind": "context_pack",
1194
1390
  "content": "{\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{},\"actionCatalog\":[{\"id\":\"title.set\",\"intentExamples\":[\"title\",\"titulo\",\"rename panel\"],\"patchTemplate\":{\"title\":\"{{value}}\"}},{\"id\":\"titleIcon.set\",\"intentExamples\":[\"icon\",\"titulo icon\",\"panel icon\"],\"patchTemplate\":{\"titleIcon\":\"{{value}}\"}},{\"id\":\"expanded.enable\",\"intentExamples\":[\"expand panel\",\"open panel\"],\"patchTemplate\":{\"expanded\":true}},{\"id\":\"expanded.disable\",\"intentExamples\":[\"collapse panel\",\"close panel\"],\"patchTemplate\":{\"expanded\":false}}],\"fieldResolvers\":{},\"hints\":[\"content.component is provided by the host; avoid patching it dynamically.\",\"Use expanded to control default open state.\"]}}",
1195
1391
  "sourcePointer": "projects/praxis-settings-panel/src/lib/ai/settings-panel-context-pack.ts",
@@ -1199,7 +1395,7 @@
1199
1395
  "corpusVersion": "1.0.0"
1200
1396
  },
1201
1397
  {
1202
- "chunkIndex": 11,
1398
+ "chunkIndex": 19,
1203
1399
  "chunkKind": "recipe",
1204
1400
  "content": "{\"_comment\":\"Receita para o Painel de Configurações (Settings Panel).\",\"templateMeta\":{\"registryKey\":\"praxis-settings-panel\",\"variantId\":\"base\",\"useWhen\":\"Base settings panel configuration.\",\"examplePrompts\":[\"configure settings panel sections\",\"set settings panel titles and icons\"]},\"config\":{\"saveMode\":\"auto\",\"i18n\":{\"title\":\"Configurações do Sistema\",\"saveSuccess\":\"Salvo com sucesso!\"},\"validation\":{\"mode\":\"blur\"},\"sections\":[{\"id\":\"general\",\"title\":\"Geral\",\"icon\":\"tune\",\"permissions\":[\"admin\",\"manager\"],\"fields\":[{\"key\":\"appName\",\"type\":\"text\",\"label\":\"Nome da Aplicação\",\"required\":true},{\"key\":\"theme\",\"type\":\"select\",\"label\":\"Tema\",\"options\":[\"Light\",\"Dark\"]}]},{\"id\":\"notifications\",\"title\":\"Notificações\",\"icon\":\"notifications\",\"fields\":[{\"key\":\"emailAlerts\",\"type\":\"toggle\",\"label\":\"Alertas por E-mail\",\"default\":true},{\"key\":\"smsAlerts\",\"type\":\"toggle\",\"label\":\"Alertas por SMS\"}]}],\"overrides\":{\"tenant-abc\":{\"defaults\":{\"theme\":\"Dark\"}}}}}",
1205
1401
  "sourcePointer": "examples/ai-recipes/praxis-settings-panel.json",
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@praxisui/settings-panel",
3
- "version": "9.0.0-beta.86",
3
+ "version": "9.0.0-beta.88",
4
4
  "description": "Settings panel for Praxis UI libraries: open editors for configuration at runtime and persist settings.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
8
  "@angular/cdk": "^21.0.0",
9
9
  "@angular/material": "^21.0.0",
10
- "@praxisui/ai": "^9.0.0-beta.86",
11
- "@praxisui/core": "^9.0.0-beta.86",
12
- "@praxisui/dynamic-fields": "^9.0.0-beta.86",
10
+ "@praxisui/ai": "^9.0.0-beta.88",
11
+ "@praxisui/core": "^9.0.0-beta.88",
12
+ "@praxisui/dynamic-fields": "^9.0.0-beta.88",
13
13
  "rxjs": "~7.8.0"
14
14
  },
15
15
  "dependencies": {