@praxisui/core 9.0.4-rc.42 → 9.0.4-rc.44
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-08-
|
|
3
|
+
"generatedAt": "2026-08-11T03:13:34.466Z",
|
|
4
4
|
"packageName": "@praxisui/core",
|
|
5
|
-
"packageVersion": "9.0.4-rc.
|
|
5
|
+
"packageVersion": "9.0.4-rc.44",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 4,
|
|
@@ -3457,9 +3457,9 @@
|
|
|
3457
3457
|
{
|
|
3458
3458
|
"chunkIndex": 53,
|
|
3459
3459
|
"chunkKind": "recipe",
|
|
3460
|
-
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets\",\"page\":{\"widgets\":[{\"key\":\"employeePortfolio\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":{\"key\":\"employeeOperations.portfolio.shell.title\",\"text\":\"Gestão de pessoas\"},\"subtitle\":{\"key\":\"employeeOperations.portfolio.shell.subtitle\",\"text\":\"Encontre funcionários, atualize vínculos e consulte o dossiê sem sair da carteira\"},\"windowActions\":{\"collapsible\":false,\"fullscreen\":true}},\"definition\":{\"id\":\"praxis-crud\",\"bindingOrder\":[\"crudId\",\"componentInstanceId\",\"tableConfigPersistenceStrategy\",\"metadata\"],\"inputs\":{\"crudId\":\"employee-operations-casework\",\"componentInstanceId\":\"employee-operations-casework\",\"tableConfigPersistenceStrategy\":\"volatile\",\"metadata\":{\"component\":\"praxis-crud\",\"resource\":{\"path\":\"human-resources/funcionarios\",\"idField\":\"id\",\"endpointKey\":\"human-resources.funcionarios\",\"title\":{\"key\":\"employeeOperations.portfolio.resource.title\",\"text\":\"Funcionários\"},\"formTitle\":{\"key\":\"employeeOperations.portfolio.resource.formTitle\",\"text\":\"Cadastro do funcionário\"}},\"table\":{\"ai\":{\"assistant\":{\"enabled\":false}},\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"employeeOperations.portfolio.toolbar.title\",\"text\":\"Carteira de funcionários\"},\"subtitle\":{\"key\":\"employeeOperations.portfolio.toolbar.subtitle\",\"text\":\"Dados cadastrais, área, vínculo e remuneração em uma única visão\"},\"search\":{\"enabled\":true,\"placeholder\":{\"key\":\"employeeOperations.portfolio.search.placeholder\",\"text\":\"Buscar por nome, e-mail, cargo ou departamento\"}},\"filters\":{\"enabled\":true,\"showAdvancedButton\":true,\"quickFilters\":[{\"id\":\"active-employees\",\"label\":{\"key\":\"employeeOperations.portfolio.quickFilter.active\",\"text\":\"Ativos\"},\"icon\":\"check_circle\",\"filter\":{\"ativo\":true}},{\"id\":\"inactive-employees\",\"label\":{\"key\":\"employeeOperations.portfolio.quickFilter.inactive\",\"text\":\"Inativos\"},\"icon\":\"block\",\"filter\":{\"ativo\":false}}]},\"columnsVisibility\":{\"enabled\":true},\"densityToggle\":{\"enabled\":true}},\"columns\":[{\"field\":\"avatarUrl\",\"header\":{\"key\":\"employeeOperations.portfolio.column.person\",\"text\":\"Pessoa\"},\"type\":\"string\",\"width\":\"76px\",\"renderer\":{\"type\":\"avatar\",\"avatar\":{\"srcField\":\"avatarUrl\",\"altField\":\"nomeCompleto\",\"initialsField\":\"nomeCompleto\",\"shape\":\"circle\",\"size\":36}}},{\"field\":\"nomeCompleto\",\"header\":{\"key\":\"employeeOperations.portfolio.column.employee\",\"text\":\"Funcionário\"},\"type\":\"string\",\"width\":\"220px\",\"sticky\":\"start\"},{\"field\":\"ativo\",\"header\":{\"key\":\"employeeOperations.portfolio.column.employment\",\"text\":\"Vínculo\"},\"type\":\"boolean\",\"format\":\"active-inactive\",\"width\":\"120px\",\"align\":\"center\",\"conditionalRenderers\":[{\"condition\":{\"==\":[{\"var\":\"ativo\"},true]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":{\"key\":\"employeeOperations.portfolio.status.active\",\"text\":\"Ativo\"},\"color\":\"success\",\"variant\":\"filled\",\"icon\":\"check_circle\"}}},{\"condition\":{\"==\":[{\"var\":\"ativo\"},false]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":{\"key\":\"employeeOperations.portfolio.status.inactive\",\"text\":\"Inativo\"},\"color\":\"warn\",\"variant\":\"outlined\",\"icon\":\"block\"}}}]},{\"field\":\"cargoNome\",\"header\":{\"key\":\"employeeOperations.portfolio.column.role\",\"text\":\"Cargo\"},\"type\":\"string\",\"width\":\"190px\",\"renderer\":{\"type\":\"chip\",\"chip\":{\"textField\":\"cargoNome\",\"variant\":\"outlined\",\"color\":\"primary\"}}},{\"field\":\"departamentoNome\",\"header\":{\"key\":\"employeeOperations.portfolio.column.department\",\"text\":\"Departamento\"},\"type\":\"string\",\"width\":\"220px\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"departamentoNome\",\"variant\":\"soft\",\"color\":\"accent\"}}},{\"field\":\"dataAdmissao\",\"header\":{\"key\":\"employeeOperations.portfolio.column.hiredAt\",\"text\":\"Admissão\"},\"type\":\"date\",\"format\":\"dd/MM/yyyy\",\"width\":\"132px\"},{\"field\":\"salario\",\"header\":{\"key\":\"employeeOperations.portfolio.column.salary\",\"text\":\"Salário base\"},\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"end\",\"width\":\"150px\"},{\"field\":\"email\",\"header\":{\"key\":\"employeeOperations.portfolio.column.contact\",\"text\":\"Contato\"},\"type\":\"string\",\"width\":\"240px\"}],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":8,\"pageSizeOptions\":[8,16,32],\"position\":\"bottom\"},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"column\":\"id\",\"direction\":\"asc\"}},\"filtering\":{\"enabled\":true,\"strategy\":\"server\",\"debounceTime\":300,\"advancedFilters\":{\"enabled\":true,\"settings\":{\"alwaysVisibleFields\":[\"departamentoIdsIn\",\"dataAdmissaoRange\",\"salarioBetween\"],\"allowSaveTags\":true,\"tags\":[{\"id\":\"executive-pay-band\",\"label\":\"Faixa executiva\",\"patch\":{\"salarioBetween\":[39000,40000]}}],\"advancedOpenMode\":\"modal\",\"advancedClearButtonsEnabled\":true,\"changeDebounceMs\":300}}},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"persistSelection\":false},\"density\":\"compact\"},\"actions\":{\"row\":{\"enabled\":true,\"display\":\"icons\",\"position\":\"end\",\"sticky\":\"end\",\"header\":{\"label\":{\"key\":\"employeeOperations.portfolio.actions.header\",\"text\":\"Ações\"},\"icon\":\"bolt\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.actions.tooltip\",\"text\":\"Visualizar, editar ou atualizar o vínculo\"}},\"behavior\":{\"enabled\":true,\"maxInline\":{\"xs\":0,\"sm\":1,\"md\":2,\"lg\":3},\"autoStrategy\":\"breakpoints\"},\"actions\":[{\"id\":\"view\",\"label\":{\"key\":\"employeeOperations.portfolio.action.view\",\"text\":\"Visualizar\"},\"icon\":\"visibility\",\"action\":\"view\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.action.view.tooltip\",\"text\":\"Ver dados do funcionário\"}},{\"id\":\"edit\",\"label\":{\"key\":\"employeeOperations.portfolio.action.edit\",\"text\":\"Editar\"},\"icon\":\"edit\",\"action\":\"edit\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.action.edit.tooltip\",\"text\":\"Editar dados do funcionário\"}},{\"id\":\"deactivate\",\"label\":{\"key\":\"employeeOperations.portfolio.action.deactivate\",\"text\":\"Inativar\"},\"icon\":\"person_off\",\"color\":\"warn\",\"action\":\"deactivate\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.action.deactivate.tooltip\",\"text\":\"Inativar vínculo e registrar motivo e vigência\"},\"visibleWhen\":{\"==\":[{\"var\":\"ativo\"},true]}},{\"id\":\"reactivate\",\"label\":{\"key\":\"employeeOperations.portfolio.action.reactivate\",\"text\":\"Reativar\"},\"icon\":\"person_add\",\"color\":\"primary\",\"action\":\"reactivate\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.action.reactivate.tooltip\",\"text\":\"Reativar vínculo e registrar motivo e vigência\"},\"visibleWhen\":{\"==\":[{\"var\":\"ativo\"},false]}}]}},\"appearance\":{\"density\":\"compact\",\"stickyHeader\":true,\"stripedRows\":false,\"hoverHighlight\":true,\"responsive\":{\"breakpoints\":{\"mobile\":640},\"mobile\":{\"horizontalScroll\":false,\"cardMode\":true,\"priorityColumns\":[\"nomeCompleto\",\"ativo\",\"cargoNome\"]}}},\"export\":{\"enabled\":true,\"formats\":[\"csv\",\"excel\"],\"general\":{\"includeHeaders\":true,\"respectFilters\":true,\"applyFormatting\":true,\"defaultFileName\":\"carteira-funcionarios\",\"includeColumns\":\"visible\",\"scope\":\"currentPage\",\"maxRows\":5000},\"excel\":{\"sheetName\":\"Funcionários\",\"autoFitColumns\":true,\"freezeHeaders\":true}}},\"defaults\":{\"openMode\":\"drawer\"},\"actions\":[{\"action\":\"create\",\"openMode\":\"drawer\"},{\"action\":\"view\",\"openMode\":\"drawer\"},{\"action\":\"edit\",\"openMode\":\"drawer\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"rowAction\":\"emit\",\"selectionChange\":\"emit\",\"afterSave\":\"emit\",\"afterDelete\":\"emit\"}}}]}}",
|
|
3460
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets\",\"page\":{\"widgets\":[{\"key\":\"employeePortfolio\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":{\"key\":\"employeeOperations.portfolio.shell.title\",\"text\":\"Gestão de pessoas\"},\"subtitle\":{\"key\":\"employeeOperations.portfolio.shell.subtitle\",\"text\":\"Encontre funcionários, atualize vínculos e consulte o dossiê sem sair da carteira\"},\"windowActions\":{\"collapsible\":false,\"fullscreen\":true}},\"definition\":{\"id\":\"praxis-crud\",\"bindingOrder\":[\"crudId\",\"componentInstanceId\",\"tableConfigPersistenceStrategy\",\"metadata\"],\"inputs\":{\"crudId\":\"employee-operations-casework\",\"componentInstanceId\":\"employee-operations-casework\",\"tableConfigPersistenceStrategy\":\"volatile\",\"metadata\":{\"component\":\"praxis-crud\",\"resource\":{\"path\":\"human-resources/funcionarios\",\"idField\":\"id\",\"endpointKey\":\"human-resources.funcionarios\",\"title\":{\"key\":\"employeeOperations.portfolio.resource.title\",\"text\":\"Funcionários\"},\"formTitle\":{\"key\":\"employeeOperations.portfolio.resource.formTitle\",\"text\":\"Cadastro do funcionário\"}},\"form\":{\"actions\":{\"placement\":\"afterSections\",\"sticky\":true}},\"table\":{\"ai\":{\"assistant\":{\"enabled\":false}},\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"employeeOperations.portfolio.toolbar.title\",\"text\":\"Carteira de funcionários\"},\"subtitle\":{\"key\":\"employeeOperations.portfolio.toolbar.subtitle\",\"text\":\"Dados cadastrais, área, vínculo e remuneração em uma única visão\"},\"search\":{\"enabled\":true,\"placeholder\":{\"key\":\"employeeOperations.portfolio.search.placeholder\",\"text\":\"Buscar por nome, e-mail, cargo ou departamento\"}},\"filters\":{\"enabled\":true,\"showAdvancedButton\":true,\"quickFilters\":[{\"id\":\"active-employees\",\"label\":{\"key\":\"employeeOperations.portfolio.quickFilter.active\",\"text\":\"Ativos\"},\"icon\":\"check_circle\",\"filter\":{\"ativo\":true}},{\"id\":\"inactive-employees\",\"label\":{\"key\":\"employeeOperations.portfolio.quickFilter.inactive\",\"text\":\"Inativos\"},\"icon\":\"block\",\"filter\":{\"ativo\":false}}]},\"columnsVisibility\":{\"enabled\":true},\"densityToggle\":{\"enabled\":true}},\"columns\":[{\"field\":\"avatarUrl\",\"header\":{\"key\":\"employeeOperations.portfolio.column.person\",\"text\":\"Pessoa\"},\"type\":\"string\",\"width\":\"76px\",\"renderer\":{\"type\":\"avatar\",\"avatar\":{\"srcField\":\"avatarUrl\",\"altField\":\"nomeCompleto\",\"initialsField\":\"nomeCompleto\",\"shape\":\"circle\",\"size\":36}}},{\"field\":\"nomeCompleto\",\"header\":{\"key\":\"employeeOperations.portfolio.column.employee\",\"text\":\"Funcionário\"},\"type\":\"string\",\"width\":\"220px\",\"sticky\":\"start\"},{\"field\":\"ativo\",\"header\":{\"key\":\"employeeOperations.portfolio.column.employment\",\"text\":\"Vínculo\"},\"type\":\"boolean\",\"format\":\"active-inactive\",\"width\":\"120px\",\"align\":\"center\",\"conditionalRenderers\":[{\"condition\":{\"==\":[{\"var\":\"ativo\"},true]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":{\"key\":\"employeeOperations.portfolio.status.active\",\"text\":\"Ativo\"},\"color\":\"success\",\"variant\":\"filled\",\"icon\":\"check_circle\"}}},{\"condition\":{\"==\":[{\"var\":\"ativo\"},false]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":{\"key\":\"employeeOperations.portfolio.status.inactive\",\"text\":\"Inativo\"},\"color\":\"warn\",\"variant\":\"outlined\",\"icon\":\"block\"}}}]},{\"field\":\"cargoNome\",\"header\":{\"key\":\"employeeOperations.portfolio.column.role\",\"text\":\"Cargo\"},\"type\":\"string\",\"width\":\"190px\",\"renderer\":{\"type\":\"chip\",\"chip\":{\"textField\":\"cargoNome\",\"variant\":\"outlined\",\"color\":\"primary\"}}},{\"field\":\"departamentoNome\",\"header\":{\"key\":\"employeeOperations.portfolio.column.department\",\"text\":\"Departamento\"},\"type\":\"string\",\"width\":\"220px\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"departamentoNome\",\"variant\":\"soft\",\"color\":\"accent\"}}},{\"field\":\"dataAdmissao\",\"header\":{\"key\":\"employeeOperations.portfolio.column.hiredAt\",\"text\":\"Admissão\"},\"type\":\"date\",\"format\":\"dd/MM/yyyy\",\"width\":\"132px\"},{\"field\":\"salario\",\"header\":{\"key\":\"employeeOperations.portfolio.column.salary\",\"text\":\"Salário base\"},\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"end\",\"width\":\"150px\"},{\"field\":\"email\",\"header\":{\"key\":\"employeeOperations.portfolio.column.contact\",\"text\":\"Contato\"},\"type\":\"string\",\"width\":\"240px\"}],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":8,\"pageSizeOptions\":[8,16,32],\"position\":\"bottom\"},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"column\":\"id\",\"direction\":\"asc\"}},\"filtering\":{\"enabled\":true,\"strategy\":\"server\",\"debounceTime\":300,\"advancedFilters\":{\"enabled\":true,\"settings\":{\"alwaysVisibleFields\":[\"departamentoIdsIn\",\"dataAdmissaoRange\",\"salarioBetween\"],\"allowSaveTags\":true,\"tags\":[{\"id\":\"executive-pay-band\",\"label\":\"Faixa executiva\",\"patch\":{\"salarioBetween\":[39000,40000]}}],\"advancedOpenMode\":\"modal\",\"advancedClearButtonsEnabled\":true,\"changeDebounceMs\":300}}},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"persistSelection\":false},\"density\":\"compact\"},\"actions\":{\"row\":{\"enabled\":true,\"display\":\"icons\",\"position\":\"end\",\"sticky\":\"end\",\"header\":{\"label\":{\"key\":\"employeeOperations.portfolio.actions.header\",\"text\":\"Ações\"},\"icon\":\"bolt\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.actions.tooltip\",\"text\":\"Visualizar, editar ou atualizar o vínculo\"}},\"behavior\":{\"enabled\":true,\"maxInline\":{\"xs\":0,\"sm\":1,\"md\":2,\"lg\":3},\"autoStrategy\":\"breakpoints\"},\"actions\":[{\"id\":\"view\",\"label\":{\"key\":\"employeeOperations.portfolio.action.view\",\"text\":\"Visualizar\"},\"icon\":\"visibility\",\"action\":\"view\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.action.view.tooltip\",\"text\":\"Ver dados do funcionário\"}},{\"id\":\"edit\",\"label\":{\"key\":\"employeeOperations.portfolio.action.edit\",\"text\":\"Editar\"},\"icon\":\"edit\",\"action\":\"edit\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.action.edit.tooltip\",\"text\":\"Editar dados do funcionário\"}},{\"id\":\"deactivate\",\"label\":{\"key\":\"employeeOperations.portfolio.action.deactivate\",\"text\":\"Inativar\"},\"icon\":\"person_off\",\"color\":\"warn\",\"action\":\"deactivate\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.action.deactivate.tooltip\",\"text\":\"Inativar vínculo e registrar motivo e vigência\"},\"visibleWhen\":{\"==\":[{\"var\":\"ativo\"},true]}},{\"id\":\"reactivate\",\"label\":{\"key\":\"employeeOperations.portfolio.action.reactivate\",\"text\":\"Reativar\"},\"icon\":\"person_add\",\"color\":\"primary\",\"action\":\"reactivate\",\"tooltip\":{\"key\":\"employeeOperations.portfolio.action.reactivate.tooltip\",\"text\":\"Reativar vínculo e registrar motivo e vigência\"},\"visibleWhen\":{\"==\":[{\"var\":\"ativo\"},false]}}]}},\"appearance\":{\"density\":\"compact\",\"stickyHeader\":true,\"stripedRows\":false,\"hoverHighlight\":true,\"responsive\":{\"breakpoints\":{\"mobile\":640},\"mobile\":{\"horizontalScroll\":false,\"cardMode\":true,\"priorityColumns\":[\"nomeCompleto\",\"ativo\",\"cargoNome\"]}}},\"export\":{\"enabled\":true,\"formats\":[\"csv\",\"excel\"],\"general\":{\"includeHeaders\":true,\"respectFilters\":true,\"applyFormatting\":true,\"defaultFileName\":\"carteira-funcionarios\",\"includeColumns\":\"visible\",\"scope\":\"currentPage\",\"maxRows\":5000},\"excel\":{\"sheetName\":\"Funcionários\",\"autoFitColumns\":true,\"freezeHeaders\":true}}},\"defaults\":{\"openMode\":\"drawer\"},\"actions\":[{\"action\":\"create\",\"openMode\":\"drawer\"},{\"action\":\"view\",\"openMode\":\"drawer\"},{\"action\":\"edit\",\"openMode\":\"drawer\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"rowAction\":\"emit\",\"selectionChange\":\"emit\",\"afterSave\":\"emit\",\"afterDelete\":\"emit\"}}}]}}",
|
|
3461
3461
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
|
|
3462
|
-
"contentHash": "
|
|
3462
|
+
"contentHash": "1e4e5a787c01c2a652e4a19ddd3b4778f9758ae728e462847f26ea903305b4c9",
|
|
3463
3463
|
"sourceKind": "component_definition",
|
|
3464
3464
|
"sourceId": "praxis-dynamic-page",
|
|
3465
3465
|
"corpusVersion": "1.0.0"
|
|
@@ -7453,6 +7453,7 @@ class ComponentMetadataRegistry {
|
|
|
7453
7453
|
metadataMap = new Map();
|
|
7454
7454
|
rawMetadataMap = new Map();
|
|
7455
7455
|
editorialMetadataMap = new Map();
|
|
7456
|
+
rawEditorialMetadataMap = new Map();
|
|
7456
7457
|
editorialControlTypeIndex = new Map();
|
|
7457
7458
|
legacyControlTypeIndex = new Map();
|
|
7458
7459
|
componentTypeAliases = {
|
|
@@ -7468,7 +7469,9 @@ class ComponentMetadataRegistry {
|
|
|
7468
7469
|
/** Register a component metadata entry. */
|
|
7469
7470
|
register(meta) {
|
|
7470
7471
|
const normalized = this.normalizeMeta(meta);
|
|
7471
|
-
|
|
7472
|
+
const existing = this.metadataMap.get(normalized.id);
|
|
7473
|
+
if (this.rawMetadataMap.get(normalized.id) === meta ||
|
|
7474
|
+
(existing && this.isEquivalentRegistration(existing, normalized))) {
|
|
7472
7475
|
return;
|
|
7473
7476
|
}
|
|
7474
7477
|
this.assertCanRegisterMetadata(normalized);
|
|
@@ -7482,7 +7485,13 @@ class ComponentMetadataRegistry {
|
|
|
7482
7485
|
/** Register an editorial descriptor that can later be resolved by controlType or metadata id. */
|
|
7483
7486
|
registerEditorial(meta) {
|
|
7484
7487
|
const normalized = this.normalizeEditorialDescriptor(meta);
|
|
7488
|
+
const existing = this.editorialMetadataMap.get(normalized.componentMetaId);
|
|
7489
|
+
if (this.rawEditorialMetadataMap.get(normalized.componentMetaId) === meta ||
|
|
7490
|
+
(existing && this.isEquivalentRegistration(existing, normalized))) {
|
|
7491
|
+
return;
|
|
7492
|
+
}
|
|
7485
7493
|
this.assertCanRegisterEditorialMetadata(normalized);
|
|
7494
|
+
this.rawEditorialMetadataMap.set(normalized.componentMetaId, meta);
|
|
7486
7495
|
this.editorialMetadataMap.set(normalized.componentMetaId, normalized);
|
|
7487
7496
|
this.editorialControlTypeIndex.set(this.normalizeComponentType(normalized.controlType), normalized.componentMetaId);
|
|
7488
7497
|
}
|
|
@@ -7610,6 +7619,38 @@ class ComponentMetadataRegistry {
|
|
|
7610
7619
|
tags: meta.tags?.slice(),
|
|
7611
7620
|
};
|
|
7612
7621
|
}
|
|
7622
|
+
isEquivalentRegistration(left, right, propertyKey) {
|
|
7623
|
+
if (Object.is(left, right)) {
|
|
7624
|
+
return true;
|
|
7625
|
+
}
|
|
7626
|
+
if (typeof left !== typeof right || left === null || right === null) {
|
|
7627
|
+
return false;
|
|
7628
|
+
}
|
|
7629
|
+
if (typeof left === 'function' && typeof right === 'function') {
|
|
7630
|
+
if (propertyKey === 'component') {
|
|
7631
|
+
return true;
|
|
7632
|
+
}
|
|
7633
|
+
return Function.prototype.toString.call(left) === Function.prototype.toString.call(right);
|
|
7634
|
+
}
|
|
7635
|
+
if (Array.isArray(left) || Array.isArray(right)) {
|
|
7636
|
+
if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) {
|
|
7637
|
+
return false;
|
|
7638
|
+
}
|
|
7639
|
+
return left.every((value, index) => this.isEquivalentRegistration(value, right[index]));
|
|
7640
|
+
}
|
|
7641
|
+
if (typeof left !== 'object' || typeof right !== 'object') {
|
|
7642
|
+
return false;
|
|
7643
|
+
}
|
|
7644
|
+
const leftRecord = left;
|
|
7645
|
+
const rightRecord = right;
|
|
7646
|
+
const leftKeys = Object.keys(leftRecord);
|
|
7647
|
+
const rightKeys = Object.keys(rightRecord);
|
|
7648
|
+
if (leftKeys.length !== rightKeys.length) {
|
|
7649
|
+
return false;
|
|
7650
|
+
}
|
|
7651
|
+
return leftKeys.every((key) => Object.prototype.hasOwnProperty.call(rightRecord, key) &&
|
|
7652
|
+
this.isEquivalentRegistration(leftRecord[key], rightRecord[key], key));
|
|
7653
|
+
}
|
|
7613
7654
|
assertCanRegisterMetadata(meta) {
|
|
7614
7655
|
if (this.metadataMap.has(meta.id)) {
|
|
7615
7656
|
throw new Error(`Component metadata id collision: ${meta.id}`);
|
|
@@ -14357,8 +14398,8 @@ class RelatedResourceSurfaceResolverService {
|
|
|
14357
14398
|
...(payload.widget.inputs || {}),
|
|
14358
14399
|
configPersistenceStrategy: 'volatile',
|
|
14359
14400
|
resourcePath: this.normalizeResourcePath(relatedResource.childResourcePath),
|
|
14360
|
-
apiEndpointKey: request.apiEndpointKey
|
|
14361
|
-
apiUrlEntry: request.apiUrlEntry
|
|
14401
|
+
...(request.apiEndpointKey != null ? { apiEndpointKey: request.apiEndpointKey } : {}),
|
|
14402
|
+
...(request.apiUrlEntry != null ? { apiUrlEntry: request.apiUrlEntry } : {}),
|
|
14362
14403
|
tableId: request.tableId || this.buildStableTableId(surface, relatedResource, parentResourceId),
|
|
14363
14404
|
config: this.buildTableConfig(surface, relatedResource, request),
|
|
14364
14405
|
queryContext,
|
|
@@ -15763,6 +15804,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
15763
15804
|
class SurfaceOpenMaterializerService {
|
|
15764
15805
|
discovery = inject(ResourceDiscoveryService);
|
|
15765
15806
|
async materialize(payload, context) {
|
|
15807
|
+
if (this.shouldPreserveRelatedRemoteTable(payload)) {
|
|
15808
|
+
return payload;
|
|
15809
|
+
}
|
|
15766
15810
|
if (!this.shouldMaterializeItemReadProjection(payload)) {
|
|
15767
15811
|
return payload;
|
|
15768
15812
|
}
|
|
@@ -15917,6 +15961,20 @@ class SurfaceOpenMaterializerService {
|
|
|
15917
15961
|
surface?.['scope'] === 'ITEM' &&
|
|
15918
15962
|
String(surface?.['method'] || '').toUpperCase() === 'GET');
|
|
15919
15963
|
}
|
|
15964
|
+
shouldPreserveRelatedRemoteTable(payload) {
|
|
15965
|
+
if (payload.widget?.id !== 'praxis-table' || !payload.context?.['relatedResource']) {
|
|
15966
|
+
return false;
|
|
15967
|
+
}
|
|
15968
|
+
if (this.hasRelatedChildWriteOperations(payload)) {
|
|
15969
|
+
return false;
|
|
15970
|
+
}
|
|
15971
|
+
if (payload.widget.inputs?.['apiEndpointKey'] != null ||
|
|
15972
|
+
payload.widget.inputs?.['apiUrlEntry'] != null) {
|
|
15973
|
+
return false;
|
|
15974
|
+
}
|
|
15975
|
+
const resourcePath = String(payload.widget.inputs?.['resourcePath'] || '').trim();
|
|
15976
|
+
return Boolean(resourcePath && !/[{}]/u.test(resourcePath));
|
|
15977
|
+
}
|
|
15920
15978
|
resolveResponseCardinality(payload) {
|
|
15921
15979
|
const surface = payload.context?.['surface'];
|
|
15922
15980
|
const cardinality = String(surface?.['responseCardinality'] || '').toUpperCase();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/core",
|
|
3
|
-
"version": "9.0.4-rc.
|
|
3
|
+
"version": "9.0.4-rc.44",
|
|
4
4
|
"description": "Core library for Praxis UI Workspace: types, tokens, services and utilities shared across @praxisui/* packages.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
package/types/praxisui-core.d.ts
CHANGED
|
@@ -9084,6 +9084,7 @@ declare class ComponentMetadataRegistry {
|
|
|
9084
9084
|
private readonly metadataMap;
|
|
9085
9085
|
private readonly rawMetadataMap;
|
|
9086
9086
|
private readonly editorialMetadataMap;
|
|
9087
|
+
private readonly rawEditorialMetadataMap;
|
|
9087
9088
|
private readonly editorialControlTypeIndex;
|
|
9088
9089
|
private readonly legacyControlTypeIndex;
|
|
9089
9090
|
private readonly componentTypeAliases;
|
|
@@ -9109,6 +9110,7 @@ declare class ComponentMetadataRegistry {
|
|
|
9109
9110
|
*/
|
|
9110
9111
|
private normalizeMeta;
|
|
9111
9112
|
private normalizeEditorialDescriptor;
|
|
9113
|
+
private isEquivalentRegistration;
|
|
9112
9114
|
private assertCanRegisterMetadata;
|
|
9113
9115
|
private assertCanRegisterEditorialMetadata;
|
|
9114
9116
|
private resolveEditorialDescriptor;
|
|
@@ -10346,6 +10348,7 @@ declare class SurfaceOpenMaterializerService {
|
|
|
10346
10348
|
materialize(payload: SurfaceOpenPayload, context?: SurfaceOpenMaterializationContext): Promise<SurfaceOpenPayload>;
|
|
10347
10349
|
private projectMaterializedFormInputs;
|
|
10348
10350
|
private shouldMaterializeItemReadProjection;
|
|
10351
|
+
private shouldPreserveRelatedRemoteTable;
|
|
10349
10352
|
private resolveResponseCardinality;
|
|
10350
10353
|
private shouldMaterializeAsCollection;
|
|
10351
10354
|
private shouldPreserveCollectionPresentation;
|