metis-desk/docs/auditoria-ayuda-contextual-dialogos.md

314 lines
57 KiB
Markdown
Raw Normal View History

# Auditoría de ayuda contextual en diálogos
Fecha: 25 de octubre de 2026. Alcance: código frontend activo de `modules/*/src/web` y componentes propios de `packages/rdx-ui/src`. Se excluyen vendor, archive y fixtures de navegador.
## Resultado e infraestructura
Se han auditado **95 componentes modales de módulos y 7 constructores/adaptadores compartidos** (102 unidades). El recuento es por componente, no por variantes de alta/edición ni por diálogos anidados. **59 componentes de módulo contienen ayuda: 58 adoptan el patrón bajo demanda y 1 conserva su consulta de ayuda dedicada**. Además, el constructor compartido `FieldPickerDialog` migra su ayuda breve y cubre los dos adaptadores de catálogo ya contabilizados. Las demás 36 unidades de módulos y 6 compartidas no tienen ayuda complementaria propia.
La búsqueda incluye FormDialog, DialogContent, ConfirmDeleteDialog, AlertDialog, Sheet, Drawer, formularios, wizards, pickers, bloques de información y claves de traducción. Se contrastó el inventario previo de modales con las fuentes actuales; los nombres de fichero no determinaron el alcance. Se siguieron imports y reexports de componentes para localizar ayuda en formularios descendientes, deteniendo el recorrido en diálogos anidados. Las variantes suministradas mediante callbacks se revisaron en sus consumidores.
Encontrados: `FormDialog`, `FormBody`, `FormActions`, `ContextHelp`, `FormHelp`, `PickerHelp`, `EntityHelp`, `CatalogHelp`, `SupportHelp` y `ProcessHelp`. Las primitivas instaladas son shadcn Base UI 1.8.0, estilo Vega. No existe un segundo sistema Radix que deba integrarse ni se ha modificado vendor.
## Decisiones
- Se amplía FormDialog mediante contexto y slots DOM. DialogHelp declara contenido traducido o React en cualquier descendiente. Los portales sitúan el botón en la cabecera y el contenido en el mismo diálogo, conservando sus contextos. No se registra contenido React mediante efectos ni se replica en estado.
- ContextHelp y FormHelp aprovechan el slot cuando están dentro de FormDialog; fuera conservan el contenido visible. Así se migran todos sus consumidores sin elevar traducciones ni duplicar configuraciones en cada editor/alta rápida. PickerHelp declara compact explícitamente.
- Auto significa ayuda estructurada (descripción, ámbito, ejemplos y orientación), equivalente a expanded. Compact se declara para una explicación breve; no se mide texto del DOM.
- ResizeObserver mide la superficie efectiva. Compact usa Popover desde 30rem; auto/expanded usan panel desde 60rem (40rem de formulario + 20rem de ayuda). En menor capacidad se usa vista interna. Las comparaciones usan el tamaño raíz de fuente; no dependen solo del viewport. Un diálogo pequeño en escritorio también utiliza vista interna.
- El formulario sigue montado en vista interna, con visibility:hidden, inert y aria-hidden; mantiene su geometría y sus datos. La ayuda ocupa esa misma región. Sus acciones no están disponibles mientras se consulta la vista interna. El panel no ensancha el diálogo ni crea otra capa modal.
- Escape se intercepta en el contrato onOpenChange de Base UI mediante reason=escape-key y cancel(); cierra la ayuda antes que el diálogo. X conserva el cierre de Base UI. El cierre de ayuda devuelve foco al botón; al abrir o cambiar de modalidad se enfoca el encabezado de ayuda.
- Las etiquetas genéricas se traducen en apps/web a través de core.dialogHelp y se suministran a rdx-ui, que permanece independiente de i18next y del dominio.
## Criterios y excepciones
Se migran exclusivamente bloques complementarios de ContextHelp/FormHelp y la ayuda general de PickerHelp. Se conserva íntegramente descripción, ámbito, listas plegables, ejemplos, orientación e iconos personalizados. No se modifica ninguna traducción de ayuda previa ni contratos HTTP, modelos o persistencia.
| Categoría | Decisión y ejemplos |
| --- | --- |
| Ayuda general complementaria | Bajo demanda: ContextHelp/FormHelp, EntityHelp, CatalogHelp, ProcessHelp y SupportHelp. |
| Instrucciones de campo | Visibles: choicesHelp, addressHelp, instrucciones de plantilla/resolución, licencia, límites de nombre, fecha de alta y estado técnico, carga de imágenes y formatos. |
| Consecuencias y seguridad | Visibles: desactivación de personas/sedes/departamentos, retirada de identidad local, avisos de alta global/local y datos creados aunque se cancele la relación. |
| Validación y transporte | Visibles: InventoryFeedback, CompanyFeedback, errores de campo, concurrencia, permisos, reintento y fallos de guardado/refresco. |
| Confirmaciones destructivas | Se conserva descripción/confirmación visible en ConfirmDeleteDialog y editores de cierre. |
| Vacío y orientación operativa | Se conservan EmptyState, selección/destino, contadores y restricciones de selección. |
| Consulta dedicada de ayuda | AccessHelpDialog mantiene EntityHelp placement=inline visible: ocultarlo tras otro ? dejaría vacía su tarea principal. Es la única excepción a la migración de bloques generales. |
Los títulos y descripciones de los diálogos de consulta, historiales, selección de compañía y software del puesto son contenido funcional. El texto requiredColumnHelp de configuración de columnas explica una restricción activa y continúa visible. No se añade ? por el mero hecho de contener texto informativo.
## Inventario final
“Migrado” acredita integración en el sistema compartido y revisión estática; la validación interactiva representativa se detalla aparte y no implica haber abierto todas las variantes. Las columnas de contenido apuntan a las declaraciones originales con sus claves conservadas.
### assets
| Componente / archivo | Composición | Ayuda y ubicación anterior | Longitud y propuesta | Particularidades / estado |
| --- | --- | --- | --- | --- |
| [EndRelationshipDialog](../modules/assets/src/web/asset-relationships/end/ui/end-relationship-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | acciones de formulario · Auditado · conserva contenido funcional |
| [RelationshipEditorDialog](../modules/assets/src/web/asset-relationships/shared/ui/relationship-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/asset-relationships/shared/ui/relationship-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [WorkstationAssetCreateDialog](../modules/assets/src/web/assets/create/ui/workstation-asset-create-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/assets/shared/ui/asset-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [AssetDetailDialog](../modules/assets/src/web/assets/detail/ui/asset-detail-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable, tamaño variable/amplio · Auditado · conserva contenido funcional |
| [AssetPickerDialog](../modules/assets/src/web/assets/select/ui/asset-picker-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable, acciones de formulario, tamaño variable/amplio · Auditado · conserva contenido funcional |
| [AssetEditorDialog](../modules/assets/src/web/assets/shared/ui/asset-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/assets/shared/ui/asset-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
| [DeleteAssetDialog](../modules/assets/src/web/assets/shared/ui/delete-asset-dialog.tsx) | ConfirmDeleteDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [DeleteBrandDialog](../modules/assets/src/web/brands/delete/ui/delete-brand-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | acciones de formulario · Auditado · conserva contenido funcional |
| [BrandEditorDialog](../modules/assets/src/web/brands/shared/ui/brand-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/brands/shared/ui/brand-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [DeleteCatalogDefinitionDialog](../modules/assets/src/web/catalog/delete/ui/delete-catalog-definition-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | acciones de formulario · Auditado · conserva contenido funcional |
| [CatalogDefinitionDialog](../modules/assets/src/web/catalog/detail/ui/catalog-definition-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/catalog/shared/ui/catalog-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | tamaño variable/amplio · Migrado · contenido conservado |
| [CatalogEditorDialog](../modules/assets/src/web/catalog/shared/ui/catalog-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/catalog/shared/ui/catalog-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [CatalogFieldCreateDialog](../modules/assets/src/web/catalog-fields/create/ui/catalog-field-create-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/catalog/shared/ui/catalog-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [CatalogFieldPickerDialog](../modules/assets/src/web/catalog-fields/select/ui/catalog-field-picker-dialog.tsx) | FieldPickerDialog | [PickerHelp](../packages/rdx-ui/src/components/field-picker-dialog.tsx) · bloque en cuerpo o antes de acciones | Breve · Popover / vista | Migrado · contenido conservado |
| [CatalogRelationCreateDialog](../modules/assets/src/web/catalog-relations/create/ui/catalog-relation-create-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/catalog/shared/ui/catalog-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [CatalogTemplateCreateDialog](../modules/assets/src/web/catalog-templates/create/ui/catalog-template-create-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/catalog/shared/ui/catalog-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [DirectoryMembershipEditor](../modules/assets/src/web/directory-memberships/manage/ui/directory-membership-editor.tsx) | FormDialog | [FormHelp](../modules/assets/src/web/directory-memberships/manage/ui/directory-membership-editor.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
| [EndDirectoryMembershipDialog](../modules/assets/src/web/directory-memberships/manage/ui/end-directory-membership-dialog.tsx) | ConfirmDeleteDialog | Sin ayuda complementaria propia | — | altura estable · Auditado · conserva contenido funcional |
| [DirectoryDomainPicker](../modules/assets/src/web/directory-memberships/select/ui/directory-domain-picker.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable · Auditado · conserva contenido funcional |
| [InfrastructureEditorDialog](../modules/assets/src/web/infrastructure/shared/ui/infrastructure-editor-dialog.tsx) | FormDialog | [FormHelp](../modules/assets/src/web/infrastructure/shared/ui/infrastructure-editor-dialog.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [PublicationEditor](../modules/assets/src/web/network-share-publications/manage/ui/publication-editor.tsx) | FormDialog | [FormHelp](../modules/assets/src/web/network-share-publications/manage/ui/publication-editor.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
| [DeleteRecordDialog](../modules/assets/src/web/shared/ui/delete-record-dialog.tsx) | ConfirmDeleteDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [SupportHistoryDialog](../modules/assets/src/web/support-connections/history/ui/support-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [AssetSupportManagementDialog](../modules/assets/src/web/support-connections/list/ui/asset-support-management-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable · Auditado · conserva contenido funcional |
| [SupportConnectionEditorDialog](../modules/assets/src/web/support-connections/shared/ui/support-connection-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/assets/src/web/support-connections/shared/ui/support-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [SupportResourceCreateDialog](../modules/assets/src/web/support-connections/shared/ui/support-resource-create-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [WorkstationAssetAddDialog](../modules/assets/src/web/workstations/associate-assets/ui/workstation-asset-add-dialog.tsx) | FormDialog | [PickerHelp](../modules/assets/src/web/workstations/associate-assets/ui/workstation-asset-add-dialog.tsx) · bloque en cuerpo o antes de acciones | Breve · Popover / vista | altura estable, acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [WorkstationHistoryDialog](../modules/assets/src/web/workstations/history/ui/workstation-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable, tamaño variable/amplio · Auditado · conserva contenido funcional |
| [WorkstationEditorDialog](../modules/assets/src/web/workstations/shared/ui/workstation-editor-dialog.tsx) | FormDialog | [FormHelp](../modules/assets/src/web/workstations/shared/ui/workstation-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
| [WorkstationLifecycleDialog](../modules/assets/src/web/workstations/shared/ui/workstation-lifecycle-dialog.tsx) | ConfirmDeleteDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
### companies
| Componente / archivo | Composición | Ayuda y ubicación anterior | Longitud y propuesta | Particularidades / estado |
| --- | --- | --- | --- | --- |
| [AccessQuickEditor](../modules/companies/src/web/access/create/ui/access-quick-editor.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [QuickCreateDialog](../modules/companies/src/web/access/create/ui/quick-create-dialog.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [AccessHelpDialog](../modules/companies/src/web/access/help/ui/access-help-dialog.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Contenido principal visible | Consulta dedicada visible · excepción justificada |
| [AccessHistory](../modules/companies/src/web/access/history/ui/access-history.tsx) | FormDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [AccessEditorDialog](../modules/companies/src/web/access/shared/ui/access-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx); [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [ApplicationQuickEditor](../modules/companies/src/web/application-configurations/create/ui/application-quick-editor.tsx) | FormDialog | [FormHelp](../modules/companies/src/web/work-profiles/shared/ui/work-profile-form.tsx); [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [ApplicationHistoryDialog](../modules/companies/src/web/application-configurations/history/ui/application-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | tamaño variable/amplio · Auditado · conserva contenido funcional |
| [ApplicationConfigurationEditorDialog](../modules/companies/src/web/application-configurations/shared/ui/application-configuration-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/application-configurations/shared/ui/application-configuration-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
| [AssignmentHistoryDialog](../modules/companies/src/web/assignments/history/ui/assignment-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [AssignmentEditorDialog](../modules/companies/src/web/assignments/shared/ui/assignment-editor-dialog.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [CertificateQuickEditor](../modules/companies/src/web/certificate-configurations/create/ui/certificate-quick-editor.tsx) | FormDialog | [FormHelp](../modules/companies/src/web/work-profiles/shared/ui/work-profile-form.tsx); [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [CertificateHistoryDialog](../modules/companies/src/web/certificate-configurations/history/ui/certificate-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | tamaño variable/amplio · Auditado · conserva contenido funcional |
| [CertificateConfigurationEditorDialog](../modules/companies/src/web/certificate-configurations/shared/ui/certificate-configuration-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/certificate-configurations/shared/ui/certificate-configuration-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [InventoryQuickCreateDialog](../modules/companies/src/web/companies/detail/ui/inventory-quick-create-dialog.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [CompanyEditorDialog](../modules/companies/src/web/companies/shared/ui/company-editor-dialog.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [DashboardQuickCreate](../modules/companies/src/web/dashboard/create/ui/dashboard-quick-create.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [DashboardDetailsDialog](../modules/companies/src/web/dashboard/detail/ui/dashboard-details-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable, tamaño variable/amplio · Auditado · conserva contenido funcional |
| [DepartmentEditorDialog](../modules/companies/src/web/departments/shared/ui/department-editor-dialog.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [FolderQuickEditor](../modules/companies/src/web/folder-mappings/create/ui/folder-quick-editor.tsx) | FormDialog | [FormHelp](../modules/companies/src/web/work-profiles/shared/ui/work-profile-form.tsx); [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx); [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [FolderMappingHistoryDialog](../modules/companies/src/web/folder-mappings/history/ui/folder-mapping-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable, tamaño variable/amplio · Auditado · conserva contenido funcional |
| [FolderMappingEditorDialog](../modules/companies/src/web/folder-mappings/shared/ui/folder-mapping-editor-dialog.tsx) | FormDialog | [FormHelp](../modules/companies/src/web/folder-mappings/shared/ui/folder-mapping-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [LocalIdentityEditor](../modules/companies/src/web/local-identity-environments/manage/ui/local-identity-editor.tsx) | FormDialog | [FormHelp](../modules/companies/src/web/local-identity-environments/manage/ui/local-identity-editor.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
| [MailQuickEditor](../modules/companies/src/web/mail-configurations/create/ui/mail-quick-editor.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx); [FormHelp](../modules/companies/src/web/work-profiles/shared/ui/work-profile-form.tsx); [ContextHelp](../modules/companies/src/web/mailbox-uses/shared/ui/mailbox-use-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [MailConfigurationHistoryDialog](../modules/companies/src/web/mail-configurations/history/ui/mail-configuration-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | tamaño variable/amplio · Auditado · conserva contenido funcional |
| [MailConfigurationEditorDialog](../modules/companies/src/web/mail-configurations/shared/ui/mail-configuration-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/mail-configurations/shared/ui/mail-configuration-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [MailboxUseEditorDialog](../modules/companies/src/web/mailbox-uses/shared/ui/mailbox-use-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/mailbox-uses/shared/ui/mailbox-use-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [MailboxCreateDialog](../modules/companies/src/web/mailboxes/create/ui/mailbox-create-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [PersonEditorDialog](../modules/companies/src/web/people/shared/ui/person-editor-dialog.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [PrinterProfileCreateDialog](../modules/companies/src/web/printer-configurations/create/ui/printer-profile-create-dialog.tsx) | FormDialog | [FormHelp](../modules/companies/src/web/work-profiles/shared/ui/work-profile-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [PrinterHistoryDialog](../modules/companies/src/web/printer-configurations/history/ui/printer-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | tamaño variable/amplio · Auditado · conserva contenido funcional |
| [PrinterConfigurationEditorDialog](../modules/companies/src/web/printer-configurations/shared/ui/printer-configuration-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/printer-configurations/shared/ui/printer-configuration-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [ProcessTemplateEditorDialog](../modules/companies/src/web/process-templates/shared/ui/process-template-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/processes/shared/ui/process-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [ProcessQuickCreateDialog](../modules/companies/src/web/processes/create/ui/process-quick-create-dialog.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx); [ContextHelp](../modules/companies/src/web/processes/shared/ui/process-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [ProcessStartDialog](../modules/companies/src/web/processes/start/ui/process-start-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/processes/shared/ui/process-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [ProcessEditDialog](../modules/companies/src/web/processes/update/ui/process-edit-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/processes/shared/ui/process-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [RemoteQuickEditor](../modules/companies/src/web/remote-connections/create/ui/remote-quick-editor.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx); [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [RemoteConnectionHistoryDialog](../modules/companies/src/web/remote-connections/history/ui/remote-connection-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | tamaño variable/amplio · Auditado · conserva contenido funcional |
| [RemoteConnectionEditorDialog](../modules/companies/src/web/remote-connections/shared/ui/remote-connection-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/remote-connections/shared/ui/remote-connection-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [ConfigurationQuickEditor](../modules/companies/src/web/shared/ui/configuration-quick-editor.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx); [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx); [ContextHelp](../modules/assets/src/web/assets/shared/ui/asset-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [DeleteRecordDialog](../modules/companies/src/web/shared/ui/delete-record-dialog.tsx) | ConfirmDeleteDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [SiteDeleteDialog](../modules/companies/src/web/sites/delete/ui/site-delete-dialog.tsx) | ConfirmDeleteDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [SiteEditorDialog](../modules/companies/src/web/sites/shared/ui/site-editor-dialog.tsx) | FormDialog | [EntityHelp](../modules/companies/src/web/access/help/ui/entity-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [SoftwareResourceCreateDialog](../modules/companies/src/web/software-installations/create/ui/software-resource-create-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [SoftwareHistoryDialog](../modules/companies/src/web/software-installations/history/ui/software-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | tamaño variable/amplio · Auditado · conserva contenido funcional |
| [SoftwareInstallationEditorDialog](../modules/companies/src/web/software-installations/shared/ui/software-installation-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/software-installations/shared/ui/software-installation-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
| [TeleworkAuthorizationHistoryDialog](../modules/companies/src/web/telework-authorizations/history/ui/telework-authorization-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [TeleworkAuthorizationEditorDialog](../modules/companies/src/web/telework-authorizations/shared/ui/telework-authorization-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/companies/src/web/telework-authorizations/shared/ui/telework-authorization-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [WorkProfileHistoryDialog](../modules/companies/src/web/work-profiles/history/ui/work-profile-history-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | tamaño variable/amplio · Auditado · conserva contenido funcional |
| [WorkProfileEditorDialog](../modules/companies/src/web/work-profiles/shared/ui/work-profile-editor-dialog.tsx) | FormDialog | [FormHelp](../modules/companies/src/web/work-profiles/shared/ui/work-profile-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
| [WorkProfileLifecycleDialog](../modules/companies/src/web/work-profiles/shared/ui/work-profile-lifecycle-dialog.tsx) | ConfirmDeleteDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [WorkspaceSettingsDialog](../modules/companies/src/web/workspace/settings/ui/workspace-settings-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [WorkspaceMobileSheet](../modules/companies/src/web/workspace/shared/ui/workspace-mobile-sheet.tsx) | SheetContent | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [WorkstationSoftwareDialog](../modules/companies/src/web/workstations/detail/ui/workstation-software-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable, tamaño variable/amplio · Auditado · conserva contenido funcional |
### resources
| Componente / archivo | Composición | Ayuda y ubicación anterior | Longitud y propuesta | Particularidades / estado |
| --- | --- | --- | --- | --- |
| [ApplicationCoincidencesDialog](../modules/resources/src/web/application-coincidences/review/ui/application-coincidences-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable · Auditado · conserva contenido funcional |
| [CatalogDefinitionDialog](../modules/resources/src/web/catalog/detail/ui/catalog-definition-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/catalog/shared/ui/catalog-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | tamaño variable/amplio · Migrado · contenido conservado |
| [CatalogEditorDialog](../modules/resources/src/web/catalog/shared/ui/catalog-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/catalog/shared/ui/catalog-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [CatalogFieldCreateDialog](../modules/resources/src/web/catalog-fields/create/ui/catalog-field-create-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/catalog/shared/ui/catalog-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario · Migrado · contenido conservado |
| [CatalogFieldPickerDialog](../modules/resources/src/web/catalog-fields/select/ui/catalog-field-picker-dialog.tsx) | FieldPickerDialog | [PickerHelp](../packages/rdx-ui/src/components/field-picker-dialog.tsx) · bloque en cuerpo o antes de acciones | Breve · Popover / vista | Migrado · contenido conservado |
| [CatalogTemplateCreateDialog](../modules/resources/src/web/catalog-templates/create/ui/catalog-template-create-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/catalog/shared/ui/catalog-help.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [GlobalApplicationEditorDialog](../modules/resources/src/web/global-applications/shared/ui/global-application-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/global-applications/shared/ui/global-application-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
| [ResourceDetailDialog](../modules/resources/src/web/resources/detail/ui/resource-detail-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable, tamaño variable/amplio · Auditado · conserva contenido funcional |
| [DeleteResourceDialog](../modules/resources/src/web/resources/lifecycle/ui/delete-resource-dialog.tsx) | ConfirmDeleteDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [ResourceEditorDialog](../modules/resources/src/web/resources/shared/ui/resource-editor-dialog.tsx) | FormDialog | [ContextHelp](../modules/resources/src/web/resources/shared/ui/resource-form.tsx) · bloque en cuerpo o antes de acciones | Extensa · panel / vista | altura estable, acciones de formulario · Migrado · contenido conservado |
### identity
| Componente / archivo | Composición | Ayuda y ubicación anterior | Longitud y propuesta | Particularidades / estado |
| --- | --- | --- | --- | --- |
| [AccountPasswordDialog](../modules/identity/src/web/passwords/change/ui/account-password-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | acciones de formulario · Auditado · conserva contenido funcional |
| [UserEditorDialog](../modules/identity/src/web/users/shared/ui/user-editor-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | acciones de formulario · Auditado · conserva contenido funcional |
### rdx-ui
| Componente / archivo | Composición | Ayuda y ubicación anterior | Longitud y propuesta | Particularidades / estado |
| --- | --- | --- | --- | --- |
| [ConfirmDeleteDialog](../packages/rdx-ui/src/components/confirm-delete-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | acciones de formulario · Auditado · conserva contenido funcional |
| [EntityTableColumnsDialog](../packages/rdx-ui/src/components/entity-table-columns-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable · Auditado · conserva contenido funcional |
| [FieldPickerDialog](../packages/rdx-ui/src/components/field-picker-dialog.tsx) | FormDialog | [PickerHelp](../packages/rdx-ui/src/components/field-picker-dialog.tsx) · bloque en cuerpo o antes de acciones | Breve · Popover / vista | altura estable, acciones de formulario, tamaño variable/amplio · Migrado · contenido conservado |
| [FormDialog](../packages/rdx-ui/src/components/form-dialog.tsx) | DialogContent | Sin ayuda complementaria propia | — | acciones de formulario, tamaño variable/amplio · Auditado · conserva contenido funcional |
| [OptionPickerDialog](../packages/rdx-ui/src/components/option-picker-dialog.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable, acciones de formulario · Auditado · conserva contenido funcional |
| [OptionSelectionField](../packages/rdx-ui/src/components/option-selection-field.tsx) | OptionPickerDialog | Sin ayuda complementaria propia | — | Auditado · conserva contenido funcional |
| [RemoteOptionPicker](../packages/rdx-ui/src/components/remote-option-picker.tsx) | FormDialog | Sin ayuda complementaria propia | — | altura estable, acciones de formulario · Auditado · conserva contenido funcional |
En AccessQuickEditor, el callback NestedAccessForm lo aporta AccessForm: las variantes de
cuenta/acceso utilizan EntityHelp y la variante recurso utiliza ResourceEditor/ContextHelp.
Comparten el contexto del diálogo activo; sus altas anidadas reciben otro FormDialog.
## Declaraciones y claves conservadas
Las traducciones existentes se siguen resolviendo en sus namespaces originales (assets, companies, access, resources). Los títulos, descripciones, ámbitos, ejemplos y orientación se conservan en las mismas expresiones JSX.
| Archivo de declaración | Expresiones de contenido |
| --- | --- |
| [modules/assets/src/web/asset-relationships/shared/ui/relationship-form.tsx](../modules/assets/src/web/asset-relationships/shared/ui/relationship-form.tsx) | ``t("relationshipHelp")``; ``t("relationshipExample")``; ``t("examplesLabel")``; ``t("relationshipGuidance")``; ``t("helpTitle")`` |
| [modules/assets/src/web/assets/shared/ui/asset-form.tsx](../modules/assets/src/web/assets/shared/ui/asset-form.tsx) | ``t("assetDescription")``; ``t("assetExamples")``; ``t("examplesLabel")``; ``t("assetGuidance")``; ``t("assetScope")``; ``t("helpTitle")`` |
| [modules/assets/src/web/brands/shared/ui/brand-form.tsx](../modules/assets/src/web/brands/shared/ui/brand-form.tsx) | ``t("brands.help")``; ``t("brands.examples")``; ``t("examplesLabel")``; ``t("brands.guidance")``; ``t("globalHelp")``; ``t("helpTitle")`` |
| [modules/assets/src/web/catalog/shared/ui/catalog-help.tsx](../modules/assets/src/web/catalog/shared/ui/catalog-help.tsx) | ``t(`${kind}Description`)``; ``t(`${kind}Examples`)``; ``t("examplesLabel")``; ``t(`${kind}Guidance`)``; ``t(scope === "global" ? "globalHelp" : "companyHelp")``; ``t("helpTitle")`` |
| [modules/assets/src/web/directory-memberships/manage/ui/directory-membership-editor.tsx](../modules/assets/src/web/directory-memberships/manage/ui/directory-membership-editor.tsx) | ``t("directoryUi.help")``; ``t("directoryUi.example")``; ``t("directoryUi.examples")``; ``t("directoryUi.guidance")``; ``t("directoryUi.helpTitle")`` |
| [modules/assets/src/web/infrastructure/shared/ui/infrastructure-editor-dialog.tsx](../modules/assets/src/web/infrastructure/shared/ui/infrastructure-editor-dialog.tsx) | ``t("infrastructure.help")``; ``t("infrastructure.examples")``; ``t("infrastructure.examplesLabel")``; ``t("infrastructure.guidance")``; ``t("infrastructure.helpTitle")`` |
| [modules/assets/src/web/network-share-publications/manage/ui/publication-editor.tsx](../modules/assets/src/web/network-share-publications/manage/ui/publication-editor.tsx) | ``t("shareUi.help")``; ``t("shareUi.example")``; ``t("shareUi.examples")``; ``t( operation.action === "transfer" ? "shareUi.transferHelp" : operation.action === "end" ? "shareUi.endHelp" : "shareUi.publishHelp" )``; ``t("shareUi.documentary")``; ``t("shareUi.helpTitle")`` |
| [modules/assets/src/web/support-connections/shared/ui/support-help.tsx](../modules/assets/src/web/support-connections/shared/ui/support-help.tsx) | ``t("support.description")``; ``t("support.examples")``; ``t("support.examplesLabel")``; ``t("support.guidance")``; ``t("support.scope")``; ``t("support.help")`` |
| [modules/assets/src/web/workstations/associate-assets/ui/workstation-asset-add-dialog.tsx](../modules/assets/src/web/workstations/associate-assets/ui/workstation-asset-add-dialog.tsx) | ``t("workstationAdd.help")``; ``t("workstationAdd.helpLabel")``; ``t("workstationAdd.title")`` |
| [modules/assets/src/web/workstations/shared/ui/workstation-form.tsx](../modules/assets/src/web/workstations/shared/ui/workstation-form.tsx) | ``t("workstationDescription")``; ``t("workstationExamples")``; ``t("examplesLabel")``; ``t("workstationGuidance")``; ``t("workstationScope")``; ``t("helpTitle")`` |
| [modules/companies/src/web/access/help/ui/entity-help.tsx](../modules/companies/src/web/access/help/ui/entity-help.tsx) | ``t(`helpContent.${kind}.description`)``; ``t(`helpContent.${kind}.examples`)``; ``t("helpExamples")``; ``t(`helpContent.${kind}.guidance`)``; ``catalogue && scope ? t(scope === "global" ? "helpGlobalScope" : "helpCompanyScope") : undefined``; ``t("helpTitle")`` |
| [modules/companies/src/web/application-configurations/shared/ui/application-configuration-form.tsx](../modules/companies/src/web/application-configurations/shared/ui/application-configuration-form.tsx) | ``t("applications.description")``; ``t("applications.examples")``; ``t("mail.examplesLabel")``; ``t("applications.guidance")``; ``t("applications.scope")``; ``t("applications.help")`` |
| [modules/companies/src/web/certificate-configurations/shared/ui/certificate-configuration-form.tsx](../modules/companies/src/web/certificate-configurations/shared/ui/certificate-configuration-form.tsx) | ``t("certificates.description")``; ``t("certificates.examples")``; ``t("mail.examplesLabel")``; ``t("certificates.guidance")``; ``t("certificates.scope")``; ``t("certificates.help")`` |
| [modules/companies/src/web/folder-mappings/shared/ui/folder-mapping-form.tsx](../modules/companies/src/web/folder-mappings/shared/ui/folder-mapping-form.tsx) | ``t("folders.description")``; ``t("folders.examples")``; ``t("mail.examplesLabel")``; ``t("folders.guidance")``; ```${t("folders.scope")``; ``t("folders.help")`` |
| [modules/companies/src/web/local-identity-environments/manage/ui/local-identity-editor.tsx](../modules/companies/src/web/local-identity-environments/manage/ui/local-identity-editor.tsx) | ``t("localIdentity.description")``; ``t("localIdentity.examples")``; ``t("mail.examplesLabel")``; ``t("localIdentity.immutable")``; ``t("localIdentity.scope")``; ``t("localIdentity.help")`` |
| [modules/companies/src/web/mail-configurations/shared/ui/mail-configuration-form.tsx](../modules/companies/src/web/mail-configurations/shared/ui/mail-configuration-form.tsx) | ``t("mail.description")``; ``t("mail.examples")``; ``t("mail.examplesLabel")``; ``t("mail.guidance")``; ``t("mail.scope")``; ``t("mail.help")`` |
| [modules/companies/src/web/mailbox-uses/shared/ui/mailbox-use-form.tsx](../modules/companies/src/web/mailbox-uses/shared/ui/mailbox-use-form.tsx) | ``t("mailbox.useDescription")``; ``t("mailbox.useExamples")``; ``t("mail.examplesLabel")``; ``t("mailbox.useGuidance")``; ``t("mailbox.useHelp")`` |
| [modules/companies/src/web/printer-configurations/shared/ui/printer-configuration-form.tsx](../modules/companies/src/web/printer-configurations/shared/ui/printer-configuration-form.tsx) | ``t("printers.description")``; ``t("printers.examples")``; ``t("mail.examplesLabel")``; ``t("printers.guidance")``; ``t("printers.scope")``; ``t("printers.help")`` |
| [modules/companies/src/web/processes/shared/ui/process-help.tsx](../modules/companies/src/web/processes/shared/ui/process-help.tsx) | ``t(`${prefix}.description`)``; ``t(`${prefix}.examples`)``; ``t("mail.examplesLabel")``; ``t(`${prefix}.guidance`)``; ``t(`${prefix}.scope`)``; ``t(`${prefix}.title`)`` |
| [modules/companies/src/web/remote-connections/shared/ui/remote-connection-form.tsx](../modules/companies/src/web/remote-connections/shared/ui/remote-connection-form.tsx) | ``t("remote.description")``; ``t("remote.examples")``; ``t("mail.examplesLabel")``; ``t("remote.guidance")``; ``t("remote.scope")``; ``t("remote.help")`` |
| [modules/companies/src/web/software-installations/shared/ui/software-installation-form.tsx](../modules/companies/src/web/software-installations/shared/ui/software-installation-form.tsx) | ``t("software.description")``; ``t("software.examples")``; ``t("mail.examplesLabel")``; ``t("software.help")``; ``t("applications.help")`` |
| [modules/companies/src/web/telework-authorizations/shared/ui/telework-authorization-form.tsx](../modules/companies/src/web/telework-authorizations/shared/ui/telework-authorization-form.tsx) | ``t("telework.description")``; ``t("telework.examples")``; ``t("mail.examplesLabel")``; ``t("telework.guidance")``; ``t("telework.scope")``; ``t("telework.help")`` |
| [modules/companies/src/web/work-profiles/shared/ui/work-profile-form.tsx](../modules/companies/src/web/work-profiles/shared/ui/work-profile-form.tsx) | ``t("profiles.description")``; ``t("profiles.examples")``; ``t("profiles.examplesLabel")``; ``t("profiles.guidance")``; ``t("profiles.scope")``; ``t("profiles.help")`` |
| [modules/resources/src/web/catalog/shared/ui/catalog-help.tsx](../modules/resources/src/web/catalog/shared/ui/catalog-help.tsx) | ``t(`${kind}Description`)``; ``t(`${kind}Examples`)``; ``t("examplesLabel")``; ``t(`${kind}Guidance`)``; ``t(scope === "global" ? "globalHelp" : "companyHelp")``; ``t("helpTitle")`` |
| [modules/resources/src/web/global-applications/shared/ui/global-application-form.tsx](../modules/resources/src/web/global-applications/shared/ui/global-application-form.tsx) | ``t("global.formDescription")``; ``t("global.formExamples")``; ``t("examplesLabel")``; ``t("global.formGuidance")``; ``t("global.formScope")``; ``t("helpTitle")`` |
| [modules/resources/src/web/resources/shared/ui/resource-form.tsx](../modules/resources/src/web/resources/shared/ui/resource-form.tsx) | ``t(`${helpPrefix}Description`)``; ``t(`${helpPrefix}Examples`)``; ``t("examplesLabel")``; ``t(`${helpPrefix}Guidance`)``; ``t(`${helpPrefix}Scope`)``; ``t("helpTitle")`` |
| [packages/rdx-ui/src/components/field-picker-dialog.tsx](../packages/rdx-ui/src/components/field-picker-dialog.tsx) | ``props.labels.help``; ``props.labels.helpLabel``; ``props.labels.destination`` |
## Skills consultadas
Principal: ui-ux-pro-max (búsqueda local sobre foco, teclado y responsive). Complementarias: shadcn (Base UI, composición y estilos), vercel-composition-patterns (slots y contexto con consumidores reales), vercel-react-best-practices (estado mínimo y formularios montados), rdx-solid (contratos y pruebas). Se consultaron sus referencias aplicables junto a DESIGN, patrón de diálogos y procedimiento MCP. La CLI shadcn docs falló por DNS; se consultaron las páginas oficiales de [Dialog](https://ui.shadcn.com/docs/components/base/dialog) y [Popover](https://ui.shadcn.com/docs/components/base/popover) y las APIs instaladas. No se instalaron dependencias externas ni auditores. Solo se añadió el enlace workspace de apps/web a rdx-ui.
## Pruebas técnicas ejecutadas
| Comprobación | Resultado |
| --- | --- |
| pnpm typecheck | Falla en packages/shadcn-ui/src/components/calendar.tsx:165, TS2375 por locale opcional con exactOptionalPropertyTypes. Reproducido ejecutando el typecheck aislado del vendor; no hay diferencias en vendor respecto a HEAD. No se modifica por instrucción expresa del repositorio. |
| Typecheck dirigido de @repo/rdx-ui, @metis/web, @metis/assets, @metis/resources y @metis/companies | Correctos. |
| pnpm test (con sockets locales disponibles) | 671 pruebas correctas y 2 fallos, ambos en companies-page.test.tsx: expectativas antiguas de «Personas (1)» y «Esta persona no tiene acceso a Metis Desk». Se reprodujeron los mismos dos fallos en una copia temporal de git archive del commit 91f1d07, sin los cambios de ayuda. |
| Suites de recursos, activos y rdx-ui en la ejecución global | 105, 149 y 82 pruebas correctas, respectivamente. |
| pnpm --filter @metis/web test | 3 archivos correctos: aplicación, traducciones y redirección. Incluye paridad completa es/en. Turbo no alcanzaba esta suite tras los fallos de compañías; se ejecutó expresamente. |
| pnpm --filter @repo/rdx-ui test | 14 archivos correctos, incluidas las nuevas pruebas de política y conservación de contenido. |
| python3 scripts/visual-audit.test.py | 10 pruebas correctas del preparador, aislamiento y diagnóstico. |
| pnpm lint / pnpm check | Fallan fuera del diff: 15 errores de lint y 166 diagnósticos de error en check (incluye formato). Entre las fuentes: implementación previa de fotos de personas, migraciones y archivos locales de skills/diagnóstico. No se reformatean ni corrigen en esta tarea. |
| Biome check y ESLint de espaciado sobre los 19 archivos TS/TSX/JSON modificados o nuevos | Correctos, sin diagnósticos. |
| pnpm build | Correcto; conserva el aviso de tamaño de chunks de la aplicación. |
| git diff --check | Correcto. |
La primera ejecución de pnpm test dentro del sandbox falló al probar HTTP en resource-scope.test.ts. Con sockets locales autorizados, esa suite pasó. No se contabiliza ese fallo de entorno como regresión del código. La prueba de perfiles que exigía la antigua clase max-h-[40%] se actualizó: comprueba pasos y conservación de ejemplos/orientación, sin exigir el pie retirado.
## Validación interactiva y evidencias
Procedimiento reproducible: `bash scripts/setup-playwright-wsl.sh` y `python3 scripts/visual-audit.py --dialog-help --check`. Usa la imagen MCP fijada por digest, Chromium 155, build de producción en Vite preview y HTTP real con usuario ordinario. El runner confirma el origen y puerto libres antes de navegar. No se utiliza la base local: crea y retira un contenedor exclusivo con metis_desk_test.
Volumen preparado en cada ejecución: 15 compañías; en la principal, 50 personas, 51 activos, 66 recursos (16 fixtures y 50 aplicaciones), 50 puestos y 50 perfiles. Las escrituras de prueba se limitan a esa instalación desechable. Las sesiones y credenciales se retiran al finalizar, también tras fallos.
La matriz representativa principal terminó correctamente en `.artifacts/playwright/authenticated-u53obiy7/`: edición real de activo con valores modificados, validación y selector; ayuda extensa y breve en selector real de activos del puesto. Se comprobaron siete anchos (320, 375, 390, 768, 1024, 1280 y 1440), ausencia de desbordamiento del diálogo, alineación ?/X, foco al abrir y cerrar, Escape, mismo nodo de input tras regresar, datos y validaciones conservados, cambio panel→vista y Popover→vista, retorno explícito y cierre X. La consola de ese recorrido registró cero errores y cero warnings.
Se abrieron e inspeccionaron las capturas de 320 y 1440, Popover y tema oscuro. El manifiesto dialog-help-report.json conserva medidas y SHA-256 de cada captura. Son artefactos locales excluidos de Git.
## Accesibilidad, correcciones y límites
- La comprobación real de Escape detectó el cierre del modal completo; se corrigió utilizando el contrato de cancelación de Base UI. No se añadió un listener global ni un focus trap propio.
- Se mantiene la misma instancia del formulario, sus validaciones y selector. La vista interna desactiva su interacción con inert y lo oculta del árbol accesible. Los botones de ayuda son type=button.
- El título del panel/vista recibe foco y etiqueta la región. Cerrar devuelve foco al trigger incluso si el cambio de modalidad sustituye su composición con Popover. Se conserva la navegación de teclado de Base UI.
- La auditoría adicional de movimiento reducido detectó precedencia de animaciones vendor sobre la clase inicial. Se corrigió mediante utilidades important limitadas a prefers-reduced-motion en los wrappers propios. Vendor permanece intacto.
- Se midió el color calculado de texto y fondos compuestos con canvas. El desplegable de ejemplos daba 4,28:1 en claro; dentro de los diálogos se cambió a text-foreground, conservando íntegro el texto. La verificación posterior se detalla en el resultado ampliado.
- No se han probado lectores de pantalla reales ni se certifica conformidad WCAG 2.2 AA completa. La inspección de capturas y las medidas programáticas no sustituyen esas pruebas.
- La matriz no implica abrir cada variante de los 102 componentes ni volver a probar todos sus estados de red, permisos o confirmaciones destructivas. Esas descripciones y controles no se migraron.
- El zoom nativo del navegador al 200 % y 400 % no se considera verificado mediante cambios de viewport o tamaño de fuente: se documentan como pruebas de reflow y ampliación de texto, por separado.
### Recorrido ampliado completado
Ejecución completa correcta en `.artifacts/playwright/authenticated-q920cqcu/` mediante
`python3 scripts/visual-audit.py --dialog-help --check`:
- 28 comprobaciones: aislamiento del inventario de otra compañía, usuario ordinario,
cabecera única, ayuda inicialmente oculta, formulario inválido real, siete anchos,
panel/vista, Enter/Escape, foco de retorno, identidad del input, datos/validación/selector,
ausencia de overflow, redimensionamiento, oscuro, cierre X, movimiento reducido y Tab
en Popover, cierre Popover sin cerrar el selector, conservación de búsqueda y radio,
diálogo de columnas sin ?, contraste, reflow/texto ampliado, título largo sintético,
guardado tras consultar ayuda, cancelación sin escritura y etiquetas en inglés.
- Se cambió el estado técnico a Averiado y se conservó la pestaña Hardware durante las
aperturas/cierres; no se comprueba solo el valor inicial de un selector.
- Contrastes calculados después de la corrección: texto secundario **4,83:1 en claro**
y **6,85:1 en oscuro**; el desplegable de ejemplos **17,42:1 / 16,68:1**.
- Reflow a 720 y 360 CSS px, equivalente a reducir el espacio de una ventana de 1440 al
200 % y 400 %. Por separado, ampliación de fuente raíz al 200 % y 400 % en 1440 px.
Son comprobaciones de capacidad y texto; no una prueba de zoom nativo del navegador.
- El título largo es una modificación DOM sintética y reversible de la cabecera del
formulario real; no se guardó un nombre de negocio ni se inventó una pantalla.
- La consola no registró errores ni warnings React. Aparecieron dos avisos de rendimiento
de Canvas2D generados por el propio medidor de contraste, sin relación con el producto.
El comprobador posterior utiliza willReadFrequently para evitarlos.
La inspección de la captura con fuente al 400 % motivó además un fallback de scroll en la
región de ayuda, con un mínimo de tres líneas para su contenido; conserva acceso al botón
de retorno cuando el espacio vertical resulta insuficiente.
Comprobación final completa: **28 verificaciones correctas, 14 capturas y consola sin errores
ni warnings** en `.artifacts/playwright/authenticated-a0gc2ghb/`. Se repitió el recorrido
con la región legible y el retorno mediante scroll. Se abrieron e inspeccionaron las
capturas finales de panel a 1440, vista a 320, Popover, título largo y texto al 400 %.
El [informe local de navegador](../.artifacts/playwright/authenticated-a0gc2ghb/dialog-help-report.json)
registra todas las mediciones y las huellas SHA-256; dialog-help-console.json conserva la
salida de consola. Los archivos son locales y están excluidos de Git. El contenedor y su
sesión se retiraron al finalizar. La compilación y las comprobaciones dirigidas se
repitieron correctamente después del último ajuste.
### Ampliación: animación CSS del panel lateral
El panel compartido incorpora entrada con fundido y desplazamiento corto desde la derecha,
200 ms y ease-out, reutilizando las utilidades CSS existentes. Se anima únicamente
opacity/transform, también al reabrir; prefers-reduced-motion desactiva la animación.
Criterios consultados: UI/UX Pro Max (movimiento reducido, movimiento limitado y duración
adecuada a la distancia) y las convenciones shadcn del proyecto.
Verificación correcta mediante `python3 scripts/visual-audit.py --dialog-help --check`:
30 comprobaciones, 14 capturas y consola sin errores ni warnings. El comprobador captura
la animación en la misma operación que abre el panel y controla su timeline con Web
Animations API, sin esperas arbitrarias: opacidad 0 al inicio, intermedia entre 0 y 1 a los
100 ms y 1 al finalizar; duración calculada 0,2 s. Se verificó también animationName=none
con movimiento reducido y se repitió el recorrido de foco, formulario y responsive.
Evidencia: `.artifacts/playwright/authenticated-ft29wong/dialog-help-report.json`.
El entorno desechable y su sesión se retiraron al terminar. Typecheck de rdx-ui, Biome,
ESLint de espaciado y git diff --check correctos; la auditoría ejecutó además el build.
## Pendientes reales
Pruebas con lectores de pantalla, zoom nativo 200/400 %, revisión manual completa de todos
los diálogos y escenarios de altura baja como 320×640. No se instalan auditores ausentes.
Los fallos globales de tipos, lint/formato y las dos expectativas previas de compañías
permanecen fuera de esta migración y se han detallado con sus comprobaciones de aislamiento.