@trii/components 3.1.7 → 3.1.8

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.
Files changed (47) hide show
  1. package/dist/cjs/index.js +44 -43
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/theme.js.map +1 -1
  4. package/dist/esm/index.js +43 -42
  5. package/dist/esm/index.js.map +1 -1
  6. package/dist/esm/theme.js.map +1 -1
  7. package/dist/index.d.ts +10 -0
  8. package/dist/types/components/ContactSidebar/ChatDetailsSidebar.d.ts +10 -0
  9. package/dist/types/components/ContactSidebar/components/PanelView/components/ContactTickets/ContactTickets.d.ts +12 -0
  10. package/dist/types/components/ContactSidebar/components/PanelView/components/ContactTickets/components/ContactTicketItem.d.ts +11 -0
  11. package/dist/types/components/ContactSidebar/components/PanelView/components/ContactTickets/components/ContactTicketsSection.d.ts +18 -0
  12. package/dist/types/components/ContactSidebar/components/PanelView/components/ContactTickets/components/RelativeTime.d.ts +11 -0
  13. package/dist/types/components/ContactSidebar/components/PanelView/components/ContactTickets/index.d.ts +1 -0
  14. package/dist/types/components/ContactSidebar/components/PanelView/components/index.d.ts +1 -0
  15. package/dist/types/components/ContactSidebar/components/tabIndexes.d.ts +7 -0
  16. package/dist/types/components/ContactSidebar/context/SidebarPropsContext.d.ts +7 -0
  17. package/dist/types/components/ContactSidebar/context/types/TabName.d.ts +1 -1
  18. package/dist/types/components/ContactSidebar/hooks/useContactTickets.d.ts +30 -0
  19. package/dist/types/components/ContactSidebar/hooks/useNow.d.ts +2 -0
  20. package/dist/types/components/ContactSidebar/hooks/useTicketStatuses.d.ts +8 -0
  21. package/dist/types/components/ContactSidebar/services/ticketsApi.d.ts +29 -0
  22. package/dist/types/components/ContactSidebar/services/urls.d.ts +1 -0
  23. package/dist/types/components/ContactSidebar/types/tickets.d.ts +60 -0
  24. package/dist/types/components/ContactSidebar/utils/formatRelativeTime.d.ts +9 -0
  25. package/dist/types/components/ContactSidebar/utils/minuteTicker.d.ts +3 -0
  26. package/package.json +1 -1
  27. package/dist/types/asyncState/__tests__/asyncState.test.d.ts +0 -1
  28. package/dist/types/asyncState/__tests__/useAsyncData.test.d.ts +0 -1
  29. package/dist/types/components/AsyncContent/__tests__/AsyncContent.test.d.ts +0 -1
  30. package/dist/types/components/AsyncContent/__tests__/AsyncContentI18n.test.d.ts +0 -1
  31. package/dist/types/components/ContactInfoPopup/ContactInfoPopup.stories.d.ts +0 -9
  32. package/dist/types/components/ContactSidebar/ContactSidebar.stories.d.ts +0 -58
  33. package/dist/types/components/EditContactModal/EditContactModal.stories.d.ts +0 -9
  34. package/dist/types/components/EventsDialog/components/LinkContactsSelect/styles.d.ts +0 -6
  35. package/dist/types/components/EventsDialog/components/LocationTextField/MapLocationPicker.d.ts +0 -8
  36. package/dist/types/components/EventsDialog/components/LocationTextField/SendLocation/components/GoogleMap/index.d.ts +0 -1
  37. package/dist/types/components/EventsDialog/components/LocationTextField/SendLocation/components/index.d.ts +0 -1
  38. package/dist/types/components/EventsDialog/components/LocationTextField/SendLocation/index.d.ts +0 -3
  39. package/dist/types/components/EventsDialog/hooks/index.d.ts +0 -9
  40. package/dist/types/components/EventsDialog/hooks/useSelect.d.ts +0 -14
  41. package/dist/types/components/EventsDialog/utils/eventValidation.d.ts +0 -37
  42. package/dist/types/components/EventsDialog/utils/googleMapsUtils.d.ts +0 -5
  43. package/dist/types/components/EventsDialog/utils/keyboardNavigation.d.ts +0 -24
  44. package/dist/types/components/PanelErrorBoundary/__tests__/PanelErrorBoundary.test.d.ts +0 -1
  45. package/dist/types/theme/MuiComponentsConfig.test.d.ts +0 -1
  46. package/dist/types/theme/themePreference.test.d.ts +0 -1
  47. package/dist/types/theme/themeProvider.test.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sources":["../../src/theme/darkThemeComponents.ts","../../src/theme/MuiComponentsConfig.ts","../../src/theme/themeActionTypes.ts","../../src/theme/themePreference.ts","../../src/theme/themePersistence.ts","../../src/theme/themeProvider.ts","../../src/theme/themeSlice.ts"],"sourcesContent":["import { alpha, createTheme, Theme } from '@mui/material/styles';\n\n/** Aplica los ajustes de contraste compartidos exclusivamente en modo oscuro. */\nexport const applyDarkThemeComponents = (sharedTheme: Theme): Theme => {\n if (sharedTheme.palette.mode !== 'dark') return sharedTheme;\n\n const { palette } = sharedTheme;\n const strongOutline = alpha(palette.text.secondary, 0.5);\n const hoverOutline = alpha(palette.text.secondary, 0.72);\n\n return createTheme(sharedTheme, {\n components: {\n MuiSelect: {\n defaultProps: {\n MenuProps: {\n PaperProps: {\n sx: {\n backgroundColor: palette.background.dropdownMenu,\n backgroundImage: 'none',\n },\n },\n },\n },\n },\n MuiTypography: {\n styleOverrides: {\n // El microfrontend no controla el color del body de root. Mantener\n // un foreground explícito evita heredar texto oscuro del shell.\n root: { color: palette.text.primary },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n backgroundColor: palette.background.paper,\n backgroundImage: 'none',\n },\n outlined: {\n borderColor: palette.divider,\n },\n },\n },\n MuiCard: {\n styleOverrides: {\n root: {\n backgroundColor: palette.background.paper,\n backgroundImage: 'none',\n borderColor: palette.divider,\n },\n },\n },\n MuiDialog: {\n styleOverrides: {\n paper: {\n backgroundColor: palette.background.dropdownMenu,\n backgroundImage: 'none',\n border: `1px solid ${palette.divider}`,\n },\n },\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n backgroundColor: palette.background.dropdownMenu,\n backgroundImage: 'none',\n borderColor: palette.divider,\n },\n },\n },\n MuiPopover: {\n styleOverrides: {\n paper: {\n backgroundColor: palette.background.dropdownMenu,\n backgroundImage: 'none',\n border: `1px solid ${palette.divider}`,\n },\n },\n },\n MuiMenu: {\n styleOverrides: {\n paper: {\n backgroundColor: palette.background.dropdownMenu,\n backgroundImage: 'none',\n border: `1px solid ${palette.divider}`,\n },\n },\n },\n MuiOutlinedInput: {\n styleOverrides: {\n root: {\n backgroundColor: alpha(palette.background.default, 0.34),\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: strongOutline,\n },\n '&:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: hoverOutline,\n },\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: palette.primary.light,\n borderWidth: 2,\n },\n '&.Mui-disabled .MuiOutlinedInput-notchedOutline': {\n borderColor: alpha(palette.text.disabled, 0.36),\n },\n },\n input: {\n '&::placeholder': {\n color: palette.text.disabled,\n opacity: 1,\n },\n },\n },\n },\n MuiInputLabel: {\n styleOverrides: {\n root: {\n color: palette.text.secondary,\n '&.Mui-focused': { color: palette.primary.light },\n '&.Mui-disabled': { color: palette.text.disabled },\n },\n },\n },\n MuiButton: {\n styleOverrides: {\n root: {\n '&.Mui-disabled': {\n color: palette.text.disabled,\n borderColor: alpha(palette.text.disabled, 0.38),\n },\n },\n containedPrimary: {\n backgroundColor: palette.primary.main,\n color: palette.primary.contrastText,\n '&:hover': { backgroundColor: palette.primary.dark },\n },\n outlined: {\n color: palette.primary.light,\n borderColor: alpha(palette.primary.light, 0.72),\n '&:hover': {\n color: palette.primary.light,\n borderColor: palette.primary.light,\n backgroundColor: alpha(palette.primary.light, 0.1),\n },\n },\n textPrimary: {\n color: palette.primary.light,\n '&:hover': {\n backgroundColor: alpha(palette.primary.light, 0.1),\n },\n },\n },\n },\n MuiIconButton: {\n styleOverrides: {\n root: {\n color: palette.text.secondary,\n '&:hover': {\n color: palette.text.primary,\n backgroundColor: palette.action.hover,\n },\n '&.MuiIconButton-colorPrimary': { color: palette.primary.light },\n '&.MuiIconButton-colorError': { color: palette.error.light },\n '&.Mui-disabled': { color: palette.text.disabled },\n },\n },\n },\n MuiChip: {\n styleOverrides: {\n root: {\n color: palette.text.primary,\n backgroundColor: alpha(palette.text.primary, 0.07),\n borderColor: strongOutline,\n '& .MuiChip-icon': { color: 'inherit' },\n '&.MuiChip-colorSuccess': {\n color: palette.success.light,\n backgroundColor: palette.success.dark,\n borderColor: alpha(palette.success.light, 0.46),\n },\n '&.MuiChip-colorWarning': {\n color: palette.warning.light,\n backgroundColor: palette.warning.dark,\n borderColor: alpha(palette.warning.light, 0.46),\n },\n '&.MuiChip-colorError': {\n color: palette.error.light,\n backgroundColor: palette.error.dark,\n borderColor: alpha(palette.error.light, 0.46),\n },\n '&.MuiChip-colorInfo': {\n color: palette.info.light,\n backgroundColor: palette.info.dark,\n borderColor: alpha(palette.info.light, 0.46),\n },\n },\n },\n },\n MuiAlert: {\n styleOverrides: {\n root: { border: '1px solid currentColor' },\n standardSuccess: {\n color: palette.success.light,\n backgroundColor: palette.success.dark,\n },\n standardWarning: {\n color: palette.warning.light,\n backgroundColor: palette.warning.dark,\n },\n standardError: {\n color: palette.error.light,\n backgroundColor: palette.error.dark,\n },\n standardInfo: {\n color: palette.info.light,\n backgroundColor: palette.info.dark,\n },\n },\n },\n MuiTableHead: {\n styleOverrides: {\n root: { backgroundColor: palette.cellHeader },\n },\n },\n MuiTableCell: {\n styleOverrides: {\n root: { borderColor: palette.divider },\n head: { color: palette.text.primary, fontWeight: 700 },\n },\n },\n MuiTableRow: {\n styleOverrides: {\n root: {\n '&:hover': { backgroundColor: palette.action.hover },\n '&.Mui-selected': {\n backgroundColor: palette.action.selected,\n '&:hover': { backgroundColor: palette.action.selected },\n },\n },\n },\n },\n MuiTabs: {\n styleOverrides: {\n indicator: { backgroundColor: palette.primary.light },\n },\n },\n MuiTab: {\n styleOverrides: {\n root: {\n color: palette.text.secondary,\n '&.Mui-selected': { color: palette.primary.light },\n },\n },\n },\n MuiSwitch: {\n styleOverrides: {\n switchBase: {\n color: palette.text.disabled,\n '&.Mui-checked': {\n color: palette.primary.light,\n '& + .MuiSwitch-track': {\n backgroundColor: palette.primary.light,\n opacity: 0.5,\n },\n },\n },\n track: {\n backgroundColor: palette.text.disabled,\n opacity: 0.34,\n },\n },\n },\n MuiTooltip: {\n styleOverrides: {\n tooltip: {\n color: palette.text.primary,\n backgroundColor: palette.background.tooltip,\n border: `1px solid ${strongOutline}`,\n },\n arrow: { color: palette.background.tooltip },\n },\n },\n MuiDivider: {\n styleOverrides: {\n root: { borderColor: palette.divider },\n },\n },\n MuiLink: {\n styleOverrides: {\n root: { color: palette.primary.light },\n },\n },\n },\n });\n};\n","import { createTheme, Theme } from '@mui/material';\nimport { applyDarkThemeComponents } from './darkThemeComponents';\r\n\r\n/**\r\n * Ajustes que difieren entre apps. Los valores por defecto son los que ya\r\n * usaba el paquete, asi que omitir las opciones no cambia nada.\r\n */\r\nexport interface MuiComponentsConfigOptions {\r\n /**\r\n * Fondo del modal y su backdrop en transparente. Lo usan header y home;\r\n * contacts lo tenia desactivado a proposito.\r\n */\r\n transparentModal?: boolean;\r\n /** z-index del popper del Autocomplete. Header necesita 1; el resto, 11. */\r\n autocompleteZIndex?: number;\r\n}\r\n\r\nconst MuiComponentsConfig = (\r\n themeRedux: Theme,\r\n options: MuiComponentsConfigOptions = {}\r\n): Theme => {\r\n const { transparentModal = false, autocompleteZIndex = 11 } = options;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const bg = themeRedux.palette.background as any;\r\n\r\n const sharedTheme = createTheme({\r\n ...themeRedux,\r\n components: {\r\n MuiSelect: {\r\n defaultProps: {\r\n MenuProps: {\r\n PaperProps: {\r\n sx: {\r\n backgroundColor: bg.panel,\r\n backgroundImage:\r\n 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n MuiAutocomplete: {\r\n styleOverrides: {\r\n popper: {\r\n zIndex: autocompleteZIndex,\r\n '& div': {\r\n backgroundColor: bg.panel,\r\n },\r\n },\r\n },\r\n },\r\n MuiPaper: {\r\n styleOverrides: {\r\n root: {\r\n backgroundColor: bg.panel,\r\n backgroundImage:\r\n 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\r\n },\r\n },\r\n },\r\n MuiMenu: {\r\n styleOverrides: {\r\n paper: {\r\n backgroundColor: bg.panel,\r\n backgroundImage:\r\n 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\r\n },\r\n },\r\n },\r\n MuiList: {\r\n styleOverrides: {\r\n root: {\r\n padding: 0,\r\n },\r\n },\r\n },\r\n MuiModal: {\r\n styleOverrides: {\r\n root: transparentModal\r\n ? {\r\n background: 'transparent',\r\n '& .MuiBackdrop-root': {\r\n background: 'transparent',\r\n border: 'none',\r\n },\r\n }\r\n : {},\r\n },\r\n },\r\n MuiTypography: {\r\n styleOverrides: {\r\n root: {\r\n color: themeRedux.palette.text.primary,\r\n },\r\n },\r\n },\r\n MuiChip: {\r\n styleOverrides: {\r\n root: {\r\n color: themeRedux.palette.text.primary,\r\n border: '1px solid rgba(0, 0, 0, 0.1)',\r\n borderRadius: '4px',\r\n height: '20px',\r\n fontSize: '0.7125rem',\r\n },\r\n },\r\n },\r\n MuiListSubheader: {\r\n styleOverrides: {\r\n root: {\r\n backgroundColor: bg.accordionHeader,\r\n },\r\n },\r\n },\r\n MuiButton: {\r\n styleOverrides: {\r\n outlined: {\r\n color:\r\n themeRedux.palette.mode === 'light'\r\n ? themeRedux.palette.primary.dark\r\n : themeRedux.palette.primary.light,\r\n borderColor:\r\n themeRedux.palette.mode === 'light'\r\n ? themeRedux.palette.primary.dark\r\n : themeRedux.palette.primary.light,\r\n '&:hover': {\r\n borderColor:\r\n themeRedux.palette.mode === 'light'\r\n ? themeRedux.palette.primary.main\r\n : themeRedux.palette.primary.light,\r\n color:\r\n themeRedux.palette.mode === 'light'\r\n ? themeRedux.palette.primary.main\r\n : themeRedux.palette.primary.light,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n });\r\n\r\n return applyDarkThemeComponents(sharedTheme);\r\n};\r\n\r\nexport default MuiComponentsConfig;\r\n","import { createAction } from '@reduxjs/toolkit';\nimport type { ThemeName } from './themePreference';\n\n// The reducer handles the fulfilled action without importing the HTTP thunk.\nexport const UPDATE_THEME_TYPE = 'Theme/updateTheme';\nexport const themeUpdateFulfilled = /*#__PURE__*/ createAction<{ theme: ThemeName }>(\n `${UPDATE_THEME_TYPE}/fulfilled`\n);\r\n","\nexport type ThemePreference = 'light' | 'dark' | 'system';\nexport type ResolvedTheme = 'light' | 'dark';\nexport const THEME_PREFERENCES: readonly ThemePreference[] = ['light', 'dark', 'system'];\nexport const LEGACY_THEME_NAMES = [\"lightBlueIndigo\",\"lightBlue\",\"lightRed\",\"lightGreen\",\"lightPink\",\"lightPurple\",\"lightTeal\",\"lightLime\",\"lightYellow\",\"lightAmber\",\"lightOrange\",\"lightBrown\",\"lightGray\",\"darkBlue\",\"darkBlack\"] as const;\nexport type LegacyThemeName = typeof LEGACY_THEME_NAMES[number];\nexport type ThemeName = ThemePreference | LegacyThemeName;\n\nexport const isValidThemeName = (name: string): name is ThemeName =>\n (THEME_PREFERENCES as readonly string[]).includes(name) || (LEGACY_THEME_NAMES as readonly string[]).includes(name);\n\n/** Missing/unknown preferences follow the OS. Existing choices keep their mode. */\nexport const normalizeThemePreference = (name?: string | null): ThemePreference => {\n if (name === 'light' || name === 'dark' || name === 'system') return name;\n if (name && (LEGACY_THEME_NAMES as readonly string[]).includes(name)) return name.startsWith('dark') ? 'dark' : 'light';\n return 'system';\n};\nconst systemMedia = (): MediaQueryList | undefined =>\n typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n ? window.matchMedia('(prefers-color-scheme: dark)') : undefined;\nexport const resolveThemePreference = (preference: ThemePreference, systemDark = systemMedia()?.matches ?? false): ResolvedTheme =>\n preference === 'system' ? (systemDark ? 'dark' : 'light') : preference;\n\n/** Emits immediately; caller must unsubscribe on unmount/preference change.\n * Does not persist or call an API when the OS appearance changes.\n */\nexport const observeThemePreference = (preference: ThemePreference, listener: (mode: ResolvedTheme) => void): (() => void) => {\n if (preference !== 'system') { listener(preference); return () => {}; }\n const media = systemMedia();\n listener(resolveThemePreference(preference, media?.matches ?? false));\n if (!media) return () => {};\n const change = (event: MediaQueryListEvent) => listener(event.matches ? 'dark' : 'light');\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', change);\n return () => media.removeEventListener('change', change);\n }\n media.addListener(change);\n return () => media.removeListener(change);\n};\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport axios from 'axios';\nimport type { ThemeRootState } from './themeSlice';\nimport { isValidThemeName, ThemeName } from './themePreference';\nimport { UPDATE_THEME_TYPE } from './themeActionTypes';\n\nconst themeUrl = (spaceId: string) =>\n `https://agent-api.trii.app/api/v1/settings/${spaceId}/user/setTheme`;\n\n/** Guarda el tema elegido en el backend. */\nexport const updateTheme = /*#__PURE__*/ createAsyncThunk<\n { theme: ThemeName },\n ThemeName,\n { state: ThemeRootState }\n>(UPDATE_THEME_TYPE, async (theme, { getState }) => {\n const { uid = '', spaceId = '' } = getState().User.user ?? {};\n const themeJson = JSON.stringify({ theme, uid });\n\n const response = await axios.put<{ theme: ThemeName }>(\n themeUrl(spaceId),\n themeJson,\n { headers: { 'Content-Type': 'application/json' } }\n );\n if (!isValidThemeName(response.data.theme)) throw new Error('Invalid theme response');\n return response.data;\n});\n\n","import { createTheme, Theme } from '@mui/material'\r\n\r\n// ─── Extensión de tipos de MUI ──────────────────────────────────────────────\r\ndeclare module '@mui/material/styles' {\r\n interface TypeBackground {\r\n mainCenter: string;\r\n mainGradient: string;\r\n navMenu: string;\r\n dropdownMenu: string;\r\n panel: string;\r\n tooltip: string;\r\n accordionHeader: string;\r\n panelHeader: string;\r\n panelCenter: string;\r\n panelGradient: string;\r\n selectedItem: string;\r\n }\r\n\r\n interface TypeText {\r\n colorMain: string;\r\n }\r\n\r\n interface Palette {\r\n containerBox: {\r\n default: string;\r\n main: string;\r\n };\r\n dropdownBox: string;\r\n color: {\r\n icons: string;\r\n };\r\n cellHeader: string;\r\n Skeleton: {\r\n bg: string;\r\n };\r\n messageBox: string;\r\n boxShadow: string;\r\n disabled: string;\r\n }\r\n\r\n interface PaletteOptions {\r\n containerBox?: {\r\n default?: string;\r\n main?: string;\r\n };\r\n dropdownBox?: string;\r\n color?: {\r\n icons?: string;\r\n };\r\n cellHeader?: string;\r\n Skeleton?: {\r\n bg?: string;\r\n };\r\n messageBox?: string;\r\n boxShadow?: string;\r\n disabled?: string;\r\n }\r\n\r\n interface Theme {\r\n name?: string;\r\n }\r\n\r\n interface ThemeOptions {\r\n name?: string;\r\n }\r\n}\r\n// ────────────────────────────────────────────────────────────────────────────\r\n\r\n\n// Two curated palettes. Primary actions keep the same blue in both modes.\nconst primary = { main: '#246FB5', light: '#78B7F2', dark: '#195A96', contrastText: '#FFFFFF' };\n\nexport const lightTheme: Theme = createTheme({\n name: 'light',\n palette: {\n mode: 'light', contrastThreshold: 4.5, primary,\n secondary: { main: '#526078', light: '#728099', dark: '#38445A', contrastText: '#FFFFFF' },\n error: { main: '#BD3446', light: '#FCECEF', dark: '#932536', contrastText: '#FFFFFF' },\n warning: { main: '#946000', light: '#FFF5DF', dark: '#704800', contrastText: '#FFFFFF' },\n info: { main: '#176B9B', light: '#EAF4FC', dark: '#125174', contrastText: '#FFFFFF' },\n success: { main: '#237547', light: '#EAF6EE', dark: '#185935', contrastText: '#FFFFFF' },\n background: {\n default: '#F4F6FA', paper: '#FFFFFF', mainCenter: '#F4F6FA',\n mainGradient: 'linear-gradient(120deg, #195A96, #246FB5)',\n navMenu: '#EDF1F7', dropdownMenu: '#FFFFFF', panel: '#FFFFFF',\n tooltip: '#EDF1F7', accordionHeader: '#EDF1F7', panelHeader: '#EDF1F7',\n panelCenter: '#F8FAFD', panelGradient: '#EDF1F7', selectedItem: '#E5EFFA'\n },\n text: { primary: '#202C3E', secondary: '#526078', disabled: '#7C8798', colorMain: '#202C3E' },\n action: { active: '#526078', hover: 'rgba(36, 111, 181, 0.06)', selected: 'rgba(36, 111, 181, 0.12)', disabled: '#8893A3', disabledBackground: '#E8ECF2' },\n divider: '#D7DEE9', containerBox: { default: '#FFFFFF', main: '#F8FAFD' },\n dropdownBox: '#FFFFFF', color: { icons: '#526078' }, cellHeader: '#EDF1F7',\n Skeleton: { bg: '#E4EAF2' }, messageBox: '#E5EFFA', boxShadow: 'rgba(25, 42, 66, 0.12)', disabled: '#8893A3'\n }\n});\n\nexport const darkTheme: Theme = createTheme({\n name: 'dark',\n palette: {\n mode: 'dark', contrastThreshold: 4.5, primary,\n secondary: { main: '#B7B5D9', light: '#D6D4EF', dark: '#46415F', contrastText: '#171824' },\n error: { main: '#F06B7A', light: '#FF9AA8', dark: '#4A1D24', contrastText: '#2B0D12' },\n warning: { main: '#E5A93B', light: '#FFD27A', dark: '#493515', contrastText: '#2A1B05' },\n info: { main: '#4FAFE8', light: '#7CCBFF', dark: '#123955', contrastText: '#082033' },\n success: { main: '#43C17A', light: '#75E0A7', dark: '#143D2B', contrastText: '#092116' },\n background: {\n default: '#111520', paper: '#1B2333', mainCenter: '#151C2A',\n mainGradient: 'linear-gradient(120deg, #131B2B, #242237)',\n navMenu: '#0E121C', dropdownMenu: '#252D40', panel: '#1B2333',\n tooltip: '#30384F', accordionHeader: '#20283A', panelHeader: '#20283A',\n panelCenter: '#222B3E', panelGradient: '#2C2B40', selectedItem: '#293E59'\n },\n text: { primary: '#F1F4FA', secondary: '#BBC6D8', disabled: '#8793A6', colorMain: '#F1F4FA' },\n action: { active: '#BBC6D8', hover: 'rgba(241, 244, 250, 0.07)', selected: 'rgba(120, 183, 242, 0.16)', disabled: 'rgba(187, 198, 216, 0.45)', disabledBackground: 'rgba(187, 198, 216, 0.10)' },\n divider: 'rgba(187, 198, 216, 0.22)', containerBox: { default: '#1B2333', main: '#222B3E' },\n dropdownBox: '#252D40', color: { icons: '#BBC6D8' }, cellHeader: '#20283A',\n Skeleton: { bg: '#30384F' }, messageBox: '#203953', boxShadow: 'rgba(0, 0, 0, 0.40)', disabled: 'rgba(187, 198, 216, 0.45)'\n }\n});\n\n// Keep export names and theme.name for older selectors. Palettes are unified.\n/** @deprecated Use lightTheme. */\nexport const lightBlueIndigo: Theme = { ...lightTheme, name: 'lightBlueIndigo' };\n/** @deprecated Use lightTheme. */\nexport const lightBlue: Theme = { ...lightTheme, name: 'lightBlue' };\n/** @deprecated Use lightTheme. */\nexport const lightRed: Theme = { ...lightTheme, name: 'lightRed' };\n/** @deprecated Use lightTheme. */\nexport const lightGreen: Theme = { ...lightTheme, name: 'lightGreen' };\n/** @deprecated Use lightTheme. */\nexport const lightPink: Theme = { ...lightTheme, name: 'lightPink' };\n/** @deprecated Use lightTheme. */\nexport const lightPurple: Theme = { ...lightTheme, name: 'lightPurple' };\n/** @deprecated Use lightTheme. */\nexport const lightTeal: Theme = { ...lightTheme, name: 'lightTeal' };\n/** @deprecated Use lightTheme. */\nexport const lightLime: Theme = { ...lightTheme, name: 'lightLime' };\n/** @deprecated Use lightTheme. */\nexport const lightYellow: Theme = { ...lightTheme, name: 'lightYellow' };\n/** @deprecated Use lightTheme. */\nexport const lightAmber: Theme = { ...lightTheme, name: 'lightAmber' };\n/** @deprecated Use lightTheme. */\nexport const lightOrange: Theme = { ...lightTheme, name: 'lightOrange' };\n/** @deprecated Use lightTheme. */\nexport const lightBrown: Theme = { ...lightTheme, name: 'lightBrown' };\n/** @deprecated Use lightTheme. */\nexport const lightGray: Theme = { ...lightTheme, name: 'lightGray' };\n/** @deprecated Use darkTheme. */\nexport const darkBlue: Theme = { ...darkTheme, name: 'darkBlue' };\n/** @deprecated Use darkTheme. */\nexport const darkBlack: Theme = { ...darkTheme, name: 'darkBlack' };\n","import { createSlice, PayloadAction, Draft } from '@reduxjs/toolkit';\nimport { themeUpdateFulfilled } from './themeActionTypes';\nexport { updateTheme } from './themePersistence';\nimport { Theme } from '@mui/material';\nimport { lightTheme, darkTheme } from './themeProvider';\nimport { ThemeName, ThemePreference, ResolvedTheme, normalizeThemePreference, resolveThemePreference } from './themePreference';\nexport { isValidThemeName } from './themePreference';\nexport type { ThemeName } from './themePreference';\n\n\n/**\n * Forma mínima del store que necesita este slice: la app que lo use tiene que\n * tener `Theme` y `User.user.uid`.\n */\nexport interface ThemeRootState {\n User: {\n user: {\n uid: string;\n /** Requerido por `updateTheme`: la URL lo lleva en la ruta. */\n spaceId?: string;\n };\n };\n Theme: ThemeState;\n}\n\n/**\n * `trii-root-front` lee esta clave para pintar el fondo antes de montar los\n * micro-fronts. Si se deja de escribir, se ve un flash del tema equivocado.\n */\nconst THEME_STORAGE_KEY = 'trii-theme';\n\n/** Estado del slice. */\nexport interface ThemeState {\n themeSelected: Theme;\n preference: ThemePreference;\n darkMode: boolean;\n toggleStatus: 'idle' | 'toggled';\n}\n\n/** Lee el tema persistido; si no hay o falla, usa el de por defecto. */\nconst getSavedPreference = (): ThemePreference => {\n try { return normalizeThemePreference(localStorage.getItem(THEME_STORAGE_KEY)); } catch { return 'system'; }\n};\n\n/** Persiste el tema para que `trii-root-front` lo lea en el arranque. */\nconst saveTheme = (theme: ThemeName): void => {\n try {\n localStorage.setItem(THEME_STORAGE_KEY, theme);\n } catch {\n // sin localStorage el tema igual se aplica, solo no persiste\n }\n};\n\nconst savedPreference = getSavedPreference();\nconst savedMode = resolveThemePreference(savedPreference);\nconst initialState: ThemeState = {\n themeSelected: savedMode === 'dark' ? darkTheme : lightTheme,\n preference: savedPreference,\n darkMode: savedMode === 'dark',\n toggleStatus: 'idle',\n};\n\n/** Slice del tema. */\nconst themeSlice = createSlice({\n name: 'Theme',\n initialState,\n reducers: {\n /** Cambia el tema por nombre. */\n toggleTheme: (state, action: PayloadAction<ThemeName>): void => {\n applyPreference(state, action.payload);\n },\n /** Local update from observeThemePreference; never overwrite the saved system choice. */\n systemThemeChanged: (state, action: PayloadAction<ResolvedTheme>): void => {\n if (state.preference !== 'system') return;\n Object.assign(state, { themeSelected: action.payload === 'dark' ? darkTheme : lightTheme, darkMode: action.payload === 'dark', toggleStatus: 'toggled' });\n },\n /** Alterna el modo oscuro. */\n toggleModeTheme: (state): void => {\n applyPreference(state, state.darkMode ? 'light' : 'dark');\n },\n },\n extraReducers: (builder) => {\n builder.addCase(themeUpdateFulfilled, (state, action): void => {\n applyPreference(state, action.payload.theme);\n });\n },\n});\n\nfunction applyPreference(state: Draft<ThemeState>, name: ThemeName): void {\n const preference = normalizeThemePreference(name);\n const mode = resolveThemePreference(preference);\n // Preserve legacy storage names until root is migrated to canonical names.\n saveTheme(name);\n const base = mode === 'dark' ? darkTheme : lightTheme;\n const themeSelected = name === 'system' || name === 'light' || name === 'dark' ? base : { ...base, name };\n Object.assign(state, { preference, themeSelected, darkMode: mode === 'dark', toggleStatus: 'toggled' });\n}\n\nexport const selectThemePreference = (state: ThemeRootState) => state.Theme.preference;\n\nexport const { toggleTheme, toggleModeTheme, systemThemeChanged } = themeSlice.actions;\n\n// Selectores\nexport const selectThemeToggleStatus = (state: ThemeRootState) =>\n state.Theme.toggleStatus;\nexport const selectTheme = (state: ThemeRootState) => state.Theme.themeSelected;\nexport const selectDarkTheme = (state: ThemeRootState) => state.Theme.darkMode;\n\n/**\n * @deprecated Usar `selectTheme`. El prefijo correcto para un selector es\n * `select` (ver Guía de Arquitectura Frontend, sección 4 - Nomenclatura).\n * Se mantiene hasta que los 6 micro-fronts terminen de migrar.\n */\nexport const selectedTheme = selectTheme;\n/**\n * @deprecated Usar `selectDarkTheme`. Mismo motivo que `selectedTheme`.\n */\nexport const selectedDarkTheme = selectDarkTheme;\n\nexport default themeSlice.reducer;\n"],"names":["createTheme"],"mappings":";;;;;AAGa,MAAA,wBAAA,GAA2B,CAAC,WAA8B,KAAA;AACrE,EAAA,IAAI,WAAY,CAAA,OAAA,CAAQ,IAAS,KAAA,MAAA,EAAe,OAAA,WAAA,CAAA;AAEhD,EAAM,MAAA,EAAE,SAAY,GAAA,WAAA,CAAA;AACpB,EAAA,MAAM,aAAgB,GAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,WAAW,GAAG,CAAA,CAAA;AACvD,EAAA,MAAM,YAAe,GAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAEvD,EAAA,OAAO,YAAY,WAAa,EAAA;AAAA,IAC9B,UAAY,EAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,YAAc,EAAA;AAAA,UACZ,SAAW,EAAA;AAAA,YACT,UAAY,EAAA;AAAA,cACV,EAAI,EAAA;AAAA,gBACF,eAAA,EAAiB,QAAQ,UAAW,CAAA,YAAA;AAAA,gBACpC,eAAiB,EAAA,MAAA;AAAA,eACnB;AAAA,aACF;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,MACA,aAAe,EAAA;AAAA,QACb,cAAgB,EAAA;AAAA;AAAA;AAAA,UAGd,IAAM,EAAA,EAAE,KAAO,EAAA,OAAA,CAAQ,KAAK,OAAQ,EAAA;AAAA,SACtC;AAAA,OACF;AAAA,MACA,QAAU,EAAA;AAAA,QACR,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,eAAA,EAAiB,QAAQ,UAAW,CAAA,KAAA;AAAA,YACpC,eAAiB,EAAA,MAAA;AAAA,WACnB;AAAA,UACA,QAAU,EAAA;AAAA,YACR,aAAa,OAAQ,CAAA,OAAA;AAAA,WACvB;AAAA,SACF;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,eAAA,EAAiB,QAAQ,UAAW,CAAA,KAAA;AAAA,YACpC,eAAiB,EAAA,MAAA;AAAA,YACjB,aAAa,OAAQ,CAAA,OAAA;AAAA,WACvB;AAAA,SACF;AAAA,OACF;AAAA,MACA,SAAW,EAAA;AAAA,QACT,cAAgB,EAAA;AAAA,UACd,KAAO,EAAA;AAAA,YACL,eAAA,EAAiB,QAAQ,UAAW,CAAA,YAAA;AAAA,YACpC,eAAiB,EAAA,MAAA;AAAA,YACjB,MAAA,EAAQ,CAAa,UAAA,EAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,WACtC;AAAA,SACF;AAAA,OACF;AAAA,MACA,SAAW,EAAA;AAAA,QACT,cAAgB,EAAA;AAAA,UACd,KAAO,EAAA;AAAA,YACL,eAAA,EAAiB,QAAQ,UAAW,CAAA,YAAA;AAAA,YACpC,eAAiB,EAAA,MAAA;AAAA,YACjB,aAAa,OAAQ,CAAA,OAAA;AAAA,WACvB;AAAA,SACF;AAAA,OACF;AAAA,MACA,UAAY,EAAA;AAAA,QACV,cAAgB,EAAA;AAAA,UACd,KAAO,EAAA;AAAA,YACL,eAAA,EAAiB,QAAQ,UAAW,CAAA,YAAA;AAAA,YACpC,eAAiB,EAAA,MAAA;AAAA,YACjB,MAAA,EAAQ,CAAa,UAAA,EAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,WACtC;AAAA,SACF;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA;AAAA,UACd,KAAO,EAAA;AAAA,YACL,eAAA,EAAiB,QAAQ,UAAW,CAAA,YAAA;AAAA,YACpC,eAAiB,EAAA,MAAA;AAAA,YACjB,MAAA,EAAQ,CAAa,UAAA,EAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,WACtC;AAAA,SACF;AAAA,OACF;AAAA,MACA,gBAAkB,EAAA;AAAA,QAChB,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,eAAiB,EAAA,KAAA,CAAM,OAAQ,CAAA,UAAA,CAAW,SAAS,IAAI,CAAA;AAAA,YACvD,oCAAsC,EAAA;AAAA,cACpC,WAAa,EAAA,aAAA;AAAA,aACf;AAAA,YACA,0CAA4C,EAAA;AAAA,cAC1C,WAAa,EAAA,YAAA;AAAA,aACf;AAAA,YACA,gDAAkD,EAAA;AAAA,cAChD,WAAA,EAAa,QAAQ,OAAQ,CAAA,KAAA;AAAA,cAC7B,WAAa,EAAA,CAAA;AAAA,aACf;AAAA,YACA,iDAAmD,EAAA;AAAA,cACjD,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,aAChD;AAAA,WACF;AAAA,UACA,KAAO,EAAA;AAAA,YACL,gBAAkB,EAAA;AAAA,cAChB,KAAA,EAAO,QAAQ,IAAK,CAAA,QAAA;AAAA,cACpB,OAAS,EAAA,CAAA;AAAA,aACX;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,MACA,aAAe,EAAA;AAAA,QACb,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,KAAA,EAAO,QAAQ,IAAK,CAAA,SAAA;AAAA,YACpB,eAAiB,EAAA,EAAE,KAAO,EAAA,OAAA,CAAQ,QAAQ,KAAM,EAAA;AAAA,YAChD,gBAAkB,EAAA,EAAE,KAAO,EAAA,OAAA,CAAQ,KAAK,QAAS,EAAA;AAAA,WACnD;AAAA,SACF;AAAA,OACF;AAAA,MACA,SAAW,EAAA;AAAA,QACT,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,gBAAkB,EAAA;AAAA,cAChB,KAAA,EAAO,QAAQ,IAAK,CAAA,QAAA;AAAA,cACpB,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,aAChD;AAAA,WACF;AAAA,UACA,gBAAkB,EAAA;AAAA,YAChB,eAAA,EAAiB,QAAQ,OAAQ,CAAA,IAAA;AAAA,YACjC,KAAA,EAAO,QAAQ,OAAQ,CAAA,YAAA;AAAA,YACvB,SAAW,EAAA,EAAE,eAAiB,EAAA,OAAA,CAAQ,QAAQ,IAAK,EAAA;AAAA,WACrD;AAAA,UACA,QAAU,EAAA;AAAA,YACR,KAAA,EAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,YACvB,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,YAC9C,SAAW,EAAA;AAAA,cACT,KAAA,EAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,cACvB,WAAA,EAAa,QAAQ,OAAQ,CAAA,KAAA;AAAA,cAC7B,eAAiB,EAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,aACnD;AAAA,WACF;AAAA,UACA,WAAa,EAAA;AAAA,YACX,KAAA,EAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,YACvB,SAAW,EAAA;AAAA,cACT,eAAiB,EAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,aACnD;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,MACA,aAAe,EAAA;AAAA,QACb,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,KAAA,EAAO,QAAQ,IAAK,CAAA,SAAA;AAAA,YACpB,SAAW,EAAA;AAAA,cACT,KAAA,EAAO,QAAQ,IAAK,CAAA,OAAA;AAAA,cACpB,eAAA,EAAiB,QAAQ,MAAO,CAAA,KAAA;AAAA,aAClC;AAAA,YACA,8BAAgC,EAAA,EAAE,KAAO,EAAA,OAAA,CAAQ,QAAQ,KAAM,EAAA;AAAA,YAC/D,4BAA8B,EAAA,EAAE,KAAO,EAAA,OAAA,CAAQ,MAAM,KAAM,EAAA;AAAA,YAC3D,gBAAkB,EAAA,EAAE,KAAO,EAAA,OAAA,CAAQ,KAAK,QAAS,EAAA;AAAA,WACnD;AAAA,SACF;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,KAAA,EAAO,QAAQ,IAAK,CAAA,OAAA;AAAA,YACpB,eAAiB,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,YACjD,WAAa,EAAA,aAAA;AAAA,YACb,iBAAA,EAAmB,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,YACtC,wBAA0B,EAAA;AAAA,cACxB,KAAA,EAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,cACvB,eAAA,EAAiB,QAAQ,OAAQ,CAAA,IAAA;AAAA,cACjC,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,aAChD;AAAA,YACA,wBAA0B,EAAA;AAAA,cACxB,KAAA,EAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,cACvB,eAAA,EAAiB,QAAQ,OAAQ,CAAA,IAAA;AAAA,cACjC,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,aAChD;AAAA,YACA,sBAAwB,EAAA;AAAA,cACtB,KAAA,EAAO,QAAQ,KAAM,CAAA,KAAA;AAAA,cACrB,eAAA,EAAiB,QAAQ,KAAM,CAAA,IAAA;AAAA,cAC/B,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA,aAC9C;AAAA,YACA,qBAAuB,EAAA;AAAA,cACrB,KAAA,EAAO,QAAQ,IAAK,CAAA,KAAA;AAAA,cACpB,eAAA,EAAiB,QAAQ,IAAK,CAAA,IAAA;AAAA,cAC9B,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,aAC7C;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,MACA,QAAU,EAAA;AAAA,QACR,cAAgB,EAAA;AAAA,UACd,IAAA,EAAM,EAAE,MAAA,EAAQ,wBAAyB,EAAA;AAAA,UACzC,eAAiB,EAAA;AAAA,YACf,KAAA,EAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,YACvB,eAAA,EAAiB,QAAQ,OAAQ,CAAA,IAAA;AAAA,WACnC;AAAA,UACA,eAAiB,EAAA;AAAA,YACf,KAAA,EAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,YACvB,eAAA,EAAiB,QAAQ,OAAQ,CAAA,IAAA;AAAA,WACnC;AAAA,UACA,aAAe,EAAA;AAAA,YACb,KAAA,EAAO,QAAQ,KAAM,CAAA,KAAA;AAAA,YACrB,eAAA,EAAiB,QAAQ,KAAM,CAAA,IAAA;AAAA,WACjC;AAAA,UACA,YAAc,EAAA;AAAA,YACZ,KAAA,EAAO,QAAQ,IAAK,CAAA,KAAA;AAAA,YACpB,eAAA,EAAiB,QAAQ,IAAK,CAAA,IAAA;AAAA,WAChC;AAAA,SACF;AAAA,OACF;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA,EAAE,eAAiB,EAAA,OAAA,CAAQ,UAAW,EAAA;AAAA,SAC9C;AAAA,OACF;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA,EAAE,WAAa,EAAA,OAAA,CAAQ,OAAQ,EAAA;AAAA,UACrC,MAAM,EAAE,KAAA,EAAO,QAAQ,IAAK,CAAA,OAAA,EAAS,YAAY,GAAI,EAAA;AAAA,SACvD;AAAA,OACF;AAAA,MACA,WAAa,EAAA;AAAA,QACX,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,SAAW,EAAA,EAAE,eAAiB,EAAA,OAAA,CAAQ,OAAO,KAAM,EAAA;AAAA,YACnD,gBAAkB,EAAA;AAAA,cAChB,eAAA,EAAiB,QAAQ,MAAO,CAAA,QAAA;AAAA,cAChC,SAAW,EAAA,EAAE,eAAiB,EAAA,OAAA,CAAQ,OAAO,QAAS,EAAA;AAAA,aACxD;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA;AAAA,UACd,SAAW,EAAA,EAAE,eAAiB,EAAA,OAAA,CAAQ,QAAQ,KAAM,EAAA;AAAA,SACtD;AAAA,OACF;AAAA,MACA,MAAQ,EAAA;AAAA,QACN,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,KAAA,EAAO,QAAQ,IAAK,CAAA,SAAA;AAAA,YACpB,gBAAkB,EAAA,EAAE,KAAO,EAAA,OAAA,CAAQ,QAAQ,KAAM,EAAA;AAAA,WACnD;AAAA,SACF;AAAA,OACF;AAAA,MACA,SAAW,EAAA;AAAA,QACT,cAAgB,EAAA;AAAA,UACd,UAAY,EAAA;AAAA,YACV,KAAA,EAAO,QAAQ,IAAK,CAAA,QAAA;AAAA,YACpB,eAAiB,EAAA;AAAA,cACf,KAAA,EAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,cACvB,sBAAwB,EAAA;AAAA,gBACtB,eAAA,EAAiB,QAAQ,OAAQ,CAAA,KAAA;AAAA,gBACjC,OAAS,EAAA,GAAA;AAAA,eACX;AAAA,aACF;AAAA,WACF;AAAA,UACA,KAAO,EAAA;AAAA,YACL,eAAA,EAAiB,QAAQ,IAAK,CAAA,QAAA;AAAA,YAC9B,OAAS,EAAA,IAAA;AAAA,WACX;AAAA,SACF;AAAA,OACF;AAAA,MACA,UAAY,EAAA;AAAA,QACV,cAAgB,EAAA;AAAA,UACd,OAAS,EAAA;AAAA,YACP,KAAA,EAAO,QAAQ,IAAK,CAAA,OAAA;AAAA,YACpB,eAAA,EAAiB,QAAQ,UAAW,CAAA,OAAA;AAAA,YACpC,MAAA,EAAQ,aAAa,aAAa,CAAA,CAAA;AAAA,WACpC;AAAA,UACA,KAAO,EAAA,EAAE,KAAO,EAAA,OAAA,CAAQ,WAAW,OAAQ,EAAA;AAAA,SAC7C;AAAA,OACF;AAAA,MACA,UAAY,EAAA;AAAA,QACV,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA,EAAE,WAAa,EAAA,OAAA,CAAQ,OAAQ,EAAA;AAAA,SACvC;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA,EAAE,KAAO,EAAA,OAAA,CAAQ,QAAQ,KAAM,EAAA;AAAA,SACvC;AAAA,OACF;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACH,CAAA;;ACnRA,MAAM,mBAAsB,GAAA,CAC1B,UACA,EAAA,OAAA,GAAsC,EAC5B,KAAA;AACV,EAAA,MAAM,EAAE,gBAAA,GAAmB,KAAO,EAAA,kBAAA,GAAqB,IAAO,GAAA,OAAA,CAAA;AAE9D,EAAM,MAAA,EAAA,GAAK,WAAW,OAAQ,CAAA,UAAA,CAAA;AAE9B,EAAA,MAAM,cAAcA,aAAY,CAAA;AAAA,IAC9B,GAAG,UAAA;AAAA,IACH,UAAY,EAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,YAAc,EAAA;AAAA,UACZ,SAAW,EAAA;AAAA,YACT,UAAY,EAAA;AAAA,cACV,EAAI,EAAA;AAAA,gBACF,iBAAiB,EAAG,CAAA,KAAA;AAAA,gBACpB,eACE,EAAA,uEAAA;AAAA,eACJ;AAAA,aACF;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,MACA,eAAiB,EAAA;AAAA,QACf,cAAgB,EAAA;AAAA,UACd,MAAQ,EAAA;AAAA,YACN,MAAQ,EAAA,kBAAA;AAAA,YACR,OAAS,EAAA;AAAA,cACP,iBAAiB,EAAG,CAAA,KAAA;AAAA,aACtB;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,MACA,QAAU,EAAA;AAAA,QACR,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,iBAAiB,EAAG,CAAA,KAAA;AAAA,YACpB,eACE,EAAA,uEAAA;AAAA,WACJ;AAAA,SACF;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA;AAAA,UACd,KAAO,EAAA;AAAA,YACL,iBAAiB,EAAG,CAAA,KAAA;AAAA,YACpB,eACE,EAAA,uEAAA;AAAA,WACJ;AAAA,SACF;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,OAAS,EAAA,CAAA;AAAA,WACX;AAAA,SACF;AAAA,OACF;AAAA,MACA,QAAU,EAAA;AAAA,QACR,cAAgB,EAAA;AAAA,UACd,MAAM,gBACF,GAAA;AAAA,YACE,UAAY,EAAA,aAAA;AAAA,YACZ,qBAAuB,EAAA;AAAA,cACrB,UAAY,EAAA,aAAA;AAAA,cACZ,MAAQ,EAAA,MAAA;AAAA,aACV;AAAA,cAEF,EAAC;AAAA,SACP;AAAA,OACF;AAAA,MACA,aAAe,EAAA;AAAA,QACb,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,KAAA,EAAO,UAAW,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,WACjC;AAAA,SACF;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,KAAA,EAAO,UAAW,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,YAC/B,MAAQ,EAAA,8BAAA;AAAA,YACR,YAAc,EAAA,KAAA;AAAA,YACd,MAAQ,EAAA,MAAA;AAAA,YACR,QAAU,EAAA,WAAA;AAAA,WACZ;AAAA,SACF;AAAA,OACF;AAAA,MACA,gBAAkB,EAAA;AAAA,QAChB,cAAgB,EAAA;AAAA,UACd,IAAM,EAAA;AAAA,YACJ,iBAAiB,EAAG,CAAA,eAAA;AAAA,WACtB;AAAA,SACF;AAAA,OACF;AAAA,MACA,SAAW,EAAA;AAAA,QACT,cAAgB,EAAA;AAAA,UACd,QAAU,EAAA;AAAA,YACR,KAAA,EACE,UAAW,CAAA,OAAA,CAAQ,IAAS,KAAA,OAAA,GACxB,UAAW,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,GAC3B,UAAW,CAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA;AAAA,YACjC,WAAA,EACE,UAAW,CAAA,OAAA,CAAQ,IAAS,KAAA,OAAA,GACxB,UAAW,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,GAC3B,UAAW,CAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA;AAAA,YACjC,SAAW,EAAA;AAAA,cACT,WAAA,EACE,UAAW,CAAA,OAAA,CAAQ,IAAS,KAAA,OAAA,GACxB,UAAW,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,GAC3B,UAAW,CAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA;AAAA,cACjC,KAAA,EACE,UAAW,CAAA,OAAA,CAAQ,IAAS,KAAA,OAAA,GACxB,UAAW,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,GAC3B,UAAW,CAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA;AAAA,aACnC;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAA,OAAO,yBAAyB,WAAW,CAAA,CAAA;AAC7C;;AC1IO,MAAM,iBAAoB,GAAA,mBAAA,CAAA;AAC1B,MAAM,oBAAqC,mBAAA,YAAA;AAAA,EAChD,GAAG,iBAAiB,CAAA,UAAA,CAAA;AACtB,CAAA;;ACJO,MAAM,iBAAgD,GAAA,CAAC,OAAS,EAAA,MAAA,EAAQ,QAAQ,EAAA;AAChF,MAAM,qBAAqB,CAAC,iBAAA,EAAkB,WAAY,EAAA,UAAA,EAAW,cAAa,WAAY,EAAA,aAAA,EAAc,WAAY,EAAA,WAAA,EAAY,eAAc,YAAa,EAAA,aAAA,EAAc,YAAa,EAAA,WAAA,EAAY,YAAW,WAAW,CAAA,CAAA;AAItN,MAAA,gBAAA,GAAmB,CAAC,IAC9B,KAAA,iBAAA,CAAwC,SAAS,IAAI,CAAA,IAAM,kBAAyC,CAAA,QAAA,CAAS,IAAI,EAAA;AAGvG,MAAA,wBAAA,GAA2B,CAAC,IAA0C,KAAA;AACjF,EAAA,IAAI,SAAS,OAAW,IAAA,IAAA,KAAS,MAAU,IAAA,IAAA,KAAS,UAAiB,OAAA,IAAA,CAAA;AACrE,EAAI,IAAA,IAAA,IAAS,kBAAyC,CAAA,QAAA,CAAS,IAAI,CAAA,SAAU,IAAK,CAAA,UAAA,CAAW,MAAM,CAAA,GAAI,MAAS,GAAA,OAAA,CAAA;AAChH,EAAO,OAAA,QAAA,CAAA;AACT,EAAA;AACA,MAAM,WAAc,GAAA,MAClB,OAAO,MAAA,KAAW,WAAe,IAAA,OAAO,MAAO,CAAA,UAAA,KAAe,UAC1D,GAAA,MAAA,CAAO,UAAW,CAAA,8BAA8B,CAAI,GAAA,KAAA,CAAA,CAAA;AACnD,MAAM,sBAAyB,GAAA,CAAC,UAA6B,EAAA,UAAA,GAAa,WAAY,EAAA,EAAG,OAAW,IAAA,KAAA,KACzG,UAAe,KAAA,QAAA,GAAY,UAAa,GAAA,MAAA,GAAS,OAAW,GAAA,WAAA;AAKjD,MAAA,sBAAA,GAAyB,CAAC,UAAA,EAA6B,QAA0D,KAAA;AAC5H,EAAA,IAAI,eAAe,QAAU,EAAA;AAAE,IAAA,QAAA,CAAS,UAAU,CAAA,CAAA;AAAG,IAAA,OAAO,MAAM;AAAA,KAAC,CAAA;AAAA,GAAG;AACtE,EAAA,MAAM,QAAQ,WAAY,EAAA,CAAA;AAC1B,EAAA,QAAA,CAAS,sBAAuB,CAAA,UAAA,EAAY,KAAO,EAAA,OAAA,IAAW,KAAK,CAAC,CAAA,CAAA;AACpE,EAAI,IAAA,CAAC,KAAO,EAAA,OAAO,MAAM;AAAA,GAAC,CAAA;AAC1B,EAAA,MAAM,SAAS,CAAC,KAAA,KAA+B,SAAS,KAAM,CAAA,OAAA,GAAU,SAAS,OAAO,CAAA,CAAA;AACxF,EAAI,IAAA,OAAO,KAAM,CAAA,gBAAA,KAAqB,UAAY,EAAA;AAChD,IAAM,KAAA,CAAA,gBAAA,CAAiB,UAAU,MAAM,CAAA,CAAA;AACvC,IAAA,OAAO,MAAM,KAAA,CAAM,mBAAoB,CAAA,QAAA,EAAU,MAAM,CAAA,CAAA;AAAA,GACzD;AACA,EAAA,KAAA,CAAM,YAAY,MAAM,CAAA,CAAA;AACxB,EAAO,OAAA,MAAM,KAAM,CAAA,cAAA,CAAe,MAAM,CAAA,CAAA;AAC1C;;AChCA,MAAM,QAAW,GAAA,CAAC,OAChB,KAAA,CAAA,2CAAA,EAA8C,OAAO,CAAA,cAAA,CAAA,CAAA;AAGhD,MAAM,8BAIX,gBAAA,CAAA,iBAAA,EAAmB,OAAO,KAAO,EAAA,EAAE,UAAe,KAAA;AAClD,EAAM,MAAA,EAAE,GAAM,GAAA,EAAA,EAAI,OAAU,GAAA,EAAA,KAAO,QAAS,EAAA,CAAE,IAAK,CAAA,IAAA,IAAQ,EAAC,CAAA;AAC5D,EAAA,MAAM,YAAY,IAAK,CAAA,SAAA,CAAU,EAAE,KAAA,EAAO,KAAK,CAAA,CAAA;AAE/C,EAAM,MAAA,QAAA,GAAW,MAAM,KAAM,CAAA,GAAA;AAAA,IAC3B,SAAS,OAAO,CAAA;AAAA,IAChB,SAAA;AAAA,IACA,EAAE,OAAA,EAAS,EAAE,cAAA,EAAgB,oBAAqB,EAAA;AAAA,GACpD,CAAA;AACA,EAAI,IAAA,CAAC,iBAAiB,QAAS,CAAA,IAAA,CAAK,KAAK,CAAG,EAAA,MAAM,IAAI,KAAA,CAAM,wBAAwB,CAAA,CAAA;AACpF,EAAA,OAAO,QAAS,CAAA,IAAA,CAAA;AAClB,CAAC;;AC6CD,MAAM,OAAA,GAAU,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA,CAAA;AAEvF,MAAM,aAAoBA,aAAY,CAAA;AAAA,EAC3C,IAAM,EAAA,OAAA;AAAA,EACN,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,OAAA;AAAA,IAAS,iBAAmB,EAAA,GAAA;AAAA,IAAK,OAAA;AAAA,IACvC,SAAA,EAAW,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACzF,KAAA,EAAO,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACrF,OAAA,EAAS,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACvF,IAAA,EAAM,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACpF,OAAA,EAAS,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACvF,UAAY,EAAA;AAAA,MACV,OAAS,EAAA,SAAA;AAAA,MAAW,KAAO,EAAA,SAAA;AAAA,MAAW,UAAY,EAAA,SAAA;AAAA,MAClD,YAAc,EAAA,2CAAA;AAAA,MACd,OAAS,EAAA,SAAA;AAAA,MAAW,YAAc,EAAA,SAAA;AAAA,MAAW,KAAO,EAAA,SAAA;AAAA,MACpD,OAAS,EAAA,SAAA;AAAA,MAAW,eAAiB,EAAA,SAAA;AAAA,MAAW,WAAa,EAAA,SAAA;AAAA,MAC7D,WAAa,EAAA,SAAA;AAAA,MAAW,aAAe,EAAA,SAAA;AAAA,MAAW,YAAc,EAAA,SAAA;AAAA,KAClE;AAAA,IACA,IAAA,EAAM,EAAE,OAAS,EAAA,SAAA,EAAW,WAAW,SAAW,EAAA,QAAA,EAAU,SAAW,EAAA,SAAA,EAAW,SAAU,EAAA;AAAA,IAC5F,MAAA,EAAQ,EAAE,MAAA,EAAQ,SAAW,EAAA,KAAA,EAAO,0BAA4B,EAAA,QAAA,EAAU,0BAA4B,EAAA,QAAA,EAAU,SAAW,EAAA,kBAAA,EAAoB,SAAU,EAAA;AAAA,IACzJ,OAAS,EAAA,SAAA;AAAA,IAAW,YAAc,EAAA,EAAE,OAAS,EAAA,SAAA,EAAW,MAAM,SAAU,EAAA;AAAA,IACxE,WAAa,EAAA,SAAA;AAAA,IAAW,KAAA,EAAO,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,IAAG,UAAY,EAAA,SAAA;AAAA,IACjE,QAAA,EAAU,EAAE,EAAA,EAAI,SAAU,EAAA;AAAA,IAAG,UAAY,EAAA,SAAA;AAAA,IAAW,SAAW,EAAA,wBAAA;AAAA,IAA0B,QAAU,EAAA,SAAA;AAAA,GACrG;AACF,CAAC,EAAA;AAEM,MAAM,YAAmBA,aAAY,CAAA;AAAA,EAC1C,IAAM,EAAA,MAAA;AAAA,EACN,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,MAAA;AAAA,IAAQ,iBAAmB,EAAA,GAAA;AAAA,IAAK,OAAA;AAAA,IACtC,SAAA,EAAW,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACzF,KAAA,EAAO,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACrF,OAAA,EAAS,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACvF,IAAA,EAAM,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACpF,OAAA,EAAS,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,SAAW,EAAA,IAAA,EAAM,SAAW,EAAA,YAAA,EAAc,SAAU,EAAA;AAAA,IACvF,UAAY,EAAA;AAAA,MACV,OAAS,EAAA,SAAA;AAAA,MAAW,KAAO,EAAA,SAAA;AAAA,MAAW,UAAY,EAAA,SAAA;AAAA,MAClD,YAAc,EAAA,2CAAA;AAAA,MACd,OAAS,EAAA,SAAA;AAAA,MAAW,YAAc,EAAA,SAAA;AAAA,MAAW,KAAO,EAAA,SAAA;AAAA,MACpD,OAAS,EAAA,SAAA;AAAA,MAAW,eAAiB,EAAA,SAAA;AAAA,MAAW,WAAa,EAAA,SAAA;AAAA,MAC7D,WAAa,EAAA,SAAA;AAAA,MAAW,aAAe,EAAA,SAAA;AAAA,MAAW,YAAc,EAAA,SAAA;AAAA,KAClE;AAAA,IACA,IAAA,EAAM,EAAE,OAAS,EAAA,SAAA,EAAW,WAAW,SAAW,EAAA,QAAA,EAAU,SAAW,EAAA,SAAA,EAAW,SAAU,EAAA;AAAA,IAC5F,MAAA,EAAQ,EAAE,MAAA,EAAQ,SAAW,EAAA,KAAA,EAAO,2BAA6B,EAAA,QAAA,EAAU,2BAA6B,EAAA,QAAA,EAAU,2BAA6B,EAAA,kBAAA,EAAoB,2BAA4B,EAAA;AAAA,IAC/L,OAAS,EAAA,2BAAA;AAAA,IAA6B,YAAc,EAAA,EAAE,OAAS,EAAA,SAAA,EAAW,MAAM,SAAU,EAAA;AAAA,IAC1F,WAAa,EAAA,SAAA;AAAA,IAAW,KAAA,EAAO,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,IAAG,UAAY,EAAA,SAAA;AAAA,IACjE,QAAA,EAAU,EAAE,EAAA,EAAI,SAAU,EAAA;AAAA,IAAG,UAAY,EAAA,SAAA;AAAA,IAAW,SAAW,EAAA,qBAAA;AAAA,IAAuB,QAAU,EAAA,2BAAA;AAAA,GAClG;AACF,CAAC,EAAA;AAIM,MAAM,eAAyB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,iBAAkB,GAAA;AAExE,MAAM,SAAmB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,WAAY,GAAA;AAE5D,MAAM,QAAkB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,UAAW,GAAA;AAE1D,MAAM,UAAoB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,YAAa,GAAA;AAE9D,MAAM,SAAmB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,WAAY,GAAA;AAE5D,MAAM,WAAqB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,aAAc,GAAA;AAEhE,MAAM,SAAmB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,WAAY,GAAA;AAE5D,MAAM,SAAmB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,WAAY,GAAA;AAE5D,MAAM,WAAqB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,aAAc,GAAA;AAEhE,MAAM,UAAoB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,YAAa,GAAA;AAE9D,MAAM,WAAqB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,aAAc,GAAA;AAEhE,MAAM,UAAoB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,YAAa,GAAA;AAE9D,MAAM,SAAmB,GAAA,EAAE,GAAG,UAAA,EAAY,MAAM,WAAY,GAAA;AAE5D,MAAM,QAAkB,GAAA,EAAE,GAAG,SAAA,EAAW,MAAM,UAAW,GAAA;AAEzD,MAAM,SAAmB,GAAA,EAAE,GAAG,SAAA,EAAW,MAAM,WAAY;;ACzHlE,MAAM,iBAAoB,GAAA,YAAA,CAAA;AAW1B,MAAM,qBAAqB,MAAuB;AAChD,EAAI,IAAA;AAAE,IAAA,OAAO,wBAAyB,CAAA,YAAA,CAAa,OAAQ,CAAA,iBAAiB,CAAC,CAAA,CAAA;AAAA,GAAW,CAAA,MAAA;AAAE,IAAO,OAAA,QAAA,CAAA;AAAA,GAAU;AAC7G,CAAA,CAAA;AAGA,MAAM,SAAA,GAAY,CAAC,KAA2B,KAAA;AAC5C,EAAI,IAAA;AACF,IAAa,YAAA,CAAA,OAAA,CAAQ,mBAAmB,KAAK,CAAA,CAAA;AAAA,GACvC,CAAA,MAAA;AAAA,GAER;AACF,CAAA,CAAA;AAEA,MAAM,kBAAkB,kBAAmB,EAAA,CAAA;AAC3C,MAAM,SAAA,GAAY,uBAAuB,eAAe,CAAA,CAAA;AACxD,MAAM,YAA2B,GAAA;AAAA,EAC/B,aAAA,EAAe,SAAc,KAAA,MAAA,GAAS,SAAY,GAAA,UAAA;AAAA,EAClD,UAAY,EAAA,eAAA;AAAA,EACZ,UAAU,SAAc,KAAA,MAAA;AAAA,EACxB,YAAc,EAAA,MAAA;AAChB,CAAA,CAAA;AAGA,MAAM,aAAa,WAAY,CAAA;AAAA,EAC7B,IAAM,EAAA,OAAA;AAAA,EACN,YAAA;AAAA,EACA,QAAU,EAAA;AAAA;AAAA,IAER,WAAA,EAAa,CAAC,KAAA,EAAO,MAA2C,KAAA;AAC9D,MAAgB,eAAA,CAAA,KAAA,EAAO,OAAO,OAAO,CAAA,CAAA;AAAA,KACvC;AAAA;AAAA,IAEA,kBAAA,EAAoB,CAAC,KAAA,EAAO,MAA+C,KAAA;AACzE,MAAI,IAAA,KAAA,CAAM,eAAe,QAAU,EAAA,OAAA;AACnC,MAAA,MAAA,CAAO,MAAO,CAAA,KAAA,EAAO,EAAE,aAAA,EAAe,OAAO,OAAY,KAAA,MAAA,GAAS,SAAY,GAAA,UAAA,EAAY,UAAU,MAAO,CAAA,OAAA,KAAY,MAAQ,EAAA,YAAA,EAAc,WAAW,CAAA,CAAA;AAAA,KAC1J;AAAA;AAAA,IAEA,eAAA,EAAiB,CAAC,KAAgB,KAAA;AAChC,MAAA,eAAA,CAAgB,KAAO,EAAA,KAAA,CAAM,QAAW,GAAA,OAAA,GAAU,MAAM,CAAA,CAAA;AAAA,KAC1D;AAAA,GACF;AAAA,EACA,aAAA,EAAe,CAAC,OAAY,KAAA;AAC1B,IAAA,OAAA,CAAQ,OAAQ,CAAA,oBAAA,EAAsB,CAAC,KAAA,EAAO,MAAiB,KAAA;AAC7D,MAAgB,eAAA,CAAA,KAAA,EAAO,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,KAC5C,CAAA,CAAA;AAAA,GACH;AACF,CAAC,CAAA,CAAA;AAED,SAAS,eAAA,CAAgB,OAA0B,IAAuB,EAAA;AACxE,EAAM,MAAA,UAAA,GAAa,yBAAyB,IAAI,CAAA,CAAA;AAChD,EAAM,MAAA,IAAA,GAAO,uBAAuB,UAAU,CAAA,CAAA;AAE9C,EAAA,SAAA,CAAU,IAAI,CAAA,CAAA;AACd,EAAM,MAAA,IAAA,GAAO,IAAS,KAAA,MAAA,GAAS,SAAY,GAAA,UAAA,CAAA;AAC3C,EAAM,MAAA,aAAA,GAAgB,IAAS,KAAA,QAAA,IAAY,IAAS,KAAA,OAAA,IAAW,IAAS,KAAA,MAAA,GAAS,IAAO,GAAA,EAAE,GAAG,IAAA,EAAM,IAAK,EAAA,CAAA;AACxG,EAAO,MAAA,CAAA,MAAA,CAAO,KAAO,EAAA,EAAE,UAAY,EAAA,aAAA,EAAe,UAAU,IAAS,KAAA,MAAA,EAAQ,YAAc,EAAA,SAAA,EAAW,CAAA,CAAA;AACxG,CAAA;AAEO,MAAM,qBAAwB,GAAA,CAAC,KAA0B,KAAA,KAAA,CAAM,KAAM,CAAA,WAAA;AAErE,MAAM,EAAE,WAAA,EAAa,eAAiB,EAAA,kBAAA,KAAuB,UAAW,CAAA,QAAA;AAGxE,MAAM,uBAA0B,GAAA,CAAC,KACtC,KAAA,KAAA,CAAM,KAAM,CAAA,aAAA;AACP,MAAM,WAAc,GAAA,CAAC,KAA0B,KAAA,KAAA,CAAM,KAAM,CAAA,cAAA;AAC3D,MAAM,eAAkB,GAAA,CAAC,KAA0B,KAAA,KAAA,CAAM,KAAM,CAAA,SAAA;AAO/D,MAAM,aAAgB,GAAA,YAAA;AAItB,MAAM,iBAAoB,GAAA,gBAAA;AAEjC,mBAAe,UAAW,CAAA,OAAA;;;;"}
1
+ {"version":3,"file":"theme.js","sources":["../../src/theme/darkThemeComponents.ts","../../src/theme/MuiComponentsConfig.ts","../../src/theme/themeActionTypes.ts","../../src/theme/themePreference.ts","../../src/theme/themePersistence.ts","../../src/theme/themeProvider.ts","../../src/theme/themeSlice.ts"],"sourcesContent":["import { alpha, createTheme, Theme } from '@mui/material/styles';\r\n\r\n/** Aplica los ajustes de contraste compartidos exclusivamente en modo oscuro. */\r\nexport const applyDarkThemeComponents = (sharedTheme: Theme): Theme => {\r\n if (sharedTheme.palette.mode !== 'dark') return sharedTheme;\r\n\r\n const { palette } = sharedTheme;\r\n const strongOutline = alpha(palette.text.secondary, 0.5);\r\n const hoverOutline = alpha(palette.text.secondary, 0.72);\r\n\r\n return createTheme(sharedTheme, {\r\n components: {\r\n MuiSelect: {\r\n defaultProps: {\r\n MenuProps: {\r\n PaperProps: {\r\n sx: {\r\n backgroundColor: palette.background.dropdownMenu,\r\n backgroundImage: 'none',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n MuiTypography: {\r\n styleOverrides: {\r\n // El microfrontend no controla el color del body de root. Mantener\r\n // un foreground explícito evita heredar texto oscuro del shell.\r\n root: { color: palette.text.primary },\r\n },\r\n },\r\n MuiPaper: {\r\n styleOverrides: {\r\n root: {\r\n backgroundColor: palette.background.paper,\r\n backgroundImage: 'none',\r\n },\r\n outlined: {\r\n borderColor: palette.divider,\r\n },\r\n },\r\n },\r\n MuiCard: {\r\n styleOverrides: {\r\n root: {\r\n backgroundColor: palette.background.paper,\r\n backgroundImage: 'none',\r\n borderColor: palette.divider,\r\n },\r\n },\r\n },\r\n MuiDialog: {\r\n styleOverrides: {\r\n paper: {\r\n backgroundColor: palette.background.dropdownMenu,\r\n backgroundImage: 'none',\r\n border: `1px solid ${palette.divider}`,\r\n },\r\n },\r\n },\r\n MuiDrawer: {\r\n styleOverrides: {\r\n paper: {\r\n backgroundColor: palette.background.dropdownMenu,\r\n backgroundImage: 'none',\r\n borderColor: palette.divider,\r\n },\r\n },\r\n },\r\n MuiPopover: {\r\n styleOverrides: {\r\n paper: {\r\n backgroundColor: palette.background.dropdownMenu,\r\n backgroundImage: 'none',\r\n border: `1px solid ${palette.divider}`,\r\n },\r\n },\r\n },\r\n MuiMenu: {\r\n styleOverrides: {\r\n paper: {\r\n backgroundColor: palette.background.dropdownMenu,\r\n backgroundImage: 'none',\r\n border: `1px solid ${palette.divider}`,\r\n },\r\n },\r\n },\r\n MuiOutlinedInput: {\r\n styleOverrides: {\r\n root: {\r\n backgroundColor: alpha(palette.background.default, 0.34),\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: strongOutline,\r\n },\r\n '&:hover .MuiOutlinedInput-notchedOutline': {\r\n borderColor: hoverOutline,\r\n },\r\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\r\n borderColor: palette.primary.light,\r\n borderWidth: 2,\r\n },\r\n '&.Mui-disabled .MuiOutlinedInput-notchedOutline': {\r\n borderColor: alpha(palette.text.disabled, 0.36),\r\n },\r\n },\r\n input: {\r\n '&::placeholder': {\r\n color: palette.text.disabled,\r\n opacity: 1,\r\n },\r\n },\r\n },\r\n },\r\n MuiInputLabel: {\r\n styleOverrides: {\r\n root: {\r\n color: palette.text.secondary,\r\n '&.Mui-focused': { color: palette.primary.light },\r\n '&.Mui-disabled': { color: palette.text.disabled },\r\n },\r\n },\r\n },\r\n MuiButton: {\r\n styleOverrides: {\r\n root: {\r\n '&.Mui-disabled': {\r\n color: palette.text.disabled,\r\n borderColor: alpha(palette.text.disabled, 0.38),\r\n },\r\n },\r\n containedPrimary: {\r\n backgroundColor: palette.primary.main,\r\n color: palette.primary.contrastText,\r\n '&:hover': { backgroundColor: palette.primary.dark },\r\n },\r\n outlined: {\r\n color: palette.primary.light,\r\n borderColor: alpha(palette.primary.light, 0.72),\r\n '&:hover': {\r\n color: palette.primary.light,\r\n borderColor: palette.primary.light,\r\n backgroundColor: alpha(palette.primary.light, 0.1),\r\n },\r\n },\r\n textPrimary: {\r\n color: palette.primary.light,\r\n '&:hover': {\r\n backgroundColor: alpha(palette.primary.light, 0.1),\r\n },\r\n },\r\n },\r\n },\r\n MuiIconButton: {\r\n styleOverrides: {\r\n root: {\r\n color: palette.text.secondary,\r\n '&:hover': {\r\n color: palette.text.primary,\r\n backgroundColor: palette.action.hover,\r\n },\r\n '&.MuiIconButton-colorPrimary': { color: palette.primary.light },\r\n '&.MuiIconButton-colorError': { color: palette.error.light },\r\n '&.Mui-disabled': { color: palette.text.disabled },\r\n },\r\n },\r\n },\r\n MuiChip: {\r\n styleOverrides: {\r\n root: {\r\n color: palette.text.primary,\r\n backgroundColor: alpha(palette.text.primary, 0.07),\r\n borderColor: strongOutline,\r\n '& .MuiChip-icon': { color: 'inherit' },\r\n '&.MuiChip-colorSuccess': {\r\n color: palette.success.light,\r\n backgroundColor: palette.success.dark,\r\n borderColor: alpha(palette.success.light, 0.46),\r\n },\r\n '&.MuiChip-colorWarning': {\r\n color: palette.warning.light,\r\n backgroundColor: palette.warning.dark,\r\n borderColor: alpha(palette.warning.light, 0.46),\r\n },\r\n '&.MuiChip-colorError': {\r\n color: palette.error.light,\r\n backgroundColor: palette.error.dark,\r\n borderColor: alpha(palette.error.light, 0.46),\r\n },\r\n '&.MuiChip-colorInfo': {\r\n color: palette.info.light,\r\n backgroundColor: palette.info.dark,\r\n borderColor: alpha(palette.info.light, 0.46),\r\n },\r\n },\r\n },\r\n },\r\n MuiAlert: {\r\n styleOverrides: {\r\n root: { border: '1px solid currentColor' },\r\n standardSuccess: {\r\n color: palette.success.light,\r\n backgroundColor: palette.success.dark,\r\n },\r\n standardWarning: {\r\n color: palette.warning.light,\r\n backgroundColor: palette.warning.dark,\r\n },\r\n standardError: {\r\n color: palette.error.light,\r\n backgroundColor: palette.error.dark,\r\n },\r\n standardInfo: {\r\n color: palette.info.light,\r\n backgroundColor: palette.info.dark,\r\n },\r\n },\r\n },\r\n MuiTableHead: {\r\n styleOverrides: {\r\n root: { backgroundColor: palette.cellHeader },\r\n },\r\n },\r\n MuiTableCell: {\r\n styleOverrides: {\r\n root: { borderColor: palette.divider },\r\n head: { color: palette.text.primary, fontWeight: 700 },\r\n },\r\n },\r\n MuiTableRow: {\r\n styleOverrides: {\r\n root: {\r\n '&:hover': { backgroundColor: palette.action.hover },\r\n '&.Mui-selected': {\r\n backgroundColor: palette.action.selected,\r\n '&:hover': { backgroundColor: palette.action.selected },\r\n },\r\n },\r\n },\r\n },\r\n MuiTabs: {\r\n styleOverrides: {\r\n indicator: { backgroundColor: palette.primary.light },\r\n },\r\n },\r\n MuiTab: {\r\n styleOverrides: {\r\n root: {\r\n color: palette.text.secondary,\r\n '&.Mui-selected': { color: palette.primary.light },\r\n },\r\n },\r\n },\r\n MuiSwitch: {\r\n styleOverrides: {\r\n switchBase: {\r\n color: palette.text.disabled,\r\n '&.Mui-checked': {\r\n color: palette.primary.light,\r\n '& + .MuiSwitch-track': {\r\n backgroundColor: palette.primary.light,\r\n opacity: 0.5,\r\n },\r\n },\r\n },\r\n track: {\r\n backgroundColor: palette.text.disabled,\r\n opacity: 0.34,\r\n },\r\n },\r\n },\r\n MuiTooltip: {\r\n styleOverrides: {\r\n tooltip: {\r\n color: palette.text.primary,\r\n backgroundColor: palette.background.tooltip,\r\n border: `1px solid ${strongOutline}`,\r\n },\r\n arrow: { color: palette.background.tooltip },\r\n },\r\n },\r\n MuiDivider: {\r\n styleOverrides: {\r\n root: { borderColor: palette.divider },\r\n },\r\n },\r\n MuiLink: {\r\n styleOverrides: {\r\n root: { color: palette.primary.light },\r\n },\r\n },\r\n },\r\n });\r\n};\r\n","import { createTheme, Theme } from '@mui/material';\r\nimport { applyDarkThemeComponents } from './darkThemeComponents';\r\n\r\n/**\r\n * Ajustes que difieren entre apps. Los valores por defecto son los que ya\r\n * usaba el paquete, asi que omitir las opciones no cambia nada.\r\n */\r\nexport interface MuiComponentsConfigOptions {\r\n /**\r\n * Fondo del modal y su backdrop en transparente. Lo usan header y home;\r\n * contacts lo tenia desactivado a proposito.\r\n */\r\n transparentModal?: boolean;\r\n /** z-index del popper del Autocomplete. Header necesita 1; el resto, 11. */\r\n autocompleteZIndex?: number;\r\n}\r\n\r\nconst MuiComponentsConfig = (\r\n themeRedux: Theme,\r\n options: MuiComponentsConfigOptions = {}\r\n): Theme => {\r\n const { transparentModal = false, autocompleteZIndex = 11 } = options;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const bg = themeRedux.palette.background as any;\r\n\r\n const sharedTheme = createTheme({\r\n ...themeRedux,\r\n components: {\r\n MuiSelect: {\r\n defaultProps: {\r\n MenuProps: {\r\n PaperProps: {\r\n sx: {\r\n backgroundColor: bg.panel,\r\n backgroundImage:\r\n 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n MuiAutocomplete: {\r\n styleOverrides: {\r\n popper: {\r\n zIndex: autocompleteZIndex,\r\n '& div': {\r\n backgroundColor: bg.panel,\r\n },\r\n },\r\n },\r\n },\r\n MuiPaper: {\r\n styleOverrides: {\r\n root: {\r\n backgroundColor: bg.panel,\r\n backgroundImage:\r\n 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\r\n },\r\n },\r\n },\r\n MuiMenu: {\r\n styleOverrides: {\r\n paper: {\r\n backgroundColor: bg.panel,\r\n backgroundImage:\r\n 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\r\n },\r\n },\r\n },\r\n MuiList: {\r\n styleOverrides: {\r\n root: {\r\n padding: 0,\r\n },\r\n },\r\n },\r\n MuiModal: {\r\n styleOverrides: {\r\n root: transparentModal\r\n ? {\r\n background: 'transparent',\r\n '& .MuiBackdrop-root': {\r\n background: 'transparent',\r\n border: 'none',\r\n },\r\n }\r\n : {},\r\n },\r\n },\r\n MuiTypography: {\r\n styleOverrides: {\r\n root: {\r\n color: themeRedux.palette.text.primary,\r\n },\r\n },\r\n },\r\n MuiChip: {\r\n styleOverrides: {\r\n root: {\r\n color: themeRedux.palette.text.primary,\r\n border: '1px solid rgba(0, 0, 0, 0.1)',\r\n borderRadius: '4px',\r\n height: '20px',\r\n fontSize: '0.7125rem',\r\n },\r\n },\r\n },\r\n MuiListSubheader: {\r\n styleOverrides: {\r\n root: {\r\n backgroundColor: bg.accordionHeader,\r\n },\r\n },\r\n },\r\n MuiButton: {\r\n styleOverrides: {\r\n outlined: {\r\n color:\r\n themeRedux.palette.mode === 'light'\r\n ? themeRedux.palette.primary.dark\r\n : themeRedux.palette.primary.light,\r\n borderColor:\r\n themeRedux.palette.mode === 'light'\r\n ? themeRedux.palette.primary.dark\r\n : themeRedux.palette.primary.light,\r\n '&:hover': {\r\n borderColor:\r\n themeRedux.palette.mode === 'light'\r\n ? themeRedux.palette.primary.main\r\n : themeRedux.palette.primary.light,\r\n color:\r\n themeRedux.palette.mode === 'light'\r\n ? themeRedux.palette.primary.main\r\n : themeRedux.palette.primary.light,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n });\r\n\r\n return applyDarkThemeComponents(sharedTheme);\r\n};\r\n\r\nexport default MuiComponentsConfig;\r\n","import { createAction } from '@reduxjs/toolkit';\r\nimport type { ThemeName } from './themePreference';\r\n\r\n// The reducer handles the fulfilled action without importing the HTTP thunk.\r\nexport const UPDATE_THEME_TYPE = 'Theme/updateTheme';\r\nexport const themeUpdateFulfilled = /*#__PURE__*/ createAction<{ theme: ThemeName }>(\r\n `${UPDATE_THEME_TYPE}/fulfilled`\r\n);\r\n","\r\nexport type ThemePreference = 'light' | 'dark' | 'system';\r\nexport type ResolvedTheme = 'light' | 'dark';\r\nexport const THEME_PREFERENCES: readonly ThemePreference[] = ['light', 'dark', 'system'];\r\nexport const LEGACY_THEME_NAMES = [\"lightBlueIndigo\",\"lightBlue\",\"lightRed\",\"lightGreen\",\"lightPink\",\"lightPurple\",\"lightTeal\",\"lightLime\",\"lightYellow\",\"lightAmber\",\"lightOrange\",\"lightBrown\",\"lightGray\",\"darkBlue\",\"darkBlack\"] as const;\r\nexport type LegacyThemeName = typeof LEGACY_THEME_NAMES[number];\r\nexport type ThemeName = ThemePreference | LegacyThemeName;\r\n\r\nexport const isValidThemeName = (name: string): name is ThemeName =>\r\n (THEME_PREFERENCES as readonly string[]).includes(name) || (LEGACY_THEME_NAMES as readonly string[]).includes(name);\r\n\r\n/** Missing/unknown preferences follow the OS. Existing choices keep their mode. */\r\nexport const normalizeThemePreference = (name?: string | null): ThemePreference => {\r\n if (name === 'light' || name === 'dark' || name === 'system') return name;\r\n if (name && (LEGACY_THEME_NAMES as readonly string[]).includes(name)) return name.startsWith('dark') ? 'dark' : 'light';\r\n return 'system';\r\n};\r\nconst systemMedia = (): MediaQueryList | undefined =>\r\n typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n ? window.matchMedia('(prefers-color-scheme: dark)') : undefined;\r\nexport const resolveThemePreference = (preference: ThemePreference, systemDark = systemMedia()?.matches ?? false): ResolvedTheme =>\r\n preference === 'system' ? (systemDark ? 'dark' : 'light') : preference;\r\n\r\n/** Emits immediately; caller must unsubscribe on unmount/preference change.\r\n * Does not persist or call an API when the OS appearance changes.\r\n */\r\nexport const observeThemePreference = (preference: ThemePreference, listener: (mode: ResolvedTheme) => void): (() => void) => {\r\n if (preference !== 'system') { listener(preference); return () => {}; }\r\n const media = systemMedia();\r\n listener(resolveThemePreference(preference, media?.matches ?? false));\r\n if (!media) return () => {};\r\n const change = (event: MediaQueryListEvent) => listener(event.matches ? 'dark' : 'light');\r\n if (typeof media.addEventListener === 'function') {\r\n media.addEventListener('change', change);\r\n return () => media.removeEventListener('change', change);\r\n }\r\n media.addListener(change);\r\n return () => media.removeListener(change);\r\n};\r\n","import { createAsyncThunk } from '@reduxjs/toolkit';\r\nimport axios from 'axios';\r\nimport type { ThemeRootState } from './themeSlice';\r\nimport { isValidThemeName, ThemeName } from './themePreference';\r\nimport { UPDATE_THEME_TYPE } from './themeActionTypes';\r\n\r\nconst themeUrl = (spaceId: string) =>\r\n `https://agent-api.trii.app/api/v1/settings/${spaceId}/user/setTheme`;\r\n\r\n/** Guarda el tema elegido en el backend. */\r\nexport const updateTheme = /*#__PURE__*/ createAsyncThunk<\r\n { theme: ThemeName },\r\n ThemeName,\r\n { state: ThemeRootState }\r\n>(UPDATE_THEME_TYPE, async (theme, { getState }) => {\r\n const { uid = '', spaceId = '' } = getState().User.user ?? {};\r\n const themeJson = JSON.stringify({ theme, uid });\r\n\r\n const response = await axios.put<{ theme: ThemeName }>(\r\n themeUrl(spaceId),\r\n themeJson,\r\n { headers: { 'Content-Type': 'application/json' } }\r\n );\r\n if (!isValidThemeName(response.data.theme)) throw new Error('Invalid theme response');\r\n return response.data;\r\n});\r\n\r\n","import { createTheme, Theme } from '@mui/material'\r\n\r\n// ─── Extensión de tipos de MUI ──────────────────────────────────────────────\r\ndeclare module '@mui/material/styles' {\r\n interface TypeBackground {\r\n mainCenter: string;\r\n mainGradient: string;\r\n navMenu: string;\r\n dropdownMenu: string;\r\n panel: string;\r\n tooltip: string;\r\n accordionHeader: string;\r\n panelHeader: string;\r\n panelCenter: string;\r\n panelGradient: string;\r\n selectedItem: string;\r\n }\r\n\r\n interface TypeText {\r\n colorMain: string;\r\n }\r\n\r\n interface Palette {\r\n containerBox: {\r\n default: string;\r\n main: string;\r\n };\r\n dropdownBox: string;\r\n color: {\r\n icons: string;\r\n };\r\n cellHeader: string;\r\n Skeleton: {\r\n bg: string;\r\n };\r\n messageBox: string;\r\n boxShadow: string;\r\n disabled: string;\r\n }\r\n\r\n interface PaletteOptions {\r\n containerBox?: {\r\n default?: string;\r\n main?: string;\r\n };\r\n dropdownBox?: string;\r\n color?: {\r\n icons?: string;\r\n };\r\n cellHeader?: string;\r\n Skeleton?: {\r\n bg?: string;\r\n };\r\n messageBox?: string;\r\n boxShadow?: string;\r\n disabled?: string;\r\n }\r\n\r\n interface Theme {\r\n name?: string;\r\n }\r\n\r\n interface ThemeOptions {\r\n name?: string;\r\n }\r\n}\r\n// ────────────────────────────────────────────────────────────────────────────\r\n\r\n\r\n// Two curated palettes. Primary actions keep the same blue in both modes.\r\nconst primary = { main: '#246FB5', light: '#78B7F2', dark: '#195A96', contrastText: '#FFFFFF' };\r\n\r\nexport const lightTheme: Theme = createTheme({\r\n name: 'light',\r\n palette: {\r\n mode: 'light', contrastThreshold: 4.5, primary,\r\n secondary: { main: '#526078', light: '#728099', dark: '#38445A', contrastText: '#FFFFFF' },\r\n error: { main: '#BD3446', light: '#FCECEF', dark: '#932536', contrastText: '#FFFFFF' },\r\n warning: { main: '#946000', light: '#FFF5DF', dark: '#704800', contrastText: '#FFFFFF' },\r\n info: { main: '#176B9B', light: '#EAF4FC', dark: '#125174', contrastText: '#FFFFFF' },\r\n success: { main: '#237547', light: '#EAF6EE', dark: '#185935', contrastText: '#FFFFFF' },\r\n background: {\r\n default: '#F4F6FA', paper: '#FFFFFF', mainCenter: '#F4F6FA',\r\n mainGradient: 'linear-gradient(120deg, #195A96, #246FB5)',\r\n navMenu: '#EDF1F7', dropdownMenu: '#FFFFFF', panel: '#FFFFFF',\r\n tooltip: '#EDF1F7', accordionHeader: '#EDF1F7', panelHeader: '#EDF1F7',\r\n panelCenter: '#F8FAFD', panelGradient: '#EDF1F7', selectedItem: '#E5EFFA'\r\n },\r\n text: { primary: '#202C3E', secondary: '#526078', disabled: '#7C8798', colorMain: '#202C3E' },\r\n action: { active: '#526078', hover: 'rgba(36, 111, 181, 0.06)', selected: 'rgba(36, 111, 181, 0.12)', disabled: '#8893A3', disabledBackground: '#E8ECF2' },\r\n divider: '#D7DEE9', containerBox: { default: '#FFFFFF', main: '#F8FAFD' },\r\n dropdownBox: '#FFFFFF', color: { icons: '#526078' }, cellHeader: '#EDF1F7',\r\n Skeleton: { bg: '#E4EAF2' }, messageBox: '#E5EFFA', boxShadow: 'rgba(25, 42, 66, 0.12)', disabled: '#8893A3'\r\n }\r\n});\r\n\r\nexport const darkTheme: Theme = createTheme({\r\n name: 'dark',\r\n palette: {\r\n mode: 'dark', contrastThreshold: 4.5, primary,\r\n secondary: { main: '#B7B5D9', light: '#D6D4EF', dark: '#46415F', contrastText: '#171824' },\r\n error: { main: '#F06B7A', light: '#FF9AA8', dark: '#4A1D24', contrastText: '#2B0D12' },\r\n warning: { main: '#E5A93B', light: '#FFD27A', dark: '#493515', contrastText: '#2A1B05' },\r\n info: { main: '#4FAFE8', light: '#7CCBFF', dark: '#123955', contrastText: '#082033' },\r\n success: { main: '#43C17A', light: '#75E0A7', dark: '#143D2B', contrastText: '#092116' },\r\n background: {\r\n default: '#111520', paper: '#1B2333', mainCenter: '#151C2A',\r\n mainGradient: 'linear-gradient(120deg, #131B2B, #242237)',\r\n navMenu: '#0E121C', dropdownMenu: '#252D40', panel: '#1B2333',\r\n tooltip: '#30384F', accordionHeader: '#20283A', panelHeader: '#20283A',\r\n panelCenter: '#222B3E', panelGradient: '#2C2B40', selectedItem: '#293E59'\r\n },\r\n text: { primary: '#F1F4FA', secondary: '#BBC6D8', disabled: '#8793A6', colorMain: '#F1F4FA' },\r\n action: { active: '#BBC6D8', hover: 'rgba(241, 244, 250, 0.07)', selected: 'rgba(120, 183, 242, 0.16)', disabled: 'rgba(187, 198, 216, 0.45)', disabledBackground: 'rgba(187, 198, 216, 0.10)' },\r\n divider: 'rgba(187, 198, 216, 0.22)', containerBox: { default: '#1B2333', main: '#222B3E' },\r\n dropdownBox: '#252D40', color: { icons: '#BBC6D8' }, cellHeader: '#20283A',\r\n Skeleton: { bg: '#30384F' }, messageBox: '#203953', boxShadow: 'rgba(0, 0, 0, 0.40)', disabled: 'rgba(187, 198, 216, 0.45)'\r\n }\r\n});\r\n\r\n// Keep export names and theme.name for older selectors. Palettes are unified.\r\n/** @deprecated Use lightTheme. */\r\nexport const lightBlueIndigo: Theme = { ...lightTheme, name: 'lightBlueIndigo' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightBlue: Theme = { ...lightTheme, name: 'lightBlue' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightRed: Theme = { ...lightTheme, name: 'lightRed' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightGreen: Theme = { ...lightTheme, name: 'lightGreen' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightPink: Theme = { ...lightTheme, name: 'lightPink' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightPurple: Theme = { ...lightTheme, name: 'lightPurple' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightTeal: Theme = { ...lightTheme, name: 'lightTeal' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightLime: Theme = { ...lightTheme, name: 'lightLime' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightYellow: Theme = { ...lightTheme, name: 'lightYellow' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightAmber: Theme = { ...lightTheme, name: 'lightAmber' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightOrange: Theme = { ...lightTheme, name: 'lightOrange' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightBrown: Theme = { ...lightTheme, name: 'lightBrown' };\r\n/** @deprecated Use lightTheme. */\r\nexport const lightGray: Theme = { ...lightTheme, name: 'lightGray' };\r\n/** @deprecated Use darkTheme. */\r\nexport const darkBlue: Theme = { ...darkTheme, name: 'darkBlue' };\r\n/** @deprecated Use darkTheme. */\r\nexport const darkBlack: Theme = { ...darkTheme, name: 'darkBlack' };\r\n","import { createSlice, PayloadAction, Draft } from '@reduxjs/toolkit';\r\nimport { themeUpdateFulfilled } from './themeActionTypes';\r\nexport { updateTheme } from './themePersistence';\r\nimport { Theme } from '@mui/material';\r\nimport { lightTheme, darkTheme } from './themeProvider';\r\nimport { ThemeName, ThemePreference, ResolvedTheme, normalizeThemePreference, resolveThemePreference } from './themePreference';\r\nexport { isValidThemeName } from './themePreference';\r\nexport type { ThemeName } from './themePreference';\r\n\r\n\r\n/**\r\n * Forma mínima del store que necesita este slice: la app que lo use tiene que\r\n * tener `Theme` y `User.user.uid`.\r\n */\r\nexport interface ThemeRootState {\r\n User: {\r\n user: {\r\n uid: string;\r\n /** Requerido por `updateTheme`: la URL lo lleva en la ruta. */\r\n spaceId?: string;\r\n };\r\n };\r\n Theme: ThemeState;\r\n}\r\n\r\n/**\r\n * `trii-root-front` lee esta clave para pintar el fondo antes de montar los\r\n * micro-fronts. Si se deja de escribir, se ve un flash del tema equivocado.\r\n */\r\nconst THEME_STORAGE_KEY = 'trii-theme';\r\n\r\n/** Estado del slice. */\r\nexport interface ThemeState {\r\n themeSelected: Theme;\r\n preference: ThemePreference;\r\n darkMode: boolean;\r\n toggleStatus: 'idle' | 'toggled';\r\n}\r\n\r\n/** Lee el tema persistido; si no hay o falla, usa el de por defecto. */\r\nconst getSavedPreference = (): ThemePreference => {\r\n try { return normalizeThemePreference(localStorage.getItem(THEME_STORAGE_KEY)); } catch { return 'system'; }\r\n};\r\n\r\n/** Persiste el tema para que `trii-root-front` lo lea en el arranque. */\r\nconst saveTheme = (theme: ThemeName): void => {\r\n try {\r\n localStorage.setItem(THEME_STORAGE_KEY, theme);\r\n } catch {\r\n // sin localStorage el tema igual se aplica, solo no persiste\r\n }\r\n};\r\n\r\nconst savedPreference = getSavedPreference();\r\nconst savedMode = resolveThemePreference(savedPreference);\r\nconst initialState: ThemeState = {\r\n themeSelected: savedMode === 'dark' ? darkTheme : lightTheme,\r\n preference: savedPreference,\r\n darkMode: savedMode === 'dark',\r\n toggleStatus: 'idle',\r\n};\r\n\r\n/** Slice del tema. */\r\nconst themeSlice = createSlice({\r\n name: 'Theme',\r\n initialState,\r\n reducers: {\r\n /** Cambia el tema por nombre. */\r\n toggleTheme: (state, action: PayloadAction<ThemeName>): void => {\r\n applyPreference(state, action.payload);\r\n },\r\n /** Local update from observeThemePreference; never overwrite the saved system choice. */\r\n systemThemeChanged: (state, action: PayloadAction<ResolvedTheme>): void => {\r\n if (state.preference !== 'system') return;\r\n Object.assign(state, { themeSelected: action.payload === 'dark' ? darkTheme : lightTheme, darkMode: action.payload === 'dark', toggleStatus: 'toggled' });\r\n },\r\n /** Alterna el modo oscuro. */\r\n toggleModeTheme: (state): void => {\r\n applyPreference(state, state.darkMode ? 'light' : 'dark');\r\n },\r\n },\r\n extraReducers: (builder) => {\r\n builder.addCase(themeUpdateFulfilled, (state, action): void => {\r\n applyPreference(state, action.payload.theme);\r\n });\r\n },\r\n});\r\n\r\nfunction applyPreference(state: Draft<ThemeState>, name: ThemeName): void {\r\n const preference = normalizeThemePreference(name);\r\n const mode = resolveThemePreference(preference);\r\n // Preserve legacy storage names until root is migrated to canonical names.\r\n saveTheme(name);\r\n const base = mode === 'dark' ? darkTheme : lightTheme;\r\n const themeSelected = name === 'system' || name === 'light' || name === 'dark' ? base : { ...base, name };\r\n Object.assign(state, { preference, themeSelected, darkMode: mode === 'dark', toggleStatus: 'toggled' });\r\n}\r\n\r\nexport const selectThemePreference = (state: ThemeRootState) => state.Theme.preference;\r\n\r\nexport const { toggleTheme, toggleModeTheme, systemThemeChanged } = themeSlice.actions;\r\n\r\n// Selectores\r\nexport const selectThemeToggleStatus = (state: ThemeRootState) =>\r\n state.Theme.toggleStatus;\r\nexport const selectTheme = (state: ThemeRootState) => state.Theme.themeSelected;\r\nexport const selectDarkTheme = (state: ThemeRootState) => state.Theme.darkMode;\r\n\r\n/**\r\n * @deprecated Usar `selectTheme`. El prefijo correcto para un selector es\r\n * `select` (ver Guía de Arquitectura Frontend, sección 4 - Nomenclatura).\r\n * Se mantiene hasta que los 6 micro-fronts terminen de migrar.\r\n */\r\nexport const selectedTheme = selectTheme;\r\n/**\r\n * @deprecated Usar `selectDarkTheme`. Mismo motivo que `selectedTheme`.\r\n */\r\nexport const selectedDarkTheme = selectDarkTheme;\r\n\r\nexport default themeSlice.reducer;\r\n"],"names":["createTheme"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -615,6 +615,16 @@ interface ChatDetailsSidebarBaseProps {
615
615
  * Sin ella se usa window.location.assign.
616
616
  */
617
617
  navigate?: (path: string) => void;
618
+ /**
619
+ * Ticket que se está viendo en el host (p. ej. el detalle de tickets). En el
620
+ * tab Tickets se lista marcado como "este ticket" y no es clickeable.
621
+ */
622
+ currentTicketId?: string;
623
+ /**
624
+ * Abrir otro ticket del contacto desde el tab Tickets. Sin ella se navega a
625
+ * `/a/tickets/detail/{id}` con `navigate` (o window.location.assign).
626
+ */
627
+ onOpenTicket?: (ticketId: string) => void;
618
628
  /**
619
629
  * Idioma del anfitrión ('es' | 'en' | 'es-AR' | ...). El sidebar tiene su
620
630
  * propia instancia de i18n, así que no sigue solo los cambios del host.
@@ -18,6 +18,16 @@ interface ChatDetailsSidebarBaseProps {
18
18
  * Sin ella se usa window.location.assign.
19
19
  */
20
20
  navigate?: (path: string) => void;
21
+ /**
22
+ * Ticket que se está viendo en el host (p. ej. el detalle de tickets). En el
23
+ * tab Tickets se lista marcado como "este ticket" y no es clickeable.
24
+ */
25
+ currentTicketId?: string;
26
+ /**
27
+ * Abrir otro ticket del contacto desde el tab Tickets. Sin ella se navega a
28
+ * `/a/tickets/detail/{id}` con `navigate` (o window.location.assign).
29
+ */
30
+ onOpenTicket?: (ticketId: string) => void;
21
31
  /**
22
32
  * Idioma del anfitrión ('es' | 'en' | 'es-AR' | ...). El sidebar tiene su
23
33
  * propia instancia de i18n, así que no sigue solo los cambios del host.
@@ -0,0 +1,12 @@
1
+ /** Ruta del detalle de ticket en el microfront de tickets. */
2
+ export declare const ticketDetailPath: (ticketId: string) => string;
3
+ /**
4
+ * Tab "Tickets del contacto": los tickets del contacto (de cualquier
5
+ * responsable) partidos en Activos (se cargan al montar) y Finalizados (se
6
+ * cargan en el primer expand), cada sección paginando por su cuenta.
7
+ *
8
+ * El ticket `currentTicketId` se lista marcado y sin click. Abrir otro usa
9
+ * `onOpenTicket` del host o, sin él, la navegación del sidebar.
10
+ */
11
+ declare const ContactTickets: () => import("react/jsx-runtime").JSX.Element;
12
+ export default ContactTickets;
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { ContactTicket, TicketStatusInfo } from '../../../../../types/tickets';
3
+ export interface ContactTicketItemProps {
4
+ ticket: ContactTicket;
5
+ status: Pick<TicketStatusInfo, 'name' | 'color'> | undefined;
6
+ isCurrent: boolean;
7
+ onOpen: (id: string) => void;
8
+ }
9
+ declare function ContactTicketItemBase({ ticket, status, isCurrent, onOpen, }: ContactTicketItemProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare const ContactTicketItem: import("react").MemoExoticComponent<typeof ContactTicketItemBase>;
11
+ export {};
@@ -0,0 +1,18 @@
1
+ import { SidebarApiConfig } from '../../../../../context/SidebarPropsContext';
2
+ import { TicketStage, TicketStatusInfo } from '../../../../../types/tickets';
3
+ export interface ContactTicketsSectionProps {
4
+ title: string;
5
+ emptyText: string;
6
+ api: SidebarApiConfig;
7
+ contactId: string;
8
+ stages: TicketStage[];
9
+ currentTicketId?: string;
10
+ statusById: Map<string, TicketStatusInfo>;
11
+ onOpenTicket: (id: string) => void;
12
+ defaultExpanded?: boolean;
13
+ }
14
+ /**
15
+ * Una lista colapsable de tickets del contacto. Carga en su primer expand y
16
+ * conserva lo cargado al volver a colapsar.
17
+ */
18
+ export declare function ContactTicketsSection({ title, emptyText, api, contactId, stages, currentTicketId, statusById, onOpenTicket, defaultExpanded, }: ContactTicketsSectionProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,11 @@
1
+ export interface RelativeTimeProps {
2
+ /** Instante ISO (o Date) contra el que se calcula la etiqueta. */
3
+ at: string | Date;
4
+ }
5
+ /**
6
+ * Etiqueta "hace 5 min" que se mantiene fresca con el ticker compartido de
7
+ * minutos, con la fecha y hora absolutas en el tooltip. Solo esta hoja
8
+ * re-renderiza en cada tick. El locale sale del i18n propio del sidebar.
9
+ */
10
+ export declare function RelativeTime({ at }: RelativeTimeProps): import("react/jsx-runtime").JSX.Element;
11
+ export default RelativeTime;
@@ -0,0 +1 @@
1
+ export { default } from './ContactTickets';
@@ -10,5 +10,6 @@ export { default as ContactTask } from './ContactTask';
10
10
  export { default as ContactButton } from './ContactButton';
11
11
  export { default as ContactPanelShop } from './ContactPanelShop';
12
12
  export { default as ContactRelations } from './ContactRelations';
13
+ export { default as ContactTickets } from './ContactTickets';
13
14
  export { default as GroupData } from './GroupData';
14
15
  export { default as PremiumContactHeader } from './PremiumContactHeader';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Índices fijos del riel vertical de tabs (TabsMenu / PanelView /
3
+ * PremiumContactHeader). Los botones de integración dinámicos van después del
4
+ * último tab fijo: `FIRST_BUTTON_TAB_INDEX + index`.
5
+ */
6
+ export declare const CONTACT_TICKETS_TAB_INDEX = 9;
7
+ export declare const FIRST_BUTTON_TAB_INDEX = 10;
@@ -55,6 +55,13 @@ export interface SidebarProps {
55
55
  * destinos son rutas de otro microfront, no internas del sidebar.
56
56
  */
57
57
  navigate?: (path: string) => void;
58
+ /** Ticket que se está viendo en el host: el tab Tickets lo lista marcado y sin click. */
59
+ currentTicketId?: string;
60
+ /**
61
+ * Abrir un ticket del contacto. Sin ella el tab Tickets navega a
62
+ * /a/tickets/detail/{id} con `navigate` (o window.location.assign).
63
+ */
64
+ onOpenTicket?: (ticketId: string) => void;
58
65
  /** Abrir/cambiar a una conversación del contacto en el inbox. */
59
66
  onOpenConversation: (conversation: IConversation) => Promise<void> | void;
60
67
  /** Navegar/scrollear a un mensaje en el body del chat. */
@@ -1 +1 @@
1
- export type TabName = 'contactConversation' | 'contactData' | 'contactEvent' | 'contactFiles' | 'contactHistory' | 'contactNotes' | 'contactRepairs' | 'contactTicket' | 'contactButtons' | 'contactPanelShop' | 'contactGroupData' | string;
1
+ export type TabName = 'contactConversation' | 'contactData' | 'contactEvent' | 'contactFiles' | 'contactHistory' | 'contactNotes' | 'contactRepairs' | 'contactTicket' | 'contactButtons' | 'contactPanelShop' | 'contactGroupData' | 'contactTickets' | string;
@@ -0,0 +1,30 @@
1
+ import type { AsyncStatus } from '../../../asyncState';
2
+ import { SidebarApiConfig } from '../context/SidebarPropsContext';
3
+ import { ContactTicket, TicketStage } from '../types/tickets';
4
+ interface UseContactTicketsOptions {
5
+ api: SidebarApiConfig;
6
+ contactId: string | null | undefined;
7
+ stages: TicketStage[];
8
+ /** La primera página se pide recién cuando esto es true (secciones lazy). */
9
+ enabled: boolean;
10
+ }
11
+ /**
12
+ * Tickets del contacto en los `stages` dados, acumulados página a página por
13
+ * cursor (versión reducida del useCursorPager de tickets-front).
14
+ *
15
+ * - Guard de carrera: cada carga inicial incrementa `seq` y aborta la anterior;
16
+ * solo el request vigente escribe estado.
17
+ * - Deshabilitado (o sin contacto) queda "idle" y no pide nada.
18
+ * - Un resultado vacío termina en "succeeded", así que no re-fetchea en loop.
19
+ * - Colapsar la sección no desmonta el hook: los items se conservan.
20
+ */
21
+ export declare function useContactTickets({ api, contactId, stages, enabled, }: UseContactTicketsOptions): {
22
+ items: ContactTicket[];
23
+ status: AsyncStatus;
24
+ hasMore: boolean;
25
+ loadMore: () => Promise<void>;
26
+ loadingMore: boolean;
27
+ loadMoreError: boolean;
28
+ retry: () => Promise<void>;
29
+ };
30
+ export {};
@@ -0,0 +1,2 @@
1
+ /** Hora actual en ms, refrescada una vez por minuto por el ticker compartido. */
2
+ export declare function useNow(): number;
@@ -0,0 +1,8 @@
1
+ import { SidebarApiConfig } from '../context/SidebarPropsContext';
2
+ import { TicketStatusInfo } from '../types/tickets';
3
+ /**
4
+ * Estados de tickets del espacio indexados por id (incluye deshabilitados,
5
+ * para nombrar tickets viejos). El request se cachea en el service; si falla,
6
+ * el mapa queda vacío y las filas caen a la etiqueta del stage.
7
+ */
8
+ export declare function useTicketStatuses({ baseUrl, spaceId, }: SidebarApiConfig): Map<string, TicketStatusInfo>;
@@ -0,0 +1,29 @@
1
+ import { SidebarApiConfig } from '../context/SidebarPropsContext';
2
+ import { ContactTicket, TicketCursorResponse, TicketStage, TicketStatusInfo } from '../types/tickets';
3
+ /**
4
+ * Service del tab "Tickets del contacto" (API de tickets). Mismo patrón que
5
+ * contactApi: fetch pelado vía requestJson, el token lo inyecta el host.
6
+ */
7
+ export declare const CONTACT_TICKETS_PAGE_SIZE = 20;
8
+ type ApiArgs = SidebarApiConfig & {
9
+ signal?: AbortSignal;
10
+ };
11
+ export interface SearchContactTicketsArgs extends ApiArgs {
12
+ contactId: string;
13
+ stages: TicketStage[];
14
+ cursor?: string;
15
+ }
16
+ /**
17
+ * Una página de tickets del contacto en `stages`, de cualquier responsable,
18
+ * los actualizados más recientemente primero.
19
+ *
20
+ * Límite del backend: los tickets finalizados que pasaron los `visible_days`
21
+ * de su estado quedan fuera de la búsqueda, así que el historial puede estar
22
+ * incompleto.
23
+ */
24
+ export declare function searchContactTickets({ baseUrl, spaceId, contactId, stages, cursor, signal, }: SearchContactTicketsArgs): Promise<TicketCursorResponse<ContactTicket>>;
25
+ /** Todos los estados de tickets del espacio, incluidos los deshabilitados. */
26
+ export declare function fetchTicketStatuses(api: SidebarApiConfig): Promise<TicketStatusInfo[]>;
27
+ /** Solo para tests: descarta los estados cacheados entre casos. */
28
+ export declare function __resetTicketStatusesCache(): void;
29
+ export {};
@@ -11,6 +11,7 @@ export interface SidebarApiUrls {
11
11
  CALENDAR: string;
12
12
  LOGS: string;
13
13
  SETTINGS: string;
14
+ TICKETS: string;
14
15
  }
15
16
  export declare function getApiUrls(baseUrl: string, spaceId: string): SidebarApiUrls;
16
17
  export declare function joinUrl(base: string, path: string): string;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Tipos mínimos de tickets que consume el tab "Tickets del contacto".
3
+ *
4
+ * La versión de @trii/types fijada en el paquete no garantiza el namespace
5
+ * Tickets, así que se replican acá solo los campos usados. Los valores son los
6
+ * mismos literales que los enums de @trii/types (Tickets.TicketStage, etc.),
7
+ * así que un ITicket del backend encaja tal cual.
8
+ */
9
+ export declare const TicketStage: {
10
+ readonly NEW: "NEW";
11
+ readonly ACTIVE: "ACTIVE";
12
+ readonly RESOLVED: "RESOLVED";
13
+ readonly CLOSED: "CLOSED";
14
+ readonly CANCELLED: "CANCELLED";
15
+ };
16
+ export type TicketStage = (typeof TicketStage)[keyof typeof TicketStage];
17
+ export declare const TicketPriority: {
18
+ readonly LOW: "LOW";
19
+ readonly MEDIUM: "MEDIUM";
20
+ readonly HIGH: "HIGH";
21
+ readonly URGENT: "URGENT";
22
+ };
23
+ export type TicketPriority = (typeof TicketPriority)[keyof typeof TicketPriority];
24
+ export declare const TicketSortDirection: {
25
+ readonly ASC: "ASC";
26
+ readonly DESC: "DESC";
27
+ };
28
+ export type TicketSortDirection = (typeof TicketSortDirection)[keyof typeof TicketSortDirection];
29
+ export interface ContactTicket {
30
+ id: string;
31
+ number: number;
32
+ title: string;
33
+ statusId: string;
34
+ stage: TicketStage;
35
+ priority: TicketPriority;
36
+ createdAt?: string;
37
+ updatedAt?: string;
38
+ }
39
+ export interface TicketStatusInfo {
40
+ id: string;
41
+ name: string;
42
+ color?: string;
43
+ }
44
+ export interface TicketSearchQuery {
45
+ filter: {
46
+ contactIds: string[];
47
+ stages: TicketStage[];
48
+ };
49
+ sort: {
50
+ fieldNameKey: string;
51
+ direction: TicketSortDirection;
52
+ }[];
53
+ limit: number;
54
+ cursor?: string;
55
+ }
56
+ export interface TicketCursorResponse<T> {
57
+ items: T[];
58
+ nextCursor?: string;
59
+ hasMore: boolean;
60
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Relative label ('hace 5 min', 'in 2 hr.') between `at` and `now`.
3
+ *
4
+ * `now` is an explicit parameter so the rule stays pure and testable; callers feed it from the
5
+ * shared minute ticker. The value is truncated (never rounded up) so 59.9 minutes never reads as
6
+ * '60 min' and a due time never looks later than it is. Under a minute collapses to the locale's
7
+ * own 'now' word. Returns an empty string for an unparseable date.
8
+ */
9
+ export declare function formatRelativeTime(at: string | Date, now: number, locale: string): string;
@@ -0,0 +1,3 @@
1
+ export declare function subscribeToMinuteTicker(listener: () => void): () => void;
2
+ /** Stable between ticks, as `useSyncExternalStore` requires. */
3
+ export declare function getNowSnapshot(): number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trii/components",
3
- "version": "3.1.7",
3
+ "version": "3.1.8",
4
4
  "description": "Trii components package",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -1 +0,0 @@
1
- export {};
@@ -1,9 +0,0 @@
1
- declare const meta: {
2
- title: string;
3
- component: (props: import("./ContactInfoPopup").ContactInfoPopupProps) => import("react/jsx-runtime").JSX.Element;
4
- tags: string[];
5
- parameters: {
6
- layout: string;
7
- };
8
- };
9
- export default meta;