sass-cms-template-common 0.0.9 → 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';
@@ -4038,6 +4255,8 @@ export declare type NavLinkItem = {
4038
4255
  defaultOpen?: boolean;
4039
4256
  /** Acento visual (p. ej. destacar un ítem generado/asistido por IA). */
4040
4257
  accent?: 'ai';
4258
+ /** Si el href apunta al admin legacy (JSP/Angular), se prefija con `legacyBaseUrl`. */
4259
+ legacy?: boolean;
4041
4260
  };
4042
4261
 
4043
4262
  /** Columna del menú "Nuevo" (Frecuentes / Otros / Videos). */
@@ -4579,29 +4798,23 @@ export declare interface NotificationAdminConfigurationResponse extends CmsRespo
4579
4798
 
4580
4799
  export declare type NotificationColors = typeof notificationColors;
4581
4800
 
4582
- /**
4583
- * Colores del avatar de ícono de cada tarjeta del centro de notificaciones
4584
- * (campanita del TopBar). `bg` = fondo del contenedor cuadrado; `on` =
4585
- * color del ícono. Replican los del centro de notificaciones del diseño
4586
- * (mockup "Gestión de Noticias"): temas asignados en azul (misma familia
4587
- * secundaria), actividades por vencer en naranja y notificaciones de sistema
4588
- * (videos) en verde. Semánticos y reutilizables por cualquier gestor.
4589
- */
4590
4801
  export declare const notificationColors: {
4591
- /** Temas asignados (azul): mismo contenedor secundario que los chips activos. */
4592
- readonly assigned: {
4593
- readonly bg: "#D8E2FF";
4594
- readonly on: "#2C4678";
4595
- };
4596
- /** Actividades por vencer (naranja). El `on` se reutiliza para la fecha de vencimiento. */
4597
4802
  readonly pending: {
4598
- readonly bg: "#FFE2D5";
4599
- readonly on: "#B3300A";
4803
+ bg: string;
4804
+ on: string;
4600
4805
  };
4601
- /** Notificaciones del sistema / videos (verde). */
4602
4806
  readonly system: {
4603
- readonly bg: "#DCEFE0";
4604
- 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;
4605
4818
  };
4606
4819
  };
4607
4820
 
@@ -4647,7 +4860,7 @@ export declare interface NotificationsListResponse {
4647
4860
  total?: number;
4648
4861
  }
4649
4862
 
4650
- 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;
4651
4864
 
4652
4865
  export declare type NotificationsMenuMessageKey = keyof CmsMessages['notificationsMenu'];
4653
4866
 
@@ -4662,6 +4875,22 @@ export declare type NotificationsMenuProps = {
4662
4875
  currentPublicationId?: number | string;
4663
4876
  /** Offset GMT de la publicación (para mostrar las fechas en zona de redacción). */
4664
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;
4665
4894
  };
4666
4895
 
4667
4896
  /** Topic devuelto por notification/topics (`{ name, description }`). */
@@ -5617,6 +5846,13 @@ export declare const ptMessages: {
5617
5846
  preview: string;
5618
5847
  help: string;
5619
5848
  publication: string;
5849
+ appearance: string;
5850
+ newTheme: string;
5851
+ newThemeSubtitle: string;
5852
+ modeLabel: string;
5853
+ modeLight: string;
5854
+ modeDark: string;
5855
+ classicUnavailable: string;
5620
5856
  };
5621
5857
  newMenu: {
5622
5858
  frequentsTitle: string;
@@ -5662,6 +5898,15 @@ export declare const ptMessages: {
5662
5898
  assignedYesterday: string;
5663
5899
  assignedOn: string;
5664
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;
5665
5910
  };
5666
5911
  search: {
5667
5912
  placeholder: string;
@@ -5744,6 +5989,18 @@ export declare const ptMessages: {
5744
5989
  alt: string;
5745
5990
  unknownUser: string;
5746
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
+ };
5747
6004
  };
5748
6005
 
5749
6006
  /** Publicación devuelta por POST /publications/get y POST /publications/default */
@@ -6196,7 +6453,7 @@ export declare const shadows: {
6196
6453
  readonly flyout: "0px 8px 16px rgba(0, 0, 0, 0.18)";
6197
6454
  };
6198
6455
 
6199
- export declare function Sidebar({ open, pathname, permissions, LinkComponent, baseUrl, selectedPublicationId, }: SidebarProps): JSX.Element;
6456
+ export declare function Sidebar({ open, pathname, permissions, LinkComponent, legacyBaseUrl, selectedPublicationId, }: SidebarProps): JSX.Element;
6200
6457
 
6201
6458
  export declare type SidebarMessageKey = keyof CmsMessages['sidebar'];
6202
6459
 
@@ -6205,7 +6462,8 @@ export declare type SidebarProps = {
6205
6462
  pathname: string;
6206
6463
  LinkComponent?: CmsLinkComponent;
6207
6464
  permissions: Array<NavItemPermissions>;
6208
- baseUrl: string;
6465
+ /** Dominio del admin legacy (JSP/Angular) para prefijar hrefs con `item.legacy`. */
6466
+ legacyBaseUrl?: string;
6209
6467
  selectedPublicationId: string;
6210
6468
  };
6211
6469
 
@@ -6216,7 +6474,7 @@ export declare type SidebarProps = {
6216
6474
  * todo. El anclado se identifica por `item.module` y persiste vía
6217
6475
  * `profileServices.addPins`/`deletePins`/`getPins` (recurso de perfil).
6218
6476
  */
6219
- export declare function SidebarRail({ pathname, permissions, LinkComponent, baseUrl, items, profileServices, }: SidebarRailProps): JSX.Element;
6477
+ export declare function SidebarRail({ pathname, permissions, LinkComponent, legacyBaseUrl, items, profileServices, }: SidebarRailProps): JSX.Element;
6220
6478
 
6221
6479
  /** Servicio de pines usado por el rail: solo necesita estos tres métodos. */
6222
6480
  export declare type SidebarRailPinService = Pick<CmsProfileServices, 'addPins' | 'deletePins' | 'getPins'>;
@@ -6225,7 +6483,8 @@ export declare type SidebarRailProps = {
6225
6483
  pathname: string;
6226
6484
  LinkComponent?: CmsLinkComponent;
6227
6485
  permissions: Array<NavItemPermissions>;
6228
- baseUrl: string;
6486
+ /** Dominio del admin legacy (JSP/Angular) para prefijar hrefs con `item.legacy`. */
6487
+ legacyBaseUrl?: string;
6229
6488
  /** Ítems de navegación. Por defecto, `ACCOUNT_NAV_BLOCKS`. */
6230
6489
  items?: NavLinkItem[];
6231
6490
  /**
@@ -6335,52 +6594,14 @@ export declare const sizes: {
6335
6594
 
6336
6595
  export declare type SourceColors = typeof sourceColors;
6337
6596
 
6338
- /**
6339
- * Colores de marca por fuente de origen (puntos/indicadores de fuente en
6340
- * filtros y chips). **Valores placeholder**: ajustar a los oficiales cuando se
6341
- * definan. Semánticos y reutilizables por cualquier gestor.
6342
- */
6343
- export declare const sourceColors: {
6344
- /** RSS (naranja). */
6345
- readonly rss: "#FB923C";
6346
- /** Google Trends (azul). */
6347
- readonly gtrends: "#4285F4";
6348
- /** Search Console (verde). */
6349
- readonly sconsole: "#0F9D58";
6350
- /** X / Twitter (negro). */
6351
- readonly x: "#111111";
6352
- };
6597
+ export declare const sourceColors: Record<"rss" | "gtrends" | "sconsole" | "x", string>;
6353
6598
 
6354
6599
  export declare type StateColors = typeof stateColors;
6355
6600
 
6356
- /**
6357
- * Colores de estado editorial para los chips de estado en listados de
6358
- * contenido (sugerencias de CoPilot, noticias, etc.). `bg` = contenedor;
6359
- * `on` = texto/ícono sobre el contenedor. Semánticos y reutilizables por
6360
- * cualquier gestor (no atados a un componente puntual).
6361
- */
6362
- export declare const stateColors: {
6363
- /** Activo / publicado (verde). */
6364
- readonly active: {
6365
- readonly bg: "#D6F4DE";
6366
- readonly on: "#1D6B2E";
6367
- };
6368
- /** Generando con IA (azul Bluestack tonal). */
6369
- readonly generating: {
6370
- readonly bg: "#DCE3FF";
6371
- readonly on: "#001551";
6372
- };
6373
- /** Asignado / en redacción (púrpura, distinto de la familia IA). */
6374
- readonly assigned: {
6375
- readonly bg: "#EADDFF";
6376
- readonly on: "#4F378A";
6377
- };
6378
- /** Descartado / archivado (neutral). */
6379
- readonly discarded: {
6380
- readonly bg: "#ECEDF6";
6381
- readonly on: "#43474E";
6382
- };
6383
- };
6601
+ export declare const stateColors: Record<"active" | "generating" | "assigned" | "discarded", {
6602
+ bg: string;
6603
+ on: string;
6604
+ }>;
6384
6605
 
6385
6606
  /**
6386
6607
  * Arma y envía el formulario POST que abre una ruta del admin viejo en una
@@ -6648,7 +6869,7 @@ export declare interface ToastOptions {
6648
6869
  /** Severidad visual de un toast. */
6649
6870
  export declare type ToastSeverity = 'success' | 'error' | 'warning' | 'info';
6650
6871
 
6651
- 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;
6652
6873
 
6653
6874
  export declare type TopBarMessageKey = keyof CmsMessages['topBar'];
6654
6875
 
@@ -6660,6 +6881,14 @@ export declare type TopBarProps = {
6660
6881
  notificationUnreadCount: number;
6661
6882
  /** Respuesta cruda de `POST /dashboard/notification` (newsTask/expireTask/videos). */
6662
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;
6663
6892
  profile: ProfileGetResponse;
6664
6893
  primaryLogo: ReactNode;
6665
6894
  brandLogo?: ReactNode;
@@ -7131,23 +7360,10 @@ export declare type UserStatusAction = 'activate' | 'deactivate';
7131
7360
 
7132
7361
  export declare type UserStatusColors = typeof userStatusColors;
7133
7362
 
7134
- /**
7135
- * Colores del chip de estado de cuenta de usuario (activo / inactivo).
7136
- * `bg` = contenedor; `on` = texto e ícono sobre el contenedor. El texto/ícono
7137
- * es el mismo verde oscuro en ambos estados. Semánticos y reutilizables.
7138
- */
7139
- export declare const userStatusColors: {
7140
- /** Activo: contenedor verde menta. */
7141
- readonly active: {
7142
- readonly bg: "#92F7B7";
7143
- readonly on: "#002112";
7144
- };
7145
- /** Inactivo: contenedor neutro. */
7146
- readonly inactive: {
7147
- readonly bg: "#E1E2E9";
7148
- readonly on: "#002112";
7149
- };
7150
- };
7363
+ export declare const userStatusColors: Record<"active" | "inactive", {
7364
+ bg: string;
7365
+ on: string;
7366
+ }>;
7151
7367
 
7152
7368
  /** Video del CMS. La forma exacta depende del recurso y del formato pedido. */
7153
7369
  export declare interface Video {