sass-cms-template-common 0.0.4 → 0.0.6

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/lib/version.ts","../src/lib/theme/material-theme.json","../src/lib/theme/createAppTheme.ts","../src/lib/i18n/createTranslator.ts","../src/lib/i18n/messages/en.ts","../src/lib/i18n/messages/es.ts","../src/lib/i18n/messages/pt.ts","../src/lib/i18n/messages/index.ts","../src/lib/i18n/types.ts","../src/lib/i18n/normalizeLocale.ts","../src/lib/i18n/CmsI18nProvider.tsx","../src/lib/i18n/useCmsTranslation.ts","../src/lib/components/link.tsx","../src/lib/components/sidebar/Sidebar.styles.ts","../src/lib/components/sidebar/nav-blocks.ts","../src/lib/components/sidebar/Sidebar.tsx","../src/lib/components/site-selector-menu/SiteSelectorMenu.styles.ts","../src/lib/components/site-selector-menu/SiteSelectorMenu.tsx","../src/lib/components/top-bar/TopBar.styles.ts","../src/lib/components/top-bar/NotificationsMenu.tsx","../src/lib/utils/cms-asset.ts","../src/lib/utils/profile-avatar.ts","../src/lib/components/top-bar/ProfileMenu.tsx","../src/lib/components/top-bar/TopBar.tsx","../src/lib/components/shell/AppShell.styles.ts","../src/lib/components/shell/AppShell.tsx","../src/lib/components/mui-provider/CmsMuiProvider.tsx","../src/lib/components/mui-provider/NextCmsMuiProvider.tsx"],"sourcesContent":["export const LIB_VERSION = '0.0.0' as const\n","{\n \"description\": \"TYPE: CUSTOM\\nMaterial Theme Builder export 2026-05-08 02:18:51\",\n \"seed\": \"#0067C4\",\n \"coreColors\": {\n \"primary\": \"#0067C4\",\n \"secondary\": \"#D8E2FF\",\n \"tertiary\": \"#B4BEDA\"\n },\n \"extendedColors\": [\n {\n \"name\": \"Bluestack color\",\n \"color\": \"#2962FF\",\n \"description\": \"primario de bluestack\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado publicada\",\n \"color\": \"#00C853\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado Redaccion\",\n \"color\": \"#0091EA\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado frescura\",\n \"color\": \"#30FF5D\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado Programado\",\n \"color\": \"#FF6D00\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado bloqueada\",\n \"color\": \"#D50000\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado borrador\",\n \"color\": \"#FFAB00\",\n \"description\": \"\",\n \"harmonized\": false\n }\n ],\n \"schemes\": {\n \"light\": {\n \"primary\": \"#536dfe\",\n \"surfaceTint\": \"#3E5F90\",\n \"onPrimary\": \"#FFFFFF\",\n \"primaryContainer\": \"#D5E3FF\",\n \"onPrimaryContainer\": \"#254777\",\n \"secondary\": \"#455E91\",\n \"onSecondary\": \"#FFFFFF\",\n \"secondaryContainer\": \"#D8E2FF\",\n \"onSecondaryContainer\": \"#2C4678\",\n \"tertiary\": \"#455E91\",\n \"onTertiary\": \"#FFFFFF\",\n \"tertiaryContainer\": \"#D8E2FF\",\n \"onTertiaryContainer\": \"#2C4678\",\n \"error\": \"#BA1A1A\",\n \"onError\": \"#FFFFFF\",\n \"errorContainer\": \"#FFDAD6\",\n \"onErrorContainer\": \"#93000A\",\n \"background\": \"#F9F9FF\",\n \"onBackground\": \"#191C20\",\n \"surface\": \"#F9F9FF\",\n \"onSurface\": \"#191C20\",\n \"surfaceVariant\": \"#E0E2EC\",\n \"onSurfaceVariant\": \"#43474E\",\n \"outline\": \"#74777F\",\n \"outlineVariant\": \"#C4C6CF\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#2E3035\",\n \"inverseOnSurface\": \"#F0F0F7\",\n \"inversePrimary\": \"#A8C8FF\",\n \"primaryFixed\": \"#D5E3FF\",\n \"onPrimaryFixed\": \"#001B3C\",\n \"primaryFixedDim\": \"#A8C8FF\",\n \"onPrimaryFixedVariant\": \"#254777\",\n \"secondaryFixed\": \"#D8E2FF\",\n \"onSecondaryFixed\": \"#001A42\",\n \"secondaryFixedDim\": \"#AEC6FF\",\n \"onSecondaryFixedVariant\": \"#2C4678\",\n \"tertiaryFixed\": \"#D8E2FF\",\n \"onTertiaryFixed\": \"#001A42\",\n \"tertiaryFixedDim\": \"#AEC6FF\",\n \"onTertiaryFixedVariant\": \"#2C4678\",\n \"surfaceDim\": \"#D9D9E0\",\n \"surfaceBright\": \"#F9F9FF\",\n \"surfaceContainerLowest\": \"#FFFFFF\",\n \"surfaceContainerLow\": \"#F3F3FA\",\n \"surfaceContainer\": \"#EDEDF4\",\n \"surfaceContainerHigh\": \"#E7E8EE\",\n \"surfaceContainerHighest\": \"#E1E2E9\"\n },\n \"light-medium-contrast\": {\n \"primary\": \"#0F3665\",\n \"surfaceTint\": \"#3E5F90\",\n \"onPrimary\": \"#FFFFFF\",\n \"primaryContainer\": \"#4E6EA0\",\n \"onPrimaryContainer\": \"#FFFFFF\",\n \"secondary\": \"#193566\",\n \"onSecondary\": \"#FFFFFF\",\n \"secondaryContainer\": \"#546CA1\",\n \"onSecondaryContainer\": \"#FFFFFF\",\n \"tertiary\": \"#193566\",\n \"onTertiary\": \"#FFFFFF\",\n \"tertiaryContainer\": \"#546CA1\",\n \"onTertiaryContainer\": \"#FFFFFF\",\n \"error\": \"#740006\",\n \"onError\": \"#FFFFFF\",\n \"errorContainer\": \"#CF2C27\",\n \"onErrorContainer\": \"#FFFFFF\",\n \"background\": \"#F9F9FF\",\n \"onBackground\": \"#191C20\",\n \"surface\": \"#F9F9FF\",\n \"onSurface\": \"#0F1116\",\n \"surfaceVariant\": \"#E0E2EC\",\n \"onSurfaceVariant\": \"#33363D\",\n \"outline\": \"#4F525A\",\n \"outlineVariant\": \"#6A6D75\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#2E3035\",\n \"inverseOnSurface\": \"#F0F0F7\",\n \"inversePrimary\": \"#A8C8FF\",\n \"primaryFixed\": \"#4E6EA0\",\n \"onPrimaryFixed\": \"#FFFFFF\",\n \"primaryFixedDim\": \"#345586\",\n \"onPrimaryFixedVariant\": \"#FFFFFF\",\n \"secondaryFixed\": \"#546CA1\",\n \"onSecondaryFixed\": \"#FFFFFF\",\n \"secondaryFixedDim\": \"#3B5487\",\n \"onSecondaryFixedVariant\": \"#FFFFFF\",\n \"tertiaryFixed\": \"#546CA1\",\n \"onTertiaryFixed\": \"#FFFFFF\",\n \"tertiaryFixedDim\": \"#3B5487\",\n \"onTertiaryFixedVariant\": \"#FFFFFF\",\n \"surfaceDim\": \"#C5C6CD\",\n \"surfaceBright\": \"#F9F9FF\",\n \"surfaceContainerLowest\": \"#FFFFFF\",\n \"surfaceContainerLow\": \"#F3F3FA\",\n \"surfaceContainer\": \"#E7E8EE\",\n \"surfaceContainerHigh\": \"#DCDCE3\",\n \"surfaceContainerHighest\": \"#D0D1D8\"\n },\n \"light-high-contrast\": {\n \"primary\": \"#002C5A\",\n \"surfaceTint\": \"#3E5F90\",\n \"onPrimary\": \"#FFFFFF\",\n \"primaryContainer\": \"#274A79\",\n \"onPrimaryContainer\": \"#FFFFFF\",\n \"secondary\": \"#0B2A5B\",\n \"onSecondary\": \"#FFFFFF\",\n \"secondaryContainer\": \"#2E487A\",\n \"onSecondaryContainer\": \"#FFFFFF\",\n \"tertiary\": \"#0C2A5B\",\n \"onTertiary\": \"#FFFFFF\",\n \"tertiaryContainer\": \"#2F487A\",\n \"onTertiaryContainer\": \"#FFFFFF\",\n \"error\": \"#600004\",\n \"onError\": \"#FFFFFF\",\n \"errorContainer\": \"#98000A\",\n \"onErrorContainer\": \"#FFFFFF\",\n \"background\": \"#F9F9FF\",\n \"onBackground\": \"#191C20\",\n \"surface\": \"#F9F9FF\",\n \"onSurface\": \"#000000\",\n \"surfaceVariant\": \"#E0E2EC\",\n \"onSurfaceVariant\": \"#000000\",\n \"outline\": \"#292C33\",\n \"outlineVariant\": \"#464951\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#2E3035\",\n \"inverseOnSurface\": \"#FFFFFF\",\n \"inversePrimary\": \"#A8C8FF\",\n \"primaryFixed\": \"#274A79\",\n \"onPrimaryFixed\": \"#FFFFFF\",\n \"primaryFixedDim\": \"#093361\",\n \"onPrimaryFixedVariant\": \"#FFFFFF\",\n \"secondaryFixed\": \"#2E487A\",\n \"onSecondaryFixed\": \"#FFFFFF\",\n \"secondaryFixedDim\": \"#143162\",\n \"onSecondaryFixedVariant\": \"#FFFFFF\",\n \"tertiaryFixed\": \"#2F487A\",\n \"onTertiaryFixed\": \"#FFFFFF\",\n \"tertiaryFixedDim\": \"#153162\",\n \"onTertiaryFixedVariant\": \"#FFFFFF\",\n \"surfaceDim\": \"#B7B8BF\",\n \"surfaceBright\": \"#F9F9FF\",\n \"surfaceContainerLowest\": \"#FFFFFF\",\n \"surfaceContainerLow\": \"#F0F0F7\",\n \"surfaceContainer\": \"#E1E2E9\",\n \"surfaceContainerHigh\": \"#D3D4DB\",\n \"surfaceContainerHighest\": \"#C5C6CD\"\n },\n \"dark\": {\n \"primary\": \"#A8C8FF\",\n \"surfaceTint\": \"#A8C8FF\",\n \"onPrimary\": \"#05305F\",\n \"primaryContainer\": \"#254777\",\n \"onPrimaryContainer\": \"#D5E3FF\",\n \"secondary\": \"#AEC6FF\",\n \"onSecondary\": \"#112F60\",\n \"secondaryContainer\": \"#2C4678\",\n \"onSecondaryContainer\": \"#D8E2FF\",\n \"tertiary\": \"#AEC6FF\",\n \"onTertiary\": \"#122F60\",\n \"tertiaryContainer\": \"#2C4678\",\n \"onTertiaryContainer\": \"#D8E2FF\",\n \"error\": \"#FFB4AB\",\n \"onError\": \"#690005\",\n \"errorContainer\": \"#93000A\",\n \"onErrorContainer\": \"#FFDAD6\",\n \"background\": \"#111318\",\n \"onBackground\": \"#E1E2E9\",\n \"surface\": \"#111318\",\n \"onSurface\": \"#E1E2E9\",\n \"surfaceVariant\": \"#43474E\",\n \"onSurfaceVariant\": \"#C4C6CF\",\n \"outline\": \"#8E9199\",\n \"outlineVariant\": \"#43474E\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#E1E2E9\",\n \"inverseOnSurface\": \"#2E3035\",\n \"inversePrimary\": \"#3E5F90\",\n \"primaryFixed\": \"#D5E3FF\",\n \"onPrimaryFixed\": \"#001B3C\",\n \"primaryFixedDim\": \"#A8C8FF\",\n \"onPrimaryFixedVariant\": \"#254777\",\n \"secondaryFixed\": \"#D8E2FF\",\n \"onSecondaryFixed\": \"#001A42\",\n \"secondaryFixedDim\": \"#AEC6FF\",\n \"onSecondaryFixedVariant\": \"#2C4678\",\n \"tertiaryFixed\": \"#D8E2FF\",\n \"onTertiaryFixed\": \"#001A42\",\n \"tertiaryFixedDim\": \"#AEC6FF\",\n \"onTertiaryFixedVariant\": \"#2C4678\",\n \"surfaceDim\": \"#111318\",\n \"surfaceBright\": \"#37393E\",\n \"surfaceContainerLowest\": \"#0C0E13\",\n \"surfaceContainerLow\": \"#191C20\",\n \"surfaceContainer\": \"#1D2024\",\n \"surfaceContainerHigh\": \"#282A2F\",\n \"surfaceContainerHighest\": \"#33353A\"\n },\n \"dark-medium-contrast\": {\n \"primary\": \"#CCDDFF\",\n \"surfaceTint\": \"#A8C8FF\",\n \"onPrimary\": \"#00254E\",\n \"primaryContainer\": \"#7292C6\",\n \"onPrimaryContainer\": \"#000000\",\n \"secondary\": \"#CFDCFF\",\n \"onSecondary\": \"#012455\",\n \"secondaryContainer\": \"#7790C7\",\n \"onSecondaryContainer\": \"#000000\",\n \"tertiary\": \"#CFDCFF\",\n \"onTertiary\": \"#022455\",\n \"tertiaryContainer\": \"#7890C7\",\n \"onTertiaryContainer\": \"#000000\",\n \"error\": \"#FFD2CC\",\n \"onError\": \"#540003\",\n \"errorContainer\": \"#FF5449\",\n \"onErrorContainer\": \"#000000\",\n \"background\": \"#111318\",\n \"onBackground\": \"#E1E2E9\",\n \"surface\": \"#111318\",\n \"onSurface\": \"#FFFFFF\",\n \"surfaceVariant\": \"#43474E\",\n \"onSurfaceVariant\": \"#DADCE5\",\n \"outline\": \"#AFB2BB\",\n \"outlineVariant\": \"#8D9099\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#E1E2E9\",\n \"inverseOnSurface\": \"#282A2F\",\n \"inversePrimary\": \"#264878\",\n \"primaryFixed\": \"#D5E3FF\",\n \"onPrimaryFixed\": \"#001129\",\n \"primaryFixedDim\": \"#A8C8FF\",\n \"onPrimaryFixedVariant\": \"#0F3665\",\n \"secondaryFixed\": \"#D8E2FF\",\n \"onSecondaryFixed\": \"#00102E\",\n \"secondaryFixedDim\": \"#AEC6FF\",\n \"onSecondaryFixedVariant\": \"#193566\",\n \"tertiaryFixed\": \"#D8E2FF\",\n \"onTertiaryFixed\": \"#00102E\",\n \"tertiaryFixedDim\": \"#AEC6FF\",\n \"onTertiaryFixedVariant\": \"#193566\",\n \"surfaceDim\": \"#111318\",\n \"surfaceBright\": \"#42444A\",\n \"surfaceContainerLowest\": \"#06070C\",\n \"surfaceContainerLow\": \"#1B1E22\",\n \"surfaceContainer\": \"#26282D\",\n \"surfaceContainerHigh\": \"#303338\",\n \"surfaceContainerHighest\": \"#3B3E43\"\n },\n \"dark-high-contrast\": {\n \"primary\": \"#EAF0FF\",\n \"surfaceTint\": \"#A8C8FF\",\n \"onPrimary\": \"#000000\",\n \"primaryContainer\": \"#A4C4FB\",\n \"onPrimaryContainer\": \"#000B1F\",\n \"secondary\": \"#ECEFFF\",\n \"onSecondary\": \"#000000\",\n \"secondaryContainer\": \"#A9C2FC\",\n \"onSecondaryContainer\": \"#000A23\",\n \"tertiary\": \"#ECEFFF\",\n \"onTertiary\": \"#000000\",\n \"tertiaryContainer\": \"#A9C2FC\",\n \"onTertiaryContainer\": \"#000A23\",\n \"error\": \"#FFECE9\",\n \"onError\": \"#000000\",\n \"errorContainer\": \"#FFAEA4\",\n \"onErrorContainer\": \"#220001\",\n \"background\": \"#111318\",\n \"onBackground\": \"#E1E2E9\",\n \"surface\": \"#111318\",\n \"onSurface\": \"#FFFFFF\",\n \"surfaceVariant\": \"#43474E\",\n \"onSurfaceVariant\": \"#FFFFFF\",\n \"outline\": \"#EEF0F9\",\n \"outlineVariant\": \"#C0C2CC\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#E1E2E9\",\n \"inverseOnSurface\": \"#000000\",\n \"inversePrimary\": \"#264878\",\n \"primaryFixed\": \"#D5E3FF\",\n \"onPrimaryFixed\": \"#000000\",\n \"primaryFixedDim\": \"#A8C8FF\",\n \"onPrimaryFixedVariant\": \"#001129\",\n \"secondaryFixed\": \"#D8E2FF\",\n \"onSecondaryFixed\": \"#000000\",\n \"secondaryFixedDim\": \"#AEC6FF\",\n \"onSecondaryFixedVariant\": \"#00102E\",\n \"tertiaryFixed\": \"#D8E2FF\",\n \"onTertiaryFixed\": \"#000000\",\n \"tertiaryFixedDim\": \"#AEC6FF\",\n \"onTertiaryFixedVariant\": \"#00102E\",\n \"surfaceDim\": \"#111318\",\n \"surfaceBright\": \"#4E5055\",\n \"surfaceContainerLowest\": \"#000000\",\n \"surfaceContainerLow\": \"#1D2024\",\n \"surfaceContainer\": \"#2E3035\",\n \"surfaceContainerHigh\": \"#393B41\",\n \"surfaceContainerHighest\": \"#45474C\"\n }\n },\n \"palettes\": {\n \"primary\": {\n \"0\": \"#000000\",\n \"5\": \"#001129\",\n \"10\": \"#001B3C\",\n \"15\": \"#00264E\",\n \"20\": \"#003061\",\n \"25\": \"#003B75\",\n \"30\": \"#004689\",\n \"35\": \"#00529E\",\n \"40\": \"#005EB3\",\n \"50\": \"#2777D5\",\n \"60\": \"#4A91F1\",\n \"70\": \"#76ACFF\",\n \"80\": \"#A8C8FF\",\n \"90\": \"#D5E3FF\",\n \"95\": \"#ECF1FF\",\n \"98\": \"#F9F9FF\",\n \"99\": \"#FDFBFF\",\n \"100\": \"#FFFFFF\"\n },\n \"secondary\": {\n \"0\": \"#000000\",\n \"5\": \"#061025\",\n \"10\": \"#111B30\",\n \"15\": \"#1B263B\",\n \"20\": \"#263046\",\n \"25\": \"#313B52\",\n \"30\": \"#3D475E\",\n \"35\": \"#48526A\",\n \"40\": \"#545E76\",\n \"50\": \"#6D7790\",\n \"60\": \"#8690AB\",\n \"70\": \"#A1ABC6\",\n \"80\": \"#BCC6E2\",\n \"90\": \"#D8E2FF\",\n \"95\": \"#EDF0FF\",\n \"98\": \"#F9F9FF\",\n \"99\": \"#FEFBFF\",\n \"100\": \"#FFFFFF\"\n },\n \"tertiary\": {\n \"0\": \"#000000\",\n \"5\": \"#061025\",\n \"10\": \"#111B30\",\n \"15\": \"#1B253B\",\n \"20\": \"#263046\",\n \"25\": \"#313B52\",\n \"30\": \"#3D475E\",\n \"35\": \"#48526A\",\n \"40\": \"#545E77\",\n \"50\": \"#6D7790\",\n \"60\": \"#8690AB\",\n \"70\": \"#A1ABC6\",\n \"80\": \"#BCC6E2\",\n \"90\": \"#D8E2FF\",\n \"95\": \"#EDF0FF\",\n \"98\": \"#FAF9FF\",\n \"99\": \"#FEFBFF\",\n \"100\": \"#FFFFFF\"\n },\n \"neutral\": {\n \"0\": \"#000000\",\n \"5\": \"#101114\",\n \"10\": \"#1A1C1E\",\n \"15\": \"#252629\",\n \"20\": \"#2F3033\",\n \"25\": \"#3A3B3E\",\n \"30\": \"#46474A\",\n \"35\": \"#525256\",\n \"40\": \"#5E5E62\",\n \"50\": \"#76777A\",\n \"60\": \"#909094\",\n \"70\": \"#ABABAF\",\n \"80\": \"#C7C6CA\",\n \"90\": \"#E3E2E6\",\n \"95\": \"#F1F0F4\",\n \"98\": \"#FAF9FD\",\n \"99\": \"#FDFBFF\",\n \"100\": \"#FFFFFF\"\n },\n \"neutral-variant\": {\n \"0\": \"#000000\",\n \"5\": \"#0D1117\",\n \"10\": \"#181C22\",\n \"15\": \"#22262D\",\n \"20\": \"#2D3038\",\n \"25\": \"#383B43\",\n \"30\": \"#43474E\",\n \"35\": \"#4F525A\",\n \"40\": \"#5B5E66\",\n \"50\": \"#74777F\",\n \"60\": \"#8E9199\",\n \"70\": \"#A8ABB4\",\n \"80\": \"#C4C6CF\",\n \"90\": \"#E0E2EC\",\n \"95\": \"#EEF0FA\",\n \"98\": \"#F9F9FF\",\n \"99\": \"#FDFBFF\",\n \"100\": \"#FFFFFF\"\n }\n }\n}\n","import { alpha, createTheme } from '@mui/material/styles';\nimport type { PaletteMode, PaletteOptions } from '@mui/material/styles';\n\nimport materialThemeSource from './material-theme.json';\n\ntype SchemeDef = (typeof materialThemeSource)['schemes']['light'];\n\nfunction extendedColor(name: string): string | undefined {\n return materialThemeSource.extendedColors.find((e) => e.name === name)?.color;\n}\n\nfunction neutralToGrey(p: (typeof materialThemeSource)['palettes']['neutral']) {\n return {\n 50: p['98'],\n 100: p['95'],\n 200: p['90'],\n 300: p['80'],\n 400: p['70'],\n 500: p['60'],\n 600: p['50'],\n 700: p['40'],\n 800: p['30'],\n 900: p['20'],\n A100: p['90'],\n A200: p['80'],\n A400: p['60'],\n A700: p['40'],\n };\n}\n\nfunction schemeToPalette(mode: PaletteMode, scheme: SchemeDef): PaletteOptions {\n const onSurfaceToken = scheme.onSurface;\n\n return {\n mode,\n primary: {\n main: scheme.primary,\n light: scheme.primaryContainer,\n dark: scheme.onPrimaryContainer,\n contrastText: scheme.onPrimary,\n },\n secondary: {\n main: scheme.secondary,\n light: '#D8E2FF',\n dark: scheme.onSecondaryContainer,\n contrastText: scheme.onSecondary,\n },\n tertiary: {\n main: scheme.tertiary,\n light: scheme.tertiaryContainer,\n dark: scheme.onTertiaryContainer,\n contrastText: scheme.onTertiary,\n },\n error: {\n main: scheme.error,\n light: scheme.errorContainer,\n dark: scheme.onErrorContainer,\n contrastText: scheme.onError,\n },\n warning: {\n main: extendedColor('Estado Programado') ?? '#FF6D00',\n light: '#FF9E40',\n dark: '#C25400',\n contrastText: '#FFFFFF',\n },\n info: {\n main: extendedColor('Estado Redaccion') ?? '#0091EA',\n light: '#64B5F6',\n dark: '#0064B7',\n contrastText: '#FFFFFF',\n },\n success: {\n main: extendedColor('Estado publicada') ?? '#00C853',\n light: '#69F0AE',\n dark: '#009624',\n contrastText: '#FFFFFF',\n },\n brand: {\n main: extendedColor('Bluestack color') ?? '#2962FF',\n },\n text: {\n primary: scheme.onSurface,\n secondary: scheme.onSurfaceVariant,\n disabled: alpha(scheme.onSurface, 0.38),\n },\n divider: scheme.outlineVariant,\n background: {\n default: scheme.background,\n paper: scheme.surfaceContainerLowest,\n },\n action: {\n active: alpha(onSurfaceToken, 0.56),\n hover: alpha(onSurfaceToken, mode === 'light' ? 0.04 : 0.08),\n selected: alpha(scheme.primary, 0.12),\n focus: alpha(scheme.primary, 0.12),\n disabled: alpha(onSurfaceToken, 0.26),\n disabledBackground: alpha(onSurfaceToken, 0.12),\n },\n common: {\n black: scheme.shadow,\n white: '#FFFFFF',\n },\n grey: neutralToGrey(materialThemeSource.palettes.neutral),\n m3: {\n surfaceTint: scheme.surfaceTint,\n surfaceDim: scheme.surfaceDim,\n surfaceBright: scheme.surfaceBright,\n surface: scheme.surface,\n surfaceContainerLowest: scheme.surfaceContainerLowest,\n surfaceContainerLow: scheme.surfaceContainerLow,\n surfaceContainer: scheme.surfaceContainer,\n surfaceContainerHigh: scheme.surfaceContainerHigh,\n surfaceContainerHighest: scheme.surfaceContainerHighest,\n outline: scheme.outline,\n outlineVariant: scheme.outlineVariant,\n inverseSurface: scheme.inverseSurface,\n inverseOnSurface: scheme.inverseOnSurface,\n inversePrimary: scheme.inversePrimary,\n onBackground: scheme.onBackground,\n surfaceVariant: scheme.surfaceVariant,\n onSurfaceVariant: scheme.onSurfaceVariant,\n },\n };\n}\n\nexport function createAppTheme() {\n const lightPalette = schemeToPalette(\n 'light',\n materialThemeSource.schemes.light,\n );\n const darkPalette = schemeToPalette('dark', materialThemeSource.schemes.dark);\n\n return createTheme({\n cssVariables: {\n colorSchemeSelector: 'data',\n },\n defaultColorScheme: 'light',\n colorSchemes: {\n light: { palette: lightPalette },\n dark: { palette: darkPalette },\n },\n typography: {\n fontFamily: ['\"Roboto\"', '\"Helvetica\"', '\"Arial\"', 'sans-serif'].join(\n ',',\n ),\n },\n });\n}\n","import type {\n CmsMessages,\n NavigationModule,\n NotificationsMenuMessageKey,\n ProfileMenuMessageKey,\n SidebarMessageKey,\n TopBarMessageKey,\n} from './types';\n\nexport type CmsTranslator = {\n messages: CmsMessages;\n navigation: (module: NavigationModule | string) => string;\n sidebar: (key: SidebarMessageKey) => string;\n topBar: (key: TopBarMessageKey) => string;\n profileMenu: (key: ProfileMenuMessageKey) => string;\n notificationsMenu: (\n key: NotificationsMenuMessageKey,\n params?: { count?: number },\n ) => string;\n};\n\nfunction interpolate(template: string, params?: Record<string, string | number>): string {\n if (!params) return template;\n return template.replace(/\\{(\\w+)\\}/g, (_, key: string) => {\n const value = params[key];\n return value === undefined ? `{${key}}` : String(value);\n });\n}\n\nexport function createTranslator(messages: CmsMessages): CmsTranslator {\n const navigationLookup = messages.navigation as Record<string, string>;\n\n return {\n messages,\n navigation: (module) => navigationLookup[module] ?? module,\n sidebar: (key) => messages.sidebar[key],\n topBar: (key) => messages.topBar[key],\n profileMenu: (key) => messages.profileMenu[key],\n notificationsMenu: (key, params) =>\n interpolate(messages.notificationsMenu[key], params),\n };\n}\n","export const enMessages = {\n navigation: {\n COMMENTS: 'Comments',\n POLLS: 'Polls',\n MEDIA: 'Media',\n AUDIOS: 'Audio',\n IMAGES: 'Images',\n PLAYLISTS: 'Playlist',\n VIDEOS: 'Videos',\n NEWS: 'News',\n PLANNING: 'Planning',\n ANALYTICS: 'Analytics',\n TAGS: 'Tags',\n TRIVIAS: 'Trivia',\n OTHERS: 'Other',\n NEWSWIRES: 'News Wires',\n EVENTS: 'Events',\n PAGES: 'Pages',\n FEEDS: 'Feed',\n PERSONS: 'People',\n CONTRIBUTIONS: 'Contributions',\n RECIPES: 'Recipes',\n POSTS: 'Posts',\n BANNERS: 'Banners',\n BLOCKS: 'Blocks',\n MENUS: 'Menu',\n TOPICS: 'Topics',\n ADVANCEDQUERYS: 'Advanced search',\n IMPORTS: 'Imports',\n NEWSLETTERS: 'Newsletters',\n NOTIFICATIONS: 'Notifications',\n PAYMENTS: 'Payments',\n PLANS: 'Plans',\n REPORTS: 'Reports',\n SECTIONS: 'Sections',\n TWITTERS: 'Twitter Feeds',\n USERS: 'Users',\n ZONES: 'Zones',\n IA: 'IA',\n },\n sidebar: {\n navAriaLabel: 'Main navigation',\n collapse: 'Collapse',\n expand: 'Expand',\n newBadge: 'New',\n },\n topBar: {\n openSidebar: 'Open sidebar menu',\n closeSidebar: 'Close sidebar menu',\n new: 'New',\n language: 'Language',\n analytics: 'Analytics',\n help: 'Help',\n },\n profileMenu: {\n ariaLabel: 'My profile',\n myProfile: 'My Profile',\n webmasterView: 'Webmaster View',\n signOff: 'Sign off',\n },\n notificationsMenu: {\n title: 'Notifications',\n unreadCount: '{count} unread',\n empty: 'No notifications',\n ariaLabel: 'Notifications',\n },\n} as const;\n","import type { CmsMessages } from '../types';\n\nexport const esMessages = {\n navigation: {\n COMMENTS: 'Comentarios',\n POLLS: 'Encuestas',\n MEDIA: 'Media',\n AUDIOS: 'Audio',\n IMAGES: 'Imágenes',\n PLAYLISTS: 'Playlist',\n VIDEOS: 'Videos',\n NEWS: 'Noticias',\n PLANNING: 'Planificación',\n ANALYTICS: 'Analíticas',\n TAGS: 'Tags',\n TRIVIAS: 'Trivias',\n OTHERS: 'Otros',\n NEWSWIRES: 'News Wires',\n EVENTS: 'Eventos',\n PAGES: 'Páginas',\n FEEDS: 'Feed',\n PERSONS: 'Personas',\n CONTRIBUTIONS: 'Contribuciones',\n RECIPES: 'Recetas',\n POSTS: 'Posts',\n BANNERS: 'Banners',\n BLOCKS: 'Bloques',\n MENUS: 'Menú',\n TOPICS: 'Temas',\n ADVANCEDQUERYS: 'Búsqueda avanzada',\n IMPORTS: 'Importaciones',\n NEWSLETTERS: 'Newsletters',\n NOTIFICATIONS: 'Notificaciones',\n PAYMENTS: 'Pagos',\n PLANS: 'Planes',\n REPORTS: 'Reportes',\n SECTIONS: 'Secciones',\n TWITTERS: 'Twitter Feeds',\n USERS: 'Usuarios',\n ZONES: 'Zonas',\n IA: 'IA',\n },\n sidebar: {\n navAriaLabel: 'Principal',\n collapse: 'Contraer',\n expand: 'Expandir',\n newBadge: 'Nuevo',\n },\n topBar: {\n openSidebar: 'Abrir menú lateral',\n closeSidebar: 'Cerrar menú lateral',\n new: 'Nuevo',\n language: 'Idioma',\n analytics: 'Analíticas',\n help: 'Ayuda',\n },\n profileMenu: {\n ariaLabel: 'Mi perfil',\n myProfile: 'Mi perfil',\n webmasterView: 'Vista Webmaster',\n signOff: 'Cerrar sesión',\n },\n notificationsMenu: {\n title: 'Notificaciones',\n unreadCount: '{count} sin leer',\n empty: 'No hay notificaciones',\n ariaLabel: 'Notificaciones',\n },\n} satisfies CmsMessages;\n","import type { CmsMessages } from '../types';\n\nexport const ptMessages = {\n navigation: {\n COMMENTS: 'Comentários',\n POLLS: 'Enquetes',\n MEDIA: 'Mídia',\n AUDIOS: 'Áudio',\n IMAGES: 'Imagens',\n PLAYLISTS: 'Playlist',\n VIDEOS: 'Vídeos',\n NEWS: 'Notícias',\n PLANNING: 'Planejamento',\n ANALYTICS: 'Análises',\n TAGS: 'Tags',\n TRIVIAS: 'Trivias',\n OTHERS: 'Outros',\n NEWSWIRES: 'News Wires',\n EVENTS: 'Eventos',\n PAGES: 'Páginas',\n FEEDS: 'Feed',\n PERSONS: 'Pessoas',\n CONTRIBUTIONS: 'Contribuições',\n RECIPES: 'Receitas',\n POSTS: 'Posts',\n BANNERS: 'Banners',\n BLOCKS: 'Blocos',\n MENUS: 'Menu',\n TOPICS: 'Tópicos',\n ADVANCEDQUERYS: 'Busca avançada',\n IMPORTS: 'Importações',\n NEWSLETTERS: 'Newsletters',\n NOTIFICATIONS: 'Notificações',\n PAYMENTS: 'Pagamentos',\n PLANS: 'Planos',\n REPORTS: 'Relatórios',\n SECTIONS: 'Seções',\n TWITTERS: 'Twitter Feeds',\n USERS: 'Usuários',\n ZONES: 'Zonas',\n IA: 'IA',\n },\n sidebar: {\n navAriaLabel: 'Principal',\n collapse: 'Recolher',\n expand: 'Expandir',\n newBadge: 'Novo',\n },\n topBar: {\n openSidebar: 'Abrir menu lateral',\n closeSidebar: 'Fechar menu lateral',\n new: 'Novo',\n language: 'Idioma',\n analytics: 'Análises',\n help: 'Ajuda',\n },\n profileMenu: {\n ariaLabel: 'Meu perfil',\n myProfile: 'Meu perfil',\n webmasterView: 'Visão Webmaster',\n signOff: 'Sair',\n },\n notificationsMenu: {\n title: 'Notificações',\n unreadCount: '{count} não lidas',\n empty: 'Nenhuma notificação',\n ariaLabel: 'Notificações',\n },\n} satisfies CmsMessages;\n","import type { CmsMessages, CmsMessagesOverride, Locale, LocaleCatalog } from '../types';\nimport { enMessages } from './en';\nimport { esMessages } from './es';\nimport { ptMessages } from './pt';\n\nexport { enMessages, esMessages, ptMessages };\n\nexport const defaultLocaleCatalog: LocaleCatalog = {\n en: enMessages,\n es: esMessages,\n pt: ptMessages,\n};\n\nfunction mergeNamespace<T extends Record<string, string>>(\n base: T,\n override?: Partial<T>,\n): T {\n if (!override) return base;\n return { ...base, ...override };\n}\n\n/** Deep-merge custom overrides on top of the locale catalog entry. */\nexport function mergeMessages(\n locale: Locale,\n catalog: LocaleCatalog,\n overrides?: CmsMessagesOverride,\n): CmsMessages {\n const base = catalog[locale];\n const fallback = catalog.en;\n\n return {\n navigation: mergeNamespace(\n { ...fallback.navigation, ...base.navigation },\n overrides?.navigation,\n ),\n sidebar: mergeNamespace(\n { ...fallback.sidebar, ...base.sidebar },\n overrides?.sidebar,\n ),\n topBar: mergeNamespace({ ...fallback.topBar, ...base.topBar }, overrides?.topBar),\n profileMenu: mergeNamespace(\n { ...fallback.profileMenu, ...base.profileMenu },\n overrides?.profileMenu,\n ),\n notificationsMenu: mergeNamespace(\n { ...fallback.notificationsMenu, ...base.notificationsMenu },\n overrides?.notificationsMenu,\n ),\n };\n}\n","import type { enMessages } from './messages/en';\n\nexport const SUPPORTED_LOCALES = ['es', 'en', 'pt'] as const;\n\nexport type Locale = (typeof SUPPORTED_LOCALES)[number];\n\nexport const DEFAULT_LOCALE: Locale = 'en';\n\ntype DeepStringMap<T> = {\n [K in keyof T]: T[K] extends Record<string, unknown>\n ? { [K2 in keyof T[K]]: string }\n : string;\n};\n\n/** Message tree shape; values are strings, keys are inferred from `enMessages`. */\nexport type CmsMessages = DeepStringMap<typeof enMessages>;\n\nexport type NavigationModule = keyof CmsMessages['navigation'];\n\nexport type SidebarMessageKey = keyof CmsMessages['sidebar'];\n\nexport type TopBarMessageKey = keyof CmsMessages['topBar'];\n\nexport type ProfileMenuMessageKey = keyof CmsMessages['profileMenu'];\n\nexport type NotificationsMenuMessageKey = keyof CmsMessages['notificationsMenu'];\n\n/** Partial override tree; missing keys fall back to the active locale, then `en`. */\nexport type CmsMessagesOverride = {\n [Namespace in keyof CmsMessages]?: Partial<CmsMessages[Namespace]>;\n};\n\nexport type LocaleCatalog = Record<Locale, CmsMessages>;\n","import { DEFAULT_LOCALE, SUPPORTED_LOCALES, type Locale } from './types';\n\n/** Normaliza códigos BCP 47 o variantes (`es-MX`, `pt_BR`) al `Locale` soportado. */\nexport function normalizeLocale(value?: string | null): Locale {\n if (!value) return DEFAULT_LOCALE;\n\n const normalized = value.trim().toLowerCase().replace('_', '-');\n const primary = normalized.split('-')[0];\n\n if ((SUPPORTED_LOCALES as readonly string[]).includes(normalized)) {\n return normalized as Locale;\n }\n\n if ((SUPPORTED_LOCALES as readonly string[]).includes(primary)) {\n return primary as Locale;\n }\n\n return DEFAULT_LOCALE;\n}\n","'use client';\n\nimport { createContext, useMemo, type ReactNode } from 'react';\n\nimport { createTranslator, type CmsTranslator } from './createTranslator';\nimport { defaultLocaleCatalog, mergeMessages } from './messages';\nimport { normalizeLocale } from './normalizeLocale';\nimport type { CmsMessagesOverride, Locale, LocaleCatalog } from './types';\n\nexport type CmsI18nContextValue = {\n locale: Locale;\n t: CmsTranslator;\n};\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const CmsI18nContext = createContext<CmsI18nContextValue | null>(null);\n\nexport type CmsI18nProviderProps = {\n locale?: Locale | string;\n /** Alias de `locale` (p. ej. consumidores que pasan `language=\"es\"`). */\n language?: Locale | string;\n messages?: CmsMessagesOverride;\n catalog?: LocaleCatalog;\n children: ReactNode;\n};\n\nexport function CmsI18nProvider({\n locale,\n language,\n messages,\n catalog = defaultLocaleCatalog,\n children,\n}: CmsI18nProviderProps) {\n const resolvedLocale = normalizeLocale(locale ?? language);\n\n const value = useMemo<CmsI18nContextValue>(() => {\n const resolvedMessages = mergeMessages(resolvedLocale, catalog, messages);\n return {\n locale: resolvedLocale,\n t: createTranslator(resolvedMessages),\n };\n }, [catalog, messages, resolvedLocale]);\n\n return <CmsI18nContext.Provider value={value}>{children}</CmsI18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext, useMemo } from 'react';\n\nimport { CmsI18nContext } from './CmsI18nProvider';\nimport { createTranslator } from './createTranslator';\nimport { defaultLocaleCatalog, mergeMessages } from './messages';\nimport type { CmsMessagesOverride, Locale, LocaleCatalog } from './types';\nimport { DEFAULT_LOCALE } from './types';\n\nexport type UseCmsTranslationOptions = {\n locale?: Locale;\n messages?: CmsMessagesOverride;\n catalog?: LocaleCatalog;\n};\n\nexport function useCmsTranslation(options?: UseCmsTranslationOptions) {\n const context = useContext(CmsI18nContext);\n\n const locale = options?.locale ?? context?.locale ?? DEFAULT_LOCALE;\n const catalog = options?.catalog ?? defaultLocaleCatalog;\n const overrides = options?.messages;\n\n const t = useMemo(() => {\n if (!overrides && context && context.locale === locale) {\n return context.t;\n }\n return createTranslator(mergeMessages(locale, catalog, overrides));\n }, [catalog, context, locale, overrides]);\n\n return { locale, t };\n}\n\n/** BCP 47 tag for `Intl` / `toLocaleString` formatting. */\nexport function getIntlLocaleTag(locale: Locale): string {\n switch (locale) {\n case 'pt':\n return 'pt-BR';\n case 'en':\n return 'en-US';\n case 'es':\n default:\n return 'es-MX';\n }\n}\n","import type {\n AnchorHTMLAttributes,\n ElementType,\n ForwardedRef,\n ReactNode,\n RefAttributes,\n} from 'react';\nimport { forwardRef } from 'react';\n\nexport type CmsLinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {\n href: string;\n children?: ReactNode;\n};\n\nexport type CmsLinkComponent = ElementType<\n CmsLinkProps & RefAttributes<HTMLAnchorElement>\n>;\n\nexport const DefaultCmsLink = forwardRef(function DefaultCmsLink(\n { href, children, ...rest }: CmsLinkProps,\n ref: ForwardedRef<HTMLAnchorElement>,\n) {\n return (\n <a href={href} ref={ref} {...rest}>\n {children}\n </a>\n );\n});\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nconst ACTIVE_BG = '#D8E2FF';\nconst HOVER_BG = '#E3E2E6';\nconst NAV_TEXT = '#414752';\n\nexport const SIDEBAR_WIDTH_EXPANDED = 195;\nexport const SIDEBAR_WIDTH_COLLAPSED = 96;\n\nconst ICON_SIZE_EXPANDED = 24;\nconst ICON_SIZE_COLLAPSED = 24;\n\nconst scrollbarHidden = {\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n} as const;\n\nexport const SidebarStyles = {\n sxRoot: (open: boolean): SxProps<Theme> => {\n const width = open ? SIDEBAR_WIDTH_EXPANDED : SIDEBAR_WIDTH_COLLAPSED;\n return {\n width,\n maxWidth: width,\n minWidth: width,\n flexShrink: 0,\n alignSelf: 'stretch',\n minHeight: 0,\n maxHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n bgcolor: 'm3.surfaceContainer',\n paddingTop: open ? '1rem' : '1.5rem',\n boxSizing: 'border-box',\n transition: 'width 0.2s ease, min-width 0.2s ease, max-width 0.2s ease',\n };\n },\n\n sxNavScroll: {\n flex: 1,\n minHeight: 0,\n overflowY: 'auto',\n overflowX: 'hidden',\n width: '100%',\n boxSizing: 'border-box',\n ...scrollbarHidden,\n } as SxProps<Theme>,\n\n sxNav: (open: boolean): SxProps<Theme> => ({\n display: 'flex',\n flexDirection: 'column',\n py: 1.5,\n gap: open ? 0.25 : 0.5,\n width: '100%',\n maxWidth: '100%',\n minWidth: 0,\n boxSizing: 'border-box',\n position: 'relative',\n px: open ? '1rem' : 0.75,\n alignItems: open ? 'stretch' : 'start',\n }),\n\n sxNavGroup: (open: boolean): SxProps<Theme> => ({\n position: 'relative',\n minWidth: 0,\n maxWidth: open ? '100%' : 'none',\n overflow: 'visible',\n width: open ? '100%' : 'auto',\n }),\n\n /** Wrapper del Tooltip: ancho completo expandido, auto en rail colapsado */\n sxTooltipWrap: (open: boolean): SxProps<Theme> => ({\n display: 'flex',\n width: open ? '100%' : 'auto',\n alignItems: 'flex-start',\n }),\n\n sxDivider: {\n my: 1,\n borderColor: '#C1C6D4',\n } as SxProps<Theme>,\n\n sxItem: (\n selected: boolean,\n nested = false,\n hasChildren = false,\n collapsed = false,\n ): SxProps<Theme> => {\n if (collapsed) {\n return {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 48,\n minWidth: 0,\n width: 'auto',\n maxWidth: 'none',\n boxSizing: 'border-box',\n overflow: 'hidden',\n px: 0,\n py: 0,\n borderRadius: '100px',\n color: NAV_TEXT,\n textDecoration: 'none',\n bgcolor: selected ? ACTIVE_BG : 'transparent',\n '&:hover': {\n bgcolor: selected ? ACTIVE_BG : 'action.hover',\n },\n };\n }\n\n return {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n minHeight: 40,\n minWidth: 0,\n maxWidth: 'none',\n // Para que el hover/active se vea igual al diseño: el fondo llega al borde izquierdo\n width: 'calc(100% + 1rem)',\n boxSizing: 'border-box',\n overflow: hasChildren ? 'visible' : 'hidden',\n px: nested ? 1.5 : 0,\n pl: nested ? 4.5 : 3,\n py: 0.75,\n ml: '-1rem',\n mr: 0,\n // Sub-items: píldora completa; top-level: píldora pegada a la izquierda\n borderRadius: nested ? '100px' : '0 100px 100px 0',\n color: NAV_TEXT,\n textDecoration: 'none',\n bgcolor: selected ? ACTIVE_BG : 'transparent',\n '&:hover': {\n bgcolor: selected ? ACTIVE_BG : HOVER_BG,\n },\n };\n },\n\n sxItemIcon: (selected: boolean, collapsed = false): SxProps<Theme> => ({\n fontSize: collapsed ? ICON_SIZE_COLLAPSED : ICON_SIZE_EXPANDED,\n color: selected ? 'secondary.dark' : 'm3.onSurfaceVariant',\n width: collapsed ? 48 : 'auto',\n flexShrink: 0,\n }),\n\n sxItemLabel: (selected: boolean): SxProps<Theme> => ({\n flex: 1,\n minWidth: 0,\n fontSize: 14,\n fontWeight: selected ? 600 : 400,\n lineHeight: 1.43,\n color: NAV_TEXT,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }),\n\n sxExpandButton: {\n pl: '1.5rem',\n position: 'absolute',\n left: 0,\n top: '50%',\n transform: 'translateY(-50%)',\n p: 0.25,\n color: 'm3.onSurfaceVariant',\n zIndex: 1,\n } as SxProps<Theme>,\n\n sxChildrenMenuPaper: {\n mt: 0.5,\n borderRadius: '28px',\n bgcolor: '#FFFFFF',\n boxShadow: '0px 8px 16px rgba(0,0,0,0.18)',\n px: 1,\n } as SxProps<Theme>,\n\n sxChildrenMenuItem: (selected: boolean): SxProps<Theme> => ({\n minHeight: 44,\n borderRadius: '100px',\n px: 2,\n py: 1,\n gap: 1.25,\n color: NAV_TEXT,\n bgcolor: selected ? ACTIVE_BG : 'transparent',\n '&:hover': {\n bgcolor: selected ? ACTIVE_BG : HOVER_BG,\n },\n '&.Mui-selected': {\n bgcolor: ACTIVE_BG,\n '&:hover': { bgcolor: ACTIVE_BG },\n },\n }),\n\n sxChildrenMenuListItemIcon: {\n minWidth: 34,\n color: 'm3.onSurfaceVariant',\n '& .MuiSvgIcon-root': {\n fontSize: 22,\n },\n } as SxProps<Theme>,\n\n sxBetaChip: (open = false): SxProps<Theme> => ({\n height: 15,\n fontSize: 11,\n fontWeight: 600,\n letterSpacing: '0.04em',\n bgcolor: 'primary.main',\n color: 'primary.contrastText',\n borderRadius: '.625rem',\n px: 0.75,\n mr: open ? 1 : 0,\n lineHeight: 1,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }),\n};\n","'use client';\nimport BarChartOutlinedIcon from '@mui/icons-material/BarChartOutlined';\nimport BookmarkBorderOutlinedIcon from '@mui/icons-material/BookmarkBorderOutlined';\nimport ChatBubbleOutlineOutlinedIcon from '@mui/icons-material/ChatBubbleOutlineOutlined';\nimport CreateOutlinedIcon from '@mui/icons-material/CreateOutlined';\nimport EventOutlinedIcon from '@mui/icons-material/EventOutlined';\nimport ExploreOutlinedIcon from '@mui/icons-material/ExploreOutlined';\nimport ImageOutlinedIcon from '@mui/icons-material/ImageOutlined';\nimport ImportExportOutlinedIcon from '@mui/icons-material/ImportExportOutlined';\nimport LabelOutlinedIcon from '@mui/icons-material/LabelOutlined';\nimport MailOutlineOutlinedIcon from '@mui/icons-material/MailOutlineOutlined';\nimport MoreHorizOutlinedIcon from '@mui/icons-material/MoreHorizOutlined';\nimport NotificationsNoneOutlinedIcon from '@mui/icons-material/NotificationsNoneOutlined';\nimport PeopleOutlineOutlinedIcon from '@mui/icons-material/PeopleOutlineOutlined';\nimport PeopleOutlinedIcon from '@mui/icons-material/PeopleOutlined';\nimport PermMediaOutlinedIcon from '@mui/icons-material/PermMediaOutlined';\nimport PlayCircleOutlineOutlinedIcon from '@mui/icons-material/PlayCircleOutlineOutlined';\nimport RestaurantOutlinedIcon from '@mui/icons-material/RestaurantOutlined';\nimport SearchOutlinedIcon from '@mui/icons-material/SearchOutlined';\nimport ShoppingCartOutlinedIcon from '@mui/icons-material/ShoppingCartOutlined';\nimport ViewListOutlinedIcon from '@mui/icons-material/ViewListOutlined';\nimport FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter';\nimport TimelineOutlinedIcon from '@mui/icons-material/TimelineOutlined';\nimport MessageOutlinedIcon from '@mui/icons-material/MessageOutlined';\nimport MicNoneOutlinedIcon from '@mui/icons-material/MicNoneOutlined';\nimport PlaylistPlayOutlinedIcon from '@mui/icons-material/PlaylistPlayOutlined';\nimport PendingActionsOutlinedIcon from '@mui/icons-material/PendingActionsOutlined';\nimport ForumOutlinedIcon from '@mui/icons-material/ForumOutlined';\nimport UsbOutlinedIcon from '@mui/icons-material/UsbOutlined';\nimport FormatListBulletedOutlinedIcon from '@mui/icons-material/FormatListBulletedOutlined';\nimport VerticalSplitOutlinedIcon from '@mui/icons-material/VerticalSplitOutlined';\nimport ViewQuiltOutlinedIcon from '@mui/icons-material/ViewQuiltOutlined';\nimport SubscriptionsOutlinedIcon from '@mui/icons-material/SubscriptionsOutlined';\nimport type { NavBlock } from '../../types/navigation';\n\n/**\n * Navegación lateral por defecto.\n * `module` debe coincidir exactamente con `module` en POST /auth/modulesAvailable\n * y con las claves en `messages.navigation`.\n */\nexport const ACCOUNT_NAV_BLOCKS: NavBlock[] = [\n {\n href: '/admin/comments/',\n icon: MessageOutlinedIcon,\n module: 'COMMENTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/poll.jsp',\n icon: BarChartOutlinedIcon,\n module: 'POLLS',\n },\n {\n href: '/media',\n icon: PermMediaOutlinedIcon,\n module: 'MEDIA',\n children: [\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/audios.jsp',\n icon: MicNoneOutlinedIcon,\n module: 'AUDIOS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/playlist.jsp',\n icon: ImageOutlinedIcon,\n module: 'IMAGES',\n },\n {\n href: '/media/playlist',\n icon: PlaylistPlayOutlinedIcon,\n module: 'PLAYLISTS',\n },\n {\n href: '/admin/videos/',\n icon: PlayCircleOutlineOutlinedIcon,\n module: 'VIDEOS',\n },\n ],\n },\n {\n href: '/admin/posts/',\n icon: FormatAlignCenterIcon,\n module: 'POSTS',\n },\n {\n href: '/admin/reports/',\n icon: TimelineOutlinedIcon,\n module: 'PRODUCTION',\n },\n\n {\n href: '/planificacion',\n icon: PendingActionsOutlinedIcon,\n module: 'PLANNING',\n },\n /* {\n href: '/analiticas',\n icon: BarChartOutlinedIcon,\n module: 'ANALYTICS',\n }, */\n { href: '/tags', icon: LabelOutlinedIcon, module: 'TAGS' },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/trivias.jsp',\n icon: ForumOutlinedIcon,\n module: 'TRIVIAS',\n },\n {\n href: '/otros',\n icon: MoreHorizOutlinedIcon,\n module: 'OTHERS',\n children: [\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/newswires.jsp',\n icon: UsbOutlinedIcon,\n module: 'NEWSWIRES',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/event.jsp',\n icon: EventOutlinedIcon,\n module: 'EVENTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminPages.jsp',\n icon: ExploreOutlinedIcon,\n module: 'PAGES',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/dashboard.jsp',\n icon: FormatListBulletedOutlinedIcon,\n module: 'FEEDS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminPages.jsp',\n icon: PeopleOutlinedIcon,\n module: 'PERSONS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminPosts.jsp',\n icon: CreateOutlinedIcon,\n module: 'POSTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/recipe.jsp',\n icon: RestaurantOutlinedIcon,\n module: 'RECIPES',\n },\n ],\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/banners.jsp',\n icon: VerticalSplitOutlinedIcon,\n module: 'BANNERS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/dynamicContent.jsp',\n icon: ViewQuiltOutlinedIcon,\n module: 'BLOCKS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/menuSite.jsp',\n icon: ViewListOutlinedIcon,\n module: 'MENUS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/navigationTags.jsp',\n icon: BookmarkBorderOutlinedIcon,\n module: 'TOPICS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/filterQueryList.jsp',\n icon: SearchOutlinedIcon,\n module: 'ADVANCEDQUERYS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminImports.jsp',\n icon: ImportExportOutlinedIcon,\n module: 'IMPORTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/newsletter.jsp',\n icon: MailOutlineOutlinedIcon,\n module: 'NEWSLETTERS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminQueues.jsp',\n icon: NotificationsNoneOutlinedIcon,\n module: 'NOTIFICATIONS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/payments.jsp',\n icon: ShoppingCartOutlinedIcon,\n module: 'PAYMENTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/subscriptions.jsp',\n icon: SubscriptionsOutlinedIcon,\n module: 'PAYMENTS',\n },\n /* {\n href: '/reportes',\n icon: BarChartOutlinedIcon,\n module: 'REPORTS',\n },\n {\n href: '/secciones',\n icon: ViewListOutlinedIcon,\n module: 'SECTIONS',\n }, */\n {\n href: '/twitter-feeds',\n icon: ChatBubbleOutlineOutlinedIcon,\n module: 'TWITTERS',\n },\n {\n href: '/usuarios',\n icon: PeopleOutlineOutlinedIcon,\n module: 'USERS',\n },\n /* {\n href: '/zonas',\n icon: LayersOutlinedIcon,\n module: 'ZONES',\n },\n { href: '/ia', icon: ExploreOutlinedIcon, module: 'IA' }, */\n];\n","'use client';\n\nimport { useMemo, useState, type ReactElement } from 'react';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport Box from '@mui/material/Box';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { useCmsTranslation } from '../../i18n';\nimport type { CmsTranslator } from '../../i18n';\nimport type { NavItemPermissions, NavLinkItem } from '../../types/navigation';\nimport { DefaultCmsLink, type CmsLinkComponent } from '../link';\nimport { SidebarStyles } from './Sidebar.styles';\nimport { ACCOUNT_NAV_BLOCKS } from './nav-blocks';\n\nfunction resolveNavLabel(item: NavLinkItem, t: CmsTranslator): string {\n return item.label ?? t.navigation(item.module);\n}\n\nfunction isPathActive(pathname: string, href: string): boolean {\n if (pathname === href) return true;\n if (href !== '/' && pathname.startsWith(`${href}/`)) return true;\n return false;\n}\n\nfunction isItemActive(pathname: string, item: NavLinkItem): boolean {\n if (isPathActive(pathname, item.href)) return true;\n return item.children?.some((child) => isPathActive(pathname, child.href)) ?? false;\n}\n\nfunction findModulePermission(\n permissions: Array<NavItemPermissions>,\n module: string,\n): NavItemPermissions | undefined {\n return permissions.find((permission) => permission.module === module);\n}\n\nfunction getVisibleChildren(\n item: NavLinkItem,\n permissions: Array<NavItemPermissions>,\n): NavLinkItem[] {\n return (\n item.children?.filter((child) => findModulePermission(permissions, child.module)) ?? []\n );\n}\n\nfunction wrapWithTooltip(open: boolean, label: string, node: ReactElement) {\n if (open) return node;\n return (\n <Tooltip title={label} placement=\"right\" arrow>\n <Box component=\"span\" sx={SidebarStyles.sxTooltipWrap(open)}>\n {node}\n </Box>\n </Tooltip>\n );\n}\n\nfunction NavRow({\n item,\n nested = false,\n open = true,\n expanded,\n onToggleExpand,\n LinkComponent,\n pathname,\n permissions,\n t,\n baseUrl,\n selectedPublicationId,\n}: {\n item: NavLinkItem;\n nested?: boolean;\n open?: boolean;\n expanded?: boolean;\n onToggleExpand?: () => void;\n LinkComponent: CmsLinkComponent;\n pathname: string;\n permissions: Array<NavItemPermissions>;\n t: CmsTranslator;\n baseUrl: string;\n selectedPublicationId: string;\n}) {\n const label = resolveNavLabel(item, t);\n const permission = findModulePermission(permissions, item.module);\n const visibleChildren = getVisibleChildren(item, permissions);\n const collapsed = !open;\n const selected = isPathActive(pathname, item.href);\n const parentSelected = isItemActive(pathname, item);\n const hasChildren = visibleChildren.length > 0;\n const Icon = item.icon;\n const iconSelected = nested ? selected : selected || parentSelected;\n const [childMenuAnchor, setChildMenuAnchor] = useState<HTMLElement | null>(null);\n const childMenuOpen = Boolean(childMenuAnchor);\n if (!permission && !hasChildren) return null;\n const content = (\n <>\n {hasChildren && !collapsed ? (\n <IconButton\n size=\"small\"\n aria-label={expanded ? t.sidebar('collapse') : t.sidebar('expand')}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onToggleExpand?.();\n }}\n sx={SidebarStyles.sxExpandButton}>\n {expanded ? (\n <ExpandMoreIcon sx={{ fontSize: 20 }} />\n ) : (\n <ChevronRightIcon sx={{ fontSize: 20 }} />\n )}\n </IconButton>\n ) : null}\n <Icon sx={SidebarStyles.sxItemIcon(iconSelected, collapsed)} />\n {!collapsed ? (\n <Typography component=\"span\" sx={SidebarStyles.sxItemLabel(selected)}>\n {label}\n </Typography>\n ) : null}\n {permission?.isnew && (\n <Box component=\"span\" sx={SidebarStyles.sxBetaChip(open)}>\n {t.sidebar('newBadge')}\n </Box>\n )}\n </>\n );\n\n if (hasChildren && !collapsed) {\n return (\n <Box sx={SidebarStyles.sxNavGroup(open)}>\n <Box\n component=\"div\"\n onClick={onToggleExpand}\n sx={{\n ...SidebarStyles.sxItem(parentSelected, nested, true, false),\n cursor: 'pointer',\n }}>\n {content}\n </Box>\n <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 0.25,\n mt: 0.25,\n minWidth: 0,\n maxWidth: '100%',\n overflow: 'hidden',\n }}>\n {visibleChildren.map((child) => (\n <NavRow\n key={child.href}\n item={child}\n nested\n open={open}\n LinkComponent={LinkComponent}\n pathname={pathname}\n permissions={permissions}\n t={t}\n baseUrl={baseUrl}\n selectedPublicationId={selectedPublicationId}\n />\n ))}\n </Box>\n </Collapse>\n </Box>\n );\n }\n\n // Sidebar colapsado + item con hijos: mostrar menú flotante (como en la imagen)\n if (hasChildren && collapsed) {\n const row = (\n <Box\n component=\"button\"\n type=\"button\"\n aria-label={label}\n aria-controls={childMenuOpen ? `sidebar-children-${item.href}` : undefined}\n aria-haspopup=\"true\"\n aria-expanded={childMenuOpen ? 'true' : undefined}\n onClick={(e) => setChildMenuAnchor(e.currentTarget)}\n onMouseEnter={(e) => setChildMenuAnchor(e.currentTarget)}\n sx={{\n ...SidebarStyles.sxItem(parentSelected, nested, hasChildren, true),\n border: 0,\n background: 'transparent',\n cursor: 'pointer',\n }}>\n {content}\n </Box>\n );\n\n // En colapsado + hijos: solo menú flotante (sin tooltip)\n return (\n <>\n {row}\n <Menu\n id={`sidebar-children-${item.href}`}\n anchorEl={childMenuAnchor}\n open={childMenuOpen}\n onClose={() => setChildMenuAnchor(null)}\n anchorOrigin={{ vertical: 'center', horizontal: 'right' }}\n transformOrigin={{ vertical: 'center', horizontal: 'left' }}\n slotProps={{\n paper: { sx: SidebarStyles.sxChildrenMenuPaper },\n list: {\n onMouseLeave: () => setChildMenuAnchor(null),\n sx: { py: 1 },\n },\n }}>\n {visibleChildren.map((child) => {\n const ChildIcon = child.icon;\n return (\n <MenuItem\n key={child.href}\n component={LinkComponent}\n href={`${baseUrl}${child.href}`}\n onClick={() => setChildMenuAnchor(null)}\n sx={SidebarStyles.sxChildrenMenuItem(isPathActive(pathname, child.href))}>\n <ListItemIcon sx={SidebarStyles.sxChildrenMenuListItemIcon}>\n <ChildIcon />\n </ListItemIcon>\n <ListItemText\n primary={resolveNavLabel(child, t)}\n slotProps={{\n primary: { sx: { fontSize: 14, fontWeight: 400, color: '#191C22' } },\n }}\n />\n </MenuItem>\n );\n })}\n </Menu>\n </>\n );\n }\n\n const row = (\n <Box\n component={LinkComponent}\n href={item.href}\n sx={SidebarStyles.sxItem(\n collapsed ? parentSelected : selected,\n nested,\n hasChildren,\n collapsed,\n )}>\n {content}\n </Box>\n );\n\n return wrapWithTooltip(open, label, row);\n}\n\nfunction NavSection({\n items,\n open = true,\n LinkComponent,\n pathname,\n permissions,\n t,\n baseUrl,\n selectedPublicationId,\n}: {\n items: NavLinkItem[];\n open: boolean;\n LinkComponent: CmsLinkComponent;\n pathname: string;\n permissions: Array<NavItemPermissions>;\n t: CmsTranslator;\n baseUrl: string;\n selectedPublicationId: string;\n}) {\n\n const initialOpen = useMemo(() => {\n const state: Record<string, boolean> = {};\n for (const item of items) {\n if (item.children) {\n state[item.href] =\n item.defaultOpen ?? item.children.some((c) => isPathActive(pathname, c.href));\n }\n }\n return state;\n }, [items, pathname]);\n\n const [openGroups, setOpenGroups] = useState(initialOpen);\n\n const toggleGroup = (href: string) => {\n setOpenGroups((prev) => ({ ...prev, [href]: !prev[href] }));\n };\n\n return (\n <>\n {items.map((item) => (\n <NavRow\n key={item.href}\n item={item}\n open={open}\n permissions={permissions}\n expanded={openGroups[item.href]}\n onToggleExpand={\n getVisibleChildren(item, permissions).length > 0\n ? () => toggleGroup(item.href)\n : undefined\n }\n LinkComponent={LinkComponent}\n pathname={pathname}\n t={t}\n baseUrl={baseUrl}\n selectedPublicationId={selectedPublicationId}\n />\n ))}\n </>\n );\n}\n\nexport type SidebarProps = {\n open?: boolean;\n pathname: string;\n LinkComponent?: CmsLinkComponent;\n permissions: Array<NavItemPermissions>;\n baseUrl: string;\n selectedPublicationId: string;\n};\n\nexport function Sidebar({\n open = true,\n pathname,\n permissions,\n LinkComponent = DefaultCmsLink,\n baseUrl,\n selectedPublicationId,\n}: SidebarProps) {\n const { t } = useCmsTranslation();\n\n return (\n <Box component=\"aside\" sx={SidebarStyles.sxRoot(open)}>\n <Box sx={SidebarStyles.sxNavScroll}>\n <Box\n component=\"nav\"\n aria-label={t.sidebar('navAriaLabel')}\n sx={SidebarStyles.sxNav(open)}>\n <NavSection\n permissions={permissions}\n items={ACCOUNT_NAV_BLOCKS}\n open={open}\n LinkComponent={LinkComponent}\n pathname={pathname}\n t={t}\n baseUrl={baseUrl}\n selectedPublicationId={selectedPublicationId}\n />\n </Box>\n </Box>\n </Box>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\nimport { ITEM_DEFAULT_BG, ITEM_HOVER_BG, MENU_BG } from '../../utils/site-selector';\n\nexport const SiteSelectorMenuStyles = {\n sxTriggerButton: (open: boolean): SxProps<Theme> => ({\n height: 34,\n borderRadius: '8px',\n borderColor: !open ? 'm3.outline' : 'transparent',\n color: 'black',\n bgcolor: open ? ITEM_HOVER_BG : 'transparent',\n textTransform: 'none',\n fontSize: '12px',\n fontWeight: 500,\n lineHeight: 0,\n letterSpacing: '0.007em',\n px: 2,\n py: 0,\n flexShrink: 0,\n '&:hover': {\n borderColor: 'm3.outline',\n bgcolor: open ? ITEM_HOVER_BG : 'action.hover',\n },\n }),\n\n sxTriggerIcon: {\n fontSize: 20,\n } as SxProps<Theme>,\n\n sxMenuPaper: {\n mt: 1,\n bgcolor: MENU_BG,\n borderRadius: 2,\n marginTop: 0,\n boxShadow:\n '0px 1px 3px 0px rgba(0, 0, 0, 0.30), 0px 4px 8px 3px rgba(0, 0, 0, 0.15)',\n width: 'auto',\n minWidth: 380,\n maxWidth: 640,\n py: '1.5rem',\n px: '1.5rem',\n } as SxProps<Theme>,\n\n sxMenuList: {\n p: 0,\n } as SxProps<Theme>,\n\n sxSection: (isLast: boolean): SxProps<Theme> => ({\n mb: isLast ? 0 : 2,\n }),\n\n sxSectionTitle: {\n px: 1,\n mb: 1,\n fontSize: 13,\n fontWeight: 400,\n letterSpacing: 'normal',\n textTransform: 'uppercase',\n color: 'm3.outline',\n } as SxProps<Theme>,\n\n sxSectionGrid: (fullWidth?: boolean): SxProps<Theme> => ({\n display: 'grid',\n gridTemplateColumns: fullWidth ? '1fr' : '1fr 1fr',\n gap: 1,\n }),\n\n sxMenuItem: (selected: boolean): SxProps<Theme> => ({\n width: '16.4rem',\n maxWidth: '100%',\n minHeight: 40,\n height: 54,\n px: 2,\n py: 1,\n padding: '1rem',\n margin: '.65rem',\n borderRadius: '28px',\n bgcolor: selected ? ITEM_HOVER_BG : ITEM_DEFAULT_BG,\n color: 'm3.onSurfaceVariant',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1.5,\n whiteSpace: 'nowrap',\n '&:hover': {\n bgcolor: ITEM_HOVER_BG,\n },\n '&.Mui-selected': {\n bgcolor: ITEM_HOVER_BG,\n '&:hover': {\n bgcolor: ITEM_HOVER_BG,\n },\n },\n }),\n\n sxMenuItemLabel: (selected: boolean): SxProps<Theme> => ({\n flex: 1,\n minWidth: 0,\n fontSize: 14,\n fontWeight: selected ? 600 : 500,\n lineHeight: 1.43,\n color: 'black',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n wordBreak: 'break-word',\n padding: '0 10px 0 5px',\n whiteSpace: 'pre-wrap',\n }),\n\n sxMenuItemLogoWrap: {\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n marginRight: '.5rem',\n } as SxProps<Theme>,\n};\n","'use client';\n\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport { useState } from 'react';\n\nimport type { Publication } from '../../types/publication';\nimport type { SiteSection } from '../../types/site';\nimport { findPublicationLabel } from '../../utils/site-selector';\nimport { SiteSelectorMenuStyles } from './SiteSelectorMenu.styles';\n\nfunction SiteMenuItem({\n publication,\n selected,\n href,\n imageUrl,\n}: {\n publication: Publication;\n selected: boolean;\n href: string;\n imageUrl?: string;\n}) {\n return (\n <a href={href} style={{ textDecoration: 'none', color: 'inherit' }}>\n <MenuItem selected={selected} sx={SiteSelectorMenuStyles.sxMenuItem(selected)}>\n <Typography sx={SiteSelectorMenuStyles.sxMenuItemLabel(selected)}>\n {publication.description}\n </Typography>\n {imageUrl ? (\n <Box sx={SiteSelectorMenuStyles.sxMenuItemLogoWrap}>\n <img\n src={imageUrl}\n alt={publication.description}\n width={90}\n height={20}\n />\n </Box>\n ) : null}\n </MenuItem>\n </a>\n );\n}\n\nexport type SiteSelectorMenuProps = {\n sites: SiteSection[];\n selectedPublicationId?: string;\n getPublicationHref: (publication: Publication) => string;\n resolvePublicationImageUrl?: (imagePath: string) => string;\n};\n\nexport function SiteSelectorMenu({\n sites,\n selectedPublicationId,\n getPublicationHref,\n resolvePublicationImageUrl,\n}: SiteSelectorMenuProps) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n\n const handleOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const labelId = selectedPublicationId ?? '';\n\n return (\n <>\n <Button\n id=\"site-selector-button\"\n aria-controls={open ? 'site-selector-menu' : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n variant=\"outlined\"\n onClick={handleOpen}\n endIcon={\n <KeyboardArrowDownIcon sx={SiteSelectorMenuStyles.sxTriggerIcon} />\n }\n sx={SiteSelectorMenuStyles.sxTriggerButton(open)}>\n {findPublicationLabel(sites, labelId)}\n </Button>\n\n <Menu\n id=\"site-selector-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: {\n sx: SiteSelectorMenuStyles.sxMenuPaper,\n },\n list: {\n 'aria-labelledby': 'site-selector-button',\n disablePadding: true,\n sx: SiteSelectorMenuStyles.sxMenuList,\n },\n }}>\n {sites.map((section, sectionIndex) => (\n <Box\n key={section.title}\n sx={SiteSelectorMenuStyles.sxSection(\n sectionIndex === sites.length - 1,\n )}>\n <Typography sx={SiteSelectorMenuStyles.sxSectionTitle}>\n {section.title}\n </Typography>\n <Box sx={SiteSelectorMenuStyles.sxSectionGrid(section.fullWidth)}>\n {section.publications.map((publication) => (\n <SiteMenuItem\n key={publication.id}\n publication={publication}\n selected={Number(selectedPublicationId) === publication.id}\n href={getPublicationHref(publication)}\n imageUrl={\n publication.imagePath && resolvePublicationImageUrl\n ? resolvePublicationImageUrl(publication.imagePath)\n : undefined\n }\n />\n ))}\n </Box>\n </Box>\n ))}\n </Menu>\n </>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nexport const ICON_SLOT_SIZE = 48;\nexport const HEADER_HEIGHT = 48;\nexport const FRAME_GAP = '15px';\nconst DIVIDER_HEIGHT = 27.6;\n\nexport const TopBarStyles = {\n sxAppBar: {\n bgcolor: 'm3.surfaceContainer',\n color: 'm3.onSurfaceVariant',\n height: HEADER_HEIGHT,\n } as SxProps<Theme>,\n\n sxToolbar: {\n minHeight: HEADER_HEIGHT,\n height: HEADER_HEIGHT,\n pl: '10px',\n pr: 2,\n gap: 1.5,\n } as SxProps<Theme>,\n\n sxMenuButton: {\n width: 40,\n height: 40,\n flexShrink: 0,\n borderRadius: '100px',\n color: 'm3.onSurfaceVariant',\n '&:hover': {\n bgcolor: '#E3E2E6',\n },\n } as SxProps<Theme>,\n\n sxMenuButtonIcon: {\n fontSize: 24,\n } as SxProps<Theme>,\n\n sxLogoBox: {\n width: 200,\n height: 50,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n my: 'auto',\n } as SxProps<Theme>,\n\n sxActionsFrame: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: FRAME_GAP,\n flexShrink: 0,\n } as SxProps<Theme>,\n\n sxIconActionsRow: {\n display: 'flex',\n alignItems: 'center',\n height: ICON_SLOT_SIZE,\n flexShrink: 0,\n } as SxProps<Theme>,\n\n sxActionIcon: {\n width: ICON_SLOT_SIZE,\n height: ICON_SLOT_SIZE,\n color: 'm3.onSurfaceVariant',\n borderRadius: '50%',\n } as SxProps<Theme>,\n\n sxActionIconGlyph: {\n fontSize: 24,\n } as SxProps<Theme>,\n\n sxBadge: {\n '& .MuiBadge-badge': {\n fontSize: 11,\n fontWeight: 500,\n minWidth: 16,\n height: 16,\n px: 0.5,\n top: 10,\n right: 10,\n },\n } as SxProps<Theme>,\n\n sxDivider: {\n width: '1px',\n height: DIVIDER_HEIGHT,\n flexShrink: 0,\n bgcolor: '#C1C6D4',\n } as SxProps<Theme>,\n\n sxProfileButton: {\n p: 0,\n width: 34,\n height: 34,\n flexShrink: 0,\n } as SxProps<Theme>,\n\n sxProfileAvatar: {\n width: 34,\n height: 34,\n border: '1px solid #DEE2E6',\n bgcolor: '#F2F6FC',\n } as SxProps<Theme>,\n\n sxProfileMenuPaper: {\n mt: 1,\n minWidth: 220,\n borderRadius: 2,\n bgcolor: '#ECEDF6',\n py: 0.5,\n boxShadow:\n '0px 1px 3px 0px rgba(0, 0, 0, 0.30), 0px 4px 8px 3px rgba(0, 0, 0, 0.15)',\n } as SxProps<Theme>,\n\n sxProfileMenuItem: {\n py: 1.25,\n px: 2,\n fontSize: 14,\n color: '#191C22',\n '&:hover': {\n bgcolor: 'action.hover',\n },\n } as SxProps<Theme>,\n\n sxProfileMenuListItemIcon: {\n minWidth: 36,\n color: 'm3.onSurfaceVariant',\n '& .MuiSvgIcon-root': {\n fontSize: 22,\n },\n } as SxProps<Theme>,\n\n sxProfileMenuDivider: {\n my: 0.5,\n borderColor: '#C1C6D4',\n } as SxProps<Theme>,\n};\n","'use client';\n\nimport NotificationsNoneOutlinedIcon from '@mui/icons-material/NotificationsNoneOutlined';\nimport Badge from '@mui/material/Badge';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport Menu from '@mui/material/Menu';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { useMemo, useState } from 'react';\n\nimport { getIntlLocaleTag, useCmsTranslation } from '../../i18n';\nimport type { DashboardNotification } from '../../types/notification';\nimport { TopBarStyles } from './TopBar.styles';\n\nexport type NotificationsMenuProps = {\n unreadCount: number;\n notifications: DashboardNotification[];\n};\n\nfunction formatNotificationDate(iso: string, localeTag: string): string {\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return '';\n return date.toLocaleString(localeTag, {\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nexport function NotificationsMenu({\n unreadCount,\n notifications,\n}: NotificationsMenuProps) {\n const { locale, t } = useCmsTranslation();\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n const localeTag = getIntlLocaleTag(locale);\n\n const badgeContent = useMemo(\n () => (unreadCount > 0 ? unreadCount : undefined),\n [unreadCount],\n );\n\n return (\n <>\n <Tooltip title={t.notificationsMenu('title')}>\n <IconButton\n aria-label={t.notificationsMenu('ariaLabel')}\n aria-haspopup=\"true\"\n aria-expanded={open}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={TopBarStyles.sxActionIcon}>\n <Badge badgeContent={badgeContent} color=\"error\" sx={TopBarStyles.sxBadge}>\n <NotificationsNoneOutlinedIcon sx={TopBarStyles.sxActionIconGlyph} />\n </Badge>\n </IconButton>\n </Tooltip>\n\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: {\n sx: {\n width: 360,\n maxHeight: 420,\n mt: 1,\n borderRadius: 2,\n bgcolor: 'm3.surfaceContainerHigh',\n },\n },\n }}>\n <Box sx={{ px: 2, py: 1.5, borderBottom: 1, borderColor: 'm3.outlineVariant' }}>\n <Typography variant=\"subtitle2\" color=\"m3.onSurface\">\n {t.notificationsMenu('title')}\n </Typography>\n {unreadCount > 0 ? (\n <Typography variant=\"caption\" color=\"m3.onSurfaceVariant\">\n {t.notificationsMenu('unreadCount', { count: unreadCount })}\n </Typography>\n ) : null}\n </Box>\n\n {notifications && notifications?.length === 0 ? (\n <Box sx={{ px: 2, py: 3 }}>\n <Typography\n variant=\"body2\"\n color=\"m3.onSurfaceVariant\"\n sx={{ textAlign: 'center' }}>\n {t.notificationsMenu('empty')}\n </Typography>\n </Box>\n ) : (\n <List dense disablePadding sx={{ py: 0.5 }}>\n {notifications && notifications.map((item) => (\n <ListItemButton\n key={item.id}\n component={item.href ? 'a' : 'div'}\n href={item.href}\n onClick={() => setAnchorEl(null)}\n sx={{\n alignItems: 'flex-start',\n py: 1.25,\n bgcolor: item.read ? 'transparent' : 'secondary.light',\n '&:hover': {\n bgcolor: item.read ? 'action.hover' : 'secondary.light',\n },\n }}>\n <ListItemText\n primary={item.title}\n secondary={\n <>\n <Typography\n component=\"span\"\n variant=\"body2\"\n color=\"m3.onSurfaceVariant\"\n sx={{ display: 'block', mt: 0.25 }}>\n {item.message}\n </Typography>\n <Typography\n component=\"span\"\n variant=\"caption\"\n color=\"m3.onSurfaceVariant\"\n sx={{ display: 'block', mt: 0.5 }}>\n {formatNotificationDate(item.createdAt, localeTag)}\n </Typography>\n </>\n }\n slotProps={{\n primary: {\n variant: 'subtitle2',\n color: 'm3.onSurface',\n sx: { fontWeight: item.read ? 400 : 600 },\n },\n }}\n />\n </ListItemButton>\n ))}\n </List>\n )}\n </Menu>\n </>\n );\n}\n","const DEFAULT_CMS_ORIGIN = 'https://dev.cms-medios.com';\n\nexport function resolveCmsOrigin(cmsOrigin?: string): string {\n const base = cmsOrigin?.trim();\n if (!base) return DEFAULT_CMS_ORIGIN;\n return base.replace(/\\/$/, '');\n}\n\nexport function resolveCmsAssetUrl(path: string, cmsOrigin?: string): string {\n if (!path) return '';\n if (path.startsWith('http://') || path.startsWith('https://')) return path;\n const normalized = path.startsWith('/') ? path : `/${path}`;\n return `${resolveCmsOrigin(cmsOrigin)}${normalized}`;\n}\n","import { resolveCmsAssetUrl } from './cms-asset';\nimport type { ProfileGetResponse } from '../types/profile';\n\nconst NO_PICTURE = 'noPicture';\nconst DEFAULT_FALLBACK_AVATAR = '/topbar_profile.png';\n\nexport type ProfileAvatarOptions = {\n cmsOrigin?: string;\n fallbackAvatar?: string;\n};\n\nexport function getProfileAvatarSrc(\n profile: ProfileGetResponse,\n options?: ProfileAvatarOptions,\n): string {\n const { image } = profile;\n const fallback = options?.fallbackAvatar ?? DEFAULT_FALLBACK_AVATAR;\n if (!image || image === NO_PICTURE) return fallback;\n return resolveCmsAssetUrl(image, options?.cmsOrigin);\n}\n\nexport function getProfileDisplayName(profile: ProfileGetResponse): string {\n if (profile.fullName?.trim()) return profile.fullName.trim();\n const parts = [profile.firstName, profile.lastName].filter(Boolean);\n if (parts.length > 0) return parts.join(' ');\n return profile.userName;\n}\n","'use client';\n\nimport EditOutlinedIcon from '@mui/icons-material/EditOutlined';\nimport LogoutOutlinedIcon from '@mui/icons-material/LogoutOutlined';\nimport PersonOutlinedIcon from '@mui/icons-material/PersonOutlined';\nimport type { SvgIconComponent } from '@mui/icons-material';\nimport Avatar from '@mui/material/Avatar';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport { useMemo, useState } from 'react';\n\nimport { useCmsTranslation } from '../../i18n';\nimport type { ProfileMenuMessageKey } from '../../i18n';\nimport type { ProfileGetResponse } from '../../types/profile';\nimport {\n getProfileAvatarSrc,\n getProfileDisplayName,\n type ProfileAvatarOptions,\n} from '../../utils/profile-avatar';\nimport { TopBarStyles } from './TopBar.styles';\n\ntype ProfileMenuItem = {\n id: string;\n labelKey: ProfileMenuMessageKey;\n icon: SvgIconComponent;\n};\n\nfunction ProfileMenuOption({\n label,\n icon: Icon,\n onSelect,\n}: {\n label: string;\n icon: SvgIconComponent;\n onSelect: () => void;\n}) {\n return (\n <MenuItem onClick={onSelect} sx={TopBarStyles.sxProfileMenuItem}>\n <ListItemIcon sx={TopBarStyles.sxProfileMenuListItemIcon}>\n <Icon />\n </ListItemIcon>\n <ListItemText\n primary={label}\n slotProps={{\n primary: { sx: { fontSize: 14, fontWeight: 400, color: '#191C22' } },\n }}\n />\n </MenuItem>\n );\n}\n\nexport type ProfileMenuProps = {\n profile: ProfileGetResponse;\n avatarOptions?: ProfileAvatarOptions;\n};\n\nexport function ProfileMenu({ profile, avatarOptions }: ProfileMenuProps) {\n const { t } = useCmsTranslation();\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const displayName = getProfileDisplayName(profile);\n const avatarSrc = getProfileAvatarSrc(profile, avatarOptions);\n const useLocalImage = avatarSrc.startsWith('/');\n\n const menuItems = useMemo<ProfileMenuItem[]>(\n () => [\n { id: 'profile', labelKey: 'myProfile', icon: PersonOutlinedIcon },\n { id: 'webmaster', labelKey: 'webmasterView', icon: EditOutlinedIcon },\n ],\n [],\n );\n\n const signOffItem = useMemo<ProfileMenuItem>(\n () => ({ id: 'sign-off', labelKey: 'signOff', icon: LogoutOutlinedIcon }),\n [],\n );\n\n const handleClose = () => setAnchorEl(null);\n\n const handleSelect = (_id: string) => {\n handleClose();\n };\n\n return (\n <>\n <IconButton\n id=\"profile-menu-button\"\n aria-label={t.profileMenu('ariaLabel')}\n aria-controls={open ? 'profile-menu' : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n onClick={(e) => setAnchorEl(e.currentTarget)}\n sx={TopBarStyles.sxProfileButton}>\n <Avatar sx={TopBarStyles.sxProfileAvatar}>\n <Box\n component=\"img\"\n src={avatarSrc}\n alt=\"\"\n sx={{ width: '100%', height: '100%', objectFit: 'cover' }}\n {...(useLocalImage ? {} : { crossOrigin: 'anonymous' })}\n />\n </Avatar>\n </IconButton>\n\n <Menu\n id=\"profile-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: { sx: TopBarStyles.sxProfileMenuPaper },\n list: { disablePadding: true },\n }}>\n <Box sx={{ px: 2, py: 1.5, borderBottom: 1, borderColor: 'divider' }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 600, color: '#191C22' }}>\n {displayName}\n </Typography>\n <Typography variant=\"caption\" sx={{ color: '#414752' }}>\n {profile.email}\n </Typography>\n </Box>\n {menuItems.map((item) => (\n <ProfileMenuOption\n key={item.id}\n label={t.profileMenu(item.labelKey)}\n icon={item.icon}\n onSelect={() => handleSelect(item.id)}\n />\n ))}\n <Divider sx={TopBarStyles.sxProfileMenuDivider} />\n <ProfileMenuOption\n label={t.profileMenu(signOffItem.labelKey)}\n icon={signOffItem.icon}\n onSelect={() => handleSelect(signOffItem.id)}\n />\n </Menu>\n </>\n );\n}\n","'use client';\n\nimport AddOutlinedIcon from '@mui/icons-material/AddOutlined';\nimport DevicesOtherOutlinedIcon from '@mui/icons-material/DevicesOtherOutlined';\nimport HelpOutlineOutlinedIcon from '@mui/icons-material/HelpOutlineOutlined';\nimport MenuIcon from '@mui/icons-material/Menu';\nimport type { SvgIconComponent } from '@mui/icons-material';\nimport AppBar from '@mui/material/AppBar';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Toolbar from '@mui/material/Toolbar';\nimport Tooltip from '@mui/material/Tooltip';\nimport type { ReactNode } from 'react';\n\nimport type { DashboardNotification } from '../../types/notification';\nimport type { ProfileGetResponse } from '../../types/profile';\nimport type { Publication } from '../../types/publication';\nimport type { SiteSection } from '../../types/site';\nimport { useCmsTranslation } from '../../i18n';\nimport type { ProfileAvatarOptions } from '../../utils/profile-avatar';\nimport { SiteSelectorMenu } from '../site-selector-menu/SiteSelectorMenu';\nimport { NotificationsMenu } from './NotificationsMenu';\nimport { ProfileMenu } from './ProfileMenu';\nimport { TopBarStyles } from './TopBar.styles';\n\nfunction TopBarDivider() {\n return (\n <Box\n component=\"span\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n sx={TopBarStyles.sxDivider}\n />\n );\n}\n\nfunction TopBarIconAction({\n title,\n icon: Icon,\n}: {\n title: string;\n icon: SvgIconComponent;\n}) {\n return (\n <Tooltip title={title}>\n <IconButton aria-label={title} sx={TopBarStyles.sxActionIcon}>\n <Icon sx={TopBarStyles.sxActionIconGlyph} />\n </IconButton>\n </Tooltip>\n );\n}\n\nexport type TopBarProps = {\n sites: SiteSection[];\n sidebarOpen: boolean;\n onToggleSidebar: () => void;\n notificationUnreadCount: number;\n notifications: DashboardNotification[];\n profile: ProfileGetResponse;\n primaryLogo: ReactNode;\n brandLogo?: ReactNode;\n selectedPublicationId?: string;\n getPublicationHref: (publication: Publication) => string;\n resolvePublicationImageUrl?: (imagePath: string) => string;\n profileAvatarOptions?: ProfileAvatarOptions;\n};\n\nexport function TopBar({\n sites,\n sidebarOpen,\n onToggleSidebar,\n notificationUnreadCount,\n notifications,\n profile,\n primaryLogo,\n brandLogo,\n selectedPublicationId,\n getPublicationHref,\n resolvePublicationImageUrl,\n profileAvatarOptions,\n}: TopBarProps) {\n const { t } = useCmsTranslation();\n\n const trailingActions: { title: string; icon: SvgIconComponent }[] = [\n { title: t.topBar('analytics'), icon: DevicesOtherOutlinedIcon },\n { title: t.topBar('help'), icon: HelpOutlineOutlinedIcon },\n ];\n\n return (\n <AppBar position=\"static\" elevation={0} sx={TopBarStyles.sxAppBar}>\n <Toolbar disableGutters variant=\"dense\" sx={TopBarStyles.sxToolbar}>\n <IconButton\n aria-label={\n sidebarOpen ? t.topBar('closeSidebar') : t.topBar('openSidebar')\n }\n aria-expanded={sidebarOpen}\n onClick={onToggleSidebar}\n sx={TopBarStyles.sxMenuButton}>\n <MenuIcon sx={TopBarStyles.sxMenuButtonIcon} />\n </IconButton>\n\n <Box sx={TopBarStyles.sxLogoBox}>{primaryLogo}</Box>\n\n <Box sx={{ flex: 1 }} />\n\n <Box sx={TopBarStyles.sxActionsFrame}>\n <Box sx={TopBarStyles.sxIconActionsRow}>\n <TopBarIconAction title={t.topBar('new')} icon={AddOutlinedIcon} />\n\n <NotificationsMenu\n unreadCount={notificationUnreadCount}\n notifications={notifications}\n />\n\n {trailingActions.map(({ title, icon }) => (\n <TopBarIconAction key={title} title={title} icon={icon} />\n ))}\n </Box>\n\n <TopBarDivider />\n\n {brandLogo}\n\n <SiteSelectorMenu\n sites={sites}\n selectedPublicationId={selectedPublicationId}\n getPublicationHref={getPublicationHref}\n resolvePublicationImageUrl={resolvePublicationImageUrl}\n />\n\n <TopBarDivider />\n\n <ProfileMenu profile={profile} avatarOptions={profileAvatarOptions} />\n </Box>\n </Toolbar>\n </AppBar>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nexport const AppShellStyles = {\n sxRoot: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n height: '100%',\n minHeight: 0,\n overflow: 'hidden',\n bgcolor: 'm3.surfaceContainer',\n } as SxProps<Theme>,\n\n sxHeader: {\n flexShrink: 0,\n } as SxProps<Theme>,\n\n sxBody: {\n display: 'flex',\n flex: 1,\n minHeight: 0,\n overflow: 'hidden',\n } as SxProps<Theme>,\n\n sxMain: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflowY: 'auto',\n overflowX: 'hidden',\n mt: '10px',\n pt: 1,\n pb: 3,\n pr: 3,\n } as SxProps<Theme>,\n};\n","'use client';\n\nimport Box from '@mui/material/Box';\nimport { useState, type ReactNode } from 'react';\nimport { CmsI18nProvider } from '../../i18n';\nimport type { CmsMessagesOverride, Locale } from '../../i18n';\nimport type { NavItemPermissions } from '../../types/navigation';\nimport type { DashboardNotification } from '../../types/notification';\nimport type { ProfileGetResponse } from '../../types/profile';\nimport type { Publication } from '../../types/publication';\nimport type { SiteSection } from '../../types/site';\nimport type { ProfileAvatarOptions } from '../../utils/profile-avatar';\nimport type { CmsLinkComponent } from '../link';\nimport { DefaultCmsLink } from '../link';\nimport { Sidebar } from '../sidebar/Sidebar';\nimport { TopBar } from '../top-bar/TopBar';\nimport { AppShellStyles } from './AppShell.styles';\n\nexport type AppShellProps = {\n pathname: string;\n sites: SiteSection[];\n children: ReactNode;\n notificationUnreadCount: number;\n notifications: DashboardNotification[];\n profile: ProfileGetResponse;\n primaryLogo: ReactNode;\n brandLogo?: ReactNode;\n selectedPublicationId: string;\n getPublicationHref: (publication: Publication) => string;\n resolvePublicationImageUrl?: (imagePath: string) => string;\n profileAvatarOptions?: ProfileAvatarOptions;\n LinkComponent?: CmsLinkComponent;\n permissions: Array<NavItemPermissions>;\n locale?: Locale | string;\n /** Alias de `locale`. */\n language?: Locale | string;\n messages?: CmsMessagesOverride;\n\n baseUrl: string;\n};\n\nexport function AppShell({\n pathname,\n sites,\n children,\n notificationUnreadCount,\n notifications,\n profile,\n primaryLogo,\n brandLogo,\n selectedPublicationId,\n getPublicationHref,\n resolvePublicationImageUrl,\n profileAvatarOptions,\n LinkComponent = DefaultCmsLink,\n permissions,\n locale,\n language,\n messages,\n baseUrl,\n}: AppShellProps) {\n const [sidebarOpen, setSidebarOpen] = useState(true);\n return (\n <CmsI18nProvider locale={locale} language={language} messages={messages}>\n <Box sx={AppShellStyles.sxRoot}>\n <Box component=\"header\" sx={AppShellStyles.sxHeader}>\n <TopBar\n sites={sites}\n sidebarOpen={sidebarOpen}\n onToggleSidebar={() => setSidebarOpen((prev) => !prev)}\n notificationUnreadCount={notificationUnreadCount}\n notifications={notifications}\n profile={profile}\n primaryLogo={primaryLogo}\n brandLogo={brandLogo}\n selectedPublicationId={selectedPublicationId}\n getPublicationHref={getPublicationHref}\n resolvePublicationImageUrl={resolvePublicationImageUrl}\n profileAvatarOptions={profileAvatarOptions}\n />\n </Box>\n <Box sx={AppShellStyles.sxBody}>\n <Sidebar\n open={sidebarOpen}\n pathname={pathname}\n LinkComponent={LinkComponent}\n permissions={permissions}\n baseUrl={baseUrl}\n selectedPublicationId={selectedPublicationId}\n />\n <Box component=\"main\" sx={AppShellStyles.sxMain}>\n {children}\n </Box>\n </Box>\n </Box>\n </CmsI18nProvider>\n );\n}\n","'use client';\n\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { ThemeProvider } from '@mui/material/styles';\nimport type { ReactNode } from 'react';\n\nimport { createAppTheme } from '../../theme/createAppTheme';\n\nconst theme = createAppTheme();\n\nexport type CmsMuiProviderProps = {\n children: ReactNode;\n};\n\n/** Provider MUI sin integración Next.js (playground Vite u otros frameworks). */\nexport function CmsMuiProvider({ children }: CmsMuiProviderProps) {\n return (\n <ThemeProvider theme={theme} defaultMode=\"light\" storageManager={null}>\n <CssBaseline enableColorScheme />\n {children}\n </ThemeProvider>\n );\n}\n","'use client';\n\nimport Box from '@mui/material/Box';\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { ThemeProvider } from '@mui/material/styles';\nimport { AppRouterCacheProvider } from '@mui/material-nextjs/v16-appRouter';\nimport type { ReactNode } from 'react';\n\nimport { createAppTheme } from '../../theme/createAppTheme';\n\nconst theme = createAppTheme();\n\nexport type NextCmsMuiProviderProps = {\n children: ReactNode;\n};\n\nexport function NextCmsMuiProvider({ children }: NextCmsMuiProviderProps) {\n return (\n <AppRouterCacheProvider options={{ enableCssLayer: true }}>\n <ThemeProvider theme={theme} defaultMode=\"light\" storageManager={null}>\n <CssBaseline enableColorScheme />\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '100dvh',\n }}>\n {children}\n </Box>\n </ThemeProvider>\n </AppRouterCacheProvider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/lib/version.ts","../src/lib/theme/material-theme.json","../src/lib/theme/createAppTheme.ts","../src/lib/theme/buttonStyles.ts","../src/lib/theme/selectStyles.ts","../src/lib/i18n/createTranslator.ts","../src/lib/i18n/messages/en.ts","../src/lib/i18n/messages/es.ts","../src/lib/i18n/messages/pt.ts","../src/lib/i18n/messages/index.ts","../src/lib/i18n/types.ts","../src/lib/i18n/normalizeLocale.ts","../src/lib/i18n/CmsI18nProvider.tsx","../src/lib/i18n/useCmsTranslation.ts","../src/lib/components/link.tsx","../src/lib/components/sidebar/Sidebar.styles.ts","../src/lib/components/sidebar/nav-blocks.ts","../src/lib/components/sidebar/Sidebar.tsx","../src/lib/components/site-selector-menu/SiteSelectorMenu.styles.ts","../src/lib/components/site-selector-menu/SiteSelectorMenu.tsx","../src/lib/components/top-bar/TopBar.styles.ts","../src/lib/components/top-bar/NotificationsMenu.tsx","../src/lib/utils/cms-asset.ts","../src/lib/utils/profile-avatar.ts","../src/lib/components/top-bar/ProfileMenu.tsx","../src/lib/components/top-bar/TopBar.tsx","../src/lib/components/shell/AppShell.styles.ts","../src/lib/components/shell/AppShell.tsx","../src/lib/components/mui-provider/CmsMuiProvider.tsx","../src/lib/components/mui-provider/NextCmsMuiProvider.tsx","../src/lib/components/dropdowns/SimpleDropdown.styles.ts","../src/lib/components/dropdowns/SimpleDropdown.tsx","../src/lib/components/dropdowns/BtnDropdown.styles.ts","../src/lib/components/dropdowns/BtnDropdown.tsx","../src/lib/components/dropdowns/SelectDropdown.tsx"],"sourcesContent":["export const LIB_VERSION = '0.0.0' as const\n","{\n \"description\": \"TYPE: CUSTOM\\nMaterial Theme Builder export 2026-05-08 02:18:51\",\n \"seed\": \"#0067C4\",\n \"coreColors\": {\n \"primary\": \"#0067C4\",\n \"secondary\": \"#D8E2FF\",\n \"tertiary\": \"#B4BEDA\"\n },\n \"extendedColors\": [\n {\n \"name\": \"Bluestack color\",\n \"color\": \"#2962FF\",\n \"description\": \"primario de bluestack\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado publicada\",\n \"color\": \"#00C853\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado Redaccion\",\n \"color\": \"#0091EA\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado frescura\",\n \"color\": \"#30FF5D\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado Programado\",\n \"color\": \"#FF6D00\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado bloqueada\",\n \"color\": \"#D50000\",\n \"description\": \"\",\n \"harmonized\": false\n },\n {\n \"name\": \"Estado borrador\",\n \"color\": \"#FFAB00\",\n \"description\": \"\",\n \"harmonized\": false\n }\n ],\n \"schemes\": {\n \"light\": {\n \"primary\": \"#536dfe\",\n \"surfaceTint\": \"#3E5F90\",\n \"onPrimary\": \"#FFFFFF\",\n \"primaryContainer\": \"#D5E3FF\",\n \"onPrimaryContainer\": \"#254777\",\n \"secondary\": \"#455E91\",\n \"onSecondary\": \"#FFFFFF\",\n \"secondaryContainer\": \"#D8E2FF\",\n \"onSecondaryContainer\": \"#2C4678\",\n \"tertiary\": \"#455E91\",\n \"onTertiary\": \"#FFFFFF\",\n \"tertiaryContainer\": \"#D8E2FF\",\n \"onTertiaryContainer\": \"#2C4678\",\n \"error\": \"#BA1A1A\",\n \"onError\": \"#FFFFFF\",\n \"errorContainer\": \"#FFDAD6\",\n \"onErrorContainer\": \"#93000A\",\n \"background\": \"#F9F9FF\",\n \"onBackground\": \"#191C20\",\n \"surface\": \"#F9F9FF\",\n \"onSurface\": \"#191C20\",\n \"surfaceVariant\": \"#E0E2EC\",\n \"onSurfaceVariant\": \"#43474E\",\n \"outline\": \"#74777F\",\n \"outlineVariant\": \"#C4C6CF\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#2E3035\",\n \"inverseOnSurface\": \"#F0F0F7\",\n \"inversePrimary\": \"#A8C8FF\",\n \"primaryFixed\": \"#D5E3FF\",\n \"onPrimaryFixed\": \"#001B3C\",\n \"primaryFixedDim\": \"#A8C8FF\",\n \"onPrimaryFixedVariant\": \"#254777\",\n \"secondaryFixed\": \"#D8E2FF\",\n \"onSecondaryFixed\": \"#001A42\",\n \"secondaryFixedDim\": \"#AEC6FF\",\n \"onSecondaryFixedVariant\": \"#2C4678\",\n \"tertiaryFixed\": \"#D8E2FF\",\n \"onTertiaryFixed\": \"#001A42\",\n \"tertiaryFixedDim\": \"#AEC6FF\",\n \"onTertiaryFixedVariant\": \"#2C4678\",\n \"surfaceDim\": \"#D9D9E0\",\n \"surfaceBright\": \"#F9F9FF\",\n \"surfaceContainerLowest\": \"#FFFFFF\",\n \"surfaceContainerLow\": \"#F3F3FA\",\n \"surfaceContainer\": \"#EDEDF4\",\n \"surfaceContainerHigh\": \"#E7E8EE\",\n \"surfaceContainerHighest\": \"#E1E2E9\"\n },\n \"light-medium-contrast\": {\n \"primary\": \"#0F3665\",\n \"surfaceTint\": \"#3E5F90\",\n \"onPrimary\": \"#FFFFFF\",\n \"primaryContainer\": \"#4E6EA0\",\n \"onPrimaryContainer\": \"#FFFFFF\",\n \"secondary\": \"#193566\",\n \"onSecondary\": \"#FFFFFF\",\n \"secondaryContainer\": \"#546CA1\",\n \"onSecondaryContainer\": \"#FFFFFF\",\n \"tertiary\": \"#193566\",\n \"onTertiary\": \"#FFFFFF\",\n \"tertiaryContainer\": \"#546CA1\",\n \"onTertiaryContainer\": \"#FFFFFF\",\n \"error\": \"#740006\",\n \"onError\": \"#FFFFFF\",\n \"errorContainer\": \"#CF2C27\",\n \"onErrorContainer\": \"#FFFFFF\",\n \"background\": \"#F9F9FF\",\n \"onBackground\": \"#191C20\",\n \"surface\": \"#F9F9FF\",\n \"onSurface\": \"#0F1116\",\n \"surfaceVariant\": \"#E0E2EC\",\n \"onSurfaceVariant\": \"#33363D\",\n \"outline\": \"#4F525A\",\n \"outlineVariant\": \"#6A6D75\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#2E3035\",\n \"inverseOnSurface\": \"#F0F0F7\",\n \"inversePrimary\": \"#A8C8FF\",\n \"primaryFixed\": \"#4E6EA0\",\n \"onPrimaryFixed\": \"#FFFFFF\",\n \"primaryFixedDim\": \"#345586\",\n \"onPrimaryFixedVariant\": \"#FFFFFF\",\n \"secondaryFixed\": \"#546CA1\",\n \"onSecondaryFixed\": \"#FFFFFF\",\n \"secondaryFixedDim\": \"#3B5487\",\n \"onSecondaryFixedVariant\": \"#FFFFFF\",\n \"tertiaryFixed\": \"#546CA1\",\n \"onTertiaryFixed\": \"#FFFFFF\",\n \"tertiaryFixedDim\": \"#3B5487\",\n \"onTertiaryFixedVariant\": \"#FFFFFF\",\n \"surfaceDim\": \"#C5C6CD\",\n \"surfaceBright\": \"#F9F9FF\",\n \"surfaceContainerLowest\": \"#FFFFFF\",\n \"surfaceContainerLow\": \"#F3F3FA\",\n \"surfaceContainer\": \"#E7E8EE\",\n \"surfaceContainerHigh\": \"#DCDCE3\",\n \"surfaceContainerHighest\": \"#D0D1D8\"\n },\n \"light-high-contrast\": {\n \"primary\": \"#002C5A\",\n \"surfaceTint\": \"#3E5F90\",\n \"onPrimary\": \"#FFFFFF\",\n \"primaryContainer\": \"#274A79\",\n \"onPrimaryContainer\": \"#FFFFFF\",\n \"secondary\": \"#0B2A5B\",\n \"onSecondary\": \"#FFFFFF\",\n \"secondaryContainer\": \"#2E487A\",\n \"onSecondaryContainer\": \"#FFFFFF\",\n \"tertiary\": \"#0C2A5B\",\n \"onTertiary\": \"#FFFFFF\",\n \"tertiaryContainer\": \"#2F487A\",\n \"onTertiaryContainer\": \"#FFFFFF\",\n \"error\": \"#600004\",\n \"onError\": \"#FFFFFF\",\n \"errorContainer\": \"#98000A\",\n \"onErrorContainer\": \"#FFFFFF\",\n \"background\": \"#F9F9FF\",\n \"onBackground\": \"#191C20\",\n \"surface\": \"#F9F9FF\",\n \"onSurface\": \"#000000\",\n \"surfaceVariant\": \"#E0E2EC\",\n \"onSurfaceVariant\": \"#000000\",\n \"outline\": \"#292C33\",\n \"outlineVariant\": \"#464951\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#2E3035\",\n \"inverseOnSurface\": \"#FFFFFF\",\n \"inversePrimary\": \"#A8C8FF\",\n \"primaryFixed\": \"#274A79\",\n \"onPrimaryFixed\": \"#FFFFFF\",\n \"primaryFixedDim\": \"#093361\",\n \"onPrimaryFixedVariant\": \"#FFFFFF\",\n \"secondaryFixed\": \"#2E487A\",\n \"onSecondaryFixed\": \"#FFFFFF\",\n \"secondaryFixedDim\": \"#143162\",\n \"onSecondaryFixedVariant\": \"#FFFFFF\",\n \"tertiaryFixed\": \"#2F487A\",\n \"onTertiaryFixed\": \"#FFFFFF\",\n \"tertiaryFixedDim\": \"#153162\",\n \"onTertiaryFixedVariant\": \"#FFFFFF\",\n \"surfaceDim\": \"#B7B8BF\",\n \"surfaceBright\": \"#F9F9FF\",\n \"surfaceContainerLowest\": \"#FFFFFF\",\n \"surfaceContainerLow\": \"#F0F0F7\",\n \"surfaceContainer\": \"#E1E2E9\",\n \"surfaceContainerHigh\": \"#D3D4DB\",\n \"surfaceContainerHighest\": \"#C5C6CD\"\n },\n \"dark\": {\n \"primary\": \"#A8C8FF\",\n \"surfaceTint\": \"#A8C8FF\",\n \"onPrimary\": \"#05305F\",\n \"primaryContainer\": \"#254777\",\n \"onPrimaryContainer\": \"#D5E3FF\",\n \"secondary\": \"#AEC6FF\",\n \"onSecondary\": \"#112F60\",\n \"secondaryContainer\": \"#2C4678\",\n \"onSecondaryContainer\": \"#D8E2FF\",\n \"tertiary\": \"#AEC6FF\",\n \"onTertiary\": \"#122F60\",\n \"tertiaryContainer\": \"#2C4678\",\n \"onTertiaryContainer\": \"#D8E2FF\",\n \"error\": \"#FFB4AB\",\n \"onError\": \"#690005\",\n \"errorContainer\": \"#93000A\",\n \"onErrorContainer\": \"#FFDAD6\",\n \"background\": \"#111318\",\n \"onBackground\": \"#E1E2E9\",\n \"surface\": \"#111318\",\n \"onSurface\": \"#E1E2E9\",\n \"surfaceVariant\": \"#43474E\",\n \"onSurfaceVariant\": \"#C4C6CF\",\n \"outline\": \"#8E9199\",\n \"outlineVariant\": \"#43474E\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#E1E2E9\",\n \"inverseOnSurface\": \"#2E3035\",\n \"inversePrimary\": \"#3E5F90\",\n \"primaryFixed\": \"#D5E3FF\",\n \"onPrimaryFixed\": \"#001B3C\",\n \"primaryFixedDim\": \"#A8C8FF\",\n \"onPrimaryFixedVariant\": \"#254777\",\n \"secondaryFixed\": \"#D8E2FF\",\n \"onSecondaryFixed\": \"#001A42\",\n \"secondaryFixedDim\": \"#AEC6FF\",\n \"onSecondaryFixedVariant\": \"#2C4678\",\n \"tertiaryFixed\": \"#D8E2FF\",\n \"onTertiaryFixed\": \"#001A42\",\n \"tertiaryFixedDim\": \"#AEC6FF\",\n \"onTertiaryFixedVariant\": \"#2C4678\",\n \"surfaceDim\": \"#111318\",\n \"surfaceBright\": \"#37393E\",\n \"surfaceContainerLowest\": \"#0C0E13\",\n \"surfaceContainerLow\": \"#191C20\",\n \"surfaceContainer\": \"#1D2024\",\n \"surfaceContainerHigh\": \"#282A2F\",\n \"surfaceContainerHighest\": \"#33353A\"\n },\n \"dark-medium-contrast\": {\n \"primary\": \"#CCDDFF\",\n \"surfaceTint\": \"#A8C8FF\",\n \"onPrimary\": \"#00254E\",\n \"primaryContainer\": \"#7292C6\",\n \"onPrimaryContainer\": \"#000000\",\n \"secondary\": \"#CFDCFF\",\n \"onSecondary\": \"#012455\",\n \"secondaryContainer\": \"#7790C7\",\n \"onSecondaryContainer\": \"#000000\",\n \"tertiary\": \"#CFDCFF\",\n \"onTertiary\": \"#022455\",\n \"tertiaryContainer\": \"#7890C7\",\n \"onTertiaryContainer\": \"#000000\",\n \"error\": \"#FFD2CC\",\n \"onError\": \"#540003\",\n \"errorContainer\": \"#FF5449\",\n \"onErrorContainer\": \"#000000\",\n \"background\": \"#111318\",\n \"onBackground\": \"#E1E2E9\",\n \"surface\": \"#111318\",\n \"onSurface\": \"#FFFFFF\",\n \"surfaceVariant\": \"#43474E\",\n \"onSurfaceVariant\": \"#DADCE5\",\n \"outline\": \"#AFB2BB\",\n \"outlineVariant\": \"#8D9099\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#E1E2E9\",\n \"inverseOnSurface\": \"#282A2F\",\n \"inversePrimary\": \"#264878\",\n \"primaryFixed\": \"#D5E3FF\",\n \"onPrimaryFixed\": \"#001129\",\n \"primaryFixedDim\": \"#A8C8FF\",\n \"onPrimaryFixedVariant\": \"#0F3665\",\n \"secondaryFixed\": \"#D8E2FF\",\n \"onSecondaryFixed\": \"#00102E\",\n \"secondaryFixedDim\": \"#AEC6FF\",\n \"onSecondaryFixedVariant\": \"#193566\",\n \"tertiaryFixed\": \"#D8E2FF\",\n \"onTertiaryFixed\": \"#00102E\",\n \"tertiaryFixedDim\": \"#AEC6FF\",\n \"onTertiaryFixedVariant\": \"#193566\",\n \"surfaceDim\": \"#111318\",\n \"surfaceBright\": \"#42444A\",\n \"surfaceContainerLowest\": \"#06070C\",\n \"surfaceContainerLow\": \"#1B1E22\",\n \"surfaceContainer\": \"#26282D\",\n \"surfaceContainerHigh\": \"#303338\",\n \"surfaceContainerHighest\": \"#3B3E43\"\n },\n \"dark-high-contrast\": {\n \"primary\": \"#EAF0FF\",\n \"surfaceTint\": \"#A8C8FF\",\n \"onPrimary\": \"#000000\",\n \"primaryContainer\": \"#A4C4FB\",\n \"onPrimaryContainer\": \"#000B1F\",\n \"secondary\": \"#ECEFFF\",\n \"onSecondary\": \"#000000\",\n \"secondaryContainer\": \"#A9C2FC\",\n \"onSecondaryContainer\": \"#000A23\",\n \"tertiary\": \"#ECEFFF\",\n \"onTertiary\": \"#000000\",\n \"tertiaryContainer\": \"#A9C2FC\",\n \"onTertiaryContainer\": \"#000A23\",\n \"error\": \"#FFECE9\",\n \"onError\": \"#000000\",\n \"errorContainer\": \"#FFAEA4\",\n \"onErrorContainer\": \"#220001\",\n \"background\": \"#111318\",\n \"onBackground\": \"#E1E2E9\",\n \"surface\": \"#111318\",\n \"onSurface\": \"#FFFFFF\",\n \"surfaceVariant\": \"#43474E\",\n \"onSurfaceVariant\": \"#FFFFFF\",\n \"outline\": \"#EEF0F9\",\n \"outlineVariant\": \"#C0C2CC\",\n \"shadow\": \"#000000\",\n \"scrim\": \"#000000\",\n \"inverseSurface\": \"#E1E2E9\",\n \"inverseOnSurface\": \"#000000\",\n \"inversePrimary\": \"#264878\",\n \"primaryFixed\": \"#D5E3FF\",\n \"onPrimaryFixed\": \"#000000\",\n \"primaryFixedDim\": \"#A8C8FF\",\n \"onPrimaryFixedVariant\": \"#001129\",\n \"secondaryFixed\": \"#D8E2FF\",\n \"onSecondaryFixed\": \"#000000\",\n \"secondaryFixedDim\": \"#AEC6FF\",\n \"onSecondaryFixedVariant\": \"#00102E\",\n \"tertiaryFixed\": \"#D8E2FF\",\n \"onTertiaryFixed\": \"#000000\",\n \"tertiaryFixedDim\": \"#AEC6FF\",\n \"onTertiaryFixedVariant\": \"#00102E\",\n \"surfaceDim\": \"#111318\",\n \"surfaceBright\": \"#4E5055\",\n \"surfaceContainerLowest\": \"#000000\",\n \"surfaceContainerLow\": \"#1D2024\",\n \"surfaceContainer\": \"#2E3035\",\n \"surfaceContainerHigh\": \"#393B41\",\n \"surfaceContainerHighest\": \"#45474C\"\n }\n },\n \"palettes\": {\n \"primary\": {\n \"0\": \"#000000\",\n \"5\": \"#001129\",\n \"10\": \"#001B3C\",\n \"15\": \"#00264E\",\n \"20\": \"#003061\",\n \"25\": \"#003B75\",\n \"30\": \"#004689\",\n \"35\": \"#00529E\",\n \"40\": \"#005EB3\",\n \"50\": \"#2777D5\",\n \"60\": \"#4A91F1\",\n \"70\": \"#76ACFF\",\n \"80\": \"#A8C8FF\",\n \"90\": \"#D5E3FF\",\n \"95\": \"#ECF1FF\",\n \"98\": \"#F9F9FF\",\n \"99\": \"#FDFBFF\",\n \"100\": \"#FFFFFF\"\n },\n \"secondary\": {\n \"0\": \"#000000\",\n \"5\": \"#061025\",\n \"10\": \"#111B30\",\n \"15\": \"#1B263B\",\n \"20\": \"#263046\",\n \"25\": \"#313B52\",\n \"30\": \"#3D475E\",\n \"35\": \"#48526A\",\n \"40\": \"#545E76\",\n \"50\": \"#6D7790\",\n \"60\": \"#8690AB\",\n \"70\": \"#A1ABC6\",\n \"80\": \"#BCC6E2\",\n \"90\": \"#D8E2FF\",\n \"95\": \"#EDF0FF\",\n \"98\": \"#F9F9FF\",\n \"99\": \"#FEFBFF\",\n \"100\": \"#FFFFFF\"\n },\n \"tertiary\": {\n \"0\": \"#000000\",\n \"5\": \"#061025\",\n \"10\": \"#111B30\",\n \"15\": \"#1B253B\",\n \"20\": \"#263046\",\n \"25\": \"#313B52\",\n \"30\": \"#3D475E\",\n \"35\": \"#48526A\",\n \"40\": \"#545E77\",\n \"50\": \"#6D7790\",\n \"60\": \"#8690AB\",\n \"70\": \"#A1ABC6\",\n \"80\": \"#BCC6E2\",\n \"90\": \"#D8E2FF\",\n \"95\": \"#EDF0FF\",\n \"98\": \"#FAF9FF\",\n \"99\": \"#FEFBFF\",\n \"100\": \"#FFFFFF\"\n },\n \"neutral\": {\n \"0\": \"#000000\",\n \"5\": \"#101114\",\n \"10\": \"#1A1C1E\",\n \"15\": \"#252629\",\n \"20\": \"#2F3033\",\n \"25\": \"#3A3B3E\",\n \"30\": \"#46474A\",\n \"35\": \"#525256\",\n \"40\": \"#5E5E62\",\n \"50\": \"#76777A\",\n \"60\": \"#909094\",\n \"70\": \"#ABABAF\",\n \"80\": \"#C7C6CA\",\n \"90\": \"#E3E2E6\",\n \"95\": \"#F1F0F4\",\n \"98\": \"#FAF9FD\",\n \"99\": \"#FDFBFF\",\n \"100\": \"#FFFFFF\"\n },\n \"neutral-variant\": {\n \"0\": \"#000000\",\n \"5\": \"#0D1117\",\n \"10\": \"#181C22\",\n \"15\": \"#22262D\",\n \"20\": \"#2D3038\",\n \"25\": \"#383B43\",\n \"30\": \"#43474E\",\n \"35\": \"#4F525A\",\n \"40\": \"#5B5E66\",\n \"50\": \"#74777F\",\n \"60\": \"#8E9199\",\n \"70\": \"#A8ABB4\",\n \"80\": \"#C4C6CF\",\n \"90\": \"#E0E2EC\",\n \"95\": \"#EEF0FA\",\n \"98\": \"#F9F9FF\",\n \"99\": \"#FDFBFF\",\n \"100\": \"#FFFFFF\"\n }\n }\n}\n","import { alpha, createTheme } from '@mui/material/styles';\nimport type { PaletteMode, PaletteOptions } from '@mui/material/styles';\n\nimport materialThemeSource from './material-theme.json';\n\ntype SchemeDef = (typeof materialThemeSource)['schemes']['light'];\n\nfunction extendedColor(name: string): string | undefined {\n return materialThemeSource.extendedColors.find((e) => e.name === name)?.color;\n}\n\nfunction neutralToGrey(p: (typeof materialThemeSource)['palettes']['neutral']) {\n return {\n 50: p['98'],\n 100: p['95'],\n 200: p['90'],\n 300: p['80'],\n 400: p['70'],\n 500: p['60'],\n 600: p['50'],\n 700: p['40'],\n 800: p['30'],\n 900: p['20'],\n A100: p['90'],\n A200: p['80'],\n A400: p['60'],\n A700: p['40'],\n };\n}\n\nfunction schemeToPalette(mode: PaletteMode, scheme: SchemeDef): PaletteOptions {\n const onSurfaceToken = scheme.onSurface;\n\n return {\n mode,\n primary: {\n main: scheme.primary,\n light: scheme.primaryContainer,\n dark: scheme.onPrimaryContainer,\n contrastText: scheme.onPrimary,\n },\n secondary: {\n main: scheme.secondary,\n light: '#D8E2FF',\n dark: scheme.onSecondaryContainer,\n contrastText: scheme.onSecondary,\n },\n tertiary: {\n main: scheme.tertiary,\n light: scheme.tertiaryContainer,\n dark: scheme.onTertiaryContainer,\n contrastText: scheme.onTertiary,\n },\n error: {\n main: scheme.error,\n light: scheme.errorContainer,\n dark: scheme.onErrorContainer,\n contrastText: scheme.onError,\n },\n warning: {\n main: extendedColor('Estado Programado') ?? '#FF6D00',\n light: '#FF9E40',\n dark: '#C25400',\n contrastText: '#FFFFFF',\n },\n info: {\n main: extendedColor('Estado Redaccion') ?? '#0091EA',\n light: '#64B5F6',\n dark: '#0064B7',\n contrastText: '#FFFFFF',\n },\n success: {\n main: extendedColor('Estado publicada') ?? '#00C853',\n light: '#69F0AE',\n dark: '#009624',\n contrastText: '#FFFFFF',\n },\n brand: {\n main: extendedColor('Bluestack color') ?? '#2962FF',\n },\n text: {\n primary: scheme.onSurface,\n secondary: scheme.onSurfaceVariant,\n disabled: alpha(scheme.onSurface, 0.38),\n },\n divider: scheme.outlineVariant,\n background: {\n default: scheme.background,\n paper: scheme.surfaceContainerLowest,\n },\n action: {\n active: alpha(onSurfaceToken, 0.56),\n hover: alpha(onSurfaceToken, mode === 'light' ? 0.04 : 0.08),\n selected: alpha(scheme.primary, 0.12),\n focus: alpha(scheme.primary, 0.12),\n disabled: alpha(onSurfaceToken, 0.26),\n disabledBackground: alpha(onSurfaceToken, 0.12),\n },\n common: {\n black: scheme.shadow,\n white: '#FFFFFF',\n },\n grey: neutralToGrey(materialThemeSource.palettes.neutral),\n m3: {\n surfaceTint: scheme.surfaceTint,\n surfaceDim: scheme.surfaceDim,\n surfaceBright: scheme.surfaceBright,\n surface: scheme.surface,\n surfaceContainerLowest: scheme.surfaceContainerLowest,\n surfaceContainerLow: scheme.surfaceContainerLow,\n surfaceContainer: scheme.surfaceContainer,\n surfaceContainerHigh: scheme.surfaceContainerHigh,\n surfaceContainerHighest: scheme.surfaceContainerHighest,\n outline: scheme.outline,\n outlineVariant: scheme.outlineVariant,\n inverseSurface: scheme.inverseSurface,\n inverseOnSurface: scheme.inverseOnSurface,\n inversePrimary: scheme.inversePrimary,\n onBackground: scheme.onBackground,\n surfaceVariant: scheme.surfaceVariant,\n onSurfaceVariant: scheme.onSurfaceVariant,\n },\n };\n}\n\nexport function createAppTheme() {\n const lightPalette = schemeToPalette(\n 'light',\n materialThemeSource.schemes.light,\n );\n const darkPalette = schemeToPalette('dark', materialThemeSource.schemes.dark);\n\n return createTheme({\n cssVariables: {\n colorSchemeSelector: 'data',\n },\n defaultColorScheme: 'light',\n colorSchemes: {\n light: { palette: lightPalette },\n dark: { palette: darkPalette },\n },\n typography: {\n fontFamily: ['\"Roboto\"', '\"Helvetica\"', '\"Arial\"', 'sans-serif'].join(\n ',',\n ),\n },\n });\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nimport { cmsColors, radii, shadows, sizes } from './tokens';\n\n/**\n * Estilos de botón unificados de la librería.\n *\n * Define las dos variantes de botón pill del CMS y las piezas reutilizables\n * (superficie + hover) para que cualquier componente las componga sin repetir\n * colores ni medidas. `BtnDropdown` los usa para su botón principal y su flecha;\n * `sxPillButton` sirve para cualquier botón pill suelto.\n */\n\n/** Variante visual de los botones de la lib. */\nexport type CmsButtonVariant = 'cta' | 'white';\n\n/** Fondo, color de texto y borde según la variante (compartido por todas las piezas). */\nexport function cmsButtonSurface(variant: CmsButtonVariant): SxProps<Theme> {\n if (variant === 'white') {\n return {\n bgcolor: 'm3.surfaceContainerLowest',\n color: cmsColors.whiteBtnText,\n border: '1px solid',\n borderColor: cmsColors.whiteBtnBorder,\n };\n }\n return {\n bgcolor: cmsColors.primary,\n color: cmsColors.white,\n border: 'none',\n borderColor: 'transparent',\n };\n}\n\n/** Color de fondo en hover según la variante. */\nexport function cmsButtonHoverBg(variant: CmsButtonVariant): string {\n return variant === 'cta' ? cmsColors.primaryHover : 'action.hover';\n}\n\n/** Borde divisor (p. ej. entre botón principal y flecha de un split button). */\nexport function cmsButtonDivider(variant: CmsButtonVariant): string {\n return variant === 'white'\n ? cmsColors.whiteBtnBorder\n : 'rgba(255, 255, 255, 0.28)';\n}\n\n/** Botón pill completo y autónomo. Reutilizable en cualquier CTA de la lib. */\nexport function sxPillButton(variant: CmsButtonVariant = 'cta'): SxProps<Theme> {\n return {\n height: sizes.buttonHeight,\n px: '20px',\n borderRadius: radii.pill,\n textTransform: 'none',\n fontSize: 14,\n fontWeight: 500,\n minWidth: 0,\n gap: 1,\n boxShadow: shadows.button,\n ...(cmsButtonSurface(variant) as object),\n '& .MuiSvgIcon-root': { fontSize: 18 },\n '&:hover': {\n boxShadow: shadows.button,\n bgcolor: cmsButtonHoverBg(variant),\n },\n '&.Mui-disabled': {\n bgcolor:\n variant === 'white'\n ? 'm3.surfaceContainerLowest'\n : cmsColors.primaryDisabled,\n color: 'action.disabled',\n },\n };\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nimport { cmsColors, radii, shadows, sizes } from './tokens';\n\n/**\n * Estilos del `SelectDropdown` — el selector tipo \"vista/filtro\" del CMS\n * (mismo patrón visual que el dropdown \"Últimas Noticias\" del diseño).\n *\n * Vive en `theme/` (no junto al componente) porque es parte del set de estilos\n * compartidos y reutilizables: cualquier proyecto que consuma la librería puede\n * importarlo para construir un trigger/menú coherente con el sistema.\n *\n * Reglas de color (todas con variables de `tokens.ts`):\n * - Trigger por defecto: borde `controlBorder` (#727784), texto `controlText`\n * (#000) en negrita, fondo transparente; hover → `controlHoverBg` (#F9F9FF).\n * - Trigger activo (abierto) o resaltado (valor activo): fondo `secondary`\n * (#D8E2FF), sin borde.\n * - Opción del menú: hover → `secondaryHover` (#E1E2EA); seleccionada →\n * fondo `secondary` (#D8E2FF). El menú es full-bleed (sin padding lateral ni\n * radio en los ítems): el resaltado llega de borde a borde.\n */\nexport const SelectStyles = {\n /**\n * Disparador outlined con label + chevron. Se rellena con `secondary` cuando\n * está abierto (`open`) o resaltado (`highlighted`, valor activo).\n */\n sxTrigger: (highlighted: boolean, open: boolean): SxProps<Theme> => {\n const filled = highlighted || open;\n return {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '10px',\n height: sizes.buttonHeight,\n pl: '16px',\n pr: '10px',\n borderRadius: radii.md,\n textTransform: 'none',\n fontSize: 14,\n // La negrita va en el input principal, no en la opción activa del menú.\n fontWeight: 600,\n minWidth: 0,\n border: '1px solid',\n color: cmsColors.controlText,\n bgcolor: filled ? cmsColors.secondary : 'transparent',\n borderColor: filled ? 'transparent' : cmsColors.controlBorder,\n '&:hover': {\n bgcolor: filled ? cmsColors.secondary : cmsColors.controlHoverBg,\n borderColor: filled ? 'transparent' : cmsColors.controlBorder,\n },\n '& .sel-lead': {\n display: 'inline-flex',\n color: 'inherit',\n },\n '& .sel-lead .MuiSvgIcon-root': { fontSize: 18 },\n '& .sel-chevron': {\n display: 'inline-flex',\n color: 'm3.onSurfaceVariant',\n transition: 'transform 0.18s ease',\n transform: open ? 'rotate(180deg)' : 'none',\n },\n '& .sel-chevron .MuiSvgIcon-root': { fontSize: 18 },\n };\n },\n\n /** Paper sin padding lateral: los ítems llegan de borde a borde. */\n sxMenuPaper: (minWidth: number | string): SxProps<Theme> => ({\n mt: 0.75,\n py: '8px',\n px: 0,\n minWidth,\n borderRadius: radii.lg,\n bgcolor: 'm3.surfaceContainerLowest',\n border: '1px solid',\n borderColor: 'm3.outlineVariant',\n boxShadow: shadows.menuSoft,\n overflow: 'hidden',\n }),\n\n sxList: {\n p: 0,\n display: 'flex',\n flexDirection: 'column',\n } as SxProps<Theme>,\n\n /**\n * Ítem full-bleed (sin radio): hover → `secondaryHover`; activo → `secondary`.\n * Peso normal incluso en la opción activa (la negrita vive en el trigger).\n */\n sxItem: (selected: boolean): SxProps<Theme> => ({\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n px: '16px',\n py: '10px',\n borderRadius: 0,\n fontSize: 14,\n fontWeight: 400,\n color: cmsColors.controlText,\n bgcolor: selected ? cmsColors.secondary : 'transparent',\n '& .MuiListItemIcon-root': {\n minWidth: 0,\n color: 'm3.onSurfaceVariant',\n },\n '& .MuiSvgIcon-root': { fontSize: 18 },\n '&:hover': {\n bgcolor: cmsColors.secondaryHover,\n },\n '&.Mui-selected': {\n bgcolor: cmsColors.secondary,\n '&:hover': { bgcolor: cmsColors.secondaryHover },\n },\n }),\n};\n","import type {\n CmsMessages,\n NavigationModule,\n NotificationsMenuMessageKey,\n ProfileMenuMessageKey,\n SidebarMessageKey,\n TopBarMessageKey,\n} from './types';\n\nexport type CmsTranslator = {\n messages: CmsMessages;\n navigation: (module: NavigationModule | string) => string;\n sidebar: (key: SidebarMessageKey) => string;\n topBar: (key: TopBarMessageKey) => string;\n profileMenu: (key: ProfileMenuMessageKey) => string;\n notificationsMenu: (\n key: NotificationsMenuMessageKey,\n params?: { count?: number },\n ) => string;\n};\n\nfunction interpolate(template: string, params?: Record<string, string | number>): string {\n if (!params) return template;\n return template.replace(/\\{(\\w+)\\}/g, (_, key: string) => {\n const value = params[key];\n return value === undefined ? `{${key}}` : String(value);\n });\n}\n\nexport function createTranslator(messages: CmsMessages): CmsTranslator {\n const navigationLookup = messages.navigation as Record<string, string>;\n\n return {\n messages,\n navigation: (module) => navigationLookup[module] ?? module,\n sidebar: (key) => messages.sidebar[key],\n topBar: (key) => messages.topBar[key],\n profileMenu: (key) => messages.profileMenu[key],\n notificationsMenu: (key, params) =>\n interpolate(messages.notificationsMenu[key], params),\n };\n}\n","export const enMessages = {\n navigation: {\n COMMENTS: 'Comments',\n POLLS: 'Polls',\n MEDIA: 'Media',\n AUDIOS: 'Audio',\n IMAGES: 'Images',\n PLAYLISTS: 'Playlist',\n VIDEOS: 'Videos',\n NEWS: 'News',\n PLANNING: 'Planning',\n ANALYTICS: 'Analytics',\n TAGS: 'Tags',\n TRIVIAS: 'Trivia',\n OTHERS: 'Other',\n NEWSWIRES: 'News Wires',\n EVENTS: 'Events',\n PAGES: 'Pages',\n FEEDS: 'Feed',\n PERSONS: 'People',\n CONTRIBUTIONS: 'Contributions',\n RECIPES: 'Recipes',\n POSTS: 'Posts',\n BANNERS: 'Banners',\n BLOCKS: 'Blocks',\n MENUS: 'Menu',\n TOPICS: 'Topics',\n ADVANCEDQUERYS: 'Advanced search',\n IMPORTS: 'Imports',\n NEWSLETTERS: 'Newsletters',\n NOTIFICATIONS: 'Notifications',\n PAYMENTS: 'Payments',\n PLANS: 'Plans',\n REPORTS: 'Reports',\n SECTIONS: 'Sections',\n TWITTERS: 'Twitter Feeds',\n USERS: 'Users',\n ZONES: 'Zones',\n IA: 'IA',\n },\n sidebar: {\n navAriaLabel: 'Main navigation',\n collapse: 'Collapse',\n expand: 'Expand',\n newBadge: 'New',\n },\n topBar: {\n openSidebar: 'Open sidebar menu',\n closeSidebar: 'Close sidebar menu',\n new: 'New',\n language: 'Language',\n analytics: 'Analytics',\n help: 'Help',\n },\n profileMenu: {\n ariaLabel: 'My profile',\n myProfile: 'My Profile',\n webmasterView: 'Webmaster View',\n signOff: 'Sign off',\n },\n notificationsMenu: {\n title: 'Notifications',\n unreadCount: '{count} unread',\n empty: 'No notifications',\n ariaLabel: 'Notifications',\n },\n} as const;\n","import type { CmsMessages } from '../types';\n\nexport const esMessages = {\n navigation: {\n COMMENTS: 'Comentarios',\n POLLS: 'Encuestas',\n MEDIA: 'Media',\n AUDIOS: 'Audio',\n IMAGES: 'Imágenes',\n PLAYLISTS: 'Playlist',\n VIDEOS: 'Videos',\n NEWS: 'Noticias',\n PLANNING: 'Planificación',\n ANALYTICS: 'Analíticas',\n TAGS: 'Tags',\n TRIVIAS: 'Trivias',\n OTHERS: 'Otros',\n NEWSWIRES: 'News Wires',\n EVENTS: 'Eventos',\n PAGES: 'Páginas',\n FEEDS: 'Feed',\n PERSONS: 'Personas',\n CONTRIBUTIONS: 'Contribuciones',\n RECIPES: 'Recetas',\n POSTS: 'Posts',\n BANNERS: 'Banners',\n BLOCKS: 'Bloques',\n MENUS: 'Menú',\n TOPICS: 'Temas',\n ADVANCEDQUERYS: 'Búsqueda avanzada',\n IMPORTS: 'Importaciones',\n NEWSLETTERS: 'Newsletters',\n NOTIFICATIONS: 'Notificaciones',\n PAYMENTS: 'Pagos',\n PLANS: 'Planes',\n REPORTS: 'Reportes',\n SECTIONS: 'Secciones',\n TWITTERS: 'Twitter Feeds',\n USERS: 'Usuarios',\n ZONES: 'Zonas',\n IA: 'IA',\n },\n sidebar: {\n navAriaLabel: 'Principal',\n collapse: 'Contraer',\n expand: 'Expandir',\n newBadge: 'Nuevo',\n },\n topBar: {\n openSidebar: 'Abrir menú lateral',\n closeSidebar: 'Cerrar menú lateral',\n new: 'Nuevo',\n language: 'Idioma',\n analytics: 'Analíticas',\n help: 'Ayuda',\n },\n profileMenu: {\n ariaLabel: 'Mi perfil',\n myProfile: 'Mi perfil',\n webmasterView: 'Vista Webmaster',\n signOff: 'Cerrar sesión',\n },\n notificationsMenu: {\n title: 'Notificaciones',\n unreadCount: '{count} sin leer',\n empty: 'No hay notificaciones',\n ariaLabel: 'Notificaciones',\n },\n} satisfies CmsMessages;\n","import type { CmsMessages } from '../types';\n\nexport const ptMessages = {\n navigation: {\n COMMENTS: 'Comentários',\n POLLS: 'Enquetes',\n MEDIA: 'Mídia',\n AUDIOS: 'Áudio',\n IMAGES: 'Imagens',\n PLAYLISTS: 'Playlist',\n VIDEOS: 'Vídeos',\n NEWS: 'Notícias',\n PLANNING: 'Planejamento',\n ANALYTICS: 'Análises',\n TAGS: 'Tags',\n TRIVIAS: 'Trivias',\n OTHERS: 'Outros',\n NEWSWIRES: 'News Wires',\n EVENTS: 'Eventos',\n PAGES: 'Páginas',\n FEEDS: 'Feed',\n PERSONS: 'Pessoas',\n CONTRIBUTIONS: 'Contribuições',\n RECIPES: 'Receitas',\n POSTS: 'Posts',\n BANNERS: 'Banners',\n BLOCKS: 'Blocos',\n MENUS: 'Menu',\n TOPICS: 'Tópicos',\n ADVANCEDQUERYS: 'Busca avançada',\n IMPORTS: 'Importações',\n NEWSLETTERS: 'Newsletters',\n NOTIFICATIONS: 'Notificações',\n PAYMENTS: 'Pagamentos',\n PLANS: 'Planos',\n REPORTS: 'Relatórios',\n SECTIONS: 'Seções',\n TWITTERS: 'Twitter Feeds',\n USERS: 'Usuários',\n ZONES: 'Zonas',\n IA: 'IA',\n },\n sidebar: {\n navAriaLabel: 'Principal',\n collapse: 'Recolher',\n expand: 'Expandir',\n newBadge: 'Novo',\n },\n topBar: {\n openSidebar: 'Abrir menu lateral',\n closeSidebar: 'Fechar menu lateral',\n new: 'Novo',\n language: 'Idioma',\n analytics: 'Análises',\n help: 'Ajuda',\n },\n profileMenu: {\n ariaLabel: 'Meu perfil',\n myProfile: 'Meu perfil',\n webmasterView: 'Visão Webmaster',\n signOff: 'Sair',\n },\n notificationsMenu: {\n title: 'Notificações',\n unreadCount: '{count} não lidas',\n empty: 'Nenhuma notificação',\n ariaLabel: 'Notificações',\n },\n} satisfies CmsMessages;\n","import type { CmsMessages, CmsMessagesOverride, Locale, LocaleCatalog } from '../types';\nimport { enMessages } from './en';\nimport { esMessages } from './es';\nimport { ptMessages } from './pt';\n\nexport { enMessages, esMessages, ptMessages };\n\nexport const defaultLocaleCatalog: LocaleCatalog = {\n en: enMessages,\n es: esMessages,\n pt: ptMessages,\n};\n\nfunction mergeNamespace<T extends Record<string, string>>(\n base: T,\n override?: Partial<T>,\n): T {\n if (!override) return base;\n return { ...base, ...override };\n}\n\n/** Deep-merge custom overrides on top of the locale catalog entry. */\nexport function mergeMessages(\n locale: Locale,\n catalog: LocaleCatalog,\n overrides?: CmsMessagesOverride,\n): CmsMessages {\n const base = catalog[locale];\n const fallback = catalog.en;\n\n return {\n navigation: mergeNamespace(\n { ...fallback.navigation, ...base.navigation },\n overrides?.navigation,\n ),\n sidebar: mergeNamespace(\n { ...fallback.sidebar, ...base.sidebar },\n overrides?.sidebar,\n ),\n topBar: mergeNamespace({ ...fallback.topBar, ...base.topBar }, overrides?.topBar),\n profileMenu: mergeNamespace(\n { ...fallback.profileMenu, ...base.profileMenu },\n overrides?.profileMenu,\n ),\n notificationsMenu: mergeNamespace(\n { ...fallback.notificationsMenu, ...base.notificationsMenu },\n overrides?.notificationsMenu,\n ),\n };\n}\n","import type { enMessages } from './messages/en';\n\nexport const SUPPORTED_LOCALES = ['es', 'en', 'pt'] as const;\n\nexport type Locale = (typeof SUPPORTED_LOCALES)[number];\n\nexport const DEFAULT_LOCALE: Locale = 'en';\n\ntype DeepStringMap<T> = {\n [K in keyof T]: T[K] extends Record<string, unknown>\n ? { [K2 in keyof T[K]]: string }\n : string;\n};\n\n/** Message tree shape; values are strings, keys are inferred from `enMessages`. */\nexport type CmsMessages = DeepStringMap<typeof enMessages>;\n\nexport type NavigationModule = keyof CmsMessages['navigation'];\n\nexport type SidebarMessageKey = keyof CmsMessages['sidebar'];\n\nexport type TopBarMessageKey = keyof CmsMessages['topBar'];\n\nexport type ProfileMenuMessageKey = keyof CmsMessages['profileMenu'];\n\nexport type NotificationsMenuMessageKey = keyof CmsMessages['notificationsMenu'];\n\n/** Partial override tree; missing keys fall back to the active locale, then `en`. */\nexport type CmsMessagesOverride = {\n [Namespace in keyof CmsMessages]?: Partial<CmsMessages[Namespace]>;\n};\n\nexport type LocaleCatalog = Record<Locale, CmsMessages>;\n","import { DEFAULT_LOCALE, SUPPORTED_LOCALES, type Locale } from './types';\n\n/** Normaliza códigos BCP 47 o variantes (`es-MX`, `pt_BR`) al `Locale` soportado. */\nexport function normalizeLocale(value?: string | null): Locale {\n if (!value) return DEFAULT_LOCALE;\n\n const normalized = value.trim().toLowerCase().replace('_', '-');\n const primary = normalized.split('-')[0];\n\n if ((SUPPORTED_LOCALES as readonly string[]).includes(normalized)) {\n return normalized as Locale;\n }\n\n if ((SUPPORTED_LOCALES as readonly string[]).includes(primary)) {\n return primary as Locale;\n }\n\n return DEFAULT_LOCALE;\n}\n","'use client';\n\nimport { createContext, useMemo, type ReactNode } from 'react';\n\nimport { createTranslator, type CmsTranslator } from './createTranslator';\nimport { defaultLocaleCatalog, mergeMessages } from './messages';\nimport { normalizeLocale } from './normalizeLocale';\nimport type { CmsMessagesOverride, Locale, LocaleCatalog } from './types';\n\nexport type CmsI18nContextValue = {\n locale: Locale;\n t: CmsTranslator;\n};\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const CmsI18nContext = createContext<CmsI18nContextValue | null>(null);\n\nexport type CmsI18nProviderProps = {\n locale?: Locale | string;\n /** Alias de `locale` (p. ej. consumidores que pasan `language=\"es\"`). */\n language?: Locale | string;\n messages?: CmsMessagesOverride;\n catalog?: LocaleCatalog;\n children: ReactNode;\n};\n\nexport function CmsI18nProvider({\n locale,\n language,\n messages,\n catalog = defaultLocaleCatalog,\n children,\n}: CmsI18nProviderProps) {\n const resolvedLocale = normalizeLocale(locale ?? language);\n\n const value = useMemo<CmsI18nContextValue>(() => {\n const resolvedMessages = mergeMessages(resolvedLocale, catalog, messages);\n return {\n locale: resolvedLocale,\n t: createTranslator(resolvedMessages),\n };\n }, [catalog, messages, resolvedLocale]);\n\n return <CmsI18nContext.Provider value={value}>{children}</CmsI18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext, useMemo } from 'react';\n\nimport { CmsI18nContext } from './CmsI18nProvider';\nimport { createTranslator } from './createTranslator';\nimport { defaultLocaleCatalog, mergeMessages } from './messages';\nimport type { CmsMessagesOverride, Locale, LocaleCatalog } from './types';\nimport { DEFAULT_LOCALE } from './types';\n\nexport type UseCmsTranslationOptions = {\n locale?: Locale;\n messages?: CmsMessagesOverride;\n catalog?: LocaleCatalog;\n};\n\nexport function useCmsTranslation(options?: UseCmsTranslationOptions) {\n const context = useContext(CmsI18nContext);\n\n const locale = options?.locale ?? context?.locale ?? DEFAULT_LOCALE;\n const catalog = options?.catalog ?? defaultLocaleCatalog;\n const overrides = options?.messages;\n\n const t = useMemo(() => {\n if (!overrides && context && context.locale === locale) {\n return context.t;\n }\n return createTranslator(mergeMessages(locale, catalog, overrides));\n }, [catalog, context, locale, overrides]);\n\n return { locale, t };\n}\n\n/** BCP 47 tag for `Intl` / `toLocaleString` formatting. */\nexport function getIntlLocaleTag(locale: Locale): string {\n switch (locale) {\n case 'pt':\n return 'pt-BR';\n case 'en':\n return 'en-US';\n case 'es':\n default:\n return 'es-MX';\n }\n}\n","import type {\n AnchorHTMLAttributes,\n ElementType,\n ForwardedRef,\n ReactNode,\n RefAttributes,\n} from 'react';\nimport { forwardRef } from 'react';\n\nexport type CmsLinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {\n href: string;\n children?: ReactNode;\n};\n\nexport type CmsLinkComponent = ElementType<\n CmsLinkProps & RefAttributes<HTMLAnchorElement>\n>;\n\nexport const DefaultCmsLink = forwardRef(function DefaultCmsLink(\n { href, children, ...rest }: CmsLinkProps,\n ref: ForwardedRef<HTMLAnchorElement>,\n) {\n return (\n <a href={href} ref={ref} {...rest}>\n {children}\n </a>\n );\n});\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nimport { cmsColors, radii, shadows } from '../../theme/tokens';\n\nconst ACTIVE_BG = cmsColors.secondary;\nconst HOVER_BG = cmsColors.surfaceHover;\nconst NAV_TEXT = cmsColors.textNav;\n\nexport const SIDEBAR_WIDTH_EXPANDED = 195;\nexport const SIDEBAR_WIDTH_COLLAPSED = 96;\n\nconst ICON_SIZE_EXPANDED = 24;\nconst ICON_SIZE_COLLAPSED = 24;\n\nconst scrollbarHidden = {\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n} as const;\n\nexport const SidebarStyles = {\n sxRoot: (open: boolean): SxProps<Theme> => {\n const width = open ? SIDEBAR_WIDTH_EXPANDED : SIDEBAR_WIDTH_COLLAPSED;\n return {\n width,\n maxWidth: width,\n minWidth: width,\n flexShrink: 0,\n alignSelf: 'stretch',\n minHeight: 0,\n maxHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n bgcolor: 'm3.surfaceContainer',\n paddingTop: open ? '1rem' : '1.5rem',\n boxSizing: 'border-box',\n transition: 'width 0.2s ease, min-width 0.2s ease, max-width 0.2s ease',\n };\n },\n\n sxNavScroll: {\n flex: 1,\n minHeight: 0,\n overflowY: 'auto',\n overflowX: 'hidden',\n width: '100%',\n boxSizing: 'border-box',\n ...scrollbarHidden,\n } as SxProps<Theme>,\n\n sxNav: (open: boolean): SxProps<Theme> => ({\n display: 'flex',\n flexDirection: 'column',\n py: 1.5,\n gap: open ? 0.25 : 0.5,\n width: '100%',\n maxWidth: '100%',\n minWidth: 0,\n boxSizing: 'border-box',\n position: 'relative',\n px: open ? '1rem' : 0.75,\n alignItems: open ? 'stretch' : 'start',\n }),\n\n sxNavGroup: (open: boolean): SxProps<Theme> => ({\n position: 'relative',\n minWidth: 0,\n maxWidth: open ? '100%' : 'none',\n overflow: 'visible',\n width: open ? '100%' : 'auto',\n }),\n\n /** Wrapper del Tooltip: ancho completo expandido, auto en rail colapsado */\n sxTooltipWrap: (open: boolean): SxProps<Theme> => ({\n display: 'flex',\n width: open ? '100%' : 'auto',\n alignItems: 'flex-start',\n }),\n\n sxDivider: {\n my: 1,\n borderColor: cmsColors.border,\n } as SxProps<Theme>,\n\n sxItem: (\n selected: boolean,\n nested = false,\n hasChildren = false,\n collapsed = false,\n ): SxProps<Theme> => {\n if (collapsed) {\n return {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 48,\n minWidth: 0,\n width: 'auto',\n maxWidth: 'none',\n boxSizing: 'border-box',\n overflow: 'hidden',\n px: 0,\n py: 0,\n borderRadius: '100px',\n color: NAV_TEXT,\n textDecoration: 'none',\n bgcolor: selected ? ACTIVE_BG : 'transparent',\n '&:hover': {\n bgcolor: selected ? ACTIVE_BG : 'action.hover',\n },\n };\n }\n\n return {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n minHeight: 40,\n minWidth: 0,\n maxWidth: 'none',\n // Para que el hover/active se vea igual al diseño: el fondo llega al borde izquierdo\n width: 'calc(100% + 1rem)',\n boxSizing: 'border-box',\n overflow: hasChildren ? 'visible' : 'hidden',\n px: nested ? 1.5 : 0,\n pl: nested ? 4.5 : 3,\n py: 0.75,\n ml: '-1rem',\n mr: 0,\n // Sub-items: píldora completa; top-level: píldora pegada a la izquierda\n borderRadius: nested ? '100px' : '0 100px 100px 0',\n color: NAV_TEXT,\n textDecoration: 'none',\n bgcolor: selected ? ACTIVE_BG : 'transparent',\n '&:hover': {\n bgcolor: selected ? ACTIVE_BG : HOVER_BG,\n },\n };\n },\n\n sxItemIcon: (selected: boolean, collapsed = false): SxProps<Theme> => ({\n fontSize: collapsed ? ICON_SIZE_COLLAPSED : ICON_SIZE_EXPANDED,\n color: selected ? 'secondary.dark' : 'm3.onSurfaceVariant',\n width: collapsed ? 48 : 'auto',\n flexShrink: 0,\n }),\n\n sxItemLabel: (selected: boolean): SxProps<Theme> => ({\n flex: 1,\n minWidth: 0,\n fontSize: 14,\n fontWeight: selected ? 600 : 400,\n lineHeight: 1.43,\n color: NAV_TEXT,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }),\n\n sxExpandButton: {\n pl: '1.5rem',\n position: 'absolute',\n left: 0,\n top: '50%',\n transform: 'translateY(-50%)',\n p: 0.25,\n color: 'm3.onSurfaceVariant',\n zIndex: 1,\n } as SxProps<Theme>,\n\n sxChildrenMenuPaper: {\n mt: 0.5,\n borderRadius: radii.xl,\n bgcolor: cmsColors.white,\n boxShadow: shadows.flyout,\n px: 1,\n } as SxProps<Theme>,\n\n sxChildrenMenuItem: (selected: boolean): SxProps<Theme> => ({\n minHeight: 44,\n borderRadius: '100px',\n px: 2,\n py: 1,\n gap: 1.25,\n color: NAV_TEXT,\n bgcolor: selected ? ACTIVE_BG : 'transparent',\n '&:hover': {\n bgcolor: selected ? ACTIVE_BG : HOVER_BG,\n },\n '&.Mui-selected': {\n bgcolor: ACTIVE_BG,\n '&:hover': { bgcolor: ACTIVE_BG },\n },\n }),\n\n sxChildrenMenuListItemIcon: {\n minWidth: 34,\n color: 'm3.onSurfaceVariant',\n '& .MuiSvgIcon-root': {\n fontSize: 22,\n },\n } as SxProps<Theme>,\n\n sxBetaChip: (open = false): SxProps<Theme> => ({\n height: 15,\n fontSize: 11,\n fontWeight: 600,\n letterSpacing: '0.04em',\n bgcolor: 'primary.main',\n color: 'primary.contrastText',\n borderRadius: '.625rem',\n px: 0.75,\n mr: open ? 1 : 0,\n lineHeight: 1,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }),\n};\n","'use client';\nimport BarChartOutlinedIcon from '@mui/icons-material/BarChartOutlined';\nimport BookmarkBorderOutlinedIcon from '@mui/icons-material/BookmarkBorderOutlined';\nimport ChatBubbleOutlineOutlinedIcon from '@mui/icons-material/ChatBubbleOutlineOutlined';\nimport CreateOutlinedIcon from '@mui/icons-material/CreateOutlined';\nimport EventOutlinedIcon from '@mui/icons-material/EventOutlined';\nimport ExploreOutlinedIcon from '@mui/icons-material/ExploreOutlined';\nimport ImageOutlinedIcon from '@mui/icons-material/ImageOutlined';\nimport ImportExportOutlinedIcon from '@mui/icons-material/ImportExportOutlined';\nimport LabelOutlinedIcon from '@mui/icons-material/LabelOutlined';\nimport MailOutlineOutlinedIcon from '@mui/icons-material/MailOutlineOutlined';\nimport MoreHorizOutlinedIcon from '@mui/icons-material/MoreHorizOutlined';\nimport NotificationsNoneOutlinedIcon from '@mui/icons-material/NotificationsNoneOutlined';\nimport PeopleOutlineOutlinedIcon from '@mui/icons-material/PeopleOutlineOutlined';\nimport PeopleOutlinedIcon from '@mui/icons-material/PeopleOutlined';\nimport PermMediaOutlinedIcon from '@mui/icons-material/PermMediaOutlined';\nimport PlayCircleOutlineOutlinedIcon from '@mui/icons-material/PlayCircleOutlineOutlined';\nimport RestaurantOutlinedIcon from '@mui/icons-material/RestaurantOutlined';\nimport SearchOutlinedIcon from '@mui/icons-material/SearchOutlined';\nimport ShoppingCartOutlinedIcon from '@mui/icons-material/ShoppingCartOutlined';\nimport ViewListOutlinedIcon from '@mui/icons-material/ViewListOutlined';\nimport FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter';\nimport TimelineOutlinedIcon from '@mui/icons-material/TimelineOutlined';\nimport MessageOutlinedIcon from '@mui/icons-material/MessageOutlined';\nimport MicNoneOutlinedIcon from '@mui/icons-material/MicNoneOutlined';\nimport PlaylistPlayOutlinedIcon from '@mui/icons-material/PlaylistPlayOutlined';\nimport PendingActionsOutlinedIcon from '@mui/icons-material/PendingActionsOutlined';\nimport ForumOutlinedIcon from '@mui/icons-material/ForumOutlined';\nimport UsbOutlinedIcon from '@mui/icons-material/UsbOutlined';\nimport FormatListBulletedOutlinedIcon from '@mui/icons-material/FormatListBulletedOutlined';\nimport VerticalSplitOutlinedIcon from '@mui/icons-material/VerticalSplitOutlined';\nimport ViewQuiltOutlinedIcon from '@mui/icons-material/ViewQuiltOutlined';\nimport SubscriptionsOutlinedIcon from '@mui/icons-material/SubscriptionsOutlined';\nimport type { NavBlock } from '../../types/navigation';\n\n/**\n * Navegación lateral por defecto.\n * `module` debe coincidir exactamente con `module` en POST /auth/modulesAvailable\n * y con las claves en `messages.navigation`.\n */\nexport const ACCOUNT_NAV_BLOCKS: NavBlock[] = [\n {\n href: '/admin/comments/',\n icon: MessageOutlinedIcon,\n module: 'COMMENTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/poll.jsp',\n icon: BarChartOutlinedIcon,\n module: 'POLLS',\n },\n {\n href: '/media',\n icon: PermMediaOutlinedIcon,\n module: 'MEDIA',\n children: [\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/audios.jsp',\n icon: MicNoneOutlinedIcon,\n module: 'AUDIOS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/playlist.jsp',\n icon: ImageOutlinedIcon,\n module: 'IMAGES',\n },\n {\n href: '/media/playlist',\n icon: PlaylistPlayOutlinedIcon,\n module: 'PLAYLISTS',\n },\n {\n href: '/admin/videos/',\n icon: PlayCircleOutlineOutlinedIcon,\n module: 'VIDEOS',\n },\n ],\n },\n {\n href: '/admin/posts/',\n icon: FormatAlignCenterIcon,\n module: 'POSTS',\n },\n {\n href: '/admin/reports/',\n icon: TimelineOutlinedIcon,\n module: 'PRODUCTION',\n },\n\n {\n href: '/planificacion',\n icon: PendingActionsOutlinedIcon,\n module: 'PLANNING',\n },\n /* {\n href: '/analiticas',\n icon: BarChartOutlinedIcon,\n module: 'ANALYTICS',\n }, */\n { href: '/tags', icon: LabelOutlinedIcon, module: 'TAGS' },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/trivias.jsp',\n icon: ForumOutlinedIcon,\n module: 'TRIVIAS',\n },\n {\n href: '/otros',\n icon: MoreHorizOutlinedIcon,\n module: 'OTHERS',\n children: [\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/newswires.jsp',\n icon: UsbOutlinedIcon,\n module: 'NEWSWIRES',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/event.jsp',\n icon: EventOutlinedIcon,\n module: 'EVENTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminPages.jsp',\n icon: ExploreOutlinedIcon,\n module: 'PAGES',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/dashboard.jsp',\n icon: FormatListBulletedOutlinedIcon,\n module: 'FEEDS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminPages.jsp',\n icon: PeopleOutlinedIcon,\n module: 'PERSONS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminPosts.jsp',\n icon: CreateOutlinedIcon,\n module: 'POSTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/recipe.jsp',\n icon: RestaurantOutlinedIcon,\n module: 'RECIPES',\n },\n ],\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/banners.jsp',\n icon: VerticalSplitOutlinedIcon,\n module: 'BANNERS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/dynamicContent.jsp',\n icon: ViewQuiltOutlinedIcon,\n module: 'BLOCKS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/menuSite.jsp',\n icon: ViewListOutlinedIcon,\n module: 'MENUS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/navigationTags.jsp',\n icon: BookmarkBorderOutlinedIcon,\n module: 'TOPICS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/filterQueryList.jsp',\n icon: SearchOutlinedIcon,\n module: 'ADVANCEDQUERYS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminImports.jsp',\n icon: ImportExportOutlinedIcon,\n module: 'IMPORTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/newsletter.jsp',\n icon: MailOutlineOutlinedIcon,\n module: 'NEWSLETTERS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/adminQueues.jsp',\n icon: NotificationsNoneOutlinedIcon,\n module: 'NOTIFICATIONS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/payments.jsp',\n icon: ShoppingCartOutlinedIcon,\n module: 'PAYMENTS',\n },\n {\n href: '/system/modules/com.tfsla.diario.admin/templates/subscriptions.jsp',\n icon: SubscriptionsOutlinedIcon,\n module: 'PAYMENTS',\n },\n /* {\n href: '/reportes',\n icon: BarChartOutlinedIcon,\n module: 'REPORTS',\n },\n {\n href: '/secciones',\n icon: ViewListOutlinedIcon,\n module: 'SECTIONS',\n }, */\n {\n href: '/twitter-feeds',\n icon: ChatBubbleOutlineOutlinedIcon,\n module: 'TWITTERS',\n },\n {\n href: '/usuarios',\n icon: PeopleOutlineOutlinedIcon,\n module: 'USERS',\n },\n /* {\n href: '/zonas',\n icon: LayersOutlinedIcon,\n module: 'ZONES',\n },\n { href: '/ia', icon: ExploreOutlinedIcon, module: 'IA' }, */\n];\n","'use client';\n\nimport { useMemo, useState, type ReactElement } from 'react';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport Box from '@mui/material/Box';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { useCmsTranslation } from '../../i18n';\nimport type { CmsTranslator } from '../../i18n';\nimport { cmsColors } from '../../theme/tokens';\nimport type { NavItemPermissions, NavLinkItem } from '../../types/navigation';\nimport { DefaultCmsLink, type CmsLinkComponent } from '../link';\nimport { SidebarStyles } from './Sidebar.styles';\nimport { ACCOUNT_NAV_BLOCKS } from './nav-blocks';\n\nfunction resolveNavLabel(item: NavLinkItem, t: CmsTranslator): string {\n return item.label ?? t.navigation(item.module);\n}\n\nfunction isPathActive(pathname: string, href: string): boolean {\n if (pathname === href) return true;\n if (href !== '/' && pathname.startsWith(`${href}/`)) return true;\n return false;\n}\n\nfunction isItemActive(pathname: string, item: NavLinkItem): boolean {\n if (isPathActive(pathname, item.href)) return true;\n return item.children?.some((child) => isPathActive(pathname, child.href)) ?? false;\n}\n\nfunction findModulePermission(\n permissions: Array<NavItemPermissions>,\n module: string,\n): NavItemPermissions | undefined {\n return permissions.find((permission) => permission.module === module);\n}\n\nfunction getVisibleChildren(\n item: NavLinkItem,\n permissions: Array<NavItemPermissions>,\n): NavLinkItem[] {\n return (\n item.children?.filter((child) => findModulePermission(permissions, child.module)) ?? []\n );\n}\n\nfunction wrapWithTooltip(open: boolean, label: string, node: ReactElement) {\n if (open) return node;\n return (\n <Tooltip title={label} placement=\"right\" arrow>\n <Box component=\"span\" sx={SidebarStyles.sxTooltipWrap(open)}>\n {node}\n </Box>\n </Tooltip>\n );\n}\n\nfunction NavRow({\n item,\n nested = false,\n open = true,\n expanded,\n onToggleExpand,\n LinkComponent,\n pathname,\n permissions,\n t,\n baseUrl,\n selectedPublicationId,\n}: {\n item: NavLinkItem;\n nested?: boolean;\n open?: boolean;\n expanded?: boolean;\n onToggleExpand?: () => void;\n LinkComponent: CmsLinkComponent;\n pathname: string;\n permissions: Array<NavItemPermissions>;\n t: CmsTranslator;\n baseUrl: string;\n selectedPublicationId: string;\n}) {\n const label = resolveNavLabel(item, t);\n const permission = findModulePermission(permissions, item.module);\n const visibleChildren = getVisibleChildren(item, permissions);\n const collapsed = !open;\n const selected = isPathActive(pathname, item.href);\n const parentSelected = isItemActive(pathname, item);\n const hasChildren = visibleChildren.length > 0;\n const Icon = item.icon;\n const iconSelected = nested ? selected : selected || parentSelected;\n const [childMenuAnchor, setChildMenuAnchor] = useState<HTMLElement | null>(null);\n const childMenuOpen = Boolean(childMenuAnchor);\n if (!permission && !hasChildren) return null;\n const content = (\n <>\n {hasChildren && !collapsed ? (\n <IconButton\n size=\"small\"\n aria-label={expanded ? t.sidebar('collapse') : t.sidebar('expand')}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onToggleExpand?.();\n }}\n sx={SidebarStyles.sxExpandButton}>\n {expanded ? (\n <ExpandMoreIcon sx={{ fontSize: 20 }} />\n ) : (\n <ChevronRightIcon sx={{ fontSize: 20 }} />\n )}\n </IconButton>\n ) : null}\n <Icon sx={SidebarStyles.sxItemIcon(iconSelected, collapsed)} />\n {!collapsed ? (\n <Typography component=\"span\" sx={SidebarStyles.sxItemLabel(selected)}>\n {label}\n </Typography>\n ) : null}\n {permission?.isnew && (\n <Box component=\"span\" sx={SidebarStyles.sxBetaChip(open)}>\n {t.sidebar('newBadge')}\n </Box>\n )}\n </>\n );\n\n if (hasChildren && !collapsed) {\n return (\n <Box sx={SidebarStyles.sxNavGroup(open)}>\n <Box\n component=\"div\"\n onClick={onToggleExpand}\n sx={{\n ...SidebarStyles.sxItem(parentSelected, nested, true, false),\n cursor: 'pointer',\n }}>\n {content}\n </Box>\n <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 0.25,\n mt: 0.25,\n minWidth: 0,\n maxWidth: '100%',\n overflow: 'hidden',\n }}>\n {visibleChildren.map((child) => (\n <NavRow\n key={child.href}\n item={child}\n nested\n open={open}\n LinkComponent={LinkComponent}\n pathname={pathname}\n permissions={permissions}\n t={t}\n baseUrl={baseUrl}\n selectedPublicationId={selectedPublicationId}\n />\n ))}\n </Box>\n </Collapse>\n </Box>\n );\n }\n\n // Sidebar colapsado + item con hijos: mostrar menú flotante (como en la imagen)\n if (hasChildren && collapsed) {\n const row = (\n <Box\n component=\"button\"\n type=\"button\"\n aria-label={label}\n aria-controls={childMenuOpen ? `sidebar-children-${item.href}` : undefined}\n aria-haspopup=\"true\"\n aria-expanded={childMenuOpen ? 'true' : undefined}\n onClick={(e) => setChildMenuAnchor(e.currentTarget)}\n onMouseEnter={(e) => setChildMenuAnchor(e.currentTarget)}\n sx={{\n ...SidebarStyles.sxItem(parentSelected, nested, hasChildren, true),\n border: 0,\n background: 'transparent',\n cursor: 'pointer',\n }}>\n {content}\n </Box>\n );\n\n // En colapsado + hijos: solo menú flotante (sin tooltip)\n return (\n <>\n {row}\n <Menu\n id={`sidebar-children-${item.href}`}\n anchorEl={childMenuAnchor}\n open={childMenuOpen}\n onClose={() => setChildMenuAnchor(null)}\n anchorOrigin={{ vertical: 'center', horizontal: 'right' }}\n transformOrigin={{ vertical: 'center', horizontal: 'left' }}\n slotProps={{\n paper: { sx: SidebarStyles.sxChildrenMenuPaper },\n list: {\n onMouseLeave: () => setChildMenuAnchor(null),\n sx: { py: 1 },\n },\n }}>\n {visibleChildren.map((child) => {\n const ChildIcon = child.icon;\n return (\n <MenuItem\n key={child.href}\n component={LinkComponent}\n href={`${baseUrl}${child.href}`}\n onClick={() => setChildMenuAnchor(null)}\n sx={SidebarStyles.sxChildrenMenuItem(isPathActive(pathname, child.href))}>\n <ListItemIcon sx={SidebarStyles.sxChildrenMenuListItemIcon}>\n <ChildIcon />\n </ListItemIcon>\n <ListItemText\n primary={resolveNavLabel(child, t)}\n slotProps={{\n primary: {\n sx: {\n fontSize: 14,\n fontWeight: 400,\n color: cmsColors.textStrong,\n },\n },\n }}\n />\n </MenuItem>\n );\n })}\n </Menu>\n </>\n );\n }\n\n const row = (\n <Box\n component={LinkComponent}\n href={item.href}\n sx={SidebarStyles.sxItem(\n collapsed ? parentSelected : selected,\n nested,\n hasChildren,\n collapsed,\n )}>\n {content}\n </Box>\n );\n\n return wrapWithTooltip(open, label, row);\n}\n\nfunction NavSection({\n items,\n open = true,\n LinkComponent,\n pathname,\n permissions,\n t,\n baseUrl,\n selectedPublicationId,\n}: {\n items: NavLinkItem[];\n open: boolean;\n LinkComponent: CmsLinkComponent;\n pathname: string;\n permissions: Array<NavItemPermissions>;\n t: CmsTranslator;\n baseUrl: string;\n selectedPublicationId: string;\n}) {\n\n const initialOpen = useMemo(() => {\n const state: Record<string, boolean> = {};\n for (const item of items) {\n if (item.children) {\n state[item.href] =\n item.defaultOpen ?? item.children.some((c) => isPathActive(pathname, c.href));\n }\n }\n return state;\n }, [items, pathname]);\n\n const [openGroups, setOpenGroups] = useState(initialOpen);\n\n const toggleGroup = (href: string) => {\n setOpenGroups((prev) => ({ ...prev, [href]: !prev[href] }));\n };\n\n return (\n <>\n {items.map((item) => (\n <NavRow\n key={item.href}\n item={item}\n open={open}\n permissions={permissions}\n expanded={openGroups[item.href]}\n onToggleExpand={\n getVisibleChildren(item, permissions).length > 0\n ? () => toggleGroup(item.href)\n : undefined\n }\n LinkComponent={LinkComponent}\n pathname={pathname}\n t={t}\n baseUrl={baseUrl}\n selectedPublicationId={selectedPublicationId}\n />\n ))}\n </>\n );\n}\n\nexport type SidebarProps = {\n open?: boolean;\n pathname: string;\n LinkComponent?: CmsLinkComponent;\n permissions: Array<NavItemPermissions>;\n baseUrl: string;\n selectedPublicationId: string;\n};\n\nexport function Sidebar({\n open = true,\n pathname,\n permissions,\n LinkComponent = DefaultCmsLink,\n baseUrl,\n selectedPublicationId,\n}: SidebarProps) {\n const { t } = useCmsTranslation();\n\n return (\n <Box component=\"aside\" sx={SidebarStyles.sxRoot(open)}>\n <Box sx={SidebarStyles.sxNavScroll}>\n <Box\n component=\"nav\"\n aria-label={t.sidebar('navAriaLabel')}\n sx={SidebarStyles.sxNav(open)}>\n <NavSection\n permissions={permissions}\n items={ACCOUNT_NAV_BLOCKS}\n open={open}\n LinkComponent={LinkComponent}\n pathname={pathname}\n t={t}\n baseUrl={baseUrl}\n selectedPublicationId={selectedPublicationId}\n />\n </Box>\n </Box>\n </Box>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\nimport { radii, shadows } from '../../theme/tokens';\nimport { ITEM_DEFAULT_BG, ITEM_HOVER_BG, MENU_BG } from '../../utils/site-selector';\n\nexport const SiteSelectorMenuStyles = {\n sxTriggerButton: (open: boolean): SxProps<Theme> => ({\n height: 34,\n borderRadius: radii.sm,\n borderColor: !open ? 'm3.outline' : 'transparent',\n color: 'black',\n bgcolor: open ? ITEM_HOVER_BG : 'transparent',\n textTransform: 'none',\n fontSize: '12px',\n fontWeight: 500,\n lineHeight: 0,\n letterSpacing: '0.007em',\n px: 2,\n py: 0,\n flexShrink: 0,\n '&:hover': {\n borderColor: 'm3.outline',\n bgcolor: open ? ITEM_HOVER_BG : 'action.hover',\n },\n }),\n\n sxTriggerIcon: {\n fontSize: 20,\n } as SxProps<Theme>,\n\n sxMenuPaper: {\n mt: 1,\n bgcolor: MENU_BG,\n borderRadius: 2,\n marginTop: 0,\n boxShadow: shadows.menu,\n width: 'auto',\n minWidth: 380,\n maxWidth: 640,\n py: '1.5rem',\n px: '1.5rem',\n } as SxProps<Theme>,\n\n sxMenuList: {\n p: 0,\n } as SxProps<Theme>,\n\n sxSection: (isLast: boolean): SxProps<Theme> => ({\n mb: isLast ? 0 : 2,\n }),\n\n sxSectionTitle: {\n px: 1,\n mb: 1,\n fontSize: 13,\n fontWeight: 400,\n letterSpacing: 'normal',\n textTransform: 'uppercase',\n color: 'm3.outline',\n } as SxProps<Theme>,\n\n sxSectionGrid: (fullWidth?: boolean): SxProps<Theme> => ({\n display: 'grid',\n gridTemplateColumns: fullWidth ? '1fr' : '1fr 1fr',\n gap: 1,\n }),\n\n sxMenuItem: (selected: boolean): SxProps<Theme> => ({\n width: '16.4rem',\n maxWidth: '100%',\n minHeight: 40,\n height: 54,\n px: 2,\n py: 1,\n padding: '1rem',\n margin: '.65rem',\n borderRadius: radii.xl,\n bgcolor: selected ? ITEM_HOVER_BG : ITEM_DEFAULT_BG,\n color: 'm3.onSurfaceVariant',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1.5,\n whiteSpace: 'nowrap',\n '&:hover': {\n bgcolor: ITEM_HOVER_BG,\n },\n '&.Mui-selected': {\n bgcolor: ITEM_HOVER_BG,\n '&:hover': {\n bgcolor: ITEM_HOVER_BG,\n },\n },\n }),\n\n sxMenuItemLabel: (selected: boolean): SxProps<Theme> => ({\n flex: 1,\n minWidth: 0,\n fontSize: 14,\n fontWeight: selected ? 600 : 500,\n lineHeight: 1.43,\n color: 'black',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n wordBreak: 'break-word',\n padding: '0 10px 0 5px',\n whiteSpace: 'pre-wrap',\n }),\n\n sxMenuItemLogoWrap: {\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n marginRight: '.5rem',\n } as SxProps<Theme>,\n};\n","'use client';\n\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport { useState } from 'react';\n\nimport type { Publication } from '../../types/publication';\nimport type { SiteSection } from '../../types/site';\nimport { findPublicationLabel } from '../../utils/site-selector';\nimport { SiteSelectorMenuStyles } from './SiteSelectorMenu.styles';\n\nfunction SiteMenuItem({\n publication,\n selected,\n href,\n imageUrl,\n}: {\n publication: Publication;\n selected: boolean;\n href: string;\n imageUrl?: string;\n}) {\n return (\n <a href={href} style={{ textDecoration: 'none', color: 'inherit' }}>\n <MenuItem selected={selected} sx={SiteSelectorMenuStyles.sxMenuItem(selected)}>\n <Typography sx={SiteSelectorMenuStyles.sxMenuItemLabel(selected)}>\n {publication.description}\n </Typography>\n {imageUrl ? (\n <Box sx={SiteSelectorMenuStyles.sxMenuItemLogoWrap}>\n <img\n src={imageUrl}\n alt={publication.description}\n width={90}\n height={20}\n />\n </Box>\n ) : null}\n </MenuItem>\n </a>\n );\n}\n\nexport type SiteSelectorMenuProps = {\n sites: SiteSection[];\n selectedPublicationId?: string;\n getPublicationHref: (publication: Publication) => string;\n resolvePublicationImageUrl?: (imagePath: string) => string;\n};\n\nexport function SiteSelectorMenu({\n sites,\n selectedPublicationId,\n getPublicationHref,\n resolvePublicationImageUrl,\n}: SiteSelectorMenuProps) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n\n const handleOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const labelId = selectedPublicationId ?? '';\n\n return (\n <>\n <Button\n id=\"site-selector-button\"\n aria-controls={open ? 'site-selector-menu' : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n variant=\"outlined\"\n onClick={handleOpen}\n endIcon={\n <KeyboardArrowDownIcon sx={SiteSelectorMenuStyles.sxTriggerIcon} />\n }\n sx={SiteSelectorMenuStyles.sxTriggerButton(open)}>\n {findPublicationLabel(sites, labelId)}\n </Button>\n\n <Menu\n id=\"site-selector-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: {\n sx: SiteSelectorMenuStyles.sxMenuPaper,\n },\n list: {\n 'aria-labelledby': 'site-selector-button',\n disablePadding: true,\n sx: SiteSelectorMenuStyles.sxMenuList,\n },\n }}>\n {sites.map((section, sectionIndex) => (\n <Box\n key={section.title}\n sx={SiteSelectorMenuStyles.sxSection(\n sectionIndex === sites.length - 1,\n )}>\n <Typography sx={SiteSelectorMenuStyles.sxSectionTitle}>\n {section.title}\n </Typography>\n <Box sx={SiteSelectorMenuStyles.sxSectionGrid(section.fullWidth)}>\n {section.publications.map((publication) => (\n <SiteMenuItem\n key={publication.id}\n publication={publication}\n selected={Number(selectedPublicationId) === publication.id}\n href={getPublicationHref(publication)}\n imageUrl={\n publication.imagePath && resolvePublicationImageUrl\n ? resolvePublicationImageUrl(publication.imagePath)\n : undefined\n }\n />\n ))}\n </Box>\n </Box>\n ))}\n </Menu>\n </>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nimport { cmsColors, shadows } from '../../theme/tokens';\n\nexport const ICON_SLOT_SIZE = 48;\nexport const HEADER_HEIGHT = 48;\nexport const FRAME_GAP = '15px';\nconst DIVIDER_HEIGHT = 27.6;\n\nexport const TopBarStyles = {\n sxAppBar: {\n bgcolor: 'm3.surfaceContainer',\n color: 'm3.onSurfaceVariant',\n height: HEADER_HEIGHT,\n } as SxProps<Theme>,\n\n sxToolbar: {\n minHeight: HEADER_HEIGHT,\n height: HEADER_HEIGHT,\n pl: '10px',\n pr: 2,\n gap: 1.5,\n } as SxProps<Theme>,\n\n sxMenuButton: {\n width: 40,\n height: 40,\n flexShrink: 0,\n borderRadius: '100px',\n color: 'm3.onSurfaceVariant',\n '&:hover': {\n bgcolor: cmsColors.surfaceHover,\n },\n } as SxProps<Theme>,\n\n sxMenuButtonIcon: {\n fontSize: 24,\n } as SxProps<Theme>,\n\n sxLogoBox: {\n width: 200,\n height: 50,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n my: 'auto',\n } as SxProps<Theme>,\n\n sxActionsFrame: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: FRAME_GAP,\n flexShrink: 0,\n } as SxProps<Theme>,\n\n sxIconActionsRow: {\n display: 'flex',\n alignItems: 'center',\n height: ICON_SLOT_SIZE,\n flexShrink: 0,\n } as SxProps<Theme>,\n\n sxActionIcon: {\n width: ICON_SLOT_SIZE,\n height: ICON_SLOT_SIZE,\n color: 'm3.onSurfaceVariant',\n borderRadius: '50%',\n } as SxProps<Theme>,\n\n sxActionIconGlyph: {\n fontSize: 24,\n } as SxProps<Theme>,\n\n sxBadge: {\n '& .MuiBadge-badge': {\n fontSize: 11,\n fontWeight: 500,\n minWidth: 16,\n height: 16,\n px: 0.5,\n top: 10,\n right: 10,\n },\n } as SxProps<Theme>,\n\n sxDivider: {\n width: '1px',\n height: DIVIDER_HEIGHT,\n flexShrink: 0,\n bgcolor: cmsColors.border,\n } as SxProps<Theme>,\n\n sxProfileButton: {\n p: 0,\n width: 34,\n height: 34,\n flexShrink: 0,\n } as SxProps<Theme>,\n\n sxProfileAvatar: {\n width: 34,\n height: 34,\n border: `1px solid ${cmsColors.avatarBorder}`,\n bgcolor: cmsColors.avatarBg,\n } as SxProps<Theme>,\n\n sxProfileMenuPaper: {\n mt: 1,\n minWidth: 220,\n borderRadius: 2,\n bgcolor: cmsColors.menuSurface,\n py: 0.5,\n boxShadow: shadows.menu,\n } as SxProps<Theme>,\n\n sxProfileMenuItem: {\n py: 1.25,\n px: 2,\n fontSize: 14,\n color: cmsColors.textStrong,\n '&:hover': {\n bgcolor: 'action.hover',\n },\n } as SxProps<Theme>,\n\n sxProfileMenuListItemIcon: {\n minWidth: 36,\n color: 'm3.onSurfaceVariant',\n '& .MuiSvgIcon-root': {\n fontSize: 22,\n },\n } as SxProps<Theme>,\n\n sxProfileMenuDivider: {\n my: 0.5,\n borderColor: cmsColors.border,\n } as SxProps<Theme>,\n};\n","'use client';\n\nimport NotificationsNoneOutlinedIcon from '@mui/icons-material/NotificationsNoneOutlined';\nimport Badge from '@mui/material/Badge';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport Menu from '@mui/material/Menu';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { useMemo, useState } from 'react';\n\nimport { getIntlLocaleTag, useCmsTranslation } from '../../i18n';\nimport type { DashboardNotification } from '../../types/notification';\nimport { TopBarStyles } from './TopBar.styles';\n\nexport type NotificationsMenuProps = {\n unreadCount: number;\n notifications: DashboardNotification[];\n};\n\nfunction formatNotificationDate(iso: string, localeTag: string): string {\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return '';\n return date.toLocaleString(localeTag, {\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nexport function NotificationsMenu({\n unreadCount,\n notifications,\n}: NotificationsMenuProps) {\n const { locale, t } = useCmsTranslation();\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n const localeTag = getIntlLocaleTag(locale);\n\n const badgeContent = useMemo(\n () => (unreadCount > 0 ? unreadCount : undefined),\n [unreadCount],\n );\n\n return (\n <>\n <Tooltip title={t.notificationsMenu('title')}>\n <IconButton\n aria-label={t.notificationsMenu('ariaLabel')}\n aria-haspopup=\"true\"\n aria-expanded={open}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={TopBarStyles.sxActionIcon}>\n <Badge badgeContent={badgeContent} color=\"error\" sx={TopBarStyles.sxBadge}>\n <NotificationsNoneOutlinedIcon sx={TopBarStyles.sxActionIconGlyph} />\n </Badge>\n </IconButton>\n </Tooltip>\n\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: {\n sx: {\n width: 360,\n maxHeight: 420,\n mt: 1,\n borderRadius: 2,\n bgcolor: 'm3.surfaceContainerHigh',\n },\n },\n }}>\n <Box sx={{ px: 2, py: 1.5, borderBottom: 1, borderColor: 'm3.outlineVariant' }}>\n <Typography variant=\"subtitle2\" color=\"m3.onSurface\">\n {t.notificationsMenu('title')}\n </Typography>\n {unreadCount > 0 ? (\n <Typography variant=\"caption\" color=\"m3.onSurfaceVariant\">\n {t.notificationsMenu('unreadCount', { count: unreadCount })}\n </Typography>\n ) : null}\n </Box>\n\n {notifications && notifications?.length === 0 ? (\n <Box sx={{ px: 2, py: 3 }}>\n <Typography\n variant=\"body2\"\n color=\"m3.onSurfaceVariant\"\n sx={{ textAlign: 'center' }}>\n {t.notificationsMenu('empty')}\n </Typography>\n </Box>\n ) : (\n <List dense disablePadding sx={{ py: 0.5 }}>\n {notifications && notifications.map((item) => (\n <ListItemButton\n key={item.id}\n component={item.href ? 'a' : 'div'}\n href={item.href}\n onClick={() => setAnchorEl(null)}\n sx={{\n alignItems: 'flex-start',\n py: 1.25,\n bgcolor: item.read ? 'transparent' : 'secondary.light',\n '&:hover': {\n bgcolor: item.read ? 'action.hover' : 'secondary.light',\n },\n }}>\n <ListItemText\n primary={item.title}\n secondary={\n <>\n <Typography\n component=\"span\"\n variant=\"body2\"\n color=\"m3.onSurfaceVariant\"\n sx={{ display: 'block', mt: 0.25 }}>\n {item.message}\n </Typography>\n <Typography\n component=\"span\"\n variant=\"caption\"\n color=\"m3.onSurfaceVariant\"\n sx={{ display: 'block', mt: 0.5 }}>\n {formatNotificationDate(item.createdAt, localeTag)}\n </Typography>\n </>\n }\n slotProps={{\n primary: {\n variant: 'subtitle2',\n color: 'm3.onSurface',\n sx: { fontWeight: item.read ? 400 : 600 },\n },\n }}\n />\n </ListItemButton>\n ))}\n </List>\n )}\n </Menu>\n </>\n );\n}\n","const DEFAULT_CMS_ORIGIN = 'https://dev.cms-medios.com';\n\nexport function resolveCmsOrigin(cmsOrigin?: string): string {\n const base = cmsOrigin?.trim();\n if (!base) return DEFAULT_CMS_ORIGIN;\n return base.replace(/\\/$/, '');\n}\n\nexport function resolveCmsAssetUrl(path: string, cmsOrigin?: string): string {\n if (!path) return '';\n if (path.startsWith('http://') || path.startsWith('https://')) return path;\n const normalized = path.startsWith('/') ? path : `/${path}`;\n return `${resolveCmsOrigin(cmsOrigin)}${normalized}`;\n}\n","import { resolveCmsAssetUrl } from './cms-asset';\nimport type { ProfileGetResponse } from '../types/profile';\n\nconst NO_PICTURE = 'noPicture';\nconst DEFAULT_FALLBACK_AVATAR = '/topbar_profile.png';\n\nexport type ProfileAvatarOptions = {\n cmsOrigin?: string;\n fallbackAvatar?: string;\n};\n\nexport function getProfileAvatarSrc(\n profile: ProfileGetResponse,\n options?: ProfileAvatarOptions,\n): string {\n const { image } = profile;\n const fallback = options?.fallbackAvatar ?? DEFAULT_FALLBACK_AVATAR;\n if (!image || image === NO_PICTURE) return fallback;\n return resolveCmsAssetUrl(image, options?.cmsOrigin);\n}\n\nexport function getProfileDisplayName(profile: ProfileGetResponse): string {\n if (profile.fullName?.trim()) return profile.fullName.trim();\n const parts = [profile.firstName, profile.lastName].filter(Boolean);\n if (parts.length > 0) return parts.join(' ');\n return profile.userName;\n}\n","'use client';\n\nimport EditOutlinedIcon from '@mui/icons-material/EditOutlined';\nimport LogoutOutlinedIcon from '@mui/icons-material/LogoutOutlined';\nimport PersonOutlinedIcon from '@mui/icons-material/PersonOutlined';\nimport type { SvgIconComponent } from '@mui/icons-material';\nimport Avatar from '@mui/material/Avatar';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport { useMemo, useState } from 'react';\n\nimport { useCmsTranslation } from '../../i18n';\nimport type { ProfileMenuMessageKey } from '../../i18n';\nimport { cmsColors } from '../../theme/tokens';\nimport type { ProfileGetResponse } from '../../types/profile';\nimport {\n getProfileAvatarSrc,\n getProfileDisplayName,\n type ProfileAvatarOptions,\n} from '../../utils/profile-avatar';\nimport { TopBarStyles } from './TopBar.styles';\n\ntype ProfileMenuItem = {\n id: string;\n labelKey: ProfileMenuMessageKey;\n icon: SvgIconComponent;\n};\n\nfunction ProfileMenuOption({\n label,\n icon: Icon,\n onSelect,\n}: {\n label: string;\n icon: SvgIconComponent;\n onSelect: () => void;\n}) {\n return (\n <MenuItem onClick={onSelect} sx={TopBarStyles.sxProfileMenuItem}>\n <ListItemIcon sx={TopBarStyles.sxProfileMenuListItemIcon}>\n <Icon />\n </ListItemIcon>\n <ListItemText\n primary={label}\n slotProps={{\n primary: {\n sx: { fontSize: 14, fontWeight: 400, color: cmsColors.textStrong },\n },\n }}\n />\n </MenuItem>\n );\n}\n\nexport type ProfileMenuProps = {\n profile: ProfileGetResponse;\n avatarOptions?: ProfileAvatarOptions;\n};\n\nexport function ProfileMenu({ profile, avatarOptions }: ProfileMenuProps) {\n const { t } = useCmsTranslation();\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const displayName = getProfileDisplayName(profile);\n const avatarSrc = getProfileAvatarSrc(profile, avatarOptions);\n const useLocalImage = avatarSrc.startsWith('/');\n\n const menuItems = useMemo<ProfileMenuItem[]>(\n () => [\n { id: 'profile', labelKey: 'myProfile', icon: PersonOutlinedIcon },\n { id: 'webmaster', labelKey: 'webmasterView', icon: EditOutlinedIcon },\n ],\n [],\n );\n\n const signOffItem = useMemo<ProfileMenuItem>(\n () => ({ id: 'sign-off', labelKey: 'signOff', icon: LogoutOutlinedIcon }),\n [],\n );\n\n const handleClose = () => setAnchorEl(null);\n\n const handleSelect = (_id: string) => {\n handleClose();\n };\n\n return (\n <>\n <IconButton\n id=\"profile-menu-button\"\n aria-label={t.profileMenu('ariaLabel')}\n aria-controls={open ? 'profile-menu' : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n onClick={(e) => setAnchorEl(e.currentTarget)}\n sx={TopBarStyles.sxProfileButton}>\n <Avatar sx={TopBarStyles.sxProfileAvatar}>\n <Box\n component=\"img\"\n src={avatarSrc}\n alt=\"\"\n sx={{ width: '100%', height: '100%', objectFit: 'cover' }}\n {...(useLocalImage ? {} : { crossOrigin: 'anonymous' })}\n />\n </Avatar>\n </IconButton>\n\n <Menu\n id=\"profile-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: { sx: TopBarStyles.sxProfileMenuPaper },\n list: { disablePadding: true },\n }}>\n <Box sx={{ px: 2, py: 1.5, borderBottom: 1, borderColor: 'divider' }}>\n <Typography\n variant=\"subtitle2\"\n sx={{ fontWeight: 600, color: cmsColors.textStrong }}>\n {displayName}\n </Typography>\n <Typography variant=\"caption\" sx={{ color: cmsColors.textNav }}>\n {profile.email}\n </Typography>\n </Box>\n {menuItems.map((item) => (\n <ProfileMenuOption\n key={item.id}\n label={t.profileMenu(item.labelKey)}\n icon={item.icon}\n onSelect={() => handleSelect(item.id)}\n />\n ))}\n <Divider sx={TopBarStyles.sxProfileMenuDivider} />\n <ProfileMenuOption\n label={t.profileMenu(signOffItem.labelKey)}\n icon={signOffItem.icon}\n onSelect={() => handleSelect(signOffItem.id)}\n />\n </Menu>\n </>\n );\n}\n","'use client';\n\nimport AddOutlinedIcon from '@mui/icons-material/AddOutlined';\nimport DevicesOtherOutlinedIcon from '@mui/icons-material/DevicesOtherOutlined';\nimport HelpOutlineOutlinedIcon from '@mui/icons-material/HelpOutlineOutlined';\nimport MenuIcon from '@mui/icons-material/Menu';\nimport type { SvgIconComponent } from '@mui/icons-material';\nimport AppBar from '@mui/material/AppBar';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Toolbar from '@mui/material/Toolbar';\nimport Tooltip from '@mui/material/Tooltip';\nimport type { ReactNode } from 'react';\n\nimport type { DashboardNotification } from '../../types/notification';\nimport type { ProfileGetResponse } from '../../types/profile';\nimport type { Publication } from '../../types/publication';\nimport type { SiteSection } from '../../types/site';\nimport { useCmsTranslation } from '../../i18n';\nimport type { ProfileAvatarOptions } from '../../utils/profile-avatar';\nimport { SiteSelectorMenu } from '../site-selector-menu/SiteSelectorMenu';\nimport { NotificationsMenu } from './NotificationsMenu';\nimport { ProfileMenu } from './ProfileMenu';\nimport { TopBarStyles } from './TopBar.styles';\n\nfunction TopBarDivider() {\n return (\n <Box\n component=\"span\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n sx={TopBarStyles.sxDivider}\n />\n );\n}\n\nfunction TopBarIconAction({\n title,\n icon: Icon,\n}: {\n title: string;\n icon: SvgIconComponent;\n}) {\n return (\n <Tooltip title={title}>\n <IconButton aria-label={title} sx={TopBarStyles.sxActionIcon}>\n <Icon sx={TopBarStyles.sxActionIconGlyph} />\n </IconButton>\n </Tooltip>\n );\n}\n\nexport type TopBarProps = {\n sites: SiteSection[];\n sidebarOpen: boolean;\n onToggleSidebar: () => void;\n notificationUnreadCount: number;\n notifications: DashboardNotification[];\n profile: ProfileGetResponse;\n primaryLogo: ReactNode;\n brandLogo?: ReactNode;\n selectedPublicationId?: string;\n getPublicationHref: (publication: Publication) => string;\n resolvePublicationImageUrl?: (imagePath: string) => string;\n profileAvatarOptions?: ProfileAvatarOptions;\n};\n\nexport function TopBar({\n sites,\n sidebarOpen,\n onToggleSidebar,\n notificationUnreadCount,\n notifications,\n profile,\n primaryLogo,\n brandLogo,\n selectedPublicationId,\n getPublicationHref,\n resolvePublicationImageUrl,\n profileAvatarOptions,\n}: TopBarProps) {\n const { t } = useCmsTranslation();\n\n const trailingActions: { title: string; icon: SvgIconComponent }[] = [\n { title: t.topBar('analytics'), icon: DevicesOtherOutlinedIcon },\n { title: t.topBar('help'), icon: HelpOutlineOutlinedIcon },\n ];\n\n return (\n <AppBar position=\"static\" elevation={0} sx={TopBarStyles.sxAppBar}>\n <Toolbar disableGutters variant=\"dense\" sx={TopBarStyles.sxToolbar}>\n <IconButton\n aria-label={\n sidebarOpen ? t.topBar('closeSidebar') : t.topBar('openSidebar')\n }\n aria-expanded={sidebarOpen}\n onClick={onToggleSidebar}\n sx={TopBarStyles.sxMenuButton}>\n <MenuIcon sx={TopBarStyles.sxMenuButtonIcon} />\n </IconButton>\n\n <Box sx={TopBarStyles.sxLogoBox}>{primaryLogo}</Box>\n\n <Box sx={{ flex: 1 }} />\n\n <Box sx={TopBarStyles.sxActionsFrame}>\n <Box sx={TopBarStyles.sxIconActionsRow}>\n <TopBarIconAction title={t.topBar('new')} icon={AddOutlinedIcon} />\n\n <NotificationsMenu\n unreadCount={notificationUnreadCount}\n notifications={notifications}\n />\n\n {trailingActions.map(({ title, icon }) => (\n <TopBarIconAction key={title} title={title} icon={icon} />\n ))}\n </Box>\n\n <TopBarDivider />\n\n {brandLogo}\n\n <SiteSelectorMenu\n sites={sites}\n selectedPublicationId={selectedPublicationId}\n getPublicationHref={getPublicationHref}\n resolvePublicationImageUrl={resolvePublicationImageUrl}\n />\n\n <TopBarDivider />\n\n <ProfileMenu profile={profile} avatarOptions={profileAvatarOptions} />\n </Box>\n </Toolbar>\n </AppBar>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nexport const AppShellStyles = {\n sxRoot: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n height: '100%',\n minHeight: 0,\n overflow: 'hidden',\n bgcolor: 'm3.surfaceContainer',\n } as SxProps<Theme>,\n\n sxHeader: {\n flexShrink: 0,\n } as SxProps<Theme>,\n\n sxBody: {\n display: 'flex',\n flex: 1,\n minHeight: 0,\n overflow: 'hidden',\n } as SxProps<Theme>,\n\n sxMain: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflowY: 'auto',\n overflowX: 'hidden',\n mt: '10px',\n pt: 1,\n pb: 3,\n pr: 3,\n } as SxProps<Theme>,\n};\n","'use client';\n\nimport Box from '@mui/material/Box';\nimport { useState, type ReactNode } from 'react';\nimport { CmsI18nProvider } from '../../i18n';\nimport type { CmsMessagesOverride, Locale } from '../../i18n';\nimport type { NavItemPermissions } from '../../types/navigation';\nimport type { DashboardNotification } from '../../types/notification';\nimport type { ProfileGetResponse } from '../../types/profile';\nimport type { Publication } from '../../types/publication';\nimport type { SiteSection } from '../../types/site';\nimport type { ProfileAvatarOptions } from '../../utils/profile-avatar';\nimport type { CmsLinkComponent } from '../link';\nimport { DefaultCmsLink } from '../link';\nimport { Sidebar } from '../sidebar/Sidebar';\nimport { TopBar } from '../top-bar/TopBar';\nimport { AppShellStyles } from './AppShell.styles';\n\nexport type AppShellProps = {\n pathname: string;\n sites: SiteSection[];\n children: ReactNode;\n notificationUnreadCount: number;\n notifications: DashboardNotification[];\n profile: ProfileGetResponse;\n primaryLogo: ReactNode;\n brandLogo?: ReactNode;\n selectedPublicationId: string;\n getPublicationHref: (publication: Publication) => string;\n resolvePublicationImageUrl?: (imagePath: string) => string;\n profileAvatarOptions?: ProfileAvatarOptions;\n LinkComponent?: CmsLinkComponent;\n permissions: Array<NavItemPermissions>;\n locale?: Locale | string;\n /** Alias de `locale`. */\n language?: Locale | string;\n messages?: CmsMessagesOverride;\n\n baseUrl: string;\n};\n\nexport function AppShell({\n pathname,\n sites,\n children,\n notificationUnreadCount,\n notifications,\n profile,\n primaryLogo,\n brandLogo,\n selectedPublicationId,\n getPublicationHref,\n resolvePublicationImageUrl,\n profileAvatarOptions,\n LinkComponent = DefaultCmsLink,\n permissions,\n locale,\n language,\n messages,\n baseUrl,\n}: AppShellProps) {\n const [sidebarOpen, setSidebarOpen] = useState(true);\n return (\n <CmsI18nProvider locale={locale} language={language} messages={messages}>\n <Box sx={AppShellStyles.sxRoot}>\n <Box component=\"header\" sx={AppShellStyles.sxHeader}>\n <TopBar\n sites={sites}\n sidebarOpen={sidebarOpen}\n onToggleSidebar={() => setSidebarOpen((prev) => !prev)}\n notificationUnreadCount={notificationUnreadCount}\n notifications={notifications}\n profile={profile}\n primaryLogo={primaryLogo}\n brandLogo={brandLogo}\n selectedPublicationId={selectedPublicationId}\n getPublicationHref={getPublicationHref}\n resolvePublicationImageUrl={resolvePublicationImageUrl}\n profileAvatarOptions={profileAvatarOptions}\n />\n </Box>\n <Box sx={AppShellStyles.sxBody}>\n <Sidebar\n open={sidebarOpen}\n pathname={pathname}\n LinkComponent={LinkComponent}\n permissions={permissions}\n baseUrl={baseUrl}\n selectedPublicationId={selectedPublicationId}\n />\n <Box component=\"main\" sx={AppShellStyles.sxMain}>\n {children}\n </Box>\n </Box>\n </Box>\n </CmsI18nProvider>\n );\n}\n","'use client';\n\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { ThemeProvider } from '@mui/material/styles';\nimport type { ReactNode } from 'react';\n\nimport { createAppTheme } from '../../theme/createAppTheme';\n\nconst theme = createAppTheme();\n\nexport type CmsMuiProviderProps = {\n children: ReactNode;\n};\n\n/** Provider MUI sin integración Next.js (playground Vite u otros frameworks). */\nexport function CmsMuiProvider({ children }: CmsMuiProviderProps) {\n return (\n <ThemeProvider theme={theme} defaultMode=\"light\" storageManager={null}>\n <CssBaseline enableColorScheme />\n {children}\n </ThemeProvider>\n );\n}\n","'use client';\n\nimport Box from '@mui/material/Box';\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { ThemeProvider } from '@mui/material/styles';\nimport { AppRouterCacheProvider } from '@mui/material-nextjs/v16-appRouter';\nimport type { ReactNode } from 'react';\n\nimport { createAppTheme } from '../../theme/createAppTheme';\n\nconst theme = createAppTheme();\n\nexport type NextCmsMuiProviderProps = {\n children: ReactNode;\n};\n\nexport function NextCmsMuiProvider({ children }: NextCmsMuiProviderProps) {\n return (\n <AppRouterCacheProvider options={{ enableCssLayer: true }}>\n <ThemeProvider theme={theme} defaultMode=\"light\" storageManager={null}>\n <CssBaseline enableColorScheme />\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '100dvh',\n }}>\n {children}\n </Box>\n </ThemeProvider>\n </AppRouterCacheProvider>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nimport { cmsColors, radii, shadows } from '../../theme/tokens';\n\nexport const SimpleDropdownStyles = {\n sxTriggerWrap: {\n display: 'inline-flex',\n } as SxProps<Theme>,\n\n /**\n * Disparador por defecto (botón de ícono, p. ej. `more_vert`).\n * En reposo el ícono es gris; en hover/activo el fondo es `iconButtonHoverBg`\n * y el ícono pasa a `controlText` (#000).\n */\n sxIconTrigger: (open: boolean): SxProps<Theme> => ({\n borderRadius: '30px',\n color: open ? cmsColors.controlText : cmsColors.iconButtonIcon,\n bgcolor: open ? cmsColors.iconButtonHoverBg : 'transparent',\n '& .MuiSvgIcon-root': { fontSize: 22 },\n '&:hover': {\n bgcolor: cmsColors.iconButtonHoverBg,\n color: cmsColors.controlText,\n },\n }),\n\n sxMenuPaper: (minWidth: number | string): SxProps<Theme> => ({\n mt: 1,\n p: 1,\n minWidth,\n borderRadius: radii.lg,\n bgcolor: 'm3.surfaceContainerLowest',\n border: '1px solid',\n borderColor: 'm3.outlineVariant',\n boxShadow: shadows.menuSoft,\n }),\n\n sxList: {\n p: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n } as SxProps<Theme>,\n\n sxGrid: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: '2px',\n } as SxProps<Theme>,\n\n sxItem: (selected: boolean): SxProps<Theme> => ({\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n px: '12px',\n py: '10px',\n borderRadius: radii.md,\n color: 'm3.onSurface',\n whiteSpace: 'normal',\n bgcolor: selected ? cmsColors.secondary : 'transparent',\n '&:hover': {\n bgcolor: cmsColors.secondaryHover,\n },\n // Opción activa: fondo secundario; su hover, el hover del secundario.\n '&.Mui-selected': {\n bgcolor: cmsColors.secondary,\n '&:hover': { bgcolor: cmsColors.secondaryHover },\n },\n }),\n\n sxIcon: {\n minWidth: 0,\n mt: '2px',\n color: 'm3.onSurfaceVariant',\n display: 'inline-flex',\n '& .MuiSvgIcon-root': { fontSize: 20 },\n } as SxProps<Theme>,\n\n sxItemText: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n } as SxProps<Theme>,\n\n sxLabel: (hasDescription: boolean): SxProps<Theme> => ({\n fontSize: 14,\n fontWeight: hasDescription ? 600 : 500,\n lineHeight: '20px',\n color: 'm3.onSurface',\n }),\n\n sxDescription: {\n fontSize: 12,\n fontWeight: 400,\n lineHeight: '16px',\n color: 'm3.onSurfaceVariant',\n mt: '2px',\n } as SxProps<Theme>,\n\n sxSubItem: {\n pl: '44px',\n py: '8px',\n fontSize: 13,\n color: 'm3.onSurface',\n borderRadius: radii.md,\n } as SxProps<Theme>,\n\n sxFooter: {\n px: '12px',\n py: 1,\n } as SxProps<Theme>,\n};\n","'use client';\n\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport { Fragment, useMemo, useState } from 'react';\nimport type { MouseEvent, ReactNode } from 'react';\n\nimport { SimpleDropdownStyles } from './SimpleDropdown.styles';\nimport type { DropdownOption } from './types';\n\ntype MenuOrigin = {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n};\n\nexport type SimpleDropdownProps = {\n /** Ítems del menú. */\n options: DropdownOption[];\n /**\n * Disparador del menú. Puede ser un nodo o una función que recibe el estado\n * de apertura (útil para cambiar el ícono). Solo se usa en modo no controlado.\n * Si no se pasa, se usa un botón de ícono por defecto (`triggerIcon`).\n */\n trigger?: ReactNode | ((state: { open: boolean }) => ReactNode);\n /**\n * Ícono del disparador por defecto (cuando no se pasa `trigger`).\n * Por defecto `more_vert`. El disparador del SimpleDropdown es siempre un ícono.\n */\n triggerIcon?: ReactNode;\n /** Número de columnas del menú. Por defecto `1`. */\n columns?: 1 | 2;\n /** Contenido extra al pie del menú (p. ej. un toggle). */\n footer?: ReactNode;\n /** Ancho mínimo del panel. Por defecto `220`. */\n minWidth?: number | string;\n anchorOrigin?: MenuOrigin;\n transformOrigin?: MenuOrigin;\n /** Cierra el menú al hacer clic en un ítem. Por defecto `true`. */\n closeOnSelect?: boolean;\n /** Modo controlado: elemento ancla del menú. */\n anchorEl?: HTMLElement | null;\n /** Modo controlado: si el menú está abierto. */\n open?: boolean;\n /** Modo controlado: callback de cierre. */\n onClose?: () => void;\n /** Valor para `data-testid` del panel. */\n testId?: string;\n};\n\n/**\n * Menú desplegable genérico y presentacional. Renderiza una lista de opciones\n * recibidas por props y ejecuta el `onClick` de cada una. Soporta una o dos\n * columnas, sub-ítems expandibles, separadores y un pie de menú opcional.\n *\n * Funciona en dos modos:\n * - No controlado: se le pasa `trigger` y gestiona su propio estado de apertura.\n * - Controlado: se le pasan `open`, `anchorEl` y `onClose` (p. ej. desde\n * `BtnDropdown`).\n */\nexport function SimpleDropdown({\n options,\n trigger,\n triggerIcon,\n columns = 1,\n footer,\n minWidth = 220,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n closeOnSelect = true,\n anchorEl: controlledAnchorEl,\n open: controlledOpen,\n onClose,\n testId,\n}: SimpleDropdownProps) {\n const isControlled = controlledOpen !== undefined;\n const [internalAnchor, setInternalAnchor] = useState<HTMLElement | null>(\n null,\n );\n const [expandedKey, setExpandedKey] = useState<string | null>(null);\n\n const anchorEl = isControlled ? controlledAnchorEl ?? null : internalAnchor;\n const open = isControlled ? Boolean(controlledOpen) : Boolean(internalAnchor);\n\n /**\n * Cierra el menú según el modo (controlado o no) y limpia la expansión.\n * @returns void\n */\n const handleClose = () => {\n if (isControlled) onClose?.();\n else setInternalAnchor(null);\n setExpandedKey(null);\n };\n\n /**\n * Abre el menú anclándolo al disparador (solo en modo no controlado).\n * @param event - Evento de clic sobre el disparador.\n * @returns void\n */\n const handleTriggerClick = (event: MouseEvent<HTMLElement>) => {\n setInternalAnchor(event.currentTarget);\n };\n\n const visibleOptions = useMemo(\n () => options.filter((option) => option.show !== false),\n [options],\n );\n\n /**\n * Maneja el clic sobre un ítem: expande sub-ítems o ejecuta su acción.\n * @param option - Ítem clickeado.\n * @param key - Clave única del ítem.\n * @returns void\n */\n const handleItemClick = (option: DropdownOption, key: string) => {\n if (option.disabled) return;\n if (option.subItems?.length) {\n setExpandedKey((current) => (current === key ? null : key));\n return;\n }\n option.onClick?.(option);\n if (closeOnSelect) handleClose();\n };\n\n /**\n * Renderiza un ítem del menú (con su ícono, sub-ítems y separador superior).\n * @param option - Ítem a renderizar.\n * @param index - Posición del ítem en la lista visible.\n * @returns Nodo del ítem.\n */\n const renderOption = (option: DropdownOption, index: number) => {\n const key = option.id ?? String(index);\n const isExpanded = expandedKey === key;\n\n return (\n <Fragment key={key}>\n {option.hasTopLine ? <Divider sx={{ my: 0.5 }} /> : null}\n <MenuItem\n disabled={option.disabled}\n selected={option.selected}\n onClick={() => handleItemClick(option, key)}\n data-testid={option.testId}\n sx={SimpleDropdownStyles.sxItem(Boolean(option.selected))}>\n {option.icon ? (\n <ListItemIcon sx={SimpleDropdownStyles.sxIcon}>\n {option.icon}\n </ListItemIcon>\n ) : null}\n <Box sx={SimpleDropdownStyles.sxItemText}>\n <Typography\n component=\"span\"\n sx={SimpleDropdownStyles.sxLabel(Boolean(option.description))}>\n {option.label}\n </Typography>\n {option.description ? (\n <Typography\n component=\"span\"\n sx={SimpleDropdownStyles.sxDescription}>\n {option.description}\n </Typography>\n ) : null}\n </Box>\n </MenuItem>\n {isExpanded\n ? option.subItems\n ?.filter((subItem) => subItem.show !== false)\n .map((subItem, subIndex) => (\n <MenuItem\n key={`${key}-${subItem.id ?? subIndex}`}\n disabled={subItem.disabled}\n data-testid={subItem.testId}\n onClick={() => {\n if (subItem.disabled) return;\n subItem.onClick?.(subItem);\n if (closeOnSelect) handleClose();\n }}\n sx={SimpleDropdownStyles.sxSubItem}>\n {subItem.label}\n </MenuItem>\n ))\n : null}\n </Fragment>\n );\n };\n\n const defaultTrigger = (\n <IconButton\n aria-haspopup=\"true\"\n sx={SimpleDropdownStyles.sxIconTrigger(open)}>\n {triggerIcon ?? <MoreVertIcon />}\n </IconButton>\n );\n const renderedTrigger =\n typeof trigger === 'function'\n ? trigger({ open })\n : (trigger ?? defaultTrigger);\n\n return (\n <>\n {!isControlled && renderedTrigger ? (\n <Box\n component=\"span\"\n onClick={handleTriggerClick}\n sx={SimpleDropdownStyles.sxTriggerWrap}>\n {renderedTrigger}\n </Box>\n ) : null}\n\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n paper: { sx: SimpleDropdownStyles.sxMenuPaper(minWidth) },\n list: {\n sx: SimpleDropdownStyles.sxList,\n // MUI no tipa atributos data-* en el slot list; cast puntual.\n ...(testId ? ({ 'data-testid': testId } as object) : {}),\n },\n }}>\n {columns === 2 ? (\n <Box sx={SimpleDropdownStyles.sxGrid}>\n {visibleOptions.map((option, index) => renderOption(option, index))}\n </Box>\n ) : (\n visibleOptions.map((option, index) => renderOption(option, index))\n )}\n {footer ? <Divider sx={{ my: 0.5 }} /> : null}\n {footer ? <Box sx={SimpleDropdownStyles.sxFooter}>{footer}</Box> : null}\n </Menu>\n </>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\nimport {\n cmsButtonDivider,\n cmsButtonHoverBg,\n cmsButtonSurface,\n type CmsButtonVariant,\n} from '../../theme/buttonStyles';\nimport { cmsColors, shadows, sizes } from '../../theme/tokens';\n\nconst variantOf = (whiteBtn: boolean): CmsButtonVariant =>\n whiteBtn ? 'white' : 'cta';\n\nexport const BtnDropdownStyles = {\n sxGroup: {\n display: 'inline-flex',\n alignItems: 'stretch',\n } as SxProps<Theme>,\n\n sxMainButton: (whiteBtn: boolean, fullPill: boolean): SxProps<Theme> => {\n const variant = variantOf(whiteBtn);\n return {\n height: sizes.buttonHeight,\n px: '20px',\n pr: fullPill ? '20px' : '14px',\n borderRadius: fullPill ? '999px' : '999px 0 0 999px',\n textTransform: 'none',\n fontSize: 14,\n fontWeight: 500,\n minWidth: 0,\n gap: 1,\n boxShadow: shadows.button,\n ...(cmsButtonSurface(variant) as object),\n '& .MuiSvgIcon-root': { fontSize: 18 },\n '&:hover': {\n boxShadow: shadows.button,\n bgcolor: cmsButtonHoverBg(variant),\n },\n '&.Mui-disabled': {\n bgcolor: whiteBtn\n ? 'm3.surfaceContainerLowest'\n : cmsColors.primaryDisabled,\n color: 'action.disabled',\n },\n };\n },\n\n sxArrowButton: (whiteBtn: boolean, open: boolean): SxProps<Theme> => {\n const variant = variantOf(whiteBtn);\n return {\n height: sizes.buttonHeight,\n minWidth: 38,\n width: 38,\n px: 0,\n borderRadius: '0 999px 999px 0',\n boxShadow: shadows.button,\n ...(cmsButtonSurface(variant) as object),\n borderLeft: '1px solid',\n borderLeftColor: cmsButtonDivider(variant),\n '& .MuiSvgIcon-root': {\n fontSize: 22,\n transition: 'transform 0.15s',\n transform: open ? 'rotate(180deg)' : 'none',\n },\n '&:hover': {\n boxShadow: shadows.button,\n bgcolor: cmsButtonHoverBg(variant),\n },\n };\n },\n};\n","'use client';\n\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport { useMemo, useState } from 'react';\nimport type { MouseEvent, ReactNode } from 'react';\n\nimport { BtnDropdownStyles } from './BtnDropdown.styles';\nimport { SimpleDropdown } from './SimpleDropdown';\nimport type { DropdownOption } from './types';\n\nexport type BtnDropdownProps = {\n /** Texto o nodo (ya traducido) del botón principal. */\n titleButton: ReactNode;\n /** Opciones del menú desplegable. */\n options: DropdownOption[];\n /** Ícono opcional a la izquierda del texto del botón principal. */\n icon?: ReactNode;\n /** Acción del botón principal. */\n onAction?: () => void;\n /** Deshabilita el botón y el menú completo. */\n disabled?: boolean;\n /** Habilita o deshabilita solo el botón principal. Por defecto `true`. */\n enableButton?: boolean;\n /** Variante visual de botón blanco. */\n whiteBtn?: boolean;\n /** Muestra u oculta la flecha del desplegable. Por defecto `true`. */\n showDropdownOptions?: boolean;\n /** Valor base para los `data-testid`. */\n testId?: string;\n};\n\n/**\n * Botón primario con menú desplegable integrado, en forma de píldora dividida.\n * Combina un botón principal de acción (emite `onAction`) con una flecha que\n * despliega opciones adicionales. Si no hay opciones visibles, la flecha se\n * oculta automáticamente.\n */\nexport function BtnDropdown({\n titleButton,\n options,\n icon,\n onAction,\n disabled = false,\n enableButton = true,\n whiteBtn = false,\n showDropdownOptions = true,\n testId,\n}: BtnDropdownProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n /**\n * Alterna la apertura del menú anclándolo al botón de la flecha.\n * @param event - Evento de clic sobre la flecha.\n * @returns void\n */\n const handleToggle = (event: MouseEvent<HTMLButtonElement>) => {\n setAnchorEl((current) => (current ? null : event.currentTarget));\n };\n\n const visibleOptions = useMemo(\n () => options.filter((option) => option.show !== false),\n [options],\n );\n const hasOptions = visibleOptions.length > 0;\n const showArrow = showDropdownOptions && hasOptions;\n\n return (\n <>\n <Box sx={BtnDropdownStyles.sxGroup}>\n <Button\n disableElevation\n startIcon={icon}\n onClick={onAction}\n disabled={disabled || !enableButton}\n data-testid={testId ? `btn-${testId}` : undefined}\n sx={BtnDropdownStyles.sxMainButton(whiteBtn, !showArrow)}>\n {titleButton}\n </Button>\n {showArrow ? (\n <Button\n disableElevation\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n onClick={handleToggle}\n disabled={disabled}\n data-testid={testId ? `dropdown-toggle-${testId}` : undefined}\n sx={BtnDropdownStyles.sxArrowButton(whiteBtn, open)}>\n <ArrowDropDownIcon />\n </Button>\n ) : null}\n </Box>\n\n <SimpleDropdown\n options={options}\n anchorEl={anchorEl}\n open={open}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n testId={testId ? `dropdown-menu-${testId}` : undefined}\n />\n </>\n );\n}\n","'use client';\n\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport { useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { SelectStyles } from '../../theme/selectStyles';\n\n/** Opción de un `SelectDropdown`. */\nexport type SelectOption = {\n /** Valor que se emite en `onChange` y se compara con `value`. */\n value: string;\n /** Texto o nodo (ya traducido) a mostrar. */\n label: ReactNode;\n /** Ícono opcional a la izquierda del label. */\n icon?: ReactNode;\n /** Si es `false` la opción no se renderiza. Por defecto `true`. */\n show?: boolean;\n};\n\nexport type SelectDropdownProps = {\n /** Valor seleccionado actualmente. */\n value: string;\n /** Opciones disponibles. */\n options: SelectOption[];\n /** Callback al elegir una opción. */\n onChange: (value: string) => void;\n /**\n * Resalta el disparador con el color de acento (`secondary`).\n * Útil para señalar que hay un filtro activo distinto del valor por defecto.\n */\n highlighted?: boolean;\n /**\n * Muestra los íconos de las opciones (en el disparador y en el menú).\n * `true` → variante con ícono; `false` → variante solo texto. Por defecto `true`.\n */\n showIcons?: boolean;\n /** Ancho mínimo del menú. Por defecto `200`. */\n minWidth?: number | string;\n /** Deshabilita el control. */\n disabled?: boolean;\n /** Texto a mostrar cuando ningún valor coincide. */\n placeholder?: ReactNode;\n /** `aria-label` del disparador (accesibilidad). */\n ariaLabel?: string;\n /** Valor base para los `data-testid`. */\n testId?: string;\n};\n\n/**\n * Selector de una sola opción con la estética \"vista/filtro\" del CMS: un\n * disparador outlined con label + chevron y un menú cuyo ítem activo se resalta\n * en `secondaryContainer`. Es presentacional y controlado: el consumidor pasa\n * `value` y `onChange`.\n *\n * Pensado para filtros de listado (p. ej. \"Últimas Noticias\" o\n * \"Todos / Activos / Inactivos\"), reutilizable desde cualquier app que consuma\n * la librería.\n */\nexport function SelectDropdown({\n value,\n options,\n onChange,\n highlighted = false,\n showIcons = true,\n minWidth = 200,\n disabled = false,\n placeholder,\n ariaLabel,\n testId,\n}: SelectDropdownProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const visibleOptions = useMemo(\n () => options.filter((option) => option.show !== false),\n [options],\n );\n const active = useMemo(\n () => visibleOptions.find((option) => option.value === value),\n [visibleOptions, value],\n );\n\n /**\n * Aplica la selección y cierra el menú.\n * @param next - Valor de la opción elegida.\n * @returns void\n */\n const handleSelect = (next: string) => {\n onChange(next);\n setAnchorEl(null);\n };\n\n return (\n <>\n <Button\n type=\"button\"\n disableElevation\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open ? 'true' : undefined}\n aria-label={ariaLabel}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n data-testid={testId}\n sx={SelectStyles.sxTrigger(highlighted, open)}>\n {showIcons && active?.icon ? (\n <Box component=\"span\" className=\"sel-lead\">\n {active.icon}\n </Box>\n ) : null}\n <Box\n component=\"span\"\n sx={{ flex: 1, textAlign: 'left', whiteSpace: 'nowrap' }}>\n {active?.label ?? placeholder}\n </Box>\n <Box component=\"span\" className=\"sel-chevron\">\n <ExpandMoreIcon />\n </Box>\n </Button>\n\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n transformOrigin={{ vertical: 'top', horizontal: 'left' }}\n slotProps={{\n paper: { sx: SelectStyles.sxMenuPaper(minWidth) },\n list: {\n sx: SelectStyles.sxList,\n role: 'listbox',\n ...(testId ? ({ 'data-testid': `${testId}-menu` } as object) : {}),\n },\n }}>\n {visibleOptions.map((option) => {\n const selected = option.value === value;\n return (\n <MenuItem\n key={option.value}\n selected={selected}\n onClick={() => handleSelect(option.value)}\n data-testid={testId ? `${testId}-option-${option.value}` : undefined}\n sx={SelectStyles.sxItem(selected)}>\n {showIcons && option.icon ? (\n <ListItemIcon>{option.icon}</ListItemIcon>\n ) : null}\n {option.label}\n </MenuItem>\n );\n })}\n </Menu>\n </>\n );\n}\n"],"mappings":"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"}