sass-cms-template-common 0.0.0 → 0.0.2

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/components/link.tsx","../src/lib/components/sidebar/Sidebar.styles.ts","../src/lib/components/sidebar/Sidebar.tsx","../src/lib/utils/site-selector.ts","../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.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: scheme.secondaryContainer,\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 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 height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n bgcolor: 'm3.surfaceContainer',\n paddingTop: open ? '2rem' : '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';\n\nimport { useMemo, useState, type ReactElement } from 'react';\n\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';\n\nimport type { NavBlock, NavLinkItem } from '../../types/navigation';\nimport { DefaultCmsLink, type CmsLinkComponent } from '../link';\nimport { SidebarStyles } from './Sidebar.styles';\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 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}: {\n item: NavLinkItem;\n nested?: boolean;\n open?: boolean;\n expanded?: boolean;\n onToggleExpand?: () => void;\n LinkComponent: CmsLinkComponent;\n pathname: string;\n}) {\n const collapsed = !open;\n const selected = isPathActive(pathname, item.href);\n const parentSelected = isItemActive(pathname, item);\n const hasChildren = Boolean(item.children?.length);\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\n const content = (\n <>\n {hasChildren && !collapsed ? (\n <IconButton\n size=\"small\"\n aria-label={expanded ? 'Contraer' : 'Expandir'}\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 {item.label}\n </Typography>\n ) : null}\n {item.badge && (\n <Box component=\"span\" sx={SidebarStyles.sxBetaChip(open)}>\n {item.badge}\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 {item.children!.map((child) => (\n <NavRow\n key={child.href}\n item={child}\n nested\n open={open}\n LinkComponent={LinkComponent}\n pathname={pathname}\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={item.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 {item.children!.map((child) => {\n const ChildIcon = child.icon;\n return (\n <MenuItem\n key={child.href}\n component={LinkComponent}\n href={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={child.label}\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, item.label, row);\n}\n\nfunction NavSection({\n items,\n open,\n LinkComponent,\n pathname,\n}: {\n items: NavLinkItem[];\n open: boolean;\n LinkComponent: CmsLinkComponent;\n pathname: 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 expanded={openGroups[item.href]}\n onToggleExpand={\n item.children ? () => toggleGroup(item.href) : undefined\n }\n LinkComponent={LinkComponent}\n pathname={pathname}\n />\n ))}\n </>\n );\n}\n\nexport type SidebarProps = {\n open: boolean;\n pathname: string;\n navBlocks: NavBlock[];\n LinkComponent?: CmsLinkComponent;\n};\n\nexport function Sidebar({\n open,\n pathname,\n navBlocks,\n LinkComponent = DefaultCmsLink,\n}: SidebarProps) {\n return (\n <Box component=\"aside\" sx={SidebarStyles.sxRoot(open)}>\n <Box sx={SidebarStyles.sxNavScroll}>\n <Box component=\"nav\" aria-label=\"Principal\" sx={SidebarStyles.sxNav(open)}>\n {navBlocks.map((block, index) => {\n if (Array.isArray(block))\n return (\n <NavSection\n key={`section-${index}`}\n items={block}\n open={open}\n LinkComponent={LinkComponent}\n pathname={pathname}\n />\n );\n return null;\n })}\n </Box>\n </Box>\n </Box>\n );\n}\n","import type { Publication } from '../types/publication';\nimport type { SiteSection } from '../types/site';\n\nexport const MENU_BG = '#ECEDF6';\nexport const ITEM_HOVER_BG = '#D8E2FF';\nexport const ITEM_DEFAULT_BG = '#FFFFFF';\n\nexport const DEFAULT_SITE_ID = 'bluestack-es';\n\nexport function getAllPublications(sites: SiteSection[]): Publication[] {\n return sites.flatMap((section) => section.publications);\n}\n\nexport function findPublicationBySlug(\n sites: SiteSection[],\n slug: string,\n): Publication | undefined {\n return getAllPublications(sites).find((p) => String(p.id) === slug);\n}\n\nexport function findPublicationLabel(\n sites: SiteSection[],\n publicationId: string,\n): string {\n const publication = getAllPublications(sites).find(\n (p) => String(p.id) === publicationId,\n );\n return publication?.description ?? 'Seleccionar publicación';\n}\n\nexport function getDefaultPublicationSlug(sites: SiteSection[]): string {\n const first = getAllPublications(sites)[0];\n return first ? String(first.id) : '1';\n}\n\nexport function parsePublicationSlug(slug: string): number {\n const id = Number(slug);\n return Number.isFinite(id) && id > 0 ? id : 1;\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 width: ICON_SLOT_SIZE * 5,\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 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): string {\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return '';\n return date.toLocaleString('es-MX', {\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 [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n\n const badgeContent = useMemo(\n () => (unreadCount > 0 ? unreadCount : undefined),\n [unreadCount],\n );\n\n return (\n <>\n <Tooltip title=\"Notificaciones\">\n <IconButton\n aria-label=\"Notificaciones\"\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 Notificaciones\n </Typography>\n {unreadCount > 0 ? (\n <Typography variant=\"caption\" color=\"m3.onSurfaceVariant\">\n {unreadCount} sin leer\n </Typography>\n ) : null}\n </Box>\n\n {notifications.length === 0 ? (\n <Box sx={{ px: 2, py: 3 }}>\n <Typography\n variant=\"body2\"\n color=\"m3.onSurfaceVariant\"\n sx={{ textAlign: 'center' }}>\n No hay notificaciones\n </Typography>\n </Box>\n ) : (\n <List dense disablePadding sx={{ py: 0.5 }}>\n {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' : 'm3.secondaryContainer',\n '&:hover': {\n bgcolor: item.read ? 'action.hover' : 'm3.secondaryContainer',\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)}\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 { useState } from 'react';\n\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 label: string;\n icon: SvgIconComponent;\n};\n\nconst PROFILE_MENU_ITEMS: ProfileMenuItem[] = [\n { id: 'profile', label: 'My Profile', icon: PersonOutlinedIcon },\n { id: 'webmaster', label: 'Webmaster View', icon: EditOutlinedIcon },\n];\n\nconst SIGN_OFF_ITEM: ProfileMenuItem = {\n id: 'sign-off',\n label: 'Sign off',\n icon: LogoutOutlinedIcon,\n};\n\nfunction ProfileMenuOption({\n label,\n icon: Icon,\n onSelect,\n}: ProfileMenuItem & { onSelect: () => void }) {\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 [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 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=\"Mi perfil\"\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 {PROFILE_MENU_ITEMS.map((item) => (\n <ProfileMenuOption\n key={item.id}\n {...item}\n onSelect={() => handleSelect(item.id)}\n />\n ))}\n <Divider sx={TopBarStyles.sxProfileMenuDivider} />\n <ProfileMenuOption\n {...SIGN_OFF_ITEM}\n onSelect={() => handleSelect(SIGN_OFF_ITEM.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 LanguageOutlinedIcon from '@mui/icons-material/LanguageOutlined';\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 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 trailingActions: { title: string; icon: SvgIconComponent }[] = [\n { title: 'Analíticas', icon: DevicesOtherOutlinedIcon },\n { title: 'Ayuda', 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={sidebarOpen ? 'Cerrar menú lateral' : 'Abrir menú lateral'}\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=\"Nuevo\" icon={AddOutlinedIcon} />\n\n <NotificationsMenu\n unreadCount={notificationUnreadCount}\n notifications={notifications}\n />\n\n <TopBarIconAction title=\"Idioma\" icon={LanguageOutlinedIcon} />\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","'use client';\n\nimport { useState, type ReactNode } from 'react';\n\nimport type { NavBlock } 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';\n\nexport type AppShellProps = {\n pathname: string;\n sites: SiteSection[];\n children: ReactNode;\n notificationUnreadCount: number;\n notifications: DashboardNotification[];\n profile: ProfileGetResponse;\n navBlocks: NavBlock[];\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};\n\nexport function AppShell({\n pathname,\n sites,\n children,\n notificationUnreadCount,\n notifications,\n profile,\n navBlocks,\n primaryLogo,\n brandLogo,\n selectedPublicationId,\n getPublicationHref,\n resolvePublicationImageUrl,\n profileAvatarOptions,\n LinkComponent = DefaultCmsLink,\n}: AppShellProps) {\n const [sidebarOpen, setSidebarOpen] = useState(true);\n\n return (\n <div\n className=\"flex flex-col h-full\"\n style={{ background: 'var(--md-surface-container)' }}>\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 <div className=\"flex flex-1 min-h-0\">\n <Sidebar\n open={sidebarOpen}\n pathname={pathname}\n navBlocks={navBlocks}\n LinkComponent={LinkComponent}\n />\n <main className=\"flex flex-col flex-1 min-w-0 min-h-0 pt-1 pb-3 pr-3 mt-[10px]\">\n {children}\n </main>\n </div>\n </div>\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 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 {children}\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/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/utils/site-selector.ts","../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.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: scheme.secondaryContainer,\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 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 height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n bgcolor: 'm3.surfaceContainer',\n paddingTop: open ? '2rem' : '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';\n\nimport AccountTreeOutlinedIcon from '@mui/icons-material/AccountTreeOutlined';\nimport ArticleOutlinedIcon from '@mui/icons-material/ArticleOutlined';\nimport AssignmentOutlinedIcon from '@mui/icons-material/AssignmentOutlined';\nimport AudioFileOutlinedIcon from '@mui/icons-material/AudioFileOutlined';\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 FormatListBulletedOutlinedIcon from '@mui/icons-material/FormatListBulletedOutlined';\nimport GridViewOutlinedIcon from '@mui/icons-material/GridViewOutlined';\nimport ImageOutlinedIcon from '@mui/icons-material/ImageOutlined';\nimport ImportExportOutlinedIcon from '@mui/icons-material/ImportExportOutlined';\nimport LabelOutlinedIcon from '@mui/icons-material/LabelOutlined';\nimport LayersOutlinedIcon from '@mui/icons-material/LayersOutlined';\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 PollOutlinedIcon from '@mui/icons-material/PollOutlined';\nimport QueueMusicOutlinedIcon from '@mui/icons-material/QueueMusicOutlined';\nimport QuizOutlinedIcon from '@mui/icons-material/QuizOutlined';\nimport RestaurantOutlinedIcon from '@mui/icons-material/RestaurantOutlined';\nimport SearchOutlinedIcon from '@mui/icons-material/SearchOutlined';\nimport ShoppingCartOutlinedIcon from '@mui/icons-material/ShoppingCartOutlined';\nimport SubscriptionsOutlinedIcon from '@mui/icons-material/SubscriptionsOutlined';\nimport ViewCarouselOutlinedIcon from '@mui/icons-material/ViewCarouselOutlined';\nimport ViewListOutlinedIcon from '@mui/icons-material/ViewListOutlined';\n\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 */\nexport const ACCOUNT_NAV_BLOCKS: NavBlock[] = [\n {\n label: 'Comments',\n href: '/comentarios',\n icon: ChatBubbleOutlineOutlinedIcon,\n module: 'COMMENTS',\n },\n {\n label: 'Polls',\n href: '/encuestas',\n icon: PollOutlinedIcon,\n module: 'POLLS',\n },\n {\n label: 'Media',\n href: '/media',\n icon: PermMediaOutlinedIcon,\n defaultOpen: true,\n module: 'MEDIA',\n children: [\n {\n label: 'Audio',\n href: '/media/audios',\n icon: AudioFileOutlinedIcon,\n module: 'AUDIOS',\n },\n {\n label: 'Images',\n href: '/media/imagenes',\n icon: ImageOutlinedIcon,\n module: 'IMAGES',\n },\n {\n label: 'Playlist',\n href: '/media/playlist',\n icon: QueueMusicOutlinedIcon,\n module: 'PLAYLISTS',\n },\n {\n label: 'Videos',\n href: '/media/videos',\n icon: PlayCircleOutlineOutlinedIcon,\n module: 'VIDEOS',\n },\n ],\n },\n {\n label: 'News',\n href: '/noticias',\n icon: ArticleOutlinedIcon,\n module: 'NEWS',\n },\n {\n label: 'Planning',\n href: '/planificacion',\n icon: AssignmentOutlinedIcon,\n module: 'PLANNING',\n },\n {\n label: 'Analytics',\n href: '/analiticas',\n icon: BarChartOutlinedIcon,\n module: 'ANALYTICS',\n },\n { label: 'Tags', href: '/tags', icon: LabelOutlinedIcon, module: 'TAGS' },\n {\n label: 'Trivia',\n href: '/trivias',\n icon: QuizOutlinedIcon,\n module: 'TRIVIAS',\n },\n {\n label: 'Other',\n href: '/otros',\n icon: MoreHorizOutlinedIcon,\n module: 'OTHER',\n children: [\n {\n label: 'News Wires',\n href: '/otros/news-wires',\n icon: AccountTreeOutlinedIcon,\n module: 'NEWSWIRES',\n },\n {\n label: 'Events',\n href: '/otros/eventos',\n icon: EventOutlinedIcon,\n module: 'EVENTS',\n },\n {\n label: 'Pages',\n href: '/otros/paginas',\n icon: ExploreOutlinedIcon,\n module: 'PAGES',\n },\n {\n label: 'Feed',\n href: '/otros/feed',\n icon: FormatListBulletedOutlinedIcon,\n module: 'FEEDS',\n },\n {\n label: 'People',\n href: '/otros/personas',\n icon: PeopleOutlinedIcon,\n module: 'PERSONS',\n },\n {\n label: 'Contributions',\n href: '/otros/contribuciones',\n icon: CreateOutlinedIcon,\n module: 'CONTRIBUTIONS',\n },\n {\n label: 'Recipes',\n href: '/otros/recetas',\n icon: RestaurantOutlinedIcon,\n module: 'RECIPES',\n },\n {\n label: 'Posts',\n href: '/otros/posts',\n icon: ArticleOutlinedIcon,\n module: 'POSTS',\n },\n ],\n },\n {\n label: 'Banners',\n href: '/banners',\n icon: ViewCarouselOutlinedIcon,\n module: 'BANNERS',\n },\n {\n label: 'Blocks',\n href: '/bloques',\n icon: GridViewOutlinedIcon,\n module: 'BLOCKS',\n },\n {\n label: 'Menu',\n href: '/menu',\n icon: ViewListOutlinedIcon,\n module: 'MENUS',\n },\n {\n label: 'Topics',\n href: '/temas',\n icon: BookmarkBorderOutlinedIcon,\n module: 'TOPICS',\n },\n {\n label: 'Advanced search',\n href: '/busqueda',\n icon: SearchOutlinedIcon,\n module: 'ADVANCEDQUERYS',\n },\n {\n label: 'Imports',\n href: '/importaciones',\n icon: ImportExportOutlinedIcon,\n module: 'IMPORTS',\n },\n {\n label: 'Newsletters',\n href: '/newsletters',\n icon: MailOutlineOutlinedIcon,\n module: 'NEWSLETTERS',\n },\n {\n label: 'Notifications',\n href: '/notificaciones',\n icon: NotificationsNoneOutlinedIcon,\n module: 'NOTIFICATIONS',\n },\n {\n label: 'Payments',\n href: '/pagos',\n icon: ShoppingCartOutlinedIcon,\n module: 'PAYMENTS',\n },\n {\n label: 'Plans',\n href: '/planes',\n icon: SubscriptionsOutlinedIcon,\n module: 'PLANS',\n },\n {\n label: 'Reports',\n href: '/reportes',\n icon: BarChartOutlinedIcon,\n module: 'REPORTS',\n },\n {\n label: 'Sections',\n href: '/secciones',\n icon: ViewListOutlinedIcon,\n module: 'SECTIONS',\n },\n {\n label: 'Twitter Feeds',\n href: '/twitter-feeds',\n icon: ChatBubbleOutlineOutlinedIcon,\n module: 'TWITTERS',\n },\n {\n label: 'Users',\n href: '/usuarios',\n icon: PeopleOutlineOutlinedIcon,\n module: 'USERS',\n },\n {\n label: 'Zones',\n href: '/zonas',\n icon: LayersOutlinedIcon,\n module: 'ZONES',\n },\n { label: 'IA', 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 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 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 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}: {\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}) {\n const hasPermission = permissions.find((permission) => permission.module === item.module);\n const collapsed = !open;\n const selected = isPathActive(pathname, item.href);\n const parentSelected = isItemActive(pathname, item);\n const hasChildren = Boolean(item.children?.length);\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 (!hasPermission) return null;\n const content = (\n <>\n {hasChildren && !collapsed ? (\n <IconButton\n size=\"small\"\n aria-label={expanded ? 'Contraer' : 'Expandir'}\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 {item.label}\n </Typography>\n ) : null}\n {hasPermission.isNew && (\n <Box component=\"span\" sx={SidebarStyles.sxBetaChip(open)}>\n {hasPermission.isNew ? 'New' : ''}\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 {item.children!.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 />\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={item.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 {item.children!.map((child) => {\n const ChildIcon = child.icon;\n return (\n <MenuItem\n key={child.href}\n component={LinkComponent}\n href={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={child.label}\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, item.label, row);\n}\n\nfunction NavSection({\n items,\n open,\n LinkComponent,\n pathname,\n permissions,\n}: {\n items: NavLinkItem[];\n open: boolean;\n LinkComponent: CmsLinkComponent;\n pathname: string;\n permissions: Array<NavItemPermissions>;\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 item.children ? () => toggleGroup(item.href) : undefined\n }\n LinkComponent={LinkComponent}\n pathname={pathname}\n />\n ))}\n </>\n );\n}\n\nexport type SidebarProps = {\n open: boolean;\n pathname: string;\n LinkComponent?: CmsLinkComponent;\n permissions: Array<NavItemPermissions>;\n};\n\nexport function Sidebar({\n open,\n pathname,\n permissions,\n LinkComponent = DefaultCmsLink,\n}: SidebarProps) {\n return (\n <Box component=\"aside\" sx={SidebarStyles.sxRoot(open)}>\n <Box sx={SidebarStyles.sxNavScroll}>\n <Box component=\"nav\" aria-label=\"Principal\" sx={SidebarStyles.sxNav(open)}>\n {ACCOUNT_NAV_BLOCKS.map((block, index) => {\n if (Array.isArray(block) && permissions.some((permission) => permission.module === block.module))\n return (\n <NavSection\n permissions={permissions}\n key={`section-${index}`}\n items={block}\n open={open}\n LinkComponent={LinkComponent}\n pathname={pathname}\n />\n );\n return null;\n })}\n </Box>\n </Box>\n </Box>\n );\n}\n","import type { Publication } from '../types/publication';\nimport type { SiteSection } from '../types/site';\n\nexport const MENU_BG = '#ECEDF6';\nexport const ITEM_HOVER_BG = '#D8E2FF';\nexport const ITEM_DEFAULT_BG = '#FFFFFF';\n\nexport const DEFAULT_SITE_ID = 'bluestack-es';\n\nexport function getAllPublications(sites: SiteSection[]): Publication[] {\n return sites.flatMap((section) => section.publications);\n}\n\nexport function findPublicationBySlug(\n sites: SiteSection[],\n slug: string,\n): Publication | undefined {\n return getAllPublications(sites).find((p) => String(p.id) === slug);\n}\n\nexport function findPublicationLabel(\n sites: SiteSection[],\n publicationId: string,\n): string {\n const publication = getAllPublications(sites).find(\n (p) => String(p.id) === publicationId,\n );\n return publication?.description ?? 'Seleccionar publicación';\n}\n\nexport function getDefaultPublicationSlug(sites: SiteSection[]): string {\n const first = getAllPublications(sites)[0];\n return first ? String(first.id) : '1';\n}\n\nexport function parsePublicationSlug(slug: string): number {\n const id = Number(slug);\n return Number.isFinite(id) && id > 0 ? id : 1;\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 width: ICON_SLOT_SIZE * 5,\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 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): string {\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return '';\n return date.toLocaleString('es-MX', {\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 [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n\n const badgeContent = useMemo(\n () => (unreadCount > 0 ? unreadCount : undefined),\n [unreadCount],\n );\n\n return (\n <>\n <Tooltip title=\"Notificaciones\">\n <IconButton\n aria-label=\"Notificaciones\"\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 Notificaciones\n </Typography>\n {unreadCount > 0 ? (\n <Typography variant=\"caption\" color=\"m3.onSurfaceVariant\">\n {unreadCount} sin leer\n </Typography>\n ) : null}\n </Box>\n\n {notifications.length === 0 ? (\n <Box sx={{ px: 2, py: 3 }}>\n <Typography\n variant=\"body2\"\n color=\"m3.onSurfaceVariant\"\n sx={{ textAlign: 'center' }}>\n No hay notificaciones\n </Typography>\n </Box>\n ) : (\n <List dense disablePadding sx={{ py: 0.5 }}>\n {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' : 'm3.secondaryContainer',\n '&:hover': {\n bgcolor: item.read ? 'action.hover' : 'm3.secondaryContainer',\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)}\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 { useState } from 'react';\n\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 label: string;\n icon: SvgIconComponent;\n};\n\nconst PROFILE_MENU_ITEMS: ProfileMenuItem[] = [\n { id: 'profile', label: 'My Profile', icon: PersonOutlinedIcon },\n { id: 'webmaster', label: 'Webmaster View', icon: EditOutlinedIcon },\n];\n\nconst SIGN_OFF_ITEM: ProfileMenuItem = {\n id: 'sign-off',\n label: 'Sign off',\n icon: LogoutOutlinedIcon,\n};\n\nfunction ProfileMenuOption({\n label,\n icon: Icon,\n onSelect,\n}: ProfileMenuItem & { onSelect: () => void }) {\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 [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 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=\"Mi perfil\"\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 {PROFILE_MENU_ITEMS.map((item) => (\n <ProfileMenuOption\n key={item.id}\n {...item}\n onSelect={() => handleSelect(item.id)}\n />\n ))}\n <Divider sx={TopBarStyles.sxProfileMenuDivider} />\n <ProfileMenuOption\n {...SIGN_OFF_ITEM}\n onSelect={() => handleSelect(SIGN_OFF_ITEM.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 LanguageOutlinedIcon from '@mui/icons-material/LanguageOutlined';\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 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 trailingActions: { title: string; icon: SvgIconComponent }[] = [\n { title: 'Analíticas', icon: DevicesOtherOutlinedIcon },\n { title: 'Ayuda', 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={sidebarOpen ? 'Cerrar menú lateral' : 'Abrir menú lateral'}\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=\"Nuevo\" icon={AddOutlinedIcon} />\n\n <NotificationsMenu\n unreadCount={notificationUnreadCount}\n notifications={notifications}\n />\n\n <TopBarIconAction title=\"Idioma\" icon={LanguageOutlinedIcon} />\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","'use client';\n\nimport { useState, type ReactNode } from 'react';\n\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';\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};\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}: AppShellProps) {\n const [sidebarOpen, setSidebarOpen] = useState(true);\n\n return (\n <div\n className=\"flex flex-col h-full\"\n style={{ background: 'var(--md-surface-container)' }}>\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 <div className=\"flex flex-1 min-h-0\">\n <Sidebar\n open={sidebarOpen}\n pathname={pathname}\n LinkComponent={LinkComponent}\n permissions={permissions}\n />\n <main className=\"flex flex-col flex-1 min-w-0 min-h-0 pt-1 pb-3 pr-3 mt-[10px]\">\n {children}\n </main>\n </div>\n </div>\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 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 {children}\n </ThemeProvider>\n </AppRouterCacheProvider>\n );\n}\n"],"mappings":"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AAS;EACT,YAAY;EACZ,gBAAgB;CAClB;AACF,GCrLa,IAAiC;CAC5C;EACE,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;CACV;CACA;EACE,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;CACV;CACA;EACE,OAAO;EACP,MAAM;EACN,MAAM;EACN,aAAa;EACb,QAAQ;EACR,UAAU;GACR;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;EACF;CACF;CACA;EACE,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;CACV;CACA;EACE,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;CACV;CACA;EACE,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;CACV;CACA;EAAE,OAAO;EAAQ,MAAM;EAAS,MAAM;EAAmB,QAAQ;CAAO;CACxE;EACE,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;CACV;CACA;EACE,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;EACR,UAAU;GACR;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;GACA;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;GACV;EACF;CACF;CACA;EACE,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;CACV;CACA;EAC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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sass-cms-template-common",
3
- "version": "0.0.0",
3
+ "version": "0.0.2",
4
4
  "description": "Componentes y utilidades compartidas para CMS Bluestack",
5
5
  "type": "module",
6
6
  "engines": {
@@ -65,5 +65,8 @@
65
65
  "typescript-eslint": "^8.59.2",
66
66
  "vite": "^8.0.12",
67
67
  "vite-plugin-dts": "^4.5.4"
68
+ },
69
+ "dependencies": {
70
+ "sass-cms-template-common": "^0.0.0"
68
71
  }
69
72
  }