sass-cms-template-common 0.0.10 → 0.0.11

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/dist/index.d.ts CHANGED
@@ -35,7 +35,7 @@ export declare type AppMessageNode = string | {
35
35
  /** Árbol de mensajes del gestor (namespaces → claves → string anidable). */
36
36
  export declare type AppMessages = Record<string, AppMessageNode>;
37
37
 
38
- export declare function AppShell({ pathname, sites, children, notificationUnreadCount, notificationsData, profile, primaryLogo, brandLogo, selectedPublicationId, getPublicationHref, resolvePublicationImageUrl, profileAvatarOptions, legacyBaseUrl, cmsBaseUrl, legacySession, newContentGroups, previewFormats, operationPermissions, isAdmin, onNewContentSelect, onPreviewSelect, LinkComponent, permissions, locale, language, messages, appMessages, baseUrl, profileServices, }: AppShellProps): JSX.Element;
38
+ export declare function AppShell({ pathname, sites, children, notificationUnreadCount, notificationsData, editorialOpportunities, showEditorialOpportunities, copilotSuggestionsHref, onEditorialSeeMore, profile, primaryLogo, brandLogo, selectedPublicationId, getPublicationHref, resolvePublicationImageUrl, profileAvatarOptions, legacyBaseUrl, cmsBaseUrl, legacySession, newContentGroups, previewFormats, operationPermissions, isAdmin, onNewContentSelect, onPreviewSelect, LinkComponent, permissions, locale, language, messages, appMessages, baseUrl, profileServices, }: AppShellProps): JSX.Element;
39
39
 
40
40
  export declare type AppShellProps = {
41
41
  pathname: string;
@@ -44,6 +44,14 @@ export declare type AppShellProps = {
44
44
  notificationUnreadCount: number;
45
45
  /** Respuesta cruda de `POST /dashboard/notification` (newsTask/expireTask/videos). */
46
46
  notificationsData?: DashboardNotificationsResponse | null;
47
+ /** Oportunidades editoriales copilot (card de la campanita). Si se omite, mock temporal. */
48
+ editorialOpportunities?: EditorialOpportunity[];
49
+ /** Muestra la card de oportunidades editoriales copilot. Por defecto `true`. */
50
+ showEditorialOpportunities?: boolean;
51
+ /** URL del gestor de sugerencias copilot para el "Ver más" (enlace real). */
52
+ copilotSuggestionsHref?: string;
53
+ /** Clic en "Ver más" cuando no hay `copilotSuggestionsHref` (fallback). */
54
+ onEditorialSeeMore?: () => void;
47
55
  profile: ProfileGetResponse;
48
56
  primaryLogo: ReactNode;
49
57
  brandLogo?: ReactNode;
@@ -706,76 +714,48 @@ export declare class CmsCkeditorServices {
706
714
 
707
715
  export declare type CmsColors = typeof cmsColors;
708
716
 
709
- /** Paleta de la librería. Valores semánticos, no por componente. */
717
+ /**
718
+ * Paleta de la librería. Valores semánticos, no por componente.
719
+ *
720
+ * Casi todos son *mode-aware* (`var(--cms-…)`). La única excepción es `white`,
721
+ * que es blanco de contraste (texto sobre botón de color) y se mantiene blanco
722
+ * en ambos modos.
723
+ */
710
724
  export declare const cmsColors: {
711
- /** Color de acción primaria (CTA "Publicar/Guardar", botones, foco activo). */
712
- readonly primary: "#0067C4";
713
- /** Hover del primario (mismo tono, un poco más oscuro). */
714
- readonly primaryHover: "#005CAF";
715
- /** Fondo de control primario deshabilitado (negro al 10%). */
716
- readonly primaryDisabled: "#1D1B201A";
717
- /** Color secundario / contenedor (estado activo o seleccionado). */
718
- readonly secondary: "#D8E2FF";
719
- /** Hover sobre superficies secundarias (opciones de desplegable). */
720
- readonly secondaryHover: "#E1E2EA";
721
- /**
722
- * Texto / íconos sobre el contenedor `secondary` (chips de filtro activos,
723
- * opciones marcadas en multiselect, etiquetas). Equivale al
724
- * `onSecondaryContainer` de Material 3.
725
- */
726
- readonly onSecondaryContainer: "#2C4678";
727
- /**
728
- * Secundario sólido (tono fuerte de la paleta secundaria). Se usa, p. ej.,
729
- * para resaltar el borde del avatar al hacer hover sobre una fila.
730
- */
731
- readonly secondaryStrong: "#455E91";
732
- /** Borde por defecto de controles tipo select. */
733
- readonly controlBorder: "#727784";
734
- /** Texto por defecto de controles tipo select. */
735
- readonly controlText: "#000000";
736
- /** Fondo de hover de un control tipo select (sin valor activo). */
737
- readonly controlHoverBg: "#F9F9FF";
738
- /** Borde del botón en variante blanca (BtnDropdown). */
739
- readonly whiteBtnBorder: "#DDDDDD";
740
- /** Texto del botón en variante blanca (BtnDropdown). */
741
- readonly whiteBtnText: "#515253";
742
- /** Fondo de hover/activo del botón de ícono (disparador del SimpleDropdown). */
743
- readonly iconButtonHoverBg: "#E6E6E6";
744
- /** Color del ícono del disparador en reposo. */
745
- readonly iconButtonIcon: "#929193";
746
- /** Fondo de menús flotantes (perfil, selector de sitios). */
747
- readonly menuSurface: "#ECEDF6";
748
- /** Fondo de la opción activa/hover dentro de un menú desplegable simple. */
749
- readonly menuItemActive: "#E1E2EB";
750
- /** Hover neutro sobre superficies claras (sidebar, top bar). */
751
- readonly surfaceHover: "#E3E2E6";
752
- /** Texto tenue del índice alfabético (letras inactivas A–Z del listado). */
753
- readonly alphabetIdle: "#B4BEDA";
754
- /** Texto fuerte (títulos de ítems, nombre de perfil). */
755
- readonly textStrong: "#191C22";
756
- /** Texto de navegación / secundario. */
757
- readonly textNav: "#414752";
758
- /** Texto atenuado: títulos de sección, encabezados de columna (gris claro). */
759
- readonly textMuted: "#94A2AA";
760
- /**
761
- * Azul para enlaces de texto y botones tipo texto (p. ej. el label
762
- * "Cancelar" del modal de confirmación y los enlaces dentro de descripciones).
763
- */
764
- readonly link: "#004F99";
765
- /** Acento de acción destructiva (CTA "Desactivar/Resetear", badge de riesgo). */
766
- readonly danger: "#BA1A1A";
767
- /** Hover del acento destructivo. */
768
- readonly dangerHover: "#93000A";
769
- /** Acento de acción positiva (badge de "Activar"). */
770
- readonly success: "#1E8E3E";
771
- /** Bordes y divisores sutiles. */
772
- readonly border: "#C1C6D4";
773
- /** Fondo del avatar de perfil. */
774
- readonly avatarBg: "#F2F6FC";
775
- /** Borde del avatar de perfil. */
776
- readonly avatarBorder: "#DEE2E6";
777
- /** Blanco base (superficies elevadas / botones blancos). */
725
+ /** Blanco de contraste (texto/íconos sobre botones de color). Fijo en ambos modos. */
778
726
  readonly white: "#FFFFFF";
727
+ readonly primary: string;
728
+ readonly primaryHover: string;
729
+ readonly primaryDisabled: string;
730
+ readonly secondary: string;
731
+ readonly secondaryHover: string;
732
+ readonly onSecondaryContainer: string;
733
+ readonly secondaryStrong: string;
734
+ readonly controlBorder: string;
735
+ readonly controlText: string;
736
+ readonly controlHoverBg: string;
737
+ readonly whiteBtnBorder: string;
738
+ readonly whiteBtnText: string;
739
+ readonly iconButtonHoverBg: string;
740
+ readonly iconButtonIcon: string;
741
+ readonly menuSurface: string;
742
+ readonly menuItemActive: string;
743
+ readonly surfaceHover: string;
744
+ readonly alphabetIdle: string;
745
+ readonly alphabetIdleSoft: string;
746
+ readonly alphabetLetter: string;
747
+ readonly alphabetLetterDisabled: string;
748
+ readonly textStrong: string;
749
+ readonly textNav: string;
750
+ readonly textMuted: string;
751
+ readonly link: string;
752
+ readonly danger: string;
753
+ readonly dangerHover: string;
754
+ readonly success: string;
755
+ readonly border: string;
756
+ readonly avatarBg: string;
757
+ readonly avatarBorder: string;
758
+ readonly surface: string;
779
759
  };
780
760
 
781
761
  /**
@@ -980,6 +960,25 @@ export declare class CmsContributionsServices {
980
960
  getPaymentGateways: (filters?: PaymentGatewaysGetFilters) => Promise<PaymentGatewaysGetResponse>;
981
961
  }
982
962
 
963
+ /**
964
+ * Servicios HTTP del módulo `copilot` del CMS (gateway hacia el microservicio
965
+ * Copilot/Kundera). Errores propios en la serie `030.x` (ver `commonErrors`).
966
+ *
967
+ * Se construye igual que `CmsCommonServices`, con `{ axiosApi, authentication }`.
968
+ */
969
+ export declare class CmsCopilotServices {
970
+ protected props: ICopilotServices;
971
+ protected authentication: Authentication;
972
+ constructor(props: ICopilotServices);
973
+ /** POST /copilot/opportunities — feed de oportunidades (permiso COPILOT_VIEW). */
974
+ getOpportunities: (filters?: CopilotOpportunitiesFilters) => Promise<CopilotOpportunitiesResponse>;
975
+ /**
976
+ * POST /copilot/actions — ejecuta una acción del editor sobre una
977
+ * oportunidad: `save` | `like` | `dislike` | `assign` (permiso COPILOT_ACTION).
978
+ */
979
+ executeAction: (input: CopilotActionInput) => Promise<CopilotActionResponse>;
980
+ }
981
+
983
982
  /**
984
983
  * Servicios HTTP del módulo `dashboard` del CMS.
985
984
  *
@@ -1057,6 +1056,32 @@ export declare type CmsDialogActionsProps = {
1057
1056
  testId?: string;
1058
1057
  };
1059
1058
 
1059
+ /**
1060
+ * Página de error compartida por todos los gestores (mecanismo en la lib).
1061
+ * Replica la de cmsmedios: ilustración + título + subtítulo + botón HOME, y en
1062
+ * el 404 la línea "Error 404. Copiar detalle." que copia la URL al portapapeles.
1063
+ * Los textos salen del i18n de la lib (namespace `errorPage`, es/en/pt), así que
1064
+ * ningún gestor los duplica.
1065
+ */
1066
+ export declare function CmsErrorPage({ variant, homeHref, LinkComponent, illustrationSrc, }: CmsErrorPageProps): JSX.Element;
1067
+
1068
+ export declare type CmsErrorPageProps = {
1069
+ /** Tipo de error a mostrar. */
1070
+ variant: CmsErrorPageVariant;
1071
+ /** Destino del botón HOME. Por defecto la raíz del gestor (`/`). */
1072
+ homeHref?: string;
1073
+ /** Componente de enlace del host (p. ej. `next/link`). Por defecto un `<a>`. */
1074
+ LinkComponent?: CmsLinkComponent;
1075
+ /**
1076
+ * Ruta de la ilustración (servida desde el `public/` del gestor). Por defecto
1077
+ * `/errors/notfound.png` o `/errors/not-allowed.png` según la variante.
1078
+ */
1079
+ illustrationSrc?: string;
1080
+ };
1081
+
1082
+ /** Variante de error a mostrar: 404 (no encontrado) o sin permisos. */
1083
+ export declare type CmsErrorPageVariant = 'not-found' | 'not-allowed';
1084
+
1060
1085
  /** Severidad de feedback derivada de un código de error. */
1061
1086
  export declare type CmsErrorSeverity = 'warning' | 'error';
1062
1087
 
@@ -2089,6 +2114,7 @@ export declare type CmsTranslator = {
2089
2114
  }) => string;
2090
2115
  toast: (key: ToastMessageKey) => string;
2091
2116
  userAvatar: (key: UserAvatarMessageKey) => string;
2117
+ errorPage: (key: ErrorPageMessageKey) => string;
2092
2118
  /**
2093
2119
  * Resuelve una clave propia del gestor por ruta con puntos
2094
2120
  * (p. ej. `t.app('usuarios.modal.deactivate.title')`). Si falta, devuelve la
@@ -2545,27 +2571,10 @@ export declare const commonErrorsPt: Record<string, string>;
2545
2571
 
2546
2572
  export declare type ConfidenceColors = typeof confidenceColors;
2547
2573
 
2548
- /**
2549
- * Colores de un badge de confianza/score por nivel. `bg` = fondo del badge;
2550
- * `on` = texto. (Score de IA, relevancia, etc.)
2551
- */
2552
- export declare const confidenceColors: {
2553
- /** Alto, ≥85% (verde). */
2554
- readonly high: {
2555
- readonly bg: "#D7F5DD";
2556
- readonly on: "#0D5B2B";
2557
- };
2558
- /** Medio, 70–84% (ámbar). */
2559
- readonly medium: {
2560
- readonly bg: "#FFF0C8";
2561
- readonly on: "#6B4D00";
2562
- };
2563
- /** Bajo, <70% (gris). */
2564
- readonly low: {
2565
- readonly bg: "#E7E8EE";
2566
- readonly on: "#43474E";
2567
- };
2568
- };
2574
+ export declare const confidenceColors: Record<"high" | "medium" | "low", {
2575
+ bg: string;
2576
+ on: string;
2577
+ }>;
2569
2578
 
2570
2579
  /**
2571
2580
  * Contribución a actualizar (POST /contributions/edit).
@@ -2603,6 +2612,90 @@ export declare interface ContributionsInsertCrmResponse extends CmsResponse {
2603
2612
  [key: string]: unknown;
2604
2613
  }
2605
2614
 
2615
+ /** Acción del editor sobre una oportunidad (POST /copilot/actions). */
2616
+ export declare type CopilotAction = 'save' | 'like' | 'dislike' | 'assign';
2617
+
2618
+ /** Datos según la acción ejecutada (el backend lo omite si está vacío). */
2619
+ export declare interface CopilotActionData {
2620
+ /** Acción `save` (bookmark, toggle). */
2621
+ is_followed?: boolean;
2622
+ /** Acciones `like` / `dislike`. */
2623
+ interest_signal?: string;
2624
+ /** Acción `assign`. */
2625
+ assigned_to?: string;
2626
+ }
2627
+
2628
+ /** Entrada de POST /copilot/actions. */
2629
+ export declare interface CopilotActionInput {
2630
+ action: CopilotAction;
2631
+ /** ID de la oportunidad sobre la que se acciona. */
2632
+ opportunityId: string;
2633
+ /**
2634
+ * ID opaco y estable del redactor a asignar (NO el username).
2635
+ * Obligatorio solo para `action = "assign"` (error 030.005 si falta).
2636
+ */
2637
+ userExternalId?: string;
2638
+ }
2639
+
2640
+ /** Cuerpo de la respuesta de POST /copilot/actions. */
2641
+ export declare interface CopilotActionResponse extends CmsResponse {
2642
+ copilotEnabled?: boolean;
2643
+ action?: CopilotAction;
2644
+ opportunity_id?: string;
2645
+ /** Código de resultado devuelto por el microservicio (omitido si es nulo). */
2646
+ code?: string;
2647
+ data?: CopilotActionData;
2648
+ }
2649
+
2650
+ /** Filtros opcionales de POST /copilot/opportunities (passthrough al micro). */
2651
+ export declare interface CopilotOpportunitiesFilters {
2652
+ /** Filtro de estado de las oportunidades (p. ej. "open"). */
2653
+ status?: CopilotOpportunityStatus;
2654
+ /** Cantidad máxima de oportunidades a devolver. */
2655
+ limit?: number;
2656
+ }
2657
+
2658
+ /**
2659
+ * Cuerpo de la respuesta de POST /copilot/opportunities.
2660
+ *
2661
+ * Si la publicación no tiene `KUNDERA_SITE_UUID` (Copilot desactivado) el CMS
2662
+ * responde `status:"ok"` con `copilotEnabled:false` y lista vacía: NO es un
2663
+ * error, el gestor decide qué mostrar.
2664
+ */
2665
+ export declare interface CopilotOpportunitiesResponse extends CmsResponse {
2666
+ copilotEnabled?: boolean;
2667
+ /** UUID del sitio en Kundera (solo si `copilotEnabled = true`). */
2668
+ site_uuid?: string;
2669
+ count?: number;
2670
+ opportunities?: CopilotOpportunity[];
2671
+ }
2672
+
2673
+ /**
2674
+ * Oportunidad editorial del feed de Copilot.
2675
+ *
2676
+ * La doc del gateway lista `id`, `topic` y `created_at`, pero el microservicio
2677
+ * (observado en dev) puede omitirlos: solo `title`, `status` y `score` están
2678
+ * garantizados. El consumidor debe tolerar los faltantes.
2679
+ */
2680
+ export declare interface CopilotOpportunity {
2681
+ id?: string;
2682
+ title: string;
2683
+ /** Tema/categoría. */
2684
+ topic?: string;
2685
+ status: CopilotOpportunityStatus;
2686
+ /** Puntaje (el backend lo omite si es nulo). */
2687
+ score?: number;
2688
+ /** Fecha de creación (ISO 8601, p. ej. "2026-06-26T10:15:00Z"). */
2689
+ created_at?: string;
2690
+ }
2691
+
2692
+ /**
2693
+ * Estado de una oportunidad tal como lo entrega el microservicio (passthrough).
2694
+ * El único valor documentado hoy es `"open"`; se deja abierto para no romper
2695
+ * cuando el microservicio agregue estados nuevos.
2696
+ */
2697
+ export declare type CopilotOpportunityStatus = 'open' | (string & {});
2698
+
2606
2699
  /** POST /dashboard/countNotificatio */
2607
2700
  export declare interface CountNotificationsResponse {
2608
2701
  status: string;
@@ -2817,6 +2910,29 @@ export declare type DropdownOption = {
2817
2910
  testId?: string;
2818
2911
  };
2819
2912
 
2913
+ /**
2914
+ * Oportunidad editorial de un tema copilot (fuente de la card de la campanita).
2915
+ * Misma forma que el `getCopilotOpportunities()` del CMS Angular (NAA-4645): hoy
2916
+ * datos quemados; cuando el back libere el bloque en el WS de notificaciones se
2917
+ * reemplaza la fuente manteniendo esta forma.
2918
+ */
2919
+ export declare interface EditorialOpportunity {
2920
+ id: number | string;
2921
+ title: string;
2922
+ /** % de coincidencia con la línea editorial. */
2923
+ match: number;
2924
+ trending: boolean;
2925
+ isRead: boolean;
2926
+ /** Momento de entrega (epoch ms), como `{ time }` o número. */
2927
+ timeStamp?: {
2928
+ time: number;
2929
+ } | number | null;
2930
+ }
2931
+
2932
+ export declare type EditorialOpportunityColors = typeof editorialOpportunityColors;
2933
+
2934
+ export declare const editorialOpportunityColors: Record<"accent" | "text" | "topicBg" | "topicBorder" | "trending", string>;
2935
+
2820
2936
  export declare const enMessages: {
2821
2937
  readonly navigation: {
2822
2938
  readonly COMMENTS: "Comments";
@@ -2874,6 +2990,13 @@ export declare const enMessages: {
2874
2990
  readonly preview: "Preview";
2875
2991
  readonly help: "Help";
2876
2992
  readonly publication: "Publication";
2993
+ readonly appearance: "Appearance";
2994
+ readonly newTheme: "New theme";
2995
+ readonly newThemeSubtitle: "Redesigned interface";
2996
+ readonly modeLabel: "Mode";
2997
+ readonly modeLight: "Light";
2998
+ readonly modeDark: "Dark";
2999
+ readonly classicUnavailable: "The classic view is not available in this prototype.";
2877
3000
  };
2878
3001
  readonly newMenu: {
2879
3002
  readonly frequentsTitle: "Frequent";
@@ -2919,6 +3042,15 @@ export declare const enMessages: {
2919
3042
  readonly assignedYesterday: "Assigned yesterday";
2920
3043
  readonly assignedOn: "Assigned on";
2921
3044
  readonly expires: "Due";
3045
+ readonly editorialOpportunityLabel: "Editorial opportunity";
3046
+ readonly editorialOpportunityText: "{count} topics require your attention";
3047
+ readonly editorialOpportunityTop: "Top";
3048
+ readonly editorialOpportunityMatch: "Match";
3049
+ readonly editorialOpportunityTrending: "Trending";
3050
+ readonly editorialOpportunitySeeMoreOpportunities: "See {count} more opportunities";
3051
+ readonly editorialOpportunityHide: "Hide";
3052
+ readonly editorialOpportunityRemindLater: "Remind me later";
3053
+ readonly editorialOpportunitySeeMore: "See more";
2922
3054
  };
2923
3055
  readonly search: {
2924
3056
  readonly placeholder: "Search…";
@@ -3001,8 +3133,22 @@ export declare const enMessages: {
3001
3133
  readonly alt: "User avatar";
3002
3134
  readonly unknownUser: "Unknown user";
3003
3135
  };
3136
+ readonly errorPage: {
3137
+ readonly homeButton: "Home";
3138
+ readonly notFoundTitle: "Sorry an error occurred.";
3139
+ readonly notFoundSubtitle: "This website is no longer available. Keep browsing!";
3140
+ readonly notFoundCode: "404";
3141
+ readonly errorLabel: "Error";
3142
+ readonly copyDetail: "Copy detail.";
3143
+ readonly copyDetailText: "The route {url} you are trying to access is no longer available.";
3144
+ readonly copied: "Text copied to clipboard!";
3145
+ readonly notAllowedTitle: "Sorry.\nYou do not have access.";
3146
+ readonly notAllowedSubtitle: "What you want to see is restricted by permissions. Keep browsing!";
3147
+ };
3004
3148
  };
3005
3149
 
3150
+ declare type ErrorPageMessageKey = keyof CmsMessages['errorPage'];
3151
+
3006
3152
  export declare const esMessages: {
3007
3153
  navigation: {
3008
3154
  COMMENTS: string;
@@ -3060,6 +3206,13 @@ export declare const esMessages: {
3060
3206
  preview: string;
3061
3207
  help: string;
3062
3208
  publication: string;
3209
+ appearance: string;
3210
+ newTheme: string;
3211
+ newThemeSubtitle: string;
3212
+ modeLabel: string;
3213
+ modeLight: string;
3214
+ modeDark: string;
3215
+ classicUnavailable: string;
3063
3216
  };
3064
3217
  newMenu: {
3065
3218
  frequentsTitle: string;
@@ -3105,6 +3258,15 @@ export declare const esMessages: {
3105
3258
  assignedYesterday: string;
3106
3259
  assignedOn: string;
3107
3260
  expires: string;
3261
+ editorialOpportunityLabel: string;
3262
+ editorialOpportunityText: string;
3263
+ editorialOpportunityTop: string;
3264
+ editorialOpportunityMatch: string;
3265
+ editorialOpportunityTrending: string;
3266
+ editorialOpportunitySeeMoreOpportunities: string;
3267
+ editorialOpportunityHide: string;
3268
+ editorialOpportunityRemindLater: string;
3269
+ editorialOpportunitySeeMore: string;
3108
3270
  };
3109
3271
  search: {
3110
3272
  placeholder: string;
@@ -3187,6 +3349,18 @@ export declare const esMessages: {
3187
3349
  alt: string;
3188
3350
  unknownUser: string;
3189
3351
  };
3352
+ errorPage: {
3353
+ homeButton: string;
3354
+ notFoundTitle: string;
3355
+ notFoundSubtitle: string;
3356
+ notFoundCode: string;
3357
+ errorLabel: string;
3358
+ copyDetail: string;
3359
+ copyDetailText: string;
3360
+ copied: string;
3361
+ notAllowedTitle: string;
3362
+ notAllowedSubtitle: string;
3363
+ };
3190
3364
  };
3191
3365
 
3192
3366
  /** Cuerpo de la respuesta de POST /events/create. */
@@ -3258,8 +3432,8 @@ export declare type FeedbackBadgeColors = typeof feedbackBadgeColors;
3258
3432
 
3259
3433
  /**
3260
3434
  * Colores del círculo de ícono del toast por severidad. `bg` = fondo del
3261
- * círculo; `on` = color del ícono. Contenedores tonales claros con ícono
3262
- * oscuro (misma familia que Material 3), legibles sobre la superficie oscura.
3435
+ * círculo; `on` = color del ícono. Como el toast es oscuro en ambos modos,
3436
+ * estos tampoco cambian.
3263
3437
  */
3264
3438
  export declare const feedbackBadgeColors: {
3265
3439
  /** Éxito: círculo verde menta con check verde oscuro. */
@@ -3290,8 +3464,8 @@ export declare type FeedbackColors = typeof feedbackColors;
3290
3464
  * Colores de feedback de operaciones (toasts/notificaciones).
3291
3465
  *
3292
3466
  * El toast usa una superficie oscura (estilo de diseño del CMS) con texto
3293
- * claro y un ícono de acento por severidad. Los acentos replican los del
3294
- * Angular legacy (`cmsmedios-ux`): éxito verde, advertencia ámbar, error rojo.
3467
+ * claro y un ícono de acento por severidad. Como ya es un componente oscuro por
3468
+ * diseño, NO cambia entre modos (se mantiene igual en claro y oscuro).
3295
3469
  */
3296
3470
  export declare const feedbackColors: {
3297
3471
  /** Fondo oscuro del toast (común a todas las severidades). */
@@ -3460,6 +3634,23 @@ export declare interface FileExplorerGetFoldersResponse extends CmsResponse {
3460
3634
  folders: ExplorerFolder[];
3461
3635
  }
3462
3636
 
3637
+ /**
3638
+ * Filtra los módulos de POST /auth/modulesAvailable dejando solo los que el
3639
+ * usuario puede ver, replicando el cruce que hace `parseModuleIntoMenu` de
3640
+ * cmsmedios: un admin ve todo; el resto solo ve un módulo si tiene la operación
3641
+ * `${module}_VIEW` en POST /auth/permissions. La comparación es case-insensitive.
3642
+ *
3643
+ * Degrada con seguridad: si `permissions` es null/undefined (p. ej. porque
3644
+ * /auth/permissions falló), NO filtra y devuelve los módulos tal cual (misma
3645
+ * visibilidad que hoy). El acceso real lo sigue gobernando el guard de ruta
3646
+ * (`hasModulePermission`), así que el menú puede degradar sin exponer nada.
3647
+ *
3648
+ * @param modules módulos crudos de POST /auth/modulesAvailable
3649
+ * @param permissions respuesta de POST /auth/permissions (`isAdmin` + `operations`)
3650
+ * @returns los módulos visibles para el usuario (preserva `isnew`)
3651
+ */
3652
+ export declare function filterModulesByPermissions(modules: NavItemPermissions[], permissions: Pick<AuthPermissionsResponse, 'isAdmin' | 'operations'> | null | undefined): NavItemPermissions[];
3653
+
3463
3654
  export declare function findPublicationBySlug(sites: SiteSection[], slug: string): Publication | undefined;
3464
3655
 
3465
3656
  export declare function findPublicationLabel(sites: SiteSection[], publicationId: string): string;
@@ -3467,8 +3658,7 @@ export declare function findPublicationLabel(sites: SiteSection[], publicationId
3467
3658
  /**
3468
3659
  * Familias tipográficas del CMS. `roboto` = texto general (default del theme);
3469
3660
  * `productSans` = marca / títulos. Las `@font-face` que las cargan viven en
3470
- * `theme/fonts.ts` y se inyectan vía el provider MUI. Usar estas variables en
3471
- * lugar de strings sueltos (mismo criterio que con los colores).
3661
+ * `theme/fonts.ts` y se inyectan vía el provider MUI.
3472
3662
  */
3473
3663
  export declare const fontFamilies: {
3474
3664
  readonly roboto: "\"Roboto\",\"Helvetica\",\"Arial\",sans-serif";
@@ -3504,6 +3694,15 @@ export declare function getDefaultPublicationSlug(sites: SiteSection[]): string;
3504
3694
  /** BCP 47 tag for `Intl` / `toLocaleString` formatting. */
3505
3695
  export declare function getIntlLocaleTag(locale: Locale): string;
3506
3696
 
3697
+ /**
3698
+ * Oportunidades editoriales copilot QUEMADAS temporales (NAA-4837). El back aún
3699
+ * no envía este bloque; cuando lo haga, el gestor pasa las oportunidades reales
3700
+ * por la prop `editorialOpportunities` y este mock se elimina.
3701
+ *
3702
+ * @param now Instante actual (epoch ms) usado como hora de entrega de las cards.
3703
+ */
3704
+ export declare function getMockCopilotOpportunities(now: number): EditorialOpportunity[];
3705
+
3507
3706
  export declare function getProfileAvatarSrc(profile: ProfileGetResponse, options?: ProfileAvatarOptions): string;
3508
3707
 
3509
3708
  export declare function getProfileDisplayName(profile: ProfileGetResponse): string;
@@ -3518,6 +3717,19 @@ export declare function getProfileDisplayName(profile: ProfileGetResponse): stri
3518
3717
  */
3519
3718
  export declare function getSiteNow(gmtRedaction: string | null | undefined, localeTag: string, options?: Intl.DateTimeFormatOptions): string;
3520
3719
 
3720
+ /**
3721
+ * Decide si el usuario puede acceder a un módulo, replicando el
3722
+ * `AccessPermissionsGuard` de cmsmedios: un admin siempre pasa, el comodín
3723
+ * `All_VIEWS` siempre pasa, y en el resto el usuario debe tener una operación
3724
+ * cuyo `name` coincida con el permiso requerido. La comparación es
3725
+ * case-insensitive (cmsmedios pasa el permiso de la ruta a mayúsculas).
3726
+ *
3727
+ * @param permissions respuesta de POST /auth/permissions (`isAdmin` + `operations`)
3728
+ * @param requiredPermission permiso que exige la ruta (p. ej. `'NEWS_VIEW'`)
3729
+ * @returns `true` si tiene acceso; `false` si debería redirigirse a `/not-allowed`
3730
+ */
3731
+ export declare function hasModulePermission(permissions: Pick<AuthPermissionsResponse, 'isAdmin' | 'operations'> | null | undefined, requiredPermission: string): boolean;
3732
+
3521
3733
  declare interface IAudiosServices {
3522
3734
  axiosApi: AxiosInstance;
3523
3735
  authentication: Authentication;
@@ -3557,6 +3769,11 @@ declare interface IContributionsServices {
3557
3769
  authentication: Authentication;
3558
3770
  }
3559
3771
 
3772
+ declare interface ICopilotServices {
3773
+ axiosApi: AxiosInstance;
3774
+ authentication: Authentication;
3775
+ }
3776
+
3560
3777
  declare interface IDashboardServices {
3561
3778
  axiosApi: AxiosInstance;
3562
3779
  authentication: Authentication;
@@ -3831,7 +4048,7 @@ export declare type InterestColors = typeof interestColors;
3831
4048
 
3832
4049
  /**
3833
4050
  * Feedback de interés del usuario sobre un ítem (me gusta / no me gusta).
3834
- * Tonos semánticos; los fondos de hover se derivan con `alpha()` en el `sx`.
4051
+ * Se mantienen literales (se usan con `alpha()` para los hovers).
3835
4052
  */
3836
4053
  export declare const interestColors: {
3837
4054
  /** Me gusta (verde). */
@@ -3911,9 +4128,9 @@ declare interface ITagsServices {
3911
4128
  authentication: Authentication;
3912
4129
  }
3913
4130
 
3914
- export declare const ITEM_DEFAULT_BG: "#FFFFFF";
4131
+ export declare const ITEM_DEFAULT_BG: string;
3915
4132
 
3916
- export declare const ITEM_HOVER_BG: "#D8E2FF";
4133
+ export declare const ITEM_HOVER_BG: string;
3917
4134
 
3918
4135
  declare interface ITranscribeServices {
3919
4136
  axiosApi: AxiosInstance;
@@ -3990,7 +4207,7 @@ export declare type Locale = (typeof SUPPORTED_LOCALES)[number];
3990
4207
 
3991
4208
  export declare type LocaleCatalog = Record<Locale, CmsMessages>;
3992
4209
 
3993
- export declare const MENU_BG: "#ECEDF6";
4210
+ export declare const MENU_BG: string;
3994
4211
 
3995
4212
  declare type MenuOrigin = {
3996
4213
  vertical: 'top' | 'center' | 'bottom';
@@ -4581,29 +4798,23 @@ export declare interface NotificationAdminConfigurationResponse extends CmsRespo
4581
4798
 
4582
4799
  export declare type NotificationColors = typeof notificationColors;
4583
4800
 
4584
- /**
4585
- * Colores del avatar de ícono de cada tarjeta del centro de notificaciones
4586
- * (campanita del TopBar). `bg` = fondo del contenedor cuadrado; `on` =
4587
- * color del ícono. Replican los del centro de notificaciones del diseño
4588
- * (mockup "Gestión de Noticias"): temas asignados en azul (misma familia
4589
- * secundaria), actividades por vencer en naranja y notificaciones de sistema
4590
- * (videos) en verde. Semánticos y reutilizables por cualquier gestor.
4591
- */
4592
4801
  export declare const notificationColors: {
4593
- /** Temas asignados (azul): mismo contenedor secundario que los chips activos. */
4594
- readonly assigned: {
4595
- readonly bg: "#D8E2FF";
4596
- readonly on: "#2C4678";
4597
- };
4598
- /** Actividades por vencer (naranja). El `on` se reutiliza para la fecha de vencimiento. */
4599
4802
  readonly pending: {
4600
- readonly bg: "#FFE2D5";
4601
- readonly on: "#B3300A";
4803
+ bg: string;
4804
+ on: string;
4602
4805
  };
4603
- /** Notificaciones del sistema / videos (verde). */
4604
4806
  readonly system: {
4605
- readonly bg: "#DCEFE0";
4606
- readonly on: "#11663B";
4807
+ bg: string;
4808
+ on: string;
4809
+ };
4810
+ readonly editorialOpportunity: {
4811
+ bg: string;
4812
+ on: string;
4813
+ };
4814
+ /** Temas asignados (azul): mismo contenedor secundario que los chips activos. */
4815
+ readonly assigned: {
4816
+ readonly bg: string;
4817
+ readonly on: string;
4607
4818
  };
4608
4819
  };
4609
4820
 
@@ -4649,7 +4860,7 @@ export declare interface NotificationsListResponse {
4649
4860
  total?: number;
4650
4861
  }
4651
4862
 
4652
- export declare function NotificationsMenu({ unreadCount, notificationsData, masterBaseUrl, currentPublicationId, gmtRedaction, }: NotificationsMenuProps): JSX.Element;
4863
+ export declare function NotificationsMenu({ unreadCount, notificationsData, masterBaseUrl, currentPublicationId, gmtRedaction, editorialOpportunities, showEditorialOpportunities, copilotSuggestionsHref, onEditorialSeeMore, }: NotificationsMenuProps): JSX.Element;
4653
4864
 
4654
4865
  export declare type NotificationsMenuMessageKey = keyof CmsMessages['notificationsMenu'];
4655
4866
 
@@ -4664,6 +4875,22 @@ export declare type NotificationsMenuProps = {
4664
4875
  currentPublicationId?: number | string;
4665
4876
  /** Offset GMT de la publicación (para mostrar las fechas en zona de redacción). */
4666
4877
  gmtRedaction?: string | null;
4878
+ /**
4879
+ * Oportunidades editoriales copilot (card de la campanita, NAA-4837). Si se
4880
+ * omite y `showEditorialOpportunities` no es `false`, se usan datos QUEMADOS
4881
+ * temporales; cuando el back libere el bloque, el gestor pasa las reales aquí.
4882
+ */
4883
+ editorialOpportunities?: EditorialOpportunity[];
4884
+ /** Muestra la card de oportunidades editoriales copilot. Por defecto `true`. */
4885
+ showEditorialOpportunities?: boolean;
4886
+ /**
4887
+ * URL del gestor de sugerencias copilot para el "Ver más" de la card. La arma
4888
+ * el gestor con su deploy (env) + la publicación actual; si se pasa, el "Ver
4889
+ * más" es un enlace real (nueva pestaña). Si no, cae al callback.
4890
+ */
4891
+ copilotSuggestionsHref?: string;
4892
+ /** Clic en "Ver más" cuando no hay `copilotSuggestionsHref` (fallback). */
4893
+ onEditorialSeeMore?: () => void;
4667
4894
  };
4668
4895
 
4669
4896
  /** Topic devuelto por notification/topics (`{ name, description }`). */
@@ -5619,6 +5846,13 @@ export declare const ptMessages: {
5619
5846
  preview: string;
5620
5847
  help: string;
5621
5848
  publication: string;
5849
+ appearance: string;
5850
+ newTheme: string;
5851
+ newThemeSubtitle: string;
5852
+ modeLabel: string;
5853
+ modeLight: string;
5854
+ modeDark: string;
5855
+ classicUnavailable: string;
5622
5856
  };
5623
5857
  newMenu: {
5624
5858
  frequentsTitle: string;
@@ -5664,6 +5898,15 @@ export declare const ptMessages: {
5664
5898
  assignedYesterday: string;
5665
5899
  assignedOn: string;
5666
5900
  expires: string;
5901
+ editorialOpportunityLabel: string;
5902
+ editorialOpportunityText: string;
5903
+ editorialOpportunityTop: string;
5904
+ editorialOpportunityMatch: string;
5905
+ editorialOpportunityTrending: string;
5906
+ editorialOpportunitySeeMoreOpportunities: string;
5907
+ editorialOpportunityHide: string;
5908
+ editorialOpportunityRemindLater: string;
5909
+ editorialOpportunitySeeMore: string;
5667
5910
  };
5668
5911
  search: {
5669
5912
  placeholder: string;
@@ -5746,6 +5989,18 @@ export declare const ptMessages: {
5746
5989
  alt: string;
5747
5990
  unknownUser: string;
5748
5991
  };
5992
+ errorPage: {
5993
+ homeButton: string;
5994
+ notFoundTitle: string;
5995
+ notFoundSubtitle: string;
5996
+ notFoundCode: string;
5997
+ errorLabel: string;
5998
+ copyDetail: string;
5999
+ copyDetailText: string;
6000
+ copied: string;
6001
+ notAllowedTitle: string;
6002
+ notAllowedSubtitle: string;
6003
+ };
5749
6004
  };
5750
6005
 
5751
6006
  /** Publicación devuelta por POST /publications/get y POST /publications/default */
@@ -6339,52 +6594,14 @@ export declare const sizes: {
6339
6594
 
6340
6595
  export declare type SourceColors = typeof sourceColors;
6341
6596
 
6342
- /**
6343
- * Colores de marca por fuente de origen (puntos/indicadores de fuente en
6344
- * filtros y chips). **Valores placeholder**: ajustar a los oficiales cuando se
6345
- * definan. Semánticos y reutilizables por cualquier gestor.
6346
- */
6347
- export declare const sourceColors: {
6348
- /** RSS (naranja). */
6349
- readonly rss: "#FB923C";
6350
- /** Google Trends (azul). */
6351
- readonly gtrends: "#4285F4";
6352
- /** Search Console (verde). */
6353
- readonly sconsole: "#0F9D58";
6354
- /** X / Twitter (negro). */
6355
- readonly x: "#111111";
6356
- };
6597
+ export declare const sourceColors: Record<"rss" | "gtrends" | "sconsole" | "x", string>;
6357
6598
 
6358
6599
  export declare type StateColors = typeof stateColors;
6359
6600
 
6360
- /**
6361
- * Colores de estado editorial para los chips de estado en listados de
6362
- * contenido (sugerencias de CoPilot, noticias, etc.). `bg` = contenedor;
6363
- * `on` = texto/ícono sobre el contenedor. Semánticos y reutilizables por
6364
- * cualquier gestor (no atados a un componente puntual).
6365
- */
6366
- export declare const stateColors: {
6367
- /** Activo / publicado (verde). */
6368
- readonly active: {
6369
- readonly bg: "#D6F4DE";
6370
- readonly on: "#1D6B2E";
6371
- };
6372
- /** Generando con IA (azul Bluestack tonal). */
6373
- readonly generating: {
6374
- readonly bg: "#DCE3FF";
6375
- readonly on: "#001551";
6376
- };
6377
- /** Asignado / en redacción (púrpura, distinto de la familia IA). */
6378
- readonly assigned: {
6379
- readonly bg: "#EADDFF";
6380
- readonly on: "#4F378A";
6381
- };
6382
- /** Descartado / archivado (neutral). */
6383
- readonly discarded: {
6384
- readonly bg: "#ECEDF6";
6385
- readonly on: "#43474E";
6386
- };
6387
- };
6601
+ export declare const stateColors: Record<"active" | "generating" | "assigned" | "discarded", {
6602
+ bg: string;
6603
+ on: string;
6604
+ }>;
6388
6605
 
6389
6606
  /**
6390
6607
  * Arma y envía el formulario POST que abre una ruta del admin viejo en una
@@ -6652,7 +6869,7 @@ export declare interface ToastOptions {
6652
6869
  /** Severidad visual de un toast. */
6653
6870
  export declare type ToastSeverity = 'success' | 'error' | 'warning' | 'info';
6654
6871
 
6655
- export declare function TopBar({ sites, sidebarOpen, onToggleSidebar, notificationUnreadCount, notificationsData, profile, primaryLogo, brandLogo, selectedPublicationId, getPublicationHref, resolvePublicationImageUrl, profileAvatarOptions, legacyBaseUrl, cmsBaseUrl, legacySession, newContentGroups, previewFormats, operationPermissions, isAdmin, onNewContentSelect, onPreviewSelect, }: TopBarProps): JSX.Element;
6872
+ export declare function TopBar({ sites, sidebarOpen, onToggleSidebar, notificationUnreadCount, notificationsData, editorialOpportunities, showEditorialOpportunities, copilotSuggestionsHref, onEditorialSeeMore, profile, primaryLogo, brandLogo, selectedPublicationId, getPublicationHref, resolvePublicationImageUrl, profileAvatarOptions, legacyBaseUrl, cmsBaseUrl, legacySession, newContentGroups, previewFormats, operationPermissions, isAdmin, onNewContentSelect, onPreviewSelect, }: TopBarProps): JSX.Element;
6656
6873
 
6657
6874
  export declare type TopBarMessageKey = keyof CmsMessages['topBar'];
6658
6875
 
@@ -6664,6 +6881,14 @@ export declare type TopBarProps = {
6664
6881
  notificationUnreadCount: number;
6665
6882
  /** Respuesta cruda de `POST /dashboard/notification` (newsTask/expireTask/videos). */
6666
6883
  notificationsData?: DashboardNotificationsResponse | null;
6884
+ /** Oportunidades editoriales copilot (card de la campanita). Si se omite, mock temporal. */
6885
+ editorialOpportunities?: EditorialOpportunity[];
6886
+ /** Muestra la card de oportunidades editoriales copilot. Por defecto `true`. */
6887
+ showEditorialOpportunities?: boolean;
6888
+ /** URL del gestor de sugerencias copilot para el "Ver más" (enlace real). */
6889
+ copilotSuggestionsHref?: string;
6890
+ /** Clic en "Ver más" cuando no hay `copilotSuggestionsHref` (fallback). */
6891
+ onEditorialSeeMore?: () => void;
6667
6892
  profile: ProfileGetResponse;
6668
6893
  primaryLogo: ReactNode;
6669
6894
  brandLogo?: ReactNode;
@@ -7135,23 +7360,10 @@ export declare type UserStatusAction = 'activate' | 'deactivate';
7135
7360
 
7136
7361
  export declare type UserStatusColors = typeof userStatusColors;
7137
7362
 
7138
- /**
7139
- * Colores del chip de estado de cuenta de usuario (activo / inactivo).
7140
- * `bg` = contenedor; `on` = texto e ícono sobre el contenedor. El texto/ícono
7141
- * es el mismo verde oscuro en ambos estados. Semánticos y reutilizables.
7142
- */
7143
- export declare const userStatusColors: {
7144
- /** Activo: contenedor verde menta. */
7145
- readonly active: {
7146
- readonly bg: "#92F7B7";
7147
- readonly on: "#002112";
7148
- };
7149
- /** Inactivo: contenedor neutro. */
7150
- readonly inactive: {
7151
- readonly bg: "#E1E2E9";
7152
- readonly on: "#002112";
7153
- };
7154
- };
7363
+ export declare const userStatusColors: Record<"active" | "inactive", {
7364
+ bg: string;
7365
+ on: string;
7366
+ }>;
7155
7367
 
7156
7368
  /** Video del CMS. La forma exacta depende del recurso y del formato pedido. */
7157
7369
  export declare interface Video {