@praxisui/settings-panel 9.0.64 → 9.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -228,6 +228,12 @@ Regras do contrato:
|
|
|
228
228
|
- `Save` usa `onSave()` quando existir, usa `getSettingsValue()` como fallback, emite `saved$` e fecha com motivo `save`.
|
|
229
229
|
- `Reset` e destrutivo, exige confirmacao, chama `reset()` quando existir e emite `reset$`.
|
|
230
230
|
- `Apply` e `Save` continuam bloqueados por `dirty=false`, `valid=false` ou `busy=true`.
|
|
231
|
+
- A validade e a disponibilidade são conferidas novamente depois de produzir o valor,
|
|
232
|
+
inclusive após resolução de Promise/Observable em `onSave()`. Uma reprovação tardia
|
|
233
|
+
não emite `applied$`/`saved$`, não marca sucesso e não fecha o rascunho.
|
|
234
|
+
O editor deve publicar a reprovação em `isValid$`; `null` sozinho não é um veto
|
|
235
|
+
universal, pois o significado do documento pertence ao editor consumidor.
|
|
236
|
+
Um provider bem-sucedido pode limpar seu próprio dirty antes de retornar o valor.
|
|
231
237
|
- O editor hospedado deve implementar `SettingsValueProvider` quando o fluxo for autoral.
|
|
232
238
|
- Inputs persistidos do editor devem permanecer serializaveis.
|
|
233
239
|
- `diagnostics` controla somente a visibilidade dos diagnosticos do shell (`statusMessage`, motivo de desabilitacao, busy e estado invalido); ele nao altera as regras de bloqueio de `Apply`/`Save`.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-09-
|
|
3
|
+
"generatedAt": "2026-09-06T19:09:46.917Z",
|
|
4
4
|
"packageName": "@praxisui/settings-panel",
|
|
5
|
-
"packageVersion": "9.0.
|
|
5
|
+
"packageVersion": "9.0.66",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -758,6 +758,10 @@ class SettingsPanelComponent {
|
|
|
758
758
|
if (!this.canApply)
|
|
759
759
|
return;
|
|
760
760
|
const value = this.contentRef?.instance?.getSettingsValue?.();
|
|
761
|
+
// Producing a value can synchronously invalidate the provider. Do not
|
|
762
|
+
// publish a preview based only on the state captured before validation.
|
|
763
|
+
if (value === undefined || !this.isValid || this.isBusy || !this.interactionActive)
|
|
764
|
+
return;
|
|
761
765
|
this.ref.apply(value);
|
|
762
766
|
}
|
|
763
767
|
onSave() {
|
|
@@ -782,7 +786,9 @@ class SettingsPanelComponent {
|
|
|
782
786
|
}
|
|
783
787
|
}
|
|
784
788
|
emitSave(value) {
|
|
785
|
-
|
|
789
|
+
// Recheck after synchronous validation or asynchronous completion. Dirty
|
|
790
|
+
// may legitimately be cleared by a successful provider; it is not a veto.
|
|
791
|
+
if (value === undefined || !this.isValid || this.isBusy || !this.interactionActive || this.destroyRef.destroyed)
|
|
786
792
|
return;
|
|
787
793
|
this.lastSavedAt = Date.now();
|
|
788
794
|
this.isDirty = false;
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/settings-panel",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.66",
|
|
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.
|
|
11
|
-
"@praxisui/core": "^9.0.
|
|
12
|
-
"@praxisui/dynamic-fields": "^9.0.
|
|
10
|
+
"@praxisui/ai": "^9.0.66",
|
|
11
|
+
"@praxisui/core": "^9.0.66",
|
|
12
|
+
"@praxisui/dynamic-fields": "^9.0.66",
|
|
13
13
|
"rxjs": "~7.8.0"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|