import React from 'react'; import type { WidgetDefinition } from '../types'; import type { WidgetVerbFlags } from '../../components/DashboardEngine/types'; /** * 🔴 El diálogo pide **solo lo que usa**: el id, el nombre para el encabezado y los verbos. No una * `WidgetDefinition` completa. * * No es cosmética de tipos: el contenedor de la tarjeta recibe del motor una vista más estrecha * (`WidgetDefinitionBase`), así que exigir la forma completa obligaría a un cast en el único sitio * desde donde se abre. Pedir lo mínimo deja que lo abran los dos —la tarjeta y el panel del * catálogo— sin mentir sobre el tipo. */ type WidgetAccessTarget = Pick & { permissions?: WidgetVerbFlags; /** * 🔴 **F5 — de aquí sale la vertical, igual que en el Constructor.** No se pide la vertical: se * pide la categoría y se deriva, con el mismo `verticalDeLaCategoria` que usa el Builder. Así * «que las dos pantallas coincidan» deja de ser disciplina y pasa a ser una consecuencia. */ categoria?: string; /** * 🔴 **F5.f — lo único que decide si «privado» se le reserva a alguien.** Un indicador con dueño * privado es un tablero personal, y ahí el administrador NO entra. Un **sembrado** privado no * tiene dueño al que referirse: lo ven todos los administradores de esa vertical. */ propietario_id?: string | null; }; import type { WidgetAccessAdapter } from './types'; /** * 🔴 **El diálogo de acceso de un widget: quién lo ve, y qué exige para verse.** * * Es la mitad que faltaba del modelo de permisos por instancia. Hasta ahora el tablero solo tenía la * pantalla de REVISIÓN —ver lo repartido y revocarlo—, así que conceder acceso o marcar un widget * como sensible solo se podía hacer por API. Eso alcanza para validar el modelo; no para * entregárselo a nadie. * * 🔴 **Una sola pantalla con DOS BLOQUES, y son las dos preguntas del modelo** (F5.b, 2026-09-14): * * - **① ¿Quién entra?** — la visibilidad y los accesos, JUNTOS. *Un administrador la salta.* * - **② ¿Quién sale?** — la sensibilidad, sola. *NADIE la salta, ni el administrador.* * * Antes eran dos pestañas partidas por CAPACIDAD (`can_share` / `can_edit`), y eso **partía la * pregunta ① por la mitad**: *restringir* vivía en una pestaña y *a quién se lo abro* en la otra, * siendo el mismo acto. Quien abría la de personas veía una lista de accesos sin poder ver si el * indicador estaba restringido siquiera — que es la única razón por la que esos accesos importan. * * ⚠️ **Quitar las pestañas NO es quitar el gateo.** Las capacidades siguen mandando: quien tiene * `can_share` y no `can_edit` no ve el bloque ②, ni la parte de visibilidad del ①. Se oculta el * BLOQUE, que es lo que el contrato por capacidades ya hacía — la pestaña era solo el envoltorio. * * Y el **alcance de caché salió de esta ventana**: no es visibilidad, es de quién es el dato. * * **El kit no habla HTTP:** todo pasa por el `WidgetAccessAdapter` que provee el host. Y todo lo que * el diálogo ofrece sale de las capacidades que ese adaptador declara, así que un host con un modelo * más pequeño obtiene un formulario más pequeño en vez de casillas que su backend va a rechazar. Ver * `access/types.ts`. */ export declare const WidgetAccessDialog: React.FC<{ widget: WidgetAccessTarget; adapter: WidgetAccessAdapter; isOpen: boolean; onClose: () => void; /** Se llama tras cualquier cambio que pueda alterar el catálogo del usuario. */ onChanged?: () => void; }>; export {}; //# sourceMappingURL=WidgetAccessDialog.d.ts.map