@trii/components 3.1.3 → 3.1.5
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/async-state/package.json +9 -9
- package/dist/cjs/async-state.js.map +1 -1
- package/dist/cjs/index.js +105 -105
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/theme.js +1 -1
- package/dist/cjs/theme.js.map +1 -1
- package/dist/esm/async-state.js.map +1 -1
- package/dist/esm/index.js +105 -105
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/theme.js +1 -1
- package/dist/esm/theme.js.map +1 -1
- package/dist/index.d.ts +36 -5
- package/dist/theme.d.ts +36 -5
- package/dist/types/asyncState/__tests__/asyncState.test.d.ts +1 -0
- package/dist/types/asyncState/__tests__/useAsyncData.test.d.ts +1 -0
- package/dist/types/components/AsyncContent/__tests__/AsyncContent.test.d.ts +1 -0
- package/dist/types/components/AsyncContent/__tests__/AsyncContentI18n.test.d.ts +1 -0
- package/dist/types/components/ContactInfoPopup/ContactInfoPopup.stories.d.ts +9 -0
- package/dist/types/components/ContactSidebar/ContactSidebar.stories.d.ts +58 -0
- package/dist/types/components/EditContactModal/EditContactModal.stories.d.ts +9 -0
- package/dist/types/components/EventsDialog/components/LinkContactsSelect/styles.d.ts +6 -0
- package/dist/types/components/EventsDialog/components/LocationTextField/MapLocationPicker.d.ts +8 -0
- package/dist/types/components/EventsDialog/components/LocationTextField/SendLocation/components/GoogleMap/index.d.ts +1 -0
- package/dist/types/components/EventsDialog/components/LocationTextField/SendLocation/components/index.d.ts +1 -0
- package/dist/types/components/EventsDialog/components/LocationTextField/SendLocation/index.d.ts +3 -0
- package/dist/types/components/EventsDialog/hooks/index.d.ts +9 -0
- package/dist/types/components/EventsDialog/hooks/useSelect.d.ts +14 -0
- package/dist/types/components/EventsDialog/utils/eventValidation.d.ts +37 -0
- package/dist/types/components/EventsDialog/utils/googleMapsUtils.d.ts +5 -0
- package/dist/types/components/EventsDialog/utils/keyboardNavigation.d.ts +24 -0
- package/dist/types/components/PanelErrorBoundary/__tests__/PanelErrorBoundary.test.d.ts +1 -0
- package/dist/types/theme/MuiComponentsConfig.test.d.ts +1 -0
- package/dist/types/theme/darkThemeComponents.d.ts +3 -0
- package/dist/types/theme/index.d.ts +2 -0
- package/dist/types/theme/themePreference.d.ts +14 -0
- package/dist/types/theme/themePreference.test.d.ts +1 -0
- package/dist/types/theme/themeProvider.d.ts +17 -0
- package/dist/types/theme/themeProvider.test.d.ts +1 -0
- package/dist/types/theme/themeSlice.d.ts +6 -5
- package/package.json +194 -174
- package/readme +71 -71
- package/theme/package.json +9 -9
- package/dist/types/components/EditContactModal/context/LanguageContext.d.ts +0 -9
- package/dist/types/components/EventsDialog/theme/MuiComponentsConfig.d.ts +0 -3
- package/dist/types/components/EventsDialog/theme/index.d.ts +0 -4
- package/dist/types/components/EventsDialog/theme/themeProvider.d.ts +0 -74
- package/dist/types/components/EventsDialog/theme/themeSlice.d.ts +0 -52
package/dist/cjs/theme.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var a=require("@mui/material"),l=require("@reduxjs/toolkit"),G=require("axios");function I(e){return e&&e.__esModule?e:{default:e}}var E=I(G);const O=(e,f={})=>{const{transparentModal:r=!1,autocompleteZIndex:t=11}=f,d=e.palette.background;return a.createTheme({...e,components:{MuiSelect:{defaultProps:{MenuProps:{PaperProps:{sx:{backgroundColor:d.panel,backgroundImage:"linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))"}}}}},MuiAutocomplete:{styleOverrides:{popper:{zIndex:t,"& div":{backgroundColor:d.panel}}}},MuiPaper:{styleOverrides:{root:{backgroundColor:d.panel,backgroundImage:"linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))"}}},MuiMenu:{styleOverrides:{paper:{backgroundColor:d.panel,backgroundImage:"linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))"}}},MuiList:{styleOverrides:{root:{padding:0}}},MuiModal:{styleOverrides:{root:r?{background:"transparent","& .MuiBackdrop-root":{background:"transparent",border:"none"}}:{}}},MuiTypography:{styleOverrides:{root:{color:e.palette.text.primary}}},MuiChip:{styleOverrides:{root:{color:e.palette.text.primary,border:"1px solid rgba(0, 0, 0, 0.1)",borderRadius:"4px",height:"20px",fontSize:"0.7125rem"}}},MuiListSubheader:{styleOverrides:{root:{backgroundColor:d.accordionHeader}}},MuiButton:{styleOverrides:{outlined:{color:e.palette.mode==="light"?e.palette.primary.dark:e.palette.info.dark,borderColor:e.palette.mode==="light"?e.palette.primary.dark:e.palette.info.dark,"&:hover":{borderColor:e.palette.mode==="light"?e.palette.primary.main:e.palette.info.main,color:e.palette.mode==="light"?e.palette.primary.main:e.palette.info.main}}}}}})},n=a.createTheme({name:"lightBlueIndigo",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#ebf6fd",mainGradient:"linear-gradient(270deg, #215c97, #1976d2)",navMenu:"#1976d2",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#1976d2",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#1976d2",light:"#42a5f5",dark:"#1565c0",contrastText:"#fff"},secondary:{main:"#1976d2",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#ebf6fd",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#1976d2"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#1976d2"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),o=a.createTheme({name:"lightBlue",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#e3f2fd",mainGradient:"linear-gradient(270deg, #005cb2, #1e88e5)",navMenu:"#4fc354",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#1e88e5",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#1e88e5",light:"#6ab7ff",dark:"#005cb2",contrastText:"rgba(0, 0, 0, 0.87)"},secondary:{main:"#1e88e5",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#e3f2fd",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#005cb2"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#005cb2"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),g=a.createTheme({name:"lightRed",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#ffebee",mainGradient:"linear-gradient(270deg, #b61827, #ef5350)",navMenu:"#f44336",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#ef5350",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#ef5350",light:"#ff867c",dark:"#b61827",contrastText:"rgba(0, 0, 0, 0.87)"},secondary:{main:"#ef5350",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#ffebee",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#b61827"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#b61827"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),c=a.createTheme({name:"lightGreen",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#e8f5e9",mainGradient:"linear-gradient(270deg, #087f23, #4caf50)",navMenu:"#4fc354",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#4caf50",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#4caf50",light:"#80e27e",dark:"#087f23",contrastText:"rgba(0, 0, 0, 0.87)"},secondary:{main:"#4caf50",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#e8f5e9",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#087f23"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#087f23"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),b=a.createTheme({name:"lightPink",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#fce4ec",mainGradient:"linear-gradient(270deg, #b0003a, #e6175d)",navMenu:"#e6175d",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#e6175d",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#e6175d",light:"#ff6090",dark:"#b0003a",contrastText:"#fff"},secondary:{main:"#9c27b0",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#fce4ec",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#b0003a"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#b0003a"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),s=a.createTheme({name:"lightPurple",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#f3e5f5",mainGradient:"linear-gradient(270deg, #6a0080, #9c27b0)",navMenu:"#f8bbd0",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#9c27b0",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#9c27b0",light:"#d05ce3",dark:"#6a0080",contrastText:"#fff"},secondary:{main:"#9c27b0",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#f3e5f5",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#9c27b0"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#9c27b0"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),m=a.createTheme({name:"lightTeal",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#e0f2f1",mainGradient:"linear-gradient(270deg, #00675b, #009688)",navMenu:"#f8bbd0",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#009688",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#009688",light:"#52c7b8",dark:"#00675b",contrastText:"rgba(0, 0, 0, 0.87)"},secondary:{main:"#009688",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#e0f2f1",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#00675b"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#00675b"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),h=a.createTheme({name:"lightLime",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#f9fbe7",mainGradient:"linear-gradient(270deg, #99aa00, #cddc39)",navMenu:"#f8bbd0",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#cddc39",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#cddc39",light:"#ffff6e",dark:"#99aa00",contrastText:"rgba(0, 0, 0, 0.87)"},secondary:{main:"#cddc39",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#f9fbe7",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#737c16"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#737c16"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),p=a.createTheme({name:"lightYellow",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#fffde7",mainGradient:"linear-gradient(270deg, #c8b900, #ffeb3b)",navMenu:"#f8bbd0",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#ffeb3b",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#ffeb3b",light:"#ffff72",dark:"#c8b900",contrastText:"rgba(0, 0, 0, 0.87)"},secondary:{main:"#ffeb3b",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#fffde7",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#847700"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#847700"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),u=a.createTheme({name:"lightAmber",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#fff8e1",mainGradient:"linear-gradient(270deg, #c68400, #ffb300)",navMenu:"#f8bbd0",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#ffb300",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#ffb300",light:"#ffe54c",dark:"#c68400",contrastText:"rgba(0, 0, 0, 0.87)"},secondary:{main:"#ffb300",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#fff8e1",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#9c6e00"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#9c6e00"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),k=a.createTheme({name:"lightOrange",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#fff3e0",mainGradient:"linear-gradient(270deg, #c66900, #ff9800)",navMenu:"#f8bbd0",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#ff9800",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#ff9800",light:"#ffc947",dark:"#c66900",contrastText:"rgba(0, 0, 0, 0.87)"},secondary:{main:"#ff9800",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#fff3e0",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#ab6600"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#ab6600"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),x=a.createTheme({name:"lightBrown",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#efebe9",mainGradient:"linear-gradient(270deg, #4b2c20, #795548)",navMenu:"#f8bbd0",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#795548",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#795548",light:"#a98274",dark:"#4b2c20",contrastText:"#fff"},secondary:{main:"#795548",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#efebe9",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#795548"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#795548"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),B=a.createTheme({name:"lightGray",palette:{mode:"light",background:{default:"#ffffff",mainCenter:"#fafafa",mainGradient:"linear-gradient(270deg, #707070, #9e9e9e)",navMenu:"#f8bbd0",dropdownMenu:"#f5f5f5",panel:"#ffffff",tooltip:"#9e9e9e",accordionHeader:"#F3F4F6",panelHeader:"#F3F4F6",panelCenter:"#ffffff",panelGradient:"#ffffff",selectedItem:"#75757530",paper:"#ffffff"},primary:{main:"#9e9e9e",light:"#cfcfcf",dark:"#707070",contrastText:"rgba(0, 0, 0, 0.87)"},secondary:{main:"#9e9e9e",light:"#ba68c8",dark:"#7b1fa2",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#d32f2f",light:"#ef5350",dark:"#c62828"},warning:{main:"#ed6c02",light:"#ff9800",dark:"#e65100"},info:{main:"#0288d1",light:"#03a9f4",dark:"#01579b"},success:{main:"#2e7d32",light:"#4caf50",dark:"#1b5e20"},containerBox:{default:"#ffffff",main:"#f5f5f5"},action:{active:"rgba(0, 0, 0, 0.10)",hover:"rgba(0, 0, 0, 0.05)",selected:"#fafafa",disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.58)",colorMain:"#707070"},divider:"rgba(0, 0, 0, 0.12)",dropdownBox:"#ffffff",color:{icons:"#707070"},cellHeader:"#d3d3d3",Skeleton:{bg:"#f5f5f5"},messageBox:"#d3e6fd",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),y=a.createTheme({name:"darkBlue",palette:{mode:"dark",primary:{main:"#1f5c8e",light:"#2196f3",dark:"#0d47a1",contrastText:"#fff"},secondary:{light:"#FFEA41",main:"#90caf9",dark:"#DBBE01",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#f44336",light:"#e57373",dark:"#d32f2f"},warning:{main:"#ffa726",light:"#ffb74d",dark:"#f57c00"},info:{main:"#29b6f6",light:"#4fc3f7",dark:"#0288d1"},success:{main:"#66bb6a",light:"#81c784",dark:"#388e3c"},background:{default:"#222B45",mainGradient:"linear-gradient(270deg, #222B45, #222B45)",mainCenter:"#28324e",navMenu:"#222B45",panel:"#2d364e",dropdownMenu:"#484f65",tooltip:"#484f65",accordionHeader:"#2a3249e3",panelHeader:"#2a3249e3",panelCenter:"#484f65",panelGradient:"#384057",selectedItem:"#eeeeee30",paper:"#2d364e"},containerBox:{default:"#2d354e",main:"#2d354e"},action:{active:"rgba(255, 255, 255, 0.2)",hover:"rgba(255, 255, 255, 0.08)",selected:"rgba(255, 255, 255, 0.16)",disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"#EEEEEF",secondary:"#AEB0B4",disabled:"rgba(255, 255, 255, 0.5)",colorMain:"#EEEEEF"},divider:"rgba(255, 255, 255, 0.12)",dropdownBox:"#2d354e",color:{icons:"#fff"},cellHeader:"#505050",Skeleton:{bg:"#f5f5f5"},messageBox:"#1f5c8e",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),F=a.createTheme({name:"darkBlack",palette:{mode:"dark",background:{default:"#201f1e",mainGradient:"linear-gradient(270deg, #201f1e, #201f1e)",mainCenter:"#252423",navMenu:"#201f1e",panel:"#3B3A39",dropdownMenu:"#585858",tooltip:"#616161eb",accordionHeader:"#25242369",panelHeader:"#3b3a39ba",panelCenter:"#585858",panelGradient:"#454443",selectedItem:"#eeeeee30",paper:"#3B3A39"},primary:{main:"#1976d2",light:"#2196f3",dark:"#42a5f5",contrastText:"#fff"},secondary:{light:"#FFEA41",main:"#90caf9",dark:"#DBBE01",contrastText:"rgba(0, 0, 0, 0.87)"},error:{main:"#f44336",light:"#e57373",dark:"#d32f2f"},warning:{main:"#ffa726",light:"#ffb74d",dark:"#f57c00"},info:{main:"#29b6f6",light:"#4fc3f7",dark:"#0288d1"},success:{main:"#66bb6a",light:"#81c784",dark:"#388e3c"},containerBox:{main:"#ffffffb3",default:"#3B3A39"},action:{active:"rgba(255, 255, 255, 0.2)",hover:"rgba(255, 255, 255, 0.08)",selected:"rgba(255, 255, 255, 0.16)",disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)"},text:{primary:"#EEEEEF",secondary:"#AEB0B4",disabled:"rgba(255, 255, 255, 0.5)",colorMain:"#EEEEEF"},divider:"rgba(255, 255, 255, 0.12)",dropdownBox:"#3B3A39",color:{icons:"#fff"},cellHeader:"#505050",Skeleton:{bg:"#f5f5f5"},messageBox:"#1f5c8e",boxShadow:"rgba(0, 0, 0, 0.1)",disabled:"rgba(0, 0, 0, 0.26)"}}),T="trii-theme",A=e=>`https://agent-api.trii.app/api/v1/settings/${e}/user/setTheme`,P=()=>{try{const e=localStorage.getItem(T);if(e&&S(e))return i(e)}catch{}return n},v=e=>{try{localStorage.setItem(T,e)}catch{}},R={themeSelected:P(),darkMode:!1,toggleStatus:"idle"},w=l.createAsyncThunk("Theme/updateTheme",async(e,{getState:f})=>{const{uid:r="",spaceId:t=""}=f().User.user??{},d=JSON.stringify({theme:e,uid:r});return(await E.default.put(A(t),d,{headers:{"Content-Type":"application/json"}})).data}),M=l.createSlice({name:"Theme",initialState:R,reducers:{toggleTheme:(e,f)=>{v(f.payload);const r=i(f.payload);Object.assign(e,{themeSelected:r,toggleStatus:"toggled"})},toggleModeTheme:e=>{e.darkMode=!e.darkMode}},extraReducers:e=>{e.addCase(w.fulfilled,(f,r)=>{v(r.payload.theme);const t=i(r.payload.theme);Object.assign(f,{themeSelected:t})})}}),i=e=>{switch(e){case"lightBlueIndigo":return n;case"darkBlack":return F;case"darkBlue":return y;case"lightAmber":return u;case"lightBlue":return o;case"lightBrown":return x;case"lightGray":return B;case"lightGreen":return c;case"lightLime":return h;case"lightOrange":return k;case"lightPink":return b;case"lightPurple":return s;case"lightRed":return g;case"lightTeal":return m;case"lightYellow":return p;default:return n}},S=e=>["lightBlueIndigo","darkBlack","darkBlue","lightAmber","lightBlue","lightBrown","lightGray","lightGreen","lightLime","lightOrange","lightPink","lightPurple","lightRed","lightTeal","lightYellow"].includes(e),{toggleTheme:D,toggleModeTheme:L}=M.actions,Y=e=>e.Theme.toggleStatus,H=e=>e.Theme.themeSelected,C=e=>e.Theme.darkMode,_=H,j=C;var q=M.reducer;exports.MuiComponentsConfig=O,exports.darkBlack=F,exports.darkBlue=y,exports.isValidThemeName=S,exports.lightAmber=u,exports.lightBlue=o,exports.lightBlueIndigo=n,exports.lightBrown=x,exports.lightGray=B,exports.lightGreen=c,exports.lightLime=h,exports.lightOrange=k,exports.lightPink=b,exports.lightPurple=s,exports.lightRed=g,exports.lightTeal=m,exports.lightYellow=p,exports.selectDarkTheme=C,exports.selectTheme=H,exports.selectThemeToggleStatus=Y,exports.selectedDarkTheme=j,exports.selectedTheme=_,exports.themeReducer=q,exports.toggleModeTheme=L,exports.toggleTheme=D,exports.updateTheme=w;
|
|
1
|
+
"use strict";var s=require("@mui/material"),a=require("@mui/material/styles"),u=require("@reduxjs/toolkit"),E=require("axios");function f(r){return r&&r.__esModule?r:{default:r}}var O=f(E);const w=r=>{if(r.palette.mode!=="dark")return r;const{palette:e}=r,o=a.alpha(e.text.secondary,.5),i=a.alpha(e.text.secondary,.72);return a.createTheme(r,{components:{MuiSelect:{defaultProps:{MenuProps:{PaperProps:{sx:{backgroundColor:e.background.dropdownMenu,backgroundImage:"none"}}}}},MuiTypography:{styleOverrides:{root:{color:e.text.primary}}},MuiPaper:{styleOverrides:{root:{backgroundColor:e.background.paper,backgroundImage:"none"},outlined:{borderColor:e.divider}}},MuiCard:{styleOverrides:{root:{backgroundColor:e.background.paper,backgroundImage:"none",borderColor:e.divider}}},MuiDialog:{styleOverrides:{paper:{backgroundColor:e.background.dropdownMenu,backgroundImage:"none",border:`1px solid ${e.divider}`}}},MuiDrawer:{styleOverrides:{paper:{backgroundColor:e.background.dropdownMenu,backgroundImage:"none",borderColor:e.divider}}},MuiPopover:{styleOverrides:{paper:{backgroundColor:e.background.dropdownMenu,backgroundImage:"none",border:`1px solid ${e.divider}`}}},MuiMenu:{styleOverrides:{paper:{backgroundColor:e.background.dropdownMenu,backgroundImage:"none",border:`1px solid ${e.divider}`}}},MuiOutlinedInput:{styleOverrides:{root:{backgroundColor:a.alpha(e.background.default,.34),"& .MuiOutlinedInput-notchedOutline":{borderColor:o},"&:hover .MuiOutlinedInput-notchedOutline":{borderColor:i},"&.Mui-focused .MuiOutlinedInput-notchedOutline":{borderColor:e.primary.light,borderWidth:2},"&.Mui-disabled .MuiOutlinedInput-notchedOutline":{borderColor:a.alpha(e.text.disabled,.36)}},input:{"&::placeholder":{color:e.text.disabled,opacity:1}}}},MuiInputLabel:{styleOverrides:{root:{color:e.text.secondary,"&.Mui-focused":{color:e.primary.light},"&.Mui-disabled":{color:e.text.disabled}}}},MuiButton:{styleOverrides:{root:{"&.Mui-disabled":{color:e.text.disabled,borderColor:a.alpha(e.text.disabled,.38)}},containedPrimary:{backgroundColor:e.primary.main,color:e.primary.contrastText,"&:hover":{backgroundColor:e.primary.dark}},outlined:{color:e.primary.light,borderColor:a.alpha(e.primary.light,.72),"&:hover":{color:e.primary.light,borderColor:e.primary.light,backgroundColor:a.alpha(e.primary.light,.1)}},textPrimary:{color:e.primary.light,"&:hover":{backgroundColor:a.alpha(e.primary.light,.1)}}}},MuiIconButton:{styleOverrides:{root:{color:e.text.secondary,"&:hover":{color:e.text.primary,backgroundColor:e.action.hover},"&.MuiIconButton-colorPrimary":{color:e.primary.light},"&.MuiIconButton-colorError":{color:e.error.light},"&.Mui-disabled":{color:e.text.disabled}}}},MuiChip:{styleOverrides:{root:{color:e.text.primary,backgroundColor:a.alpha(e.text.primary,.07),borderColor:o,"& .MuiChip-icon":{color:"inherit"},"&.MuiChip-colorSuccess":{color:e.success.light,backgroundColor:e.success.dark,borderColor:a.alpha(e.success.light,.46)},"&.MuiChip-colorWarning":{color:e.warning.light,backgroundColor:e.warning.dark,borderColor:a.alpha(e.warning.light,.46)},"&.MuiChip-colorError":{color:e.error.light,backgroundColor:e.error.dark,borderColor:a.alpha(e.error.light,.46)},"&.MuiChip-colorInfo":{color:e.info.light,backgroundColor:e.info.dark,borderColor:a.alpha(e.info.light,.46)}}}},MuiAlert:{styleOverrides:{root:{border:"1px solid currentColor"},standardSuccess:{color:e.success.light,backgroundColor:e.success.dark},standardWarning:{color:e.warning.light,backgroundColor:e.warning.dark},standardError:{color:e.error.light,backgroundColor:e.error.dark},standardInfo:{color:e.info.light,backgroundColor:e.info.dark}}},MuiTableHead:{styleOverrides:{root:{backgroundColor:e.cellHeader}}},MuiTableCell:{styleOverrides:{root:{borderColor:e.divider},head:{color:e.text.primary,fontWeight:700}}},MuiTableRow:{styleOverrides:{root:{"&:hover":{backgroundColor:e.action.hover},"&.Mui-selected":{backgroundColor:e.action.selected,"&:hover":{backgroundColor:e.action.selected}}}}},MuiTabs:{styleOverrides:{indicator:{backgroundColor:e.primary.light}}},MuiTab:{styleOverrides:{root:{color:e.text.secondary,"&.Mui-selected":{color:e.primary.light}}}},MuiSwitch:{styleOverrides:{switchBase:{color:e.text.disabled,"&.Mui-checked":{color:e.primary.light,"& + .MuiSwitch-track":{backgroundColor:e.primary.light,opacity:.5}}},track:{backgroundColor:e.text.disabled,opacity:.34}}},MuiTooltip:{styleOverrides:{tooltip:{color:e.text.primary,backgroundColor:e.background.tooltip,border:`1px solid ${o}`},arrow:{color:e.background.tooltip}}},MuiDivider:{styleOverrides:{root:{borderColor:e.divider}}},MuiLink:{styleOverrides:{root:{color:e.primary.light}}}}})},A=(r,e={})=>{const{transparentModal:o=!1,autocompleteZIndex:i=11}=e,l=r.palette.background,d=s.createTheme({...r,components:{MuiSelect:{defaultProps:{MenuProps:{PaperProps:{sx:{backgroundColor:l.panel,backgroundImage:"linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))"}}}}},MuiAutocomplete:{styleOverrides:{popper:{zIndex:i,"& div":{backgroundColor:l.panel}}}},MuiPaper:{styleOverrides:{root:{backgroundColor:l.panel,backgroundImage:"linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))"}}},MuiMenu:{styleOverrides:{paper:{backgroundColor:l.panel,backgroundImage:"linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))"}}},MuiList:{styleOverrides:{root:{padding:0}}},MuiModal:{styleOverrides:{root:o?{background:"transparent","& .MuiBackdrop-root":{background:"transparent",border:"none"}}:{}}},MuiTypography:{styleOverrides:{root:{color:r.palette.text.primary}}},MuiChip:{styleOverrides:{root:{color:r.palette.text.primary,border:"1px solid rgba(0, 0, 0, 0.1)",borderRadius:"4px",height:"20px",fontSize:"0.7125rem"}}},MuiListSubheader:{styleOverrides:{root:{backgroundColor:l.accordionHeader}}},MuiButton:{styleOverrides:{outlined:{color:r.palette.mode==="light"?r.palette.primary.dark:r.palette.primary.light,borderColor:r.palette.mode==="light"?r.palette.primary.dark:r.palette.primary.light,"&:hover":{borderColor:r.palette.mode==="light"?r.palette.primary.main:r.palette.primary.light,color:r.palette.mode==="light"?r.palette.primary.main:r.palette.primary.light}}}}}});return w(d)},p={main:"#246FB5",light:"#78B7F2",dark:"#195A96",contrastText:"#FFFFFF"},t=s.createTheme({name:"light",palette:{mode:"light",contrastThreshold:4.5,primary:p,secondary:{main:"#526078",light:"#728099",dark:"#38445A",contrastText:"#FFFFFF"},error:{main:"#BD3446",light:"#FCECEF",dark:"#932536",contrastText:"#FFFFFF"},warning:{main:"#946000",light:"#FFF5DF",dark:"#704800",contrastText:"#FFFFFF"},info:{main:"#176B9B",light:"#EAF4FC",dark:"#125174",contrastText:"#FFFFFF"},success:{main:"#237547",light:"#EAF6EE",dark:"#185935",contrastText:"#FFFFFF"},background:{default:"#F4F6FA",paper:"#FFFFFF",mainCenter:"#F4F6FA",mainGradient:"linear-gradient(120deg, #195A96, #246FB5)",navMenu:"#EDF1F7",dropdownMenu:"#FFFFFF",panel:"#FFFFFF",tooltip:"#EDF1F7",accordionHeader:"#EDF1F7",panelHeader:"#EDF1F7",panelCenter:"#F8FAFD",panelGradient:"#EDF1F7",selectedItem:"#E5EFFA"},text:{primary:"#202C3E",secondary:"#526078",disabled:"#7C8798",colorMain:"#202C3E"},action:{active:"#526078",hover:"rgba(36, 111, 181, 0.06)",selected:"rgba(36, 111, 181, 0.12)",disabled:"#8893A3",disabledBackground:"#E8ECF2"},divider:"#D7DEE9",containerBox:{default:"#FFFFFF",main:"#F8FAFD"},dropdownBox:"#FFFFFF",color:{icons:"#526078"},cellHeader:"#EDF1F7",Skeleton:{bg:"#E4EAF2"},messageBox:"#E5EFFA",boxShadow:"rgba(25, 42, 66, 0.12)",disabled:"#8893A3"}}),n=s.createTheme({name:"dark",palette:{mode:"dark",contrastThreshold:4.5,primary:p,secondary:{main:"#B7B5D9",light:"#D6D4EF",dark:"#46415F",contrastText:"#171824"},error:{main:"#F06B7A",light:"#FF9AA8",dark:"#4A1D24",contrastText:"#2B0D12"},warning:{main:"#E5A93B",light:"#FFD27A",dark:"#493515",contrastText:"#2A1B05"},info:{main:"#4FAFE8",light:"#7CCBFF",dark:"#123955",contrastText:"#082033"},success:{main:"#43C17A",light:"#75E0A7",dark:"#143D2B",contrastText:"#092116"},background:{default:"#111520",paper:"#1B2333",mainCenter:"#151C2A",mainGradient:"linear-gradient(120deg, #131B2B, #242237)",navMenu:"#0E121C",dropdownMenu:"#252D40",panel:"#1B2333",tooltip:"#30384F",accordionHeader:"#20283A",panelHeader:"#20283A",panelCenter:"#222B3E",panelGradient:"#2C2B40",selectedItem:"#293E59"},text:{primary:"#F1F4FA",secondary:"#BBC6D8",disabled:"#8793A6",colorMain:"#F1F4FA"},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)"},divider:"rgba(187, 198, 216, 0.22)",containerBox:{default:"#1B2333",main:"#222B3E"},dropdownBox:"#252D40",color:{icons:"#BBC6D8"},cellHeader:"#20283A",Skeleton:{bg:"#30384F"},messageBox:"#203953",boxShadow:"rgba(0, 0, 0, 0.40)",disabled:"rgba(187, 198, 216, 0.45)"}}),S={...t,name:"lightBlueIndigo"},D={...t,name:"lightBlue"},I={...t,name:"lightRed"},P={...t,name:"lightGreen"},L={...t,name:"lightPink"},G={...t,name:"lightPurple"},H={...t,name:"lightTeal"},R={...t,name:"lightLime"},_={...t,name:"lightYellow"},N={...t,name:"lightAmber"},$={...t,name:"lightOrange"},W={...t,name:"lightBrown"},Y={...t,name:"lightGray"},q={...n,name:"darkBlue"},z={...n,name:"darkBlack"},m=["light","dark","system"],b=["lightBlueIndigo","lightBlue","lightRed","lightGreen","lightPink","lightPurple","lightTeal","lightLime","lightYellow","lightAmber","lightOrange","lightBrown","lightGray","darkBlue","darkBlack"],k=r=>m.includes(r)||b.includes(r),g=r=>r==="light"||r==="dark"||r==="system"?r:r&&b.includes(r)?r.startsWith("dark")?"dark":"light":"system",F=()=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia("(prefers-color-scheme: dark)"):void 0,c=(r,e=F()?.matches??!1)=>r==="system"?e?"dark":"light":r,j=(r,e)=>{if(r!=="system")return e(r),()=>{};const o=F();if(e(c(r,o?.matches??!1)),!o)return()=>{};const i=l=>e(l.matches?"dark":"light");return typeof o.addEventListener=="function"?(o.addEventListener("change",i),()=>o.removeEventListener("change",i)):(o.addListener(i),()=>o.removeListener(i))},y="trii-theme",V=r=>`https://agent-api.trii.app/api/v1/settings/${r}/user/setTheme`,J=()=>{try{return g(localStorage.getItem(y))}catch{return"system"}},U=r=>{try{localStorage.setItem(y,r)}catch{}},C=J(),M=c(C),Z={themeSelected:M==="dark"?n:t,preference:C,darkMode:M==="dark",toggleStatus:"idle"},T=u.createAsyncThunk("Theme/updateTheme",async(r,{getState:e})=>{const{uid:o="",spaceId:i=""}=e().User.user??{},l=JSON.stringify({theme:r,uid:o}),d=await O.default.put(V(i),l,{headers:{"Content-Type":"application/json"}});if(!k(d.data.theme))throw new Error("Invalid theme response");return d.data}),v=u.createSlice({name:"Theme",initialState:Z,reducers:{toggleTheme:(r,e)=>{h(r,e.payload)},systemThemeChanged:(r,e)=>{r.preference==="system"&&Object.assign(r,{themeSelected:e.payload==="dark"?n:t,darkMode:e.payload==="dark",toggleStatus:"toggled"})},toggleModeTheme:r=>{h(r,r.darkMode?"light":"dark")}},extraReducers:r=>{r.addCase(T.fulfilled,(e,o)=>{h(e,o.payload.theme)})}});function h(r,e){const o=g(e),i=c(o);U(e);const l=i==="dark"?n:t,d=e==="system"||e==="light"||e==="dark"?l:{...l,name:e};Object.assign(r,{preference:o,themeSelected:d,darkMode:i==="dark",toggleStatus:"toggled"})}const K=r=>r.Theme.preference,{toggleTheme:Q,toggleModeTheme:X,systemThemeChanged:ee}=v.actions,re=r=>r.Theme.toggleStatus,B=r=>r.Theme.themeSelected,x=r=>r.Theme.darkMode,oe=B,te=x;var ae=v.reducer;exports.MuiComponentsConfig=A,exports.THEME_PREFERENCES=m,exports.darkBlack=z,exports.darkBlue=q,exports.darkTheme=n,exports.isValidThemeName=k,exports.lightAmber=N,exports.lightBlue=D,exports.lightBlueIndigo=S,exports.lightBrown=W,exports.lightGray=Y,exports.lightGreen=P,exports.lightLime=R,exports.lightOrange=$,exports.lightPink=L,exports.lightPurple=G,exports.lightRed=I,exports.lightTeal=H,exports.lightTheme=t,exports.lightYellow=_,exports.normalizeThemePreference=g,exports.observeThemePreference=j,exports.resolveThemePreference=c,exports.selectDarkTheme=x,exports.selectTheme=B,exports.selectThemePreference=K,exports.selectThemeToggleStatus=re,exports.selectedDarkTheme=te,exports.selectedTheme=oe,exports.systemThemeChanged=ee,exports.themeReducer=ae,exports.toggleModeTheme=X,exports.toggleTheme=Q,exports.updateTheme=T;
|
|
2
2
|
//# sourceMappingURL=theme.js.map
|
package/dist/cjs/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sources":["../../src/theme/MuiComponentsConfig.ts","../../src/theme/themeProvider.ts","../../src/theme/themeSlice.ts"],"sourcesContent":["import { createTheme, Theme } from '@mui/material';\n\n/**\n * Ajustes que difieren entre apps. Los valores por defecto son los que ya\n * usaba el paquete, asi que omitir las opciones no cambia nada.\n */\nexport interface MuiComponentsConfigOptions {\n /**\n * Fondo del modal y su backdrop en transparente. Lo usan header y home;\n * contacts lo tenia desactivado a proposito.\n */\n transparentModal?: boolean;\n /** z-index del popper del Autocomplete. Header necesita 1; el resto, 11. */\n autocompleteZIndex?: number;\n}\n\nconst MuiComponentsConfig = (\n themeRedux: Theme,\n options: MuiComponentsConfigOptions = {}\n): Theme => {\n const { transparentModal = false, autocompleteZIndex = 11 } = options;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bg = themeRedux.palette.background as any;\n\n return createTheme({\n ...themeRedux,\n components: {\n MuiSelect: {\n defaultProps: {\n MenuProps: {\n PaperProps: {\n sx: {\n backgroundColor: bg.panel,\n backgroundImage:\n 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\n },\n },\n },\n },\n },\n MuiAutocomplete: {\n styleOverrides: {\n popper: {\n zIndex: autocompleteZIndex,\n '& div': {\n backgroundColor: bg.panel,\n },\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n backgroundColor: bg.panel,\n backgroundImage:\n 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\n },\n },\n },\n MuiMenu: {\n styleOverrides: {\n paper: {\n backgroundColor: bg.panel,\n backgroundImage:\n 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\n },\n },\n },\n MuiList: {\n styleOverrides: {\n root: {\n padding: 0,\n },\n },\n },\n MuiModal: {\n styleOverrides: {\n root: transparentModal\n ? {\n background: 'transparent',\n '& .MuiBackdrop-root': {\n background: 'transparent',\n border: 'none',\n },\n }\n : {},\n },\n },\n MuiTypography: {\n styleOverrides: {\n root: {\n color: themeRedux.palette.text.primary,\n },\n },\n },\n MuiChip: {\n styleOverrides: {\n root: {\n color: themeRedux.palette.text.primary,\n border: '1px solid rgba(0, 0, 0, 0.1)',\n borderRadius: '4px',\n height: '20px',\n fontSize: '0.7125rem',\n },\n },\n },\n MuiListSubheader: {\n styleOverrides: {\n root: {\n backgroundColor: bg.accordionHeader,\n },\n },\n },\n MuiButton: {\n styleOverrides: {\n outlined: {\n color:\n themeRedux.palette.mode === 'light'\n ? themeRedux.palette.primary.dark\n : themeRedux.palette.info.dark,\n borderColor:\n themeRedux.palette.mode === 'light'\n ? themeRedux.palette.primary.dark\n : themeRedux.palette.info.dark,\n '&:hover': {\n borderColor:\n themeRedux.palette.mode === 'light'\n ? themeRedux.palette.primary.main\n : themeRedux.palette.info.main,\n color:\n themeRedux.palette.mode === 'light'\n ? themeRedux.palette.primary.main\n : themeRedux.palette.info.main,\n },\n },\n },\n },\n },\n });\n};\n\nexport default MuiComponentsConfig;\n","import { createTheme, Theme } from '@mui/material'\n\n// ─── Extensión de tipos de MUI ──────────────────────────────────────────────\ndeclare module '@mui/material/styles' {\n interface TypeBackground {\n mainCenter: string;\n mainGradient: string;\n navMenu: string;\n dropdownMenu: string;\n panel: string;\n tooltip: string;\n accordionHeader: string;\n panelHeader: string;\n panelCenter: string;\n panelGradient: string;\n selectedItem: string;\n }\n\n interface TypeText {\n colorMain: string;\n }\n\n interface Palette {\n containerBox: {\n default: string;\n main: string;\n };\n dropdownBox: string;\n color: {\n icons: string;\n };\n cellHeader: string;\n Skeleton: {\n bg: string;\n };\n messageBox: string;\n boxShadow: string;\n disabled: string;\n }\n\n interface PaletteOptions {\n containerBox?: {\n default?: string;\n main?: string;\n };\n dropdownBox?: string;\n color?: {\n icons?: string;\n };\n cellHeader?: string;\n Skeleton?: {\n bg?: string;\n };\n messageBox?: string;\n boxShadow?: string;\n disabled?: string;\n }\n\n interface Theme {\n name?: string;\n }\n\n interface ThemeOptions {\n name?: string;\n }\n}\n// ────────────────────────────────────────────────────────────────────────────\n\n// Temas claros\nexport const lightBlueIndigo: Theme = createTheme({\n\tname: 'lightBlueIndigo',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#ebf6fd',\n\t\t\tmainGradient: 'linear-gradient(270deg, #215c97, #1976d2)',\n\t\t\tnavMenu: '#1976d2',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#1976d2',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#1976d2',\n\t\t\tlight: '#42a5f5',\n\t\t\tdark: '#1565c0',\n\t\t\tcontrastText: '#fff'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#1976d2',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#ebf6fd',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#1976d2'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#1976d2'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightBlue: Theme = createTheme({\n\tname: 'lightBlue',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#e3f2fd',\n\t\t\tmainGradient: 'linear-gradient(270deg, #005cb2, #1e88e5)',\n\t\t\tnavMenu: '#4fc354',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#1e88e5',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#1e88e5',\n\t\t\tlight: '#6ab7ff',\n\t\t\tdark: '#005cb2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#1e88e5',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#e3f2fd',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#005cb2'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#005cb2'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightRed: Theme = createTheme({\n\tname: 'lightRed',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#ffebee',\n\t\t\tmainGradient: 'linear-gradient(270deg, #b61827, #ef5350)',\n\t\t\tnavMenu: '#f44336',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#ef5350',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#ef5350',\n\t\t\tlight: '#ff867c',\n\t\t\tdark: '#b61827',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#ef5350',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#ffebee',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#b61827'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#b61827'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightGreen: Theme = createTheme({\n\tname: 'lightGreen',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#e8f5e9',\n\t\t\tmainGradient: 'linear-gradient(270deg, #087f23, #4caf50)',\n\t\t\tnavMenu: '#4fc354',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#4caf50',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#4caf50',\n\t\t\tlight: '#80e27e',\n\t\t\tdark: '#087f23',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#4caf50',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#e8f5e9',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#087f23'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#087f23'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightPink: Theme = createTheme({\n\tname: 'lightPink',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#fce4ec',\n\t\t\tmainGradient: 'linear-gradient(270deg, #b0003a, #e6175d)',\n\t\t\tnavMenu: '#e6175d',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#e6175d',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#e6175d',\n\t\t\tlight: '#ff6090',\n\t\t\tdark: '#b0003a',\n\t\t\tcontrastText: '#fff'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#9c27b0',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#fce4ec',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#b0003a'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#b0003a'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightPurple: Theme = createTheme({\n\tname: 'lightPurple',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#f3e5f5',\n\t\t\tmainGradient: 'linear-gradient(270deg, #6a0080, #9c27b0)',\n\t\t\tnavMenu: '#f8bbd0',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#9c27b0',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#9c27b0',\n\t\t\tlight: '#d05ce3',\n\t\t\tdark: '#6a0080',\n\t\t\tcontrastText: '#fff'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#9c27b0',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#f3e5f5',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#9c27b0'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#9c27b0'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightTeal: Theme = createTheme({\n\tname: 'lightTeal',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#e0f2f1',\n\t\t\tmainGradient: 'linear-gradient(270deg, #00675b, #009688)',\n\t\t\tnavMenu: '#f8bbd0',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#009688',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#009688',\n\t\t\tlight: '#52c7b8',\n\t\t\tdark: '#00675b',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#009688',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#e0f2f1',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#00675b'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#00675b'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightLime: Theme = createTheme({\n\tname: 'lightLime',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#f9fbe7',\n\t\t\tmainGradient: 'linear-gradient(270deg, #99aa00, #cddc39)',\n\t\t\tnavMenu: '#f8bbd0',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#cddc39',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#cddc39',\n\t\t\tlight: '#ffff6e',\n\t\t\tdark: '#99aa00',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#cddc39',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#f9fbe7',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#737c16'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#737c16'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightYellow: Theme = createTheme({\n\tname: 'lightYellow',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#fffde7',\n\t\t\tmainGradient: 'linear-gradient(270deg, #c8b900, #ffeb3b)',\n\t\t\tnavMenu: '#f8bbd0',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#ffeb3b',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#ffeb3b',\n\t\t\tlight: '#ffff72',\n\t\t\tdark: '#c8b900',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#ffeb3b',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#fffde7',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#847700'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#847700'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightAmber: Theme = createTheme({\n\tname: 'lightAmber',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#fff8e1',\n\t\t\tmainGradient: 'linear-gradient(270deg, #c68400, #ffb300)',\n\t\t\tnavMenu: '#f8bbd0',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#ffb300',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#ffb300',\n\t\t\tlight: '#ffe54c',\n\t\t\tdark: '#c68400',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#ffb300',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#fff8e1',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#9c6e00'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#9c6e00'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightOrange: Theme = createTheme({\n\tname: 'lightOrange',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#fff3e0',\n\t\t\tmainGradient: 'linear-gradient(270deg, #c66900, #ff9800)',\n\t\t\tnavMenu: '#f8bbd0',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#ff9800',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#ff9800',\n\t\t\tlight: '#ffc947',\n\t\t\tdark: '#c66900',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#ff9800',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#fff3e0',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#ab6600'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#ab6600'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightBrown: Theme = createTheme({\n\tname: 'lightBrown',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#efebe9',\n\t\t\tmainGradient: 'linear-gradient(270deg, #4b2c20, #795548)',\n\t\t\tnavMenu: '#f8bbd0',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#795548',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#795548',\n\t\t\tlight: '#a98274',\n\t\t\tdark: '#4b2c20',\n\t\t\tcontrastText: '#fff'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#795548',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#efebe9',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#795548'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#795548'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const lightGray: Theme = createTheme({\n\tname: 'lightGray',\n\tpalette: {\n\t\tmode: 'light',\n\t\tbackground: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmainCenter: '#fafafa',\n\t\t\tmainGradient: 'linear-gradient(270deg, #707070, #9e9e9e)',\n\t\t\tnavMenu: '#f8bbd0',\n\t\t\tdropdownMenu: '#f5f5f5',\n\t\t\tpanel: '#ffffff',\n\t\t\ttooltip: '#9e9e9e',\n\t\t\taccordionHeader: '#F3F4F6',\n\t\t\tpanelHeader: '#F3F4F6',\n\t\t\tpanelCenter: '#ffffff',\n\t\t\tpanelGradient: '#ffffff',\n\t\t\tselectedItem: '#75757530',\n\t\t\tpaper: '#ffffff'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#9e9e9e',\n\t\t\tlight: '#cfcfcf',\n\t\t\tdark: '#707070',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\tsecondary: {\n\t\t\tmain: '#9e9e9e',\n\t\t\tlight: '#ba68c8',\n\t\t\tdark: '#7b1fa2',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#d32f2f',\n\t\t\tlight: '#ef5350',\n\t\t\tdark: '#c62828'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ed6c02',\n\t\t\tlight: '#ff9800',\n\t\t\tdark: '#e65100'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#0288d1',\n\t\t\tlight: '#03a9f4',\n\t\t\tdark: '#01579b'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#2e7d32',\n\t\t\tlight: '#4caf50',\n\t\t\tdark: '#1b5e20'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#ffffff',\n\t\t\tmain: '#f5f5f5'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(0, 0, 0, 0.10)',\n\t\t\thover: 'rgba(0, 0, 0, 0.05)',\n\t\t\tselected: '#fafafa',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.26)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: 'rgba(0, 0, 0, 0.87)',\n\t\t\tsecondary: 'rgba(0, 0, 0, 0.6)',\n\t\t\tdisabled: 'rgba(0, 0, 0, 0.58)',\n\t\t\tcolorMain: '#707070'\n\t\t},\n\t\tdivider: 'rgba(0, 0, 0, 0.12)',\n\t\tdropdownBox: '#ffffff',\n\t\tcolor: {\n\t\t\ticons: '#707070'\n\t\t},\n\t\tcellHeader: '#d3d3d3',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#d3e6fd',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\n// Temas oscuros\nexport const darkBlue: Theme = createTheme({\n\tname: 'darkBlue',\n\tpalette: {\n\t\tmode: 'dark',\n\t\tprimary: {\n\t\t\tmain: '#1f5c8e',\n\t\t\tlight: '#2196f3',\n\t\t\tdark: '#0d47a1',\n\t\t\tcontrastText: '#fff'\n\t\t},\n\t\tsecondary: {\n\t\t\tlight: '#FFEA41',\n\t\t\tmain: '#90caf9',\n\t\t\tdark: '#DBBE01',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#f44336',\n\t\t\tlight: '#e57373',\n\t\t\tdark: '#d32f2f'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ffa726',\n\t\t\tlight: '#ffb74d',\n\t\t\tdark: '#f57c00'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#29b6f6',\n\t\t\tlight: '#4fc3f7',\n\t\t\tdark: '#0288d1'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#66bb6a',\n\t\t\tlight: '#81c784',\n\t\t\tdark: '#388e3c'\n\t\t},\n\t\tbackground: {\n\t\t\tdefault: '#222B45',\n\t\t\tmainGradient: 'linear-gradient(270deg, #222B45, #222B45)',\n\t\t\tmainCenter: '#28324e',\n\t\t\tnavMenu: '#222B45',\n\t\t\tpanel: '#2d364e',\n\t\t\tdropdownMenu: '#484f65',\n\t\t\ttooltip: '#484f65',\n\t\t\taccordionHeader: '#2a3249e3',\n\t\t\tpanelHeader: '#2a3249e3',\n\t\t\tpanelCenter: '#484f65',\n\t\t\tpanelGradient: '#384057',\n\t\t\tselectedItem: '#eeeeee30',\n\t\t\tpaper: '#2d364e'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tdefault: '#2d354e',\n\t\t\tmain: '#2d354e'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(255, 255, 255, 0.2)',\n\t\t\thover: 'rgba(255, 255, 255, 0.08)',\n\t\t\tselected: 'rgba(255, 255, 255, 0.16)',\n\t\t\tdisabled: 'rgba(255, 255, 255, 0.3)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: '#EEEEEF',\n\t\t\tsecondary: '#AEB0B4',\n\t\t\tdisabled: 'rgba(255, 255, 255, 0.5)',\n\t\t\tcolorMain: '#EEEEEF'\n\t\t},\n\t\tdivider: 'rgba(255, 255, 255, 0.12)',\n\t\tdropdownBox: '#2d354e',\n\t\tcolor: {\n\t\t\ticons: '#fff'\n\t\t},\n\t\tcellHeader: '#505050',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#1f5c8e',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\nexport const darkBlack: Theme = createTheme({\n\tname: 'darkBlack',\n\tpalette: {\n\t\tmode: 'dark',\n\t\tbackground: {\n\t\t\tdefault: '#201f1e',\n\t\t\tmainGradient: 'linear-gradient(270deg, #201f1e, #201f1e)',\n\t\t\tmainCenter: '#252423',\n\t\t\tnavMenu: '#201f1e',\n\t\t\tpanel: '#3B3A39',\n\t\t\tdropdownMenu: '#585858',\n\t\t\ttooltip: '#616161eb',\n\t\t\taccordionHeader: '#25242369',\n\t\t\tpanelHeader: '#3b3a39ba',\n\t\t\tpanelCenter: '#585858',\n\t\t\tpanelGradient: '#454443',\n\t\t\tselectedItem: '#eeeeee30',\n\t\t\tpaper: '#3B3A39'\n\t\t},\n\t\tprimary: {\n\t\t\tmain: '#1976d2',\n\t\t\tlight: '#2196f3',\n\t\t\tdark: '#42a5f5',\n\t\t\tcontrastText: '#fff'\n\t\t},\n\t\tsecondary: {\n\t\t\tlight: '#FFEA41',\n\t\t\tmain: '#90caf9',\n\t\t\tdark: '#DBBE01',\n\t\t\tcontrastText: 'rgba(0, 0, 0, 0.87)'\n\t\t},\n\t\terror: {\n\t\t\tmain: '#f44336',\n\t\t\tlight: '#e57373',\n\t\t\tdark: '#d32f2f'\n\t\t},\n\t\twarning: {\n\t\t\tmain: '#ffa726',\n\t\t\tlight: '#ffb74d',\n\t\t\tdark: '#f57c00'\n\t\t},\n\t\tinfo: {\n\t\t\tmain: '#29b6f6',\n\t\t\tlight: '#4fc3f7',\n\t\t\tdark: '#0288d1'\n\t\t},\n\t\tsuccess: {\n\t\t\tmain: '#66bb6a',\n\t\t\tlight: '#81c784',\n\t\t\tdark: '#388e3c'\n\t\t},\n\t\tcontainerBox: {\n\t\t\tmain: '#ffffffb3',\n\t\t\tdefault: '#3B3A39'\n\t\t},\n\t\taction: {\n\t\t\tactive: 'rgba(255, 255, 255, 0.2)',\n\t\t\thover: 'rgba(255, 255, 255, 0.08)',\n\t\t\tselected: 'rgba(255, 255, 255, 0.16)',\n\t\t\tdisabled: 'rgba(255, 255, 255, 0.3)',\n\t\t\tdisabledBackground: 'rgba(255, 255, 255, 0.12)'\n\t\t},\n\t\ttext: {\n\t\t\tprimary: '#EEEEEF',\n\t\t\tsecondary: '#AEB0B4',\n\t\t\tdisabled: 'rgba(255, 255, 255, 0.5)',\n\t\t\tcolorMain: '#EEEEEF'\n\t\t},\n\t\tdivider: 'rgba(255, 255, 255, 0.12)',\n\t\tdropdownBox: '#3B3A39',\n\t\tcolor: {\n\t\t\ticons: '#fff'\n\t\t},\n\t\tcellHeader: '#505050',\n\t\tSkeleton: {\n\t\t\tbg: '#f5f5f5'\n\t\t},\n\t\tmessageBox: '#1f5c8e',\n\t\tboxShadow: 'rgba(0, 0, 0, 0.1)',\n\t\tdisabled: 'rgba(0, 0, 0, 0.26)'\n\t}\n})\n\n","import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\nimport { Theme } from '@mui/material';\nimport {\n lightBlueIndigo,\n darkBlack,\n darkBlue,\n lightAmber,\n lightBlue,\n lightBrown,\n lightGray,\n lightGreen,\n lightLime,\n lightOrange,\n lightPink,\n lightPurple,\n lightRed,\n lightTeal,\n lightYellow,\n} from './themeProvider';\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\nconst themeUrl = (spaceId: string) =>\n `https://agent-api.trii.app/api/v1/settings/${spaceId}/user/setTheme`;\n\n/** Nombres de tema disponibles. */\nexport type ThemeName =\n | 'lightBlueIndigo'\n | 'darkBlack'\n | 'darkBlue'\n | 'lightAmber'\n | 'lightBlue'\n | 'lightBrown'\n | 'lightGray'\n | 'lightGreen'\n | 'lightLime'\n | 'lightOrange'\n | 'lightPink'\n | 'lightPurple'\n | 'lightRed'\n | 'lightTeal'\n | 'lightYellow';\n\n/** Estado del slice. */\nexport interface ThemeState {\n themeSelected: Theme;\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 getSavedTheme = (): Theme => {\n try {\n const saved = localStorage.getItem(THEME_STORAGE_KEY);\n if (saved && isValidThemeName(saved)) return getTheme(saved);\n } catch {\n // localStorage puede no estar disponible (SSR, modo privado)\n }\n return lightBlueIndigo;\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 initialState: ThemeState = {\n themeSelected: getSavedTheme(),\n darkMode: false,\n toggleStatus: 'idle',\n};\n\n/** Guarda el tema elegido en el backend. */\nexport const updateTheme = createAsyncThunk<\n { theme: ThemeName },\n ThemeName,\n { state: ThemeRootState }\n>('Theme/updateTheme', 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 return response.data;\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 saveTheme(action.payload);\n const theme = getTheme(action.payload);\n Object.assign(state, { themeSelected: theme, toggleStatus: 'toggled' });\n },\n /** Alterna el modo oscuro. */\n toggleModeTheme: (state): void => {\n state.darkMode = !state.darkMode;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(updateTheme.fulfilled, (state, action): void => {\n saveTheme(action.payload.theme);\n const theme = getTheme(action.payload.theme);\n Object.assign(state, { themeSelected: theme });\n });\n },\n});\n\n/** Devuelve el objeto Theme de MUI a partir del nombre. */\nconst getTheme = (theme: ThemeName): Theme => {\n switch (theme) {\n case 'lightBlueIndigo':\n return lightBlueIndigo;\n case 'darkBlack':\n return darkBlack;\n case 'darkBlue':\n return darkBlue;\n case 'lightAmber':\n return lightAmber;\n case 'lightBlue':\n return lightBlue;\n case 'lightBrown':\n return lightBrown;\n case 'lightGray':\n return lightGray;\n case 'lightGreen':\n return lightGreen;\n case 'lightLime':\n return lightLime;\n case 'lightOrange':\n return lightOrange;\n case 'lightPink':\n return lightPink;\n case 'lightPurple':\n return lightPurple;\n case 'lightRed':\n return lightRed;\n case 'lightTeal':\n return lightTeal;\n case 'lightYellow':\n return lightYellow;\n default:\n return lightBlueIndigo;\n }\n};\n\n/** Valida que el string sea un `ThemeName`. */\nexport const isValidThemeName = (theme: string): theme is ThemeName => {\n const validThemes: ThemeName[] = [\n 'lightBlueIndigo',\n 'darkBlack',\n 'darkBlue',\n 'lightAmber',\n 'lightBlue',\n 'lightBrown',\n 'lightGray',\n 'lightGreen',\n 'lightLime',\n 'lightOrange',\n 'lightPink',\n 'lightPurple',\n 'lightRed',\n 'lightTeal',\n 'lightYellow',\n ];\n return validThemes.includes(theme as ThemeName);\n};\n\nexport const { toggleTheme, toggleModeTheme } = 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":["MuiComponentsConfig","themeRedux","options","transparentModal","autocompleteZIndex","bg","createTheme","lightBlueIndigo","lightBlue","lightRed","lightGreen","lightPink","lightPurple","lightTeal","lightLime","lightYellow","lightAmber","lightOrange","lightBrown","lightGray","darkBlue","darkBlack","THEME_STORAGE_KEY","themeUrl","spaceId","getSavedTheme","saved","isValidThemeName","getTheme","saveTheme","theme","initialState","updateTheme","createAsyncThunk","getState","uid","themeJson","axios","themeSlice","createSlice","state","action","builder","toggleTheme","toggleModeTheme","selectThemeToggleStatus","selectTheme","selectDarkTheme","selectedTheme","selectedDarkTheme"],"mappings":"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c,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYG,EAAkBH,EAAAA,YAAY,CAC1C,KAAM,WACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYI,EAAoBJ,EAAY,YAAA,CAC5C,KAAM,aACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYK,EAAmBL,EAAAA,YAAY,CAC3C,KAAM,YACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,MACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYM,EAAqBN,EAAY,YAAA,CAC7C,KAAM,cACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,MACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYO,EAAmBP,EAAAA,YAAY,CAC3C,KAAM,YACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYQ,EAAmBR,EAAY,YAAA,CAC3C,KAAM,YACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYS,EAAqBT,EAAAA,YAAY,CAC7C,KAAM,cACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYU,EAAoBV,EAAAA,YAAY,CAC5C,KAAM,aACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYW,EAAqBX,EAAAA,YAAY,CAC7C,KAAM,cACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYY,EAAoBZ,EAAAA,YAAY,CAC5C,KAAM,aACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,MACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAEYa,EAAmBb,EAAAA,YAAY,CAC3C,KAAM,YACN,QAAS,CACR,KAAM,QACN,WAAY,CACX,QAAS,UACT,WAAY,UACZ,aAAc,4CACd,QAAS,UACT,aAAc,UACd,MAAO,UACP,QAAS,UACT,gBAAiB,UACjB,YAAa,UACb,YAAa,UACb,cAAe,UACf,aAAc,YACd,MAAO,SACR,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,UAAW,CACV,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,aAAc,CACb,QAAS,UACT,KAAM,SACP,EACA,OAAQ,CACP,OAAQ,sBACR,MAAO,sBACP,SAAU,UACV,SAAU,sBACV,mBAAoB,2BACrB,EACA,KAAM,CACL,QAAS,sBACT,UAAW,qBACX,SAAU,sBACV,UAAW,SACZ,EACA,QAAS,sBACT,YAAa,UACb,MAAO,CACN,MAAO,SACR,EACA,WAAY,UACZ,SAAU,CACT,GAAI,SACL,EACA,WAAY,UACZ,UAAW,qBACX,SAAU,qBACX,CACD,CAAC,EAGYc,EAAkBd,EAAAA,YAAY,CAC1C,KAAM,WACN,QAAS,CACR,KAAM,OACN,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,UACN,aAAc,MACf,EACA,UAAW,CACV,MAAO,UACP,KAAM,UACN,KAAM,UACN,aAAc,qBACf,EACA,MAAO,CACN,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,KAAM,CACL,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,QAAS,CACR,KAAM,UACN,MAAO,UACP,KAAM,SACP,EACA,WAAY,CACX,QAAS,UACT,aAAc,4CACd,WAAY,UACZ,QAAS,UACT,MAAO,UACP,aAAc,UACd,QAAS,UACT,gBAAiB,YACjB,Y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"}
|
|
1
|
+
{"version":3,"file":"theme.js","sources":["../../src/theme/darkThemeComponents.ts","../../src/theme/MuiComponentsConfig.ts","../../src/theme/themeProvider.ts","../../src/theme/themePreference.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 { 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","\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 { createSlice, createAsyncThunk, PayloadAction, Draft } from '@reduxjs/toolkit';\nimport axios from 'axios';\nimport { Theme } from '@mui/material';\nimport { lightTheme, darkTheme } from './themeProvider';\nimport { ThemeName, ThemePreference, ResolvedTheme, normalizeThemePreference, resolveThemePreference, isValidThemeName } 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\nconst themeUrl = (spaceId: string) =>\n `https://agent-api.trii.app/api/v1/settings/${spaceId}/user/setTheme`;\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/** Guarda el tema elegido en el backend. */\nexport const updateTheme = createAsyncThunk<\n { theme: ThemeName },\n ThemeName,\n { state: ThemeRootState }\n>('Theme/updateTheme', 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/** 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(updateTheme.fulfilled, (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":["applyDarkThemeComponents","sharedTheme","palette","strongOutline","alpha","hoverOutline","createTheme","MuiComponentsConfig","themeRedux","options","transparentModal","autocompleteZIndex","bg","primary","lightTheme","darkTheme","lightBlueIndigo","lightBlue","lightRed","lightGreen","lightPink","lightPurple","lightTeal","lightLime","lightYellow","lightAmber","lightOrange","lightBrown","lightGray","darkBlue","darkBlack","THEME_PREFERENCES","LEGACY_THEME_NAMES","isValidThemeName","name","normalizeThemePreference","systemMedia","resolveThemePreference","preference","systemDark","observeThemePreference","listener","media","change","event","THEME_STORAGE_KEY","themeUrl","spaceId","getSavedPreference","saveTheme","theme","savedPreference","savedMode","initialState","updateTheme","createAsyncThunk","getState","uid","themeJson","response","axios","themeSlice","createSlice","state","action","applyPreference","builder","mode","base","themeSelected","selectThemePreference","toggleTheme","toggleModeTheme","systemThemeChanged","selectThemeToggleStatus","selectTheme","selectDarkTheme","selectedTheme","selectedDarkTheme"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-state.js","sources":["../../src/asyncState/asyncState.ts","../../src/asyncState/getErrorMessage.ts","../../src/asyncState/useAsyncData.ts"],"sourcesContent":["/**\n * Modelo canónico de estado asíncrono (loading / error / caché remota).\n *\n * Unifica cómo los paneles representan el ciclo de vida de un dato remoto:\n *\n * - `idle`/`loading` sin datos → carga inicial (bloqueante: skeleton/spinner).\n * - `loading` con datos → revalidación NO bloqueante (`isRevalidating`).\n * - `rejected` con datos → error manteniendo datos previos + retry.\n * - `rejected` sin datos → error bloqueante con retry.\n * - `succeeded` sin datos → estado realmente vacío (`isEmpty`).\n *\n * Los literales de `AsyncStatus` coinciden con el `RequestStatus` que usan los\n * slices de los frontends Trii, para que sean compatibles sin conversión.\n *\n * Módulo puro: sin React, sin MUI, sin Redux, sin dominio. Se publica también\n * por el subpath `@trii/components/async-state` para que un slice pueda\n * consumirlo sin arrastrar la UI del paquete.\n *\n * Guía de uso: docs/ASYNC_STATE.md\n */\n\nexport type AsyncStatus = 'idle' | 'loading' | 'succeeded' | 'rejected';\n\n/**\n * Estado \"crudo\" persistible: es lo que guarda un slice de Redux o el estado\n * interno de `useAsyncData`. Los flags derivados se calculan con\n * `deriveAsyncState` (nunca se almacenan, para evitar inconsistencias).\n */\nexport interface AsyncData<T> {\n status: AsyncStatus;\n /** Últimos datos válidos. Se preservan durante refetches y errores. */\n data: T | undefined;\n /** Mensaje del último error (null si la última operación fue exitosa). */\n error: string | null;\n /** Timestamp (Date.now()) del último fetch exitoso. Base para staleness. */\n updatedAt: number | null;\n}\n\n/** Estado derivado listo para consumir desde la UI. */\nexport interface AsyncState<T> extends AsyncData<T> {\n /** true si hay datos utilizables para mostrar (no undefined ni \"vacíos\"). */\n hasData: boolean;\n /** Carga inicial: está cargando y NO hay datos que mostrar → bloqueante. */\n isInitialLoading: boolean;\n /** Revalidación: está cargando y SÍ hay datos → no bloquear la UI. */\n isRevalidating: boolean;\n /** Vacío real: la última carga fue exitosa y no hay datos que mostrar. */\n isEmpty: boolean;\n}\n\n/** Decide si un dato cuenta como \"vacío\" (p.ej. lista sin elementos). */\nexport type IsEmptyFn<T> = (data: T) => boolean;\n\n/**\n * Vacío por defecto: `null`/`undefined` y arrays sin elementos.\n * Cada feature puede aportar su propia regla (p.ej. \"objeto sin campos\").\n */\nexport const defaultIsEmpty = <T>(data: T): boolean => {\n if (data === null || data === undefined) return true;\n if (Array.isArray(data)) return data.length === 0;\n return false;\n};\n\n/** Estado inicial: nunca se hizo un fetch. */\nexport const asyncIdle = <T>(): AsyncData<T> => ({\n status: 'idle',\n data: undefined,\n error: null,\n updatedAt: null,\n});\n\n/**\n * Transición a \"request en curso\".\n * Por defecto preserva los datos previos (refetch no bloqueante).\n * Pasar `clearData: true` solo cuando los datos viejos dejarían de ser\n * válidos para la nueva request (p.ej. cambio de contacto seleccionado).\n */\nexport const asyncRequestStarted = <T>(\n prev: AsyncData<T>,\n options?: { clearData?: boolean }\n): AsyncData<T> => ({\n status: 'loading',\n data: options?.clearData ? undefined : prev.data,\n error: null,\n updatedAt: prev.updatedAt,\n});\n\n/** Transición a éxito: guarda datos, limpia error y sella `updatedAt`. */\nexport const asyncRequestSucceeded = <T>(data: T): AsyncData<T> => ({\n status: 'succeeded',\n data,\n error: null,\n updatedAt: Date.now(),\n});\n\n/**\n * Transición a error: guarda el mensaje y PRESERVA los datos previos\n * para que la UI pueda seguir mostrándolos (error con datos).\n */\nexport const asyncRequestFailed = <T>(\n error: string,\n prev: AsyncData<T>\n): AsyncData<T> => ({\n status: 'rejected',\n data: prev.data,\n error,\n updatedAt: prev.updatedAt,\n});\n\n/**\n * Deriva los flags de UI a partir del estado crudo. Es la ÚNICA fuente de\n * verdad para interpretar un estado asíncrono: la usan `useAsyncData`,\n * los selectores de Redux y `<AsyncContent>`.\n *\n * Uso con un slice existente (sin reescribirlo):\n *\n * ```ts\n * const selectChannelsAsyncState = createSelector(\n * selectChannelsState,\n * (state) =>\n * deriveAsyncState({\n * status: state.status.fetch,\n * data: state.channels,\n * error: state.error,\n * })\n * );\n * ```\n */\nexport const deriveAsyncState = <T>(input: {\n status: AsyncStatus;\n data: T | undefined;\n error?: string | null;\n updatedAt?: number | null;\n isEmpty?: IsEmptyFn<T>;\n}): AsyncState<T> => {\n const { status, data, error = null, updatedAt = null } = input;\n const isEmptyFn: IsEmptyFn<T> = input.isEmpty ?? defaultIsEmpty;\n\n const hasData = data !== undefined && !isEmptyFn(data);\n const isLoading = status === 'loading';\n\n return {\n status,\n data,\n error,\n updatedAt,\n hasData,\n isInitialLoading: isLoading && !hasData,\n isRevalidating: isLoading && hasData,\n isEmpty: status === 'succeeded' && !hasData,\n };\n};\n\n/** true si el dato tiene más de `staleTime` ms (o nunca se cargó). */\nexport const isStale = (\n updatedAt: number | null,\n staleTime: number,\n now: number = Date.now()\n): boolean => updatedAt === null || now - updatedAt > staleTime;\n","/**\n * Extrae un mensaje legible de cualquier error (axios, Error, string...).\n *\n * Orden de preferencia:\n * 1. `error.response.data.message` / `error.response.data.error` (API Trii).\n * 2. `error.message` (Error estándar, p.ej. \"Network Error\" de axios).\n * 3. El string recibido tal cual.\n * 4. `fallback`.\n *\n * No traduce: la traducción de mensajes genéricos ocurre en la UI\n * (`<ErrorState>`); esto preserva el detalle técnico o del backend.\n *\n * Tipa axios por duck-typing a propósito: el módulo no importa axios, así que\n * sirve igual con fetch o con cualquier cliente HTTP.\n */\nexport const getErrorMessage = (\n error: unknown,\n fallback = 'Unknown error'\n): string => {\n if (typeof error === 'string' && error.length > 0) return error;\n\n if (error !== null && typeof error === 'object') {\n const candidate = error as {\n response?: { data?: { message?: unknown; error?: unknown } };\n message?: unknown;\n };\n\n const apiMessage =\n candidate.response?.data?.message ?? candidate.response?.data?.error;\n if (typeof apiMessage === 'string' && apiMessage.length > 0) {\n return apiMessage;\n }\n\n if (typeof candidate.message === 'string' && candidate.message.length > 0) {\n return candidate.message;\n }\n }\n\n return fallback;\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { UseAsyncDataResult } from './types';\nimport {\n AsyncData,\n IsEmptyFn,\n asyncIdle,\n asyncRequestFailed,\n asyncRequestStarted,\n asyncRequestSucceeded,\n deriveAsyncState,\n} from './asyncState';\nimport { getErrorMessage } from './getErrorMessage';\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Ciclo de vida completo de un dato remoto LOCAL a un panel (sin Redux).\n *\n * Comportamiento:\n * - Fetch al montar (configurable con `fetchOnMount`) y cuando cambian `deps`.\n * - Carga inicial sin datos → `isInitialLoading` (bloqueante).\n * - Refetch con datos → `isRevalidating`: los datos siguen visibles.\n * - Error con datos previos → `status: 'rejected'` + datos preservados.\n * - Error sin datos → `error` para mostrar un estado de error con `retry`.\n * - `refetch()`/`retry()` re-ejecutan el fetcher; nunca bloquean si hay datos.\n * - Cancelación automática (AbortSignal) y guarda de carrera: si se dispara\n * una request nueva, las respuestas viejas se descartan.\n * - `autoRetry` opcional con backoff lineal antes de mostrar el error.\n *\n * Usar Redux en su lugar cuando el dato se comparte entre varios paneles o\n * se actualiza por socket (ver docs/ASYNC_STATE.md §¿Redux o hook?).\n *\n * @example\n * const state = useAsyncData(\n * (signal) => reportsService.getReports(url, { signal }),\n * { deps: [url] }\n * );\n * return (\n * <AsyncContent state={state} onRetry={state.retry}>\n * {(reports) => <ReportList reports={reports} />}\n * </AsyncContent>\n * );\n */\nexport function useAsyncData<T>(\n fetcher: (signal: AbortSignal) => Promise<T>,\n options: {\n /** Regla de \"vacío\" del dato (default: null/undefined o array vacío). */\n isEmpty?: IsEmptyFn<T>;\n /** Disparar el fetch al montar y al cambiar `deps` (default: true). */\n fetchOnMount?: boolean;\n /**\n * Preservar datos previos durante refetches (default: true).\n * Poner en false solo si los datos viejos serían inválidos/engañosos.\n */\n keepPreviousData?: boolean;\n /**\n * Reintentos automáticos antes de marcar error (default: sin reintentos;\n * el usuario decide con el botón de retry).\n */\n autoRetry?: { attempts: number; delayMs?: number };\n /** Dependencias que re-disparan el fetch (p.ej. un id o filtro). */\n deps?: ReadonlyArray<unknown>;\n } = {}\n): UseAsyncDataResult<T> {\n const {\n isEmpty,\n fetchOnMount = true,\n keepPreviousData = true,\n autoRetry,\n deps = [],\n } = options;\n\n const [state, setState] = useState<AsyncData<T>>(() => asyncIdle<T>());\n\n // Refs: la última versión del fetcher y el control de carrera/cancelación.\n // Guardar el fetcher en ref evita re-ejecutar el efecto cuando el caller\n // pasa una arrow function inline (caso común).\n const fetcherRef = useRef(fetcher);\n fetcherRef.current = fetcher;\n const requestIdRef = useRef(0);\n const abortRef = useRef<AbortController | null>(null);\n\n const autoRetryAttempts = autoRetry?.attempts ?? 0;\n const autoRetryDelayMs = autoRetry?.delayMs ?? 500;\n\n const execute = useCallback(async (): Promise<void> => {\n const requestId = ++requestIdRef.current;\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setState((prev) =>\n asyncRequestStarted(prev, { clearData: !keepPreviousData })\n );\n\n const maxAttempts = Math.max(0, autoRetryAttempts);\n\n for (let attempt = 0; ; attempt += 1) {\n try {\n const data = await fetcherRef.current(controller.signal);\n // Respuesta vieja (hubo otra request después): se descarta.\n if (requestId !== requestIdRef.current || controller.signal.aborted) {\n return;\n }\n setState(asyncRequestSucceeded(data));\n return;\n } catch (error) {\n // Cancelada por desmontaje o por una request nueva: no es un error.\n if (requestId !== requestIdRef.current || controller.signal.aborted) {\n return;\n }\n if (attempt < maxAttempts) {\n // Backoff lineal: 1x, 2x, 3x... el delay base.\n await sleep(autoRetryDelayMs * (attempt + 1));\n if (requestId !== requestIdRef.current || controller.signal.aborted) {\n return;\n }\n continue;\n }\n setState((prev) => asyncRequestFailed(getErrorMessage(error), prev));\n return;\n }\n }\n }, [keepPreviousData, autoRetryAttempts, autoRetryDelayMs]);\n\n useEffect(() => {\n if (fetchOnMount) {\n // Fire-and-forget: el estado se actualiza vía setState dentro de execute.\n execute();\n }\n return () => {\n // Desmontaje o cambio de deps: cancela e invalida la request en curso.\n requestIdRef.current += 1;\n abortRef.current?.abort();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fetchOnMount, execute, ...deps]);\n\n const reset = useCallback((): void => {\n requestIdRef.current += 1;\n abortRef.current?.abort();\n setState(asyncIdle<T>());\n }, []);\n\n const derived = deriveAsyncState({ ...state, isEmpty });\n\n return { ...derived, refetch: execute, retry: execute, reset };\n}\n"],"names":["defaultIsEmpty","data","asyncIdle","asyncRequestStarted","prev","options","asyncRequestSucceeded","asyncRequestFailed","error","deriveAsyncState","input","status","updatedAt","isEmptyFn","hasData","isLoading","isStale","staleTime","now","getErrorMessage","fallback","candidate","apiMessage","sleep","ms","resolve","useAsyncData","fetcher","isEmpty","fetchOnMount","keepPreviousData","autoRetry","deps","state","setState","useState","fetcherRef","useRef","requestIdRef","abortRef","autoRetryAttempts","autoRetryDelayMs","execute","useCallback","requestId","controller","maxAttempts","attempt","useEffect","reset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"async-state.js","sources":["../../src/asyncState/asyncState.ts","../../src/asyncState/getErrorMessage.ts","../../src/asyncState/useAsyncData.ts"],"sourcesContent":["/**\r\n * Modelo canónico de estado asíncrono (loading / error / caché remota).\r\n *\r\n * Unifica cómo los paneles representan el ciclo de vida de un dato remoto:\r\n *\r\n * - `idle`/`loading` sin datos → carga inicial (bloqueante: skeleton/spinner).\r\n * - `loading` con datos → revalidación NO bloqueante (`isRevalidating`).\r\n * - `rejected` con datos → error manteniendo datos previos + retry.\r\n * - `rejected` sin datos → error bloqueante con retry.\r\n * - `succeeded` sin datos → estado realmente vacío (`isEmpty`).\r\n *\r\n * Los literales de `AsyncStatus` coinciden con el `RequestStatus` que usan los\r\n * slices de los frontends Trii, para que sean compatibles sin conversión.\r\n *\r\n * Módulo puro: sin React, sin MUI, sin Redux, sin dominio. Se publica también\r\n * por el subpath `@trii/components/async-state` para que un slice pueda\r\n * consumirlo sin arrastrar la UI del paquete.\r\n *\r\n * Guía de uso: docs/ASYNC_STATE.md\r\n */\r\n\r\nexport type AsyncStatus = 'idle' | 'loading' | 'succeeded' | 'rejected';\r\n\r\n/**\r\n * Estado \"crudo\" persistible: es lo que guarda un slice de Redux o el estado\r\n * interno de `useAsyncData`. Los flags derivados se calculan con\r\n * `deriveAsyncState` (nunca se almacenan, para evitar inconsistencias).\r\n */\r\nexport interface AsyncData<T> {\r\n status: AsyncStatus;\r\n /** Últimos datos válidos. Se preservan durante refetches y errores. */\r\n data: T | undefined;\r\n /** Mensaje del último error (null si la última operación fue exitosa). */\r\n error: string | null;\r\n /** Timestamp (Date.now()) del último fetch exitoso. Base para staleness. */\r\n updatedAt: number | null;\r\n}\r\n\r\n/** Estado derivado listo para consumir desde la UI. */\r\nexport interface AsyncState<T> extends AsyncData<T> {\r\n /** true si hay datos utilizables para mostrar (no undefined ni \"vacíos\"). */\r\n hasData: boolean;\r\n /** Carga inicial: está cargando y NO hay datos que mostrar → bloqueante. */\r\n isInitialLoading: boolean;\r\n /** Revalidación: está cargando y SÍ hay datos → no bloquear la UI. */\r\n isRevalidating: boolean;\r\n /** Vacío real: la última carga fue exitosa y no hay datos que mostrar. */\r\n isEmpty: boolean;\r\n}\r\n\r\n/** Decide si un dato cuenta como \"vacío\" (p.ej. lista sin elementos). */\r\nexport type IsEmptyFn<T> = (data: T) => boolean;\r\n\r\n/**\r\n * Vacío por defecto: `null`/`undefined` y arrays sin elementos.\r\n * Cada feature puede aportar su propia regla (p.ej. \"objeto sin campos\").\r\n */\r\nexport const defaultIsEmpty = <T>(data: T): boolean => {\r\n if (data === null || data === undefined) return true;\r\n if (Array.isArray(data)) return data.length === 0;\r\n return false;\r\n};\r\n\r\n/** Estado inicial: nunca se hizo un fetch. */\r\nexport const asyncIdle = <T>(): AsyncData<T> => ({\r\n status: 'idle',\r\n data: undefined,\r\n error: null,\r\n updatedAt: null,\r\n});\r\n\r\n/**\r\n * Transición a \"request en curso\".\r\n * Por defecto preserva los datos previos (refetch no bloqueante).\r\n * Pasar `clearData: true` solo cuando los datos viejos dejarían de ser\r\n * válidos para la nueva request (p.ej. cambio de contacto seleccionado).\r\n */\r\nexport const asyncRequestStarted = <T>(\r\n prev: AsyncData<T>,\r\n options?: { clearData?: boolean }\r\n): AsyncData<T> => ({\r\n status: 'loading',\r\n data: options?.clearData ? undefined : prev.data,\r\n error: null,\r\n updatedAt: prev.updatedAt,\r\n});\r\n\r\n/** Transición a éxito: guarda datos, limpia error y sella `updatedAt`. */\r\nexport const asyncRequestSucceeded = <T>(data: T): AsyncData<T> => ({\r\n status: 'succeeded',\r\n data,\r\n error: null,\r\n updatedAt: Date.now(),\r\n});\r\n\r\n/**\r\n * Transición a error: guarda el mensaje y PRESERVA los datos previos\r\n * para que la UI pueda seguir mostrándolos (error con datos).\r\n */\r\nexport const asyncRequestFailed = <T>(\r\n error: string,\r\n prev: AsyncData<T>\r\n): AsyncData<T> => ({\r\n status: 'rejected',\r\n data: prev.data,\r\n error,\r\n updatedAt: prev.updatedAt,\r\n});\r\n\r\n/**\r\n * Deriva los flags de UI a partir del estado crudo. Es la ÚNICA fuente de\r\n * verdad para interpretar un estado asíncrono: la usan `useAsyncData`,\r\n * los selectores de Redux y `<AsyncContent>`.\r\n *\r\n * Uso con un slice existente (sin reescribirlo):\r\n *\r\n * ```ts\r\n * const selectChannelsAsyncState = createSelector(\r\n * selectChannelsState,\r\n * (state) =>\r\n * deriveAsyncState({\r\n * status: state.status.fetch,\r\n * data: state.channels,\r\n * error: state.error,\r\n * })\r\n * );\r\n * ```\r\n */\r\nexport const deriveAsyncState = <T>(input: {\r\n status: AsyncStatus;\r\n data: T | undefined;\r\n error?: string | null;\r\n updatedAt?: number | null;\r\n isEmpty?: IsEmptyFn<T>;\r\n}): AsyncState<T> => {\r\n const { status, data, error = null, updatedAt = null } = input;\r\n const isEmptyFn: IsEmptyFn<T> = input.isEmpty ?? defaultIsEmpty;\r\n\r\n const hasData = data !== undefined && !isEmptyFn(data);\r\n const isLoading = status === 'loading';\r\n\r\n return {\r\n status,\r\n data,\r\n error,\r\n updatedAt,\r\n hasData,\r\n isInitialLoading: isLoading && !hasData,\r\n isRevalidating: isLoading && hasData,\r\n isEmpty: status === 'succeeded' && !hasData,\r\n };\r\n};\r\n\r\n/** true si el dato tiene más de `staleTime` ms (o nunca se cargó). */\r\nexport const isStale = (\r\n updatedAt: number | null,\r\n staleTime: number,\r\n now: number = Date.now()\r\n): boolean => updatedAt === null || now - updatedAt > staleTime;\r\n","/**\r\n * Extrae un mensaje legible de cualquier error (axios, Error, string...).\r\n *\r\n * Orden de preferencia:\r\n * 1. `error.response.data.message` / `error.response.data.error` (API Trii).\r\n * 2. `error.message` (Error estándar, p.ej. \"Network Error\" de axios).\r\n * 3. El string recibido tal cual.\r\n * 4. `fallback`.\r\n *\r\n * No traduce: la traducción de mensajes genéricos ocurre en la UI\r\n * (`<ErrorState>`); esto preserva el detalle técnico o del backend.\r\n *\r\n * Tipa axios por duck-typing a propósito: el módulo no importa axios, así que\r\n * sirve igual con fetch o con cualquier cliente HTTP.\r\n */\r\nexport const getErrorMessage = (\r\n error: unknown,\r\n fallback = 'Unknown error'\r\n): string => {\r\n if (typeof error === 'string' && error.length > 0) return error;\r\n\r\n if (error !== null && typeof error === 'object') {\r\n const candidate = error as {\r\n response?: { data?: { message?: unknown; error?: unknown } };\r\n message?: unknown;\r\n };\r\n\r\n const apiMessage =\r\n candidate.response?.data?.message ?? candidate.response?.data?.error;\r\n if (typeof apiMessage === 'string' && apiMessage.length > 0) {\r\n return apiMessage;\r\n }\r\n\r\n if (typeof candidate.message === 'string' && candidate.message.length > 0) {\r\n return candidate.message;\r\n }\r\n }\r\n\r\n return fallback;\r\n};\r\n","import { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { UseAsyncDataResult } from './types';\r\nimport {\r\n AsyncData,\r\n IsEmptyFn,\r\n asyncIdle,\r\n asyncRequestFailed,\r\n asyncRequestStarted,\r\n asyncRequestSucceeded,\r\n deriveAsyncState,\r\n} from './asyncState';\r\nimport { getErrorMessage } from './getErrorMessage';\r\n\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\n/**\r\n * Ciclo de vida completo de un dato remoto LOCAL a un panel (sin Redux).\r\n *\r\n * Comportamiento:\r\n * - Fetch al montar (configurable con `fetchOnMount`) y cuando cambian `deps`.\r\n * - Carga inicial sin datos → `isInitialLoading` (bloqueante).\r\n * - Refetch con datos → `isRevalidating`: los datos siguen visibles.\r\n * - Error con datos previos → `status: 'rejected'` + datos preservados.\r\n * - Error sin datos → `error` para mostrar un estado de error con `retry`.\r\n * - `refetch()`/`retry()` re-ejecutan el fetcher; nunca bloquean si hay datos.\r\n * - Cancelación automática (AbortSignal) y guarda de carrera: si se dispara\r\n * una request nueva, las respuestas viejas se descartan.\r\n * - `autoRetry` opcional con backoff lineal antes de mostrar el error.\r\n *\r\n * Usar Redux en su lugar cuando el dato se comparte entre varios paneles o\r\n * se actualiza por socket (ver docs/ASYNC_STATE.md §¿Redux o hook?).\r\n *\r\n * @example\r\n * const state = useAsyncData(\r\n * (signal) => reportsService.getReports(url, { signal }),\r\n * { deps: [url] }\r\n * );\r\n * return (\r\n * <AsyncContent state={state} onRetry={state.retry}>\r\n * {(reports) => <ReportList reports={reports} />}\r\n * </AsyncContent>\r\n * );\r\n */\r\nexport function useAsyncData<T>(\r\n fetcher: (signal: AbortSignal) => Promise<T>,\r\n options: {\r\n /** Regla de \"vacío\" del dato (default: null/undefined o array vacío). */\r\n isEmpty?: IsEmptyFn<T>;\r\n /** Disparar el fetch al montar y al cambiar `deps` (default: true). */\r\n fetchOnMount?: boolean;\r\n /**\r\n * Preservar datos previos durante refetches (default: true).\r\n * Poner en false solo si los datos viejos serían inválidos/engañosos.\r\n */\r\n keepPreviousData?: boolean;\r\n /**\r\n * Reintentos automáticos antes de marcar error (default: sin reintentos;\r\n * el usuario decide con el botón de retry).\r\n */\r\n autoRetry?: { attempts: number; delayMs?: number };\r\n /** Dependencias que re-disparan el fetch (p.ej. un id o filtro). */\r\n deps?: ReadonlyArray<unknown>;\r\n } = {}\r\n): UseAsyncDataResult<T> {\r\n const {\r\n isEmpty,\r\n fetchOnMount = true,\r\n keepPreviousData = true,\r\n autoRetry,\r\n deps = [],\r\n } = options;\r\n\r\n const [state, setState] = useState<AsyncData<T>>(() => asyncIdle<T>());\r\n\r\n // Refs: la última versión del fetcher y el control de carrera/cancelación.\r\n // Guardar el fetcher en ref evita re-ejecutar el efecto cuando el caller\r\n // pasa una arrow function inline (caso común).\r\n const fetcherRef = useRef(fetcher);\r\n fetcherRef.current = fetcher;\r\n const requestIdRef = useRef(0);\r\n const abortRef = useRef<AbortController | null>(null);\r\n\r\n const autoRetryAttempts = autoRetry?.attempts ?? 0;\r\n const autoRetryDelayMs = autoRetry?.delayMs ?? 500;\r\n\r\n const execute = useCallback(async (): Promise<void> => {\r\n const requestId = ++requestIdRef.current;\r\n abortRef.current?.abort();\r\n const controller = new AbortController();\r\n abortRef.current = controller;\r\n\r\n setState((prev) =>\r\n asyncRequestStarted(prev, { clearData: !keepPreviousData })\r\n );\r\n\r\n const maxAttempts = Math.max(0, autoRetryAttempts);\r\n\r\n for (let attempt = 0; ; attempt += 1) {\r\n try {\r\n const data = await fetcherRef.current(controller.signal);\r\n // Respuesta vieja (hubo otra request después): se descarta.\r\n if (requestId !== requestIdRef.current || controller.signal.aborted) {\r\n return;\r\n }\r\n setState(asyncRequestSucceeded(data));\r\n return;\r\n } catch (error) {\r\n // Cancelada por desmontaje o por una request nueva: no es un error.\r\n if (requestId !== requestIdRef.current || controller.signal.aborted) {\r\n return;\r\n }\r\n if (attempt < maxAttempts) {\r\n // Backoff lineal: 1x, 2x, 3x... el delay base.\r\n await sleep(autoRetryDelayMs * (attempt + 1));\r\n if (requestId !== requestIdRef.current || controller.signal.aborted) {\r\n return;\r\n }\r\n continue;\r\n }\r\n setState((prev) => asyncRequestFailed(getErrorMessage(error), prev));\r\n return;\r\n }\r\n }\r\n }, [keepPreviousData, autoRetryAttempts, autoRetryDelayMs]);\r\n\r\n useEffect(() => {\r\n if (fetchOnMount) {\r\n // Fire-and-forget: el estado se actualiza vía setState dentro de execute.\r\n execute();\r\n }\r\n return () => {\r\n // Desmontaje o cambio de deps: cancela e invalida la request en curso.\r\n requestIdRef.current += 1;\r\n abortRef.current?.abort();\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [fetchOnMount, execute, ...deps]);\r\n\r\n const reset = useCallback((): void => {\r\n requestIdRef.current += 1;\r\n abortRef.current?.abort();\r\n setState(asyncIdle<T>());\r\n }, []);\r\n\r\n const derived = deriveAsyncState({ ...state, isEmpty });\r\n\r\n return { ...derived, refetch: execute, retry: execute, reset };\r\n}\r\n"],"names":["defaultIsEmpty","data","asyncIdle","asyncRequestStarted","prev","options","asyncRequestSucceeded","asyncRequestFailed","error","deriveAsyncState","input","status","updatedAt","isEmptyFn","hasData","isLoading","isStale","staleTime","now","getErrorMessage","fallback","candidate","apiMessage","sleep","ms","resolve","useAsyncData","fetcher","isEmpty","fetchOnMount","keepPreviousData","autoRetry","deps","state","setState","useState","fetcherRef","useRef","requestIdRef","abortRef","autoRetryAttempts","autoRetryDelayMs","execute","useCallback","requestId","controller","maxAttempts","attempt","useEffect","reset"],"mappings":"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"}
|